如何完全重命名一个Xcode项目(包括文件夹)?

687

我有一个名为XXX的项目,我想将该项目重命名为YYY

请注意:XXX是一个非常普遍的术语(例如“data”或简单的“project”),因此简单的正则表达式搜索和替换是不可行的,因为这可能会破坏项目配置文件。

我的当前项目目录包含以下内容:

  • XXX
  • XXXTests
  • XXX.xcodeproj

我想将它们分别重命名为:

  • YYY
  • YYYTests
  • YYY.xcodeproj

... 并在我的项目文件中反映出必要的更改。

我如何在不必手动创建和填充新项目的情况下完成这个操作?


1
可能是重命名Xcode项目的重复问题。 - Ron Myschuk
1
此外,该问题曾在这里提出并得到解答: https://dev59.com/32Mm5IYBdhLWcg3wRdQz 其中回答得到了200个赞。 - Ron Myschuk
1
也被问到并在这里得到了回答 https://dev59.com/CGsy5IYBdhLWcg3w3h2I 其中一个帖子有189个投票 两篇文章在Xcode 7中仍然相关 - Ron Myschuk
如果您只想重命名应用程序图标名称,请查看此答案 https://dev59.com/HXVC5IYBdhLWcg3wnCf6 - LYu
12个回答

1406

步骤1 - 重命名项目

  1. 在Xcode窗口左侧的“项目导航器”中,单击要重命名的项目。
  2. 在右侧面板中,选择“文件检查器”,你的项目名称应该在“标识和类型”下找到。将其更改为新名称。
  3. 当对话框询问是否重命名项目内容项时,点击“重命名”。对于任何有关未提交更改的警告,请选择“是”。

步骤2 - 重命名方案

注意:对于Xcode 14,2022年9月:在某些情况下,Xcode现在会自动重命名方案,当Xcode执行上述步骤1时。如果是这样,步骤2中无需进行任何操作。

  1. 在窗口中间顶部,在活动设备/模拟器左侧,有一个旧名称下的产品方案;单击并按住它,然后选择“管理方案...”。
  2. 在方案中单击旧名称(类似于在Xcode中重命名文件),它将变为可编辑状态;更改名称并单击“关闭”。

步骤三 - 重命名包含您资产的文件夹

  1. 退出Xcode。重命名包含所有项目文件的主文件夹。
  2. 在正确命名的主文件夹中,除了您新命名的.xcodeproj文件外,可能还有一个错误命名的OLD文件夹,其中包含您的源文件。将OLD文件夹重命名为您的新名称。{如果您使用git,可以使用git mv oldname newname。请注意,当使用git mv old new时,通常必须(i)完全提交所有其他更改(ii)然后才能git mv old new(iii)提交该更改(iv)然后再进行进一步的更改。如果按照步骤i-ii-iii-iv操作,git将通过重命名来维护历史记录。}
  3. 在Xcode中重新打开项目。如果看到警告“OLD文件夹不存在”,请忽略该警告。重命名文件夹中的源文件名称将变为红色,因为它们的路径已被破坏。
  4. 在左侧面板的“项目导航器”中,单击表示您重命名的OLD文件夹的顶级文件夹。
  5. 在右侧面板中,在“标识和类型”下,将“名称”字段从OLD名称更改为新名称。
  6. 在该字段下方是一个“位置”菜单。如果完整路径未自动更正,请单击附近的文件夹图标并选择重命名的文件夹。如果链接仍然中断,则可能需要为每个源文件执行此修复操作。
