Фреймворк может работать только на симуляторе, но не на устройстве

Я использую Xcode версии 7.2 (7C68).

У меня возникла проблема после того, как я построил проект DTCoreText в качестве фреймворка. DTCoreText.framework отлично работает на симуляторе ios, но когда я хочу протестировать его на устройстве, возникла следующая проблема:

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

Я проверил настройки сборки в последней версии DTCoreText-1.6.17 проект:

Цель: DTCoreText (iOS)

АРКИ: armv7, arm64

ONLY_ACTIVE_ARCH: НЕТ

VALID_ARCHS: arm64, armv7, armv7s

Думаю, с этими настройками все в порядке. Затем я строю для профилирования, нажимая Shift + CMD + i.

  • Сборка с помощью симулятора:

Я заметил, что текущее устройство, которое я использовал для сборки, - это Симулятор (iPhone 6 Plus). И я нахожу DTCoreText.framework в папке Release-iphonesimulator. при этом DTCoreText.framework отлично работает только при использовании симулятора iphone, но не на реальном устройстве.

  • Сборка с использованием устройства:

Затем я попытался перестроить DTCoreText.framework с теми же настройками сборки, но с использованием универсального устройства iOS или реального устройства (например, iPhone 6s). Я получил DTCoreText.framework в папке Release-iphoneos. Таким образом, DTCoreText.framework отлично работает только при использовании реального устройства, но не на симуляторе iphone.

Я не знаю, почему это происходит. Как создать DTCoreText.framework как для симулятора, так и для реального устройства?


person Strong84    schedule 05.01.2016    source источник


Ответы (1)


Проблема решена !!!

Мне нужно создать фреймворк "FAT" для "i386 x86_64 armv7 arm64"!

Как экспортировать жирный Cocoa Touch Framework (для Simulator и устройство)?

Этот пост мне очень помогает!

Просто используйте команду «lipo -info», чтобы ПРОВЕРИТЬ ДУГИ, например:

admins-MacBook-Pro:~ admin$
admins-MacBook-Pro:~ admin$ lipo -info /Users/admin/Desktop/DT/device/DTCoreText.framework/DTCoreText
Architectures in the fat file: /Users/admin/Desktop/DT/device/DTCoreText.framework/DTCoreText are: armv7 arm64
admins-MacBook-Pro:~ admin$
admins-MacBook-Pro:~ admin$ lipo -info /Users/admin/Desktop/DT/simulator/DTCoreText.framework/DTCoreText
Architectures in the fat file: /Users/admin/Desktop/DT/simulator/DTCoreText.framework/DTCoreText are: i386 x86_64
admins-MacBook-Pro:~ admin$

Как мы можем видеть:

  • При сборке с использованием симулятора xcode генерирует фреймворк с использованием ARCHS «i386, x86_64»
  • При сборке с использованием устройства xcode генерирует фреймворк с использованием ARCHS «armv7, arm64»

Чтобы объединить две платформы вместе, используйте следующую команду, например:

admins-MacBook-Pro:~ admin$ lipo -create /Users/admin/Desktop/DT/device/DTCoreText.framework/DTCoreText /Users/admin/Desktop/DT/simulator/DTCoreText.framework/DTCoreText -output /Users/admin/Desktop/DTCoreText

Теперь вы можете найти двоичный файл "DTCoreText" на своем рабочем столе. Используйте lipo cmd, чтобы проверить это еще раз:

admins-MacBook-Pro:~ admin$ lipo -info /Users/admin/Desktop/DTCoreText
Architectures in the fat file: /Users/admin/Desktop/DTCoreText are: i386 x86_64 armv7 arm64

Да! ARCHS: "i386 x86_64 armv7 arm64"

Поместите двоичный файл "DTCoreText" в DTCoreText.framework и замените старый!

Выполнено!

Теперь мы можем использовать фреймворк как для устройства, так и для симулятора!


Но

Это сделано только для удобства тестирования, если вы хотите отправить свое приложение в магазин приложений. Apple отклонит его, потому что "платформы iOS, содержащие фрагменты симулятора, не могут быть отправлены в App Store".

Прочтите этот пост: Создание iOS / OSX Frameworks: нужно ли кодировать их перед распространением среди других разработчиков?

person Strong84    schedule 05.01.2016