Skip to content

tuist/XcodeProj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2,376 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):

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

๐Ÿ’ป
Michael
Michael

๐Ÿ’ป

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

  •  

Contributors

Languages