在为iOS模拟器构建时,使Xcode忽略静态库

时间:2014-06-25 08:21:15

标签: ios objective-c xcode

我有一个Xcode项目,其中包含一个静态库项目,该项目使用另一个不支持iOS模拟器架构的静态库(Vuforia SDK:libQCAR.a)。

Vuforia SDK documentation州:

  

必须将Vuforia应用程序部署到设备上才能运行;它们无法在iOS模拟器中运行。

这是我的项目结构:

  • MyApp.xcodeproj
    • MyStaticLibrary.xcodeproj
      • 依赖于libQCAR.a
      • 的类
    • 框架
      • libMyStaticLibrary.a
      • libQCAR.a

我的问题是MyApp.xcodeproj没有为iOS模拟器构建,因为libQCAR.a不是为i386架构而构建的。

在构建i386时,有没有让MyApp.xcodeproj忽略libQCAR.a库?我可以使用#if !(TARGET_IPHONE_SIMULATOR)

禁用所有依赖于库的代码

4 个答案:

答案 0 :(得分:5)

您可以使用conditional build settings指定仅在给定平台上链接的库,而不是以通常的方式将库添加到项目中。具体来说,您需要指定:

 -lQCAR

在“其他链接标志”中。

看一下应该让事情变得更清晰的附加图像(在我只链接模拟器的图片中,你想要选择一个设备,我猜)。

另外,不要忘记将包含库的目录的路径添加到“Library Search Path”构建设置(这不需要是有条件的;它不会对模拟器造成任何伤害)。

Other linker flags

答案 1 :(得分:3)

这个问题与Xcode: Conditional Build Settings based on architecture (Device (ARM) vs Simulator (i386))

非常相似

我相信sergio的解决方案非常接近,但您是否尝试在其他链接器标志下指定库的完整路径(可能没有“-l” - 只是路径)?

答案 2 :(得分:2)

尝试告诉链接器您的静态库应该可选地链接。

  1. 选择构建目标
  2. 选择构建阶段
  3. 打开"链接二进制文件库"节
  4. 找到静态库的条目
  5. 在右侧:改变"必需"到"可选"
  6. 这肯定会在构建过程中产生警告,但构建应该会成功,并且您的应用程序不应该在运行时崩溃,因为您禁用了使用Static Lib的所有代码路径。

答案 3 :(得分:0)

在我的情况下,它应该清楚地指明哪个SDK使用哪个标志。

enter image description here

所以在Any iOS Simulator SDK中,你不应该包含库。

Any iOS SDK中,您应该包含它。就我而言,它是-lCloudReco