所謂Mobile Substrate呢,就是一個在iPhone越獄之後,可以讓你修改既有程式功能的軟體,
一般我們修改軟體功能有兩種方式,一是直接修改程式本身,
二就是利用外掛,讓程式在本身不變的情況下,可以被我們自定的函式覆蓋掉原本的功能。
這個Mobile Substrate,就是讓你用第二種方式修改程式的一個軟體。
在開始之前,我們必須要先裝 xcode 在 Mac上 ,
我用的是Mac OS X 10.9 + xcode 5,不過其他版本也是差不多的。
接著配置環境,現在配置環境很簡單,終端機裡面直接下指令:
1 2 3 |
sudo curl https://raw2.github.com/r-plus/dotfiles/master/install_theos.sh -o ~/Downloads/install_theos.sh sudo chmod +x ~/Downloads/install_theos.sh sudo sh ~/Downloads/install_theos.sh |
然後讓他跑完就收工了。
接著打開 /opt/theos/include/IOSurface/IOSurfaceAPI.h
搜尋「10_7」,把出現的那行(應該共兩個),跟他上面那一行給註釋掉
(應該是在 251,252 還有 255,256 行)
如果找不到 IOSurfaceAPI.h 請上網找解決方法,因為這個是受到版權保護的檔案
一般來說是直接從 Mac 系統裡面拷貝出來的,但是不知道為甚麼有些人會沒有
再來, 我們先在終端機執行 cd / 到你想建立檔案的位置去,
再輸入
1 |
/opt/theos/bin/nic.pl |
會出現如下選項
NIC 1.0 - New Instance Creator
------------------------------
[1.] iphone/application
[2.] iphone/library
[3.] iphone/preference_bundle
[4.] iphone/tool
[5.] iphone/tweak
Choose a Template (required):
這邊輸入 tweak 所對應的代號 (範例中是 5,實際情況請看你的畫面),
再填入Project Name以及Package Name(自己取名),
Author 當然是自己名字啦,比較重要的是 MobileSubstrate Bundle filter,
這邊要寫入你想修改的軟體Bundle名稱,
如果是在iOS系統上,關於介面修改的大概就是 com.apple.springboard,或者 com.apple.UIKit 了吧。
如果是針對單一程式修改,則要輸入該程式的 Bundle ID。
接下來在你原本終端機指定的位置就會多一個資料夾,
裡面有個 Tweak.xm 就是我們要寫程式的地方啦~
再看到Makefile這個檔案,你可以直接用現成的,但你可以把它整個取代,改成以下的內容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
TWEAK_NAME = myTweak myTweak_OBJCC_FILES = Tweak.xm IP_ADDRESS=10.0.1.2 myTweak_CFLAGS = -F$(SYSROOT)/System/Library/CoreServices myTweak_FRAMEWORKS = UIKit Foundation CoreFoundation myTweak_PRIVATE_FRAMEWORKS = UIKit TARGET = :clang::4.2.1 ARCHS = armv7 arm64 SHARED_CFLAGS = -fobjc-arc LDFLAGS += -march=armv7 include theos/makefiles/common.mk include theos/makefiles/tweak.mk sync: stage rsync -z _/Library/MobileSubstrate/DynamicLibraries/* root@$(IP_ADDRESS):/Library/MobileSubstrate/DynamicLibraries/ ssh root@$(IP_ADDRESS) killall SpringBoard |
把myTweak改成你的作品名稱,10.0.1.2 改成你的iPhone IP,
Frameworks 跟 PrivateFrameworks 改成你要使用的 Framework。(對初學來說的話,跟我上面的一樣應該就夠了)
最後,在 iPhone 上面裝 SSH 跟 rsync,
這樣子的話,你只要輸入 make sync,而外掛編譯成功的話,
就會自動同步到iPhone裡面,而不需要手動放進去再respring。
所以接下來,只要修改 Tweak.xm 的內容,就可以寫出Mobile Substrate的外掛了~
接下來講我遇到的一些問題的解決方法:
1. 系統說找不到 IOSurfaceAPI.h
這個問題是因為 IOSurfaceAPI.h 不是免費或者開源的檔案,所以安裝的時候沒有提供,
但是你可以在 Mac OS X 10.6 以上的 /System/Library/Frameworks/IOSurface.framework/Headers/ 找到。
2. 明明沒有出現 error 卻無法編譯
這時候看一下是不是出現了 "treats all warnings as errors" 之類的提示
如果是的話,找 /opt/theos/makefiles/common.mk
找到包含 werror 的這行,然後刪除(應該是 INTERNAL_CFLAGS += -Werror)
這樣應該就可以了
發佈留言