ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

XXX

XXX测试

XXX.xcodeproj

我想将它们重命名为:

年年

YYY测试

YYY.xcodeproj

...分别,必要的更改反映在我的项目文件中。

如何在无需手动创建和填充新项目的情况下完成此操作?

Rename xcode project 的可能重复项
还在这里提问和回答stackoverflow.com/questions/17744319/…,对答案有 200 票赞成
也在这里提问和回答stackoverflow.com/questions/8262613/…,获得 189 票赞成,这两个帖子在 Xcode 7 中仍然相关
如果您只想重命名应用图标名称,请查看此答案 stackoverflow.com/questions/238980/…

n
nishanthshanmugham

第 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 构建


您可以更改项目的名称,但文件夹名称仍然相同。你知道如何改变那些
谢谢!对于 Xcode 8,应手动重命名权利文件。
在执行步骤 3 第 2 部分(重命名文件夹)时,如果您使用 git,我建议使用 git mv oldname newname,这样 git 会识别出这是一个移动,而不是删除和添加所有文件。
完美,在 Xcode 8.2 中完美运行,只需在编辑方案时指出一件事,如果单击方案名称一次不能使其可编辑,然后选择方案并按回车键,这将使方案名称可编辑。
不要忘记 find & replace 您的旧项目名称的其他实例。
P
Peter Mortensen

要添加到 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 清理并运行。


使用 Xcode 8.3.2 我不得不使用 cocoapods-deintegrate 并重新安装所有 pod 以使用新名称运行项目。
@SteffenK 该方法和 rm -rf Pods/ 之间有区别吗?考虑到您已完成所有其他步骤?
@Vaiden 非常感谢您在使用 CocoaPods 时提供的额外清晰度!该过程确实创建了第二个引用,这很奇怪,但是在删除它之后一切都运行良好!再次感谢! :)
有人可以告诉我在哪里可以找到此答案中提到的 OLD.podspec 文件吗?在我的项目中,我得到了一些文件,例如“Podfile”/“Podfile.lock”/“Pods.xcodeproj”,并且有一个名为“Local Podspecs”的空文件夹,但我找不到 .podspec 文件
当您分发/计划将项目分发为 Cocoapod 时,您只需要一个 podspec 文件。如果你这样做了,你可能会知道,所以我想你没有 podspec,@codeDude
P
Peter Mortensen

使用 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 添加到您的存储库。

你完成了!


谢谢你,我发现它很有用。在复制和粘贴这样的命令时,如果可以最小化工作,我更喜欢它,因此“YourNewAmazingProjectName”的示例名称是多余的,只需使用“example”,因为它可以延长我的删除键的寿命。
@LpLrich 谢谢你的建议,我刚刚更新了我的答案。
主文件夹已重命名,但我没有看到任何其他目录或文件已重命名,有什么建议吗?
@EthanParker 您需要运行 find . -name 'oldName*' -print0 | xargs -0 rename --subst-all 'oldName' 'ExampleName' 两次,主文件夹中的文件和目录将在第二次迭代时重命名。
我在我的项目中使用了 coreData,我不得不运行这个命令不是两次而是三次。
P
Peter Mortensen

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


当我尝试重命名时,它显示“无法重命名”
@bikram 在重构项目名称时可能会遇到一些障碍。不检查手头的实际项目就无法弄清楚。通常它每次都能正常工作。
@KiranJasvanee 重命名根目录时构建失败。但是,当我将其保留为旧名称时,它就成功了。其他一切都很好。
您可能还必须将您的目标指向新的 info.plist 位置。
这个“简单”的解决方案对我来说非常失败。它将文件移动到错误的位置,删除了其他文件,未能更改许多设置。我不得不亲自进去解决所有问题。不建议。
P
Peter Mortensen

有一个名为 Xcode Project Renamer 的 GitHub 项目:

它应该从 Xcode 项目目录的根目录内部执行,并使用两个字符串参数调用:$OLD_PROJECT_NAME 和 $NEW_PROJECT_NAME 脚本递归遍历所有文件和目录,包括 Xcode 项目或工作区文件,并将所有出现的 $OLD_PROJECT_NAME 字符串替换为 $NEW_PROJECT_NAME字符串(在每个文件的名称和内容中)。

