2010-07-18 81 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