crash navigation - Xcode 8在iOS 9.2及更低版本上構建崩潰





bar navigationbar (8)


編輯後的腳本將png文件轉換為整個項目中的正確格式並使用空格:

#!/bin/bash
DIRECTORY=$1
echo "------------------------------"
echo "Passed Resources with xcassets folder argument is <$DIRECTORY>"
echo "------------------------------"
echo "Processing asset:"

find "$DIRECTORY" -name '*png' -print0 | while read -d $'\0' file; 
do 
    echo "---------$file"
    sips -m "/System/Library/Colorsync/Profiles/sRGB Profile.icc" "$file" --out "$file"
done

echo "------------------------------"
echo "script successfully finished"
echo "------------------------------"

當我使用Xcode 8 GM Seed構建應用程序並在設備或模擬器下面的iOS 9.2上運行應用程序時,我會在應用程序啟動期間或應用程序啟動後幾秒鐘內發生奇怪的EXC_BAD_ACCESS崩潰。 崩潰總是發生在不同的地方(添加子視圖, [UIImage imageNamed:] ,應用程序委託的主要方法等)。 當我在iOS 9.3+或10上運行它時,我沒有遇到這些崩潰,而當我使用Xcode 7 構建並在iOS 9.2和更低版本上運行時,我沒有得到它們。 其他人有類似的經歷嗎? 這是Xcode 8的一個已知問題嗎?




查看接受的答案https://forums.developer.apple.com/thread/60919

您可以使用Preview.app將16位資產保存為8位資產

如何解決“錯誤ITMS-90682:無效包 - 如果應用程序支持iOS 8或更低版本,則”Payload / XXXXX / Assets.car“上的資產目錄不能包含16位或P3資產。”

使用Xcode 8 GM時,如果您在針對早於iOS 9.3的iOS版本的應用程序提交中包含16位或P3資產,則會發生此錯誤。 如果您的應用需要廣泛的顏色功能,您必須將您的部署目標更改為iOS 9.3或更高版本。 如果您的應用不需要廣泛的顏色功能,並且希望將其部署到較早的iOS版本,則應該用8位sRGB資產替換所有16位或P3資產。 您可以通過在iTunes Connect的錯誤消息中指定的資產目錄上運行“assetutil”來查找16位或P3資產。 以下步驟概述了該過程:

  1. 創建一個Inspectable .ipa文件。 在Xcode Organizer(Xcode-> Window-> Organizer)中,選擇要檢查的檔案,點擊“Export ...”,然後選擇“Export for Enterprise or Ad-Hoc Deployment”,這將創建一個本地副本。 ipa文件為您的應用程序。

  2. 找到.ipa文件並將其擴展名更改為.zip。

  3. 展開.zip文件。 這將產生一個包含你的.app包的Payload文件夾。

  4. 打開終端並將工作目錄更改為.app包cd路徑/ to / Payload / your.app的頂層

  5. 使用查找工具在您的.app包中找到Assets.car文件,如下所示:find。 -name'Assets.car'

  6. 使用assetutil工具在您的應用程序的每個Assets.car中查找任何16位或P3資產,如下所示。 : sudo xcrun --sdk iphoneos assetutil --info /path/to/a/Assets.car > /tmp/Assets.json

  7. 檢查生成的/tmp/Assets.json並查找包含“DisplayGamut”:“P3”及其關聯的“Name”的任何內容。 這將是包含一個或多個16位或P3資產的圖像集的名稱。

  8. 用8位/ sRGB資產替換這些資產,然後重新構建您的應用程序。

更新:如果您的部署目標設置為8.3或8.4,並且您有資產目錄,則即使您實際上沒有16位或P3資產,也會收到相同的錯誤消息。 在這種情況下,您需要將您的部署目標降至8.2,或將其移至9.x.




同樣的問題。

我不確定這是否是一個錯誤,但這裡是我的解決方案:確保您的圖像資產沒有Adobe RGB(1998)色彩空間

在xcode中




iOS部署目標設置為您的項目的信息 ,並將所有目標設置為相同的值。

在我的情況下,我的項目設置為iOS 9.1 ,目標設置為iOS 8.0 ,並在iOS 8.4上模擬器上崩潰

現在它工作完美。

PS .:在再次運行之前清理項目。




雖然問題已經得到解答,但是解決方案並不適合我,因為我沒有任何16b / ch的資產。

我發現問題出現在使用lzfse算法壓縮的資產上(您可以使用assetutil從Assets.car中找到關於壓縮提取信息的信息)。 不幸的是,Xcode IDE不允許開發人員更改壓縮算法,但是您可以通過手動編譯資產並降低actool命令中的部署目標來actool

TL;博士;

  1. 檔案
  2. 解壓ipa
  3. 編譯資產 - 通過檢查Xcode報告導航器中的存檔日誌,您可以找到由xcode生成的項目的資產編譯器命令

示例命令:

xcrun actool --output-format human-readable-text --notices --warnings --minimum-deployment-target 8.0 --output-partial-info-plist info_partial.plist --app-icon AppIcon --launch-image LaunchImage --enable-on-demand-resources YES --sticker-pack-identifier-prefix {bundle_id}.sticker-pack --target-device iphone --target-device ipad --platform iphoneos --product-type com.apple.product-type.application --compile #{path_to_directory_containing_Assets_car} Assets/Assets.xcassets

  1. 壓縮它。
  2. Resign



為有類似問題的其他人添加......

應用程序在iOS 9.0 - iOS 9.2上崩潰,看起來隨機/圍繞故事板轉換/設置UIImage(名稱...)。發現此線程:( https://forums.developer.apple.com/thread/61643

如果您的應用程序的目標是iOS 8.4,它將在Xcode 8中的iOS 9.0 - 9.2上崩潰..與xcassets有關的問題。 將部署目標設置為8.2或更低(我使用8.0)為我解決了這個問題。 沒有開玩笑。 有史以來最糟糕的錯誤。




我能夠重現這個問題,它似乎與資產目錄中的圖像有關。 蘋果提交了一個bug (附帶示例項目)

Apple Bug Reporter:28371396




一個名為“應用程序需要iPhone環境”的領域已經以某種方式進入了我的plist。 我刪除它,瞧! 它在我的iPod上運行。





ios crash xcode8 ios9.2