2010-07-18 54 views
0

我试图在我的应用程序中支持较旧的iOS版本。我最初认为我只需要将这些框架设置为旧操作系统中不存在的“弱连接”,例如, iAd框架。然后确保我不会在代码中调用不支持的API。然而,当我尝试运行应用程序(这是编译与最新的架构),在旧模拟器,它的启动与消息类似弱连接以支持以前的iOS版本

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

我想我找到了解决方案(请有人可以证实这一点):

您无法使用模拟器来测试您的应用程序与以前的运行iOS版本。它仅在设备上工作,根据Apple

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

这看起来很无聊。我如何测试向后兼容性,而不必为每个SDK版本提供一个物理iPhone?不好。

+1

Pssst ...在一个单独的目录中安装旧的SDK,以便您可以使用旧的模拟器:) – iwasrobbed 2010-07-30 16:39:02

0

如果您想支持旧平台,则不能直接使用新类。相反,您使用NSClassFromString像这样:

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

是的..我正在为新班级做这件事。但是自2.0版本以来,SDK中就存在'NSAssertionHandler'(请参阅上面的错误消息),它是CoreFoundation的一部分。 – hanno 2010-07-18 17:12:31