自动将 Haskell 库打包为 Swift 二进制 XCFramework

主要观点:介绍了将 Haskell 库添加到 Swift 应用程序依赖项的“无恶魔”方式,即构建独立的 Swift 包来包装 Haskell 库,可使用xcframework库实现,还介绍了xcframework的相关内容、安装方法、在 XCode 中的使用、构建简单 Swift 包的方法以及必须使用的 Cabal Foreign Library stanza 等,并对结论进行了阐述。
关键信息:

  • xcframework是 Apple 引入的多平台二进制框架包,可从二进制可链接工件和几个头文件创建 Swift 包。
  • 在 Cabal 文件中更改build-typeHooks,添加setup-depends依赖项xcframework,并创建SetupHooks.hs文件来生成.xcframework
  • 在 XCode 中,将.xcframework添加到目标设置的“Frameworks, Libraries, and Embedded Content”部分,在 Swift 模块中导入 RTS 并使用Haskell.Foreign.Exports
  • 在独立的 Swift 包中,在Package.swift中添加MyHaskellLib.xcframework作为二进制目标和依赖项。
  • foreign exports 必须从foreign-libraryCabal stanza 导出。
    重要细节:
  • Cabal SetupHooks可用于合并构建 Haskell 库和创建 Swift 包的过程。
  • 在 XCode 中使用.xcframework时,要在入口 Swift 模块中导入 RTS 并在适当位置初始化和退出 RTS。
  • 提供了一个小演示项目来演示工作设置。
    结论:构建 Haskell 库作为独立的 Swift 包是更健壮的方式,xcframework库利用SetupHooksAPI 使创建 XCFrameworks 变得容易,同时仍存在一些挑战,如高级数据类型的编组和共享,欢迎提交 bug 报告。
阅读 8
0 条评论