Как получить цель (и) для 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 }
Другие вопросы по тегам