如何从SwiftPM生成的XCode项目生成框架?

时间:2018-02-22 14:13:34

标签: swift swift-package-manager swift-framework

我使用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(基于Podfile,其内容无关紧要)。我获得MyThing.xcworkspace

现在我想到了

xcodebuild -workspace MyThing.xcworkspace -scheme MyThing clean build

应创建.framework - 但它不会,只显示二进制文件。我怀疑有些自动操作在这里,因为源文件夹包含一个名为main.swift的文件,等等。

如何构建框架需要做什么? 我需要编写整个过程的脚本,不需要手动解决方法。

2 个答案:

答案 0 :(得分:0)

从Swift 4.0开始swift package generate-xcodeproj不会自动为所有目标生成方案,但仍然可以从Xcode访问这些目标。

如果手动创建一个新方案一次是可以接受的,您可以这样做,并将您的框架目标添加为方案构建目标。

否则,可以使用xcodeswift/xcproj等库以编程方式创建新方案,这些库允许您解析新生成的Xcode项目并使用其XCSharedData类生成新方案。

在创建新的框架方案之后,您可以使用xcodebuild -workspace MyThing.xcworkspace -scheme MyThingFramework clean build运行构建。

答案 1 :(得分:0)

在一个目标中混合脚本文件和框架代码似乎混淆了SwiftPM。将var arr = ["1-49","50-149","150-250","251-400","401-600",,"601-1049","1050-3000","3001-9999"]; arr.sort( ( a, b ) => ( al = +a.split("-")[1], //last of a, after split by - bf = +b.split("-")[0], //first of b, after split by - al-bf ) ); 移出源文件夹会清除内容。

Scheme main.swift创建MyThing-Package中指定的所有构建产品,包括框架。

如果要将脚本文件放在同一个XCode工作区中(为方便编辑),请将它们放在自己的目标中。您甚至可以创建一个可执行产品(由于可执行文件无法链接到动态框架,因此不会创建任何有用的产品)。