xcodeproj is a library written in Swift for parsing and working with Xcode projects. It's heavily inspired in CocoaPods XcodeProj and xcode.
This project is a fork and evolution from xcproj
Project | Repository |
---|---|
Tuist | github.com/tuist/tuist |
Sourcery | github.com/krzysztofzablocki/Sourcery |
ProjLint | github.com/JamitLabs/ProjLint |
XcodeGen | github.com/yonaskolb/XcodeGen |
If you are also leveraging xcodeproj in your project, feel free to open a PR to include it in the list above.
Add the dependency in your Package.swift
file:
let package = Package(
name: "myproject",
dependencies: [
.package(url: "https://github.com/tuist/xcodeproj.git", .upToNextMajor(from: "6.2.0")),
],
targets: [
.target(
name: "myproject",
dependencies: ["xcodeproj"]),
]
)
Only macOS
# Cartfile
github "tuist/xcodeproj" ~> 6.2.0
pod 'xcodeproj', '~> 6.2.0'
xcodeproj 6 is the final step towards hiding the Xcode project implementation details. One of those details was the object unique identifiers, which you used to manage yourself with previous versions. Now, xcodeproj does it for you, so you don't have to pass them around to set dependencies between objects.
This improvement makes the API easier, safer and more convenient, but at the cost of introducing some breaking changes in the library. If want to migrate your project to use xcodeproj 6, these are the things that you should look at:
PBXObjectReference
is an internal class now. Object references to other objects are attributes with the type of the object that is being referred. For example, aXCConfigurationList
object has an attributebuildConfigurations
of typeXCBuildConfiguration
. Adding a new configuration is as easy as callinglist.buildConfigurations.append(config)
.- Note that object references have different types of optionals based on the type of attribute:
PBXObjects
has also been made internal. It was exposed through the attributeobjects
on thePBXProj
class. If you used to use this class for adding, removing, or getting objects, those methods have been moved to thePBXProj
class - Public helpers
And yes, in case you are wondering, it fully supports Xcode 10 🎉
xcodeproj
5 is a major release with important changes in the API focused on making it more convenient, and simplify the references handling. This version hasn't been officially released yet but you can already start updating your project for the new version. These are the changes you'd need to make in your projects:
xcproj
has been renamed toxcodeproj
so you need to update all your import statements to use the new name.- There's no support for Carthage nor CocoaPods anymore, if you were using them for fetching
xcodeproj
, you can use the Swift Package Manager and manually setup the dependency. - We've replaced
Path
withAbsolutePath
andRelativePath
from the Swift Package Manager'sBasic
framework. You might need to change some of the usages to use the new type. - Reference attributes have been renamed to use the naming convention
attributeReference
whereattribute
is the name of the attribute. If you are interested in materializing the reference to get the object, objects provide convenient getters that you can use for that purpose. Those getters throw if the object is not found in the project.
There are some useful additions to the API that you can check out on the CHANGELOG.
One of those additions is an improvement on how references are managed. When new objects are added to the project, you get the object reference. The reference is an instance that should be used to refer that object from any other. The value of that reference is an implementation detail that has been abstracted away from you.
You can check out the documentation on the following link. The documentation is automatically generated in every release by using Jazzy from Realm.
- Xcode Project File Format
- A brief look at the Xcode project format
- pbexplorer
- pbxproj identifiers
- mob-pbxproj
- Xcodeproj
- Nanaimo
- Facebook Buck
- Swift Package Manager - Xcodeproj
- Git clone the repository
git@github.com:tuist/xcodeproj.git
. - Generate xcodeproj with
swift package generate-xcodeproj
. - Open
xcodeproj.xcodeproj
.
xcodeproj is released under the MIT license. See LICENSE for details.
Tuist is a non-profit project run entirely by unpaid volunteers. We need your funds to pay for software, hardware and hosting around continuous integration and future improvements to the project. Every donation will be spent on making Tuist better for our users.
Please consider a regular donation through Patreon:
Tuist is a proud supporter of the Software Freedom Conservacy