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



Answers

我希望這個bash腳本可以幫助你。 輸入參數是目錄,而不是包含項目的所有xcasset。 該腳本將sRGB配置文件設置為所有png。 它幫助我:)

#!/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 "------------------------------"
Question

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




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

應用程序在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)為我解決了這個問題。 沒有開玩笑。 有史以來最糟糕的錯誤。




雖然問題已經得到解答,但是解決方案並不適合我,因為我沒有任何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



編輯後的腳本將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 "------------------------------"





Related