无法在 SwiftPM 的 ObjC 模块中导入 AppKit

Posted

技术标签:

【中文标题】无法在 SwiftPM 的 ObjC 模块中导入 AppKit【英文标题】:Cant import AppKit in ObjC-module of SwiftPM 【发布时间】:2018-01-13 13:50:37 【问题描述】:

我尝试使用以下代码将 AppKit 导入 Swift-Packet 模块的标头中:

#import <AppKit/AppKit.h>

但是编译器抛出了这个错误:

fatal error: 'AppKit/AppKit.h' file not found

我应该以某种方式在 Package 的 Package.swift 文件中将其指定为依赖项吗?

提前致谢

迈克尔

【问题讨论】:

【参考方案1】:

请注意,Swift 包管理器 (SPM) 是为服务端 Swift 设计的,而不是为客户端设计的。具体来说,AppKit 可能没有移植到服务器端 Swift,因此您无法将 AppKit 与 SPM 一起使用。 AppKit 是 Objective-C 运行时的一部分。 SPM 在构建过程中不考虑 Objective-C 运行时。

来自swift.org, Platform Support:

我们的目标是在所有平台上为 Swift 提供源代码兼容性,即使实际实现机制可能因平台而异。主要示例是 Apple 平台包含 Objective-C 运行时,这是访问 Apple 平台框架(如 UIKit 和 AppKit)所必需的。在其他平台上,例如 Linux,没有 Objective-C 运行时存在,因为它不是必需的。

Swift 核心库项目旨在通过提供基本 Apple 框架(例如 Foundation)的可移植实现而不依赖于 Objective-C 运行时来扩展 Swift 的跨平台功能。尽管核心库处于早期开发阶段,但它们最终将为 Swift 代码在所有平台上提供改进的源代码兼容性。

【讨论】:

【参考方案2】:

我刚刚通过在 Xcode 中链接这个框架解决了这个问题。 我不知道如何在 Package.swift 文件中指定它,但知道它有效。

问候

【讨论】:

以上是关于无法在 SwiftPM 的 ObjC 模块中导入 AppKit的主要内容,如果未能解决你的问题,请参考以下文章

在swift中导入swift链接的objc类

无法在 .tsx 文件中导入 CSS 模块

为啥 VS Code 无法在我的程序中导入 timeit 模块?

无法在 python 脚本中导入 google.cloud 模块

无法在 Python 中导入我自己的模块

无法加载模块脚本 - 在 index.html 中导入类