一个简单的 Ruby 脚本,用于检查 Xcode *.pbxproj 文件结构与项目物理目录结构是否匹配。它可以添加为构建阶段,以便在您的项目结构失去对齐时向您发出警告。
一些(如果不是所有)的 Xcode 开发者历史:您在 Subfolder 组中看到了一些 TestClass 文件
但是在文件检查器中看到了一些奇怪的东西!TestClass.[h|m] 文件实际上不在 Subfolder 组中 :o
使用 Finder 揭露了可怕的真相 - *.pbxproj 文件和文件系统不对齐!
pbxproj_structure_check 可以通过 CocoaPods 集成到您的项目中。将以下条目添加到您的 Podfile 中
pod 'pbxproj_structure_check', '~> 1.0.1'
然后向您的应用目标添加一个 'Run Script' 构建阶段(有关详细信息,请参阅 将构建阶段添加到 Xcode)。将以下内容作为构建阶段脚本
ruby Pods/pbxproj_structure_check/pbxproj_structure_check.rb ${PROJECT_NAME}.xcodeproj/project.pbxproj
如果您在构建期间从脚本收到有关某些对象的错误,您可以通过在脚本调用末尾添加用':'连接的对象 ID 来忽略这些错误。
例如:当您收到有关对象 D497DE90182D2EFC00924692 和 A497DE90182D2EFC00924692 的错误时,您想忽略这些错误,请使用以下调用
ruby Pods/pbxproj_structure_check/pbxproj_structure_check.rb ${PROJECT_NAME}.xcodeproj/project.pbxproj D497DE90182D2EFC00924692:A497DE90182D2EFC00924692
$ ruby pbxproj_structure_check.rb
ruby pbxproj_structure_check.rb pbx_path [ignored_id:...]
$ ruby pbxproj_structure_check.rb /allignedProjectPath/allignedProject.xcodeproj/project.pbxproj
$ echo $?
0
$ ruby pbxproj_structure_check.rb /otherProject/otherProject.xcodeproj/project.pbxproj
Object 'D497DE90182D2EFC00924692' named 'Supporting Files' at '/otherProject' has no physical path
$ echo $?
1
# I don't care about this object, let's ignore it :P
$ ruby pbxproj_structure_check.rb /otherProject/otherProject.xcodeproj/project.pbxproj D497DE90182D2EFC00924692
$ echo $?
0
让我们将 pbxproj_structure_check.rb
与您的项目集成,使其成为您项目对齐的捍卫者:)
首先 - 将 pbxproj_structure_check.rb
复制到您的项目根目录。
在项目导航器中选择您的项目,选择您的应用目标并选择 构建阶段 选项卡。
从菜单栏选择 编辑,添加构建阶段 和 添加运行脚本构建阶段。
运行脚本 已添加,将其移动到上方,使其位于 目标依赖关系 下方。将 pbxproj_structure_check.rb
调用作为脚本
ruby pbxproj_structure_check.rb ${PROJECT_NAME}.xcodeproj/project.pbxproj
然后您可以在上述调用末尾指定要忽略的 ID(例如 'Frameworks'、'Products' 等)
如果脚本在构建期间检测到任何错位对象,则报告错误。
我很感激任何建议!