Swift包管理器 - UIKit依赖

时间:2016-01-13 23:11:23

标签: swift swift2 swift-package-manager

我的项目中有一个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?

6 个答案:

答案 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 的目标以使其可用:

Demo

如果你让它选择 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