首页
社区
课程
招聘
[原创]在 iOS 模擬器上測試 mobilesubstrate tweak
发表于: 2014-1-19 11:20 13295

[原创]在 iOS 模擬器上測試 mobilesubstrate tweak

2014-1-19 11:20
13295

前幾天才發現可以在 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 即可

- - - - - - -


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 5
支持
分享
最新回复 (7)
雪    币: 131
活跃值: (98)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
厉害啊,支持
2014-1-19 15:13
0
雪    币: 546
活跃值: (1657)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
内容不错,谢谢分享。
2014-1-20 08:01
0
雪    币: 231
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享,努力学习中~~~~
2014-1-20 09:41
0
雪    币: 155
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2014-1-20 16:08
0
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
6
楼主好人
2014-1-26 13:02
0
雪    币: 50
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不错 赞一个
2014-2-7 12:03
1
雪    币: 225
活跃值: (136)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主好人,也是大牛!谢谢!
2014-2-7 19:58
0
游客
登录 | 注册 方可回帖
返回
//