-
-
[原创]在 iOS 模擬器上測試 mobilesubstrate tweak
-
发表于:
2014-1-19 11:20
13295
-
[原创]在 iOS 模擬器上測試 mobilesubstrate tweak
前幾天才發現可以在 iOS 模擬器上執行 mobilesubstrate 的 tweak
對開發者來說真的是很方便
因此參考 這篇文章 寫了一些記錄
不過似乎只限於 hook SpringBoard 的 tweak
其他部分我還沒有去測試
- - - -
以下為過程記錄,搭配 theos
下載 MobleSubstrate
$ curl -OL http://apt.saurik.com/debs/mobilesubstrate_0.9.4001_iphoneos-arm.deb
解壓縮然後在本機配置 library
$ dpkg-deb -x mobilesubstrate_0.9.4001_iphoneos-arm.deb substrate
$ sudo mv substrate/Library/Frameworks/CydiaSubstrate.framework /Library/Frameworks
$ sudo mv substrate/Library/MobileSubstrate /Library/MobileSubstrate
$ sudo mv substrate/usr/lib/* /usr/lib
接著要修改模擬器來於執行 SpringBoard 時注入 tweak
由於 iOS7 之後的模擬器是由 launchd_sim 來啟動 因此舊有的方法無法使用
不過還是可以透過修改 SDK 中 LaunchDaemon 的 plist 達成
先來到
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/System/Library/LaunchDaemons
然後將 com.apple.SpringBoard.plist 備份到別處
( 放在這目錄會造成 SpringBoard 被執行兩次 )
編輯 com.apple.SpringBoard.plist 新增一個名為 EnvironmentVariables 的 Dictionary
並在 EnvironmentVariables 下新增一個 Key 名為 DYLD_INSERT_LIBRARIES
內容為你自己的 tweak 的 dylib 路徑 ( 不是 MobileSubstrate.dylib )
例如
/Library/MobileSubstrate/DynamicLibraries/SpotLock7.dylib
- - - -
再來 需要修改 theos
開啟 $THEOS/makefiles/targets/Darwin/simulator.mk
找到這行
_TARGET_OSX_VERSION_FLAG = -mmacosx-version-min=$(if $(_TARGET_VERSION_GE_4_0), 10.6,10.5)
取代為
_TARGET_VERSION_GE_7_0 = $(call __simplify,_TARGET_VERSION_GE_7_0,$(shell $(THEOS_BIN_PATH)/vercmp.pl $(_THEOS_TARGET_SDK_VERSION) ge 7.0))
_TARGET_OSX_VERSION_FLAG = $(if $(_TARGET_VERSION_GE_7_0),-miphoneos-version-min=7.0,-mmacosx-version-min=$(if $(_TARGET_VERSION_GE_4_0),10.6,10.5))
- - - -
再來處理 linking 部分
libsubstrate.dylib 並沒有 x86 的 slice ,因此要用這個帶有 x86 slice 的版本來取代原本的
$ curl -O http://cdn.hbang.ws/dl/libsubstrate_ios7sim.dylib
$ mv $THEOS/lib/libsubstrate.dylib libsubstrate.dylib.bak
$ mv ./libsubstrate_ios7sim.dylib $THEOS/lib/libsubstrate.dylib
- - - -
最後來修改一下我們 tweak 的 makefile ,使其可以正確編譯出給 simulator 執行的 dylib
先加上
export IPHONE_SIMULATOR_ROOT=/Applications/Xcode.app/Contents/Developer/Platfor
ms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk
然後指定 TARGET 為 simulator
TARGET = simulator
執行 make install 之後 tweak 就會被安裝到 simulator 上
若要重啟 SpringBoard 必須自己手動 killall -9 SpringBoard
( 原來模擬器的 SpringBoard 運行在本機 真酷 )
- - - -
不過 theos 的 make install 可能會遇到奇怪的權限問題 噴一些error 看起來很不爽
我自己的懶人解決方式:
在 makefile 加上
sim:
cp ./obj/iphone_simulator/SpotLock7.dylib $(IPHONE_SIMULATOR_ROOT)/Library/MobileSubstrate/DynamicLibraries/
cp ./SpotLock7.plist $(IPHONE_SIMULATOR_ROOT)/Library/MobileSubstrate/DynamicLibraries/
killall -9 SpringBoard
( 記得先修改模擬器目錄權限 )
之後執行 make sim 即可
- - - - - - -
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!