разъяснения статических и динамических фреймворков iOS

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

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

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

и вот мои вопросы относительно этой информации:

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

4 ответов


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

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

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

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

однако вышеуказанная опция не будет работать для вас, если вы используете Swift. В Xcode не поддерживает создание статических библиотек, которые включают SWIFT-код.

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

надеюсь, что это помогает


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


Swift не работает в статическом lib. Если вам нужно использовать dynamic framework, вы должны установить min iOS в 8.0 , потому что AppStore отклонить ios 7 с динамической структурой


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

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

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

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

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