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

knsnq2tg  于 2023-05-21  发布在  Swift
关注(0)|答案(4)|浏览(90)

有没有办法为swift package generate-xcodeproj生成Xcode项目设置macOS目标?
例如,将默认目标设置为“x86_64-apple-macosx 10.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或其他东西的解决方案都是难以捉摸的。

4xrmg8kj

4xrmg8kj1#

Swift 5.something

swift package generate-xcodeproj不再可用。请参阅platforms: [ … ]的可接受答案,了解目前的工作原理。

Swift 5

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

Swift 4

最后,我创建了swiftxcodeswiftbuildswifttest bash别名作为简化的解决方案:
1.使用swift package generate-xcodeproj设置macOS目标,以及
1.隐藏swift build -Xswiftc "-target" -Xswiftc "x86_64-…"

设置

Edit and source~/.bash_profileswiftxcodeswiftbuildswifttest别名添加到命令行。

###################################
### 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
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 Settings值 * 仅在目标级别 *。总体 * 项目级别 * 生成设置值保持不变。
  2. Package.xcconfig项目值 * 为所有目标设置相同 *。目前似乎没有一种针对每个目标的xcconfig机制。
    1.某些xcconfig值,例如SKIP_INSTALL,可能需要在Xcode项目中手动设置。

路线图

希望上面显示的当前有限的xcconfig方法将被在包清单中指定自定义构建设置的能力所取代,如Swift 4 Package Manager Roadmap中所讨论的。
配置文件支持
我们正在考虑添加一个配置文件机制,它可以是用户特定的或包特定的,以允许定制某些包管理器行为。一个直接的用途是作为一种临时机制来传递包的重写编译器标志,尽管我们希望用一个真实的的构建设置模型来解决这个需求。配置文件的其他用途也有待考虑。
另外值得注意的是,苹果用Swift编写并随Xcode 9发布的“新构建系统(预览版)”可以使用xcconfig文件来定义构建设置。

资源

v2g6jxz6

v2g6jxz62#

Swift演进提案SE-0236增加了每个平台最低部署目标的配置:

// 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。

f0brbegy

f0brbegy3#

如果官方的swift工具不允许一些Xcode项目操作,您可能需要回退到编写一个脚本来更新生成的Xcode项目。
可以使用xcodeproj rubygem。参见an example script
查看相关问题Swift Package Manager and Xcode: Retaining Xcode Settings?

nfg76nw0

nfg76nw04#

步骤来实现这一点没有第三方工具。
1)在**/Sources文件夹中创建macos.xcconfig**文件,内容如下

MACOSX_DEPLOYMENT_TARGET = 10.12

2)在项目的根目录中运行此命令

swift package generate-xcodeproj --xcconfig-overrides Sources/macos.xcconfig

相关问题