rubyは、プロジェクトで参照されていないファイルを自動的に削除します.
2249 ワード
まず実現の構想を述べる. xcodeprojライブラリを介して、対応する工事の下でtargetに対応するすべての参照ファイル を取得する. findライブラリを介して、このプロジェクトディレクトリの下にあるすべてのファイル ファイルが.mファイルは、参照ファイルにない、対応するものを削除する.m与.hファイル 現在のディレクトリが削除後に空のディレクトリである場合、削除ディレクトリ .
記入する内容エンジニアリングファイルアドレス:project_path プロジェクト名:project_name target名前:target_name ファイルを自動的に削除するかどうか:auto_delete_file 空のディレクトリを自動的に削除するかどうか:auto_delete_empty_dir
以下は実装コードです(検出された問題の一部はコードの後にリストされます).
問題:現在の場合.h与.mが異なるディレクトリにある場合やコマンドが異なる場合.hファイルは削除できません. コードファイルとエンジニアリングファイルが異なるディレクトリの下にあると、削除が不完全になり、 異なるtargetで参照されているファイルに違いがある場合は、慎重に使用してください.そうしないと、他のtargetが使用できなくなります.すべてのtargetの参照ファイルをクエリーし、同じ配列に書き込み、クエリーを行うことができます.
TIPS xcodeprojオンラインドキュメント xcodeprojインストールと単純実用
記入する内容
以下は実装コードです(検出された問題の一部はコードの後にリストされます).
require 'xcodeproj'
require 'find'
project_path = "~/project"
project_name = "project.xcodeproj"
target_name = "project"
auto_delete_file = true
auto_delete_empty_dir = true
proj = Xcodeproj::Project.open("#{project_path}/#{project_name}")
src_target = proj.targets.find { |item| item.to_s == target_name }
# .m
target_list = []
for file in src_target.source_build_phase.files
target_list << file.file_ref.real_path.to_s
end
Find.find(project_path) do |f|
f_type = f.split('.')[-1]
# .m
if f_type == 'm'
if !target_list.include?(f) && File.basename(f)[0] != '.'
# .h
hf = f.chop + 'h'
delete_file(f)
delete_file(hf)
end
end
#
if auto_delete_empty_dir
#
f_dir = File::dirname(f)
if File::directory?(f)
f_dir = f
end
#
if Dir::entries(f_dir).count==2
p f_dir
Dir::delete(f_dir)
end
end
end
def delete_file(file)
p file
#
if auto_delete_file && File::exist?(file)
File::delete(file)
end
end
p Time.new.strftime("%Y-%m-%d %H:%M:%S")
p "#{'-'*15}success#{'-'*15}"
問題:
Find.find(project_path)
を手動で変更することができます.TIPS