ruby操作.xcodeproj

前言

開發(fā)過程中經(jīng)常遇到需要腳本拷貝文件,添加文件引用到Xcode,新建group,添加文件到Build Phase以及增加-fno-objc-arc標(biāo)識等,這些都可以通過腳本實(shí)現(xiàn)。

準(zhǔn)備工作

安裝Ruby庫Xcodeproj

了解幾個概念

  • Target:指定了一個用于產(chǎn)品(product), 并且包含了從工程中的一些文件中構(gòu)建產(chǎn)品的命令.
  • Group:Group 其實(shí)是 Xcode 中用來組織文件的一種方式, 它對文件系統(tǒng)沒有任何影響 , 無論你創(chuàng)建或者刪除一個 Group, 都不會導(dǎo)致 folder 的增加或者移除. 當(dāng)然如果在你刪除時(shí)選擇 Move to Trash 就是另外一說了,不過Xcode9開始已經(jīng)同步了Group和Folder,New Group默認(rèn)創(chuàng)建了對應(yīng)的Folder.
  • FileRef:FileRef 其實(shí)就是 File Reference 的縮寫, 當(dāng)你從 Xcode 中刪除一個文件的時(shí)候, 它會彈出Remove Reference的提示框.
    而其中的 Remove Reference 選項(xiàng)并不會將這個文件移除到垃圾桶, 而只是會將這個文件的引用從 Xcode 的工程文件中刪除.

開始操作

1.查找*.xcodeproj并打開

xcodeproj/project.rb

project = Xcodeproj::Project.open('./*.xcodeproj')

2.獲取Target

target = project.targets.first

3.創(chuàng)建Group

xcodeproj/project/object/group.rb

group = project.main_group.find_subpath(group的path)

4.添加文件到Group中

xcodeproj/project/object/group.rb
為了避免重復(fù)添加引用,添加之前先判斷是否引用已經(jīng)存在

if group.find_file_by_path(file_path)
    //引用已經(jīng)存在
else 
    //添加引用
   file_ref = group.new_reference(file_path)
end

本次操作之后,這個文件就添加到了 group 中, 會出現(xiàn)在工程中的導(dǎo)航欄中。

但是這個文件并沒有被添加到 Build Phases 中, 無論你是編譯還是作為資源來使用, Xcode 都會提示你無法找到這個文件. 我們還需要把這個文件加入到 Build Phases 中.

5.添加文件到Build Phases中,為MRC設(shè)置-fno-objc-arc標(biāo)識

xcodeproj/project/object/native_target.rb

如果文件是ARC,執(zhí)行指令

target.add_file_references([file_ref])

如果文件是MRC,執(zhí)行指令

target.add_file_references([file_ref],'-fno-objc-arc')

6.保存project

project.save

完整代碼如下:

def add_file_reference_to_group(target, project, directory_path, to_group, need_mrc)
    if to_group and File::exist?(directory_path) then
        Dir.foreach(directory_path) do |entry|
            if entry != "." and entry != ".." and entry != ".DS_Store"
                pb_gen_file_path = entry
                if to_group.find_file_by_path(pb_gen_file_path)
                    puts pb_gen_file_path + " reference exist"
                else
                    file_reference = to_group.new_reference(pb_gen_file_path)
                    if need_mrc and entry.include?("pbobjc.m")
                        target.add_file_references([file_reference],'-fno-objc-arc')
                    else
                        target.add_file_references([file_reference])
                    end
                end
            end
        end
        project.save
    end
end

project = Xcodeproj::Project.open('./*.xcodeproj')
target = project.targets.first
group = project.main_group.find_subpath(要添加到的Group的path)
add_file_reference_to_group(target, project, 想要添加到指定Group的file的path, group, true)

參考文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容