Ответ 1
После испытаний, таких как чистая, чистая папка, перезагрузка iPhone Simulator и даже перезагрузка, я изменил IPHONE_DEPLYMENT_TARGET на настройку целевой сборки, начиная с iOS 5.0 до iOS 4.2. Работали.
Когда я пытаюсь запустить свое приложение в симуляторе iOS 4.3 (Xcode 4.2), я сбой при ударе @autoreleasepool {}, используя:
dyld: lazy symbol binding failed: Symbol not found: _objc_autoreleasePoolPush
Я огляделся, и я вижу, что обходным путем является добавление libarclite_iphoneos.a
. Там версия для симулятора тоже, как libarclite_iphonesimulator.a
.
Мне нужно добавить обе библиотеки в мой проект, чтобы они запускались как на симуляторе, так и на оборудовании. Но независимо от того, что я построил, он жалуется, что другая библиотека предназначена для неподдерживаемой архитектуры.
Например, создание для симулятора:
ld: warning: ignoring file /Developer-4.2/Platforms/iPhoneOS.platform/
Developer/usr/lib/arc/libarclite_iphoneos.a, missing required architecture
i386 in file
Как я могу исправить их оба одновременно? Или я должен просто придерживаться старого синтаксиса NSAutoreleasePool
?
После испытаний, таких как чистая, чистая папка, перезагрузка iPhone Simulator и даже перезагрузка, я изменил IPHONE_DEPLYMENT_TARGET на настройку целевой сборки, начиная с iOS 5.0 до iOS 4.2. Работали.
Вы можете использовать настройку сборки других компоновщиков ссылок для связи в библиотеке и специализировать значение на основе того, является ли это "Any iOS" или "Any iOS Simulator".
Вы также можете объединить две статические библиотеки в одну универсальную библиотеку. Пойдите в Терминал и скажите
lipo -create -output /where/you/want/it/libarclite_universal.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphonesimulator.a
Вы можете проверить полученный файл, сказав (в терминале)
file /where/you/put/it/libarclite_universal.a
Он должен выводить:
libarclite_universal.a: Mach-O universal binary with 3 architectures
libarclite_universal.a (for architecture i386):current ar archive random library
libarclite_universal.a (for architecture armv6):current ar archive random library
libarclite_universal.a (for architecture armv7):current ar archive random library
Поскольку этот lib связан статически, ваше окончательное приложение не будет расти из-за включенной библиотеки sim, поскольку только то, что необходимо вашему приложению, будет связано с вашим окончательным приложением.