Я должен признать, что с выпуском iOS 8 я немного запутался в динамических и статических фреймворках в iOS.
Я ищу способ распространять созданную мной библиотеку, и мне нужно поддерживать 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?
Ответы:
До iOS8 Xcode позволял создавать только статические библиотеки для iOS. Общая проблема заключалась в том, что нам приходилось отправлять двоичный файл и заголовки отдельно.
Позже некоторым разработчикам пришла в голову идея создания «статических фреймворков». [.framework - это просто папка с символическими ссылками на библиотеку и заголовки]. Один из таких примеров - https://github.com/jverkoey/iOS-Framework.
Эта опция будет работать для iOS 7 или 8 или более ранних версий. Потому что это просто статические библиотеки с удобством объединения файлов заголовков.
Что касается ваших вопросов о ресурсах, нам нужно будет объединить их в '.bundle' .. Для отправки я не уверен, сможем ли мы вложить их в папку .framework .. Раньше я отправлял свои библиотеки как статическая структура и связка ...
Однако указанный выше вариант не сработает, если вы используете Swift. Xcode не поддерживает создание статических библиотек, включающих быстрый код.
Вы должны использовать динамические фреймворки, если они используются быстро. Теоретически динамические фреймворки работают в iOS7 .. Но я думаю, что iTunes Connect отклонит, если приложение нацелено на iOS7 и использует динамические фреймворки :-).
Надеюсь это поможет
источник
Начиная с Xcode 9, вы также можете создавать статические фреймворки для Swift. Это возможно благодаря совместимости исходного кода ABI. Все, что вам нужно сделать, это просто изменить
Mach-O type
настройки сборки целевой платформы. Этот метод также применим к гибридным фреймворкам (фреймворкам с кодом Swift и Objective-C).источник
static
илиdynamic
в названии обычно указывает на типLinking
[About]Каркасы могут быть
static
илиdynamic
[Отметьте статический или динамический]Вы можете изменить формат библиотеки, которая повлияет на вас
Linker
, изменивFramework target -> Build Settings -> Mach-O Type
[О программе] наStatic Library
илиDynamic Library
. По умолчанию Xcode имеетDynamic Library
значение.В зависимости от этого параметра будут созданы разные типы двоичных файлов.
После успешной настройки потребителя [Link vs Embed]
Static Linker
ld : во время компиляции будет включать весь код изstatic library
файла в исполняемый объектный файл.Dynamic Linker
dyld : во время загрузки / выполнения попытается найти встроенный фреймворк с помощью@rpath
[About] и связать его[Словарь]
источник
У меня нет ответов на все, но я постараюсь ответить на некоторые из ваших вопросов здесь.
Вы получите предупреждение об использовании этих фреймворков в iOS 7, но это все, предупреждение. Смотрите этот ответ .
Вы можете включить другие ресурсы, такие как CoreData, однако вам нужно будет создать их в коде вручную. Вот руководство, показывающее, как создать базовую модель данных.
Вы должны написать код динамических библиотек для iOS.
Вы должны убедиться, что ваша платформа поддерживает архитектуры симуляторов и устройств, если вы планируете ее распространять.
источник
Swift не работает в статической библиотеке. Если вам нужно использовать динамическую структуру, вы должны установить минимальную iOS на 8.0, потому что AppStore отклоняет ios 7 с динамической структурой.
источник