You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Swift Package Manager创建闭源库并隐藏代码?

使用Swift Package Manager创建闭源库的方法

当然可以用SPM来搭建闭源库!很多教程默认聚焦开源场景,但SPM其实早就支持预编译二进制包的方式,完美适配你需要隐藏源码的需求——毕竟总有一些核心代码不方便公开嘛。

下面是具体的实现步骤:

1. 先把你的库编译成二进制框架

首先你需要把闭源的代码编译成对应平台的二进制框架(.framework.xcframework),这里有两种常用方式:

方式一:用swift build命令编译

针对macOS、Linux这类平台,直接在终端执行:

swift build --configuration release

如果需要生成支持多架构的通用二进制(比如同时支持arm64和x86_64的macOS包),可以加架构参数:

swift build --configuration release --arch arm64 --arch x86_64

编译后的二进制文件会放在 .build/release 目录下。

方式二:用xcodebuild编译iOS/watchOS等Apple平台框架

如果你的库要支持iOS、iPadOS这类需要签名的平台,更适合用xcodebuild生成.xcframework(跨平台通用框架),示例命令:

xcodebuild archive -scheme YourLibraryName -destination "generic/platform=iOS" -archivePath ./ios-arm64.xcarchive SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild archive -scheme YourLibraryName -destination "generic/platform=iOS Simulator" -archivePath ./ios-x86_64.xcarchive SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild -create-xcframework -framework ./ios-arm64.xcarchive/Products/Library/Frameworks/YourLibraryName.framework -framework ./ios-x86_64.xcarchive/Products/Library/Frameworks/YourLibraryName.framework -output YourLibraryName.xcframework

执行完就能得到一个包含真机和模拟器架构的.xcframework文件。

2. 在SPM的Package.swift中引用二进制目标

接下来修改你的Package.swift文件,用binaryTarget来替代原来的target(源码目标),示例配置如下:

本地引用二进制包(适合自己测试或内部团队使用)

// swift-tools-version: 5.8
import PackageDescription

let package = Package(
    name: "YourClosedSourceLibrary",
    platforms: [
        .iOS(.v15),
        .macOS(.v12)
    ],
    products: [
        .library(
            name: "YourClosedSourceLibrary",
            targets: ["YourClosedSourceLibrary"]
        )
    ],
    targets: [
        .binaryTarget(
            name: "YourClosedSourceLibrary",
            path: "./YourLibraryName.xcframework" // 这里填你的二进制框架路径
        )
    ]
)

远程引用二进制包(适合分发给外部开发者)

如果要把闭源库作为远程包提供给别人,你需要把二进制框架上传到服务器,然后在Package.swift中配置urlchecksum

.binaryTarget(
    name: "YourClosedSourceLibrary",
    url: "https://your-server.com/path/to/YourLibraryName.xcframework.zip",
    checksum: "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
)

获取checksum的方法:把二进制框架打包成zip后,执行swift package compute-checksum ./YourLibraryName.xcframework.zip就能得到对应的校验值。

3. 额外注意事项

  • 确保二进制框架的架构和你声明的platforms完全匹配,否则其他开发者引入时会出现编译错误。
  • 如果你的闭源库依赖其他开源包,记得在Package.swiftdependencies中声明这些依赖,SPM会自动处理依赖关系。
  • 对于需要代码签名的平台(比如iOS),编译二进制框架时要加上BUILD_LIBRARY_FOR_DISTRIBUTION=YES,这样才能保证其他项目引入后正常使用。

内容的提问来源于stack exchange,提问作者Sirop4ik

火山引擎 最新活动