我有一个名为 XXX
的项目。我想将此项目重命名为 YYY
。
请注意,XXX
是一个非常常见的术语(例如“数据”,或简称为“项目”),因此不可能进行简单的 RegEx 搜索和替换,因为存在损坏项目配置文件的风险。
我当前的项目目录包含以下项目:
XXX
XXX测试
XXX.xcodeproj
我想将它们重命名为:
年年
YYY测试
YYY.xcodeproj
...分别,必要的更改反映在我的项目文件中。
如何在无需手动创建和填充新项目的情况下完成此操作?
第 1 步 - 重命名项目
在 Xcode 窗口左侧面板的“项目导航器”中单击要重命名的项目。在右侧面板中,选择“文件检查器”,您的项目名称应在“身份和类型”下找到。将其更改为您的新名称。当对话框询问是否重命名项目的内容项时,单击“重命名”。对任何有关未提交更改的警告说“是”。
第 2 步 - 重命名方案
在窗口的顶部中间,活动设备/模拟器的左侧,有一个以旧名称为您的产品的方案;单击并按住它,然后选择“管理方案...”。点击 scheme 中的旧名称(类似于 Xcode 中重命名文件),它将变为可编辑;更改名称并单击“关闭”。
第 3 步 - 用您的资产重命名文件夹
退出 Xcode。重命名包含所有项目文件的主文件夹。在正确命名的主文件夹中,在您新命名的 .xcodeproj 文件旁边,可能有一个错误命名的 OLD 文件夹,其中包含您的源文件。将 OLD 文件夹重命名为您的新名称(如果您使用 Git,则可以运行 git mv oldname newname 来更改名称,以便 Git 识别这是一个移动,而不是删除/添加新文件)。在 Xcode 中重新打开项目。如果您看到警告“文件夹 OLD 不存在”,请忽略该警告。重命名文件夹中的源文件将具有红色名称,因为它们的路径已损坏。在左侧面板的“项目导航器”中,单击代表您重命名的 OLD 文件夹的顶级文件夹。在右侧面板的“身份和类型”下,将“名称”字段从旧名称更改为新名称。该字段正下方是“位置”菜单。如果完整路径没有自行更正,请单击附近的文件夹图标并选择重命名的文件夹。如果指向它们的链接仍然断开,您可能必须对每个源文件执行此修复。
第 4 步 - 重命名 Build plist 数据
点击左侧“Project navigator”中的项目,在主面板中选择“Build Settings”。在设置中搜索“plist”。在 Packaging 部分,您将看到 Info.plist 和 Product Bundle Identifier 的字段。如果在 Info.plist 中输入了文件名,请更新它(它可能已在步骤 1 中自动更新)。对 Product Bundle Identifier 执行相同的操作,除非它使用 ${PRODUCT_NAME} 变量。在这种情况下,请在设置中搜索“产品”并更新产品名称。如果 Product Name 是基于 ${TARGET_NAME} 的,点击设置窗格左侧 TARGETS 列表中的实际目标项目并进行编辑,所有相关设置将立即更新。搜索“prefix”的设置并确保 Prefix Header 的路径也更新为新名称。如果您使用 SwiftUI,请搜索“开发资产”并更新路径。如果路径包含空格 ( ),请用双引号 ("") 括起来。如果您有权利文件,请搜索“签名”并更新代码签名权利。因此,还要重命名 Project Navigator 中的实际权利文件。 (旁注:在 Xcode 13 中,权利文件在项目导航器中有一个黄色复选标记图标;如果您使用共享容器/应用程序组,您可能已经创建了一个。)
第 5 步 - 重复第 3 步进行测试(如果有)
第 6 步 - 如果核心数据的名称与项目名称匹配(如果有),则对核心数据重复第 3 步
第 7 步 - 清理并重建您的项目
Command + Shift + K 清理 Command + B 构建
要添加到 luke-west's excellent answer:
使用 CocoaPods 时
第 2 步之后:
退出 Xcode。在主文件夹中,将 OLD.xcworkspace 重命名为 NEW.xcworkspace。
第 4 步之后:
在 Xcode 中:从项目导航器中选择并编辑 Podfile。您应该看到一个带有 OLD 名称的目标子句。将其更改为新。退出 Xcode。在项目文件夹中,删除 OLD.podspec 文件。 rm -rf Pods/ 运行 pod 安装。打开 Xcode。在项目导航器中单击您的项目名称。在主窗格中,切换到 Build Phases 选项卡。在 Link Binary With Libraries 下,查找 libPods-OLD.a 并将其删除。如果你有一个objective-c Bridging header 去Build settings 并将header 的位置从OLD/OLD-Bridging-Header.h 更改为NEW/NEW-Bridging-Header.h 清理并运行。
使用 shell 命令的更快解决方案(也适用于 CocoaPods):
在继续之前请cd
到非 Git 存储库⚠️
第 1 步 - 先决条件
将原始项目文件夹复制到 Git 存储库外部的临时 /NewProjectFolder。 ⚠️ 对 .git 的更改可能会损坏您的 git 索引💥 ☠
第 2 步 - 打开终端
现在我们要将项目从 oldName
重命名为 NewProject
。
关闭 Xcode。
转到您的 /NewProjectFolder。 cd /Path/to/your/NewProjectFolder
安装所需的额外工具。冲泡安装重命名确认
重命名包含源字符串的文件和目录。您需要运行此命令两次,因为目录将首先重命名,然后其中的文件和目录将在下一次迭代中重命名。寻找 。 -name 'oldName*' -print0 | xargs -0 重命名 --subst-all 'oldName' 'NewProject'
检查是否所有包含源字符串的文件都被重命名。您应该看到空输出。寻找 。 -name '旧名*'
替换所有文件中所有出现的字符串。 ack --literal --files-with-matches 'oldName' --print0 | xargs -0 sed -i '' 's/oldName/NewProject/g'
检查是否替换了所有文件中所有出现的字符串。您应该看到空输出。 ack --literal 'oldName'
运行 pod 安装
将 NewProjectFolder 添加到您的存储库。
你完成了!
find . -name 'oldName*' -print0 | xargs -0 rename --subst-all 'oldName' 'ExampleName'
两次,主文件夹中的文件和目录将在第二次迭代时重命名。
Xcode 11.0+。
现在真的很简单。只需转到 Xcode 窗口左侧面板的 Project Navigator。按 Enter 使其激活以进行重命名,就像更改文件夹名称一样。
https://i.stack.imgur.com/GOJUe.png
只需在此处更改新名称,Xcode 会要求您重命名其他内容。
https://i.stack.imgur.com/VNXYn.png
点击此处重命名,您就完成了。
如果您对根文件夹名称感到困惑,例如为什么它没有更改,那么它只是一个文件夹。它只是用一个新名称重命名。
https://i.stack.imgur.com/s8D6B.png
有一个名为 Xcode Project Renamer
的 GitHub 项目:
它应该从 Xcode 项目目录的根目录内部执行,并使用两个字符串参数调用:$OLD_PROJECT_NAME 和 $NEW_PROJECT_NAME 脚本递归遍历所有文件和目录,包括 Xcode 项目或工作区文件,并将所有出现的 $OLD_PROJECT_NAME 字符串替换为 $NEW_PROJECT_NAME字符串(在每个文件的名称和内容中)。
不要忘记备份您的项目!
pod install
。
遵循@Luke-West + @Vaiden 的解决方案时的额外说明:
如果您的方案没有改变(仍然显示我的 mac)在左上角的停止按钮旁边:
单击新创建的项目名称(停止按钮旁边)> 单击编辑方案> 构建(左侧)> 删除旧目标(会说它丢失)并替换为新命名项目徽标下的新命名项目
此外,我不必使用@Vaiden 解决方案的第 3 步。只需在终端中运行 rm -rf Pods/
就可以摆脱所有旧的 pod 文件
我也不必在@Vaiden 的解决方案中使用第 9 步,而是删除了 Link Binary Libraries 下名为 framework 的旧项目(新命名的框架已经存在)
所以更新的步骤如下:
第 1 步 - 重命名项目
如果您在项目中使用 cocoapods,请关闭工作区,然后打开 XCode 项目以执行这些步骤。在 Xcode 视图左侧的“项目导航器”中单击要重命名的项目。在右侧选择“文件检查器”,您的项目名称应该在“身份和类型”下,将其更改为新名称。点击下拉菜单中的“重命名”
第 2 步 - 重命名方案
在顶部栏(靠近“停止”按钮),有一个旧产品的方案,点击它,然后进入“管理方案”点击方案中的旧名称,它将变为可编辑,更改名称退出 XCode。在主文件夹中,将 OLD.xcworkspace 重命名为 NEW.xcworkspace。
第 3 步 - 用您的资产重命名文件夹
退出 Xcode 在正确命名的 master 文件夹中,有一个新命名的 xcodeproj 文件和错误命名的 OLD 文件夹。将OLD文件夹重命名为您的新名称重新打开项目,您将看到警告:“文件夹OLD不存在”,关闭警告在左侧的“项目导航器”中,单击顶层OLD文件夹名称在Utilities窗格中在“身份和类型”下,您将看到“名称”条目,将其从旧名称更改为新名称 正下方有一个“位置”条目。单击具有旧名称的文件夹并选择新重命名的文件夹
第 4 步 - 重命名 Build plist 数据
点击左侧“Project navigator”中的项目,在主面板中选择“Build Settings”在本节搜索“plist”在packaging下,会看到Info.plist,和Product bundle identifier Rename中的顶部条目Info.plist 对产品标识符做同样的事情
Step 5 处理 Podfile
在 XCode 中:从项目导航器中选择并编辑 Podfile。您应该看到一个带有 OLD 名称的目标子句。将其更改为新。退出 XCode。在终端中,cd 进入项目目录,然后: pod deintegrate 运行 pod install。打开 XCode。在项目导航器中单击您的项目名称。在主窗格中,切换到 Build Phases 选项卡。在 Link Binary With Libraries 下,查找旧框架并将其删除(应该说它丢失)新命名的框架应该已经存在,如果没有,请使用窗口底部的“+”按钮添加它如果你有一个objective-c桥接标头转到构建设置并将标头的位置从OLD/OLD-Bridging-Header.h更改为NEW/NEW-Bridging-Header.h清理并运行。
成功完成所有步骤后,您应该能够毫无错误地构建
rm-rf Pods/
,一种更简洁的方法是运行 pod deintegrate
,它会从 Xcode 项目中删除所有 CocoaPods 痕迹,但保持 Podfile 完好无损。
pod deintegrate
作为 rm -rf Pods
的更安全替代品。距离成为灾难只有一个空间。
更改项目名称;
在项目导航器中选择您的项目。在文件检查器的身份和类型部分,在名称字段中输入一个新名称。按回车键。将显示一个对话框,列出项目中可以重命名的项目。该对话框包括更改后项目将如何显示的预览。要有选择地重命名项目,请禁用您不想重命名的任何项目的复选框。要仅重命名您的应用程序,请选择该应用程序并取消选择所有其他项目。按“重命名”
除了 Luke 和 Vaiden 推荐的所有步骤之外,我还必须重命名 Storyboard 中的所有 customModule 属性以匹配新名称,并且必须区分大小写。
添加到卢克韦斯特接受的答案。如果您有任何权利:
关闭 Xcode 更改权利文件名 进入 Xcode,选择权利文件应该以红色突出显示,在文件检查器中选择文件夹图标并选择重命名的文件。进入构建设置,搜索“权利”并更新权利的文件夹名称和文件名。清理和重建
我认为还没有注意到的另一件事是,如果您在 AppDelegate 文件(或其他任何地方)中使用 CoreData 对象和惰性 persistentContainer
,您可能会收到错误消息,提示 NSManagedObjectContext 为 nil(或类似的东西)。更改任何 NSPersistentContainer 的名称以使用新的应用程序名称。那应该可以解决问题!如果不是,根据 this old SO post,解决方案是删除旧的 .xcdatamodeld
文件并创建一个新文件,重新添加所有实体。
我在网上找到了一些有用的简单步骤:
在Finder中更改项目的文件夹名称打开项目/在Xcode导航器中选择项目文件/显示文件检查器/在身份和类型下根据您的喜好更改名称/输入/等待几秒钟直到出现弹出窗口/单击重命名/再次等待几个秒 - 不要按 OK/在 Xcode 导航器中的项目文件下选择文件夹/显示文件检查器/在身份和类型下根据您的偏好更改名称/输入/等待几秒钟直到 Xcode 导航器中项目文件下的文件在 Xcode 中更改其名称项目状态栏单击项目名称(当您将鼠标悬停在行首时出现)/选择管理方案...直到“自动创建方案”窗口显示/2次单击方案列下的项目名称/输入/关闭“自动创建方案”窗口在 Xcode 导航器/inXcode 编辑器中选择项目文件〜界面构建器区域选择选项卡“构建设置”/在过滤器中输入项目的先前名称/单击输入/在项目先前名称出现的行中内root(s) - 只需将其更改为新名称 voala 就是这样
如果它的 react native 你可以做的是:你可以更改 package.json 中的 name 属性,运行 react-native upgrade,然后让 react 覆盖 android/ios 文件。但是,如果有未保存的代码,请不要覆盖您的索引文件。
git mv oldname newname
,这样 git 会识别出这是一个移动,而不是删除和添加所有文件。