如何在Xcode中找到不属于目标成员的所有文件

Rob*_*ert 11 iphone xcode objective-c ios

我对多个目标最常见的问题之一是忘记向所有目标添加文件.它很容易导入文件,而不是勾选所有框...

很多目标

在构建阶段,有一个"编译源"视图,它是为每个目标编译的文件列表.然而,接缝不是简单的方法来比较目标,看看哪些文件在一个文件而不是另一个文件.

有没有办法找到不属于特定目标的文件?也许一个脚本?

bam*_*s53 7

我不知道编写脚本的方法,但是对于文件,您可以查看所有目标的列表,并选中相关联的目标,您可以从该列表中选中或取消选中目标。

打开“实用工具”窗格并选择“文件检查器”。然后选择一个文件,相关的目标将在文件检查器的目标成员区域中。

您甚至可以选择多个文件,并且与某些但并非所有选定文件相关联的目标将标有“-”。如果您选中一个目标,则所有选定的文件都将添加到该目标中。


小智 5

假设MyProject.xcodeproj在工作目录中,并且所有源代码都在工作目录中或之下,则可以使用hack *这样的方式查找不属于任何目标的.m文件:

find . -name "*.m" -exec basename '{}' \; | xargs -I '{}' sh -c 'grep "{} in Sources" MyProject.xcodeproj/project.pbxproj > /dev/null; echo "$?\c"; echo " {}"' | grep "^1"
Run Code Online (Sandbox Code Playgroud)

从项目中删除文件后,您可以使用以下类似脚本从git repo中删除它们-以及从项目中不再引用的其他objc源文件:

find . -name "*.[hm]" -exec basename '{}' \; | xargs -I '{}' sh -c 'grep {} MyProject.xcodeproj/project.pbxproj > /dev/null; echo "$?\c"; echo " {}"' | grep "^1" | cut -c3- | xargs -I '%' find . -name '%' -exec git rm '{}' \;
Run Code Online (Sandbox Code Playgroud)

*从某种意义上讲,这取决于Xcode文件格式的实现细节。