Xcode8---ios9.2一下崩潰問題
一、前言
如果你剛剛升級了Xcode8,而你的專案的Deployment Target是iOS 9.3以下,執行iOS8的時候過了幾十秒後crash到main函式,
出現EXC_BAD_ACCESS,或者崩潰到imageNamed:,或者每次編譯執行隨機崩潰到某個地方。那麼恭喜你,你讀完這個文章你可能就解決了。
二、崩潰原因
在Xcode8中,如果你的圖片資原始檔裡有16點陣圖或者圖片顯示模式為P3,並且Deployment Target是iOS9.3以下的就會出現這個問題。
(話說我公司的專案裡面就出現了一個小按鈕,導致了這次崩潰,不知道設計師是怎麼弄出來的這個特殊圖片…)如果你的App需要支援wide color functionality,那你就必須設定Deployment Target為iOS9.3以上。如果你的APP不需要支援wide color functionality並且你希望相容iOS老版本,那麼你需要將所有16-bit or P3 assets的圖片轉換為8-bit sRGB assets
三、定位問題圖片
1.打一個ipa包,解壓你的應用的ipa包,進入到你應用的Playload資料夾。
2.用find命令定位到Assets.car檔案 find . -name 'Assets.car'
3.使用 assetutil 命令匯出圖片的資訊儲存到Assets.json檔案中 sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json
4.開啟剛才生成的Assets.json檔案,查詢含有”DisplayGamut” : “P3”, “Encoding” : “ARGB-16″的內容。這個對應的Name就是出現問題的圖片了。
{
"SizeClass Vertical" : "universal",
"Graphics" : "GLES2,0",
"Name" : "ianisme.com",
"Scale" : 2,
"Idiom" : "universal",
"Memory" : "512MB",
"LayoutDirection" : "0 - Horizontal",
"DisplayGamut" : "P3",
"Encoding" : "ARGB-16",
"SizeClass Horizontal" : "universal",
"Image Type" : "kCoreThemeOnePartScale",
"AssetType" : "Image",
"Subtype" : 0,
"EdgeInsets" : "top:0 left:0 bottom:0 right:0"
},
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
四、轉換圖片為8-bit sRGB assets格式
這裡我們使用bash script直接處理所有圖片為正確格式,這樣我們就不用去定位是哪個圖片的問題了,或許更方便一些。
#!/bin/bash
DIRECTORY=$1
echo "------------------------------"
echo "Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo "------------------------------"
echo "Processing asset:"
XSAASSETSD="$(find "$DIRECTORY" -name '*.xcassets')"
for xcasset in $XSAASSETSD
do
echo "---$xcasset"
IMAGESETS="$(find "$xcasset" -name '*.imageset')"
for imageset in $IMAGESETS
do
echo "------$imageset"
FILES="$(find "$imageset" -name '*.png')"
for file in $FILES
do
echo "---------$file"
sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" $file --out $file
done
done
done
echo "------------------------------"
echo "script successfully finished"
echo "------------------------------"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
參考文獻:
StackOverFlow
連線
中文技術支援
相關文章
- AI|經常崩潰的問題解決AI
- 崩潰的一天,西安一碼通崩潰背後的技術問題。
- iOS相關 | Xcode8 ---- iOS 9.2 崩潰問題iOSXCode
- 如何定位瀏覽器頁面崩潰的問題瀏覽器
- iOS Autolayout 修改約束優先順序崩潰問題iOS
- WWDC 2018:理解崩潰以及崩潰日誌
- Android12版本鬧鐘服務崩潰問題Android
- 記一次線上崩潰問題的排查過程
- 比特幣內訌引發的未來崩潰問題 | Justin比特幣
- UIPikerView 省市區三聯滑動,解決滑動崩潰問題UIView
- k8s克隆節點引起的系統崩潰問題K8S
- SDWebImage載入多個圖片記憶體崩潰的問題Web記憶體
- APP防崩潰APP
- 崩潰日記
- 傳統APM讓開發者瞬間崩潰的三大問題!
- ASR專案實戰-交付過程中遇到的核心崩潰問題
- 記在Linux上定位後臺服務偶發崩潰的問題Linux
- alicdn邊緣節點不穩定導致頁面崩潰問題
- 記錄一次解決App崩潰問題的解決方案APP
- 微軟修復了導致 Outlook 啟動時崩潰的問題微軟
- iOS Crash不崩潰iOS
- app 崩潰的原因APP
- memcopy 導致的程式碼崩潰問題,memcpy的三大踩坑記memcpy
- 大型網站如何防止崩潰,解決高併發帶來的問題網站
- 解決Qt中ui->tableView->setModel(model);導致程式崩潰 問題QTUIView
- 藉助友盟+U-APM找出uniapp移動端崩潰的問題APP
- 執行緒崩潰為什麼不會導致 JVM 崩潰執行緒JVM
- UE4 記憶體寫壞導致異常崩潰問題記錄記憶體
- IOS 崩潰日誌分析iOS
- MySQL 8.0.11 無故崩潰MySql
- 解決跨海高併發崩潰難題?so easy
- 這種方式解決EMC儲存崩潰RAID離線問題,簡單又高效AI
- InnoDB 崩潰恢復機制
- 【除錯技巧】Dialog dismiss 崩潰除錯
- iOS 避免常見崩潰(二)iOS
- iOS 避免常見崩潰(一)iOS
- Kdump 檢查 Linux 核心崩潰!Linux
- 關於Mozilla崩潰的研究
- 幽蘭核心崩潰自救記