# XcodeProj **Repository Path**: b9swift/XcodeProj ## Basic Information - **Project Name**: XcodeProj - **Description**: tuist/XcodeProj 镜像 - **Primary Language**: Swift - **License**: MIT - **Default Branch**: main - **Homepage**: https://github.com/tuist/XcodeProj - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-22 - **Last Updated**: 2025-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: Xcode, 项目管理, 脚本 ## README # XcodeProj [![All Contributors](https://img.shields.io/badge/all_contributors-46-orange.svg?style=flat-square)](#contributors-) [![Swift Package Manager](https://img.shields.io/badge/swift%20package%20manager-compatible-brightgreen.svg)](https://swift.org/package-manager/) [![Release](https://img.shields.io/github/release/tuist/xcodeproj.svg)](https://github.com/tuist/xcodeproj/releases) [![Code Coverage](https://codecov.io/gh/tuist/xcodeproj/branch/main/graph/badge.svg)](https://codecov.io/gh/tuist/xcodeproj) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/tuist/xcodeproj/blob/main/LICENSE.md) [![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2Ftuist%2FXcodeProj%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/tuist/XcodeProj) XcodeProj is a library written in Swift for parsing and working with Xcode projects. It's heavily inspired by [CocoaPods XcodeProj](https://github.com/CocoaPods/Xcodeproj) and [xcode](https://www.npmjs.com/package/xcode). --- - [XcodeProj](#xcodeproj) - [Projects Using XcodeProj](#projects-using-xcodeproj) - [Installation](#installation) - [Swift Package Manager](#swift-package-manager) - [Scripting](#scripting) - [References 📚](#references-) - [Contributing](#contributing) - [License](#license) - [Contributors ✨](#contributors-) ## Projects Using XcodeProj | Project | Repository | | --------------- | -------------------------------------------------------------------------------------------- | | ProjLint | [github.com/JamitLabs/ProjLint](https://github.com/JamitLabs/ProjLint) | | rules_xcodeproj | [github.com/buildbuddy-io/rules_xcodeproj](https://github.com/buildbuddy-io/rules_xcodeproj) | | Rugby | [github.com/swiftyfinch/Rugby](https://github.com/swiftyfinch/Rugby) | | Sourcery | [github.com/krzysztofzablocki/Sourcery](https://github.com/krzysztofzablocki/Sourcery) | | Tuist | [github.com/tuist/tuist](https://github.com/tuist/tuist) | | XcodeGen | [github.com/yonaskolb/XcodeGen](https://github.com/yonaskolb/XcodeGen) | | xspm | [gitlab.com/Pyroh/xspm](https://gitlab.com/Pyroh/xspm) | | Privacy Manifest| [github.com/stelabouras/privacy-manifest](https://github.com/stelabouras/privacy-manifest) | If you are also leveraging XcodeProj in your project, feel free to open a PR to include it in the list above. ## Installation ### Swift Package Manager Add the dependency in your `Package.swift` file: ```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"]), ] ) ``` ### Scripting Using [`swift-sh`] you can automate project-tasks using scripts, for example we can make a script that keeps a project’s version key in sync with the current git tag that represents the project’s version: ```swift #!/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("usage: \(arg0) \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) ``` You could then store this in your repository, for example at `scripts/set-project-version` and then run it: ```bash $ scripts/set-project-version ./App.xcodeproj 1.2.3 $ git add App.xcodeproj $ git commit -m "Bump version" $ git tag 1.2.3 ``` Future adaption could easily include determining the version and bumping it automatically. If so, we recommend using a library that provides a `Version` object. [`swift-sh`]: https://github.com/mxcl/swift-sh ## References 📚 - [Xcode Project File Format](http://www.monobjc.net/xcode-project-file-format.html) - [pbexplorer](https://github.com/mjmsmith/pbxplorer) - [pbxproj identifiers](https://pewpewthespells.com/blog/pbxproj_identifiers.html) - [mob-pbxproj](https://github.com/kronenthaler/mod-pbxproj) - [Xcodeproj](https://github.com/CocoaPods/Xcodeproj) - [Nanaimo](https://github.com/CocoaPods/Nanaimo) - [Facebook Buck](https://buckbuild.com/javadoc/com/facebook/buck/apple/xcode/xcodeproj/package-summary.html) ## Contributing 1. Git clone the repository `git@github.com:tuist/xcodeproj.git`. 2. Open `Package.swift` with Xcode. ## License XcodeProj is released under the MIT license. [See LICENSE](https://github.com/tuist/xcodeproj/blob/main/LICENSE.md) for details. ## Contributors ✨ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Joseph Colicchio
Joseph Colicchio

🤔
deatondg
deatondg

🤔
Dan Fleming
Dan Fleming

💻
Sascha Schwabbauer
Sascha Schwabbauer

🤔
Marcin Iwanicki
Marcin Iwanicki

🚧
Adam Khazi
Adam Khazi

🚧
Elliott Williams
Elliott Williams

💻
Muukii
Muukii

🖋
Yuya Oka
Yuya Oka

💻
Keith Smiley
Keith Smiley

🖋
Ian Leitch
Ian Leitch

💻
Daniil Subbotin
Daniil Subbotin

💻
Florentin Bekier
Florentin Bekier

💻
Vadim Smal
Vadim Smal

🐛
freddi(Yuki Aki)
freddi(Yuki Aki)

💻
Kristopher Jackson
Kristopher Jackson

💻
Jake Prickett
Jake Prickett

💻
Jake Adams
Jake Adams

💻
matsuji
matsuji

💻
Bogdan Belogurov
Bogdan Belogurov

💻
Chuck Grindel
Chuck Grindel

💻
Michael McGuire
Michael McGuire

💻
C-凡
C-凡

💻
Maxwell Elliott
Maxwell Elliott

💻
Brentley Jones
Brentley Jones

💻
Teameh
Teameh

💻
Johannes Ebeling
Johannes Ebeling

💻
baegteun
baegteun

📖
Alex Kovács
Alex Kovács

📖
Christoffer Winterkvist
Christoffer Winterkvist

💻
Timothy Costa
Timothy Costa

💻
Mary
Mary

💻
Md. Ibrahim Hassan
Md. Ibrahim Hassan

💻
tatagrigory
tatagrigory

💻
Ruslan Alikhamov
Ruslan Alikhamov

💻
Ladislas de Toldi
Ladislas de Toldi

💻
Matt Massicotte
Matt Massicotte

💻
Артем Ворхлик
Артем Ворхлик

💻
Jaewon-Yun
Jaewon-Yun

💻
Mike Gerasymenko
Mike Gerasymenko

💻
Filip Racki
Filip Racki

💻
Kelvin Harron
Kelvin Harron

💻
George Navarro
George Navarro

💻
Maxim
Maxim

💻
Bryan Summersett
Bryan Summersett

💻
Mikhail
Mikhail

💻
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!