swift - 为 `swift package generate-xcodeproj` 设置 macOS 目标?

标签 swift xcode swift-package-manager

有没有办法为 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 的结果是一个 macOS 目标为 10.10 的 Xcode 项目。

注意:生成的 Xcode 10.10 目标比 10.9 的 swift 命令行编译器目标高一个版本。因此,显然,swiftswift package generate-xcodeproj 的默认 macOS 目标是相互独立确定的。

到目前为止,Package.swift 的任何解决方案、--xcconfig-overrides 或其他难以捉摸的内容。

最佳答案

swift 5

Swift 5 包管理器现在可以通过 Package.swift 中的 platforms 指定最低要求的目标平台。 ...请参阅 Klaas 提供的答案。

swift 4

我最终创建了 swiftxcodeswiftbuildswifttest bash 别名作为简化的解决方法:

  1. 使用 swift package generate-xcodeproj 设置 macOS 目标,和
  2. 隐藏swift build -Xswiftc "-target" -Xswiftc "x86_64-…"

设置

编辑和source ~/.bash_profile 添加swiftxcodeswiftbuildswifttest 命令行的别名。

###################################
### 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 Package Manager工具版本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)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

注意事项

  1. Package.xcconfig 在 Xcode 项目中仅在目标级别设置build设置值。总体项目级别build设置值保持不变。
  2. Package.xcconfig 项目值对所有目标设置相同。目前似乎没有针对每个目标的 xcconfig 机制。
  3. 某些xcconfig 值,例如SKIP_INSTALL,可能需要在Xcode 项目中手动设置。

路线图

希望上面显示的当前有限的 xcconfig 方法将被在包 list 中指定自定义build设置的能力所取代,如 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 的“新构建系统(预览版)”是用 Swift 编写并随 Xcode 9 一起发布的,它可以使用 xcconfig 文件来定义build设置。

资源

关于swift - 为 `swift package generate-xcodeproj` 设置 macOS 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47783502/

相关文章:

swift - 获取显示 View 中所有内容所需的高度

ios - 键盘出现时插入内容以移动表格 View

iphone - 将文本添加到 UIWebView 文本框

swift - Swift Package Manager 在本地实用吗?

swift 包 --verbose generate-xcodeproj 给出错误 : reachedTimeLimit

ios - 更改 map 坐标(MapKit)

swift 初始化程序同时可选和非可选?

ios - 当我快速导入 OBJ-C 类时,Xcode 不会提示我添加 Bridging-header.h

xcode - 添加到项目的文件夹的 Xcode 设置说明

ios - 在 iOS 10+ 项目中导入具有 13.0 目标的社区 SwiftUI 包