Apple представила новый способ доставки библиотек Swift в двоичной форме из Xcode 11, известный как Binary Frameworks. А XCFramework - это новый поддерживаемый способ распространения бинарных фреймворков.

Какую проблему это решает?

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

XCFrameworks: это единственный вариант, который может содержать двоичные файлы для

  • Устройства и симулятор
  • Все платформы: iOS / MacOS / tvOS / watchOS
  • Приложения Mac с использованием AppKit и UIKit

Раньше для создания толстой библиотеки использовалась команда lipo, но Apple никогда официально не рекомендовала ее.

Особенности XCFrameworks

  1. Он может связывать любое из следующего:
    - Frameworks,
    - статические библиотеки с заголовками (XCode автоматически добавит путь поиска заголовка)
    - двоичный код из Swift / C / Obj-C.
  2. Он работает в будущих быстрых версиях без каких-либо проблем с компилятором.
  3. Права и разрешения, доступные для приложения, в равной степени доступны для встроенного XCFrameworks.

Obj-C Поддержка

Бинарные фреймворки могут быть встроены в проекты Obj-C и использоваться. Поддерживается по умолчанию.

Заголовочные файлы (перечисленные ниже), необходимые для Obj-C, создаются по умолчанию.

framework.h: заголовок зонтика obj-c.
framework-swift.h: сгенерированный заголовок, содержащий код objc для файлов swift.

Если классы Swift в структуре не имеют obj -c api, установите «Нет» на «Установить заголовок совместимости Obj c» в настройках сборки.

Если в Framework нет obj-c api, установите «Нет» на «Определить модули» в настройках сборки.

Поскольку двоичные фреймворки зависят от стабильности модуля и, в свою очередь, от стабильности ABI, ему нужна стандартная библиотека Swift в самой ОС. Apple начала включать стандартную библиотеку Swift в ОС, когда был выпущен Xcode 10.2, в котором поддерживался Swift 5. Значит, в iOS ‹12.2 не будет стандартной библиотеки Swift. Итак, в случае iOS версии ‹12.2, все быстрые приложения будут иметь свою собственную библиотеку времени выполнения, включенную в нее. В случае чистых проектов Obj-C со встроенными двоичными фреймворками, работающих в iOS ‹12.2, убедитесь, что для« Always Embed Swift Standard Libraries »установлено значение« Да »в настройках сборки. В противном случае он выйдет из строя во время выполнения.

Как создать XCFramework

Мы можем создать XCFramework за три простых шага.

  1. Создайте проект Xcode Framework и установите «Да» на «Сборка библиотек для распространения» в настройках сборки.
  2. Заархивируйте проект по нужным направлениям. Здесь я сделал это только для iOS Simulator и устройства.
    iOS Simulator: архив xcodebuild -scheme ShapeMaker -destination = «iOS Simulator» -archivePath «output / simulator.xcarchive ”-Sdk iphonesimulator SKIP_INSTALL = NO BUILD_LIBRARIES_FOR_DISTRIBUTION = YES
    Устройство iOS: архив xcodebuild -scheme ShapeMaker -destination =” iOS ”-archivePath“ output / ios.xcarchive ”-Sdk iphoneos SKIP_INSTALL = NO BUILD_LIBRARIES_FOR_DISTRIBUTION = YES
  3. Создайте XCFramework, как показано ниже.
    xcodebuild -create-xcframework -framework «output / simulator.xcarchive / Products / Library / Frameworks / ShapeMaker.framework» -framework «output / ios.xcarchive / Products / Library / Frameworks / ShapeMaker.framework »-выход« output / ShapeMaker.xcframework »

Вышеупомянутые шаги могут быть выполнены либо в одном сценарии bash, либо могут создать цель Aggregate в Xcode и запустить ее на отдельной фазе запуска сценария.

XCFramework структура

Из приведенного ниже снимка видно, что XCFramework содержит двоичные файлы Swift как для симулятора iOS, так и для устройства.

Спасибо за прочтение! Надеюсь, вам понравилась эта статья.

Если у вас есть вопросы или предложения, оставьте свой ответ в разделе комментариев.

Заинтересованные в подключении могут связаться со мной в LinkedIn. Напишите в Твиттере на @AnandFnc, чтобы поздороваться.