步骤4 - 重命名构建plist数据
  1. 在左侧的“项目导航器”中单击项目,在主面板中选择“构建设置”。
  2. 在设置中搜索“plist”。
  3. 在打包部分,您将看到Info.plistProduct Bundle Identifier的字段。
  4. 如果在Info.plist中输入了文件名,请更新它(它可能已在步骤1中自动更新)。
  5. 对于Product Bundle Identifier,除非它使用${PRODUCT_NAME}变量,否则请执行相同操作。在这种情况下,请在设置中搜索“product”并更新Product Name。如果Product Name基于${TARGET_NAME},请单击设置窗格左侧的TARGETS列表中的实际目标项进行编辑,所有相关设置将立即更新。
  6. 在设置中搜索“prefix”,并确保Prefix Header的路径也已更新为新名称。
  7. 如果您使用SwiftUI,请搜索“Development Assets”并更新路径。如果路径包含空格( ),请用双引号("")括起来。
  8. 如果您有一个授权文件,请搜索“签名”并更新Code Signing Entitlements。相应地,还要在项目导航器中重命名实际的授权文件。(副注:在Xcode 13中,授权文件在项目导航器中具有黄色的勾号图标;如果您使用共享容器/应用组,可能已创建一个授权文件。)
步骤5 - 如果有测试,请重复步骤3。
步骤6 - 如果核心数据的名称与项目名称匹配(如果有),请重复步骤3。
步骤7 - 清理并重新构建您的项目。
  1. 按下 Command + Shift + K 进行清理
  2. 按下 Command + B 进行构建

进一步说明。

  • 如果项目有故事板
在这个阶段,只需在Mac Finder中简单地打开整个文件夹。在文件文本搜索中键入旧名称。您会发现旧名称在所有故事板文件中经常出现为customModule="OldName"。(Explanation.)可以在Xcode中逐个修复它们:在文件检查器中点击视图控制器,并确保在实际故事板面板左侧的白色列上点击实际故事板。在右侧面板中点击Identity Inspector(第四个小按钮)。查看自定义类->模块字段。注意它看似以灰色显示NewName。然而(截至Xcode14.2),这是错误的。只需点击下拉菜单,并明确选择新名称即可解决。(如果您现在使用文本编辑器查看该故事板文件,则会看到已修复)。您可以选择使用纯文本编辑器将它们全部更改。

5
您可以更改项目名称,但文件夹名称仍将保持不变。您知道如何更改它们吗? - Coder221
9
感谢您使用 Xcode 8,但是权限文件需要手动重命名。 - Jiulong Zhao
67
在执行第三步第二部分(重命名文件夹)时,如果您正在使用 git,请使用 git mv oldname newname 命令。这样 git 就会认为这是一次移动操作,而不是删除和添加所有文件。 - Aaron Ash
18
完美,在Xcode 8.2中完美运作,只需指出一个问题,即在编辑方案时,如果单击一次方案名称无法进行编辑,则选择该方案并按回车键,这将使方案名称可编辑。 - Khurram Shehzad
7
不要忘记在所有项目文件中进行旧项目名称的查找和替换。 - Derek Soike
显示剩余38条评论

235

除了luke-west的优秀回答外,还有以下补充:

使用CocoaPods时

在第二步之后:

  1. 退出Xcode。
  2. 在主文件夹中将OLD.xcworkspace重命名为NEW.xcworkspace

在第四步之后:

  1. 在Xcode中:从项目导航器选择并编辑Podfile。您应该看到一个具有OLD名称的target条款。将其更改为NEW。
  2. 退出Xcode。
  3. 在项目文件夹中删除OLD.podspec文件。
  4. rm -rf Pods/
  5. 运行pod install
  6. 打开Xcode。
  7. 单击项目导航器中的项目名称。
  8. 在主窗格中,切换到Build Phases选项卡。
  9. Link Binary With Libraries下,查找libPods-OLD.a并将其删除。
  10. 如果有Objective-C桥接头,请转到构建设置并将标头的位置从OLD / OLD-Bridging-Header.h更改为NEW / NEW-Bridging-Header.h
  11. 清理并运行。

