本節書摘來自異步社群《ios 9應用開發入門經典(第7版)》一書中的第2章,第2.2節使用ios模拟器,作者 【美】約翰 雷(john ray),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
2.2 使用ios模拟器
第1章說過,甚至不需要有ios裝置就可進行ios開發,其原因是xcode包含ios模拟器。該模拟器很好地模拟了apple iphone和ipad,包含safari、通訊錄、設定、game center、月曆、地圖、新聞(news)、提醒事項(reminders)、健康(health)、watch和wallet等應用程式用于內建測試,如圖2.29所示。

圖2.29 ios模拟器包含ios标準應用程式的簡化版
在早期針對模拟器進行開發可節省大量的時間:您無需等到将應用程式安裝到實際裝置就可看到修改代碼的效果。另外,您無需購買并安裝開發人員證書就可在模拟器中運作代碼。
然而,模拟器并非完美的ios裝置,它不能模拟複雜的多觸點事件,也不能提供有些傳感器(陀螺儀、加速計等)的真實讀數。在這些方面,它最多隻能旋轉以測試橫向界面以及模拟簡單的“搖動”。雖然如此,對大多數應用程式來說,其功能足夠了,是開發過程的重要組成部分。
警告:在mac上運作得快并不意味着在iphone上也運作得快
對模拟器來說,絕對不能指望的一點是,模拟的應用程式性能類似于實際應用程式性能。模拟器通常運作得非常流暢,而實際應用程式可使用的資源可能更有限,是以性能沒有在模拟器中好。請務必偶爾在實際裝置中進行測試,以確定預期與實際情況一緻。
2.2.1 啟動應用程式
要在模拟器中啟動應用程式,可在xcode中打開項目,確定生成方案被設定為您選擇的ios裝置(ipad air、iphone 6、iphone 6+等),再單擊run按鈕。幾秒鐘後,模拟器将啟動并加載應用程式。您可使用本章的檔案夾hour 02projects中的hellosimulator項目對此進行測試。
啟動并運作後,應用程式hellosimulator将顯示一行文本以及一幅從網站下載下傳的圖像,如圖2.30所示。
應用程式運作後,您便可使用滑鼠與其互動,就像使用手指一樣:單擊按鈕、拖曳滑塊等。如果您單擊應用程式希望獲得輸入的字段,将顯示螢幕鍵盤。您可使用mac鍵盤輸入,也可通過單擊螢幕上的鍵盤按鈕來輸入。還可模拟ios的複制并粘貼服務,方法是在文本中單擊并按住滑鼠,直到出現熟悉的放大鏡。
單擊xcode工具欄中的stop按鈕退出應用程式。也可選擇菜單hardware>home,但xcode将以為應用程式還在運作,導緻不同步。
圖2.30 在xcode中單擊run按鈕,在模拟器中啟動并運作應用程式
注意:
在模拟器中啟動應用程式将在模拟器中安裝它,就像在ios裝置中安裝應用程式一樣。退出應用程式後,它仍保留在模拟器中,直到您手工删除它。
要從模拟器中删除已安裝的應用程式,可在其圖示上單擊并按住滑鼠直到它開始搖擺,然後單擊出現在左上角的x。換句話說,将應用程式從模拟器中删除的方法與将其從ios裝置中删除完全相同。
要将模拟器重置到原始狀态,可從ios模拟器菜單中選擇reset content and settings。
提示:
可随時切換到其他裝置,為此隻需在菜單hardware>device中選擇相應的菜單項。
2.2.2 模拟多點觸摸事件
雖然隻有一個滑鼠,但可在光标位于ios模拟器螢幕上時按住option鍵來模拟簡單的多點觸摸事件,如兩個手指合攏和張開。這将繪制兩個表示手指的圓圈,并可使用滑鼠來控制它們。要模拟多點觸摸事件,可在按住option鍵的情況下單擊并拖曳。圖2.31顯示了兩個手指合攏手勢。
請使用應用程式hellosimulator來嘗試這些操作,您應該能夠使用模拟器的多點觸摸功能來縮放螢幕上的文本和圖像。
圖2.31 使用option鍵模拟簡單的多點觸摸
在模拟器中,要移動模拟的指尖(例如,以便能夠在螢幕底部附近執行合攏手勢),可按住shift鍵并拖曳模拟的指尖。隻要按住shift鍵不放,就可将模拟的指尖移動到任何地方。
2.2.3 旋轉模拟的裝置
要模拟裝置旋轉,可從菜單hardware中選擇rotate right或rotate left,如圖2.32所示。您可使用這些菜單項将模拟器視窗旋轉到全部4種可能的朝向,并檢視螢幕上的結果。
圖2.32 旋轉到各個可能的朝向
同樣,使用hellosimulator對此進行測試。該應用程式将對旋轉事件做出反應:相應地調整文本的方向并擷取一幅新圖像。
2.2.4 模拟其他情況
您可能想在模拟器中測試其他幾種獨特的情形。使用hardware菜單可通路如下功能。
device(裝置):選擇其他裝置,模拟應用程式在這些裝置上的運作情況。
shake gesture(搖動手勢):模拟快速搖動裝置。
home(主螢幕):模拟按下home(主螢幕)按鈕的效果。
lock(鎖定):模拟鎖定的裝置。由于使用者可在應用程式運作時鎖定iphone和ipad,有些開發人員選擇讓其應用程式以獨特的方式對此做出反應。
reboot(重新開機):重新開機模拟的ios裝置。
touch id enrolled/simulate finger touch:啟用/禁用指紋識别(touch id)裝置,并模拟在touch id傳感器上有效或無效的觸摸。
simulate memory warning(模拟記憶體警告):觸發應用程式的記憶體太少事件,這對測試應用程式能否在資源太少時妥善地退出很有用。
toggle in-call status bar(切換來電狀态欄):當應用程式運作時,如果有來電,螢幕頂部将出現另一條線(觸摸它可切換到電話)。該選項模拟該直線。
simulate hardware keyboard(模拟鍵盤):模拟連接配接的鍵盤,隻需使用mac鍵盤即可。
tv out(電視輸出):顯示一個視窗,其中顯示了裝置的電視輸出信号的内容。本書不使用這項功能。
請在應用程式hellosimulator中對旋轉、搖動或記憶體不足進行測試。圖2.33顯示了該應用程式對模拟搖動手勢做出的反應。
圖像說明文字 圖2.33 在ios模拟器中,可測試應用程式如何處理多種獨特的情況
警告:在ios應用程式崩潰時恢複
如果應用程式在ios模拟器中運作時出現問題并崩潰,xcode将顯示調試器。要在應用程式崩潰時恢複,可單擊xcode工具欄中的stop按鈕退出應用程式,再隐藏調試器并檢查代碼。第24章将介紹如何使用調試器找出導緻應用程式崩潰的bug。
2.2.5 添加其他要模拟的裝置
預設情況下,xcode隻顯示在售的apple ios裝置及其模拟選項(可在xcode的下拉清單scheme和模拟器的devices菜單中找到它們)。要添加其他裝置,可在模拟器中選擇菜單hardware>device>manage devices,如圖2.34所示;也可在xcode中選擇菜單window>devices。
這将打開devices視窗,其中列出了可用的模拟器硬體和ios版本,如圖2.35所示。
要删除裝置,可通過單擊來選擇它,再按delete鍵;要添加裝置,可單擊左下角的+按鈕,xcode将顯示create a new simulator對話框,如圖2.36所示。
圖2.36 配置新的模拟器
輸入模拟器的名稱,選擇裝置類型和ios版本,再單擊create按鈕。建立的模拟器将立即出現在xcode和ios模拟器中。