in Facebook.Unity.Editor/iOS/PBXProjectData.cs [670:729]
bool RepairStructureImpl(Dictionary<string, bool> allGuids)
{
bool changed = false;
// PBXBuildFile
changed |= RemoveObjectsFromSection(buildFiles, allGuids,
o => (o.fileRef == null || !allGuids.ContainsKey(o.fileRef)));
// PBXFileReference / fileRefs not cleaned
// PBXGroup
changed |= RemoveObjectsFromSection(groups, allGuids, o => o.children == null);
foreach (var o in groups.GetObjects())
RemoveMissingGuidsFromGuidList(o.children, allGuids);
// PBXContainerItem / containerItems not cleaned
// PBXReferenceProxy / references not cleaned
// PBXSourcesBuildPhase
changed |= RemoveObjectsFromSection(sources, allGuids, o => o.files == null);
foreach (var o in sources.GetObjects())
RemoveMissingGuidsFromGuidList(o.files, allGuids);
// PBXFrameworksBuildPhase
changed |= RemoveObjectsFromSection(frameworks, allGuids, o => o.files == null);
foreach (var o in frameworks.GetObjects())
RemoveMissingGuidsFromGuidList(o.files, allGuids);
// PBXResourcesBuildPhase
changed |= RemoveObjectsFromSection(resources, allGuids, o => o.files == null);
foreach (var o in resources.GetObjects())
RemoveMissingGuidsFromGuidList(o.files, allGuids);
// PBXCopyFilesBuildPhase
changed |= RemoveObjectsFromSection(copyFiles, allGuids, o => o.files == null);
foreach (var o in copyFiles.GetObjects())
RemoveMissingGuidsFromGuidList(o.files, allGuids);
// PBXShellScriptsBuildPhase
changed |= RemoveObjectsFromSection(shellScripts, allGuids, o => o.files == null);
foreach (var o in shellScripts.GetObjects())
RemoveMissingGuidsFromGuidList(o.files, allGuids);
// PBXNativeTarget
changed |= RemoveObjectsFromSection(nativeTargets, allGuids, o => o.phases == null);
foreach (var o in nativeTargets.GetObjects())
RemoveMissingGuidsFromGuidList(o.phases, allGuids);
// PBXTargetDependency / targetDependencies not cleaned
// PBXVariantGroup
changed |= RemoveObjectsFromSection(variantGroups, allGuids, o => o.children == null);
foreach (var o in variantGroups.GetObjects())
RemoveMissingGuidsFromGuidList(o.children, allGuids);
// XCBuildConfiguration / buildConfigs not cleaned
// XCConfigurationList
changed |= RemoveObjectsFromSection(buildConfigLists, allGuids, o => o.buildConfigs == null);
foreach (var o in buildConfigLists.GetObjects())
RemoveMissingGuidsFromGuidList(o.buildConfigs, allGuids);
// PBXProject project not cleaned
return changed;
}