49

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

import PackageDescription

let package = Package(
    name: "ProjectName",
        dependencies: [
           .Package(url: "https://github.com/example/repo.git", majorVersion: 0)
        ]
 )

当我运行时,swift build我会收到类似的错误......</p>

/project/Packages/WebViewController.swift:1:8: error: no such module 'UIKit'
import UIKit
       ^

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

4

7 回答 7

40

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

swift build -Xswiftc "-sdk" -Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" -Xswiftc "-target" -Xswiftc "x86_64-apple-ios13.0-simulator"
于 2019-11-03T21:06:45.563 回答
24

目前 Swift 包管理器有完整的 Xcode 支持。通过在我的 Package.swift 清单中指定平台是 iOS,我能够绕过这个错误。

let package = Package(
    name: "MyPackage",
    platforms: [
        .iOS(.v8)
    ],

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

于 2019-10-10T00:14:29.877 回答
13

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

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

演示

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


仅限于特定平台

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

let package = Package(
    name: "MyLibrary",
    platforms: [
        .iOS(.v10)
    ],
    products: [
,,,

支持多平台

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

#if canImport(UIKit)

import UIKit

#endif
于 2021-02-17T08:17:02.653 回答
12

Swift 包管理器构建可执行文件以在 OS X(或 Linux)上运行;UIKit 是 iOS 中的一个框架,无法访问。

随着 Swift Package Manager 的发展,它可能是 iOS、tvOS 和其他可以访问的。

2015 年 12 月 4 日下午 5:39,Daniel Dunbar (@apple.com) 写道:

...

对,现在我们只编译主机平台(目前是 OS X 或 Linux)。除其他外,我们目前不知道(或可供选择的选项)您所针对的 SDK 或架构。我们也没有机制来指定清单中与哪些平台目标兼容。

于 2016-01-13T23:45:43.087 回答
1

使用条件编译块:

#if canImport(UIKit)

// Code specific to platforms where UIKit is available

#endif

来源:https ://developer.apple.com/documentation/xcode/creating_a_swift_package_with_xcode

于 2019-12-31T13:03:00.433 回答
1

在此处输入图像描述

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

于 2021-09-21T02:07:37.853 回答
0

如果您的umbrella header(<module_name.h>)[关于]包含

#import <UIKit/UIKit.h>

这意味着您可以跳过import UIKit在每个文件中指定。但似乎SPM不支持它。我也不支持使用@_exported属性

你可以import UIKit明确写

于 2021-04-25T12:36:26.850 回答