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

时间:2020-06-16 20:16:35

标签: swift xcode swift-package-manager

我正在使用没有与xcodeproject文件关联的Swift Package Manager,并且在通过他的终端进行构建时出现错误。当我调用swift build命令时,我收到一个错误,指出MacOS构建失败。我正在构建的程序包不支持MacOS(它使用UIKit),仅支持iOS。我想不出一种方法来调用该命令以仅指定该构建针对iOS。我在Google周围搜索时没有运气。是否存在从终端为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: [
...

我在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 ^

2 个答案:

答案 0 :(得分:2)

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'

答案 1 :(得分:0)

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