代码之家  ›  专栏  ›  技术社区  ›  hanno

支持早期iOS版本的弱链接

  •  0
  • hanno  · 技术社区  · 16 年前

    我正在尝试在我的应用程序中支持旧的iOS版本。我最初认为我只需要将那些旧操作系统中不存在的框架设置为“弱链接”,例如iAd框架。然后确保我没有在代码中调用不受支持的API。但是,当我尝试在旧的模拟器中运行应用程序(使用最新的框架编译)时,它会在启动时崩溃,并显示类似于的消息

    18/07/2010 11:07:29 UIKitApplication:xxxxx[0xe006][5729]    dyld: Symbol not found: _OBJC_CLASS_$_NSAssertionHandler
    18/07/2010 11:07:29 UIKitApplication:xxxxx[0xe006][5729]      Referenced from: xxxxx/Applications/23CE4978-D25F-4DB4-A486-0730EBBB501B/xxxxx.app/xxxxx
    18/07/2010 11:07:29 UIKitApplication:xxxxx[0xe006][5729]      Expected in: /Xcode3.1.4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation
    18/07/2010 11:07:29 UIKitApplication:xxxxx[0xe006][5729]     in xxxxx/Applications/23CE4978-D25F-4DB4-A486-0730EBBB501B/xxxxx.app/xxxxx
    

    凝固后 全部的 对于弱链接,我仍然收到一条错误消息:

    18/07/2010 11:33:32 UIKitApplication:xxxxx[0xc4a7][8204]    dyld: Symbol not found: __objc_empty_vtable
    18/07/2010 11:33:32 UIKitApplication:xxxxx[0xc4a7][8204]      Referenced from: xxxxx/Applications/23CE4978-D25F-4DB4-A486-0730EBBB501B/xxxxx.app/xxxxx
    18/07/2010 11:33:32 UIKitApplication:xxxxx[0xc4a7][8204]      Expected in: /usr/lib/libobjc.A.dylib
    

    我做错什么了?

    2 回复  |  直到 16 年前
        1
  •  2
  •   hanno    16 年前

    我想我找到了解决办法( 有人能确认一下吗? ):

    你不能使用模拟器来测试你的应用程序是否使用以前的iOS版本运行。据介绍,它只在设备上起作用 Apple

    iPhone OS注意: Mac OS X v10.6不支持使用iPhone 此外,当建筑与 模拟器SDK,二进制运行 在与SDK相同的操作系统版本上,而不是 在早期或更高版本上。

    这看起来真的很无聊。如果每个SDK版本都没有一个物理iPhone,我应该如何测试向后兼容性?不好的。

        2
  •  0
  •   shosti    16 年前

    如果要支持旧平台,就不能直接使用新类。相反,你用 NSClassFromString

    class myClass = NSClassFromString(@"NSCoolNewClass");
    if (myClass) 
        //do stuff