XcodeProj
XcodeProj 是一个用 Swift 编写的库,用于解析和处理 Xcode 项目。它深受 CocoaPods XcodeProj 和 xcode 的启发。
使用 XcodeProj 的项目
项目 | 仓库 |
---|---|
ProjLint | github.com/JamitLabs/ProjLint |
rules_xcodeproj | github.com/buildbuddy-io/rules_xcodeproj |
Rugby | github.com/swiftyfinch/Rugby |
Sourcery | github.com/krzysztofzablocki/Sourcery |
Tuist | github.com/tuist/tuist |
XcodeGen | github.com/yonaskolb/XcodeGen |
xspm | gitlab.com/Pyroh/xspm |
Privacy Manifest | github.com/stelabouras/privacy-manifest |
如果您的项目也在使用 XcodeProj,欢迎提交 PR 将其添加到上面的列表中。
安装
Swift Package Manager
在 Package.swift
文件中添加依赖:
let package = Package(
name: "myproject",
dependencies: [
.package(url: "https://github.com/tuist/XcodeProj.git", .upToNextMajor(from: "8.12.0")),
],
targets: [
.target(
name: "myproject",
dependencies: ["XcodeProj"]),
]
)
脚本
使用 swift-sh
可以通过脚本自动化项目任务,例如,我们可以创建一个脚本,使项目的版本键与当前表示项目版本的 git 标签保持同步:
#!/usr/bin/swift sh
import Foundation
import XcodeProj // @tuist ~> 8.8.0
import PathKit
guard CommandLine.arguments.count == 3 else {
let arg0 = Path(CommandLine.arguments[0]).lastComponent
fputs("用法: \(arg0) <project> <new-version>\n", stderr)
exit(1)
}
let projectPath = Path(CommandLine.arguments[1])
let newVersion = CommandLine.arguments[2]
let xcodeproj = try XcodeProj(path: projectPath)
let key = "CURRENT_PROJECT_VERSION"
for conf in xcodeproj.pbxproj.buildConfigurations where conf.buildSettings[key] != nil {
conf.buildSettings[key] = newVersion
}
try xcodeproj.write(path: projectPath)
然后您可以将其存储在仓库中,例如保存为 scripts/set-project-version
,然后运行它:
$ scripts/set-project-version ./App.xcodeproj 1.2.3
$ git add App.xcodeproj
$ git commit -m "更新版本"
$ git tag 1.2.3
未来的适配可以轻松包括确定版本并自动升级。如果这样做,我们建议使用提供 Version
对象的库。
文档 📝
想开始使用 XcodeProj 吗?首先深入了解我们的文档,它将帮助你熟悉 API 并更好地了解 Xcode 项目结构。
参考资料 📚
- Xcode 项目文件格式
- Xcode 项目格式简介
- pbexplorer
- pbxproj 标识符
- mob-pbxproj
- Xcodeproj
- Nanaimo
- Facebook Buck
- Swift Package Manager - Xcodeproj
贡献
- 克隆代码库
git@github.com:tuist/xcodeproj.git
。 - 用 Xcode 打开
Package.swift
。
许可证
XcodeProj 基于 MIT 许可证发布。查看 LICENSE 了解详情。
贡献者 ✨
感谢这些优秀的人(表情符号说明):
本项目遵循all-contributors规范。欢迎各种形式的贡献!