为 `swift package generate-xcodeproj` 设置 macOS 目标?
Set macOS target for `swift package generate-xcodeproj`?
有没有办法为 swift package generate-xcodeproj
生成 Xcode 项目设置 macOS 目标?
例如,将默认目标设置为 "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
或其他内容的解决方案都难以捉摸。
如果官方 swift 工具不允许某些 Xcode 项目操作,您可能需要重新编写一个脚本来为您更新生成的 Xcode 项目.
你可以使用
xcodeproj rubygem。
参见 an example script。
查看相关问题Swift Package Manager and Xcode: Retaining Xcode Settings?
Swift 5
Swift 5 包管理器现在可以通过 Package.swift
中的 platforms
指定最低要求的目标平台。 ...请参阅 Klaas 提供的答案。
Swift 4
我最终创建了 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"'
在项目中编辑 Package.swift
以指定使用 Swift 包管理器工具版本 4:
// 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) created by 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 项目的目标级别 设置构建设置值 。总体项目级别 构建设置值保持不变。
Package.xcconfig
项目值对所有目标设置相同。目前似乎没有针对每个目标的 xcconfig 机制。
- 一些
xcconfig
值,例如SKIP_INSTALL
,可能需要在Xcode项目中手动设置。
路线图
希望上面显示的当前有限的 xcconfig
方法将被在包清单中指定自定义构建设置的能力所取代,如 Swift 4 Package Manager Roadmap.
中所讨论的
Configuration File Support
We are considering adding a configuration file mechanism, which could be user-specific or package-specific, to allow customizing certain package manager behaviors. One immediate use for this would be as a temporary mechanism for passing overriding compiler flags for a package, though we hope to solve that need with a real build settings model. Other uses for a configuration file are up for consideration.
另外值得注意的是 Apple 的 "New Build System (Preview)",用 Swift 编写并随 Xcode 9 发布,可以使用 xcconfig
文件来定义构建设置。
资源
无需第 3 方工具即可实现此目的的步骤。
1) 在 /Sources 文件夹中创建 macos.xcconfig 文件,内容如下
MACOSX_DEPLOYMENT_TARGET = 10.12
2) 运行 这个命令在你项目的根目录下
swift package generate-xcodeproj --xcconfig-overrides Sources/macos.xcconfig
Swift 演进提案 SE-0236 添加了 per-platform 最低要求部署目标的配置:
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "MyTool",
platforms: [
// specify each minimum deployment requirement,
//otherwise the platform default minimum is used.
.macOS(.v10_13),
],
targets: [
.target(name: "MyTool", dependencies: ["foo", "bar"]),
],
swiftLanguageVersions: [.v5]
)
这导致 Xcode 项目中的目标 "MyTool" 将 "Deloyment Target" 设置为 10.13。
有没有办法为 swift package generate-xcodeproj
生成 Xcode 项目设置 macOS 目标?
例如,将默认目标设置为 "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
或其他内容的解决方案都难以捉摸。
如果官方 swift 工具不允许某些 Xcode 项目操作,您可能需要重新编写一个脚本来为您更新生成的 Xcode 项目.
你可以使用 xcodeproj rubygem。 参见 an example script。
查看相关问题Swift Package Manager and Xcode: Retaining Xcode Settings?
Swift 5
Swift 5 包管理器现在可以通过 Package.swift
中的 platforms
指定最低要求的目标平台。 ...请参阅 Klaas 提供的答案。
Swift 4
我最终创建了 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"'
在项目中编辑 Package.swift
以指定使用 Swift 包管理器工具版本 4:
// 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) created by 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 项目的目标级别 设置构建设置值 。总体项目级别 构建设置值保持不变。Package.xcconfig
项目值对所有目标设置相同。目前似乎没有针对每个目标的 xcconfig 机制。- 一些
xcconfig
值,例如SKIP_INSTALL
,可能需要在Xcode项目中手动设置。
路线图
希望上面显示的当前有限的 xcconfig
方法将被在包清单中指定自定义构建设置的能力所取代,如 Swift 4 Package Manager Roadmap.
Configuration File Support
We are considering adding a configuration file mechanism, which could be user-specific or package-specific, to allow customizing certain package manager behaviors. One immediate use for this would be as a temporary mechanism for passing overriding compiler flags for a package, though we hope to solve that need with a real build settings model. Other uses for a configuration file are up for consideration.
另外值得注意的是 Apple 的 "New Build System (Preview)",用 Swift 编写并随 Xcode 9 发布,可以使用 xcconfig
文件来定义构建设置。
资源
无需第 3 方工具即可实现此目的的步骤。
1) 在 /Sources 文件夹中创建 macos.xcconfig 文件,内容如下
MACOSX_DEPLOYMENT_TARGET = 10.12
2) 运行 这个命令在你项目的根目录下
swift package generate-xcodeproj --xcconfig-overrides Sources/macos.xcconfig
Swift 演进提案 SE-0236 添加了 per-platform 最低要求部署目标的配置:
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "MyTool",
platforms: [
// specify each minimum deployment requirement,
//otherwise the platform default minimum is used.
.macOS(.v10_13),
],
targets: [
.target(name: "MyTool", dependencies: ["foo", "bar"]),
],
swiftLanguageVersions: [.v5]
)
这导致 Xcode 项目中的目标 "MyTool" 将 "Deloyment Target" 设置为 10.13。