忽略 iOS 应用程序中的库以针对模拟器进行编译

Ignore a Library in an iOS app to compile for simulator

我看到一些 post 已经引用了我的问题并解决了它,但它在 2 年前就很活跃,我尝试使用它但它对我不起作用(可能是Xcode 之类的) 这是相关的 posts :

我有一个项目可以使用 vuforia,一个 c++ 库,但是这个库与模拟器不兼容。我想为模拟器编译我的项目(即使使用 lib 的部分显然不会工作)来测试我的应用程序的其他功能。

在我的构建设置中,我有这个:

Header 搜索路径 : ../../build/include

库搜索路径:../../build/lib/arm

我在其他链接器标志

中什么都没有

在 post 之后,我尝试删除专门用于模拟器的库,目前我有:

编译错误发生变化,现在 "Vuforia/Vuforia.h file not found" 在我的一个使用该库的视图控制器中。

所以我处理了它,并添加了预处理器指令

#if !(TARGET_OS_SIMULATOR)
....
#endif

它适用于其中的大部分,但仍然存在一个错误,即使它位于如上所示的块内

#if !(TARGET_OS_SIMULATOR)

#import <QuartzCore/QuartzCore.h>
#import <OpenGLES/ES2/gl.h>
#import <OpenGLES/ES2/glext.h>
#import <sys/time.h>

#import <Vuforia/Vuforia.h>
#import <Vuforia/State.h>
#import <Vuforia/Tool.h>
#import <Vuforia/Renderer.h>
#import <Vuforia/TrackableResult.h>
#import <Vuforia/VideoBackgroundConfig.h>
...
#endif

最后我也试过 Other Linker Flags 但它没有帮助...

你能帮我找到如何只为 iOS 设备和 运行 模拟器上的应用程序绑定库吗?

谢谢!

我会避免设置不同的 header 搜索路径。

使用您提到的 TargetConditionals.h 在为模拟器构建时禁用 Vuforia。然后,为了处理链接,我建议使用 OTHER_LDFLAGS 而不是 "Link with libraries" 构建阶段,因为您无法按平台条件化该构建阶段。您可以使用 xcconfig 轻松完成此操作,例如:

OTHER_LDFLAGS = -framework Vuforia
OTHER_LDFLAGS[sdk=*simulator] =