创建包含RestKit库的静态库

时间:2011-11-08 17:11:24

标签: objective-c ios xcode4.2 restkit

我在使用RestKit Library时遇到了另一个问题。

我的目标是为我的公司创建一个特定的库,可以用于所有IOS开发项目。

为此,我创建了一个库,在其中我导入了库RestKIt。 我按照RestKit xCode 4.x安装指南。

然后我创建了一个新项目,在其中我导入了名为“m2mBackEnd”的库。

在我使用该库的测试项目中,我对Oppers执行了以下操作:

1 - 我导入了库“m2mBackEnd”。

2 - 在“Build Settings / Other Linker Flags”中我添加了“-ObjC”。

3 - 在“构建设置/用户头搜索路径”中,我添加了包含所有'的文件夹。 H”。

4 - 在“构建阶段/目标依赖关系”中,我将依赖项添加到“m2mBackEnd”

5 - 在“构建阶段/链接二进制文件库”中我添加了“libm2mBackEnd.a”。

但它不起作用我遇到错误:

undefined symbols for architecture i386:
"_CFHTTPMessageCreateRequest", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_CFHTTPMessageAddAuthentication", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_CFHTTPMessageCopyHeaderFieldValue", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_kCFHTTPAuthenticationSchemeBasic", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_kCFHTTPVersion1_1", referenced from:
  -[RKRequest addHeadersToRequest] in libm2mBackEnd.a(RKRequest.o)
