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

我有一个名为XXX的项目。我想将这个项目重命名为YYY

请注意,XXX是一个非常常见的术语(例如,“数据”,或简单的“项目”),因此,出于破坏项目配置文件的风险,简单的RegEx搜索和替换是不可能的。

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

  • # EYZ0
  • # EYZ0
  • # EYZ0

我想把它们重命名为:

  • # EYZ0
  • # EYZ0
  • # EYZ0

... 分别与必要的变化反映在我的项目文件。

我如何才能在不手动创建和填充新项目的情况下实现这一点呢?

240209 次浏览

步骤1 -重命名项目

  1. 在“项目导航器”中单击要重命名的项目。在Xcode窗口的左侧面板。
  2. 在右边的面板中,选择“文件检查器”,你的项目名称应该在“身份和类型”下面。把它改成你的新名字。
  3. 当对话框询问是否重命名 项目的内容项,单击“重命名”。
  4. . .

步骤2 -重命名方案

注意:对于Xcode 14, 2022年9月:在某些情况下,当Xcode执行上述第1步时,Xcode现在自动重命名方案。如果是这样,在步骤2中就没有什么可做的了。

  1. 在窗口的顶部中间,即活动设备/模拟器的左侧,在旧名称下有您的产品的方案;点击,坚持住,然后选择“Manage Schemes…”。
  2. 点击方案中的旧名称(类似于Xcode中的重命名文件),它将变成可编辑的;更改名称并单击“关闭”。

步骤3 -重命名文件夹与您的资产

  1. Xcode辞职。重命名包含所有项目文件的主文件夹。
  2. 在正确命名的主文件夹中,在新命名的.xcodeproj文件旁边,可能有一个错误命名的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. 在右边的面板中,在“身份和类型”下,更改“名称”;字段从旧名称到新名称。
  6. 就在这个字段的下面是一个“位置”;菜单。如果完整路径没有自行更正,请单击附近的文件夹图标并选择重命名的文件夹。如果指向每个源文件的链接仍然断开,则可能必须对每个源文件执行此修复。

步骤4 -重命名Build plist数据

  1. 点击“项目导航器”中的项目;在左边,在主面板中选择“Build settings”。
  2. 搜索“plist”;在设置中。
  3. 在package部分,您将看到Info.plistProduct Bundle Identifier字段。
  4. 如果在Info.plist中输入了文件名,则更新它(可能在步骤1中已自动更新)。
  5. Product Bundle Identifier执行同样的操作,除非它使用${PRODUCT_NAME}变量。在这种情况下,搜索“产品”;并更新Product Name。如果Product Name基于${TARGET_NAME},则单击设置窗格左侧TARGETS列表中的实际目标项并编辑它,所有相关设置将立即更新。
  6. 在设置中搜索“前缀”;并确保Prefix Header的路径也更新为新名称。
  7. 如果你使用SwiftUI,搜索“开发资产”;并更新路径。如果路径包含空格( ),则用双引号("")括起来。
  8. 如果你有一个授权文件,搜索“签名”;并更新Code Signing Entitlements。相应地,也要在Project Navigator中重命名实际的授权文件。(注:在Xcode 13中,授权文件在Project Navigator中有一个黄色的复选符号图标;如果你使用共享容器/应用组,你可能已经创建了一个。)

步骤5 -重复步骤3的测试(如果你有的话)

步骤6 -如果核心数据的名称与项目名称(如果有的话)匹配,则重复步骤3

步骤7 -清理和重建你的项目

  1. 命令 + 转变 + K清洗
  2. 命令 + B构建

进一步指出。

  • 如果项目有故事板. #。

在这个阶段,只需在Mac finder中打开整个文件夹。在文件文本搜索中键入旧名称。您将看到旧名称在所有故事板文件中经常以customModule="OldName"的形式出现。(解释。)这些可以在Xcode中,在每个故事板上逐个修复:点击视图控制器。点击右边面板上的标识检查器(第四个小按钮)。查看自定义类>模块字段。注意看似显示NewName。然而(仍然是Xcode14)这是不正确的。只需点击下拉菜单,并显式地选择新名称。(如果您现在使用文本编辑器查看故事板文件,您将看到它已被修复。)您可能更喜欢使用纯文本编辑器更改它们。

