【问题标题】:"dyld: Symbol not found:" for iOS 6-exclusive class in Static Library“dyld: Symbol not found:” 用于静态库中的 iOS 6 专有类
【发布时间】:2012-08-22 20:18:45
【问题描述】:

注意:是的,我知道 iOS 6 处于保密协议之下。这个问题与 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 是一个相当大的框架,并且弱链接需要额外的时间。

所以基本上,我可以做些什么来弱链接静态库本身中的这个类?

【问题讨论】:

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


    【解决方案1】:

    我猜你的 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"];
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 2014-07-27
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2022-12-20
      • 1970-01-01
      相关资源
      最近更新 更多