我正在尝试将对Swift软件包管理器的支持添加到我的一个框架中。该框架是特定于iOS的(我在它上使用了UIKit ),因此我将platforms配置添加到我的Package.swift文件中,现在看起来如下所示:
import PackageDescription
let package = Package(
name: "MyLibrary",
platforms: [
.iOS(.v11)
],
products: [
.library(
name: "MyLibrary",
targets: ["MyLibrary"]),
],
targets: [
.target(
name: "MyLibrary",
path: "Sources"),
.testTarget(
name: "MyLibraryTests",
dependencies: ["MyLibrary"]),
]
)即使包正确地构建在Xcode上。在控制台中运行swift build时,我会得到以下错误。
error: no such module 'UIKit'添加-v标志使编译更加冗长,我看到它正在尝试为macOS构建包,这就是它失败的原因。
如果macOS没有在platforms中列出,它为什么要为它构建框架?难道这不是制作iOS特定的快捷包的方法吗?
发布于 2022-04-29 08:33:14
我自己也遇到过这种情况,关键是您在platforms中定义的支持平台列表并不排除您没有列出的任何平台,它只为您所做的平台设置了一个最小值。
这在SupportedPlatform中是不清楚的。然而,在用Xcode创建一个独立的Swift包页面中,在底部有一个评论来解决这个问题(我的重点是):
注意下面的包清单是如何通过将最小部署目标作为值传递给
Package初始化程序的platforms参数来声明最小部署目标的。然而,将最小部署目标传递给初始化程序并不会将包限制在列出的平台上。
相反,您可以做的是在代码周围使用条件编译块。所以,而不是仅仅
import UIKit
extension UIColor {
// or whatever UIKit dependency you're using
}您可以将代码包装在一个检查中,这样如果您正在为macOS构建代码,它将跳过所有内容:
#if !os(macOS)
import UIKit
// your code
#endif甚至,更聪明一点的是,检查UIKit的存在,以便您构建的是基于功能集而不是平台:
#if canImport(UIKit)
import UIKit
// your code
#endifhttps://stackoverflow.com/questions/68016809
复制相似问题