添加到卢克-韦斯特的回答很好:

使用CocoaPods时

第二步之后:

  1. Xcode辞职。
  2. 在主文件夹中,将OLD.xcworkspace重命名为NEW.xcworkspace

第四步之后:

  1. 在Xcode中:在项目导航器中选择并编辑Podfile。您应该看到带有OLD名称的target子句。改为NEW。
  2. Xcode辞职。
  3. 在项目文件夹中,删除OLD.podspec文件。
  4. # EYZ0
  5. # EYZ0运行。
  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. 清理干净,然后跑。

更改项目名称;

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

  2. 在文件检查器的Identity and Type部分,在name字段中输入一个新名称。

  3. < p >新闻# EYZ0。

    将显示一个对话框,列出项目中可以重命名的项。该对话框包括更改后项目将如何显示的预览。

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

  5. < p >按“Rename"

使用shell命令的一个更快的解决方案(也适用于CocoaPods):

在继续⚠️之前,请cd到非git存储库

步骤1—前提条件

  1. 复制原来的项目文件夹到临时的/NewProjectFolder <强> < / >强外 你的Git仓库。⚠️更改为.git可能会破坏你的git索引💥☠

步骤2 -打开终端

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

  • < p > Xcode关闭。

  • 去你的/NewProjectFolder

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

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

      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'
    
  • < p > # EYZ0运行

  • 添加NewProjectFolder到您的存储库。

  • 你完了!

当遵循@Luke-West + @Vaiden的解决方案时,额外说明:

  • 如果你的方案没有改变(仍然显示我的mac)在左上角旁边的停止按钮:
  1. 点击新创建的项目名称(停止按钮旁边)>点击编辑方案>建造(左手边)>删除旧的目标(会说它丢失了),并替换为新命名项目标识下的新命名项目

而且,我不需要使用@Vaiden的解决方案的第三步。只需在终端中运行rm -rf Pods/就可以摆脱所有旧的pod文件

我也不必在@Vaiden的解决方案中使用第9步,相反,我只是在链接二进制库下删除了旧项目命名的框架(新命名的框架已经在那里)

所以更新后的步骤如下:

步骤1 -重命名项目

  1. 如果你在你的项目中使用cocoapods,关闭工作空间,然后打开XCode项目进行这些步骤。
  2. 在“项目导航器”中单击要重命名的项目。在Xcode视图的左边。
  3. 在右边选择“文件检查器”;项目的名称应该在“身份和类型”下面,将其更改为新名称。
  4. 点击“Rename"在下拉菜单中

步骤2 -重命名方案

  1. 在顶部的酒吧(靠近“stop”;按钮),有一个旧产品的方案,点击它,然后进入“管理方案”;
  2. 单击方案中的旧名称,它将成为可编辑的,更改名称
  3. XCode辞职。
  4. 在主文件夹中,重命名OLD。xcworkspace到NEW.xcworkspace。

步骤3 -重命名文件夹与您的资产

  1. Xcode辞职
  2. 在正确命名的master文件夹中,有一个新命名的xcodeproj文件,其中有一个错误命名的OLD文件夹。将旧文件夹重命名为新名称
  3. 重新打开项目,您将看到一个警告:“文件夹OLD不存在”,请忽略该警告
  4. 在“项目导航器”中;在左侧,单击顶级OLD文件夹名称
  5. 在“公用事业”窗格中的“身份和类型”;你会看到&;name &;条目,将其从OLD更改为新名称
  6. 就在下面有一个“位置”;条目。单击具有OLD名称的文件夹,并选择新重命名的文件夹

步骤4 -重命名Build plist数据

  1. 点击“项目导航器”中的项目;在左边的主面板中选择“Build settings”;
  2. 搜索"plist"在本节中 在packaging下面,您将看到Info。plist和产品包标识符
  3. 重命名Info.plist中的顶部条目
  4. 对产品标识符做同样的处理吗

