弱链接以支持以前的iOS版本

时间:2010-07-18 10:42:05

标签: iphone xcode

我正在尝试在我的应用中支持较旧的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 个答案:

答案 0 :(得分:2)

我想我找到了解决方案(请有人确认一下吗?):

您无法使用模拟器测试您的应用是否使用以前的iOS版本运行。根据{{​​3}}:

,它仅适用于设备
  

iPhone OS注意: Mac OS X v10.6不支持使用iPhone   版本3.0之前的模拟器SDK。   另外,建设的时候   模拟器SDK,二进制只运行   在与SDK相同的操作系统版本上,不是   在早期版本或更高版本中。

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

答案 1 :(得分:0)

如果要支持旧平台,则无法直接使用新类。相反,您可以像这样使用NSClassFromString

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