将框架从 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