最近在看iOS逆向的資料,發現了調試UI的工具--Reveal,發現這在實際開發中也是很有用處。當我們需要參照其他App界面布局的時候,使用這個工具可以看他的布局情況。不過這需要手機越獄才行。如果沒有越獄的話,只能調試自己的App,有同學會說,如果是自己的App,那我用自帶就夠了,其實Reveal有個比Xcode自帶的更有用的功能。Reveal提供一個可以即時改布局屬性的功能,即我不需要修改代碼,再重啟App來查看。只需要在右邊約束直接修改數值,回車一下,就能看到相關的布局了,類似於前端通過瀏覽器修改界面,個人覺得非常的方便。
安裝與使用Reveal的主要步驟:
- 安裝Reveal軟件。
- 導入RevealServer.framework到項目的根目錄。(記得打包前移除,RevealServer.framework在Reveal應用的Help-->Show Reveal Library in Finder-->iOS Library中獲取,如果是調試自己的App,到這一步就可以了)。
- 將libReveal.dylib和libReveal.plist移到iOS設備的目錄/Library/MobileSubstrate/DynamicLibraries。
1. 安裝Reveal軟件:
https://blog.csdn.net/Crazy_SunShine/article/details/78843023 這位博主大大提供了破解版。里邊也有其他幾種方式使用Reveal,這里就記錄使用過的最簡單的方式。
2. 導入RevealServer.framework到項目的根目錄:
RevealServer.framework在Reveal應用的Help-->Show Reveal Library in Finder-->iOS Library中獲取。取到后,拖進項目的根目錄。然后在TARGETS中添加RevealServer.framework。
到這一步后,運行項目,打開Reveal,即可看到對應的項目。
隨便選擇一個即可看到對應的層級結構。到這一步就能調試自己的App了。
3. 查看其它任意App的布局:
這一步需要越獄的手機,越獄的方法很多,PP助手、愛思助手都可以。越獄后在Cydia中安裝三個重要的插件:Cydia Substrate、OpenSSH、Reveal Loader。
安裝好對應的插件后,開始准備工作:
- 將libReveal.dylib和libReveal.plist移到iOS設備的目錄/Library/MobileSubstrate/DynamicLibraries。新版的Reveal沒有libReveal.dylib。需要將RevealServer.framework中的RevealServer文件移入時重命名成libReveal.dylib,使用的命令是(將IP地址換成iOS設備的IP地址,主要要保持在一個局域網內):
scp /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer root@192.168.2.6:/Library/MobileSubstrate/DynamicLibraries/libReveal.dylib
需要輸入的默認密碼是:apline
這里我因為試了一下 OpenSSH 能不能成功連上手機。使用了。"ssh root@192.168.2.6"。輸入密碼apline后,成功連接了iPhone的機子,再使用上面命令一直說找不到文件目錄,是因為當前設備主體不對。小小注意一下。另外類似的代碼將libReveal.plist也移入到設備中:
scp xxx/libReveal.plist root@192.168.2.6:/Library/MobileSubstrate/DynamicLibraries/libReveal.plist
plist的內容是你要調試的App的bundle id。如下圖:
這里再貼上一份。獲取手機所有應用的bundle id的代碼。
NSMutableArray *allID = [[NSMutableArray alloc] init]; Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace"); NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)]; NSArray *appArray = [workspace performSelector:@selector(allApplications)]; NSString *model = [UIDevice currentDevice].model; for (NSString *str in appArray) { //轉換成字符串類型 NSString *string = [str description]; NSRange rg1 = [string rangeOfString:@">"]; string = [string substringFromIndex:rg1.location + 2]; if ([model isEqualToString:@"iPad"]) { NSRange rg2 = [string rangeOfString:@"<"]; string = [string substringToIndex:rg2.location - 1]; } NSDictionary *dic = @{@"bundleID":string}; [allID addObject:dic]; } NSLog(@"allID-----%@",allID);
2. 在iOS設備上設置中 Reveal 的Enabled Applications指定要查看的App。
到這里就完成了。
接下來打開你要查看的App,再打開Reveal。即可看到對應界面。