разъяснения статических и динамических фреймворков 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 ответа:
до 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.
вы должны убедиться, что ваш фреймворк поддерживает как симуляторы, так и архитектуры устройств, если вы планируете его распространять.