web-dev-qa-db-ja.com

iOS 9.2以前でXcode 8ビルドがクラッシュする

Xcode 8 GM Seedでアプリをビルドし、デバイスORシミュレーターの下のiOS 9.2で実行すると、アプリの起動中またはアプリが起動してから数秒後。クラッシュは常に別の場所で発生します(サブビュー、[UIImage imageNamed:]、アプリデリゲートのメインメソッドの追加など)。 iOS 9.3以降または10で実行してもクラッシュは発生せず、Xcode 7でbuildを実行し、iOS 9.2以前で実行してもクラッシュは発生しません。他の誰かが同様の何かを経験していますか?これはXcode 8の既知の問題ですか?

85
Lingzhi Zhang

受け入れられた答えを参照してください 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バージョンにデプロイする場合は、すべての16ビットまたはP3アセットを8ビットsRGBアセットに置き換える必要があります。 iTunes Connectのエラーメッセージで指定されたアセットカタログで「assetutil」を実行すると、16ビットまたはP3のアセットを見つけることができます。次の手順でプロセスの概要を説明します。

  1. 検査可能な.ipaファイルを作成します。 Xcodeオーガナイザー(Xcode-> Window-> Organizer)で、検査するアーカイブを選択し、「エクスポート...」をクリックして、「エンタープライズまたはアドホック展開用にエクスポート」を選択します。これにより、のローカルコピーが作成されます。アプリのipaファイル。

  2. その.ipaファイルを見つけて、拡張子を.Zipに変更します。

  3. .Zipファイルを展開します。これにより、.appバンドルを含むペイロードフォルダーが生成されます。

  4. ターミナルを開き、作業ディレクトリを.appバンドルの最上位に変更しますcd path/to/Payload/your.app

  5. 以下に示すように、検索ツールを使用して、.appバンドル内のAssets.carファイルを見つけます。 -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」を含むコンテンツを探します。これは、1つ以上の16ビットまたはP3アセットを含むイメージセットの名前になります。

  8. これらのアセットを8ビット/ sRGBアセットに置き換えてから、アプリを再構築します。

更新:展開ターゲットが8.3または8.4に設定され、アセットカタログがある場合、実際に16ビットまたはP3アセットがない場合でも、この同じエラーメッセージが表示されます。この場合、Deployment Targetを8.2に下げるか、9.xに移動する必要があります。

55

この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 "------------------------------"
32

問題を再現できましたが、アセットカタログの画像に関連しているようです。 Appleにバグを報告した (添付のサンプルプロジェクト付き)

Apple Bug Reporter:28371396

16
Evtim Georgiev

プロジェクト全体および空白を含む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 "------------------------------"

同じ問題。

これがバグかどうかはわかりませんが、私の解決策は次のとおりです。AdobeRGB(1998)色空間のない画像アセットを確認してください

xcodeで

3
ping

同様の問題を持つ他の人のために追加...

IOS 9.0でアプリがクラッシュしていました-iOS 9.2は、ランダムに見える/ Storyboard遷移の周り/ UIImage(name ...)の設定の周りで..このスレッドを見つけました:( https://forums.developer.Apple.com/thread/6164

アプリがiOS 8.4をターゲットにしている場合、Xcode 8.のiOS 9.0-9.2でクラッシュします。xcassetsと関係があります。デプロイメントターゲットを8.2以下(8.0を使用)に設定すると、修正されました。冗談じゃない。史上最悪のバグ。

1
karnett

プロジェクトとすべてのターゲットのiOS Deployment Target inside Infoを同じ値に設定します。

私の場合、私のプロジェクトはiOS 9.1に設定され、ターゲットはiOS 8.に設定され、シミュレータでiOS 8.4でクラッシュしていました

今では完全に機能しています。

PS .:再度実行する前にプロジェクトをクリーンアップします。

0
Gustavo Barbosa

質問には既に回答されていますが、16b/chの資産を持っていなかったため、アクセプトされたソリューションは私には機能しません。

lzfseアルゴリズムを使用して圧縮されたアセットで問題が発生することがわかりました(assetutilを使用してAssets.carから情報を抽出する圧縮に関する情報を見つけることができます)。残念ながらXcode IDEでは、開発者が圧縮アルゴリズムを変更することはできませんが、手動でアセットをコンパイルし、actoolコマンドで展開ターゲットを下げることでそれを行うことができます。

tl; dr;

  1. アーカイブ
  2. ipaを解凍します
  3. アセットのコンパイル- Xcode report navigator のアーカイブログを確認することにより、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. 辞任
0
badeleux