我的项目中有一个Package.swift,如:
nethyperlinkbutton
当我运行import PackageDescription
let package = Package(
name: "ProjectName",
dependencies: [
.Package(url: "https://github.com/intellum/neeman.git", majorVersion: 0)
]
)
时,我收到错误,如...
swift build
我应该告诉swift包经理在哪里找到UIKit?
答案 0 :(得分:15)
Swift Package Manager构建可执行文件以在OS X(或Linux)上运行; UIKit是iOS中的一个框架,无法访问。
随着Swift Package Manager的发展,可能会出现iOS,tvOS和其他内容。
2015年12月4日下午5:39,Daniel Dunbar(@ apple.com)写道:
...
是的,现在我们只编译主机平台(OS X或Linux,目前)。除此之外,我们目前还没有您所定位的SDK或架构的知识(或选项)。我们也没有机制来指定清单中哪些平台目标兼容。
答案 1 :(得分:1)
当前,Swift Package Manager具有完整的Xcode支持。我可以通过在Package.swift清单中指定平台为iOS来解决此错误。
let package = Package(
name: "MyPackage",
platforms: [
.iOS(.v8)
],
然后,您可以在Xcode中打开Package.swift文件,它将开始工作。
答案 2 :(得分:1)
您必须更改一些swiftc选项以针对正确的sdk和目标来构建项目
swift build -Xswiftc "-sdk" -Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" -Xswiftc "-target" -Xswiftc "x86_64-apple-ios13.0-simulator"
答案 3 :(得分:1)
您应该选择一个 基于 iOS 的目标以使其可用:
如果你让它选择 macOS(默认情况下),你会得到错误。
如果您希望您的包仅适用于特定平台(例如仅适用于 iOS),您应该在 package.swift
文件中指定平台:
let package = Package(
name: "MyLibrary",
platforms: [
.iOS(.v10)
],
products: [
,,,
如果您需要您的框架在多个平台上可用,请不要忘记检查导入框架的可用性,例如:
#if canImport(UIKit)
import UIKit
#endif
答案 4 :(得分:0)
使用条件编译块:
#if canImport(UIKit)
// Code specific to platforms where UIKit is available
#endif
来源:https://developer.apple.com/documentation/xcode/creating_a_swift_package_with_xcode
答案 5 :(得分:0)
如果您的 umbrella header(<module_name.h>)
[About] 包含
#import <UIKit/UIKit.h>
这意味着您可以跳过在每个文件中指定 import UIKit
。但似乎 SPM
不支持它。我也不支持使用 @_exported
属性
您可以显式地编写 import UIKit