首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >macOS平台Swift软件包中的iOS构建错误

macOS平台Swift软件包中的iOS构建错误
EN

Stack Overflow用户
提问于 2021-06-17 09:43:10
回答 1查看 355关注 0票数 2

我正在尝试将对Swift软件包管理器的支持添加到我的一个框架中。该框架是特定于iOS的(我在它上使用了UIKit ),因此我将platforms配置添加到我的Package.swift文件中,现在看起来如下所示:

代码语言:javascript
复制
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时,我会得到以下错误。

代码语言:javascript
复制
error: no such module 'UIKit'

添加-v标志使编译更加冗长,我看到它正在尝试为macOS构建包,这就是它失败的原因。

如果macOS没有在platforms中列出,它为什么要为它构建框架?难道这不是制作iOS特定的快捷包的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-29 08:33:14

我自己也遇到过这种情况,关键是您在platforms中定义的支持平台列表并不排除您没有列出的任何平台,它只为您所做的平台设置了一个最小值。

这在SupportedPlatform中是不清楚的。然而,在用Xcode创建一个独立的Swift包页面中,在底部有一个评论来解决这个问题(我的重点是):

注意下面的包清单是如何通过将最小部署目标作为值传递给Package初始化程序的platforms参数来声明最小部署目标的。然而,将最小部署目标传递给初始化程序并不会将包限制在列出的平台上。

相反,您可以做的是在代码周围使用条件编译块。所以,而不是仅仅

代码语言:javascript
复制
import UIKit

extension UIColor {
  // or whatever UIKit dependency you're using
}

您可以将代码包装在一个检查中,这样如果您正在为macOS构建代码,它将跳过所有内容:

代码语言:javascript
复制
#if !os(macOS)
import UIKit

// your code
#endif

甚至,更聪明一点的是,检查UIKit的存在,以便您构建的是基于功能集而不是平台:

代码语言:javascript
复制
#if canImport(UIKit)
import UIKit

// your code
#endif
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68016809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档