如何基于Xcode和Swift Build创建版本无关、Scheme无关的Swift Package通用构建脚本
通用Swift Package构建脚本适配方案
问题1:移除版本依赖,让命令独立于具体iOS/模拟器版本
完全可以实现,通过简化目标指定逻辑,让工具自动选择当前可用的环境:
修改后的xcodebuild命令
xcodebuild \ -scheme name-Package \ -sdk iphonesimulator \ -destination 'platform=iOS Simulator' \ -configuration Debug
只保留platform=iOS Simulator即可,xcodebuild会自动选取当前Xcode环境中可用的默认模拟器,无需硬编码OS版本和设备名称。
修改后的swift build命令
swift build -Xswiftc -warnings-as-errors --destination 'platform=iOS Simulator'
用--destination参数替代手动指定SDK路径和target,swift build会自动匹配当前环境的模拟器SDK与架构,彻底摆脱硬编码的版本信息。
问题2:自动处理Scheme,无需手动指定或硬编码
有两种实用方案:
方案1:自动发现带Package字样的Scheme
先通过命令行提取符合条件的Scheme,再传入xcodebuild执行构建:
# 自动获取包含Package的Scheme PACKAGE_SCHEME=$(xcodebuild -list | grep -E ".*-Package" | head -n 1) # 使用获取到的Scheme执行构建 xcodebuild \ -scheme "$PACKAGE_SCHEME" \ -sdk iphonesimulator \ -destination 'platform=iOS Simulator' \ -configuration Debug
xcodebuild -list会列出当前Package的所有Scheme,通过grep筛选出带-Package的条目,取第一个匹配项即可。
方案2:直接构建整个Package(无需指定Scheme)
对于纯Swift Package项目,xcodebuild支持直接基于Package.swift构建,无需指定Scheme:
xcodebuild \ -sdk iphonesimulator \ -destination 'platform=iOS Simulator' \ -configuration Debug
只要当前目录是Package.swift所在路径,xcodebuild会自动识别并构建整个Package的所有可构建Target。
内容的提问来源于stack exchange,提问作者Richard Topchii
相关产品推荐
相关产品推荐

