これは、拒否理由とは何も変わらない単なる更新でした。解決センターからの応答は次のとおりです。
理由プログラムライセンス契約PLA 3.3.12
あなたのアプリはiOS Advertising Identifierを使用していますが、広告機能は含まれていません。これは、App Storeレビューガイドラインで要求されているiOS開発者プログラムライセンス契約の条件に準拠していません。
具体的には、iOSデベロッパープログラムライセンス契約のセクション3.3.12には次のように記載されています。
「あなたとあなたのアプリケーション(および広告を提供するために契約した第三者)は、広告を提供する目的でのみ、広告識別子、および広告識別子を使用して取得したすべての情報を使用できます。広告識別子、その後、お客様は、以前の広告識別子と派生情報をリセット広告識別子と直接または間接的に組み合わせたり、関連付けたり、リンクしたり、関連付けたりしないことに同意します。」
サードパーティのライブラリを含むコードを確認して、次のインスタンスを削除してください。
クラス:ASIdentifierManager
セレクター:advertisingIdentifier
framework:AdSupport.framework将来のバージョンに広告を組み込む予定がある場合は、広告機能を含めるまでアプリから広告識別子を削除してください。
広告識別子を見つけるには、「nm」ツールを使用します。 「nm」ツールの詳細については、ターミナルウィンドウを開き、「man nm」と入力してください。
ライブラリのソースにアクセスできない場合は、「strings」または「otool」コマンドラインツールを使用して、コンパイルされたバイナリを検索できる場合があります。 「文字列」ツールはライブラリが呼び出すメソッドをリストし、「otool -ov」はObjective-Cクラス構造とそれらの定義されたメソッドをリストします。これらの手法は、問題のあるコードが存在する場所を絞り込むのに役立ちます。
私が使用しているサードパーティのライブラリは、parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight
の最新バージョンです。誰が問題のライブラリを知っていますか?ありがとう
ターミナルで:
grep -r advertisingIdentifier .
(末尾のドットは重要です)これにより、すべてのファイルが再帰的にチェックされ、問題のあるライブラリの名前がわかります。
(私の場合、Flurryでした)
更新
Googleは、デフォルトでAdSupport.framework依存関係を削除するGoogle Analytics Services iOS SDK v3.03cをリリースしました。
リリースバージョン3.03cの完全な変更ログエントリ(2014年2月19日): https://developers.google.com/analytics/devguides/collection/ios/changelog
旧オーサー
私の問題は、Google AnalyticsとTestFlightにありました。
TestFlightの場合、ライブラリをバージョン2.2.1に更新するだけです( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ )。
ただし、Googleアナリティクスを更新するには、-ObjCフラグを削除する必要がありました。しかし、Cocoapodsを使用していくつかの3番目のライブラリを管理しているため、削除することはできませんでした。だから私は次のことをしました:
1-libGoogleAnalytics.aのバージョン3.03aへの更新を開始(2014年2月5日)
2-その後、AdSupport.frameworkも削除されます
3-「-force_load\"$ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a」を「ターゲット->ビルド設定->その他のリンカーフラグ」に追加しました(私のプロジェクトでは、GoogleAnalyticsは/ Source /ライブラリ/フォルダ、および独自に構成する必要があります)
しかし、-ObjCフラグを削除しなかったため、Cocoapodsで-force_loadフラグを使用する方法を検索したところ、2つの便利なリンクが見つかりました。
1- https://github.com/CocoaPods/CocoaPods/issues/712
2- http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/
要約すると、「-force_load $(TARGET_BUILD_DIR)/libPods.a」の-ObjCフラグを、「ターゲット->ビルド設定->その他のリンカーフラグ」でも変更しました。
しかし、アプリを公開しようとすると、コンパイラがlibPods.aを見つけられなかったというエラーが表示されたため、「ターゲット->ビルド設定->その他のリンカーフラグ->リリース」に移動し、この文字列$(TARGET_BUILD_DIR)を$ {BUILT_PRODUCTS_DIR}に変更します。
そのため、私のその他のリンカーフラグは次の画像のようになりました。
誰かを助けたいです。
私の英語でごめんなさい。 =]
私にとって、Flurry AnalyticsとTestFlightは両方とも問題でした。
TestFlightの場合、更新と同じくらい簡単です。 2.2.1バージョンでは問題は発生しません(Appleが示唆するように、文字列を使用してチェックしました)
Flurryについては、現在Flurryを削除する以外に修正はありません。LouWeedの提案に反して、AdSupport.frameworkがリンクされていなくても、アプリは拒否されます。
Flurryサポートの回答は次のとおりです。
「Flurryにご連絡いただきありがとうございます。最近、Appleは、広告機能を含めずに広告識別子(IDFA)を使用していると思われる一部のアプリを拒否したことを知りました。このアプリには、広告機能のためのAdSupport.frameworkが含まれています。Appleでの明確化を求めており、今後数日間で詳細を確認し、影響を受けるお客様を更新します。」
Flurryは、SDKのバージョン4.3.2をリリースしました。これは、特にその問題に対処します。
Crashlyticsが問題でした。そのため、いくつかのアプリが拒否されました。しかし、私はすでにCrashlyticsと話し、彼らは本日、この問題を修正する新しいアップデート(バージョン2.1.6)をリリースしました。
いくつかのライブラリにはAdSupport.frameworkがありますが、特に呼び出されない限り使用しません。 Crashlyticsは、アプリが広告をサポートしているかどうかを確認する必要があるため、フレームワークを呼び出していました。そして、その変更はバージョン2.1.5で実装されました
したがって、crashlyticsを使用している場合、それが最も可能性の高い理由です。これを修正するには、アプリを再アーカイブして、crashlyticsがこの修正で新しいバージョンを使用できるようにします。
Crashlyticsチームからの応答:「今回のアップデートを公開しました。Macアプリを開いた状態でアプリを再度ビルドして実行し、SDKをアップデートできますか?再送信:)」
PS:これは、AppleがADSupportの使用に関するポリシーを変更したために発生し始めています。
Testflight v2.2.0が競合であることが判明しました。その後、変更ログに従って修正しました:Consolidate both SDK versions into one which removes all access to ASIdentifierManager
以前にコメントで次のように書いて、人々を「strings」または「otool」端末コマンドに誘導しました。しかし、私はgrepを使用することの提案された答えが本当に好きです。最初に試すことができます。私の提案は、非常に高速なので、そのコマンドの前に「git」を追加することです。
git grep advertisingIdentifier
それでもうまくいかない場合は、試してみてください(以前に投稿したとおり):
grep -r advertisingIdentifier .
以下は、上記のコメントで端末コマンドのハウツーとして書いたものです。
Xcodeでプロジェクトのファイルを検索するか、AdSupportフレームワークを削除して、ビルド/実行時に失敗するものを確認することができます。
ターミナルを使用するには、「Spotlight(検索)」をクリックして「ターミナル」と入力します。検索結果にアプリケーションとして表示されるまで待ちます。
ターミナルで「cd」と入力し、スペースを1つ入力してから、XcodeビルドフォルダーをFinderからターミナルにドラッグアンドドロップします。これにより、そのフォルダ名が自動的に入力されます。Enterキーを押すと、そのフォルダに移動します(cd)。
そこから、strings
、次にスペース、次にライブラリのファイル名、またはotool
、スペースとライブラリのファイル名を入力します。 TABを押してファイル名を自動補完できるはずです。
私のアプリも同じエラーで拒否されました!最新のFacebook SDK(3.12)でAdvertisingIdentifierの発生を発見しました。以下の方法でライブラリの発生を確認できるかもしれません:
ターミナルでFacebookSDK.frameworkをライブラリとして開き、次のコマンドを入力しました
otool -v -s __TEXT __objc_methname FacebookSDK | grep AdvertisingIdentifier
しかし、私は何をすべきかわかりません。この参照のためにアプリが拒否されましたか?はいの場合、アプリでFacebookの機能を使用したい場合はどうすればよいですか?
これは表面上に見えるよりも少し複雑です。いくつかの実験の後、AdSupport Frameworkで参照されているクラスに直接アクセスする場合でも、AdSupport Frameworkがリンクされていることがわかりました。皮肉なことに、AdSupport Frameworkがリンクされているかどうかを確認するために多くのサードパーティライブラリで使用される[AsIdentifierManager class]
は、実際にはcauseリンクされるAdSupportフレームワーク。 NSClassFromString(@"AsIdentfierManager")
を使用してクラスを難読化しても、AdSupportフレームワークは自動的にリンクされません。もちろん、ほとんどの場合、このコードはサードパーティのライブラリ内にあるため、あまり制御することはできませんが、これは現在行われていることです。
Segment.ioのフレームワークを使用してこの動作を説明するGitHubのサンプルプロジェクトを作成しました。 https://github.com/distefam/AdSupportDemo
Flurry AnalyticsはこのAPIも使用します。
端末出力:
Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches
Flurryは、AdSupportフレームワークがリンクされていない場合、セレクターは呼び出されないと言います。
そのため、フレームワークを削除して、もう一度送信してみました。