静态库中 iOS 6 独占类的"dyld: Symbol not found:"



注意:是的,我知道iOS 6处于保密协议之下。这个问题与iOS 6无关,除了我引用的类是iOS 6中的

我正在创建一个静态框架,用于我的几个项目,这使我可以在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是一个相当大的框架,弱链接需要额外的时间。

那么,基本上,我能做些什么来弱链接静态库中的这个类呢?

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

您可以在目标->构建设置->IPHONEOS_DEPLOYMENT_Target和目标->摘要->iOS应用程序目标下找到配置。

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

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

相关内容

最新更新