不要忘记备份您的项目!

Xcode Project Renamer


这对初学者没有用,它所做的只是破坏了我的主项目文件,也没有使用以下命令删除脚本,我以浪费时间结束。 $ rm 重命名.swift
请不要走捷径。
@peter-walter 在此类操作之前,您应该始终备份您的数据。
这就像一个魅力。唯一缺少的是您需要在运行脚本后运行 pod install
哇这很容易!
i
itsmcgh

遵循@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清理并运行。

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


对于步骤 5.3 而不是 rm-rf Pods/,一种更简洁的方法是运行 pod deintegrate,它会从 Xcode 项目中删除所有 CocoaPods 痕迹,但保持 Podfile 完好无损。
这规则。它为我将 Ionic 应用程序与现有的 iOS 应用程序合并提供了基础。
您确实应该推荐 pod deintegrate 作为 rm -rf Pods 的更安全替代品。距离成为灾难只有一个空间。
P
Peter Mortensen

更改项目名称;

在项目导航器中选择您的项目。在文件检查器的身份和类型部分,在名称字段中输入一个新名称。按回车键。将显示一个对话框,列出项目中可以重命名的项目。该对话框包括更改后项目将如何显示的预览。要有选择地重命名项目,请禁用您不想重命名的任何项目的复选框。要仅重命名您的应用程序,请选择该应用程序并取消选择所有其他项目。按“重命名”


C
CristianMoisei

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


唯一提到过这个的人!
注意,您可以在 INTERFACE BUILDER 中执行此操作,只需在该字段上“重新单击”即可。然后它将正确地“重新默认”为您的新项目名称。
A
Alexander

添加到卢克韦斯特接受的答案。如果您有任何权利:

关闭 Xcode 更改权利文件名 进入 Xcode,选择权利文件应该以红色突出显示,在文件检查器中选择文件夹图标并选择重命名的文件。进入构建设置,搜索“权利”并更新权利的文件夹名称和文件名。清理和重建


在按照您给出的步骤进行操作后,我遇到了以下问题,验证目标“Smartify”的 CODE_SIGN_ENTITLEMENTS 构建设置的值是否正确,并且该文件存在于磁盘上。
仔细检查构建设置是否指向权利文件的正确位置。清理和重建
h
helpinghand

我认为还没有注意到的另一件事是,如果您在 AppDelegate 文件(或其他任何地方)中使用 CoreData 对象和惰性 persistentContainer,您可能会收到错误消息,提示 NSManagedObjectContext 为 nil(或类似的东西)。更改任何 NSPersistentContainer 的名称以使用新的应用程序名称。那应该可以解决问题!如果不是,根据 this old SO post,解决方案是删除旧的 .xcdatamodeld 文件并创建一个新文件,重新添加所有实体。


m
mairo

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

在Finder中更改项目的文件夹名称打开项目/在Xcode导航器中选择项目文件/显示文件检查器/在身份和类型下根据您的喜好更改名称/输入/等待几秒钟直到出现弹出窗口/单击重命名/再次等待几个秒 - 不要按 OK/在 Xcode 导航器中的项目文件下选择文件夹/显示文件检查器/在身份和类型下根据您的偏好更改名称/输入/等待几秒钟直到 Xcode 导航器中项目文件下的文件在 Xcode 中更改其名称项目状态栏单击项目名称(当您将鼠标悬停在行首时出现)/选择管理方案...直到“自动创建方案”窗口显示/2次单击方案列下的项目名称/输入/关闭“自动创建方案”窗口在 Xcode 导航器/inXcode 编辑器中选择项目文件〜界面构建器区域选择选项卡“构建设置”/在过滤器中输入项目的先前名称/单击输入/在项目先前名称出现的行中内root(s) - 只需将其更改为新名称 voala 就是这样


M
Mizanur Rahman

如果它的 react native 你可以做的是:你可以更改 package.json 中的 name 属性,运行 react-native upgrade,然后让 react 覆盖 android/ios 文件。但是,如果有未保存的代码,请不要覆盖您的索引文件。