2

我正在尝试编写一个 Ruby 脚本,该脚本将从 Xcode 项目中删除某些文件。我可以根据绝对路径找到文件,并remove_from_project使用PBXFileReference. 但是,这会将源文件(例如.m.swift文件)留在它所属的任何目标的“编译源”构建阶段,但没有名称。

在此处输入图像描述

PBXFileReference我知道我还需要从目标中删除文件,但 a和目标 ( )之间似乎没有简单的链接PBXNativeTarget

据我所知,我需要遍历项目的每个目标,然后遍历该目标的filesor以寻找我已经拥有的目标。files_referencessource_build_phasePBXFileReference

这是正确的还是我错过了一些明显的链接,例如file_ref.target_memberships

4

2 回答 2

0
if (object.is_a?(Xcodeproj::Project::Object::PBXFileReference))
    if (!object.real_path.exist?)
        object.remove_from_project
    end
end

project.save(project_path)
于 2017-01-07T17:56:28.297 回答
0

不确定何时引入,但从xcodeproj1.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 }
于 2020-03-15T14:44:33.963 回答