Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Convert an existing project in Xcode by selecting the project in the Project navigator, opening the File inspector, and changing Project Document → Project Format to JSON. Xcode then replaces the project bundle’s .pbxproj property-list configuration file with a .xcproj JSON file. The choice is supported in Xcode 27 and later; Xcode 27.2 and later defaults to the smaller, hierarchical JSON format, but migration is still an explicit project setting.

What this migration changes

An Xcode project is stored as a bundle whose name ends in .xcodeproj. Inside that bundle is the project configuration file: traditionally a property-list file named project.pbxproj. The JSON option changes that internal representation to a file with the .xcproj extension. Your Swift or Objective-C source, resources, test targets, schemes, and products are not converted into JSON; they continue to live in their existing locations.

This is a project-editor operation, not a text conversion that you perform on an .xcconfig file. An .xcconfig is a separate plain-text build-configuration file used to specify build settings. It can remain in use before and after this migration.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Apple describes the JSON format as open source and says its structure is smaller, hierarchical, and self-describing. In Apple’s words, “The JSON file format .xcproj is compatible with Xcode 27 and later.” Treat that as a version boundary, not as evidence that older Xcode releases can open the file.

Check your Xcode version and team compatibility first

Before changing a shared project, identify the oldest Xcode version used by every developer, build machine, and continuous-integration job. Apple’s documented compatibility statements distinguish three points:

Question Apple’s documented position What you should do
Can Xcode 27 and later use the JSON project format? Yes. The .xcproj format is compatible with Xcode 27 and later. Confirm every person and CI job opening the project is on a supported release.
Do supported Xcode versions support the older format? Xcode 27 and later support both project configuration formats. You can choose JSON or the earlier property-list format rather than treating migration as mandatory.
What is the default in newer releases? Apple describes Xcode 27.2 and later as defaulting to the smaller, hierarchical, self-describing JSON file. Do not assume an existing project has been migrated merely because a new project uses JSON by default.
What about earlier Xcode releases? The cited compatibility statement does not establish support for .xcproj before Xcode 27. Keep projects in the older format if any required tool must use an earlier release, or upgrade that tool before migrating.

The documentation does not provide a compatibility matrix for every project generator, plugin, editor extension, or custom script. If your workflow parses the project bundle directly, test that workflow in your own repository before merging the format change.

Prepare a safe migration

  • Record the supported toolchain. Write down the Xcode version used locally and by CI, plus any scripts that inspect or rewrite the project file.
  • Use source control. Make the conversion on a clean branch or commit so the file removal and addition are easy to identify and reverse.
  • Finish unrelated work first. A format conversion can produce a large structural diff. Separating it from target, build-setting, or source changes makes review and rollback clearer.
  • Check generated-project workflows. If a generator recreates the .xcodeproj bundle, determine whether it can preserve or emit the JSON format. The Apple documentation does not certify third-party generators.
  • Know your project location. You will select the project itself in Xcode’s Project navigator, not an individual target, group, source file, or .xcconfig file.

Close other editors that might rewrite the project while you change its format. A clean working tree is not technically required, but it prevents unrelated edits from being mistaken for conversion output.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Convert the project in Xcode

Use the project editor’s format control rather than manually renaming or editing files inside the bundle.

  1. Open the project in a supported Xcode release. Use Xcode 27 or later when creating a .xcproj configuration file.
  2. Select the project. In the Project navigator, click the top-level item with the project’s name. Do not select a target beneath it.
  3. Open the File inspector. In the inspector area, locate the section labeled Project Document.
  4. Change the project format. Open the Project Format pop-up menu and choose JSON.
  5. Confirm if prompted. If Xcode displays a confirmation dialog, click Continue.
  6. Save and inspect the repository. Allow Xcode to finish writing the project, then close or leave it open while you inspect the source-control changes.

The visible setting is on the project document, so changing a target’s build settings or selecting a configuration file will not perform this migration. If the JSON option is unavailable, verify the Xcode version and that you selected the project document rather than a target.

Understand the source-control diff

