iOS9.2以下でXcode8ビルドがクラッシュする


85

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


まず、シミュレータの内容をリセットします。そしてさらに試みる。
mehul 2016

3
問題を解決できましたか?私たちもそれを持っています。
animaonline 2016

bugreport.apple.comで新しいバグを報告し、調査できるようにサンプルプロジェクトとクラッシュログを添付できますか?
クインテイラー

@ QuinnTaylor-bugreport.apple.com#28371396に、添付プロジェクト(シミュレーターで100%再現)を使用してバグレポートを提出しました。これを調べてくれてありがとう!
Evtim Georgiev 2016

3
@EvtimGeorgievありがとう!これは、P3 .pngイメージに関連するiOSのバグの複製であり、本日リリースされたXcode8.1ベータに含まれるiOS10.1ベータSDKで修正される必要があります。それで構築してみませんか?
クインテイラー

回答:


55

受け入れられた答えを見る ください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アセットを含めると、このエラーが発生します。アプリでワイドカラー機能が必要な場合は、デプロイメントターゲットをiOS9.3以降に変更する必要があります。アプリがワイドカラー機能を必要とせず、古いバージョンのiOSにデプロイする場合は、すべての16ビットまたはP3アセットを8ビットのsRGBアセットに置き換える必要があります。iTunes Connectからのエラーメッセージで指定されたアセットカタログで「assetutil」を実行すると、16ビットまたはP3アセットを見つけることができます。次の手順でプロセスの概要を説明します。

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

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

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

  4. ターミナルを開き、作業ディレクトリを.appバンドルのトップレベルに変更します。cdpath/ to / Payload / your.app

  5. 以下に示すように、検索ツールを使用して、.appバンドル内のAssets.carファイルを検索します。-名前 '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アセットがなくても、これと同じエラーメッセージが表示されます。この場合、展開ターゲットを8.2に下げるか、9.xに移動する必要があります。


2
これはEXC_BAD_ACCESSとどのように関連していますか?
animaonline 2016

1
回答を重複させないでください。代わりに、質問に重複としてフラグを付けます。
JAL

ありがとうございます!あなたはこの答えで私のためにたくさんの時間を節約しました!)
胸部2016

3
私のプロジェクト(展開ターゲットは8.0)では、P3アセットはまだありませんが、アプリで、またはxcode8を使用して任意の場所でランダムにクラッシュします。すべてのアセットは8ビット/ sRGBです。まだこの同じ問題に直面している人はいますか
Ankit 2016

@Ankit同じ問題に直面しています。解決策はもう見つかりましたか?
ローマントルバ2016

32

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

私たちのアセットには欠陥のある画像は含まれていませんが、それでもこれらのエラーが発生しています。
animaonline 2016

@ animaonline、アプリに実際に16ビットまたはP3アセットが含まれている場合に役立ちます。
Aleksandr Terentev 2016

2
主な問題は、このエラーが資産に起因することを実際に誰も確認していないことだと思います。
animaonline 2016

最初は機能しましたが、そうではありませんでした。同じ場所でクラッシュすることはありません
CiNN 2016

1
スクリプトは私には機能しませんでしたが、ImageOptimを使用すると機能しました
deej 2016

16

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

Apple Bug Reporter:28371396


サンプルプロジェクトをダウンロードできません。クラッシュを再現するプロジェクトを共有できますか
タミル語

ありがとう。アセットカタログに関連する問題。色空間をAdobeRGB(1998)からsRGBに変更するだけです。
ティムールベルニコビッチ2017

13

プロジェクト全体で空白を使用して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 "------------------------------"

1
このスクリプトはもう少し正確です。Спасибо、Никита。
2016年

1
これは魅力のように機能します。シンプルだが効果的なスクリプト。このスクリプトの実行方法がわからない場合。手順:1)このスクリプトをtxtファイルに入れ、AssetsScript.shに名前を変更します。2)Images.xcassetsを囲むフォルダーに移動し、スクリプトファイルを保持します。3)コマンドラインで移動します。スクリプトファイルが存在するフォルダーに移動します。4)スクリプトファイルのアクセス許可を実行可能ファイルに変更します(chmod 755 AssetsScript.sh)5)コマンドライン自体のパラメーターとしてdirectoryNameを使用してスクリプトファイルを実行します(./AssetsScript.shImages.xcassets)。ブームこれにより、すべてのアセットが必要な形式に変換されて完了します。これで、アプリケーションは正常に機能します。
Srivathsa 2016年

1行でwhile IFS= read -d '' -r file; do if [ $(file "$file" | grep -c '16-bit') -eq 1 ]; then sips -m '/System/Library/Colorsync/Profiles/sRGB Profile.icc' "$file"; fi done < <(find . -print0)、16ビット画像を8ビットに変換するだけです
DawnSong 2018年

3

同じ問題。

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

xcodeで


1
どういう意味ですか?詳しく教えていただけますか?
animaonline 2016

1
Adobe RGB(1998)色空間で画像を表示することは、Xcode8とSwift3を搭載したデバイスでのデバッグでは機能していましたが、iOS9ではリリースされていませんでした。色空間を変更すると機能しました。
アンドリュー

1

同様の問題を抱えている他の人のために追加しています...

アプリがiOS9.0でクラッシュしていました-iOS9.2がランダムに見えた/ストーリーボードの遷移の周り/ UIImage(name ...)の設定の周り..このスレッドが見つかりました:(https://forums.developer.apple.com/thread/61643

アプリがiOS8.4をターゲットにしている場合、Xcode8のiOS9.0-9.2でクラッシュします。xcassetsと関係があります。展開ターゲットを8.2以下(8.0を使用)に設定すると、修正されました。冗談じゃない。史上最悪のバグ。


こんにちは。助けて!AppStoreでのみ、このような問題が発生しています。iOS 9.2.1を搭載したiPhoneで直接アプリをビルドすると、クラッシュもシミュレーターでもクラッシュしませんが、AppStoreからまったく同じバージョン/ビルドをダウンロードするとクラッシュします。これはあなたにも当てはまりましたか?
sti 2017年

@Stiいいえ、デバッグビルドでクラッシュしていました。古いビルドを上書きするときに問題が発生する可能性のあるコアデータまたはその他のものを使用していますか?ちょっとした考え。
karnett 2017年

よく考えて、ええ、私はアプリのいくつかの部分でコアデータを使用しています。しかし、多くのテストを行った結果、それはそれとは何の関係もないと確信しています。コアデータは私の画像とは何の関係もありません。クラッシュレポートシステムからのほとんどすべてのスタックトレースは、UIImage(imageNamed :)が悪者であると言っています。ああ、それはクリーンインストールでも起こります。過去2日間で7000以上がクラッシュし、iOS9.0.2から9.2.1にのみ影響します。iOS9.3以降には影響しません。とても奇妙です。そして、私が今それを構築するとき、起こりません。AppStoreのみ。デバッグできません。ちょうど今、AppleにTSIチケットを送りました。
sti 2017年

ああ。それはねばねばしたものです。別の考えがありました。アプリストアバージョンはどのバージョンのSwiftを使用していますか?私はこれをSwift2.2または2.3で経験したと思います。Swift 3ではありません。Swift3でビルドしているのに、再現できないと思いますか?
karnett 2017年

いいえ、でもあなたがそう言っているのはとても興味深いです!このアプリはAppStoreで長い間使用されてきました。AppStoreの以前のバージョンはSwift2.3で作成されており、このバグは発生していません。私は数日前にアップロードされたことをApp Storeでこの新しいバージョン(クラッシュその1)はウィジェット専用のiOS版10のための追加スウィフト3.別のmentionable変化に変換されるなど、非常に少ないが、非常に大きな変化を、持っている
STIのを

0

プロジェクトの情報内のiOS展開ターゲットとすべてのターゲットを同じ値に設定します。

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

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

PS:再実行する前にプロジェクトをクリーンアップしてください。


0

質問はすでに回答済みですが、16b / chのアセットがなかったため、アクセスしたソリューションは機能しません。

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

tl; dr;

  1. アーカイブ
  2. 解凍する ipa
  3. アセットのコンパイル-アーカイブログをチェックすることで、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. 辞任
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.