Scipio 提出了一种新的工作流程,用于将依赖项集成到您的应用程序中。
该产品的灵感主要来自 Carthage 和 swift-create-xcframework。
SwiftPM 是将依赖项集成到您的应用程序中的最佳方式。但是,Xcode 构建的构建产物很难缓存。
另一方面,XCFramework 是一种保持二进制文件可移植性的好方法。
Scipio 提供了一种新的混合方式来管理依赖项。
首先,使用 SwiftPM 解析依赖项并检出存储库。之后,此工具将每个依赖项转换为 XCFramework。
有关详细信息,请参见 Scipio 官方文档。
安装 Scipio 最简单的方法是使用 nest。 nest install giginet/Scipio
Scipio 的概念是,所有需要在应用程序中使用的依赖项都应该在一个 Package 清单中定义。
prepare 命令是将清单中的所有依赖项构建为 XCFramework。
这种模式称为 prepare
模式。 有关详细信息,请参见 为您的应用程序准备所有依赖项。
// swift-tools-version: 6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MyAppDependencies",
platforms: [
// Specify platforms to build
.iOS(.v14),
],
products: [],
dependencies: [
// Add dependencies
.package(url: "https://github.com/onevcat/APNGKit.git", exact: "2.2.1"),
],
targets: [
.target(
name: "MyAppDependency",
dependencies: [
// List all dependencies to build
.product(name: "APNGKit", package: "APNGKit"),
]),
]
)
$ scipio prepare path/to/MyAppDependencies
> 🔁 Resolving Dependencies...
> 🗑️ Cleaning MyAppDependencies...
> 📦 Building APNGKit for iOS
> 🚀 Combining into XCFramework...
> 📦 Building Delegate for iOS
> 🚀 Combining into XCFramework...
> ❇️ Succeeded.
默认情况下,所有 XCFrameworks 都会生成到 MyAppDependencies/XCFramework
中。
默认情况下,Scipio 禁用对 库演进 功能的支持。
这意味着构建的框架只能从使用相同 Swift 版本构建的产品中使用。
主要原因是库演进的限制。 事实上,有些包在启用库演进的情况下无法构建。(https://developer.apple.com/forums/thread/123253, apple/swift-collections#94, apple/swift-nio#1257)
如果您想分发生成的 XCFrameworks,建议启用库演进。 如果需要,请传递 --enable-library-evolution
标志。 但是,这意味着某些包可能无法构建。
默认情况下,Scipio 会检查是否需要为现有的 XCFrameworks 重新构建。
$ swift run scipio prepare --cache-policy project path/to/MyAppDependencies
> 🔁 Resolving Dependencies...
> 🗑️ Cleaning MyAppDependency...
> ✅ Valid APNGKit.xcframework is exists. Skip building.
> ✅ Valid Delegate.xcframework is exists. Skip building.
> ❇️ Succeeded.
Scipio 支持项目/本地磁盘/远程磁盘缓存后端。
使用远程缓存,在开发者之间共享构建的 XCFrameworks。
有关详细信息,请参见 了解缓存系统。
Scipio 还可以从特定的 Swift 包生成 XCFrameworks。 此功能类似于 swift-create-xcframework。
$ scipio create path/to/MyPackage
> 🔁 Resolving Dependencies...
> 🗑️ Cleaning MyPackage...
> 📦 Building MyPackage for iOS
> 🚀 Combining into XCFramework...
> ❇️ Succeeded.
有关详细信息,请参见 将单个 Swift 包转换为 XCFramework。
目前,我们支持 Swift 6.0。
Xcode | Swift | |
---|---|---|
✅ | 16.2 | 6.0 |
Scipio 仅使用标准依赖项和 Apple 官方工具进行构建,以保持可靠性。
只需运行 swift package resolve
。
Scipio 依赖于 swift-package-manager 作为一个库。
解析包清单和生成 Xcode 项目由该包提供。 因此,它将在未来得到维护。
Scipio 仅使用 xcodebuild
来构建 Frameworks 和 XCFrameworks。
Scipio 的名字来源于一个关于迦太基的历史故事。