只有在使用设备而不是模拟器进行testing时才可以使用静态库吗?

我有外部封闭的库,只能用armv7s(etc)编译。 当我尝试对模拟器进行编译显然它不运行,并显示一些错误。 我不想插入这个库到我的代码,除非我可以configurationXcode使用这个库,只有当我用设备testing。 不幸的是,我试图用cocoapods做到没有成功,我想知道有没有办法做到这一点?

是的,这可以做到。 我有一个类似的问题,只有在模拟器中导致链接器错误的框架,所以我build立我的项目,只为build设一个设备时使用框架。

以下假设你没有使用cocoa豆荚链接库。 我不确定如果你有什么需要改变的话。

  1. select您的目标,然后转到“构build阶段”选项卡。
  2. 在“链接二进制库”部分下,从列表中删除静态库。
  3. 转到“构build设置”选项卡。
  4. find“其他链接器标志”设置。
  5. 双击debugging值。 点击+并input-lsomelibrary
  6. 代替“somelibrary”input您的图书馆的实际名称减去领先的“lib”。 不要包含扩展名。
  7. selectdebugging值并注意一点圆圈+。 点击+。
  8. 点击新的“Any Architecture | Any SDK”部分,并将其更改为“Any iOS Simulator SDK”。
  9. 现在双击“Any iOS Simulator SDK”右边的值,并删除添加的-lsomelibrary条目。

现在做一个debugging版本。

上述改变基本上意味着除了iOS Simulator构build之外,所有的构build都将链接到库中。

您可能还需要进行一些代码更改。 任何引用来自库的头文件或其他符号的代码都应该如下所示包装:

#if !TARGET_IPHONE_SIMULATOR #import "somelibrary.h" #endif #if !TARGET_IPHONE_SIMULATOR // Use stuff from the library #endif 

原因是因为图书馆缺lessi386(模拟器)架构切片,而不是一个问题…

  1. 将您的库添加到项目
  2. 将所有对库的引用(包括导入)封装到debugging版与生产版的预处理器指令中。 预处理器指令来分离xcode中的目标
  3. pipe理你的scheme,使模拟器是debugging和生成(设备)设置为生产。
  4. 创build一个重复的生成目标…一个用于模拟器,一个用于设备/生产http://blog.just2us.com/2009/07/tutorial-creating-multiple-targets-for-xcode-iphone-projects/
  5. 在构build设置中,从用于“模拟器”目标的链接二进制库中移除该库

现在,当你使用“模拟”目标…库和所有相关的代码将被排除在外。

当您使用“设备”目标…代码和库将包括在内