运行Xcode项目,发生如下报错内容。

Xcode报错信息:
Multiple commands produce '/Users/fangjunyu/Library/Developer/Xcode/DerivedData/piglet-bpwurhirpzhedoekfnulldhckdxj/Build/Intermediates.noindex/piglet.build/Debug-iphoneos/piglet.build/Objects-normal/arm64/AppStorageManager.stringsdata'
该问题表示,Xcode 在编译过程中,有两个或以上的编译步骤试图同时生成同一个文件(在这里是 AppStorageManager.stringsdata),导致冲突。
简单说,就是“同一个文件被重复生成”了。
解决方案
检查左侧项目列表中,是否存在 AppStorageManager 相同的文件。
经检查发现,在Extensions中设置了一个AppStorageManager的同名文件,将该文件修改为AppStorage,避免同名的问题。

该问题在于存在同名文件,导致项目识别为重复项并触发该报错。
如果没有同名问题,可能和缓存有关,需要清理缓存:
rm -rf ~/Library/Developer/Xcode/DerivedData
然后重新编译。
本地化文件
这个问题还常见于本地化文件中,例如通过应用语言显示对应的Markdown文件,文件架构:
Markdown
├── ar
├── 000_Introduction.md
├── bg
├── 000_Introduction.md
└── bn
├── 000_Introduction.md
当把Markdown文件拖入Xcode项目后,因为存在000_Introduction文件,导致Xcode报错:
Multiple commands produce '/Users/fangjunyu/Library/Developer/Xcode/DerivedData/SwiftSlim-gpjjtcneaelgqvhjlyctvpeabryp/Build/Products/Debug-iphonesimulator/SwiftSlim.app/000_Introduction.md'
这个问题的解决方案,有两个:
1、修改文件名称:把同名的“000_Introduction.md”文件添加对应前缀。
Markdown
├── ar
├── ar_000_Introduction.md
├── bg
├── bg_000_Introduction.md
└── bn
├── bn_000_Introduction.md
文件不再同名,问题得到解决。
2、将文件设置为本地化文件。
在Xcode中打开文件,点击右侧边栏,找到“Localization”-“Localize…”。

弹出一个提示框,表示你是否要本地化此文件。这里的本地化实际上是移动到对应语言的lproj文件夹中。

例如,这里是Arabic语言的本地化,选择“Arabic”后,文件会转换为本地化文件。
并且在原先的位置上,新增一个ar.lproj文件夹。

当再次运行时,Bundle查找文件时,不会再弹出重名的错误。
原因在于,应用在读取时,会根据App语言进行匹配,系统会根据用户语言选择对应的 .lproj 文件夹的文件。
