工作填坑隨記之工具使用

1涵防、Reveal

工欲善其事峡眶,必先利其器,Reveal就是這樣一個(gè)能夠事半功倍的利器疏唾。Reveal為iOS開發(fā)人員帶來(lái)了強(qiáng)大的運(yùn)行時(shí)視圖調(diào)試功能页衙,包括檢查摊滔,修改和調(diào)試。其實(shí)大家估計(jì)已經(jīng)都在使用了店乐,今天只是簡(jiǎn)單說(shuō)下如何接入使用以及碰到的一個(gè)問(wèn)題艰躺。

1.1 Reveal使用

首先你要先在Mac電腦上下載Reveal軟件,至于如何下載眨八,使用正版還是破解版本文不做任何介紹腺兴,言歸正傳,我們來(lái)看如何使用Xcode接入Reveal調(diào)試模擬器App廉侧。

打開Reveal页响,在菜單欄點(diǎn)擊Help --> Install Debugger Commands...安裝調(diào)試命令工具。

點(diǎn)擊Continue完成安裝段誊。

打開Xcode項(xiàng)目闰蚕,在菜單欄選擇View --> Navigators --> Show Breakpoint Navigator

點(diǎn)擊Xcode面板左下角的+按鈕连舍,選擇Symbolic Breakpoint...陪腌,如下圖所示

reveal_01.png

在Symbol選項(xiàng)中輸入UIApplicationMain

點(diǎn)擊Add Action按鈕,在出現(xiàn)的選項(xiàng)框中輸入以下命令:

reveal load

如果Reveal不能正常顯示App诗鸭,請(qǐng)將reveal load更換為下面命令:

expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer", 0x2) : ((void*)0)

注意:如果使用上面命令染簇,RevealServer路徑一定要配置正確。如果/Applications/Reveal.app/Contents下沒(méi)有后面路徑强岸,需要自行將RevealServer路徑補(bǔ)齊锻弓。
選中Automatically continue after evaluating actions選項(xiàng)。如下圖所示

reveal_02.png

右擊新增的這個(gè)斷點(diǎn)蝌箍,選擇Move Breakpoint To --> User青灼,這個(gè)User選項(xiàng)能夠保證此斷點(diǎn)可用于Xcode所有項(xiàng)目。

reveal_03.png

在Xcode中選擇一款模擬器將項(xiàng)目運(yùn)行起來(lái)妓盲,打開Reveal就能看到被連接的App了杂拨。

reveal_04.png

1.2 連接問(wèn)題

一直好好的在用著的Reveal,突然有一天連接不上了悯衬,重裝弹沽,然后按照上面的步驟再來(lái)一遍也是徒然,如下圖所示

reveal_05.png

步入正題筋粗,開始排查問(wèn)題所在策橘。

① 確保Reveal已經(jīng)正確連接

首先查看Xcode控制臺(tái)打印日志是否有以下類似信息:

2019-12-10 10:46:15.159761+0800 SampleApp[64692:3816012]  INFO: Reveal Server started (Protocol Version 49).

如果沒(méi)有看到類似這條的信息,那么Reveal沒(méi)有啟動(dòng)成功娜亿,你需要重新按照1.1中的指南重新集成Reveal丽已。

② Reveal Server Started,仍看不到App顯示

到了這一步买决,代表Xcode和Reveal的配置沒(méi)有問(wèn)題沛婴,Reveal已經(jīng)成功集成了,但是Reveal中仍然看不到要連接的App督赤,那么按照以下命令排查Reveal和模擬器的網(wǎng)絡(luò)連接是否存在問(wèn)題嘁灯。

在終端中輸入以下命令:

dns-sd -B _reveal._tcp local

可以看到輸出如下:

Browsing for _reveal._tcp.local
DATE: ---Mon 09 Dec 2019---
18:11:09.386  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
18:11:09.387  Add        2  -1 local.               _reveal._tcp.        Reveal--60e793ec

