我正在尝试在我的应用中支持较旧的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
我做错了什么?
答案 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