After conversion, Apple describes the change inside the .xcodeproj bundle as removal of the .pbxproj property-list file and addition of the .xcproj JSON file. In a Git-style diff, that commonly appears as one file deleted and another added instead of as a line-by-line edit to the old file.

Review the diff for the expected pair of operations:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • The old .pbxproj file is removed from the project bundle.
  • A new .xcproj file appears in the same bundle.
  • No unrelated source, resource, scheme, workspace, signing, or build-setting files change unless you changed them separately.

Do not “fix” the diff by restoring .pbxproj, renaming .xcproj, or hand-editing the JSON. Xcode owns the project-document representation and can rewrite it when the project is saved.

Apple identifies three potential benefits of the JSON representation: comparison views can correspond more closely to actions made in Xcode, configuration changes can be isolated so merge conflicts are less likely, and the file is easier for coding-intelligence agents to edit. These are stated advantages, not guarantees. A JSON file can still conflict when two branches change the same objects, and an automated editor can still make an invalid or unwanted change.

Validate the converted project before merging

Conversion changes the project configuration representation, so validate both that representation and the build behavior that depends on it.

Inspect the file change

  1. Use your source-control client to review the complete diff, including files inside the .xcodeproj bundle.
  2. Confirm that the only expected representation change is the .pbxproj-to-.xcproj swap, unless you intentionally changed another project setting.
  3. Check that the new JSON file is tracked and the removed property-list file is staged for deletion. A project that contains both as hand-managed files is not a clean migration.

Open the project again

Close and reopen the project in the supported Xcode version. Confirm that the project and its targets appear normally, groups contain the expected files, schemes are available, and signing and package settings are still present. This catches a malformed or partially written project file before a build machine encounters it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Run the normal build checks

Run the team’s ordinary local build, tests, archive or export checks, and CI validation for the project. Include every important target rather than checking only the application target: test bundles, extensions, frameworks, command-line tools, and other products may exercise different project objects. The Apple migration documentation does not report a completed build or test of your project, so these checks are your responsibility.

Exercise automation that touches the project

Run scripts that enumerate targets, update build phases, generate schemes, set signing values, or inspect project metadata. Also run any project generator or dependency-management step that rewrites the bundle. The official documentation establishes the Xcode format behavior, but it does not establish that every external integration understands .xcproj.

JSON project format versus the earlier property-list format

Comparison Earlier format JSON format
File inside the .xcodeproj bundle .pbxproj property-list project configuration .xcproj JSON project configuration
Supported Xcode versions established by Apple Supported alongside JSON in Xcode 27 and later Compatible with Xcode 27 and later
Default described for Xcode 27.2 and later Not the newer default described by Apple Apple describes this as the default, smaller, hierarchical, self-describing file
Source-control review Property-list representation; readability depends on the diff Apple says comparisons can correspond more closely to actions in Xcode
Merge-conflict behavior No guarantee of conflict-free merges Apple says isolating configuration changes makes conflicts less likely, not impossible
External tooling Existing scripts may expect this representation Compatibility must be checked in your actual workflow; no universal matrix is provided
Migration requirement Can remain in use in supported Xcode versions Optional choice in the documented supported releases

The table compares the project-document format only. It does not compare build settings, compiler behavior, product performance, or app runtime output; those are controlled by the project’s settings and source, not by whether the document is serialized as property-list data or JSON.

Do not confuse the project format with .xcconfig files

An .xcconfig file is a plain-text file for specifying build settings. Build settings influence compilation, linking, and product creation, and can also be changed in project or target settings. Changing the project document to JSON does not convert, relocate, or replace any .xcconfig file.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

When diagnosing a build-setting result after migration, keep the documented precedence order in mind. Apple describes values in this order, from higher precedence to lower precedence: target-level values; configuration settings files mapped to the target; project-level values; configuration settings files mapped to the project; and system defaults. Settings supplied directly to xcodebuild have the highest precedence.

  • A value in a target’s settings can override the corresponding project-level value.
  • An .xcconfig mapped to a target participates separately from one mapped to the project.
  • A command-line value passed to xcodebuild can override values that appear in the project or its configuration files.

If a setting appears to change after migration, compare the resolved build setting and the source that supplies it instead of assuming the JSON serialization changed the setting. Keep format migration and build-setting edits in separate commits when possible.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

How to handle teams and branches

Merge the conversion as an isolated change

Because the conversion removes one file and adds another, merge it independently of large feature branches. Ask contributors to rebase or merge the format-conversion commit before making further project-editor changes. This reduces the chance that one branch edits the old file while another branch edits the new file.

Coordinate the minimum Xcode version

Document that the repository now contains an .xcproj file and identify the minimum Xcode version required to open it. Apple’s stated compatibility boundary is Xcode 27 and later. If a release branch must remain usable with an earlier Xcode version, keep that branch in the earlier format or establish a separately supported workflow rather than committing a file that older tools may not recognize.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Review automated edits carefully

The JSON structure may be easier for coding-intelligence agents and scripts to parse, but ease of editing is not permission to bypass project review. Require the same code-review checks for automated project changes as for manual changes: inspect the diff, open the project, and run the relevant build and test jobs.

Troubleshooting common migration problems

The JSON option is missing

  • Confirm that the selected item is the top-level project in the Project navigator.
  • Open the File inspector and look specifically for Project Document, not target settings or a source-file inspector.
  • Check the Xcode release. The documented .xcproj compatibility begins with Xcode 27.
  • If the project is opened through a workspace, select the project file nested in the workspace’s Project navigator hierarchy.

The project shows both file types after conversion

Inspect the bundle in source control. A normal conversion is represented by removal of the old .pbxproj file and addition of the new .xcproj file. If both are intentionally present because a script copied one, stop and determine which file Xcode is using; do not commit an improvised duplicate.

A script can no longer find the project file

Search the script for assumptions about project.pbxproj or property-list syntax. Update it to recognize the JSON project format only after testing its behavior against a real converted project. The official migration guidance does not promise compatibility for custom parsers, generators, plugins, or wrappers.

A merge conflict occurs anyway

JSON does not eliminate conflicts. Have the developers compare the intended project actions, resolve the conflict in the supported Xcode version or an approved project-aware tool, then reopen the project and run the normal checks. Do not resolve a conflict by blindly concatenating JSON or restoring an obsolete file.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A build setting appears wrong

Inspect the resolved setting and its precedence. Check target-level values, target-mapped and project-mapped .xcconfig files, project-level values, system defaults, and any xcodebuild command-line overrides. The project format change is separate from this hierarchy.

You need to undo the migration

Use source control rather than manually renaming files. Apple says that a source-controlled conversion can be undone by discarding the individual file changes in the project folder: the removal of the .pbxproj file and the addition of the .xcproj file. After restoring the earlier state, reopen the project and verify that the expected format is shown in Project Document → Project Format.

When should you migrate?

Migration is most straightforward when all contributors and CI machines are already on Xcode 27 or later, the repository can accept a deliberate file replacement, and the team has time to test project-generating scripts. The JSON format is a reasonable choice when clearer source-control comparisons and a more self-describing structure matter to your team.

Delay the change when an essential developer or build machine must remain on an earlier Xcode release, when an unverified generator rewrites the project on every build, or when you cannot isolate the conversion from a major project reorganization. Since Xcode 27 and later support both formats, postponing migration does not by itself prevent use of the supported Xcode release.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Migration checklist

  • Verify that every required Xcode installation is 27 or later.
  • Identify scripts, generators, plugins, and CI jobs that read or write the project bundle.
  • Create a clean, isolated source-control change.
  • Select the project in the Project navigator.
  • Open the File inspector and locate Project Document.
  • Choose JSON from Project Format and click Continue if prompted.
  • Confirm the expected .pbxproj removal and .xcproj addition.
  • Reopen the project and check targets, schemes, signing, and products.
  • Run the normal local and CI build and test checks.
  • Test any automation that parses or generates the project.
  • Record the minimum Xcode version and the new project-file representation for contributors.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.