我有一个Package.swift在我的项目中,比如:
import PackageDescription
let package = Package(
name: "ProjectName",
dependencies: [
.Package(url: "https://github.com/example/repo.git", majorVersion: 0)
]
)
当我运行swift build
时,我得到如下错误...
/project/Packages/WebViewController.swift:1:8: error: no such module 'UIKit'
import UIKit
^
我应该在哪里告诉swift软件包管理器UIKit在哪里?
7条答案
按热度按时间ego6inou1#
您必须更改一些swiftc选项,以便根据正确的sdk和目标构建项目
up9lanfz2#
使其工作不受平台限制:
您应选择一个 * 基于iOS的目标 * 以使其可用:
如果您让它选择macOS(默认情况下),您将得到错误。
限制为特定平台
如果您希望软件包仅可用于特定平台(例如仅用于iOS),则应在
package.swift
文件中指定平台:支持多平台
如果您需要您的框架在多个平台上可用,不要忘记检查导入的框架的可用性,如:
mxg2im7a3#
目前Swift软件包管理器有完整的Xcode支持。我能够通过在我的Package.swift清单中指定平台是iOS来绕过这个错误。
然后你可以在Xcode中打开Package.swift文件,它就会正常工作。
stszievb4#
Swift软件包管理器构建了在OS X(或Linux)上运行的可执行文件; UIKit是iOS中的一个框架,无法访问。
随着Swift软件包管理器的发展,iOS、tvOS和其他系统可能会变得可访问。
2015年12月4日下午5点39分,丹尼尔·邓巴(@apple.com)写道:
...
对,现在我们只针对主机平台(目前是OS X或Linux)进行编译。除此之外,我们目前还不知道(或选择)您的目标是什么SDK或架构。我们也没有在清单中指定目标与哪些平台兼容的机制。
o8x7eapl5#
确保你选择了一个iPhone作为模拟器目标。Mac目标是默认的,这是行不通的...如果Xcode可以看看清单,并选择一个默认的模拟器的基础上,这将是可怕的...
tvz2xvvm6#
使用条件式编译区块:
来源:https://developer.apple.com/documentation/xcode/creating_a_swift_package_with_xcode
7qhs6swi7#
如果您的
umbrella header(<module_name.h>)
About(https://stackoverflow.com/a/57481319/4770877)包含这意味着你可以跳过在每个文件中指定
import UIKit
。但是SPM
似乎不支持它。而且我也不支持使用@_exported
属性您可以显式地编写
import UIKit