7
使用Xcode 8.3.2,我必须使用cocoapods-deintegrate并重新安装所有pod才能用新名称运行项目。 - SteffenK
2
@SteffenK,如果你已经完成了所有其他步骤,那么使用该方法和rm -rf Pods/有什么区别吗? - Vaiden
2
@Vaiden非常感谢您在使用CocoaPods时提供的额外清晰度!该过程确实创建了第二个引用,这很奇怪,但是在删除它后一切都完美地运作了!再次感谢! :) - JDev
6
请问有人能告诉我在哪里可以找到提到的OLD.podspec文件吗?在我的项目中,我有一些文件,比如'Podfile'/'Podfile.lock'/'Pods.xcodeproj'和一个名为'Local Podspecs'的空文件夹,但我找不到.podspec文件。 - codeDude
4
只有在将项目作为Cocoapod进行分发或计划分发时,您才需要一个podspec文件。如果您这样做了,您可能已经知道了,所以我猜您没有podspec,@codeDude。 - Jan Nash
显示剩余10条评论

82

Xcode 11.0+。

现在变得非常简单。只需进入Xcode窗口的左侧面板“项目导航器”(Project Navigator)。 按下Enter键使其处于重命名活动状态,就像更改文件夹名称一样。

图像描述

在此处更改新名称,Xcode将询问您是否要重命名其他相关内容。

图像描述

点击此处的重命名按钮即可完成操作。

如果您对根文件夹名称感到困惑,比如为什么它没有更改,那么它只是一个文件夹。 它只是使用新名称重命名而已。

图像描述


当我尝试重命名时,显示"无法重命名"。 - bikram
@KiranJasvanee,当我重命名根目录时,构建失败了。但是如果我保持它的旧名称,构建就会成功。尽管如此,其他所有功能都正常工作。 - alec wilson
你可能还需要将目标指向新的 info.plist 位置。 - Gabriel Jensen
3
这个“简单”的解决方案对我来说彻底失败了。它把文件移动到了错误的位置,删除了其他文件,无法更改许多设置。我不得不手动进去修复所有问题。不推荐使用。 - Womble
2
在执行上述过程之后,必须更改Info.plist的地址: 左侧窗格中的项目导航器 > 选择项目 > 构建设置 > 打包 > Info.plist文件 > 重命名为新项目名称/Info.plist。 - Mamad Farrahi
显示剩余2条评论

75

使用shell命令更快地解决问题(也适用于CocoaPods):

在进行以下操作之前,请将当前目录切换至非Git仓库 ⚠️

步骤1-先决条件

  1. 将原始项目文件夹复制到临时文件夹/NewProjectFolder中,且该文件夹位于您的Git仓库外部。⚠️更改.git可能会破坏您的git索引

步骤2-打开终端

现在我们将把项目从oldName重命名为NewProject

  • 关闭Xcode。

  • 转到您的/NewProjectFolder

      cd /Path/to/your/NewProjectFolder
    
  • 安装所需的额外工具。

  •   brew install rename ack
    
  • 重命名包含源字符串的文件和目录。您需要运行此命令两次,因为首先将重命名目录,然后在下一次迭代中将重命名其中的文件和目录。

  •   find . -name 'oldName*' -print0 | xargs -0 rename --subst-all 'oldName' 'NewProject'
    
  • 检查所有包含源字符串的文件是否已重命名。您应该看到空输出。

  •   find . -name 'oldName*'
    
  • 替换所有文件中的字符串。

  •   ack --literal --files-with-matches 'oldName' --print0 | xargs -0 sed -i '' 's/oldName/NewProject/g'
    
  • 检查所有文件中字符串的所有出现是否都被替换了。您应该看到空输出。

  •   ack --literal 'oldName'
    
  • 运行 pod install

  • NewProjectFolder添加到您的代码库中。

  • 完成!


