Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

πŸ“ Read, update and write your Xcode projects

License

Notifications You must be signed in to change notification settings

tuist/XcodeProj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

2,354 Commits

Repository files navigation

XcodeProj

All Contributors

Swift Package Manager Release Code Coverage License

XcodeProj is a library written in Swift for parsing and working with Xcode projects. It's heavily inspired by CocoaPods XcodeProj and xcode.


Projects Using XcodeProj

Project Repository
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
XcodeProjectCLI github.com/wojciech-kulik/XcodeProjectCLI

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:

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:

#!/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) <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)

You could then store this in your repository, for example at scripts/set-project-version and then run it:

$ 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.

References πŸ“š

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 for details.

Contributors ✨

Thanks goes to these wonderful people (emoji key):

This project follows the all-contributors specification. Contributions of any kind welcome!

About

πŸ“ Read, update and write your Xcode projects

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Sponsor this project

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /