How do I completely rename an Xcode project (i.e. inclusive of folders)?

Step 1 - Rename the project

  1. Click on the project you want to rename in the "Project navigator" in the left panel of the Xcode window.
  2. In the right panel, select the "File inspector", and the name of your project should be found under "Identity and Type". Change it to your new name.
  3. When the dialog asks whether to rename or not rename the project's content items, click "Rename". Say yes to any warning about uncommitted changes.

Step 2 - Rename the scheme

  1. At the top middle of the window, to the left of the active device/simulator, there is a scheme for your product under its old name; click & hold on it, then choose "Manage Schemes…".
  2. Click on the old name in the scheme (similar to renaming files in Xcode) and it will become editable; change the name and click "Close".

Step 3 - Rename the folder with your assets

  1. Quit Xcode. Rename the master folder that contains all your project files.
  2. In the correctly-named master folder, beside your newly-named .xcodeproj file, there is probably a wrongly-named OLD folder containing your source files. Rename the OLD folder to your new name (if you use Git, you could run git mv oldname newname so that Git recognizes this is a move, rather than deleting/adding new files).
  3. Re-open the project in Xcode. If you see a warning "The folder OLD does not exist", dismiss the warning. The source files in the renamed folder will have red names because the path to them has broken.
  4. In the "Project navigator" in the left-hand panel, click on the top-level folder representing the OLD folder you renamed.
  5. In the right-hand panel, under "Identity and Type", change the "Name" field from the OLD name to the new name.
  6. Just below that field is a "Location" menu. If the full path has not corrected itself, click on the nearby folder icon and choose the renamed folder. You may have to perform this fix for each source file if the links to them remain broken.

Step 4 - Rename the Build plist data

  1. Click on the project in the "Project navigator" on the left, and in the main panel select "Build Settings".
  2. Search for "plist" in the settings.
  3. In the Packaging section, you will see fields for Info.plist and Product Bundle Identifier.
  4. If there is a file name entered in Info.plist, update it (it may have been updated automatically in Step 1).
  5. Do the same for Product Bundle Identifier, unless it is utilizing the ${PRODUCT_NAME} variable. In that case, search for "product" in the settings and update Product Name. If Product Name is based on ${TARGET_NAME}, click on the actual target item in the TARGETS list on the left of the settings pane and edit it, and all related settings will update immediately.
  6. Search the settings for "prefix" and ensure that Prefix Header's path is also updated to the new name.
  7. If you use SwiftUI, search for "Development Assets" and update the path. Enclose in double-quotes ("") quotes if the path contains a space ( ).

Step 5 - Repeat step 3 for tests (if you have them)

Step 6 - Repeat step 3 for core data if its name matches project name (if you have it)

Step 7 - Clean and rebuild your project

  1. Command + Shift + K to clean
  2. Command + B to build

To add to luke-west's excellent answer:

When using CocoaPods

After step 2:

  1. Quit Xcode.
  2. In the master folder, rename OLD.xcworkspace to NEW.xcworkspace.

After step 4:

  1. In Xcode: choose and edit Podfile from the project navigator. You should see a target clause with the OLD name. Change it to NEW.
  2. Quit Xcode.
  3. In the project folder, delete the OLD.podspec file.
  4. rm -rf Pods/
  5. Run pod install.
  6. Open Xcode.
  7. Click on your project name in the project navigator.
  8. In the main pane, switch to the Build Phases tab.
  9. Under Link Binary With Libraries, look for libPods-OLD.a and delete it.
  10. If you have an objective-c Bridging header go to Build settings and change the location of the header from OLD/OLD-Bridging-Header.h to NEW/NEW-Bridging-Header.h
  11. Clean and run.

A quicker solution using shell commands (works with CocoaPods too):

Please cd to a non-Git repository before proceeding ⚠️

Step 1 - Prerequisites

  1. Copy your original project folder to a temporary /NewProjectFolder Outside your Git repository. ⚠️ changes to .git could corrupt your git index 💥 ☠

Step 2 - Open Terminal

Now we're going to rename the project from oldName to NewProject.

  • Close Xcode.

  • Go to your /NewProjectFolder.

      cd /Path/to/your/NewProjectFolder
    
  • Install the extra tools needed.

      brew install rename ack
    
  • Rename the files and directories containing the source string. You’ll need to run this command twice, because directories will be renamed first, then files and directories inside those will be renamed on the next iteration.

      find . -name 'oldName*' -print0 | xargs -0 rename --subst-all 'oldName' 'NewProject'
    
  • Check if all the files containing the source string are renamed. You should see empty output.

      find . -name 'oldName*'
    
  • Replace all occurrences of the string in all files.

      ack --literal --files-with-matches 'oldName' --print0 | xargs -0 sed -i '' 's/oldName/NewProject/g'
    
  • Check if all occurrences of the string in all files were replaced. You should see empty output.

      ack --literal 'oldName'
    
  • Run pod install

  • Add NewProjectFolder to your repository.

  • You are done!


Xcode 11.0+.

It's really simple now. Just go to Project Navigator, the left panel of the Xcode window. Press Enter to make it active for rename, just like you change the folder name.

Enter image description here

Just change the new name here, and Xcode will ask you for renaming other pieces of stuff.

Enter image description here.

Tap on Rename here and you are done.

If you are confused about your root folder name, like why it's not changed, well it's just a folder. It is just renamed it with a new name.

Enter image description here


There is a GitHub project called Xcode Project Renamer:

It should be executed from inside root of Xcode project directory and called with two string parameters: $OLD_PROJECT_NAME & $NEW_PROJECT_NAME

Script goes through all the files and directories recursively, including Xcode project or workspace file and replaces all occurrences of $OLD_PROJECT_NAME string with $NEW_PROJECT_NAME string (both in each file's name and content).

Don't forget to backup your project!

Xcode Project Renamer