如何通过命令行为 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.

Source

所以我猜将来会有更优雅的解决方案。

从 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