Swift包管理器 - UIKit依赖

Ona*_*ato 18 swift swift2 swift-package-manager

我的项目中有一个Package.swift,如:

import PackageDescription

let package = Package(
    name: "ProjectName",
        dependencies: [
           .Package(url: "https://github.com/intellum/neeman.git", majorVersion: 0)
        ]
 )
Run Code Online (Sandbox Code Playgroud)

当我跑步时,swift build我得到的错误就像......

/project/Packages/WebViewController.swift:1:8: error: no such module 'UIKit'
import UIKit
       ^
Run Code Online (Sandbox Code Playgroud)

我应该在哪里告诉swift包管理器在哪里找到UIKit?

Moj*_*ini 41

使其不受平台限制地工作:

您应该选择一个基于 iOS 的目标以使其可用:

演示

如果您选择 macOS(默认情况下),您将收到错误消息。


仅限特定平台

如果您希望您的包仅适用于特定平台(例如仅适用于 iOS),您应该在文件中指定平台package.swift

let package = Package(
    name: "MyLibrary",
    platforms: [
        .iOS(.v10)
    ],
    products: [
,,,
Run Code Online (Sandbox Code Playgroud)

支持多平台

如果您需要框架在多个平台上可用,请不要忘记检查导入框架的可用性,例如:

#if canImport(UIKit)

import UIKit

#endif
Run Code Online (Sandbox Code Playgroud)

  • 这就是答案! (6认同)

小智 32

您必须更改一些 swiftc 选项才能针对正确的 sdk 和目标构建项目

swift build -Xswiftc "-sdk" -Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" -Xswiftc "-target" -Xswiftc "x86_64-apple-ios13.0-simulator"
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案!我也可以使用以下命令确认它适用于 iOS 14: `swift build -Xswiftc "-sdk" -Xswiftc "\`xcrun --sdk iphonesimulator --show-sdk-path\`" -Xswiftc "-target" -Xswiftc “x86_64-apple-ios14.0-模拟器”` (6认同)
  • 我正在尝试为“watchOS”和“macCatalyst”构建。我发现我可以使用“watchsimulator”和“macosx”代替“iphonesimulator”,但我无法找出可用“-target”值的列表。您是如何找到“x86_64-apple-ios13.0-simulator”的? (2认同)

Joe*_*ick 18

目前 Swift Package Manager 有完整的 Xcode 支持。我能够通过在我的 Package.swift 清单中指定平台是 iOS 来解决这个错误。

let package = Package(
    name: "MyPackage",
    platforms: [
        .iOS(.v8)
    ],
Run Code Online (Sandbox Code Playgroud)

然后你可以在 Xcode 中打开 Package.swift 文件,它就会正常工作。

  • 即使在定义平台时,我也遇到了最初的问题。 (9认同)
  • 定义平台后,请确保在构建时在顶部选择了 iPhone 模拟器。 (9认同)

GoZ*_*ner 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或架构的知识(或选项).我们也没有机制来指定清单中哪些平台目标兼容.

  • 现在这个答案似乎完全过时了,因为[SPM 支持 macOS、iOS、tvOS、watchOS 和 Linux,Windows 和 Android 即将推出](https://github.com/apple/swift-package-manager/blob/master/ Sources/PackageDescription/SupportedPlatforms.swift),以及 [macOS 现在有 UIKit](https://developer.apple.com/mac-catalyst/)。 (6认同)
  • Swift Package Manager不仅适用于OS X和Linux; 这些只是它支持的当前平台.计划支持其他平台. (3认同)

Sco*_*des 7

在此输入图像描述

确保选择 iPhone 作为模拟器目标。Mac 目标是默认的,这是行不通的...如果 Xcode 可以查看清单并根据该清单选择默认模拟器,那就太棒了...