我最近把我的一堆框架转换为使用Swift Package Manager。我的Package.swift
看起来是这样的:
// swift-tools-version:5.1
import PackageDescription
let package = Package(
name: "MDFToolbox",
platforms: [
.macOS(.v10_13), .iOS(.v12), .tvOS(.v12), .watchOS(.v3)
],
products: [
.library(name: "MDFToolbox", targets: ["MDFToolbox"])
],
dependencies: [
.package(url: "git@github.com:Swinject/Swinject.git", from: "2.7.0"),
],
targets: [
.target(name: "MDFToolbox", dependencies: ["Swinject"]),
]
)
由于该库曾经是一个框架,我想将其作为动态库(.dylib
)链接到我的应用程序中。根据软件包文档中的库产品定义,如果需要,我可以指定我的库的type
为.dynamic
:
如果我将其保留为空,Xcode在将库链接到我的应用程序项目时默认构建一个静态库,这不是我想要的。库的可选类型用于确定如何链接到库。将此参数留空以让Swift Package Manager选择静态或动态链接(建议)。如果不支持两种链接类型,请使用.static或.dynamic。
如果我在我的库的Package.swift中将类型设置为
.dynamic
,Xcode会构建一个.dylib
,但它不会嵌入到应用程序中,导致链接错误。dyld: Library not loaded: @rpath/libMDFToolbox.dylib
Referenced from: /Users/mpdifran/Library/Developer/Xcode/DerivedData/Remind-eewbkbjpfrqbdwchjrbmrtxzsjew/Build/Products/Debug-maccatalyst/Remind.app/Contents/MacOS/Remind
Reason: no suitable image found. Did find:
/Users/mpdifran/Library/Developer/Xcode/DerivedData/Remind-eewbkbjpfrqbdwchjrbmrtxzsjew/Build/Products/Debug-maccatalyst/libMDFToolbox.dylib: code signature in (/Users/mpdifran/Library/Developer/Xcode/DerivedData/Remind-eewbkbjpfrqbdwchjrbmrtxzsjew/Build/Products/Debug-maccatalyst/libMDFToolbox.dylib) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
我也没看到简单的方法来将.dylib
添加到复制文件构建阶段中...
那么,要求SPM通过Xcode构建和链接动态库的推荐方法是什么?这是尚未支持的功能吗?