如何在Swift Package Manager中为Target链接系统框架?
嗨Michael,这个问题我太熟悉啦!在Swift Package Manager里给Target配置系统框架的链接其实很简单,和你在Xcode里的图形化操作对应,只需要在Package.swift的Target配置里添加相关的链接设置就行,我给你详细讲讲:
1. 基本的系统框架链接配置
如果你要链接的是像CoreLocation、AVFoundation这类标准系统框架,直接在Target的linkerSettings里用.linkedFramework()方法声明就好。举个例子,假设你的Target名叫MyAwesomePackage,要链接CoreLocation:
let package = Package( name: "MyAwesomePackage", products: [ .library(name: "MyAwesomePackage", targets: ["MyAwesomePackage"]), ], targets: [ .target( name: "MyAwesomePackage", dependencies: [], linkerSettings: [ // 这里添加要链接的系统框架 .linkedFramework("CoreLocation") ] ), .testTarget( name: "MyAwesomePackageTests", dependencies: ["MyAwesomePackage"] ), ] )
2. 针对特定平台的框架链接
有些系统框架是平台专属的,比如iOS的UIKit、macOS的AppKit,你可以通过.when(platforms:)来指定只在特定平台上链接:
.linkerSettings([ .linkedFramework("UIKit", .when(platforms: [.iOS, .tvOS])), .linkedFramework("AppKit", .when(platforms: [.macOS])) ])
3. 弱链接(Weak Linking)系统框架
如果你的包需要兼容旧系统版本,而某些框架在旧系统里不存在,就需要用弱链接,这样即使框架不存在,App也能正常启动。只需要在.linkedFramework()里加上.optional参数:
.linkerSettings([ .linkedFramework("ARKit", .optional) ])
小提示
- 配置完
Package.swift后,Xcode会自动识别这些链接设置,不需要再手动在项目的Build Phases里添加框架啦; - 代码里该
import框架的地方还是要手动加,SPM只是帮你完成链接步骤,导入还是得自己来~
内容的提问来源于stack exchange,提问作者Michael_mhr
相关产品推荐
相关产品推荐

