将框架从 SwiftPM 嵌入到 Cocoa 应用程序 (XCODE)

Posted

技术标签:

【中文标题】将框架从 SwiftPM 嵌入到 Cocoa 应用程序 (XCODE)【英文标题】:Embedding Frameworks from SwiftPM into Cocoa Application (XCODE) 【发布时间】:2017-11-07 20:54:38 【问题描述】:

我正在使用一个使用 SwiftPM 构建的名为“HAP”(https://github.com/Bouke/HAP) 的项目。

包含的示例“HAP-server”在命令行中运行良好,我使用参数“swift package generate-xcodeproj”创建了一个 XCODE 项目。

我还可以在 XCODE 中加载 HAP 并构建/调试目标“HAP-server”。

我想在我的 Cocoa 应用程序中使用这个框架,并将 HAP.xcodeproj 添加到我的项目中。我将生成的文件添加为“嵌入式二进制文件”和“链接框架和库”。

这允许我将 HAP “导入”到我的视图控制器类中。

但是,当我尝试构建我的 Cocoa 目标时,我收到以下消息 - 似乎与 HAP 项目中的依赖项“Kitura-net”有关...

“缺少必需的模块:'CCurl'、'CHTTPParser'”

在我的项目中使用 SwiftPM 框架的最佳方式是什么?

我认为这与搜索标题有关...有人知道吗?

更新 #1:

我尝试添加到我的 Cocoa 项目中,该项目正在通过“Link Binary With Libraries”导入使用 Kitura 的库,libcurl.4.dylib from usr/lib/ 但它仍然给我同样的错误。

更新 #2:

更新 #3

我最终通过使用这种方法解决了这个问题:Importing CommonCrypto in a Swift framework

我需要为它所涉及的每个项目创建一个模块映射,在我的例子中:CCURL 和 CHTTPParser。一旦我这样做了,我就可以编译了。

【问题讨论】:

【参考方案1】:

您可以在此 repo https://github.com/IBM-Swift/Kitura-HelloWorld-ios 中查看将 Kitura 嵌入 Xcode 项目的示例。此 repo 中的 Makefile 运行构建脚本来修复 Xcode 项目以在 iOS 上运行 Kitura。您需要为 iOS 编译 curl - 请参阅 README 中的说明。

据我所知,您需要将带有 curl 标头的目录添加到 Header Search Paths,将带有 libcurl.a 的目录添加到 Library Search Paths,并将 -lz 标志添加到 Other Linker Flags

【讨论】:

会试一试——我假设这个过程适用于 MacOS Cocoa 应用程序——我的 iOS 项目不需要它(我有一个多目标项目)—— - 这仅适用于 MacOS 应用程序...我看到它生成 x64 位,所以我应该没问题。 我更近了!!它为 iOS 编译了这些位——但我需要 MacOS——是否有适用于 MacOS 平台的 doBuildCurl.sh? 对于 MacOS 的 libcurl 应该已经安装,不需要构建它。库应该在/usr/lib/libcurl.dlyb,标题在/usr/include/curl 感谢您的快速响应——我想我们快到了——那么我该如何导入该库呢?我是在我的可可应用项目还是使用 Kitura 框架的 HAP 项目中这样做?有什么项目可以说明这一点?我已经更新了上面的主要帖子,其中添加了“将二进制文件与库链接”添加 libcurl.4.dylib 的屏幕截图——仍然没有骰子! 我认为您应该将库添加到这两个项目中。当我们嵌入 Kitura n iOS 项目时,我们将 curl 库添加到 Library Search Paths,它的 headers 到 Header Search Paths,并在 Other Linker Flags 中指定 -lz

以上是关于将框架从 SwiftPM 嵌入到 Cocoa 应用程序 (XCODE)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cocoa 应用程序中嵌入的 AppleScript-ObjC 处理错误的最佳方法?

带有嵌入库的 Cocoa Touch Framework Swift

Cocoa Touch 框架无法识别

Cocoa Touch 框架无法在嵌入项目中的模拟器上调试

将 Cocoa Touch 框架链接到 Today Extension 时出现链接器错误

从 C++ 和 Objective-C++ 链接到 Cocoa 框架