在上篇介紹MobileSubstrate的文章中,說到第三方開發(fā)者通過MobileSubstrate向應用中注入自己的代碼來改變應用運行時的行為表現(xiàn)织咧。而這里的代碼就是我們今天要說的主角--tweak。
tweak的實質(zhì)就是ios平臺的動態(tài)庫。IOS平臺上有兩種形勢的動態(tài)庫,dylib與framework智玻。Framework這種開發(fā)者用的比較多,而dylib這種就相對比較少一點芙代,比如libsqlite.dylib吊奢,libz.dylib等。而tweak用的正是dylib這種形勢的動態(tài)庫纹烹。我們可以在/Library/MobileSubstrate/DynamicLibraries目錄下查看手機上存在著的所有tweak页滚。這個目錄下除dylib外還存在著plist與bundle兩種格式的文件,plist文件是用來標識該tweak的作用范圍滔韵,而bundle是tweak所用到的資源文件逻谦。如下圖所示:
與正常的APP開發(fā)使用xcode不同,Tweak的開發(fā)環(huán)境是theos或者iosopendev陪蜻。iosopendev是在theos的基礎上實現(xiàn)的基于xcode的開發(fā)環(huán)境邦马。而theos是一種命令行式的開發(fā)編譯環(huán)境,與c/c++的命令行編譯形式很相象宴卖。這里也主要針對theos作簡單的介紹滋将。
Theos是由DHowett開發(fā)的,主要目的是簡化越獄程序的開發(fā)流程症昏。需要注意的是Theos不僅僅適用于MAC平臺随闽,還能夠支持Linux平臺哦。環(huán)境搭建的詳細過程這里就不在詳細說明了肝谭,主要的步驟大致就是安裝iphone sdk掘宪、安裝git、從github上clone theos項目并配置相關(guān)的環(huán)境變量攘烛。網(wǎng)上有很多這樣的流程貼魏滚,大家Google一下就可以了。
使用Theos提供的nic.pl腳本創(chuàng)建新的tweak工程坟漱,如下圖所示鼠次,theos提供了如下的幾個tweak模板供開發(fā)者選擇使用:
Theos創(chuàng)建的tweak工程目錄如下圖:這里面Tweak.xm、Makefile、Tweak.xm這三個文件是我們需要重點關(guān)注的腥寇。
Makefile是工程的編譯配置文件成翩,該文件與c/c++編譯時需要配置的makefile文件比較類似。xxx.plist文件的主要功能是限制Tweak的作用范圍赦役,該文件也正是上文中提到的plist文件的來源麻敌。Tweak.xm是Tweak的源碼文件,也是Tweak默認的入口文件掂摔。Tweak可以使用.m/.mm模式的源文件庸论,但如果希望使用Theos提供的Logos語法的話,文件必須是以.xm/.x/.xi/.xmi等格式棒呛。
Theos提供了簡單的Logos語法供開發(fā)者使用,從而避免讓開發(fā)者接觸OC中更為底層的runtime機制域携,降低了開發(fā)者的進入門檻簇秒。開發(fā)者最學使用的語法關(guān)鍵字如下:
%hook ClassName 標識需要向名為ClassName的類中注入修改代碼。
%new(signature) 添加一個新的方法秀鞭,signature是新方法的簽名趋观,可以省略不寫。
%orig 調(diào)用方法的原有實現(xiàn)锋边。
有關(guān)Logos語法皱坛、Theos的其它相關(guān)信息,請參數(shù)http://iphonedevwiki.net/index.php/Logos豆巨。