Как создать фреймворк из проекта 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,

Другие вопросы по тегам