如何通过命令行为 iOS 构建 Swift 包?
How can I build a Swift Package for iOS over command line?
在 Xcode 中,我可以 select 我的目的地作为 "generic iOS device" 或任何 iOS 模拟器,我的包将为 [=31 构建特定于平台的代码=].
通过命令行 "swift build" 仅 构建我的 macOS 目标。
我想为 iOS 构建目标以达到 CI 的目的。为 macOS 构建的问题是不会构建特定于 UIKit 的代码。
例如:
#if canImport(UIKit)
// some invalid code
#endif
无效代码将不会被注意到并将通过构建阶段。
理想情况下,我可以说 swift build -platform iOS
。有没有办法做这样的事情?
在撰写本文时(2019 年 2 月 16 日),可行的解决方案是:
swift build -v \
-Xswiftc "-sdk" \
-Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" \
-Xswiftc "-target" \
-Xswiftc "x86_64-apple-ios13.0-simulator"
此命令使用 -Xswiftc
通过覆盖从 macOS 到 iphonesimulator 的 sdk 来解决问题。
Strictly we add these flags so developers can work around issues, but they also should report a bug so that we can provide a proper solution for their needs.
所以我猜将来会有更优雅的解决方案。
从 Xcode 11 开始,xcodebuild
支持开箱即用的 SwiftPM 包。
示例调用如下所示:
xcodebuild -scheme Foo \
-destination 'platform=iOS Simulator,OS=13.5,name=iPhone 11 Pro'
其中 Foo
是您要构建的库产品的名称。你可以
使用 xcodebuild -list
为您的 SwiftPM 包获取可用方案的完整列表。
您可以使用此调用获取给定方案的可用目的地列表:
xcodebuild -showdestinations -scheme Foo
在 Xcode 中,我可以 select 我的目的地作为 "generic iOS device" 或任何 iOS 模拟器,我的包将为 [=31 构建特定于平台的代码=].
通过命令行 "swift build" 仅 构建我的 macOS 目标。
我想为 iOS 构建目标以达到 CI 的目的。为 macOS 构建的问题是不会构建特定于 UIKit 的代码。
例如:
#if canImport(UIKit)
// some invalid code
#endif
无效代码将不会被注意到并将通过构建阶段。
理想情况下,我可以说 swift build -platform iOS
。有没有办法做这样的事情?
在撰写本文时(2019 年 2 月 16 日),可行的解决方案是:
swift build -v \
-Xswiftc "-sdk" \
-Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" \
-Xswiftc "-target" \
-Xswiftc "x86_64-apple-ios13.0-simulator"
此命令使用 -Xswiftc
通过覆盖从 macOS 到 iphonesimulator 的 sdk 来解决问题。
Strictly we add these flags so developers can work around issues, but they also should report a bug so that we can provide a proper solution for their needs.
所以我猜将来会有更优雅的解决方案。
从 Xcode 11 开始,xcodebuild
支持开箱即用的 SwiftPM 包。
示例调用如下所示:
xcodebuild -scheme Foo \
-destination 'platform=iOS Simulator,OS=13.5,name=iPhone 11 Pro'
其中 Foo
是您要构建的库产品的名称。你可以
使用 xcodebuild -list
为您的 SwiftPM 包获取可用方案的完整列表。
您可以使用此调用获取给定方案的可用目的地列表:
xcodebuild -showdestinations -scheme Foo