二进制化与私有 Pod
问题
如何通过二进制化加速编译?私有 Pod 怎么管理?
答案
为什么需要二进制化
源码编译:每次 clean build 都要编译所有模块 → 慢
二进制化:底层稳定模块预编译为 Framework → 只编译变更模块
XCFramework
# 构建 iOS 真机 + 模拟器
xcodebuild archive -scheme MyLib -destination "generic/platform=iOS" \
-archivePath build/ios SKIP_INSTALL=NO
xcodebuild archive -scheme MyLib -destination "generic/platform=iOS Simulator" \
-archivePath build/sim SKIP_INSTALL=NO
# 合并为 XCFramework
xcodebuild -create-xcframework \
-framework build/ios.xcarchive/Products/Library/Frameworks/MyLib.framework \
-framework build/sim.xcarchive/Products/Library/Frameworks/MyLib.framework \
-output MyLib.xcframework
私有 CocoaPods
# MyLib.podspec
Pod::Spec.new do |s|
s.name = 'MyLib'
s.version = '1.0.0'
s.source = { git: 'git@github.com:myorg/MyLib.git', tag: s.version }
# 源码模式
s.source_files = 'Sources/**/*.swift'
# 二进制模式(切换)
# s.vendored_frameworks = 'MyLib.xcframework'
end
Swift Package Manager 二进制
// Package.swift
.binaryTarget(
name: "MyLib",
url: "https://cdn.example.com/MyLib-1.0.0.xcframework.zip",
checksum: "abc123..."
)
常见面试问题
Q1: 二进制化和源码调试如何切换?
答案:
- CocoaPods:通过环境变量切换 podspec 中的
source_files和vendored_frameworks - SPM:通过 local package override(
Package.resolved指向本地路径) - 调试时用源码,CI/Release 用二进制