iOS 9の新しい警告:「すべてのビットコードが削除されます」


387

アプリにGoogleフレームワークに関する新しい警告があります。

(null):緊急:「/ Users / myname / Library / Mobile Documents / com〜apple〜CloudDocs / foldername / appname / GoogleMobileAds.framework / GoogleMobileAds(GADSlot + AdEvents.o)」がビットコードなしでビルドされたため、すべてのビットコードが削除されます。ビットコードを有効にして再構築するか(Xcode設定ENABLE_BITCODE)、ベンダーから更新されたライブラリを取得するか、このターゲットのビットコードを無効にする必要があります。注:これは将来のエラーになります。

Xcode 7はこれと同じコンセプトについて約204の警告を出しており、これを回避することはできませんでした。また、アプリからネットワークにアクセスする際に問題があります。これは、デバッグ領域からのエラーです。

-canOpenURL:URLの失敗: "kindle:// home"-エラー: "このアプリはスキームkindleのクエリを実行できません"

これらの問題はすべてiOS 8には存在しませんでした。


Xcodeターゲットでビットコードを有効にしましたか?
Droppy

すみません、これは初めてです。
C.Farrugia

私はそれをやったことはありませんが、意図的に設定しなければならないもののようです。あなたはそれをしたようです。
Droppy

4
@Droppy AFAIK設定はデフォルトでオンになっていますが、プロジェクト設定でいつでも無効にできます。
2015年

私はそれらをオフにして、すべての警告が消えました。少し調べてみたところ、このエラーをオフにするには、Googleがフレームワークを更新する必要があります。-canOpenURL:について誰かが知っていますか:URL: "kindle:// home"-エラー: "このアプリはスキームkindleのクエリを実行できません" これはXcodeが何について話しているのか分かりません
C.Farrugia

回答:


1023

ライブラリはビットコードなしでコンパイルされましたが、プロジェクト設定でビットコードオプションが有効になっています。ターゲットのビルド設定とライブラリのビルド設定で、警告を削除するように言っNOEnable Bitcodeください。

ビットコードを有効にする必要があるかどうか疑問に思う方のために:

iOSアプリの場合、ビットコードがデフォルトですがオプションです。watchOSおよびtvOSアプリの場合、ビットコードが必要です。ビットコードを提供する場合、アプリバンドル内のすべてのアプリとフレームワーク(プロジェクト内のすべてのターゲット)にビットコードを含める必要があります。

https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f


@Centurion以前のgoogle analytics libは非推奨であり、xcode 7 / ios9でもコンパイルされません
zonabi

1
@goelvはい、ビットコードを無効にしてアプリを送信できるはずです。現時点ではオプションです。将来必要になるかもしれません。
zonabi 2015

2
アーカイブには効果がありませんでした。XCODE 7以前のプロジェクトは正常に機能していましたが、[ビットコードを有効にする]を[いいえ]に設定してもアーカイブできない これはAWSライブラリ用です。
ort11

1
すべてのターゲットでビットコードを無効にしてもエラーが発生する。
datWooWoo 2015年

110

Xcode 7以降、ビットコードオプションはデフォルトで有効になります。ライブラリがビットコードなしでコンパイルされたが、プロジェクト設定でビットコードオプションが有効になっている場合、次のことができます。

  1. ライブラリをビットコードで更新し、
  2. ターゲットビルド設定でビットコード有効にするには、NOと言ってください

ここに画像の説明を入力してください

ライブラリのビルド設定で警告を削除します。

詳細については、開発者ライブラリのビットコードのドキュメントにアクセスしてください

WWDC 2015セッション102:「プラットフォームの一般状態」

ここに画像の説明を入力してください


42

その問題を回避するための私の場合:

  1. 下位バージョンではなく、Xcode 7を扱っていることを確認してください。以前のバージョンでは、このフラグは存在しません。

  2. 設定:プロジェクト>ビルド設定>すべて>ビルドオプション>ビットコードを有効にする=いいえ

ここに画像の説明を入力してください


2
したがって、XCode7を使用し、EnableBitcodeをYESに設定して、プロジェクトに含まれるライブラリを再コンパイルする必要があります。サードパーティの.aライブラリを使用している場合は、かなり複雑です。
Javier CalatravaLlavería15年

15

メソッドcanOpenUrlはiOS 9で(プライバシーのため)変更され、これ以上は自由に使用できません。バナープロバイダーは、インストール済みのアプリをチェックして、既にインストールされているアプリのバナーを表示しないようにします。

それはすべてのログステートメントを与える

-canOpenURL:URLの失敗: "kindle:// home"-エラー: "このアプリはスキームkindleのクエリを実行できません"

プロバイダーはこのためにロジックを更新する必要があります。

インストールされているアプリ/利用可能なスキームを照会する必要がある場合は、それらをinfo.plistファイルに追加する必要があります。

キー「LSApplicationQueriesSchemes」を配列としてplistに追加します。次に、「kindle」のようにその配列に文字列を追加します。

もちろん、これは実際にはバナー広告のオプションではありません(動的なため)。自分のアプリや、TwitterやFacebookなどの他の特定のアプリについて、その方法でクエリを実行できます。

canOpenUrl:のドキュメント canOpenUrl:

LSApplicationQueriesSchemesキーに関するドキュメント


静的ライブラリが親アプリのディープリンクをチェックすると仮定すると、静的ライブラリで例外「LSApplicationQueriesSchemes」を使用する方法は?通常、そのためのInfo.plistはありません。
loretoparisi

ライブラリが親以外のアプリをチェックする必要がある場合、親はinfo.plistでURLを定義する必要があります(したがって、フレームワーク用にドキュメント化してください)。canOpenUrlも親のアプリは、あなたがしなければならないよりも、それを扱うことができますが返されない場合には(私は仮定)もするinfo.plistのものが含まれる
サレン印伝

13

使用している場合はCocoaPodsを、あなたはすべてのライブラリのために無効ビットコードにしたい、Podfileで次のコマンドを使用します

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
    end
end

8

免責事項:これは、自動化プロセスを必要とする継続的な統合ワークフローをサポートするユーザーを対象としています。そうでない場合は、ハビエルの回答に記載されているようにXcodeを使用してください。

これは私にとってENABLE_BITCODE = NOコマンドラインから設定するのに役立ちました:

find . -name *project.pbxproj | xargs sed -i -e 's/\(GCC_VERSION = "";\)/\1\ ENABLE_BITCODE = NO;/g'

これはXcodeバージョン間で不安定になる可能性があることに注意してください。Xcode 7.0.1で、およびCordova 4.0プロジェクトの一部としてテストされました。



-2

この問題は最近Googleによって修正され(2010年11月)、https://code.google.com/p/analytics-issues/issues/detail?id = 671を参照してください。ただし、適切な修正としてバグが増えることに注意してください。

また、https//developers.google.com/analytics/devguides/collection/ios/v2に記載されている初期化方法に従う必要があります

最新の指示はポッドに含まれていないユーティリティを参照しているため、頭痛の種になるでしょう。以下はココアポッドで失敗します

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.