你如何使用 SPM 构建 iOS 特定的包?

Cap*_*rmi 6 xcode swift swift-package-manager

我使用的 Swift Package Manager 没有与之关联的 xcodeproject 文件,并且在通过终端构建时出现错误。当我调用该swift build命令时,我收到一条错误消息,指出 MacOS 构建失败。我正在构建的包不支持 MacOS(它使用 UIKit),但只支持 iOS。我想不出一种方法来调用命令来只指定构建是针对 iOS 的。我已经谷歌搜索了,但没有运气。如果存在从终端为 iOS 构建 SPM 包,有人知道正确的语法吗?

我使用的 Swift 版本是:“Apple Swift 版本 5.2.4 (swiftlang-1103.0.32.9 clang-1103.0.32.53)”

我已经在 Package.swift 文件中指定了平台

let package = Package(
    name: "Package",
    platforms: [.iOS(.v10), ],
    products: [
...
Run Code Online (Sandbox Code Playgroud)

我在 github https://github.com/mike011/Swift-Package-Manager-Example上创建了一个示例项目。当我运行swift build它失败

/git/Swift-Package-Manager-Example/Sources/Swift-Package-Manager-Example/iOSSpecificFile.swift:9:8: error: no such module 'UIKit' import UIKit ^ /git/Swift-Package-Manager-Example/Sources/Swift-Package-Manager-Example/iOSSpecificFile.swift:9:8: error: no such module 'UIKit' import UIKit ^

Ale*_*ath 8

我通过将所有文件包装在#if !os(macOS) #endif块中“解决”了这个问题。因此该软件包是在 Mac 上构建的,但它没有任何内容。

  • 难道没有更好的方法吗? (2认同)

bsc*_*ern 5

SwiftPM 目前没有办法禁止针对特定平台进行构建,但如果您愿意,可以利用最低构建版本在您不支持的平台上导致编译时错误。

例如,如果您不想允许在 macOS 上构建,您可以.macOS("99.0")platforms清单的您的部分中使用平台版本:在 Xcode 中构建时,您将收到与此类似的编译警告和错误:

The macOS deployment target 'MACOSX_DEPLOYMENT_TARGET' is set to 99.0, but the range of supported deployment target versions is 10.8 to 10.16.99
Invalid Darwin version number: macos99.0
Invalid version number in 'target x86_64-apple-macos99.0'
Run Code Online (Sandbox Code Playgroud)