4
谢谢,我觉得这很有用。在复制和粘贴命令时,我喜欢尽量减少工作量,所以使用"YourNewAmazingProjectName"这样的示例名称有些多余,只需使用"example"即可,这会减少我使用删除键的次数。 - LpLrich
2
@LpLrich,谢谢你的建议,我刚刚更新了我的回答。 - Pietro Basso
4
@EthanParker 你需要运行命令 find . -name 'oldName*' -print0 | xargs -0 rename --subst-all 'oldName' 'ExampleName' 两次,主目录下的文件和文件夹会在第二次迭代中被重命名。 - Pietro Basso
1
我在我的项目中使用了CoreData,并且不得不运行这个命令三次而不是两次。 - ShadeToD
为了更改大小写(从'MyApp'到'Myapp'),我需要在临时名称之间进行转换(从'MyApp'到'TempName',最后到'Myapp')。正如@ShadeToD所提到的,Core Data需要执行3次命令。对于这种情况的更正,我必须在创建新证书之前删除Apple Developer Center中的证书,即使捆绑标识符应该是区分大小写的。最后,我无法删除具有初始大小写格式的CloudKit容器,并且无法使用新容器创建新容器,因此我妥协并向新的CloudKit容器名称添加了一些内容。 - cdf1982
显示剩余3条评论

39

有一个名为Xcode项目重命名工具的GitHub项目:

应该从Xcode项目目录的根目录内部执行,并使用两个字符串参数:$OLD_PROJECT_NAME和$NEW_PROJECT_NAME来调用。

脚本递归地遍历所有文件和目录,包括Xcode项目或工作区文件,并替换所有出现的$OLD_PROJECT_NAME字符串为$NEW_PROJECT_NAME字符串(在每个文件的名称和内容中均替换)。

别忘了备份你的项目!

Xcode项目重命名工具


这对于初学者来说没有用处,它只会破坏我的主项目文件,而且它也不能使用下面的命令删除脚本,最终导致我浪费了时间。 $ rm rename.swift - Peter Walter
请不要走捷径。 - Peter Walter
6
@peter-walter 在进行此类操作前,您应该始终备份您的数据。 - Olcay Ertaş
1
哇,这真的很容易! - Aaron Krauss
神奇的脚本,谢谢老兄! - Dima
显示剩余3条评论

10

在遵循 @Luke-West 和@Vaiden 的解决方案时,需要额外的说明:

  • 如果您的方案未更改(仍然显示我的mac)位于停止按钮旁边的左上角:
  1. 单击新创建的项目名称(停止按钮旁边)> 单击编辑方案 > 构建(左侧)> 删除旧目标(将说它丢失),并用新命名的项目替换新命名的项目下的新命名的项目徽标

此外,我不必使用 @Vaiden 的步骤3。只需在终端中运行 rm -rf Pods/ 即可摆脱所有旧的Pod文件

我也不必使用 @Vaiden 的步骤9,而是只需删除 Link Binary Libraries 下的 OLD 项目命名的框架(NEWLY 命名的框架已经在那里了)

因此,更新后的步骤如下:

步骤1-重命名项目

  1. 如果您的项目中使用cocoapods,请关闭工作区并打开这些步骤的XCode项目。
  2. 在Xcode视图左侧的“项目导航器”中单击要重命名的项目。
  3. 在右侧选择“文件检查器”,您的项目名称应在“标识和类型”下,将其更改为新名称。
  4. 在下拉菜单中单击“重命名”

步骤2-重命名方案

  1. 在顶部栏(靠近“停止”按钮)中,有一个旧产品的方案,请单击它,然后转到“管理方案”
  2. 单击方案中的旧名称,它将变为可编辑状态,请更改名称
  3. 退出XCode。
  4. 在主文件夹中,将OLD.xcworkspace重命名为NEW.xcworkspace。

步骤3-重命名带有资产的文件夹

  1. 退出Xcode
  2. 在正确命名的主文件夹中,有一个新命名的xcodeproj文件,其中包含错误命名的OLD文件夹。将OLD文件夹重命名为您的新名称
  3. 重新打开项目,您将看到一个警告:“文件夹OLD不存在”,忽略该警告
  4. 在左侧的“项目导航器”中,单击顶级OLD文件夹名称
  5. 在“身份和类型”下的实用程序窗格中,您将看到“名称”条目,请将其从OLD更改为新名称
  6. 在下面,有一个“位置”条目。单击具有OLD名称的文件夹,并选择新命名的文件夹

