版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2021.03.24 星期三 |
前言
程序總會有bug蝇恶,如果有好的調(diào)試技巧和方法镣典,那么就是事半功倍膳叨,這個專題專門和大家分享下和調(diào)試相關(guān)的技巧婶溯。希望可以幫助到大家间景。感興趣的可以看下面幾篇文章佃声。
1. 程序調(diào)試 (一) —— App Crash的調(diào)試和解決示例(一)
2. 程序調(diào)試 (二) —— Xcode Simulator的高級功能(一)
3. 程序調(diào)試 (三) —— Xcode Simulator的高級功能(二)
開始
首先我們看下寫作內(nèi)容:
了解如何釋放
Xcode
在緩存,derived data
倘要,archives
和simulators
中占用的空間圾亏。內(nèi)容來自翻譯。
下面就是寫作環(huán)境了
Swift 5, iOS 14, Xcode 12
接著就是正文啦
Xcode
不僅僅是普通的舊文本編輯器封拧。 還是功能完善的集成開發(fā)環(huán)境(Integrated Development Environment (IDE))
志鹃。
使用IDE
進行iOS
開發(fā)具有許多好處。 Xcode使構(gòu)建項目泽西,調(diào)試項目和對最終應(yīng)用程序進行代碼簽名變得容易曹铃。
但是,IDE
提供的所有功能都會占用Mac
存儲空間尝苇。 全新安裝的Xcode
在Mac上需要11 GB
铛只。 但是那11 GB
只是冰山一角。 盡管具有良好的品質(zhì)糠溜,Xcode
還是臭名昭著的存儲豬。
隨著時間的推移直撤,Xcode
的存儲容量在考慮其一些工具和目錄時會膨脹:
Derived data
Caches
Old archives
Unavailable simulators
Device support files
更糟糕的是非竿,這些保存的數(shù)據(jù)不僅會吞噬Mac的寶貴存儲空間。它也可能是奇怪的bug
和編譯問題的來源谋竖。
如果在構(gòu)建應(yīng)用程序時看到奇怪的行為红柱,則清除諸如derived data and caches
之類的文件夾可以幫助恢復(fù)正常狀態(tài)。甚至Xcode
有時也需要進行大清除蓖乘。
注意:在
Mac
上刪除Xcode
的數(shù)據(jù)時锤悄,請務(wù)必小心。除非您確定Xcode
可以正常使用嘉抒,否則請勿刪除任何內(nèi)容零聚。本教程將為您提供何時以及為何刪除Xcode支持文件的專業(yè)知識。
在本教程中些侍,您將詳細了解每個目錄的用途以及為什么要清除它隶症。
了解每個目錄的作用后,您將編寫一個腳本來幫助使Mac
保持最佳狀態(tài)岗宣。
因此蚂会,準備收回一些久違的Mac
存儲!
首先耗式,在Xcode中打開starter
項目胁住。 確保選擇一個模擬器作為構(gòu)建target
趁猴,然后進行構(gòu)建和運行。
通過使用NASA
的Astronomy Picture of the Day API
彪见,Stellar Space
可以顯示NASA
拍攝的圖像躲叼,供用戶選擇并保存到其設(shè)備中。
保存到iOS模擬器的圖像會使用Mac
上的存儲空間企巢。 清除存儲空間是您在本教程中將學(xué)習(xí)的內(nèi)容之一枫慷。
之前,當您構(gòu)建Stellar Space
時浪规,Xcode
保存了一些緩存并構(gòu)建了文件或听。 接下來,將其清除笋婿。
Clearing Derived Data
當您構(gòu)建項目時誉裆,Xcode
會在derived data
中存儲該項目的構(gòu)建文件。 您將在macOS
用戶庫中找到派生數(shù)據(jù)文件夾(derived data folder)
缸濒。
要查找您的派生數(shù)據(jù)文件夾足丢,請打開一個新的Finder
窗口。 在Finder
菜單欄中庇配,選擇Go ? Go to Folder…
斩跌。
在這里,鍵入您的派生數(shù)據(jù)文件夾的位置:
~/Library/Developer/Xcode/DerivedData
點擊Go
將Finder
窗口的路徑更改為DerivedData
捞慌。
您的派生數(shù)據(jù)包含ModuleCache.noindex
文件夾以及您在Xcode中構(gòu)建的任何項目的文件夾耀鸦,例如Stellar Space
。
ModuleCache.index
存儲Xcode
之前編譯的模塊啸澡。 Xcode
在項目和構(gòu)建之間共享這些緩存的模塊袖订,以縮短構(gòu)建時間。
同樣嗅虏,單個項目文件夾也可以縮短構(gòu)建時間洛姑。在Stellar Space
文件夾中,您會找到Xcode
上次構(gòu)建Stellar Space
時生成的支持文件皮服。
1. When to Delete Derived Data
DerivedData
中的所有內(nèi)容都可以安全刪除楞艾。實際上,清除派生數(shù)據(jù)是解決iOS
開發(fā)人員討厭的編譯問題的常見技巧冰更。
盡管刪除派生數(shù)據(jù)是安全的产徊,但是Xcode
從頭開始構(gòu)建項目時,下次構(gòu)建將花費更長的時間蜀细。
2. Deleting Derived Data
清除派生數(shù)據(jù)就像從Finder
中刪除整個文件夾一樣簡單舟铜。接下來,如果您要保留構(gòu)建時間特別長的其他任何應(yīng)用程序的數(shù)據(jù)奠衔,則僅刪除Stellar Space
文件夾谆刨。
在Finder
窗口中塘娶,查找Stellar Space
的派生數(shù)據(jù)。
我的被命名為Stellar_Space-gmjdilbusvnhawfcpcbkkdqfsiuv
痊夭,但是您的會有所不同刁岸。
右鍵單擊Stellar_Space
文件夾,然后選擇Move to Trash
將其刪除她我。
注意:根據(jù)Mac上的語言設(shè)置虹曙,菜單選項可能顯示
Move to Bin
或其他一些本地化的選項。
這樣番舆,您就清除了Stellar Space
的派生數(shù)據(jù)酝碳。 切記:要刪除所有派生數(shù)據(jù),您需要刪除整個DerivedData
文件夾恨狈。
這將清除您構(gòu)建的Stellar Space
的debug
版本疏哗。 但是archived release
版本存儲在其他位置。
Clearing Archives
每當您archive
要在TestFlight
或App Store
上distribution
的應(yīng)用程序時,該archive
都將本地存儲在Mac
上。 您可能有多年的archive
等待清理粗合。
在本部分中,您將archive
Stellar Space
芽偏,然后從Mac
中刪除該存檔,以節(jié)省寶貴的存儲空間牲证。 但是首先哮针,您需要準備Stellar Space
進行代碼簽名。
1. Archiving Stellar Space
在Xcode
中坦袍,請按照以下步驟操作,以獲取Stellar Space
的Signing and Capabilities
設(shè)置:
- 1) 在項目導(dǎo)航器中等太,選擇
Stellar Space
捂齐。 - 2) 在
Targets
下選擇Stellar Space
。 - 3) 選擇
Signing & Capabilities
選項卡缩抡。
當前奠宜,用于archive Stellar Space
的Team
設(shè)置為None
。 將Team
的值更改為您自己的Apple Developer
帳戶的值瞻想。
注意:如果您沒有
Apple Developer
帳戶压真,可以在這里使用,請不要擔心蘑险。 您可以在不archiving Stellar Space
的情況下繼續(xù)閱讀滴肿。
在為模擬器構(gòu)建應(yīng)用時,您無法archive
應(yīng)用佃迄,因此請將運行run
目標更改為Any iOS Device (arm64)
:
現(xiàn)在泼差,您就可以archive
該應(yīng)用了贵少。 在Xcode
的菜單欄中,選擇Product ? Archive
堆缘。
如果出現(xiàn)提示滔灶,請輸入您的macOS
用戶的密碼:
Xcode
構(gòu)建完成后,Archives
窗口將打開并顯示結(jié)果吼肥。
Xcode
創(chuàng)建了您的archive
录平。 實際的.xcarchive
文件夾位于Mac
上的?/ Library / Developer / Xcode / Archives
中。
2. Clearing the Archived Build
要打開archives
文件夾缀皱,請打開Finder
窗口斗这。 在Finder
菜單欄中,單擊Go ? Go to Folder…
唆鸡,然后輸入archives
文件夾的路徑:
點擊Go
每個archive
都存儲在一個子文件夾中涝影,該子文件夾以創(chuàng)建日期的日期命名。 打開今天的文件夾争占,查看您之前創(chuàng)建的Stellar Space archive
燃逻。
右鍵單擊.xcarchive
,然后選擇Move to Trash
臂痕。
您已刪除archive
伯襟,節(jié)省了少量的磁盤空間。但是握童,archive
文件夾中可能有千兆字節(jié)的.xcarchives
姆怪。什么時候可以安全清除它們?
3. When to Clear Archives
與derived data
不同澡绩,archives
不會影響您的未來構(gòu)建稽揭。它們是構(gòu)建應(yīng)用程序的最終產(chǎn)品,因此不會以任何方式加快編譯速度肥卡。但這并不意味著只要空間不足溪掀,就可以清除archives
文件夾。
有時步鉴,保存舊archives
可能是一個好主意揪胃。如果您需要重新發(fā)布舊的archives
文件,則需要存儲在archives
文件夾中的.xcarchive
氛琢。
另外喊递,調(diào)試應(yīng)用的指定版本需要將archive
文件中打包的一個稱為dSYM
的文件。
因此阳似,一個很好的建議是不要刪除當前正在運行的應(yīng)用程序版本的任何archive
骚勘,也不要刪除以后可能要使用的舊archive
!
在將您的應(yīng)用archive
到Xcode
中之前障般,您可能會在模擬器上運行它以測試您的應(yīng)用调鲸。接下來盛杰,您將學(xué)習(xí)如何清除這些模擬器并刪除舊數(shù)據(jù)。
Clearing Simulators
在其中一個模擬器上安裝Stellar Space
時藐石,它將占用您計算機上的一些空間即供。 Stellar Space
還可以將圖像保存到模擬器的照片庫中,從而占用更多空間于微。
有時逗嫡,您可能還想像新用戶一樣測試應(yīng)用程序。這意味著從全新的模擬器開始株依。因此驱证,清除這些模擬器可以幫助使Mac
保持最佳狀態(tài)。
1. Storing Simulator Data
在清除模擬器之前恋腕,您需要運行Stellar Space
抹锄,以便清除某些內(nèi)容。
在Xcode
中荠藤,確保將運行目標設(shè)置為您的模擬器之一:
構(gòu)建并運行Stellar Space
難道不是每個人都喜歡令人敬畏的宇宙圖像嗎伙单? 繼續(xù)并點擊Save
,將今天的圖像保存到模擬器的Photos
中哈肖。
當iOS
提示您授予訪問照片的權(quán)限時吻育,點按OK
。
點按Back
可以查看昨天的當天照片淤井,并可以隨意探索更多內(nèi)容布疼。 通過點擊Save
來保存您喜歡的照片。
完成后币狠,從模擬器底部向上滑動以進入主屏幕游两。 或者,您也可以選擇Device ? Home
或按鍵盤上的Command-Shift-H
漩绵。
接下來器罐,打開Photos
。 您可能需要滑動到其他Home tab
才能找到Photos
圖標渐行。
在這里,您會看到保存在模擬器上的所有圖像铸董。
在iPhone
上刪除應(yīng)用程序并不會刪除該應(yīng)用程序可能已存儲在其他位置的所有數(shù)據(jù)祟印,例如文件,照片或Core Data數(shù)據(jù)庫粟害。 為此蕴忆,您需要刪除模擬器的內(nèi)容。
注意:如果您不喜歡在模擬器上清除數(shù)據(jù)悲幅,請隨時跳過下一部分的說明套鹅,繼續(xù)閱讀站蝠!
2. Erasing Simulator Content
擦除模擬器會將其還原為出廠內(nèi)容和設(shè)置,并刪除存儲在其上的所有應(yīng)用程序或數(shù)據(jù)卓鹿。
打開模擬器后菱魔,在菜單欄中單擊Device ? Erase All Content and Settings…
。
如果您準備丟失該模擬器上的數(shù)據(jù)吟孙,請單擊Erase
澜倦。
等待模擬器重啟。 完成后杰妓,再次打開Photos
藻治。
您可以在任何模擬器上找到默認照片,隨時可以重新開始測試巷挥!
擦除模擬器內(nèi)容有助于清潔您可以訪問的模擬器桩卵。 但是您可能會失去甚至看不到的模擬器的大量存儲空間。
3. Deleting Unavailable Simulators
如果您一段時間以來一直在開發(fā)iOS應(yīng)用倍宾,那么您可能已經(jīng)經(jīng)歷了幾個模擬器的周期雏节。
當Apple
發(fā)行新的iPhone
時,通常會附帶新版本的Xcode
和iOS
凿宾。 這些新的iPhone需要自己的模擬器矾屯,而較舊的模擬器已過時。 如果您有舊的無法使用的模擬器初厚,則它們可能正在Mac
上使用存儲件蚕。
要一次清除所有不可用的模擬器,需要執(zhí)行終端命令产禾。
打開Terminal.app
排作。 然后,輸入以下命令:
xcrun simctl delete unavailable
按Enter
如果沒有可用的模擬器亚情,則會顯示一條輸出妄痪,告訴您已清除的內(nèi)容。 如果輸出為空白(如上一個屏幕截圖所示)楞件,則說明您在定期刪除舊模擬器方面做得很好衫生。
與不可用的模擬器一樣,您的Mac也存儲了舊iOS
版本的支持文件土浸。 使用時罪针,您可以清除所有不再需要的支持文件,以騰出一些空間黄伊。
Device Support
當您將物理設(shè)備連接到Mac以安裝或調(diào)試其中一個應(yīng)用程序時泪酱,Xcode
會創(chuàng)建device support
文件。 Xcode使用這些文件來支持開發(fā)人員功能,例如查看崩潰日志墓阀。
設(shè)備支持device support
文件特定于每個iOS
版本毡惜,甚至是次要版本。 因此斯撮,如果您經(jīng)常構(gòu)建設(shè)備经伙,則可能具有適用于iOS 14.1、14.2吮成、14.2.1
等的支持文件橱乱。
Xcode
永遠不會為您刪除這些文件,因此它們會隨著時間的流逝逐漸建立粱甫。 幸運的是泳叠,自己刪除它們沒有任何危害。 每當您使用物理設(shè)備時茶宵,Xcode都會自動安裝設(shè)備支持文件危纫。
1. Finding Device Support Files
要查找您的iOS設(shè)備支持文件,請打開一個新的Finder
窗口乌庶。 在Finder
菜單欄中种蝶,選擇Go ? Go to Folder…
,然后輸入以下路徑:
~/Library/Developer/Xcode/iOS DeviceSupport
點擊Go
這些支持文件在Mac
上的使用量高達11 GB
瞒大,這是進行清理的主要選擇螃征。一個很好的建議是刪除iOS DeviceSupport
文件夾中除最新的兩個iOS版本外的所有版本,因為您可能仍會支持這些版本透敌。
該文件夾僅用于iOS設(shè)備支持盯滚,但是watchOS
和tvOS
遵循類似的模式。
2. Other Platforms
與iOS
文件一樣酗电,您可以在?/ Library / Developer / Xcode / watchOS DeviceSupport
中找到watchOS
支持文件魄藕。 Xcode
將tvOS
設(shè)備支持文件存儲在?/ Library / Developer / Xcode / tvOS DeviceSupport
中。
如果您尚未出于開發(fā)目的將Apple Watch
連接到Mac
撵术,則將沒有watchOS DeviceSupport
文件夾背率。同樣適用于iOS
和tvOS
。
Caches
尋找空間節(jié)省的最后一個地方是各種緩存嫩与。
緩存存儲數(shù)據(jù)寝姿,因此使用緩存的程序可以運行得更快,而無需重新計算緩存中的數(shù)據(jù)划滋。
緩存始終是瞬態(tài)的会油,這意味著緩存中包含的數(shù)據(jù)是臨時的。刪除緩存的數(shù)據(jù)不會產(chǎn)生不利影響古毛,因為創(chuàng)建緩存的程序可以隨時重新生成它。但是對于較大的緩存,重建緩存時可能會遇到延遲稻薇。
刪除緩存是回收空間的常用策略嫂冻。例如,當刪除Xcode的緩存時塞椎,所有未使用的舊數(shù)據(jù)將保持刪除狀態(tài)桨仿。 Xcode可以在以后重新生成它仍然需要的任何東西。
如果您在使用Xcode或其相關(guān)工具之一時遇到問題案狠,清除緩存也可以幫助解決此問題服傍。
大多數(shù)緩存都存儲在?/ Library / Caches
中,包括Xcode
緩存骂铁。您可以在?/ Library / Caches / com.apple.dt.Xcode
中找到Xcode的緩存吹零。
1. Supporting Caches
另外兩個值得注意的緩存是Carthage
和CocoaPods
的緩存。 這些依賴項管理器可幫助您管理您可能在應(yīng)用程序中使用的第三方庫拉庵。
如果您使用Carthage
灿椅,則可以在?/ Library / Caches / org.carthage.CarthageKit
中找到其緩存。
CocoaPods
有一個特殊的命令钞支,您可以用來清除其緩存茫蛹。 要清除CocoaPods
緩存,請在終端中運行以下命令:
pod cache clean --all
使用專用的cache clean
命令比手動刪除文件夾更好烁挟。 這是因為婴洼,如果CocoaPods
更改了其存儲緩存的位置,則該命令仍適用于新位置撼嗓。 如果您決定編寫腳本來清除緩存柬采,那真是個好消息!
實際上静稻,在下一節(jié)中警没,您將做到這一點,將迄今為止在最終的春季大掃除腳本中學(xué)到的所有內(nèi)容結(jié)合在一起振湾!
Tying it All Together
與其記住要釋放一些數(shù)據(jù)的位置杀迹,不如將每個步驟整理到一個自動化腳本中,然后在空間不足時運行該腳本要容易得多押搪。
自動化解決方案不要做任何破壞性很重要的事情树酪。 清除某些文件夾(例如archives
)時,請務(wù)必謹慎大州。
對于不需要人工操作的緩存和其他文件夾续语,腳本是合適的解決方案。
1. Creating a Script
首先厦画,打開一個終端窗口疮茄。 運行以下命令:
cd ~/Documents && touch clean-xcode.sh
這會將終端窗口的目錄更改為您的Documents
文件夾滥朱。 之后,它將創(chuàng)建一個新的空白腳本力试。
注意:可能會要求您授予終端訪問文件文件夾中文件的權(quán)限徙邻。 如果要求您這樣做。
在您喜歡的文本編輯器中打開空腳本畸裳。 然后缰犁,鍵入:
#!/usr/bin/env bash
# 1
echo "Removing Derived Data..."
rm -rf ~/Library/Developer/Xcode/DerivedData/
# 2
echo "Removing Device Support..."
rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport
rm -rf ~/Library/Developer/Xcode/watchOS\ DeviceSupport
rm -rf ~/Library/Developer/Xcode/tvOS\ DeviceSupport
# 3
echo "Removing old simulators..."
xcrun simctl delete unavailable
# 4
echo "Removing caches..."
rm -rf ~/Library/Caches/com.apple.dt.Xcode
rm -rf ~/Library/Caches/org.carthage.CarthageKit
# 5
if command -v pod &> /dev/null
then
# 6
pod cache clean --all
fi
echo "Done!"
文件的開頭是一個Shebang
,它告訴您的計算機如何執(zhí)行腳本怖糊。 shebang
始終必須是腳本的第一行帅容。
文件的其余部分是到目前為止您學(xué)到的所有內(nèi)容的總和。 這是逐步發(fā)生的事情:
- 1) 首先伍伤,
echo
將消息輸出到終端并徘,因此您知道腳本的運行方式。 然后嚷缭,rm
刪除derived data
文件夾饮亏。 - 2) 打印另一個狀態(tài)更新,然后刪除每個
device support
文件夾阅爽。 如果文件夾不存在路幸,則什么也不會發(fā)生。 - 3) 刪除不可用的模擬器付翁。
- 4) 刪除
Xcode
和Carthage
的緩存(如果存在)简肴。 - 5) 檢查此計算機上是否安裝了
CocoaPods
。 - 6) 如果安裝了
CocoaPods
百侧,清理CocoaPods cache
砰识。
接下來,保存文件佣渴。 在TextEdit
中辫狼,通過單擊File ? Save
在TextEdit
的菜單欄中進行此操作。
您已經(jīng)創(chuàng)建了腳本辛润,幾乎可以嘗試了膨处。
2. Running the Script
如果嘗試按原樣運行clean-xcode.sh
,則會收到錯誤消息:
那是因為您的計算機將其視為文本文件砂竖,而不是您可以執(zhí)行的腳本或程序真椿。 要使其可執(zhí)行,您需要在終端中運行命令乎澄。
在“終端”窗口中突硝,運行以下命令:
chmod u+x clean-xcode.sh
現(xiàn)在,您的計算機將clean-xcode.sh
識別為可執(zhí)行腳本置济。
注意:如果您還不準備刪除
derived data, device support or caches
解恰,請不要運行該腳本锋八。 您仍可以繼續(xù)閱讀本節(jié)的其余部分。
最后修噪,您可以通過在終端中指定其路徑來運行clean-xcode.sh
:
./clean-xcode.sh
該腳本將執(zhí)行查库,并在清除派生數(shù)據(jù),設(shè)備支持黄琼,模擬器和緩存(derived data, device support, simulators and caches)
時打印出狀態(tài)報告。
使用一個命令整慎,您已經(jīng)收回了Xcode
隨著時間的推移而建立的一些存儲脏款。
在本教程中,您學(xué)習(xí)了一些方法來回收Xcode
聲稱擁有的某些存儲裤园。 您了解了何時要清除每個位置撤师,以及何時應(yīng)該更謹慎地刪除某些文件。 您還了解了Xcode的緩存和中間數(shù)據(jù)如何影響編譯問題拧揽。
要了解有關(guān)Xcode
在整個構(gòu)建過程中如何工作的更多信息剃盾,以及更多用于構(gòu)建自動化的腳本,請參閱iOS App Distribution & Best Practices淤袜。
后記
本篇主要講述了
Xcode
內(nèi)存管理痒谴,感興趣的給個贊或者關(guān)注~~~