版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2021.01.04 星期一 |
前言
程序總會(huì)有bug必怜,如果有好的調(diào)試技巧和方法养涮,那么就是事半功倍,這個(gè)專題專門(mén)和大家分享下和調(diào)試相關(guān)的技巧罐监。希望可以幫助到大家吴藻。感興趣的可以看下面幾篇文章。
1. 程序調(diào)試 (一) —— App Crash的調(diào)試和解決示例(一)
開(kāi)始
首先看下主要內(nèi)容:
在本教程中弓柱,您將學(xué)習(xí)Xcode Simulator的高級(jí)功能沟堡,以改善您的日常開(kāi)發(fā)經(jīng)驗(yàn)。內(nèi)容來(lái)自翻譯矢空。
下面看下寫(xiě)作環(huán)境:
Swift 5, iOS 14, Xcode 12
接著就是正文了航罗。
Xcode Simulator
是開(kāi)發(fā)人員使用最廣泛的工具之一。 在模擬器上運(yùn)行和測(cè)試應(yīng)用程序已成為每個(gè)開(kāi)發(fā)人員日常工作的一部分屁药。 熟悉各種模擬器選項(xiàng)對(duì)于任何開(kāi)發(fā)人員都是至關(guān)重要的粥血。 您知道您也可以從命令行創(chuàng)建和配置模擬器嗎? 在本教程中,您將學(xué)習(xí):
- 什么是模擬器
- 深入了解有用的模擬器選項(xiàng)
- 從命令行創(chuàng)建和配置模擬器
- 使用命令行流式傳輸和捕獲日志
- 創(chuàng)建
Bash
腳本以在不同區(qū)域設(shè)置的模擬器上自動(dòng)啟動(dòng)應(yīng)用程序复亏。
打開(kāi)RayWonders
項(xiàng)目趾娃。 構(gòu)建并運(yùn)行。
這個(gè)程序有兩個(gè)tab
— Photo and Map
缔御。 Photo tab
顯示了世界奇觀的照片抬闷。 點(diǎn)擊照片可顯示其詳細(xì)說(shuō)明。 Map tab
將世界奇觀的照片顯示為地圖上的注釋刹淌。 這是raywenderlich.com
教程之一饶氏,您無(wú)需修改項(xiàng)目。 相反有勾,您將使用此應(yīng)用程序作為基礎(chǔ)來(lái)學(xué)習(xí)各種模擬器選項(xiàng)疹启。 在開(kāi)始世界巡回演唱之前,您需要了解什么是模擬器蔼卡。
What Is a Simulator?
該模擬器是在Mac上模擬iOS喊崖,iPadOS,tvOS和watchOS的絕佳工具雇逞。 它通過(guò)模擬不同的設(shè)備來(lái)幫助快速進(jìn)行原型設(shè)計(jì)和測(cè)試荤懂。 從技術(shù)上講,模擬器是在macOS
內(nèi)核上運(yùn)行的獨(dú)立用戶空間塘砸。
User space是分配給運(yùn)行應(yīng)用程序的系統(tǒng)內(nèi)存节仿,而內(nèi)核空間是分配給運(yùn)行OS內(nèi)核和設(shè)備驅(qū)動(dòng)程序的系統(tǒng)內(nèi)存。啟動(dòng)新的模擬器會(huì)創(chuàng)建一個(gè)單獨(dú)的用戶空間掉蔬。
內(nèi)核(kernel)
是操作系統(tǒng)的核心組件廊宪。它促進(jìn)了硬件和軟件組件之間的交互。它負(fù)責(zé)管理硬件女轿,分配內(nèi)存并在進(jìn)程之間進(jìn)行仲裁箭启。
這些進(jìn)程之一 —— ** Daemon** —— 在后臺(tái)運(yùn)行。launchd蛉迹,cfprefsd傅寡,distnoted是一些系統(tǒng)daemons
程序。
在設(shè)備和模擬器上運(yùn)行的應(yīng)用程序是否相同北救?接下來(lái)荐操,您將學(xué)到。
Running App on a Device vs. a Simulator
在模擬器上測(cè)試應(yīng)用程序非常方便珍策。但是托启,在設(shè)備和模擬器上運(yùn)行的應(yīng)用程序之間存在一些關(guān)鍵差異。
1. Computing Performance
模擬器與Mac共享相同的計(jì)算資源膛壹。這包括內(nèi)存驾中,CPU和網(wǎng)絡(luò)連接唉堪。相反,與Mac相比肩民,物理設(shè)備具有更少的內(nèi)存和計(jì)算能力唠亚。同樣,網(wǎng)絡(luò)可能是物理設(shè)備上不可預(yù)測(cè)的野獸持痰。
2. Display
Mac和物理設(shè)備上的分辨率和色域可能會(huì)不同灶搜,從而導(dǎo)致圖像和文本出現(xiàn)鋸齒。 在本教程的后面工窍,您將學(xué)習(xí)如何模擬確切的物理設(shè)備大小割卖。
3. Hardware Limitations
模擬器不支持某些硬件組件。 這些包括:
- 藍(lán)牙
- 相機(jī)
- 運(yùn)動(dòng)傳感器患雏,例如加速度計(jì)和陀螺儀
- 接近傳感器
4. Framework Limitations
模擬器不支持某些框架鹏溯。 這些包括:
ARKit
HomeKit
IOSurface
MessageUI
有關(guān)所有差異的更詳盡列表,請(qǐng)通過(guò)在“模擬器”菜單中選擇Help ? Simulator Help
來(lái)參考文檔淹仑。
接下來(lái)丙挽,您將學(xué)習(xí)如何組織模擬器。
Organizing Simulators Using Xcode
Xcode
附帶了一組默認(rèn)的模擬器匀借。 要查看這些模擬器的列表颜阐,請(qǐng)按照下列步驟操作:
- 1) 打開(kāi)
Xcode
。 - 2) 選擇
Window
菜單選項(xiàng)吓肋。 - 3) 選擇
Devices and Simulators
菜單凳怨。
- 4) 選擇
Simulators
選項(xiàng)卡。
您會(huì)看到Xcode隨附的模擬器列表是鬼。 如果您過(guò)去曾經(jīng)下載過(guò)其他運(yùn)行時(shí)肤舞,那么也會(huì)看到這些相關(guān)的模擬器。
現(xiàn)在屑咳,您將使用自定義名稱創(chuàng)建一個(gè)新的模擬器萨赁。
按著這些次序:
- 1) 按下左下方的
+
按鈕弊琴。 - 2) 將模擬器名稱設(shè)置為
Demo
兆龙。 - 3) 選擇
iPhone 12 Pro
作為設(shè)備類型。 - 4) 選擇
iOS 14.2
作為操作系統(tǒng)版本敲董。 - 5) 按
Create
紫皇。
這將創(chuàng)建一個(gè)名為Demo
的新模擬器,您現(xiàn)在可以在模擬器列表中找到它腋寨。
取消選中Demo simulator
的Show as runtime destination
復(fù)選框聪铺。
這隱藏了模擬器。 它不會(huì)顯示在該app scheme
旁邊的模擬器列表中萄窜。
按住Control鍵并單擊Demo
模擬器铃剔。 出現(xiàn)幾個(gè)選項(xiàng)撒桨,例如Delete
和Rename
。
繼續(xù)并通過(guò)單擊Delete
來(lái)刪除Demo simulator
键兜。 不用擔(dān)心 您很快就會(huì)使用其他方法創(chuàng)建它凤类。
1. Running Older Runtimes
有時(shí),您必須在舊版運(yùn)行時(shí)上運(yùn)行您的應(yīng)用普气。
創(chuàng)建新的模擬器時(shí)谜疤,可以通過(guò)在OS版本下拉菜單中選擇Download more runtimes
來(lái)下載較早的運(yùn)行時(shí)。
您也可以從Components
窗口下載更多運(yùn)行時(shí)现诀。 選擇Xcode ? Preferences ? Components
選項(xiàng)夷磕。
該窗口顯示下載的模擬器運(yùn)行時(shí)以及其他可供下載的運(yùn)行時(shí)的列表。
接下來(lái)仔沿,您將學(xué)習(xí)創(chuàng)建模擬器的另一種方法坐桩。
2. Creating Simulators From the Simulator Menu
構(gòu)建并運(yùn)行。
當(dāng)模擬器正在運(yùn)行時(shí)封锉,請(qǐng)按照下列步驟操作:
- 1) 從模擬器菜單中選擇
File ? New Simulator
撕攒。
- 2) 輸入
Demo
作為模擬器名稱。 - 3) 選擇
iPhone 12 Pro
作為Device Type
烘浦。 - 4) 選擇
iOS 14.2
作為版本抖坪。 - 5) 單擊
Create
。
請(qǐng)按照以下步驟打開(kāi)模擬器:
- 1) 從菜單中選擇
File ? Open Simulator
闷叉。 - 2) 選擇
iOS 14.2
運(yùn)行時(shí)擦俐。 - 3) 選擇
Demo
模擬器。
這將啟動(dòng)Demo
模擬器握侧。
那又快又簡(jiǎn)單蚯瞧! 接下來(lái),您將了解模擬器中的各種尺寸選項(xiàng)品擎。
Comparing Simulator Size Options
您可以通過(guò)在四個(gè)角之一中單擊并拖動(dòng)來(lái)調(diào)整模擬器的大小埋合。 Window menu
選項(xiàng)提供四個(gè)縮放選項(xiàng)。
1. Physical Size
物理大小會(huì)調(diào)整模擬器的大小萄传,以匹配實(shí)際的設(shè)備大小甚颂。 這可以直觀地顯示您的應(yīng)用在不同屏幕尺寸下的外觀。
2. Point Accurate
點(diǎn)精確模式可調(diào)整窗口大小秀菱,以便在具有不同比例因子的設(shè)備上內(nèi)容具有相同大小振诬。 結(jié)果,顯示為3x
的設(shè)備上的圖像與2x
顯示器的尺寸相同衍菱。
3. Pixel Accurate
在此模式下赶么,窗口大小更改為與物理設(shè)備相同的像素?cái)?shù)。 模擬設(shè)備上的每個(gè)像素都映射到Mac顯示器上的一個(gè)像素脊串。 如果Mac顯示器的像素密度低于模擬設(shè)備的像素密度辫呻,這會(huì)使模擬器在屏幕上顯得更大清钥。 您可以使用此模式檢查應(yīng)用程序中圖像和控件的對(duì)齊方式。
4. Fit Screen
這會(huì)將模擬器的大小調(diào)整為Mac
顯示器的大小放闺。
接下來(lái)循捺,您將學(xué)習(xí)模擬器中提供的各種選項(xiàng)。
Slow Animations
動(dòng)畫(huà)是應(yīng)用程序體驗(yàn)不可或缺的一部分雄人。 在Demo
模擬器中構(gòu)建并運(yùn)行RayWonders
从橘。
點(diǎn)擊Photos
選項(xiàng)卡。 接下來(lái)础钠,點(diǎn)擊一張世界奇觀的照片恰力,以呈現(xiàn)有關(guān)該地方的詳細(xì)信息。 向下滑動(dòng)以消除視圖旗吁。
要模擬慢速動(dòng)畫(huà)踩萎,請(qǐng)?jiān)?code>Simulator菜單中選擇Debug ? Slow Animations
選項(xiàng)。
再次點(diǎn)擊圖片很钓。 現(xiàn)在香府,視圖動(dòng)畫(huà)緩慢。
緩慢查看動(dòng)畫(huà)有助于提高清晰度码倦。 另外企孩,它可以幫助檢查渲染和性能方面的問(wèn)題。
接下來(lái)袁稽,您將學(xué)習(xí)模擬Dark Mode
勿璃。 在繼續(xù)之前,通過(guò)取消選擇Debug ? Slow Animations
菜單選項(xiàng)來(lái)禁用慢動(dòng)畫(huà)推汽。
1. Dark Mode
Dark Mode可在弱光環(huán)境下提供出色的觀看體驗(yàn)补疑。 模擬器提供了在黑暗模式下查看您的應(yīng)用程序的選項(xiàng)。
選擇Features ? Toggle Appearance
歹撒。 這會(huì)將外觀切換為Dark Mode
莲组。 現(xiàn)在,點(diǎn)擊RayWonders
中的Map
選項(xiàng)卡暖夭。
您會(huì)注意到地圖已更改為深色外觀锹杈。 很簡(jiǎn)單,不是嗎鳞尔? 這是在黑暗模式下測(cè)試應(yīng)用程序的便捷方法嬉橙。
要將外觀改回默認(rèn)設(shè)置早直,請(qǐng)取消選擇Features ? Toggle appearance
寥假。 要了解如何支持暗模式,請(qǐng)查看Supporting Dark Mode: Adapting You App to Support Dark Mode tutorial霞扬。
接下來(lái)糕韧,您將學(xué)習(xí)如何模擬推送通知枫振!
Simulating Push Notifications
推送通知是一種讓用戶知道應(yīng)用程序中新內(nèi)容更新的好方法。 過(guò)去萤彩,測(cè)試推送通知是一個(gè)挑戰(zhàn)粪滤。 您需要物理設(shè)備來(lái)測(cè)試推送通知。 從Xcode 11.4
開(kāi)始雀扶,您可以在模擬器上模擬推送通知杖小。
使用以下命令創(chuàng)建一個(gè)名為RayWondersPushNotification.apns
的文件:
{
"Simulator Target Bundle": "com.raywenderlich.RayWonders",
"aps": {
"alert": {
"title": "Hindi language support added!",
"body": "Checkout RayWonders in Hindi!"
}
}
}
這是帶有title
和body
的簡(jiǎn)單可見(jiàn)的推送通知有效內(nèi)容。 Simulator Target Bundle
是一個(gè)特殊的鍵愚墓。 它指定應(yīng)接收通知的應(yīng)用程序的bundle ID
予权。
在嘗試有payload
之前,您需要首先在應(yīng)用程序中授予通知權(quán)限浪册。
按著這些次序:
- 1) 在
Demo
模擬器中打開(kāi)RayWonders
扫腺。 - 2) 在
Photos
選項(xiàng)卡中,點(diǎn)擊右上角的響鈴圖標(biāo)村象。 - 3) 在通知權(quán)限提示中選擇
Allow
笆环。 - 4) 從
Simulator menu
中選擇Device ? Home
,將應(yīng)用程序置于后臺(tái)厚者。
接下來(lái)躁劣,將RayWondersPushNotification.apns
文件拖放到Demo
模擬器上。
出現(xiàn)一個(gè)可見(jiàn)的推送通知库菲。 那很簡(jiǎn)單习绢! 請(qǐng)記住,模擬器只能模擬推送通知蝙昙。 要測(cè)試從Apple推送通知服務(wù)器收到的實(shí)際推送通知闪萄,需要使用物理設(shè)備。
要更深入地了解推送通知奇颠,請(qǐng)閱讀 Push Notifications Tutorial: Getting Started知市。
接下來(lái),您將學(xué)習(xí)如何縮放置鼻。
Zooming In and Out
在模擬器中打開(kāi)RayWonders
陋桂。 切換到Map
標(biāo)簽。 地圖以世界奇觀為中心并放大荆几。 世界其他奇跡在哪里吓妆?
您需要縮小以查看全景。 在按住Option
鍵的同時(shí)單擊并拖動(dòng)吨铸。
單擊和拖動(dòng)很棒行拢,但是很快就會(huì)變得很累。 接下來(lái)诞吱,您將學(xué)到一種更快的去往某個(gè)地點(diǎn)的方法舟奠。
Simulating a Location
模擬器提供了一種簡(jiǎn)單的方法來(lái)模擬位置竭缝。 首先,您需要在RayWonders
中授予位置權(quán)限沼瘫。
按著這些次序:
- 1) 在模擬器中打開(kāi)
RayWonders
并切換到Map
選項(xiàng)卡抬纸。 - 2) 點(diǎn)擊
Map
選項(xiàng)卡中的Start Location Services
按鈕。 - 3) 選擇
Allow While Using App
權(quán)限耿戚。
現(xiàn)在湿故,要模擬位置:
- 1) 從模擬器菜單中選擇
Features ? Location ? Custom Location
。
- 2) 輸入
41.8902142
作為緯度膜蛔,輸入12.4900422
作為經(jīng)度晓锻。 - 3) 單擊
OK
。
這會(huì)將您直接帶到地圖上的羅馬競(jìng)技場(chǎng)-您有史以來(lái)最快的旅程飞几!
但是砚哆,輸入要模擬的每個(gè)位置的坐標(biāo)都需要占用大量?jī)?nèi)存,即您的內(nèi)存即任務(wù)屑墨。 接下來(lái)躁锁,您將學(xué)到解決此問(wèn)題的簡(jiǎn)便方法。
1. Sharing Locations From the Maps App
macOS
上的Maps
應(yīng)用程序提供了一種與模擬器共享位置的簡(jiǎn)便方法卵史。
按著這些次序:
- 1) 打開(kāi)
Maps
應(yīng)用战转。 - 2) 在搜索文本中輸入
Machu Picchu
。 - 3) 單擊搜索字段旁邊的
Share
按鈕以躯。 - 4) 從下拉菜單中選擇
Simulator
槐秧。 - 5) 在位置提示中,選擇
Demo
作為模擬器忧设。
- 6) 單擊
Send
刁标。
您現(xiàn)在位于模擬器的地圖視圖中的Machu Picchu
。
恭喜你址晕! 您剛剛創(chuàng)造了從羅馬斗獸場(chǎng)到Machu Picchu
旅行最快的世界紀(jì)錄膀懈!
要了解有關(guān)更深入地處理應(yīng)用中位置的信息,請(qǐng)查看 MapKit and Core Location谨垃。
現(xiàn)在启搂,該改變一下了。
Simulating Shake Gesture
搖動(dòng)手勢(shì)(Shake gestures)
是提示用戶在應(yīng)用程序中提供反饋的絕佳線索刘陶。 但是胳赌,如何搖動(dòng)模擬器? 幸運(yùn)的是匙隔,嚴(yán)格搖動(dòng)Mac
不是解決方案疑苫。 模擬器提供了一種簡(jiǎn)單的方法。
在Demo
模擬器上打開(kāi)RayWonders
。 從Simulator
菜單中選擇Device ? Shake
缀匕。
這模擬了搖動(dòng)手勢(shì)纳决。
RayWonders
會(huì)檢測(cè)到晃動(dòng)并向用戶提示alert
碰逸。 您可以通過(guò)實(shí)現(xiàn)motionEnded(_:with :)
方法來(lái)檢測(cè)和處理應(yīng)用中的搖動(dòng)手勢(shì)乡小。 要了解更多信息,請(qǐng)查閱Apple documentation饵史。
接下來(lái)满钟,您將學(xué)習(xí)如何模擬內(nèi)存警告。
Simulating a Memory Warning
當(dāng)iOS的內(nèi)存使用量接近設(shè)備的上限時(shí)胳喷,iOS會(huì)向該應(yīng)用發(fā)送警告湃番。 應(yīng)用程序需要通過(guò)清除緩存數(shù)據(jù)做出響應(yīng),該數(shù)據(jù)可以在以后重新創(chuàng)建吭露。
在演示模擬器上打開(kāi)RayWonders
吠撮。 從菜單中選擇Debug ? Simulate Memory Warning
。
這模擬了內(nèi)存警告讲竿。
RayWonders
顯示alert
泥兰。 您可以在Responding to Memory Warnings Apple文檔中了解有關(guān)處理內(nèi)存警告的更多信息。
到目前為止题禀,您已經(jīng)看到了一些有用的模擬器選項(xiàng)鞋诗。 本教程未涵蓋其他幾項(xiàng)。 您應(yīng)該根據(jù)自己的應(yīng)用需求將其簽出迈嘹。 其中一些選項(xiàng)包括:
- 使用
Features ? Trigger iCloud Sync
來(lái)模擬iCloud
同步削彬。 - 使用
Features ? Authorize Apple Pay
來(lái)模擬Apple Pay
授權(quán)。 - 使用
Device ? Siri
觸發(fā)Siri
秀仲。 - 使用
Debug ? Open System Log
檢查系統(tǒng)日志融痛。
接下來(lái),您將學(xué)習(xí)使用命令行與模擬器進(jìn)行交互神僵。
Organizing Simulators Using the Command Line
到目前為止酌心,您已經(jīng)使用Xcode
創(chuàng)建和管理了模擬器。 此外挑豌,您還了解了各種Simulator
菜單選項(xiàng)安券。 現(xiàn)在,您將學(xué)習(xí)從命令行管理和使用模擬器氓英。
打開(kāi)終端侯勉。 輸入以下命令:
xcrun simctl --help
然后按Enter
。
help
選項(xiàng)提供了使用simctl
可用的所有子命令的列表铝阐。
Simctl
是幫助管理模擬器并以編程方式與模擬器交互的工具址貌。 您可以使用xcrun
命令行工具訪問(wèn)simctl
。
現(xiàn)在,您將探索其中的幾個(gè)子命令练对。 運(yùn)行以下命令:
xcrun simctl list
list
命令顯示所有可用設(shè)備和運(yùn)行時(shí)的列表遍蟋。
它還顯示了設(shè)備的當(dāng)前狀態(tài),無(wú)論是Booted
還是Shutdown
螟凭。
接下來(lái)虚青,您將學(xué)習(xí)從命令行創(chuàng)建和啟動(dòng)模擬器。
1. Creating Simulator From the Command Line
在創(chuàng)建新模擬器之前螺男,請(qǐng)刪除通過(guò)Xcode
創(chuàng)建的Demo
模擬器棒厘。 輸入以下內(nèi)容:
xcrun simctl delete Demo
delete
命令標(biāo)識(shí)一個(gè)模擬器并將其刪除。 現(xiàn)在下隧,從命令行創(chuàng)建一個(gè)新的模擬器奢人。
輸入以下內(nèi)容:
xcrun simctl create Demo "iPhone 12 Pro" "iOS14.2"
create
命令接受設(shè)備類型和運(yùn)行時(shí),并創(chuàng)建模擬器淆院。 這將創(chuàng)建具有iOS 14.2
運(yùn)行時(shí)的iPhone 12 Pro
模擬器何乎。
現(xiàn)在,終端顯示新設(shè)備的唯一標(biāo)識(shí)符土辩。
輸入以下內(nèi)容:
xcrun simctl boot Demo
啟動(dòng)演示模擬器支救。 默認(rèn)情況下,它處于關(guān)機(jī)(Shutdown)
狀態(tài)脯燃。
現(xiàn)在搂妻,使用命令行安裝RayWonders
。 您首先需要該app bundle
辕棚。 按著這些次序:
- 1) 打開(kāi)“項(xiàng)目”導(dǎo)航器欲主,然后選擇
Products
文件夾中的RayWonders.app
- 2) 右鍵單擊并選擇在
Finder
中顯示。
- 3) 將
RayWonders
復(fù)制到您的主目錄逝嚎。
打開(kāi)終端并通過(guò)輸入以下內(nèi)容導(dǎo)航到主目錄:
cd ~
接下來(lái)扁瓢,運(yùn)行以下命令:
xcrun simctl install Demo RayWonders.app
install
命令將RayWonders
安裝在模擬器上。 很好补君!
您甚至可以使用simctl
啟動(dòng)該應(yīng)用程序引几。 輸入以下內(nèi)容:
xcrun simctl launch Demo com.raywenderlich.RayWonders
啟動(dòng)(launch)
命令將app bundle ID
作為參數(shù)。 RayWonders
在Demo
模擬器中啟動(dòng)挽铁。
恭喜你伟桅! 現(xiàn)在,您已經(jīng)從命令行創(chuàng)建叽掘,啟動(dòng)楣铁,安裝并啟動(dòng)了模擬器。 您可以嘗試以下其他選項(xiàng):
-
terminate:這將使用
bundle identifier
終止應(yīng)用程序更扁。 - erase:這將擦除設(shè)備內(nèi)容盖腕。
-
uninstall:這將卸載應(yīng)用程序赫冬。 您需要指定應(yīng)用程序的
bundle identifier
。
接下來(lái)溃列,您將學(xué)習(xí)一些適用于您的應(yīng)用的出色命令劲厌。
2. Taking Screenshots
您的應(yīng)用的屏幕截圖在幾種情況下很有用。 例如听隐,在AppStore
中提交應(yīng)用程序時(shí)需要截圖补鼻。
輸入以下命令:
xcrun simctl io Demo screenshot screenshot.png --type="png"
這將獲取當(dāng)前屏幕的屏幕截圖,并將其保存到文件screenshot.png
中遵绰。 除了png
外辽幌,screenshot
命令還支持其他文件格式增淹,例如TIFF椿访,BMP,GIF和JPEG
虑润。
屏幕快照可以顯示您的應(yīng)用程序的外觀成玫,而一張圖片值一千字。 但是拳喻,視頻的價(jià)值更高哭当。
3. Recording Video
您可以使用simctl
錄制應(yīng)用程序的視頻。 要開(kāi)始記錄冗澈,請(qǐng)輸入以下命令:
xcrun simctl io Demo recordVideo Demo.mov --codec="h264"
在模擬器上與RayWonders
進(jìn)行交互钦勘。 完成后,在終端中按Control-C
亚亲。 這會(huì)將視頻保存在Demo.mov
中彻采。
另外,您可以在錄制時(shí)指定所需的編解碼器捌归。 默認(rèn)編解碼器為hevc
肛响。
recordVideo
命令有助于避免使用QuickTime
播放器錄制應(yīng)用程序的視頻。
4. Customizing the Status Bar
在模擬器中檢查應(yīng)用程序的狀態(tài)欄惜索。 您會(huì)看到電池已充滿特笋,設(shè)備具有最佳信號(hào),并且模擬器上的時(shí)間是本地Mac時(shí)間巾兆。 如果要覆蓋這些內(nèi)容怎么辦猎物?
在終端中輸入以下命令:
xcrun simctl status_bar Demo override \
--dataNetwork 4g --cellularBars 2 --batteryState charging \
--batteryLevel 25 --time 12:05
這會(huì)覆蓋要設(shè)置的狀態(tài)欄:
- 數(shù)據(jù)網(wǎng)絡(luò)為4G
- 蜂窩信號(hào)到兩個(gè)條形圖
- 電池狀態(tài)為充電狀態(tài),電池電量為25%
- 在模擬器上的時(shí)間為12:05
在自己的項(xiàng)目中執(zhí)行此操作時(shí)角塑,可以將狀態(tài)欄信息設(shè)置為所需的任何內(nèi)容蔫磨。
當(dāng)您要自定義應(yīng)用屏幕截圖和視頻的外觀時(shí),status_bar
命令可能非常方便吉拳。
完成后质帅,通過(guò)輸入以下命令將狀態(tài)欄恢復(fù)為默認(rèn)外觀:
xcrun simctl status_bar Demo clear
Debugging and Diagnosing
Simctl
還提供了一些命令來(lái)幫助調(diào)試和診斷問(wèn)題。
返回終端,然后輸入以下內(nèi)容:
xcrun simctl get_app_container Demo com.raywenderlich.RayWonders
get_app_container
打印app bundle
的路徑煤惩。
您可以使用此路徑檢查應(yīng)用容器中的數(shù)據(jù)嫉嘀。 此外,在調(diào)試問(wèn)題時(shí)魄揉,模擬器日志確實(shí)非常有用剪侮。
現(xiàn)在,在終端中鍵入以下內(nèi)容:
xcrun simctl spawn Demo log stream
這將開(kāi)始從Demo
模擬器流式傳輸所有日志洛退。
但是瓣俯,這可能是要檢查的數(shù)據(jù)過(guò)多。 按Control-C
停止流兵怯。
請(qǐng)嘗試以下操作:
xcrun simctl spawn Demo log stream | grep com.raywenderlich.RayWonders
這將過(guò)濾日志并僅顯示來(lái)自RayWonders
的日志彩匕。
與應(yīng)用互動(dòng)時(shí),您會(huì)在終端中看到更多日志媒区。 在提交bug
或向Apple提供反饋時(shí)驼仪,這些日志非常有用。
輸入以下內(nèi)容:
xcrun simctl diagnose
diagnose
命令收集一堆數(shù)據(jù)袜漩,包括日志和崩潰绪爸。 它還會(huì)生成可幫助Apple調(diào)試問(wèn)題的文件。 默認(rèn)情況下宙攻,收集的日志用于引導(dǎo)的設(shè)備奠货。 通過(guò)指定設(shè)備的UDID
,您可以將日志收集限制到該特定設(shè)備座掘。
您現(xiàn)在已成為模擬器命令行專家递惋! 您可以通過(guò)使用Bash
腳本自動(dòng)執(zhí)行常見(jiàn)操作來(lái)更進(jìn)一步。
Automating Using a Bash Script
現(xiàn)在雹顺,您將創(chuàng)建一個(gè)腳本來(lái)克隆模擬器并在其他區(qū)域啟動(dòng)RayWonders
丹墨。
首先,打開(kāi)終端嬉愧,然后輸入以下內(nèi)容:
touch sim_utility.sh
這將創(chuàng)建一個(gè)名為sim_utility
的新文件贩挣。 .sh
擴(kuò)展名表示它是一個(gè)shell
腳本。
注意:您可以在文件系統(tǒng)中的任何位置創(chuàng)建腳本没酣。 為了便于示例項(xiàng)目的組織王财,該腳本位于
“Scripts”
文件夾下。
接下來(lái)裕便,運(yùn)行:
chmod +x sim_utility.sh
這使sim_utility.sh
可執(zhí)行绒净,因此您可以運(yùn)行它。
在編輯器中打開(kāi)sim_utility.sh
偿衰,并添加以下內(nèi)容:
#!/bin/bash
#1
COMMAND="$1"
SIMULATOR_NAME="$2"
#2
get_id_of_simulator() {
#TODO
}
get_status_of_simulator() {
#TODO
}
launch() {
#TODO
}
#3
case $COMMAND in
"launch") launch "$3" "$4" "$5" ;;
*)
launch_help
exit 1
;;
esac
這是怎么回事:
- 1) 該腳本采用命令名稱和模擬器名稱作為命令行參數(shù)挂疆。
- 2)
get_id_of_simulator改览,get_status_of_simulator
和launch
是接下來(lái)要實(shí)現(xiàn)的空存根。 - 3) 該腳本當(dāng)前支持一個(gè)名為
launch
的命令缤言。 此launch
使用三個(gè)附加參數(shù)宝当,您將很快實(shí)現(xiàn)這些參數(shù)。
在get_id_of_simulator
中胆萧,將#TODO
替換為以下內(nèi)容:
xcrun simctl list | grep "$SIMULATOR_NAME" | \
awk 'match($0, /\(([-0-9A-F]+)\)/) {print substr( $0, RSTART + 1, RLENGTH-2 )}'
get_id_of_simulator
搜索模擬器列表以匹配指定為參數(shù)的名稱庆揩。 如果找到匹配項(xiàng),則子字符串操作將獲得模擬器的唯一標(biāo)識(shí)符跌穗。
在get_status_of_simulator
方法中订晌,將#TODO
替換為以下內(nèi)容:
xcrun simctl list | grep "$SIMULATOR_NAME" | \
awk 'match($0, /\(([a-zA-Z]+)\)/) {print substr( $0, RSTART + 1, RLENGTH - 2 )}'
get_status_of_simulator
在設(shè)備列表中搜索名稱匹配的模擬器。 如果找到匹配項(xiàng)蚌吸,它將獲得模擬器的狀態(tài) —— booted
或shutdown
锈拨。 您將在launch
中使用它們。
1. Implementing Launch
在launch
時(shí)套利,將#TODO
替換為以下內(nèi)容:
#1
BUNDLE_ID="$1"
LOCALE="$2"
LANGUAGE="$3"
CLONE_NAME="$LOCALE"
#2
SIMULATOR_ID=$(get_id_of_simulator)
if [ -z "$SIMULATOR_ID" ]; then
echo "No device matching the name: $SIMULATOR_NAME"
return
fi
echo "Simulator id: $SIMULATOR_ID"
echo "Bundle id: $BUNDLE_ID"
echo "Locale: $LOCALE"
#3
SIMULATOR_STATUS=$(get_status_of_simulator)
echo "Simulator Status: $SIMULATOR_STATUS"
if [ "$SIMULATOR_STATUS" = "Booted" ]; then
echo "Making sure the device is shutdown first..."
xcrun simctl shutdown "$SIMULATOR_NAME"
fi
#4
echo "Cloning the device with name $LOCALE..."
xcrun simctl clone "$SIMULATOR_NAME" "$CLONE_NAME"
#5
echo "Booting device..."
xcrun simctl boot "$SIMULATOR_NAME"
xcrun simctl boot "$CLONE_NAME"
#6
echo "Launching app..."
xcrun simctl launch "$SIMULATOR_NAME" "$BUNDLE_ID"
#7
xcrun simctl launch "$CLONE_NAME" "$BUNDLE_ID" -AppleLocale "$LOCALE" \
-AppleLanguages "($LANGUAGE)"
保存文件推励。這是逐步執(zhí)行的操作鹤耍。它:
- 1) 提供其他
launch
參數(shù)肉迫,包括應(yīng)用程序的bundle ID
,語(yǔ)言環(huán)境和啟動(dòng)應(yīng)用程序所使用的語(yǔ)言稿黄。它聲明一個(gè)本地變量CLONE_NAME
喊衫,它是克隆設(shè)備的名稱。在這種情況下杆怕,克隆設(shè)備的名稱就是您指定的語(yǔ)言環(huán)境族购; - 2) 通過(guò)調(diào)用
get_id_of_simulator
來(lái)獲取模擬器的ID。然后陵珍,將結(jié)果存儲(chǔ)在SIMULATOR_ID
中寝杖。如果沒(méi)有匹配的模擬器,則退出程序互纯。 - 3) 通過(guò)調(diào)用
get_status_of_simulator
獲取模擬器的狀態(tài)瑟幕。如果狀態(tài)為Booted
,則它將運(yùn)行shutdown
命令將其關(guān)閉留潦。要克隆只盹,必須關(guān)閉設(shè)備。 - 4) 使用
clone
命令克隆模擬器兔院; - 5) 使用
boot
命令引導(dǎo)原始模擬器和克隆的模擬器殖卑; - 6) 使用
launch
命令在原始模擬器上啟動(dòng)應(yīng)用程序; - 7) 使用克隆的模擬器上的
launch
命令啟動(dòng)應(yīng)用程序坊萝。它指定啟動(dòng)應(yīng)用程序的語(yǔ)言環(huán)境和語(yǔ)言孵稽。
2. Launching RayWonders in a Different Locale
打開(kāi)終端许起,然后運(yùn)行以下命令:
./sim_utility.sh launch Demo com.raywenderlich.RayWonders hi_IN hi
RayWonders
在印地語(yǔ)上使用克隆的模擬器hi_IN
啟動(dòng)。
無(wú)需再進(jìn)行設(shè)置并切換設(shè)備語(yǔ)言來(lái)測(cè)試您的應(yīng)用菩鲜。 現(xiàn)在街氢,您可以同時(shí)以多種語(yǔ)言查看您的應(yīng)用。 很好睦袖!
注意:如果在運(yùn)行腳本時(shí)遇到問(wèn)題珊肃,請(qǐng)確保只有一個(gè)名為
Demo
的模擬器。 您可以通過(guò)運(yùn)行xcrun simctl list | grep Demo
檢查可用的模擬器數(shù)量馅笙。刪除所有重復(fù)的模擬器伦乔,然后重試。
RayWonders
還支持其他幾種語(yǔ)言董习。 運(yùn)行以下命令:
./sim_utility.sh launch Demo com.raywenderlich.RayWonders ja_Jp ja
RayWonders
現(xiàn)在在新的模擬器上以日語(yǔ)啟動(dòng)烈和。
作為一個(gè)有趣的挑戰(zhàn),在sim_utility
腳本中實(shí)現(xiàn)另外兩個(gè)命令皿淋。
- Cleanup:這將刪除給定模擬器名稱的模擬器招刹。
- Help:這將打印腳本支持的所有命令的菜單。
您可以在下載資料的Scripts
文件夾中找到該腳本的最終版本以及所有這些選項(xiàng)窝趣。
在本教程中疯暑,您學(xué)習(xí)了很多有用的模擬器和命令行選項(xiàng)。 要了解更多信息哑舒,請(qǐng)觀看以下WWDC視頻:
后記
本篇主要講述了
Xcode Simulator
的高級(jí)功能妇拯,感興趣的給個(gè)贊或者關(guān)注~~~