跳到主要内容

二进制化与私有 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_filesvendored_frameworks
  • SPM:通过 local package override(Package.resolved 指向本地路径)
  • 调试时用源码,CI/Release 用二进制

相关链接