Использование встроенной платформы в приложении, содержащем расширение, с целью развертывания iOS 7.0 и более ранних версий.

Я разрабатываю расширение Today Widget для приложения с целью развертывания до iOS 8.0. В Apple Руководство по программированию расширений они рекомендовали использовать встроенную структуру для обмена кодом между расширением приложения и содержащим его приложением.

Вы можете создать встроенную платформу для совместного использования кода между вашим расширением приложения и содержащим его приложением.

В конце этого руководства объясняется, как развернуть содержащее приложение в более старых версиях iOS 8.0 с помощью команды dlopen.

После того, как я добавил цель фреймворка, проект не строится успешно. Это всегда терпит неудачу со следующими ошибками:

  1. Ошибка Lipo: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: невозможно открыть входной файл: PATH_TO_BUILD/armv7/APP_NAME (нет такого файла или каталога)
  2. Ошибка компоновщика Apple Mach-O: ld: встроенные dylibs/frameworks поддерживаются только в iOS 8.0 и более поздних версиях (@rpath/FRAMEWORK_NAME) для архитектуры armv7

(Ошибка 2 повторяется с архитектурой arm64)

Что я делаю неправильно?

Есть ли другой способ поделиться кодом между расширением приложения и содержащим его приложением?

Если кто-то знает о решении dlopen, пожалуйста, введите руководство "Как сделать" (примеры приветствуются).


person Tsahi Deri    schedule 10.03.2015    source источник


Ответы (1)


Вы не можете использовать встроенные фреймворки в iOS 7 даже с dlopen.

Что они объясняют на этой странице (и не очень ясно), так это то, что если ваше приложение использует встроенную платформу на iOS 8, и вы хотите развернуть приложение на iOS 7, у вас не может быть framework автоматически загружается в iOS 8. Вместо этого вы копируете фреймворк в пакет приложений как часть процесса сборки, а затем только в iOS 8 используете dlopen для загрузки фреймворка из кода.

В iOS 7 фреймворк будет существовать в комплекте приложения, но iOS 7 не поддерживает его загрузку в приложение любым способом, в том числе dlopen

Если вы хотите поделиться кодом между приложением и расширением и развернуть на iOS 7, вы не можете использовать платформу для совместного использования кода. Вам необходимо включить весь общий код как в целевое приложение, так и в целевое расширение.

person Tom Harrington    schedule 10.03.2015
comment
На данный момент я включил весь общий код как в цель приложения, так и в цель расширения, все работает нормально. Но не будет ли приложение отклонено при отправке в App Store? - person Tsahi Deri; 15.03.2015
comment
Почему ты так думаешь? - person Tom Harrington; 16.03.2015
comment
Вероятно, у Apple есть причина, по которой они рекомендуют использовать встроенную структуру для обмена кодом между расширением приложения и содержащим его приложением. - person Tsahi Deri; 16.03.2015
comment
Это хорошая практика проектирования программного обеспечения, когда она работает. Здесь это не работает. Нет другого способа использовать код в обоих местах, и я никогда не слышал, чтобы Apple заботилась об этом. - person Tom Harrington; 16.03.2015
comment
Каков механизм Xcode, с помощью которого мы включаем фреймворк в цель для этого? - person QED; 26.04.2016
comment
@TomHarrington Я создал расширение общего доступа, но не могу добавить встроенную библиотеку с помощью dlopen. Пожалуйста, помогите мне. Я хочу, чтобы мое приложение также было частью iOS 7. Я могу запустить приложение с iOS 8 со встроенной библиотекой. - person Devangi Desai; 22.06.2016