如何完全重命名 Xcode 项目(即包含文件夹)?
How do I completely rename an Xcode project (i.e. inclusive of folders)?
我有一个名为 XXX
的项目。我想将此项目重命名为 YYY
.
请注意,XXX
是一个非常常见的术语(例如“数据”或简称“项目”),因此不可能进行简单的 RegEx 搜索和替换,因为存在损坏风险项目配置文件。
我当前的项目目录包含以下项目:
XXX
XXXTests
XXX.xcodeproj
我想将它们重命名为:
YYY
YYYTests
YYY.xcodeproj
...分别,必要的更改反映在我的项目文件中。
如何在无需手动创建和填充新项目的情况下完成此操作?
第 1 步 - 重命名项目
- 在 Xcode window.
左侧面板的“项目导航器”中单击要重命名的项目
- 在右侧面板中,select“文件检查器”和您的项目名称应位于“标识和类型”下。将其更改为您的新名称。
- 当对话框询问是否重命名时
项目的内容项,单击“重命名”。对任何关于未提交更改的警告说“是”。
第 2 步 - 重命名方案
- 在 window 的顶部中间,活动 device/simulator 的左侧,有一个旧名称下的产品方案;单击并按住它,然后选择“管理方案...”。
- 单击方案中的旧名称(类似于Xcode中的重命名文件),它将变为可编辑;更改名称并单击“关闭”。
第 3 步 - 用您的资产重命名文件夹
- 退出 Xcode。重命名包含所有项目文件的主文件夹。
- 在正确命名的 master 文件夹中,在您新命名的 .xcodeproj 文件旁边,可能有一个包含您的源文件的错误命名的 OLD 文件夹。将 OLD 文件夹重命名为您的新名称(如果您使用 Git,您可以 运行
git mv oldname newname
更改名称,以便 Git 识别这是一个移动,而不是 deleting/adding 个新文件)。
- 重新打开 Xcode 中的项目。如果您看到警告“旧文件夹不存在”,请关闭该警告。重命名文件夹中的源文件将具有红色名称,因为它们的路径已损坏。
- 在左侧面板的“项目导航器”中,单击代表您重命名的旧文件夹的顶级文件夹。
- 在右侧面板的“身份和类型”下,将“名称”字段从旧名称更改为新名称。
- 该字段的正下方是“位置”菜单。如果完整路径没有自行更正,请单击附近的文件夹图标并选择重命名的文件夹。如果每个源文件的链接仍然断开,您可能必须对每个源文件执行此修复。
第 4 步 - 重命名构建 plist 数据
- 在左侧的“项目导航器”中单击项目,然后在主面板中select“构建设置”。
- 在设置中搜索“plist”。
- 在打包部分,您将看到
Info.plist
和 Product Bundle Identifier
的字段。
- 如果在
Info.plist
中输入了文件名,请更新它(它可能已在步骤 1 中自动更新)。
- 对
Product Bundle Identifier
执行相同的操作,除非它使用 ${PRODUCT_NAME} 变量。在这种情况下,请在设置中搜索“产品”并更新 Product Name
。如果Product Name
是基于${TARGET_NAME},点击设置面板左侧TARGETS列表中的实际目标项进行编辑,所有相关设置会立即更新。
- 搜索“前缀”的设置并确保
Prefix Header
的路径也更新为新名称。
- 如果您使用 SwiftUI,请搜索“开发资产”并更新路径。如果路径包含 space (
). ,请用双引号 (""
) 括起来
第 5 步 - 重复第 3 步进行测试(如果有)
第 6 步 - 如果核心数据的名称与项目名称匹配(如果有),则对核心数据重复第 3 步
第 7 步 - 清理并重建项目
- 命令 + Shift + K 清理
- 命令 + B 构建
添加到luke-west's excellent answer:
使用 CocoaPods 时
第 2 步之后:
- 退出 Xcode.
- 在 master 文件夹中,将
OLD.xcworkspace
重命名为 NEW.xcworkspace
。
第 4 步后:
- In Xcode:从项目导航器中选择并编辑
Podfile
。您应该会看到带有旧名称的 target
子句。将其更改为新的。
- 退出 Xcode.
- 在项目文件夹中,删除
OLD.podspec
文件。
rm -rf Pods/
- 运行
pod install
.
- 打开Xcode。
- 在项目导航器中单击您的项目名称。
- 在主窗格中,切换到
Build Phases
选项卡。
- 在
Link Binary With Libraries
下,寻找libPods-OLD.a
并删除
它。
- 如果您有 objective-c 桥接 header,请转到构建设置并将 header 的位置从 OLD/OLD-Bridging-Header.h 更改为 NEW/NEW-Bridging-Header。 h
- 清洁 运行.
更改项目名称;
Select 您在项目导航器中的项目。
在文件检查器的身份和类型部分,在名称字段中输入新名称。
按Return。
将显示一个对话框,列出您的项目中可以重命名的项目。该对话框包含更改后项目显示方式的预览。
要有选择地重命名项目,请禁用您不想重命名的任何项目的复选框。要仅重命名您的应用,请选择该应用并取消选择所有其他项目。
按“重命名”
使用 shell 命令的更快解决方案(也适用于 CocoaPods):
在继续之前请cd
到一个非Git仓库⚠️
第 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
添加到您的存储库。
大功告成!
遵循@Luke-West+@Vaiden 的解决方案时的额外说明:
- 如果你的方案没有改变(仍然显示我的mac)在左上角的停止按钮旁边:
- 单击新创建的项目名称(在停止按钮旁边)> 单击编辑方案> 构建(左侧)> 删除旧目标(会说它丢失)并替换为新命名的项目徽标下的新命名项目
此外,我不必使用@Vaiden 解决方案的第 3 步。只是 运行ning rm -rf Pods/
在终端中删除了所有旧的 pod 文件
我也不必使用@Vaiden 解决方案中的第 9 步,相反,我只是删除了 Link 二进制库下名为 framework 的旧项目(新命名的框架已经存在)
所以更新后的步骤如下:
步骤 1 - 重命名项目
- 如果您在项目中使用 cocoapods,请关闭工作区,然后打开 XCode 项目以执行这些步骤。
- 在 Xcode 视图左侧的“项目导航器”中单击要重命名的项目。
- 在右侧select“文件检查器”和您的项目名称应该在“身份和类型”下,将其更改为新名称。
- 点击下拉菜单中的“重命名”
步骤 2 - 重命名方案
- 在顶部栏(“停止”按钮附近),有一个适用于您的旧产品的方案,单击它,然后转到“管理方案”
- 点击scheme中的OLD名字,会变成可编辑的,改名字
- 退出 XCode.
- 在 master 文件夹中,将 OLD.xcworkspace 重命名为 NEW.xcworkspace。
第 3 步 - 用您的资产重命名文件夹
- 退出Xcode
- 在正确命名的 master 文件夹中,有一个新命名的 xcodeproj 文件和错误命名的 OLD 文件夹。将旧文件夹重命名为您的新名称
- 重新打开项目,您将看到警告:“文件夹 OLD 不存在”,关闭警告
- 在左侧的“项目导航器”中,单击顶级 OLD 文件夹名称
- 在“身份和类型”下的“实用程序”窗格中,您将看到“名称”条目,将其从旧名称更改为新名称
- 正下方有一个“位置”条目。单击具有旧名称的文件夹并选择新重命名的文件夹
步骤 4 - 重命名构建 plist 数据
- 点击左侧“项目导航器”中的项目,在主面板中select“构建设置”
- 在此部分搜索“plist”
在包装下,您会看到 Info.plist 和产品包标识符
- 重命名 Info.plist
中的顶部条目
- 对产品标识符执行相同的操作
步骤 5 处理 Podfile
- 在 XCode 中:从项目导航器中选择并编辑 Podfile。您应该会看到一个带有旧名称的目标子句。将其更改为新的。
- 退出 XCode.
- 在终端中,cd 进入项目目录,然后:
pod deintegrate
- 运行 pod 安装。
- 打开XCode.
- 在项目导航器中单击您的项目名称。
- 在主窗格中,切换到“构建阶段”选项卡。
在 Link Binary With Libraries 下,查找旧框架并将其删除(应该说它丢失了)新命名的框架应该已经存在,如果没有使用 [=136 底部的“+”按钮=] 添加它
- 如果您有 objective-c 桥接 header,请转到构建设置并将 header 的位置从 OLD/OLD-Bridging-Header.h 更改为 NEW/NEW-Bridging-Header。 h
- 清洁 运行。
成功执行所有步骤后,您应该能够正确构建
有一个名为 Xcode Project Renamer
的 GitHub 项目:
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).
别忘了备份你的项目!
除了 Luke 和 Vaiden 推荐的所有步骤外,我还必须重命名故事板中的所有 customModule 属性以匹配新名称,并且必须区分大小写。
Xcode 11.0+.
现在真的很简单。只需转至 Project Navigator,Xcode window 的左侧面板。
按 Enter 激活重命名,就像更改文件夹名称一样。
只需在这里更改新名称,Xcode会要求您重命名其他内容。
.
在此处点击重命名,您就完成了。
如果您对根文件夹名称感到困惑,比如为什么它没有更改,那么它只是一个文件夹。它只是用一个新名称重命名它。
添加到 Luke West 接受的答案中。如果您有任何权利:
- 关闭Xcode
- 更改授权文件名
- 进入 Xcode,select 权利文件应以红色突出显示,在文件检查器中 select 文件夹图标和 select 您重命名的文件。
- 进入构建设置,搜索“权利”并更新权利的文件夹名称和文件名。
- 清理并重建
另一件我认为尚未注意到的事情是,如果您在 AppDelegate 文件(或其他任何地方)中使用 CoreData 对象和惰性 persistentContainer
,您可能会得到一个错误说 NSManagedObjectContext 是 nil(或类似的东西)。更改任何 NSPersistentContainer 的名称以使用新的应用程序名称。那应该可以解决问题!如果没有,根据 this old SO post 解决方案是删除旧的 .xcdatamodeld
文件并创建一个新文件,再次添加所有实体。
我发现在网上找到的几个简单步骤很有用:
- 在 Finder 中更改项目的文件夹名称
- 在 Xcode navigator/show 文件中打开 project/select 项目文件 inspector/under 根据您的 preference/Enter/wait 几秒钟,身份和类型更改名称直到 pop-up window appears/click rename/again 等待几秒钟 - 不要按 OK/
- select 项目文件下的文件夹 Xcode navigator/show 文件 inspector/under Identity and Type 根据您的 preference/Enter/wait 几秒钟更改名称Xcode nagivator 中的项目文件更改了名称
- 在 Xcode 项目状态栏中单击项目名称(将鼠标悬停在行首时会出现)/选择管理方案...直到“自动创建方案” window 显示 up/2x点击方案下的项目名称column/enter/close“自动创建方案”window
- select Xcode navigator/inXcode 编辑器中的项目文件 ~ 界面构建器区域选择选项卡“Build setting”/在过滤器中键入您之前的名称 project/click enter/in 项目的前一个名称出现在根目录中的行 - 只需将其更改为新名称
- voala 就是这样
我有一个名为 XXX
的项目。我想将此项目重命名为 YYY
.
请注意,XXX
是一个非常常见的术语(例如“数据”或简称“项目”),因此不可能进行简单的 RegEx 搜索和替换,因为存在损坏风险项目配置文件。
我当前的项目目录包含以下项目:
XXX
XXXTests
XXX.xcodeproj
我想将它们重命名为:
YYY
YYYTests
YYY.xcodeproj
...分别,必要的更改反映在我的项目文件中。
如何在无需手动创建和填充新项目的情况下完成此操作?
第 1 步 - 重命名项目
- 在 Xcode window. 左侧面板的“项目导航器”中单击要重命名的项目
- 在右侧面板中,select“文件检查器”和您的项目名称应位于“标识和类型”下。将其更改为您的新名称。
- 当对话框询问是否重命名时 项目的内容项,单击“重命名”。对任何关于未提交更改的警告说“是”。
第 2 步 - 重命名方案
- 在 window 的顶部中间,活动 device/simulator 的左侧,有一个旧名称下的产品方案;单击并按住它,然后选择“管理方案...”。
- 单击方案中的旧名称(类似于Xcode中的重命名文件),它将变为可编辑;更改名称并单击“关闭”。
第 3 步 - 用您的资产重命名文件夹
- 退出 Xcode。重命名包含所有项目文件的主文件夹。
- 在正确命名的 master 文件夹中,在您新命名的 .xcodeproj 文件旁边,可能有一个包含您的源文件的错误命名的 OLD 文件夹。将 OLD 文件夹重命名为您的新名称(如果您使用 Git,您可以 运行
git mv oldname newname
更改名称,以便 Git 识别这是一个移动,而不是 deleting/adding 个新文件)。 - 重新打开 Xcode 中的项目。如果您看到警告“旧文件夹不存在”,请关闭该警告。重命名文件夹中的源文件将具有红色名称,因为它们的路径已损坏。
- 在左侧面板的“项目导航器”中,单击代表您重命名的旧文件夹的顶级文件夹。
- 在右侧面板的“身份和类型”下,将“名称”字段从旧名称更改为新名称。
- 该字段的正下方是“位置”菜单。如果完整路径没有自行更正,请单击附近的文件夹图标并选择重命名的文件夹。如果每个源文件的链接仍然断开,您可能必须对每个源文件执行此修复。
第 4 步 - 重命名构建 plist 数据
- 在左侧的“项目导航器”中单击项目,然后在主面板中select“构建设置”。
- 在设置中搜索“plist”。
- 在打包部分,您将看到
Info.plist
和Product Bundle Identifier
的字段。 - 如果在
Info.plist
中输入了文件名,请更新它(它可能已在步骤 1 中自动更新)。 - 对
Product Bundle Identifier
执行相同的操作,除非它使用 ${PRODUCT_NAME} 变量。在这种情况下,请在设置中搜索“产品”并更新Product Name
。如果Product Name
是基于${TARGET_NAME},点击设置面板左侧TARGETS列表中的实际目标项进行编辑,所有相关设置会立即更新。 - 搜索“前缀”的设置并确保
Prefix Header
的路径也更新为新名称。 - 如果您使用 SwiftUI,请搜索“开发资产”并更新路径。如果路径包含 space (
""
) 括起来
第 5 步 - 重复第 3 步进行测试(如果有)
第 6 步 - 如果核心数据的名称与项目名称匹配(如果有),则对核心数据重复第 3 步
第 7 步 - 清理并重建项目
- 命令 + Shift + K 清理
- 命令 + B 构建
添加到luke-west's excellent answer:
使用 CocoaPods 时
第 2 步之后:
- 退出 Xcode.
- 在 master 文件夹中,将
OLD.xcworkspace
重命名为NEW.xcworkspace
。
第 4 步后:
- In Xcode:从项目导航器中选择并编辑
Podfile
。您应该会看到带有旧名称的target
子句。将其更改为新的。 - 退出 Xcode.
- 在项目文件夹中,删除
OLD.podspec
文件。 rm -rf Pods/
- 运行
pod install
. - 打开Xcode。
- 在项目导航器中单击您的项目名称。
- 在主窗格中,切换到
Build Phases
选项卡。 - 在
Link Binary With Libraries
下,寻找libPods-OLD.a
并删除 它。 - 如果您有 objective-c 桥接 header,请转到构建设置并将 header 的位置从 OLD/OLD-Bridging-Header.h 更改为 NEW/NEW-Bridging-Header。 h
- 清洁 运行.
更改项目名称;
Select 您在项目导航器中的项目。
在文件检查器的身份和类型部分,在名称字段中输入新名称。
按Return。
将显示一个对话框,列出您的项目中可以重命名的项目。该对话框包含更改后项目显示方式的预览。
要有选择地重命名项目,请禁用您不想重命名的任何项目的复选框。要仅重命名您的应用,请选择该应用并取消选择所有其他项目。
按“重命名”
使用 shell 命令的更快解决方案(也适用于 CocoaPods):
在继续之前请cd
到一个非Git仓库⚠️
第 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
添加到您的存储库。大功告成!
遵循@Luke-West+@Vaiden 的解决方案时的额外说明:
- 如果你的方案没有改变(仍然显示我的mac)在左上角的停止按钮旁边:
- 单击新创建的项目名称(在停止按钮旁边)> 单击编辑方案> 构建(左侧)> 删除旧目标(会说它丢失)并替换为新命名的项目徽标下的新命名项目
此外,我不必使用@Vaiden 解决方案的第 3 步。只是 运行ning rm -rf Pods/
在终端中删除了所有旧的 pod 文件
我也不必使用@Vaiden 解决方案中的第 9 步,相反,我只是删除了 Link 二进制库下名为 framework 的旧项目(新命名的框架已经存在)
所以更新后的步骤如下:
步骤 1 - 重命名项目
- 如果您在项目中使用 cocoapods,请关闭工作区,然后打开 XCode 项目以执行这些步骤。
- 在 Xcode 视图左侧的“项目导航器”中单击要重命名的项目。
- 在右侧select“文件检查器”和您的项目名称应该在“身份和类型”下,将其更改为新名称。
- 点击下拉菜单中的“重命名”
步骤 2 - 重命名方案
- 在顶部栏(“停止”按钮附近),有一个适用于您的旧产品的方案,单击它,然后转到“管理方案”
- 点击scheme中的OLD名字,会变成可编辑的,改名字
- 退出 XCode.
- 在 master 文件夹中,将 OLD.xcworkspace 重命名为 NEW.xcworkspace。
第 3 步 - 用您的资产重命名文件夹
- 退出Xcode
- 在正确命名的 master 文件夹中,有一个新命名的 xcodeproj 文件和错误命名的 OLD 文件夹。将旧文件夹重命名为您的新名称
- 重新打开项目,您将看到警告:“文件夹 OLD 不存在”,关闭警告
- 在左侧的“项目导航器”中,单击顶级 OLD 文件夹名称
- 在“身份和类型”下的“实用程序”窗格中,您将看到“名称”条目,将其从旧名称更改为新名称
- 正下方有一个“位置”条目。单击具有旧名称的文件夹并选择新重命名的文件夹
步骤 4 - 重命名构建 plist 数据
- 点击左侧“项目导航器”中的项目,在主面板中select“构建设置”
- 在此部分搜索“plist” 在包装下,您会看到 Info.plist 和产品包标识符
- 重命名 Info.plist 中的顶部条目
- 对产品标识符执行相同的操作
步骤 5 处理 Podfile
- 在 XCode 中:从项目导航器中选择并编辑 Podfile。您应该会看到一个带有旧名称的目标子句。将其更改为新的。
- 退出 XCode.
- 在终端中,cd 进入项目目录,然后:
pod deintegrate
- 运行 pod 安装。
- 打开XCode.
- 在项目导航器中单击您的项目名称。
- 在主窗格中,切换到“构建阶段”选项卡。 在 Link Binary With Libraries 下,查找旧框架并将其删除(应该说它丢失了)新命名的框架应该已经存在,如果没有使用 [=136 底部的“+”按钮=] 添加它
- 如果您有 objective-c 桥接 header,请转到构建设置并将 header 的位置从 OLD/OLD-Bridging-Header.h 更改为 NEW/NEW-Bridging-Header。 h
- 清洁 运行。
成功执行所有步骤后,您应该能够正确构建
有一个名为 Xcode Project Renamer
的 GitHub 项目:
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).
别忘了备份你的项目!
除了 Luke 和 Vaiden 推荐的所有步骤外,我还必须重命名故事板中的所有 customModule 属性以匹配新名称,并且必须区分大小写。
Xcode 11.0+.
现在真的很简单。只需转至 Project Navigator,Xcode window 的左侧面板。 按 Enter 激活重命名,就像更改文件夹名称一样。
只需在这里更改新名称,Xcode会要求您重命名其他内容。
在此处点击重命名,您就完成了。
如果您对根文件夹名称感到困惑,比如为什么它没有更改,那么它只是一个文件夹。它只是用一个新名称重命名它。
添加到 Luke West 接受的答案中。如果您有任何权利:
- 关闭Xcode
- 更改授权文件名
- 进入 Xcode,select 权利文件应以红色突出显示,在文件检查器中 select 文件夹图标和 select 您重命名的文件。
- 进入构建设置,搜索“权利”并更新权利的文件夹名称和文件名。
- 清理并重建
另一件我认为尚未注意到的事情是,如果您在 AppDelegate 文件(或其他任何地方)中使用 CoreData 对象和惰性 persistentContainer
,您可能会得到一个错误说 NSManagedObjectContext 是 nil(或类似的东西)。更改任何 NSPersistentContainer 的名称以使用新的应用程序名称。那应该可以解决问题!如果没有,根据 this old SO post 解决方案是删除旧的 .xcdatamodeld
文件并创建一个新文件,再次添加所有实体。
我发现在网上找到的几个简单步骤很有用:
- 在 Finder 中更改项目的文件夹名称
- 在 Xcode navigator/show 文件中打开 project/select 项目文件 inspector/under 根据您的 preference/Enter/wait 几秒钟,身份和类型更改名称直到 pop-up window appears/click rename/again 等待几秒钟 - 不要按 OK/
- select 项目文件下的文件夹 Xcode navigator/show 文件 inspector/under Identity and Type 根据您的 preference/Enter/wait 几秒钟更改名称Xcode nagivator 中的项目文件更改了名称
- 在 Xcode 项目状态栏中单击项目名称(将鼠标悬停在行首时会出现)/选择管理方案...直到“自动创建方案” window 显示 up/2x点击方案下的项目名称column/enter/close“自动创建方案”window
- select Xcode navigator/inXcode 编辑器中的项目文件 ~ 界面构建器区域选择选项卡“Build setting”/在过滤器中键入您之前的名称 project/click enter/in 项目的前一个名称出现在根目录中的行 - 只需将其更改为新名称
- voala 就是这样