我正在尝试构建一个 Swift 包,它包装了一个用 C: libndi_advanced_ios.a编写的来自NewTek 的 Apple Advanced NDI SDK的胖静态库。
我无法将预编译库(只有头文件和 .a 二进制包可用)链接到我的 Swift 包。我做了很多研究并尝试了不同的解决方案,但都没有奏效。这是一个快速列表:
无法捆绑在 XCFramework 中,因为libndi_advanced_ios.a支持多个平台(arm_v7、i386、x86_64、arm64)并
xcodebuild -create-xcframework
返回错误binaries with multiple platforms are not supported
(该解决方案也在Swift 论坛上进行了讨论);按照SPM 文档中的建议使用
.linkedLibrary
in (已过时)会发出警告,我什至不记得它是否成功构建;targets
system packages are deprecated; use system library targets instead
使用不同的标志和设置(如
linkerSettings
)没有成功。也许我只是错过了正确的组合。
我可以链接几十个 Stackoverflow 的问题和其他没有帮助的帖子,但它是无用的(a,b,c)。
目前我有这个配置:
其中Package.swift
包含以下代码:
let package = Package(
name: "swift-ndi",
platforms: [.iOS(.v12)],
products: [
.library(
name: "swift-ndi",
targets: ["swift-ndi"])
],
dependencies: [],
targets: [
.target(name: "CiOSNDI", path: "Libraries"),
.target(
name: "swift-ndi",
dependencies: ["CiOSNDI"]),
.testTarget(
name: "swift-ndiTests",
dependencies: ["swift-ndi"]),
]
)
您可以在alessionossa/swift-ndi找到整个项目。
目前唯一的结果是一些警告并且模块 CiOSNDI 没有构建:
我也尝试过.systemLibrary(name: "CiOSNDI", path: "Libraries/"),
这种配置:alessionossa/swift-ndi/tree/systemLibrary;但我收到这些错误:
笔记
NDI_include
实际上是指向 的别名/符号链接/Library/NDI Advanced SDK for Apple/include
,而NDI_iOS_lib
指向/Library/NDI Advanced SDK for Apple/lib/iOS
.
我总是在更改为Package.swift
.
2022 年 10 月 1 日更新:libndi_advanced_ios.a需要libc++.tbd。这可以在Build Phases -> Link Binary With Libraries中的应用程序中轻松链接,但我不知道如何在 Swift 包中链接。