Object-C給所有類名添加前綴

第一步:將iOSClassAddPrefix.rb和iOSClassAddPrefixSource.txt拷貝到工程文件同目錄下。

第二步:打開iOSClassAddPrefix.rb文件温亲,修改CLASSPREFIX的值澎语。(CLASSPREFIX即為需要添加的類前綴)

第三步:在iOSClassAddPrefixSource.txt中添加需要跳過的所有文件和文件夾药薯。如果是文件則該文件不會被遍歷徘铝,如果是文件夾則該文件夾以及文件夾下的所有文件都不會被遍歷携冤。

第四步:終端cd到同目錄下盆繁,運行 ruby iOSClassAddPrefix.rb YYModel (YYModel即為工程名)

可能存在的問題:

1.文件沒有被修改肾胯,但是xcode中的文件引用被修改了竖席。
2.TableViewController : UITableViewController耘纱,運行腳本后會被修改為YYTableViewController : UIYYTableViewController。
3.....

遇到以上的情況需要手動修改毕荐。

iOSClassAddPrefix.rb

CLASSPREFIX = "YY"  #要添加的類前綴

@pwd = Dir.pwd #當前腳本路徑
@allClasses = Hash.new #保存所有需要改名的類名
@xcodeprojFile #xcodeprojFile
@sourceFiles

#修改project.pbxproj文件
def changeProjectFile(path)
    filePath = path+@xcodeprojFile+"/project.pbxproj"
    content = File.read filePath
    @allClasses.each do |key, value|
        content = content.gsub(key, value)
    end
    File.write filePath, content
end

#修改類文件中的類引用
def changeClassReference(path)
    Dir.foreach path do |entry|
        if whetherToSkip entry
            next
        end

        #文件的完整路徑
        filePath = path+entry
        
        if File.directory? filePath #是文件夾束析,則遞歸
            changeClassReference filePath+"/"
        else #是文件,則處理
            content = File.read filePath
            @allClasses.each do |key, value|
                content = content.gsub(key, value)
            end
            File.write filePath, content
        end
    end
end

#修改所有文件名
def changeAllFileName(path)
    Dir.foreach path do |entry|
        if whetherToSkip entry or entry.start_with? CLASSPREFIX #跳過
            next
        end

        #完整的文件路徑
        filePath = path+entry

        if File.directory? filePath #是文件夾憎亚,則遞歸
            changeAllFileName filePath+"/"
        end

        tempEntry = entry
        @allClasses.each do |key, value| #修改類名
            tempEntry = tempEntry.gsub(key, value)
        end

        oriFileName = filePath
        newFileName = path+tempEntry

        File::rename oriFileName, newFileName
    end
end

#獲取所有需要加前綴的類名
def getAllClassName(path)
    Dir.foreach path do |entry|
        if whetherToSkip entry or entry.start_with? "AppDelegate"
            next
        end

        #文件的完整路徑
        filePath = path+entry

        if File.directory? filePath #是文件夾员寇,則遞歸
            getAllClassName filePath+"/"
        else
            extensionName = entry[/\.[^\.]+$/] #文件的擴展名
            if extensionName == ".h" or extensionName == ".m" or extensionName == ".xib" #只修改.h.m.xib的文件
                fileName = entry.gsub(extensionName, "") #文件名,不包含擴展名
                if File.exist? path+fileName+".h" and File.exist? path+fileName+".m" #.h.m都存在才修改第美,只有.h則有可能是靜態(tài)庫不能修改
                    needChangeFileName = fileName[/[^\+]+$/] #有可能是類別蝶锋,類別只能修改+后面的部分,因為+前面的部分有可能是系統(tǒng)類
                    newFilename = fileName.gsub(needChangeFileName, CLASSPREFIX+needChangeFileName) #修改后的文件名
                    saveClassName fileName, newFilename
                end
            end
        end
    end
end

