如何从 SwiftPM 生成的 XCode 项目生成框架?
How to generate a framework from a SwiftPM-generated XCode project?
我使用 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: [])
)
I 运行 swift package generate-xcodeproj
然后是 pod install
(基于内容无关紧要的 Podfile)。我得到 MyThing.xcworkspace
.
现在我想
xcodebuild -workspace MyThing.xcworkspace -scheme MyThing clean build
应该创建 .framework
-- 但它没有,只出现一个二进制文件。我怀疑这里有一些自动化在起作用,因为源文件夹包含一个名为 main.swift
的文件,等等。
我需要做什么才能构建框架?
我需要编写整个过程的脚本,请不要手动解决方法。
截至 Swift 4.0 swift package generate-xcodeproj
不会自动为所有目标生成方案,但仍然可以从 Xcode 访问这些目标。
如果可以接受一次手动创建新方案,您可以这样做并将您的框架目标添加为方案构建目标。
否则,可以使用 xcodeswift/xcproj 等库以编程方式创建新方案,它允许您解析新生成的 Xcode 项目并使用其 XCSharedData
class.
创建新框架方案后,您可以 运行 使用 xcodebuild -workspace MyThing.xcworkspace -scheme MyThingFramework clean build
进行构建。
在一个目标中混合脚本文件和框架代码似乎会使 SwiftPM 感到困惑。将 main.swift
移出源文件夹可以清理一切。
方案 MyThing-Package
创建 Package.swift
中指定的所有构建产品,包括框架。
如果您想将脚本文件放在同一个 XCode 工作区(为了编辑方便),请将它们放在自己的目标中。您甚至可以创建一个可执行产品(这不会创建任何有用的东西,因为可执行文件不能 link 到动态框架)。
我使用 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: [])
)
I 运行 swift package generate-xcodeproj
然后是 pod install
(基于内容无关紧要的 Podfile)。我得到 MyThing.xcworkspace
.
现在我想
xcodebuild -workspace MyThing.xcworkspace -scheme MyThing clean build
应该创建 .framework
-- 但它没有,只出现一个二进制文件。我怀疑这里有一些自动化在起作用,因为源文件夹包含一个名为 main.swift
的文件,等等。
我需要做什么才能构建框架?
我需要编写整个过程的脚本,请不要手动解决方法。
截至 Swift 4.0 swift package generate-xcodeproj
不会自动为所有目标生成方案,但仍然可以从 Xcode 访问这些目标。
如果可以接受一次手动创建新方案,您可以这样做并将您的框架目标添加为方案构建目标。
否则,可以使用 xcodeswift/xcproj 等库以编程方式创建新方案,它允许您解析新生成的 Xcode 项目并使用其 XCSharedData
class.
创建新框架方案后,您可以 运行 使用 xcodebuild -workspace MyThing.xcworkspace -scheme MyThingFramework clean build
进行构建。
在一个目标中混合脚本文件和框架代码似乎会使 SwiftPM 感到困惑。将 main.swift
移出源文件夹可以清理一切。
方案 MyThing-Package
创建 Package.swift
中指定的所有构建产品,包括框架。
如果您想将脚本文件放在同一个 XCode 工作区(为了编辑方便),请将它们放在自己的目标中。您甚至可以创建一个可执行产品(这不会创建任何有用的东西,因为可执行文件不能 link 到动态框架)。