步骤5处理Podfile

  1. 在XCode中:从项目导航器中选择并编辑Podfile。您应该看到一个具有OLD名称的目标子句。改为NEW。
  2. XCode辞职。
  3. 在终端中,cd到项目目录,然后:pod deintegrate
  4. 运行pod install。
  5. 打开XCode。
  6. 在项目导航器中单击项目名称。
  7. 在主窗格中,切换到Build Phases选项卡。 在Link Binary With Libraries下,寻找旧的框架并删除它(应该说它已经丢失了),新命名的框架应该已经在那里了,如果没有使用"+"按钮在窗口底部添加它
  8. 如果你有一个objective-c桥接头,进入构建设置并将头的位置从OLD/OLD-Bridging- header .h更改为NEW/NEW-Bridging- header .h
  9. 清理干净,然后跑。

在成功地执行了所有步骤之后,您应该能够毫无错误地进行构建

有一个GitHub项目叫Xcode Project Renamer:

它应该在Xcode项目目录的根目录中执行,并使用两个字符串参数调用:$OLD_PROJECT_NAME &NEW_PROJECT_NAME美元

脚本递归遍历所有文件和目录, 包括Xcode项目或工作空间文件,并替换所有发生的事件 $OLD_PROJECT_NAME字符串和$NEW_PROJECT_NAME字符串(两者都在 每个文件的名称和内容)

别忘了备份你的项目!

Xcode项目命名器

除了Luke和Vaiden推荐的所有步骤之外,我还必须重命名Storyboard中的所有customModule属性以匹配新名称,并且这必须区分大小写。

Xcode 11.0 +。

现在真的很简单了。点击Xcode窗口左侧面板的项目导航器。 按输入使它激活重命名,就像你改变文件夹名称一样

Enter image description here

只需要在这里更改新名称,Xcode会要求你重命名其他东西。

# EYZ0。

点击重命名,你就完成了。

如果你对根文件夹的名称感到困惑,比如为什么它没有改变,那么它只是一个文件夹。它只是用一个新名字重新命名它。

Enter image description here

加入卢克·韦斯特的公认答案。如你有任何权益:

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

还有一件事要注意,我认为还没有注意到的是,如果你在AppDelegate文件(或其他任何地方)中使用CoreData对象和懒惰的persistentContainer,你可能会得到一个错误,说NSManagedObjectContext是nil(或沿着这些线)。更改任何NSPersistentContainer的名称以使用NEW应用程序名称。这应该能解决问题!如果没有,根据这篇老SO帖子,解决方案是删除旧的.xcdatamodeld文件,并创建一个新的文件,重新添加所有的实体。

我在网上找到了一些有用的简单步骤:

  1. 在Finder中更改项目的文件夹名称
  2. 打开项目/在Xcode导航器中选择项目文件/显示文件检查器/在身份和类型下根据您的喜好更改名称/输入/等待几秒钟直到弹出窗口出现/单击重命名/再次等待几秒钟-不要按OK/
  3. 在Xcode导航器中选择项目文件下的文件夹/显示文件检查器/在身份和类型下根据您的喜好更改名称/输入/等待几秒钟,直到Xcode nagivator中项目文件下的文件更改其名称
  4. 在Xcode项目状态栏中点击项目名称(当你将鼠标悬停在行首时就会出现)/选择Manage schemes…直到“自动创建计划”;窗口显示/2次点击方案栏下的项目名称/进入/关闭“自动创建方案”;窗口
  5. 在Xcode导航器/inXcode编辑器中选择项目文件~界面构建器区域选择tab "Build settings "/在过滤器中输入你的项目以前的名称/在你的项目以前的名称出现在根目录中的行中点击enter/ -只需将其更改为新名称
  6. Voala,就是这样
如果它的反应本机,你可以做的是: 您可以更改package中的name属性。Json,运行react-native upgrade,然后让react覆盖android/ios文件。但是,如果有未保存的代码,则不要覆盖索引文件