Reveal--60e793ec就是當(dāng)前正在運(yùn)行Reveal框架的應(yīng)用程序,實(shí)例名稱末尾的代碼用來(lái)保證每一個(gè)運(yùn)行在Reveal上的App在當(dāng)前網(wǎng)絡(luò)上是唯一的够挂。如果要退出當(dāng)前命令輸出旁仿,請(qǐng)使用control + c快捷鍵。

現(xiàn)在我們要找出在Reveal連接時(shí)當(dāng)前App監(jiān)聽的哪個(gè)端口孽糖,命令行輸入可以使用下面命令:

dns-sd -L Reveal--60e793ec _reveal._tcp.

注意: Reveal--60e793ec要替換為你自己的應(yīng)用程序的實(shí)例名稱(從上一條命令獲得)枯冈。

輸出如下:

Lookup Reveal--60e793ec._reveal._tcp..local
DATE: ---Mon 09 Dec 2019---
18:14:15.896  ...STARTING...
18:14:15.898  Reveal--60e793ec._reveal._tcp.local. can be reached at localhost.:58811 (interface -1)
 isSim=true devSysName=iOS devSysVer=12.1 appExtTypeId= protoVer=49 appBundleId=com.xxx.xxx appName=SampleApp appIsExt=false appShortVers=3.5.0 devLocalModel=iPhone deviceID=iPhoneX-iOS-12.1 devName=iPhone\ X devModel=iPhone appVers=3.5.0

control + c停止當(dāng)前命令輸出“煳颍可以看到連接時(shí)App監(jiān)聽的host是localhost尘奏,端口是58811。在iOS模擬器中運(yùn)行時(shí)病蛉,Reveal框架會(huì)始終綁定到localhost(127.0.0.1)炫加。在真機(jī)設(shè)備上運(yùn)行時(shí)瑰煎,它將綁定到該設(shè)備的公共網(wǎng)絡(luò)接口。

為了能夠發(fā)現(xiàn)模擬器中運(yùn)行的App俗孝,Reveal需要能夠解析localhost主機(jī)名酒甸。要檢查這塊是否有問(wèn)題,在終端輸入下面命令:

dns-sd -G v4 localhost

正常輸出:

DATE: ---Tue 10 Dec 2019---
10:08:12.749  ...STARTING...
Timestamp     A/R Flags if Hostname       Address        TTL
10:08:12.751  Add     2 -1 localhost.     127.0.0.1      1

有問(wèn)題輸出:

DATE: ---Tue 10 Dec 2019---
10:04:10.680  ...STARTING...
Timestamp     A/R Flags if Hostname                 Address    TTL
10:04:10.684  Add     2  0 loaclhost.xxxx.cn.       0.0.0.0    4502   
No Such Recor

control + c停止當(dāng)前命令輸出赋铝。如果沒(méi)有看到正常的輸出插勤,表明你的/etc/hosts文件缺失localhost條目。使用命令:

sudo vim /etc/hosts

確保host文件包含以下內(nèi)容:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost

③ 測(cè)試與Reveal服務(wù)的連接

通過(guò)②中的一系列操作革骨,我們已經(jīng)解決了Reveal與模擬器連接的問(wèn)題农尖,下面測(cè)試下嵌入到我們App的Reveal服務(wù)的連接,命令如下:

curl -s -D - http://localhost:58811/application -o /dev/null

輸出內(nèi)容如下:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Reveal-Protocol-Version: 49
Reveal-Device-Simulator: YES
Reveal-System-Name: iOS
Accept-Ranges: bytes
Date: Mon, 09 Dec 2019 10:20:07 GMT
Reveal-System-Version: 12.1
Content-Length: 2043834
Reveal-Device-Model: iPhone

看到類似的輸出內(nèi)容良哲,表示與Reveal的鏈接是沒(méi)有問(wèn)題的盛卡,愉快的使用Reveal協(xié)助我們開發(fā)App吧~

