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


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

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

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

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

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

4 ответа:

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

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

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

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

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

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

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

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

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

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

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

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

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

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