我在使用多个目标时经常遇到的一个问题是忘记将某个文件添加到所有目标中。很容易导入一个文件但是没有勾选所有的选项...
在构建阶段中,有一个“编译源”视图,它是为每个目标编译的文件列表。但是似乎没有简单的方法来比较目标,以查看哪些文件在其中一个目标中而不在另一个目标中。
是否有一种方法可以找到不属于特定目标成员的文件?也许是一种脚本?
我在使用多个目标时经常遇到的一个问题是忘记将某个文件添加到所有目标中。很容易导入一个文件但是没有勾选所有的选项...
在构建阶段中,有一个“编译源”视图,它是为每个目标编译的文件列表。但是似乎没有简单的方法来比较目标,以查看哪些文件在其中一个目标中而不在另一个目标中。
是否有一种方法可以找到不属于特定目标成员的文件?也许是一种脚本?
假设您的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"
如果你从项目中删除了文件,你可以使用类似的脚本将它们 -- 以及其他不再被项目引用的Objective-C源文件 -- 从git仓库中删除:
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 '{}' \;
* 在技术上的意义上,这是一种"hack"行为,因为它依赖于Xcode文件格式的实现细节。
我不知道(完全)快速简单的方法,但是如果你想要一个脚本,我有一个可以做到这一点的库,在这里:https://github.com/jasperblues/XcodeEditor
Xcode会组装一些环境变量,其中一个变量包含了你想要查找的目录:
对于 x86_64 目标,LINK_FILE_LIST_normal_x86_64
指向 LinkFileList
,但你可以从基础目录中获取你可能想要的 FileLists 的实际目录。