Как создать фреймворк из проекта XCode, созданного SwiftPM?
Я использовал SwiftPM для настройки проекта XCode для фреймворка; основанный на
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "MyThing",
products: [
.library(
name: "MyThing",
targets: ["MyThing"]),
],
dependencies: [
],
targets: [
.target(
name: "MyThing",
dependencies: [])
)
Я побежал swift package generate-xcodeproj
а потом pod install
(на основе подфайла, содержание которого не должно иметь значения). Я получаю MyThing.xcworkspace
,
Теперь я понял, что
xcodebuild -workspace MyThing.xcworkspace -scheme MyThing clean build
следует создать .framework
- но это не так, появляется только двоичный файл. Я подозреваю, что здесь работает какой-то автоматизм, так как исходная папка содержит файл с именем main.swift
среди других.
Что мне нужно сделать, чтобы построить фреймворк?
Мне нужно написать весь процесс, чтобы не делать обходных мануалов.
2 ответа
Смешивание файлов сценариев и кода платформы в одной цели, похоже, сбивает с толку SwiftPM. перемещение main.swift
из папки с исходным кодом очищает вещи.
Схема MyThing-Package
создает все продукты сборки, как указано в Package.swift
, в том числе рамки.
Если вы хотите, чтобы файлы сценариев находились в одной рабочей области XCode (для удобства редактирования), поместите их в собственную цель. Вы даже можете создать исполняемый продукт (который не создаст ничего полезного, поскольку исполняемый файл не может ссылаться на динамические структуры).
Начиная с Swift 4.0 swift package generate-xcodeproj
не генерирует автоматически схемы для всех целей, но все же делает эти цели доступными из Xcode.
Если создание новой схемы вручную один раз является приемлемым, вы можете сделать это и добавить цель фреймворка в качестве цели построения схемы.
В противном случае, новые схемы могут быть созданы программно с библиотеками, такими как https://github.com/xcodeswift/xcproj, которые позволяют вам анализировать недавно сгенерированный проект Xcode и генерировать новую схему с его XCSharedData
учебный класс.
После создания новой схемы фреймворка вы можете запустить сборку с xcodebuild -workspace MyThing.xcworkspace -scheme MyThingFramework clean build
,