“dyld:未找到符号:”适用于静态库中的iOS 6独占类

时间:2012-08-22 20:18:46

标签: ios xcode linker ios-simulator static-linking

注意:是的,我知道iOS 6属于NDA。这个问题与iOS 6无关,我希望我在iOS 6中引用的类是 new

我正在创建一个静态框架,可以在我的几个项目中使用,这样我就可以在iOS 6中使用新的API,如果它可用的话,如果它不是,它将会回归到iOS 5等效项。但是,虽然我确保在使用它之前总是检查一个类是否有效:

if ([NewClass class]) {
    NewClass *newClass = [[NewClass alloc] init];
    // etc.
}

每当我在iOS 5模拟器中启动我的应用程序时,都会出现以下错误:

dyld: Symbol not found: _OBJC_CLASS_$_NewClass

(其中NewClass代表iOS 6类)。

这似乎只是使用静态库的问题,就像我在项目中直接引用API并引用它们的某些文件一样,它将启动而没有任何问题。我甚至试过弱链接静态库,它仍然崩溃。唯一可行的选择是弱连接UIKit,但由于UIKit是一个相当大的框架,我宁愿不必这样做,弱连接需要额外的时间。

基本上,我该怎样做才能在静态库本身中弱化这个类?

1 个答案:

答案 0 :(得分:3)

我猜您的IPHONEOS_DEPLOYMENT_TARGET未设置为iOS 5?我刚刚遇到了同样的错误,因为它已经在iOS 6上了。将它设置为iOS 5后,一切都很好。

您可以在Target-> BuildSettings-> IPHONEOS_DEPLOYMENT_TARGET以及Target-> Summary-> iOS Application Target下找到配置。

另一种避免此类错误的方法是:

Class myClass = NSClassFromString(@"NewClass")
if( myClass ) {
   NSObject *myResult = [myClass aMethod:@"Hello World"];
}