我有外部封闭的库,只能用armv7s(etc)编译。当我尝试编译模拟器时,显然它没有运行并显示一些错误。 我不想将此库插入到我的代码中,除非我可以将Xcode配置为仅在我使用设备进行测试时才使用此库。 不幸的是,我试图用cocoapods做这个没有成功,我想知道有没有办法做到这一点?
答案 0 :(得分:12)
是的,这可以做到。我有一个类似的问题,框架只在模拟器中导致链接器错误,所以我设置我的项目只在构建设备时使用框架。
以下假设您没有使用可可豆荚链接库。如果你愿意,我不确定需要改变什么。
现在进行调试构建。
上述更改基本上意味着除了iOS模拟器版本之外,所有版本都链接了库。
您可能还需要进行一些代码更改。任何对库中的头文件或其他符号的引用的代码都应该包装如下:
#if !TARGET_IPHONE_SIMULATOR
#import "somelibrary.h"
#endif
#if !TARGET_IPHONE_SIMULATOR
// Use stuff from the library
#endif
答案 1 :(得分:0)
原因是因为库缺少i386(模拟器)架构片,而不是问题...
现在,当您使用“Sim”目标库时,将排除所有相关代码。
当您使用“设备”目标时......将包含代码和库
答案 2 :(得分:0)
在没有模拟器架构的情况下避免静态库模拟器问题的步骤:
答案 3 :(得分:0)
我刚刚解决了这样的问题,所以这里没有什么提示。
静态库不是为模拟器体系结构而构建的。在模拟器设备上进行测试期间,出现错误(不支持的体系结构)。
将静态库从模拟器平台上排除。
#if !TARGET_IPHONE_SIMULATOR
@implementation MyXLibrary
- (NSString *)myXMethod:(NSString *) encoded {
return @"my exemple"
}
@end
#endif
如果您在Swift中有类,请使用 #if targetEnvironment(simulator)将类从Simulator中排除,或者创建“替代模拟实现”以用于Simulator目的,如果这会影响到其他许多地方该项目。