0Pricing
Swift Academy · Урок

Двоичные цели и XCFrameworks

Распространяйте закрытый код как XCFramework и подключайте его как двоичную цель.

«Двоичные цели и XCFrameworks» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Что такое двоичная цель?

Двоичная цель распространяет предварительно скомпилированный фреймворк (XCFramework) вместо исходного кода, защищая закрытые реализации.

// Package.swift:
.binaryTarget(
  name: "ClosedSDK",
  path: "Frameworks/ClosedSDK.xcframework"
)

Что такое XCFramework?

XCFramework объединяет несколько вариантов для платформ (iOS, macOS и симулятора) в один распространяемый архив.

// XCFramework structure:
// ClosedSDK.xcframework/
// ├── ios-arm64/
// ├── ios-arm64_x86_64-simulator/
// └── macos-arm64_x86_64/

Создание XCFramework

Создайте архивы для каждой платформы и объедините их с помощью xcodebuild -create-xcframework.

xcodebuild archive -scheme MySDK -destination "generic/platform=iOS" -archivePath ios.xcarchive SKIP_INSTALL=NO
xcodebuild archive -scheme MySDK -destination "generic/platform=iOS Simulator" -archivePath sim.xcarchive SKIP_INSTALL=NO
xcodebuild -create-xcframework \
  -framework ios.xcarchive/Products/Library/Frameworks/MySDK.framework \
  -framework sim.xcarchive/Products/Library/Frameworks/MySDK.framework \
  -output MySDK.xcframework

Удалённая двоичная цель с контрольной суммой

Укажите размещённый удалённо архив XCFramework в формате zip и его контрольную сумму SHA-256 для проверки целостности.

.binaryTarget(
  name: "ClosedSDK",
  url: "https://cdn.example.com/ClosedSDK-1.0.0.xcframework.zip",
  checksum: "abc123def456..."
)

Вычисление контрольной суммы

Используйте swift package compute-checksum, чтобы вычислить контрольную сумму SHA-256 для zip-файла.

swift package compute-checksum ClosedSDK-1.0.0.xcframework.zip
# Outputs: abc123def456...

Использование двоичных целей в приложении

Добавьте двоичную цель как зависимость в список dependencies другой цели — так же, как исходную цель.

.target(
  name: "MyApp",
  dependencies: [
    .target(name: "ClosedSDK")
  ]
)

Импорт XCFramework

Импортируйте модуль в коде Swift так же, как любой другой модуль.

import ClosedSDK

let result = ClosedSDK.ProcessData(input: myData)

Требования к манифесту конфиденциальности

Apple требует, чтобы XCFramework, распространяемые через App Store, содержали манифест PrivacyInfo.xcprivacy со списком используемых API.

// ClosedSDK.xcframework/
// ├── ios-arm64/ClosedSDK.framework/
// │   └── PrivacyInfo.xcprivacy
// └── ...

Сборки для отладки и выпуска

При использовании XCFramework Вы не можете пошагово выполнять исходный код в отладчике — видны только символы. Файлы dSYM можно добавить для расшифровки символов в отчётах о сбоях.

// Distribute dSYMs alongside XCFramework for crash reporting:
// ClosedSDK-1.0.0.xcframework.zip
// ClosedSDK-1.0.0.dSYM.zip

Версионирование XCFramework

Используйте семантическое версионирование в имени файла и версии пакета SPM, чтобы пользователи могли выбирать совместимые версии.

// ClosedSDK-1.2.0.xcframework.zip
// In Package.swift:
// .package(url: "...", from: "1.2.0")

XCFramework и пакеты с исходным кодом

Используйте XCFramework для закрытого кода, больших предварительно скомпилированных SDK или оболочек для C/C++. Пакеты с исходным кодом используйте для кода Swift с открытым исходным кодом.

// XCFramework: proprietary analytics SDK, vendor-provided libraries
// Source: open-source Alamofire, SwiftUI components

Быстрая проверка

Зачем при объявлении удалённой двоичной цели в Package.swift указывать контрольную сумму?

Итоги урока

Двоичные цели распространяют предварительно скомпилированные XCFramework без исходного кода. Соберите их с помощью xcodebuild -create-xcframework, разместите zip-архив, вычислите его контрольную сумму с помощью swift package compute-checksum и объявите цель в Package.swift. Для отправки в App Store добавьте PrivacyInfo.xcprivacy.

Часто задаваемые вопросы

Урок «Двоичные цели и XCFrameworks» бесплатный?

Да — полный текст урока «Двоичные цели и XCFrameworks» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Двоичные цели и XCFrameworks»?

Распространяйте закрытый код как XCFramework и подключайте его как двоичную цель. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Двоичные цели и XCFrameworks»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Package.swift: цели, продукты и зависимости
  2. Локальные пакеты и модули функций
  3. Двоичные цели и XCFrameworks
  4. Версионирование, разрешение конфликтов и плагины Swift
← Назад к Swift Academy