swift2 Swift软件包管理器- UIKit依赖关系

shyt4zoc  于 2022-11-06  发布在  Swift
关注(0)|答案(7)|浏览(237)

我有一个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在哪里?

ego6inou

ego6inou1#

您必须更改一些swiftc选项,以便根据正确的sdk和目标构建项目

swift build -Xswiftc "-sdk" -Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" -Xswiftc "-target" -Xswiftc "x86_64-apple-ios13.0-simulator"
up9lanfz

up9lanfz2#

使其工作不受平台限制:

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

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

限制为特定平台

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

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

支持多平台

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


# if canImport(UIKit)

import UIKit

# endif
mxg2im7a

mxg2im7a3#

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

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

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

stszievb

stszievb4#

Swift软件包管理器构建了在OS X(或Linux)上运行的可执行文件; UIKit是iOS中的一个框架,无法访问。
随着Swift软件包管理器的发展,iOS、tvOS和其他系统可能会变得可访问。
2015年12月4日下午5点39分,丹尼尔·邓巴(@apple.com)写道:
...
对,现在我们只针对主机平台(目前是OS X或Linux)进行编译。除此之外,我们目前还不知道(或选择)您的目标是什么SDK或架构。我们也没有在清单中指定目标与哪些平台兼容的机制。

o8x7eapl

o8x7eapl5#

确保你选择了一个iPhone作为模拟器目标。Mac目标是默认的,这是行不通的...如果Xcode可以看看清单,并选择一个默认的模拟器的基础上,这将是可怕的...

tvz2xvvm

tvz2xvvm6#

使用条件式编译区块:


# if canImport(UIKit)

// Code specific to platforms where UIKit is available

# endif

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

7qhs6swi

7qhs6swi7#

如果您的umbrella header(<module_name.h>)About(https://stackoverflow.com/a/57481319/4770877)包含


# import <UIKit/UIKit.h>

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

相关问题