步骤4-重命名构建plist数据

  1. 在左侧的“项目导航器”中单击项目,在主面板中选择“构建设置”
  2. 在此部分搜索“plist” 在包装下,您将看到Info.plist和Product bundle identifier
  3. 重命名Info.plist中的顶部条目
  4. 对Product Identifier执行相同操作

第5步处理Podfile

  1. 在XCode中:选择并编辑来自项目导航器的Podfile。您应该看到一个具有旧名称的目标子句。将其更改为新名称。
  2. 退出XCode。
  3. 在终端中,cd进入项目目录,然后:pod deintegrate
  4. 运行pod install。
  5. 打开XCode。
  6. 在项目导航器中单击您的项目名称。
  7. 在主窗格中,切换到Build Phases选项卡。 在链接二进制文件与库下,查找旧框架并删除它(应显示为丢失)。新命名的框架应该已经存在,如果没有,请使用窗口底部的“+”按钮添加它
  8. 如果您有一个objective-c Bridging header,请转到Build settings,并将头文件的位置从OLD / OLD-Bridging-Header.h更改为NEW / NEW-Bridging-Header.h
  9. 清理并运行。

成功完成所有步骤后,您应该能够无错误地构建。


5
第 5.3 步,不要使用 rm-rf Pods/ 命令,而是可以更干净的运行 pod deintegrate 命令,该命令会从你的 Xcode 项目中彻底移除 CocoaPods 的所有痕迹,但会保留你的 Podfile 文件。 - jklapwyk
这太棒了。它为我提供了将Ionic应用程序与现有iOS应用程序合并的基础。 - t4l
你真的应该推荐使用 pod deintegrate 作为 rm -rf Pods 更安全的替代方案。只有一个空格之差,就可能引发灾难。 - DBrown

8

如何更改项目名称:

  1. 在项目导航器中选择您的项目。

  2. 在文件检查器中的“标识和类型”部分,将新名称输入到“名称”字段中。

  3. 按下 Return 键。

    会显示一个对话框,其中列出了可以重命名的项目。该对话框包括更改后这些项目的预览。

  4. 要选择性地重命名项目,请禁用您不想重命名的任何项目的复选框。要仅重命名您的应用程序,请保留应用程序并取消选择所有其他项目。

  5. 按下“重命名”按钮


3

补充Luke West的答案。如果你有任何权限:

  1. 关闭Xcode
  2. 更改权限文件名
  3. 进入Xcode,选择应突出显示为红色的权限文件,在“文件检查器”中选择文件夹图标并选择重命名后的文件。
  4. 进入“构建设置”,搜索“权限”并更新权限的文件夹名称和文件名称。
  5. 清理并重新构建

我按照您给出的步骤后遇到了以下问题,请验证“Smartify”目标的CODE_SIGN_ENTITLEMENTS构建设置的值是否正确,并且该文件在磁盘上存在。 - Protocol
1
双重检查 Build Settings 是否指向正确的权利文件位置。清理并重新构建。 - Alexander

2
除了Luke和Vaiden建议的所有步骤之外,我还必须将Storyboard中的所有customModule属性重命名为与新名称匹配,并且这是区分大小写的。

1
曾经提到过这个的唯一人! - Fattie
1
请注意,您可以在界面构建器中完成此操作,只需对该字段进行“重新点击”即可。然后它将正确地“重新默认”为您的新项目名称。 - Fattie

0
如果是React Native,您可以执行以下操作: 您可以更改package.json中的名称属性,运行react-native upgrade,然后让React覆盖android/ios文件。但是,如果有未保存的代码,请不要覆盖索引文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接