CocoaPods/Xcodeproj
66.7
Adequate · 19 September 2026
10.3k
lines of production code
Ruby
primary language
1
measurement over time
What this system is
This system is the Xcodeproj Ruby gem, a library and command-line tool for reading, writing, and manipulating Xcode project and workspace files. It provides programmatic access to manage project targets, build settings, schemes, and workspace structures, while also offering CLI commands to compare, sort, and dump project configurations. The tool ensures compatibility with modern Xcode versions and handles complex parsing tasks such as linker flags and nested workspace groups.
How it got here
2011–2012 — Namespace refactoring and CLI expansion
15 changes.
The project underwent a major internal restructuring, renaming the root namespace to Xcodeproj and replacing heavy dependencies like ActiveSupport with lighter, specialized libraries. This period focused on modernizing the codebase by introducing a robust command-line interface via CLAide, enhancing the object model for newer Xcode versions, and significantly expanding test coverage to ensure stability.
2013–2014 — Workspace and build settings robustness
9 changes.
This period focused on enhancing the library's ability to parse and serialize complex Xcode project structures, specifically adding support for embedded workspace groups and refining the handling of version-aware build settings. Significant effort was also dedicated to improving the accuracy of linker flag parsing and expanding test coverage for CoreData models, workspace references, and multi-platform build configurations.
2015–2021 — Xcode scheme action refactoring and test coverage
5 changes.
This period focused on comprehensively rewriting Xcode scheme actions to support pre- and post-execution scripts, environment variables, and complex scheme behaviors. The work included extensive RSpec test coverage for the new scheme action structures and fixtures for workspace schemes. Additionally, automation scripts were added to regenerate build settings fixtures and tests for the sort command were implemented.
Features
Add xcodeproj CLI entry point
A new executable script at bin/xcodeproj has been added to serve as the command-line interface for the Xcodeproj gem. This script sets up the Bundler environment and delegates execution to the Xcodeproj::Command runner, enabling users to invoke Xcodeproj tools directly from the command line.
bin · high confidence
Comprehensive rewrite of Xcode scheme actions with pre/post execution support
The scheme action classes (BuildAction, LaunchAction, TestAction, etc.) have been refactored to use a new object-oriented structure that fully supports Xcode scheme XML attributes. This update introduces the ability to configure pre- and post-action execution scripts or email notifications for build, launch, and test actions. It also adds support for setting environment variables and command-line arguments, configuring main thread checker flags, and managing buildable product runnables and references. Users can now programmatically define complex scheme behaviors that were previously difficult or impossible to set via the library.
lib/xcodeproj/scheme · high confidence
New CLI commands for project comparison, sorting, and configuration dumping
This update introduces several new subcommands to the Xcodeproj CLI. Users can now compare two projects or targets using \project-diff\ and \target-diff\, which output YAML-based differences while ignoring UUIDs and optional keys. A new \sort\ command allows reordering project groups with options to position them above or below files. Additionally, the \config-dump\ command extracts and writes build settings to xcconfig files, and the \show\ command provides YAML representations of the project structure in various formats.
lib/xcodeproj/command · high confidence
Behavioural changes
Improved parsing of Xcode linker flags including @arg files and -force\_load
The library now includes a dedicated parser for OTHER\_LDFLAGS that correctly handles specific linker directives such as -force\_load and argument files specified with the @ prefix. This change ensures that complex linker configurations are accurately categorized into frameworks, libraries, and other flag types, preventing misinterpretation of these special syntaxes during project configuration.
lib/xcodeproj/config · high confidence
Major refactoring of Xcode project object model and build settings resolution
The internal object model for Xcode project files has been significantly restructured and expanded to support newer Xcode features and improve reliability. This change introduces new object classes for file system synchronized groups and their exception sets, adds support for platform filters on build files and rules, and enhances build configuration resolution to properly handle variable substitution, xcconfig inheritance, and mutual recursion. It also refactors how build phases, file references, and target dependencies are managed, including better handling of subproject targets and more robust sorting and display logic.
lib/xcodeproj/project/object · high confidence
Namespace rename to Xcodeproj and integration with CLAide and colored2
The library's root module has been renamed from \Xcode\ to \Xcodeproj\ to align with the gem name, requiring users to update any direct references to the previous namespace. This change also introduces dependencies on the \claide\ command-line parsing library and the \colored2\ gem for terminal output, replacing the previous \colored\ dependency. Additionally, new autoloads are registered for components such as \Differ\, \Helper\, \Plist\, \XCScheme\, and \XcodebuildHelper\, expanding the available API surface within the new namespace.
lib · high confidence
Project initialization now creates all build configurations for new targets
When creating a new target via the \Project\ API, the tool now automatically generates the standard build configurations (such as Debug and Release) for that target. Previously, these configurations had to be added manually, so this change ensures that newly created targets are immediately usable with standard build settings.
(repo-wide) · high confidence
Refactored project internals with new helper modules and improved target creation
The project library has been restructured to improve maintainability and performance. A new CaseConverter module handles camel-case conversions for plist attributes with caching, and a dedicated ObjectAttributes module manages attribute definitions and type validation. Target creation is now centralized in a new ProjectHelper module, which provides methods to create native, resource bundle, aggregate, and legacy targets with proper build settings and framework references. Additionally, the UUIDGenerator has been refactored to use path-based hashing for more deterministic UUID generation and includes better handling of circular dependencies and duplicate warnings.
lib/xcodeproj/project · high confidence
Refactored project object helpers with new factory and version-aware settings
The library's internal helper structure for managing Xcode project objects has been reorganized. A new \FileReferencesFactory\ centralizes the creation of file references, adding support for subprojects (\.xcodeproj\) and improving the handling of data model groups (\.xcdatamodeld\). A new \GroupableHelper\ provides more robust logic for determining parent groups, calculating hierarchy paths, and resolving source trees (including \BUILT\_PRODUCTS\_DIR\). Additionally, a new \BuildSettingsArraySettingsByObjectVersion\ module ensures that build settings treated as arrays (like \HEADER\_SEARCH\_PATHS\) are correctly identified based on the project's object version, with version 5.0+ including additional settings like \LD\_RUNPATH\_SEARCH\_PATHS\.
lib/xcodeproj/project/object/helpers · high confidence
Support for parsing and serializing embedded workspace groups
The Xcodeproj library now correctly handles embedded Xcode workspaces (.xcworkspace) by introducing dedicated classes for file and group references. This change enables the tool to parse the \<Group\> elements within workspace XML structures, correctly resolving relative paths by taking parent group locations into account, and allows for the serialization of these structures back to XML. Users can now read and write workspace files that contain nested group references without errors or path resolution issues.
lib/xcodeproj/workspace · high confidence
Workspace handling refactored to use REXML and support file references
The Xcodeproj workspace implementation has been rewritten to use the REXML library instead of the previous NSXMLDocument dependency, improving cross-platform compatibility. The Workspace class now supports adding projects via FileReference objects and exposes new methods to access file references, group references, and schemes. Additionally, a new TargetDiff helper class was added to compare source build files between two targets in a project.
xcodeproj · high confidence
Xcodeproj gem v1.28.1: Xcode 16 support and CLI restructuring
The Xcodeproj gem has been updated to version 1.28.1, introducing support for Xcode 16 (including object version 100 and SDKs up to version 26.0) and adding new product types such as visionOS and app clips. The library has been refactored to use the \Xcodeproj\ namespace, replacing the legacy \Xcode\ namespace, and now relies on the \Nanaimo\ library for property list parsing and \colored2\ for CLI output. A new \Xcodeproj::Differ\ module has been added to compute recursive diffs between project hashes, and the command-line interface has been restructured to use \CLAide\, introducing new commands for dumping build settings and comparing project targets.
lib/xcodeproj · high confidence
Test coverage
Added CoreData model spec fixture; Added Xcode 6.3 and 8.0 sample project fixtures; Added script to regenerate build settings fixtures from Xcode templates; Added test coverage for Constants and Differ modules; Added test coverage for Xcode project object models; Added test coverage for Xcode project scheme actions and references; Added test coverage for project object helpers; Added test coverage for project object model and helper utilities; Added test fixtures for macOS and iOS project templates; Added test fixtures for nested group locations in workspace schemes; Added test fixtures for watchOS and tvOS build settings; Added test helpers for project settings, Xcode schemes, and temporary directories; Added tests for OtherLinkerFlagsParser; Added tests for Workspace FileReference and GroupReference classes; Added tests for the sort command's group-option handling; Added xcconfig fixture files for testing build settings parsing.
Dependencies
Update runtime dependencies and drop ActiveSupport
The xcodeproj gem now relies on specific libraries for its core functionality instead of the heavy ActiveSupport dependency. Runtime dependencies have been updated to include atomos (\~\> 0.1.3), CFPropertyList (\>= 2.3.3, \< 4.0), claide (\>= 1.0.2, \< 2.0), colored2 (\~\> 3.1), nanaimo (\~\> 0.4.0), rexml (\>= 3.3.6, \< 4.0), nkf, and base64. This change also enforces a minimum Ruby version of 2.6.0 and updates the gem's homepage to the CocoaPods organization.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 67.
Lenses
- Code Health 97
- Architecture 98
- Maturity 51
- Readiness 74
- Security 81
Changes since last survey
- 300 commits — 268 feature/other, 32 fixes
By area
- (root) — 95 commits
- (repo) — 88 commits
- lib/xcodeproj — 75 commits
- spec/fixtures — 16 commits
- .github/workflows — 12 commits
- spec/scheme — 5 commits
- spec/project — 4 commits
- .github/dependabot.yml — 2 commits
- spec/command — 1 commit
- spec/config_spec.rb — 1 commit
- spec/scheme_spec.rb — 1 commit
Notable commits
- fix: Add explicit nkf, base64 dependency to fix CFPropertyList issue on Ruby 3.4
- fix: Fix CHANGELOG entries
- fix: Fix LAST_KNOWN_OBJECT_VERSION for Xcode 15
- fix: Fix bad assignments in build_action
- fix: Fix bad reference
- fix: Fix build badge
- fix: Fix build badge link
- fix: Fix incorrect documentation for build configuration name attribute
- fix: Fix line wrap
- fix: Fix rubocop failure
- fix: Fix rubocop style errors
- fix: Fix tests
- fix: Fix up sort command tests
- fix: Fix wrong naming
- fix: GH Action fixes
- fix: Merge pull request #1035 from triplef/fix-assetTagsByRelativePath
- fix: Merge pull request #757 from nickgravelyn/fix-product-references-without-extensions
- fix: Merge pull request #834 from igor-makarov/fix-gh-action
- fix: Merge pull request #880 from byohay/feature/fix-non-unique-elements-array-diff
- fix: Merge pull request #915 from byohay/feature/fix-target-dependency-crash
- …and 280 more
Architecture
- 0 containers · 1 bounded contexts · 0 dependency edges (baseline)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
CocoaPods/Xcodeproj was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit f427b24aec168be2faa5c43ad64fa6bf91880e13 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.