ruby操做項目.xcodeproj

前言

開發過程當中常常遇到須要腳本拷貝文件,添加文件引用到Xcode,新建group,添加文件到Build Phase以及增長-fno-objc-arc標識等,這些均可以經過腳本實現。git

準備工做

安裝Ruby庫Xcodeprojgithub

瞭解幾個概念

  • Target:指定了一個用於產品(product), 而且包含了從工程中的一些文件中構建產品的命令.
  • Group:Group 實際上是 Xcode 中用來組織文件的一種方式, 它對文件系統沒有任何影響 , 不管你建立或者刪除一個 Group, 都不會致使 folder 的增長或者移除. 固然若是在你刪除時選擇 Move to Trash 就是另一說了,不過Xcode9開始已經同步了Group和Folder,New Group默認建立了對應的Folder.
  • FileRef:FileRef 其實就是 File Reference 的縮寫, 當你從 Xcode 中刪除一個文件的時候, 它會彈出Remove Reference的提示框. 而其中的 Remove Reference 選項並不會將這個文件移除到垃圾桶, 而只是會將這個文件的引用從 Xcode 的工程文件中刪除.

開始操做

1.查找*.xcodeproj並打開xcode

xcodeproj/project.rbbash

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

2.獲取Targetspa

target = project.targets.first.net

3.建立Groupcode

xcodeproj/project/object/group.rbblog

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

4.添加文件到Group中

xcodeproj/project/object/group.rb 爲了不重複添加引用,添加以前先判斷是否引用已經存在

if group.find_file_by_path(file_path)
    //引用已經存在
else 
    //添加引用
   file_ref = group.new_reference(file_path)
end
複製代碼

本次操做以後,這個文件就添加到了 group 中, 會出如今工程中的導航欄中。

可是這個文件並無被添加到 Build Phases 中, 不管你是編譯仍是做爲資源來使用, Xcode 都會提示你沒法找到這個文件. 咱們還須要把這個文件加入到 Build Phases 中.

5.添加文件到Build Phases中,爲MRC設置-fno-objc-arc標識

xcodeproj/project/object/native_target.rb

若是文件是ARC,執行指令

target.add_file_references([file_ref])

若是文件是MRC,執行指令

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)
複製代碼

參考文章

相關文章
相關標籤/搜索