有条件地链接Xcode中的第三方API

时间:2012-06-14 20:03:46

标签: iphone ios xcode4.2

我正在尝试将第三方API集成到我的iOS Universal应用程序中。如果在设备上运行,API工作正常,但在尝试在模拟器上运行时会抛出编译时链接错误。那么,如果我在模拟器上运行,有没有办法可以跳过静态库链接?

由于

3 个答案:

答案 0 :(得分:3)

实际上,这比我想象的容易得多。

步骤1:将链接器标记-ObjC-all_load添加到目标。这告诉objc运行时即使我们没有在代码中引用类,它仍然会将它加载到内存中。

第2步:在您的代码中,您可以执行以下操作:

Class cls = NSClassFromString(@"SomeClassInStaticLibrary");
if (cls == nil)
{
   // on the simulator
}
else
{
   // on the device, use the class like usual
   id myInstance = [[cls alloc] init];
}

不幸的是,您必须将所有内容称为id,因为如果包含标题,则会出现链接器错误。

它有点像黑客,但它确实有用。

答案 1 :(得分:0)

您可以做的是将静态库构建为FAT。编译armv和i386两种架构,以便在模拟器中运行。

您可以在此处找到有关此内容的更多信息,

http://mark.aufflick.com/blog/2010/11/18/making-a-fat-static-library-for-ios-device-and-simulator

答案 2 :(得分:0)

您可以在目标的Xcode(4.3)Build Settings选项卡中控制此设置。在谈到“其他链接器标志”时,您可以添加条件设置(单击并按住右下角的“+”图标,默认情况下显示“添加构建设置”)。在这里,您可以使用普通的-l / -L链接器标志指定要链接的库,但仅适用于指定为“Any iOS SDK”的构建,但不要为“Any iOS Simulator SDK”添加此标志。