Слабая ссылка для поддержки предыдущих версий iOS - PullRequest
0 голосов
/ 18 июля 2010

Я пытаюсь поддерживать более старые версии 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

После установки all фреймворки со слабыми ссылками, я все равно получаю сообщение об ошибке:

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 ]

2 голосов
/ 18 июля 2010

Я думаю, что нашел решение (, может, кто-нибудь подтвердит это? ):

Вы не можете использовать симулятор, чтобы проверить, работают ли ваши приложения с предыдущей версией iOS.Он работает только на устройстве, в соответствии с Apple :

iPhone OS Примечание: Mac OS X v10.6 не поддерживает использование SDK iPhone Simulator додо версии 3.0.Кроме того, при сборке с помощью SDK симулятора бинарный файл работает только в той же версии ОС, что и SDK, а не в более ранних или более поздних версиях.

Это кажется действительно скучным.Как мне проверить обратную совместимость, не имея одного физического iPhone для каждой версии SDK?Не хорошо.

0 голосов
/ 18 июля 2010

Вы не можете использовать новый класс напрямую, если хотите поддерживать старые платформы. Вместо этого вы используете NSClassFromString примерно так:

class myClass = NSClassFromString(@"NSCoolNewClass");
if (myClass) 
    //do stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...