Xcodeproj相關以及刪除 多層文件夾、庫、資源邏輯

1、介紹
Xcodeproj是CocoaPods用ruby開發的一個插件庫,能夠用來新建、修改Xcode工程。git

 

2、wiki和資源
Xcodeproj wiki   :https://www.rubydoc.info/github/CocoaPods/Xcodeproj/index
Xcodeproj github:  https://github.com/CocoaPods/Xcodeprojgithub

 

3、刪除 多層文件夾、庫、資源邏輯
Xcodeproj庫提供了不少方法能夠看wiki,不過有個雞肋的地方就是「刪除 多層文件夾、庫、資源」,由於Xcodeproj沒有提供能夠直接刪除多層文件夾、庫、資源的方法,必需要從最深的一層開始,向外刪除。
json


如圖示例,須要刪除最底層的,而後一層一層向外刪除。數組

如下爲代碼邏輯:xcode

require 'xcodeproj'
require 'json'
require 'find'

#package_path  該地址爲物理路徑
def  deletePackage(package_path)
    arr=[];
    #經過find找到該物理路徑下全部的文件結構地址
    Find.find(package_path) do |path|
        #去除包含.framework、.bundle的路徑,以及文件類型是.m .mm .h .txt .a .DS_Store等的路徑
        if !path.index(".framework") && !path.index(".bundle") && !path.end_with?(".m", ".mm", ".h", ".txt", ".a",".DS_Store")
            #將物理路徑轉成 項目的group路徑,刪除path 前面不相干的路徑,再拼接項目名稱 ,35長度要視實際狀況
            path="pickle"+path[35,path.length-35]
            #按照 group路徑最長的加到arr數組最後面邏輯處理。
            if arr.size == 0
                arr.push(path)
            else
                for n in arr do  
                    if path.length > n.length
                        arr.push(path)
                        break
                    end
                end 
            end
        end
    end
    #對數組進行反轉,最深的路徑在最前面
    arr = arr.reverse
    #將arr裏面全部的路徑進行刪除資源以及引用
    for n in arr do  
        removeGroup = @project.main_group.find_subpath(n, true)
        removeGroup.set_source_tree('<group>')
        if !removeGroup.empty? then
            process_group_remove_path(@target, removeGroup)
            removeGroup.clear()
        end
    end 
end


def process_group_remove_path(aTarget, aGroup)
    puts "\nprocess_group_remove_path..."
    aGroup.files.each do |file|
        aTarget.resources_build_phase.remove_file_reference(file)
    end
    
    aGroup.groups.each do |group|
        process_group_remove_path(aTarget,group)
    end
end

  

看了很多相關帖子,對於刪除多層結構的沒有相關解決方案,特立此貼。ruby

 (由於咱們項目有開發自動化打包,腳本配置在了jenkins上,其中有須要對工程進行動態添加或是刪除)ui

相關文章
相關標籤/搜索