至此這個(gè)Reveal不顯示模擬器App的問(wèn)題已經(jīng)修復(fù)了,仔細(xì)一想筑凫,原來(lái)是前幾天下了SwitchHosts!作為本地host管理工具滑沧,而在這個(gè)工具中我默認(rèn)關(guān)閉了backup所對(duì)應(yīng)的本地host,導(dǎo)致Reveal不能夠解析localhost主機(jī)名而連接失敗漏健。

reveal_06.png

小小的操作引來(lái)了不必要的麻煩嚎货,記錄下引以為戒橘霎!

2蔫浆、小米手機(jī)Charles抓包

小米手機(jī)特別是紅米系列,在使用Charles抓包時(shí)都會(huì)遇到安裝證書的問(wèn)題姐叁,下載完證書后安裝提示SSLHandshake: Received fatal alert: certificate_unknown瓦盛,總之就是安裝失敗,無(wú)法使用Charles抓包了外潜。

多次探索之后發(fā)現(xiàn)如下步驟能夠解決這個(gè)問(wèn)題:

  1. 保證手機(jī)和電腦處于同一wifi網(wǎng)絡(luò)下原环,打開Charles,手機(jī)連接電腦代理
  2. 下載一個(gè)非小米的第三方瀏覽器处窥,地址欄輸入chls.pro/ssl
  3. 彈出下載鏈接嘱吗,將文件下載至手機(jī)的Download文件夾
  4. 如果是.pem格式,將其改為.crt格式滔驾,如果已經(jīng)是.crt格式忽略這一步谒麦。
  5. 設(shè)置 --> 更多設(shè)置 --> 系統(tǒng)安全 --> 從SD卡安裝,進(jìn)入頁(yè)面選擇已經(jīng)下載好的.crt文件即可哆致。

安裝完后绕德,Charles抓到的鏈接可能都是unknown,看到的Response也都是亂碼摊阀,這個(gè)時(shí)候我們需要設(shè)置Charles的SSL Proxying耻蛇,選擇Charles --> Proxy --> SSL Proxying Settings...踪蹬,在彈出的對(duì)話框中選擇Add,將下面的內(nèi)容對(duì)應(yīng)輸入到相應(yīng)的輸入框中臣咖,點(diǎn)擊OK即可跃捣。

Host:*
Port:443

這個(gè)時(shí)候再去Charles刷新請(qǐng)求是不是已經(jīng)能夠看到請(qǐng)求返回的數(shù)據(jù)了呢,Perfect~

參考

Load Reveal Server via an Xcode Breakpoint
Bonjour Debugging: Why can't I connect to my app?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夺蛇,一起剝皮案震驚了整個(gè)濱河市枝缔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚊惯,老刑警劉巖愿卸,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異截型,居然都是意外死亡趴荸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門宦焦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)发钝,“玉大人,你說(shuō)我怎么就攤上這事波闹≡秃溃” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵精堕,是天一觀的道長(zhǎng)孵淘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)歹篓,這世上最難降的妖魔是什么瘫证? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮庄撮,結(jié)果婚禮上背捌,老公的妹妹穿的比我還像新娘。我一直安慰自己洞斯,他們只是感情好毡庆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烙如,像睡著了一般么抗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厅翔,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天乖坠,我揣著相機(jī)與錄音,去河邊找鬼刀闷。 笑死熊泵,一個(gè)胖子當(dāng)著我的面吹牛仰迁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顽分,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼徐许,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了卒蘸?” 一聲冷哼從身側(cè)響起雌隅,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缸沃,沒(méi)想到半個(gè)月后恰起,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趾牧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年检盼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翘单。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吨枉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哄芜,到底是詐尸還是另有隱情貌亭,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布认臊,位于F島的核電站圃庭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏美尸。R本人自食惡果不足惜冤议,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一斟薇、第九天 我趴在偏房一處隱蔽的房頂上張望师坎。 院中可真熱鬧,春花似錦堪滨、人聲如沸胯陋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)遏乔。三九已至,卻和暖如春发笔,著一層夾襖步出監(jiān)牢的瞬間盟萨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工了讨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捻激,地道東北人制轰。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胞谭,于是被迫代替她去往敵國(guó)和親垃杖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345