"_SCNetworkReachabilityCreateWithAddress", referenced from:
  -[RKReachabilityObserver initWithAddress:] in    libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCNetworkReachabilityCreateWithName", referenced from:
  -[RKReachabilityObserver initWithHost:] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCNetworkReachabilityGetFlags", referenced from:
  -[RKReachabilityObserver getFlags] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCNetworkReachabilitySetCallback", referenced from:
  -[RKReachabilityObserver scheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCError", referenced from:
  -[RKReachabilityObserver scheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
  -[RKReachabilityObserver unscheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCErrorString", referenced from:
  -[RKReachabilityObserver scheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
  -[RKReachabilityObserver unscheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_SCNetworkReachabilitySetDispatchQueue", referenced from:
  -[RKReachabilityObserver scheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
  -[RKReachabilityObserver unscheduleObserver] in libm2mBackEnd.a(RKReachabilityObserver.o)
"_UTTypeCreatePreferredIdentifierForTag", referenced from:
  -[NSString(RestKit) MIMETypeForPathExtension] in libm2mBackEnd.a(NSString+RestKit.o)
"_UTTypeCopyPreferredTagWithClass", referenced from:
  -[NSString(RestKit) MIMETypeForPathExtension] in libm2mBackEnd.a(NSString+RestKit.o)
"_kUTTagClassFilenameExtension", referenced from:
  -[NSString(RestKit) MIMETypeForPathExtension] in libm2mBackEnd.a(NSString+RestKit.o)
"_kUTTagClassMIMEType", referenced from:
  -[NSString(RestKit) MIMETypeForPathExtension] in libm2mBackEnd.a(NSString+RestKit.o)
"_xmlNodeGetContent", referenced from:
  -[RKXMLParserLibXML parseNode:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlNewParserCtxt", referenced from:
  -[RKXMLParserLibXML parseXML:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlParseMemory", referenced from:
  -[RKXMLParserLibXML parseXML:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlFreeDoc", referenced from:
  -[RKXMLParserLibXML parseXML:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlFreeParserCtxt", referenced from:
  -[RKXMLParserLibXML parseXML:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
"_xmlFree", referenced from:
  -[RKXMLParserLibXML parseNode:] in libm2mBackEnd.a(RKXMLParserLibXML.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我错过了什么吗?或者做错了什么?

是否可以使用RestKit创建库?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我希望您此时可以解决此问题,如果没有尝试以下安装步骤

检查您是否完成了自述文件中提到的安装步骤,并添加了其中提到的所有框架工作,以及构建设置中提到的更改

Xcode 4.x(Git子模块)

  1. 添加子模块:git submodule add git://github.com/RestKit/RestKit.git RestKit
  2. 打开要在Xcode中添加RestKit的项目。
  3. 关注项目并选择“查看”菜单> “导航员”> “项目”将项目文件列表置于视图中。
  4. 从Finder中拖动RestKit.xcodeproj文件并将其放在“.xcodeproj”上。
  5. 点击左侧边栏中的项目名称,打开窗口右侧窗格中的项目设置视图。
  6. 在中间窗格中,您会看到项目的 PROJECT TARGETS 标题。单击项目名称,然后选择顶部的构建设置,打开整个项目的构建设置编辑器。
  7. 找到标题搜索路径设置。双击并添加新条目。将搜索路径添加到已添加到项目的"$(SOURCE_ROOT)/RestKit/Build"目录中。 不要检查Recursive复选框。
  8. 找到图书馆搜索路径设置。双击并添加新条目。将搜索路径添加到已添加到项目中的"$(SOURCE_ROOT)/RestKit/Build/$(BUILD_STYLE)-$(PLATFORM_NAME)"目录 注意:仅当您使用DerivedData NOT 时才需要这样做。
  9. 找到其他链接标记条目并双击它。使用 + 按钮添加新条目并输入-ObjC -all_load。使用完成按钮关闭编辑器。
  10. 在编辑器窗格中间的 TARGETS 列表中找到要添加RestKit的目标。选择它以在窗口的右窗格中打开目标设置编辑器。
  11. 点击窗口顶部的构建阶段标签,打开Build Phases编辑器。
  12. 点击目标依赖关系链接二进制文件库项旁边的显示三角形。
  13. 目标依赖关系部分中,点击 + 按钮以打开目标选择表。点击 RestKit 汇总目标(它将有牛眼图标),然后点击添加按钮创建依赖关系。
  14. 带库的链接二进制文件部分中,单击 + 按钮以打开库选择表。在这里,我们需要指示目标链接所有必需的RestKit库和几个系统库。选择以下每个项目(一次一个或按住Command键同时选择所有项目),然后单击添加按钮:
    • libRestKitCoreData.a - 可选。仅在您使用核心数据时才有必要。
    • libRestKitJSONParserJSONKit.a
    • libRestKitNetwork.a
    • libRestKitObjectMapping.a
    • libRestKitSupport.a
    • CFNetwork.framework
    • CoreData.framework - 可选。仅在您使用Core Data时才需要
    • MobileCoreServices.framework
    • SystemConfiguration.framework
    • libxml2.dylib - 可选。只有在从XML有效负载映射并将libRestKitXMLParserLibxml.a链接到应用程序时才有必要。
  15. 在继续之前,验证所有库是否都显示在 Link Binary with Libraries 部分。
  16. 恭喜,您现在已经完成将RestKit添加到基于Xcode 4的项目中了!

    您现在只需要在应用程序的适当位置添加RestKit库的包含。相关的内容包括:

    #import <RestKit/RestKit.h>
    // And if you are using Core Data...
    #import <RestKit/CoreData/CoreData.h>
    

答案 1 :(得分:0)

尝试将CFNetwork.framework添加到项目的目标中(为我解决了前6个错误)

答案 2 :(得分:0)

安装RestKit的推荐方法是通过CocoaPods包管理器,因为它提供了灵活的依赖关系管理和简单的安装。为了获得最佳效果,建议您使用通过Homebrew安装的Git&gt; = 1.8.0通过CocoaPods&gt; = 0.19.1进行安装。

安装CocoaPods(如果尚未提供):

$ [sudo] gem install cocoapods
$ pod setup

切换到Xcode项目的目录,然后创建并编辑Podfile并添加RestKit:

$ cd /path/to/MyProject
$ touch Podfile
$ edit Podfile

platform :ios, '5.0' 
# Or platform :osx, '10.7'
pod 'RestKit', '~> 0.20.0'

# Testing and Search are optional components
pod 'RestKit/Testing', '~> 0.20.0'
pod 'RestKit/Search',  '~> 0.20.0'

安装到您的项目中:

$ pod install

从.xcworkspace文件(不是通常的项目文件)中打开Xcode中的项目

$ open MyProject.xcworkspace

请注意,如果安装失败,可能是因为您安装的版本低于CocoaPods所期望的Git版本。请确保您通过执行git --version运行Git&gt; = 1.8.0。您可以通过执行pod install --verbose来全面了解安装详细信息。