TL;博士
尝试在 Xcode 的 iOS 项目中使用本地 Swift 包依赖项时,出现以下错误:
The package product 'DlibWrapper' cannot be used as a dependency of this target because it uses unsafe build flags.
(我使用不安全标志来指定静态库位置)
我还尝试将包作为基于远程分支的依赖项导入,但无论如何它都失败了。
根据Swift 论坛上的这篇文章,该问题已在不久前得到解决,并且相应的拉取请求已被合并。
Swift 5.2.4 (Xcode 11.6) 和 5.3 (Xcode 12 beta 3) 都会出现这个问题。
任何线索可能是什么问题?
细节
我正在尝试构建一个包装dlib库并在 iOS 应用程序中使用它的 Swift 包。由于平台的原因,我无法使用.systemLibrary
目标链接dlib
. 所以我将它预编译在一个静态库中,并与包装器代码一起打包,如下所示:
DlibWrapper/
Libraries/
dlib/
include/
...
lib/
arm64/
libdlib.a
Sources/
CWrapper/
include/
module.modulemap
cwrapper.h
cwrapper.cpp
SwiftWrapper/
SwiftWrapper.swift
Package.swift
的简化内容DlibWrapper/Package.swift
:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "DlibWrapper",
platforms: [
.iOS(.v13)
],
products: [
.library(
name: "DlibWrapper",
targets: ["CWrapper", "SwiftWrapper"])
],
dependencies: [],
targets: [
.target(
name: "SwiftWrapper",
dependencies: ["CWrapper"]
),
.target(
name: "CWrapper",
cxxSettings: [.headerSearchPath("../../Libraries/dlib/include")],
linkerSettings: [
.linkedLibrary("dlib"),
.linkedFramework("Accelerate", .when(platforms: [.iOS])),
// The error is caused by this line
.unsafeFlags(["-LLibraries/dlib/lib/arm64"], .when(platforms: [.iOS])),
]
),
],
cxxLanguageStandard: .cxx1z
)
我试图在link
内部使用该属性,module.modulemap
但编译器似乎忽略了它。此外,在目标清单中提供库的绝对路径.linkedLibrary()
也无济于事,链接器抱怨它找不到库。
任何解决方法的想法?(作为最后的手段,我可能会将所有内容打包在一个框架中)
将不胜感激任何帮助。
谢谢