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
連線
中文技術支援
相關文章
- iOS10 許可權崩潰問題iOS
- UIPasteboard UIMenuController 刪除崩潰問題UIASTController
- 崩潰的一天,西安一碼通崩潰背後的技術問題。
- WkWebView 令人崩潰的崩潰WebView
- 如何定位瀏覽器頁面崩潰的問題瀏覽器
- Xcode 9.0 beta 3 GPUImage崩潰問題(presentBufferForDisplay)XCodeGPUUI
- iOS Autolayout 修改約束優先順序崩潰問題iOS
- Android12版本鬧鐘服務崩潰問題Android
- 記一次線上崩潰問題的排查過程
- iOS相關 | Xcode8 ---- iOS 9.2 崩潰問題iOSXCode
- 【MySQL】崩潰恢復問題解決:Forcing InnoDB RecoveryMySql
- WKWebView崩潰WebView
- Redis崩潰Redis
- json解析導致的崩潰問題 cocos2.* 底層問題JSON
- 傳統APM讓開發者瞬間崩潰的三大問題!
- Crittercism:KitKat崩潰率0.7% iOS 7.1崩潰率1.6%iOS
- APP防崩潰APP
- WWDC 2018:理解崩潰以及崩潰日誌
- SDWebImage載入多個圖片記憶體崩潰的問題Web記憶體
- 比特幣內訌引發的未來崩潰問題 | Justin比特幣
- 微軟修復了導致 Outlook 啟動時崩潰的問題微軟
- UIPikerView 省市區三聯滑動,解決滑動崩潰問題UIView
- k8s克隆節點引起的系統崩潰問題K8S
- ASR專案實戰-交付過程中遇到的核心崩潰問題
- 記錄一次解決App崩潰問題的解決方案APP
- 解決實名軟體造成的 XP系統崩潰問題(轉)
- iOS Crash不崩潰iOS
- linux mint 崩潰Linux
- ios 崩潰集錦iOS
- app 崩潰的原因APP
- 執行緒崩潰為什麼不會導致 JVM 崩潰執行緒JVM
- 大型網站如何防止崩潰,解決高併發帶來的問題網站
- 記在Linux上定位後臺服務偶發崩潰的問題Linux
- memcopy 導致的程式碼崩潰問題,memcpy的三大踩坑記memcpy
- 關於SDWebImage載入高清圖片導致app崩潰的問題WebAPP
- 全面解決amule容易崩潰和中文顯示、輸入的問題(轉)
- IOS 崩潰日誌分析iOS
- Invalid double崩潰分析