Как обновить нашу статическую библиотечную архитектуру для поддержки arm64 Build?

Несколько дней назад я создаю статическую библиотеку (Universal), которая отлично работает с Xcode5.0 SDK7 . После обновления Xcode5.1 с SDK7.1 который не работает, если я выбираю симулятор iPhone Retina(4-inch 64-bit) . Затем я собираюсь обновить мою библиотеку с изменением настроек Bellow.

введите описание изображения здесь

Я делаю то же самое для трех целей:

введите описание изображения здесь

Для спортивного симулятора, а также устройства я ставлю Universal lib и в этом запускаю скрипт: введите описание изображения здесь

После этого i Build Again lib и используется, как я сделал До этого в моем проекте. Но по-прежнему возникает проблема с iPhone Retina(4-inch 64-bit) Undefined symbols for architecture x86_64:


Итак, мой вопрос в том, что есть дополнительные изменения, необходимые для обновления lib для arm64, или я сделал какую-либо ошибку на предыдущем шаге. Пожалуйста, действуйте, если я ошибаюсь.

какие изменения необходимы для обновления моей статической библиотеки для поддержки 64Bit architecture

ЗАМЕТКА:

Я прошу создать собственное обновление библиотеки. Я не использую стороннюю библиотеку. Обновить

Я использовал эту lipo -info testingLibImport/libLibNSlog.a в моем терминале, что вывод:

 Architectures in the fat file: testingLibImport/libLibNSlog.a are: armv7 armv7s i386 arm64 

Другое решение, которое я нашел с XCode 6.4, заключается в том, чтобы добавить ONLY_ACTIVE_ARCH = NO и не указывать архитектуру. Так

 xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" 

Будет строить архитектуры i386 и x86_64 в вашей библиотеке.


Вот мой полный универсальный скрипт запуска lib для построения всех архитектур.

 # define output folder environment variable UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal # Step 1. Build Device and Simulator versions xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" xcodebuild -target TargetName ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" # make sure the output directory exists mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" # Step 2. Create universal binary file using lipo lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" # Last touch. copy the header files. Just for convenience cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/" 

После многих вещей я получил решение. некоторые из xcode не знают, что автоматически появляются Standard architectures (including 64-bit) (armv7,armv7s,arm64) но в моем случае в проект Static Library нет возможности. поэтому я собираюсь добавить это вручную как: –

введите описание изображения здесь

и выберите этот вариант: –

введите описание изображения здесь

После этого я снова создаю свою статическую библиотеку и использую ее в моем проекте, который теперь отлично работает. и я также проверил с помощью команды lipo в терминале, что выход будет разным:

testLibImport / libLibNSlog.a: armv7 armv7s i386 x86_64 arm64

Я тоже столкнулся с одной и той же проблемой вчера, и после многих поисковых запросов и попыток разного решения я сдался и попробовал сам. Все, что я мог понять из различных решений, было то, что когда я запускал «lipo -info library.a», он не был построен для архитектуры x86_64. Итак, решил отказаться от совокупного подхода и сделал простую попытку.

  1. как сообщается в этом посте, я добавил armv7, armv7s и arm64 в архитектуры.
  2. построить проект статической библиотеки с помощью симулятора iphone (32 бит)
  3. построить проект статической библиотеки с помощью симулятора iphone (64 бит)
  4. создать проект статической библиотеки с помощью устройства iOS
  5. перейти к пути сборки (по производным данным)
  6. скопировал как симулятор, так и вывод устройства в общую папку
  7. используется команда lipo в окне терминала для создания универсальной библиотеки

lipo command: lipo -create -output newlibraryname.a simulatorlibraryname.a devicelibraryname.a

интегрировал новую созданную универсальную статическую библиотеку, и она РАБОТАЛА !!!

Извините за отправку другого решения так поздно. Я нашел это решение долгое время назад, когда я пытался найти решение, которое спасло бы меня от ручной работы по созданию универсальной библиотеки с помощью команды lipo каждый раз, когда мне приходилось создавать универсальную библиотеку.

Итак, вот еще один подход, для тех, кто использует обобщенный подход для построения универсальной библиотеки

просто сделайте одно небольшое изменение, как указано ниже в сводном скрипте для симулятора, чтобы построить универсальную библиотеку –

xcodebuild -target ProductName -configuration $ {CONFIGURATION} -sdk iphonesimulator ARCHS = "i386 x86_64 " BUILD_DIR = "$ {BUILD_DIR}" BUILD_ROOT = "$ {BUILD_ROOT}" SYMROOT = "$ {SYMROOT}"

Пожалуйста, обратите внимание на включение нескольких архитектур вместо использования единого подхода к архитектуре –

xcodebuild -target ProductName -configuration $ {CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR = "$ {BUILD_DIR}" BUILD_ROOT = "$ {BUILD_ROOT}" SYMROOT = "$ {SYMROOT}"

Просто ARCHS = "i386 x86_64" сделает волшебство для вас.

Вы можете подтвердить это, используя следующую липо-команду lipo -info newLibraryName.a

Надеюсь, это экономит время для многих других, таких как я !!!

  • Какая потребность в промежуточной папке в приложении Cordova 3.5.0 iOS?
  • ошибка сборки на iOS 7.1 - Zxing
  • Архитектура Arm64 в xcode 5.1
  • Обновление iOS7 V 7.1 (11D167) несовместимо с Xcode 5 для разработки
  • Не удается установить ipa на устройство
  • Продолжайте получать ошибки компоновщика на Xcode 5.1, несмотря на возврат только к 32-битным архитектурам
  • Добавление фреймворков Xcode 5.1
  • Проблема с модульными испытаниями в Xcode 5.1 / iOS 7.1: сбой утверждения в BKSEventFocusManager
  • Xcode 5.1: отсутствует требуемая архитектура arm64
  • ios 6.0 Simulator в xcode 5.1
  • Xcode 6 iOS 8 UIImage imageName из проблемы с пакетом
  • Interesting Posts

    значок набора для iPad с целевым устройством приложения – iPhone

    AVAudioPlayer не работает на iPhone 5

    Установить UIImageView Size в UITableViewCell, когда UIImage загружен из URL?

    Как объединить два NSString?

    Как сделать UITableView подходящим для размера контента

    Что означает символ точки восклицания для файлов во время фиксации XCode?

    Отображение результатов API поиска iTunes с помощью RESTKit

    Как отключить эффект блеска значка в Xcode 5

    Отмените касание UIButton при касании

    Как добиться многоуровневого рисования с помощью OpenGL ES на iOS?

    _NSZombie_NSKeyValueUndefinedGetter – Что это?

    Почему расширение WatchKit вызывает сообщение «Ожидание прикрепить» на фактическом Apple Watch, но не в симуляторе?

    У вашей учетной записи нет разрешения на создание сертификатов распространения iOS

    Как запускать scrollsToTop, когда UITableView вложен в UIScrollView

    После интеграции приложения Tapjoy sdk в iPhone, как показывать рекламу, видео в UiViewcontroller?

    Давайте будем гением компьютера.