#將需要修改的原文件名和新文件名保存到@allClasses中
def saveClassName(oriFileName, newFileName)
    @allClasses.each do |key, value|
        if key.include? oriFileName
            return
        end
    end

    @allClasses[oriFileName] = newFileName
end

#需要跳過的文件
def whetherToSkip(entry)
    if @sourceFiles and @sourceFiles.count and @sourceFiles == entry
        return true
    end

    if entry.start_with? "." or entry.start_with? "Pod" or entry.end_with? "framework" or entry.end_with? "xcworkspace" or entry.end_with? ".a" #以./~/Pod開頭的文件或文件夾不處理. .. ..DS_Store
        return true #跳過
    end

    if entry.end_with? "xcodeproj" #xcodeproj文件夾不需要遍歷
        if @xcodeprojFile == nil
            @xcodeprojFile = entry
        end
        return true
    end

    false
end

#讀取sourceFile
def readSourceFile
    path = @pwd+"/iOSClassAddPrefixSource.txt"
    if File.exist? path
        content = File.read(path).lstrip.rstrip
        @sourceFiles = content.split("\n")
    end
end

if ARGV.count == 1 and File.exist? @pwd+"/"+ARGV[0]
    path = @pwd+"/"+ARGV[0]+"/" #工程項目的路徑
    readSourceFile
    getAllClassName path
    changeAllFileName path
    changeClassReference path
    changeProjectFile path
else 
    puts "請輸入正確的參數"
end

下載代碼iOSClassAddPrefix.rb

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末什往,一起剝皮案震驚了整個濱河市扳缕,隨后出現的幾起案子,更是在濱河造成了極大的恐慌别威,老刑警劉巖躯舔,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異兔港,居然都是意外死亡庸毫,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門衫樊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人利花,你說我怎么就攤上這事科侈。” “怎么了炒事?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵臀栈,是天一觀的道長。 經常有香客問我挠乳,道長权薯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任睡扬,我火速辦了婚禮盟蚣,結果婚禮上,老公的妹妹穿的比我還像新娘卖怜。我一直安慰自己屎开,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布马靠。 她就那樣靜靜地躺著奄抽,像睡著了一般蔼两。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逞度,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天额划,我揣著相機與錄音,去河邊找鬼档泽。 笑死俊戳,一個胖子當著我的面吹牛,可吹牛的內容都是我干的茁瘦。 我是一名探鬼主播品抽,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼甜熔!你這毒婦竟也來了圆恤?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腔稀,失蹤者是張志新(化名)和其女友劉穎盆昙,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體焊虏,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡淡喜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了诵闭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炼团。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疏尿,靈堂內的尸體忽然破棺而出瘟芝,到底是詐尸還是另有隱情,我是刑警寧澤褥琐,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布锌俱,位于F島的核電站,受9級特大地震影響敌呈,放射性物質發(fā)生泄漏贸宏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一磕洪、第九天 我趴在偏房一處隱蔽的房頂上張望吭练。 院中可真熱鬧,春花似錦褐鸥、人聲如沸线脚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浑侥。三九已至姊舵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寓落,已是汗流浹背括丁。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伶选,地道東北人史飞。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像仰税,于是被迫代替她去往敵國和親构资。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容

  • 1.創(chuàng)建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創(chuàng)建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,065評論 3 53
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,823評論 6 342
  • ^函數重載的匹配: 當函數名被重載后陨簇,函數的匹配過程:首先尋找能精確匹配的函數吐绵,如果未能精確匹配,則嘗試...
    魯大帥閱讀 1,018評論 0 1
  • To get her.
    白冬樸閱讀 162評論 0 0
  • 作者微博 斜對山城應臥月河绽, 吹來十里稻花香己单。 小陂深處蛙聲歇, 一夜清眠夏雨涼耙饰。 注:七言絕句·仄起·用平水韻 作者微博
    閒畔落花閱讀 285評論 4 2