有没有办法为swift package generate-xcodeproj
设置macOS目标生成Xcode项目?
例如,将default target设置为“x86_64-apple-macosx10.12”。
背景
目前,Xcode 9.2 Swift工具链在命令行上显示以下版本:
swift --version
# Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2)
# Target: x86_64-apple-macosx10.9
swift package --version
# Apple Swift Package Manager - Swift 4.0.0-dev (swiftpm-13752)
swift package generate-xcodeproj
的结果是一个Xcode项目,macOS目标为10.10。
注意:生成的Xcode 10.10目标是swift命令行编译器目标10.9的一个版本。因此,显然,swift
和swift package generate-xcodeproj
的默认macOS目标是彼此独立确定的。
到目前为止,使用Package.swift,--xcconfig-overrides
或其他任何解决方案都难以实现。
我最终创建了swiftxcode
,swiftbuild
和swifttest
bash别名作为解决方法来简化:
swift package generate-xcodeproj
设置macOS目标,和swift build -Xswiftc "-target" -Xswiftc "x86_64-…"
建立
编辑和source
~/.bash_profile
将swiftxcode
,swiftbuild
和swifttest
别名添加到命令行。
###################################
### Swift Package Manager (SPM) ###
###################################
alias swiftxcode="swift package generate-xcodeproj --xcconfig-overrides Package.xcconfig"
alias swiftbuild='swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.12"'
alias swifttest='swift test -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.12"'
使用Swift Package Manager工具版本4编辑项目中的Package.swift
:
// swift-tools-version:4.0
import PackageDescription
let package = Package(…
将Package.xcconfig
添加到项目文件夹:
/// Package.xcconfig
/// macOS Deployment Target
///
/// Code will load on this and later versions of macOS.
/// Framework APIs that are unavailable in earlier versions will be weak-linked;
/// your code should check for `null` function pointers
/// or specific system versions before calling newer APIs.
MACOSX_DEPLOYMENT_TARGET=10.12
注意:可选地,BuildSettingExtractor (xcodeproj → xcconfig)创建的James Dempsey可以帮助您探索要添加到Package.xcconfig
文件的其他设置。
使用
cd to/some_project_folder/
swiftxcode # create Xcode project
swiftbuild # build from command line
swifttest # build and run tests from command line
注意事项
Package.xcconfig
仅在Xcode项目中的目标级别设置Build Settings值。整个项目级别的“构建设置”值保持不变。Package.xcconfig
项目值对所有目标设置相同。目前似乎没有基于每个目标的xcconfig机制。xcconfig
值,例如SKIP_INSTALL
,可能需要在Xcode项目中手动设置。路线图
希望上面显示的当前有限的xcconfig
方法将取代在包清单中指定自定义构建设置的能力,如Swift 4 Package Manager Roadmap中所讨论的。
配置文件支持
我们正在考虑添加配置文件机制,该机制可以是特定于用户的或特定于程序包的,以允许自定义某些包管理器行为。一个直接用于此的方法是作为传递包的重写编译器标志的临时机制,尽管我们希望通过真实的构建设置模型来解决这个需求。配置文件的其他用途需要考虑。
另外值得注意的是,用Swift编写并随Xcode 9发布的Apple的“新构建系统(预览版)”可以使用xcconfig
文件来定义构建设置。
资源
如果官方swift工具不允许某些Xcode项目操作,您可能希望重新编写将为您更新生成的Xcode项目的脚本。
你可以使用xcodeproj rubygem。见an example script。
看一个相关的问题Swift Package Manager and Xcode: Retaining Xcode Settings?
没有第三方工具实现此目标的步骤。
1)使用以下内容在/ Sources文件夹中创建macos.xcconfig文件
MACOSX_DEPLOYMENT_TARGET = 10.12
2)在项目的根目录中运行此命令
swift package generate-xcodeproj --xcconfig-overrides Sources/macos.xcconfig