rubyは、プロジェクトで参照されていないファイルを自動的に削除します.

2249 ワード

まず実現の構想を述べる.
  • xcodeprojライブラリを介して、対応する工事の下でtargetに対応するすべての参照ファイル
  • を取得する.
  • findライブラリを介して、このプロジェクトディレクトリの下にあるすべてのファイル
  • ファイルが.mファイルは、参照ファイルにない、対応するものを削除する.m与.hファイル
  • 現在のディレクトリが削除後に空のディレクトリである場合、削除ディレクトリ
  • .
    記入する内容
  • エンジニアリングファイルアドレス:project_path
  • プロジェクト名:project_name
  • target名前:target_name
  • ファイルを自動的に削除するかどうか:auto_delete_file
  • 空のディレクトリを自動的に削除するかどうか:auto_delete_empty_dir

  • 以下は実装コードです(検出された問題の一部はコードの後にリストされます).
    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}"
    
    

    問題:
  • 現在の場合.h与.mが異なるディレクトリにある場合やコマンドが異なる場合.hファイルは削除できません.
  • コードファイルとエンジニアリングファイルが異なるディレクトリの下にあると、削除が不完全になり、Find.find(project_path)を手動で変更することができます.
  • 異なるtargetで参照されているファイルに違いがある場合は、慎重に使用してください.そうしないと、他のtargetが使用できなくなります.すべてのtargetの参照ファイルをクエリーし、同じ配列に書き込み、クエリーを行うことができます.

  • TIPS
  • xcodeprojオンラインドキュメント
  • xcodeprojインストールと単純実用