背景介紹
VoIP 類型的APP有個特性,就是需要一直在後台保持運行,以便能夠隨時接收來電。正因為系統提供給VoIP進程的這種特殊機制,導致我們沒法直接用kill命令完全查殺VoIP進程。關於這點更加詳細的資訊,可參考如下Apple developer網站的介紹:
“Because VoIP apps need to stay running in order to receive incoming calls, the system automatically relaunches the app if it exits with a nonzero exit code. (This type of exit could happen when there is memory pressure and your app is terminated as a result.) However, terminating the app also releases all of its sockets, including the one used to maintain the VoIP service connection. Therefore, when the app is launched, it always needs to create its sockets from scratch.”
在詳細介紹用指令碼查殺VoIP進程實踐之前,先花點篇幅說下我們為什麼需要查殺VoIP進程。
在IOS中,可以使用instruments這個工具來啟動被測應用,並執行UI Automation所編寫的自動化測試案例。二次啟動instruments時,因為進程已經被啟動過,會在控制台拋出如下錯誤:”Executable ‘XXX’ is already running as process XXXX which was launched from the ‘launchd’ process.” 為了避免這種錯誤,只能啟動一次instruments,跑完所有的自動化用例. 因為在命令列下啟動instruments,只能指定一個執行的JS檔案,所以只能把所有的自動化用例封裝到這唯一的JS檔案裡。這很難滿足實際的需求。現實中我們已自動化用例數目比較大,需要對自動化用例按用例優先順序進行分類處理,按照類型將自動化用例存在對應的JS檔案裡,所以需要啟動多次instruments來執行用例。因此,我們需要在啟動instruments前先查殺下已經存在的VoIP進程。
顯然我們不可能在自動化指令碼啟動並執行過程中,手動通過連按主畫面,向上滑動APP表徵圖來查殺VoIP進程。那接著就來看下我們的實踐過程吧。
應用的工具
我們結合了如下這些工具:
SimulateTouch: 提供座標方式點擊或者滑動螢幕的方法
Activator: 可以設定在任意位置按一下頂部狀態列啟用多工作列
KillBackgroud7:在多工作列提供按鈕,點擊該按鈕可以查殺所有後台進程
AutoTouch: 可以用來錄製動作存到指令碼裡,我們主要用這個工具來查看座標
這幾個工具在越獄的iPhone,都可以通過Cydia下載到。
實踐過程介紹
首先,我們在設定裡找到並點擊Activator, 然後選擇並點擊任意位置,選擇並點擊按一下頂部狀態列,選擇並點擊啟用工作列,這些步驟的目的是為了在任意位置點擊一下頂部狀態列開啟多工作列頁面。上面的步驟如以下截圖所示:
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/