主要观点:介绍了将 Haskell 库添加到 Swift 应用程序依赖项的“无恶魔”方式,即构建独立的 Swift 包来包装 Haskell 库,可使用xcframework
库实现,还介绍了xcframework
的相关内容、安装方法、在 XCode 中的使用、构建简单 Swift 包的方法以及必须使用的 Cabal Foreign Library stanza 等,并对结论进行了阐述。
关键信息:
xcframework
是 Apple 引入的多平台二进制框架包,可从二进制可链接工件和几个头文件创建 Swift 包。- 在 Cabal 文件中更改
build-type
为Hooks
,添加setup-depends
依赖项xcframework
,并创建SetupHooks.hs
文件来生成.xcframework
。 - 在 XCode 中,将
.xcframework
添加到目标设置的“Frameworks, Libraries, and Embedded Content”部分,在 Swift 模块中导入 RTS 并使用Haskell.Foreign.Exports
。 - 在独立的 Swift 包中,在
Package.swift
中添加MyHaskellLib.xcframework
作为二进制目标和依赖项。 foreign export
s 必须从foreign-library
Cabal stanza 导出。
重要细节:- Cabal SetupHooks可用于合并构建 Haskell 库和创建 Swift 包的过程。
- 在 XCode 中使用
.xcframework
时,要在入口 Swift 模块中导入 RTS 并在适当位置初始化和退出 RTS。 - 提供了一个小演示项目来演示工作设置。
结论:构建 Haskell 库作为独立的 Swift 包是更健壮的方式,xcframework
库利用SetupHooks
API 使创建 XCFrameworks 变得容易,同时仍存在一些挑战,如高级数据类型的编组和共享,欢迎提交 bug 报告。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。