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

XcodeIdeRenameBatch Rename

Xcode Problem Overview


I have a project named XXX. I want to rename this project to YYY.

Note that XXX is an extremely common term (for e.g. "data", or simply "project"), and thus a simple RegEx search-and-replace is not possible, out of risk of corrupting the project configuration files.

My current project directory contains the following items:

  • XXX
  • XXXTests
  • XXX.xcodeproj

and I want to rename them to:

  • YYY
  • YYYTests
  • YYY.xcodeproj

... respectively, with the necessary changes being reflected in my project file.

How can I accomplish this without having to manually create and populate a new project?

Xcode Solutions


Solution 1 - Xcode

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, instead, you could run git mv oldname newname to change the name, 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

Solution 2 - Xcode

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.

Solution 3 - Xcode

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!

Solution 4 - Xcode

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

Solution 5 - Xcode

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

Solution 6 - Xcode

Extra instructions when following @Luke-West's + @Vaiden's solutions:

  • If your scheme has not changed (still showing my mac) on the top left next to the stop button:
  1. Click NEWLY created Project name (next to stop button) > Click Edit Schemes > Build (left hand side) > Remove the old target (will say it's missing) and replace with the NEWLY named project under NEWLY named project logo

Also, I did not have to use step 3 of @Vaiden's solution. Just running rm -rf Pods/ in terminal got rid of all old pod files

I also did not have to use step 9 in @Vaiden's solution, instead I just removed the OLD project named framework under Link Binary Libraries (the NEWLY named framework was already there)

So the updated steps would be as follows:

Step 1 - Rename the project

  1. If you are using cocoapods in your project, close the workspace, and open the XCode project for these steps.
  2. Click on the project you want to rename in the "Project navigator" on the left of the Xcode view.
  3. On the right select the "File inspector" and the name of your project should be in there under "Identity and Type", change it to the new name.
  4. Click "Rename" in a dropdown menu

Step 2 - Rename the Scheme

  1. In the top bar (near "Stop" button), there is a scheme for your OLD product, click on it, then go to "Manage schemes"
  2. Click on the OLD name in the scheme, and it will become editable, change the name
  3. Quit XCode.
  4. In the master folder, rename OLD.xcworkspace to NEW.xcworkspace.

Step 3 - Rename the folder with your assets

  1. Quit Xcode
  2. In the correctly named master folder, there is a newly named xcodeproj file with the the wrongly named OLD folder. Rename the OLD folder to your new name
  3. Reopen the project, you will see a warning: "The folder OLD does not exist", dismiss the warning
  4. In the "Project navigator" on the left, click the top level OLD folder name
  5. In Utilities pane under "Identity and type" you will see the "Name" entry, change this from the OLD to the new name
  6. Just below there is a "Location" entry. Click on a folder with the OLD name and chose the newly renamed folder

Step 4 - Rename the Build plist data

  1. Click on the project in the "Project navigator" on the left, in the main panel select "Build Settings"
  2. Search for "plist" in this section Under packaging, you will see Info.plist, and Product bundle identifier
  3. Rename the top entry in Info.plist
  4. Do the same for Product Identifier

Step 5 Handling Podfile

  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 terminal, cd into project directory, then: pod deintegrate
  4. Run pod install.
  5. Open XCode.
  6. Click on your project name in the project navigator.
  7. In the main pane, switch to the Build Phases tab. Under Link Binary With Libraries, look for the OLD framework and remove it (should say it is missing) The NEWLY named framework should already be there, if not use the "+" button at the bottom of the window to add it
  8. 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
  9. Clean and run.

You should be able to build with no errors after you have followed all of the steps successfully

Solution 7 - Xcode

To change the project name;

  1. Select your project in the Project navigator.

  2. In the Identity and Type section of the File inspector, enter a new name into the Name field.

  3. Press Return.

    A dialog is displayed, listing the items in your project that can be renamed. The dialog includes a preview of how the items will appear after the change.

  4. To selectively rename items, disable the checkboxes for any items you don’t want to rename. To rename only your app, leave the app selected and deselect all other items.

  5. Press "Rename"

Solution 8 - Xcode

Aside from all the steps Luke and Vaiden recommended, I also had to rename all the customModule properties in my Storyboard to match the new name, and this has to be case sensitive.

Solution 9 - Xcode

Adding to the accepted answer by Luke West. If you have any entitlements:

  1. Close Xcode
  2. Change the entitlements filename
  3. Go into Xcode, select the entitlements file should be highlighted red, in the File inspector select the Folder icon and select your renamed file.
  4. Go into Build Settings, and search "entitlements" and update the folder name and file name for the entitlement.
  5. Clean and rebuild

Solution 10 - Xcode

One more thing to note that I don't think has been noted yet is if you are using CoreData objects along with a lazy persistentContainer in the AppDelegate file (or anywhere else), you may get an error saying NSManagedObjectContext is nil (or something along those lines). Change the name for any NSPersistentContainer to use the NEW app name. That should fix the issue! If not, according to this old SO post the solution is to delete your old .xcdatamodeld file and create a new one adding back all the entities again.

Solution 11 - Xcode

I find helpful few simple steps I found on web:

  1. in Finder change project's folder name
  2. open project/select project file in Xcode navigator/show the file inspector/under Identity and Type change Name as per your preference/Enter/wait few seconds till pop-up window appears/click rename/again wait few seconds - do not push OK/
  3. select folder under project file in Xcode navigator/show the file inspector/under Identity and Type change name as per your preference/Enter/wait few secont till file under project file in Xcode nagivator changes its name
  4. in Xcode project status bar click on the project name (it appears when you hover over the beginning of line)/choose Manage schemes...till "Autocreate schemes" window shows up/2x click on project name under scheme column/enter/close "Autocreate schemes" window
  5. select project file in Xcode navigator/inXcode editor ~ interface builder area choose tab "Build setting"/in filter type the previous name of your project/click enter/in the line(s) where the previous name of your project appears within the root(s) - just change it to new name
  6. voala that's it

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVatsal ManotView Question on Stackoverflow
Solution 1 - XcodeLuke WestView Answer on Stackoverflow
Solution 2 - XcodeVaidenView Answer on Stackoverflow
Solution 3 - XcodePietro BassoView Answer on Stackoverflow
Solution 4 - XcodeKiran JasvaneeView Answer on Stackoverflow
Solution 5 - XcodeOlcay ErtaşView Answer on Stackoverflow
Solution 6 - XcodeitsmcghView Answer on Stackoverflow
Solution 7 - XcodePaal AuneView Answer on Stackoverflow
Solution 8 - XcodeCristianMoiseiView Answer on Stackoverflow
Solution 9 - XcodeAlexanderView Answer on Stackoverflow
Solution 10 - XcodehelpinghandView Answer on Stackoverflow
Solution 11 - XcodemairoView Answer on Stackoverflow