95

Должен признать, что с выпуском iOS 8 я немного смущен динамическими и статическими фреймворками в iOS.iOS Static vs Dynamic frameworks разъяснения

Я ищу способ распространения библиотеки, которую я создал, и мне нужно поддерживать iOS 7 и выше. (Примечание: это будет собственная структура. Я не могу использовать какао-контейнеры, и я также не могу распространять источник). Вот то, что я уже знаю:

  • iOS 8 представил «встроенные фреймворки» для iOS, но, как я понимаю, они не работают для iOS 7, только для iOS 8 и выше.
  • У меня есть возможность распространять мою библиотеку как статическую библиотеку (файл .a), а также распространять заголовки. Я знаю, что это общий способ справиться с ситуацией, но я хотел бы найти что-то более простое, чем это (а также связать с ним некоторые ресурсы, если это возможно).
  • Я также обнаружил, что iOS 7 не поддерживает динамические библиотеки .framework (только статические), поскольку он не поддерживает динамическую компоновку. Но iOS 8, а также статические ссылки.

А вот мои вопросы по поводу этой информации:.

  • Я видел, что я могу создать цель .framework, и сделать его статическим, путем изменения типа Mach-O в «статической библиотеки Будет этого достаточно для поддержки iOS 7 без каких-либо проблем, а также для распространения моей библиотеки как пакета .framework? Если да, то почему «встроенные фреймворки» в iOS 8 имеют большую часть сделки, так как многие ресурсы в Интернете предлагая? Я что-то не хватает?
  • Нужно ли кодовое кодирование .framework так же, как и с любым другим приложением, которое я делаю?
  • Что делать, если мне нужно включить другие ресурсы (например, данные ядра или изображения) с моим файлом .framework? Мне нужно сделать отдельный файл .bundle для этого?
+1

«iOS 7 не поддерживает библиотеки .framework, потому что не поддерживает динамическое связывание». Это утверждение неверно. –

+1

Я вижу. можете ли вы сказать мне правильное предложение? Это неверно, потому что iOS 7 поддерживает динамическое связывание или потому, что iOS 7 поддерживает библиотеки .framework? Или оба? – csotiriou

+1

Remeber AVFoundation и CoreGraphics - это .framework. Вероятно, это поможет вам найти ответы на все ваши вопросы: http://www.raywenderlich.com/65964/create-a-framework-for-ios –

ответ

59

До iOS8 Xcode разрешил создавать статические библиотеки для iOS. Общей проблемой было то, что нам приходилось отправлять двоичные файлы и заголовки отдельно.

Позже некоторые разработчики пришли к идее создания «статических фреймворков». [.framework - это просто папка с символическими ссылками на lib и заголовки]. Одним из таких примеров является https://github.com/jverkoey/iOS-Framework

Эта опция будет работать для iOS 7 или 8 или до этого.Потому что это просто статические библиотеки с удобством объединения файлов заголовков.

Что касается ваших вопросов о ресурсах, нам нужно будет их связать в «.bundle». Для доставки их я не уверен, можем ли мы заключить их в папку .framework. В прошлом я использовал отправьте мои библиотеки как статические рамки и комплект ...

Однако вышеуказанный вариант не будет работать для вас, если вы используете Swift. Xcode не поддерживает создание статических библиотек, содержащих быстрый код.

Вы должны пойти с динамическими каркасами, если есть быстрое использование. Теоретически, динамические структуры работают в iOS7. Но, я думаю, iTunes Connect отклонит, если приложение нацелено на iOS7 и использует динамические фреймворки :-).

Надеется, что это помогает

4

У меня нет всех ответов, но я постараюсь решить некоторые из ваших вопросов здесь.

  • Вы получите предупреждение об использовании этих фреймворков в iOS 7, однако это все, что есть, предупреждение. См. Это answer.

  • Вы можете включить другие ресурсы, такие как CoreData, однако вам нужно будет создать их в коде вручную. Вот tutorial, показывающий, как создать базовую модель данных.

  • Вы должны подписать динамические библиотеки значков для iOS.

  • Вам необходимо убедиться, что ваш фреймворк поддерживает как симулятор, так и архитектуру устройств, если вы планируете его распространять.

6

Swift не работает в статическом Lib. Если вы должны использовать динамическую структуру, вы должны установить мин IOS 8,0 потому AppStore отвергает ИОСА 7 с динамической структурой

+0

Вы можете импортировать статическую библиотеку в быстрый проект – c0d3Junk13

5

С Xcode 9 и далее вы можете создать статические рамки для Swift, а также. Это возможно из-за совместимости источника ABI. Все, что вам нужно сделать, это просто изменить Mach-O type в настройках сборки целевой среды. Этот метод также применим к Hybrid Frameworks (фреймворки с кодом Swift и Objective-C).

+0

Отличный совет. Не знаю, почему этот ответ был забит, поскольку это помогло мне. \ Target'Build Settings \ Mach-O-Type и выберите Статическая структура. – rustyMagnet