Как получить цель (и) для PBXFileReference в Xcodeproj
Я пытаюсь написать скрипт Ruby, который удалит определенные файлы из проекта Xcode. Я могу найти файлы по абсолютному пути и удалить их из проекта, используя remove_from_project
метод PBXFileReference
, Однако это оставляет исходные файлы (например, .m
или же .swift
файлы) в фазе сборки "Compile Sources" для любой цели, членом которой он является, но без имени.
Я знаю, что мне нужно также удалить файл из цели (ей), но между PBXFileReference
и цель (PBXNativeTarget
).
Из того, что я могу разглядеть, мне нужно перебрать все цели проекта, а затем перебрать files
или же files_references
этой цели source_build_phase
ищет PBXFileReference
У меня уже есть.
Это правильно или я пропускаю какую-то очевидную ссылку, например, file_ref.target_memberships
?
1 ответ
if (object.is_a?(Xcodeproj::Project::Object::PBXFileReference))
if (!object.real_path.exist?)
object.remove_from_project
end
end
project.save(project_path)
Не уверен, когда это было введено, но по состоянию на xcodeproj
версии 1.15.0, вы можете получить файлы сборки, связанные со ссылкой на файл, с помощью:
file_ref.build_files
Из документации:
Метод: Xcodeproj::Project::Object::PBXFileReference#build_files
#build_files ⇒ Array<PBXBuildFile>
Возвращает файлы сборки, связанные с текущей ссылкой на файл.
Возврат:
(Array<PBXBuildFile>)
- файлы сборки, связанные с текущей ссылкой на файл.
Похоже, это должно помочь:
file_ref.build_files.each { |file| file.remove_from_project }