Swift Package Manager如何配置依赖远程XCFramework以降低编译时长
关于SPM直接依赖远程XCFramework的问题解答
首先可以明确,你提到的直接将XCFramework压缩包地址写入.package依赖的写法不可行:SPM 要求.package(url:)参数对应的地址必须是一个包含Package.swift描述文件的Git仓库,无法直接识别单个二进制压缩包作为依赖源。
要实现依赖预编译XCFramework、避免源码编译的需求,有两种成熟的实现方案:
方案1:使用官方提供的二进制SPM仓库
大部分主流第三方SDK官方都单独维护了无源码、仅声明二进制依赖的SPM仓库,你示例中用到的AppsFlyer的依赖地址就是这类仓库,拉取时只会下载对应二进制文件,不会触发编译。
你提到的Facebook、Firebase也均提供了这类官方二进制SPM源,直接替换你现有依赖中的源码仓库地址即可,无需额外改造。
方案2:自建二进制依赖声明仓库
如果对应SDK没有官方提供的二进制SPM源,你可以自行创建一个空的Git仓库,仅在仓库中放置Package.swift文件,通过binaryTarget声明对应远程XCFramework的地址和校验值即可,示例配置如下:
// swift-tools-version:5.3 import PackageDescription let package = Package( name: "FacebookBinary", platforms: [.iOS(.v11)], products: [ .library(name: "FacebookCore", targets: ["FacebookCore"]), .library(name: "FacebookLogin", targets: ["FacebookLogin"]) ], targets: [ .binaryTarget( name: "FacebookCore", url: "https://github.com/facebook/facebook-ios-sdk/releases/download/v11.1.0/FacebookCore.xcframework.zip", checksum: "替换为对应zip包的SHA256校验和" ), .binaryTarget( name: "FacebookLogin", url: "https://github.com/facebook/facebook-ios-sdk/releases/download/v11.1.0/FacebookLogin.xcframework.zip", checksum: "替换为对应zip包的SHA256校验和" ) ] )
校验和可以通过终端命令计算,执行以下指令即可得到对应压缩包的合法校验值:swift package compute-checksum 本地下载的XCFramework压缩包路径
配置完成后,你的业务SPM模块直接依赖这个自建的二进制声明仓库即可,拉取依赖时会直接下载预编译的XCFramework文件,全程不会触发源码编译,可大幅降低全量编译耗时。
内容的提问来源于stack exchange,提问作者Sergey Pekar
相关产品推荐
相关产品推荐

