私のアプリは、広告サポートフレームワークの使用が拒否されました。どの図書館が責任を負っていますか?


81

これは単に更新であり、拒否の理由とは何の関係もありません。解決センターからの回答は次のとおりです。

理由プログラムライセンス契約PLA3.3.12

アプリはiOSAdvertising Identifierを使用していますが、広告機能は含まれていません。これは、AppStoreレビューガイドラインで要求されているiOSデベロッパープログラムライセンス契約の条件に準拠していません。

具体的には、iOS開発者プログラム使用許諾契約のセクション3.3.12には次のように記載されています。

「あなたとあなたのアプリケーション(およびあなたが広告を提供することを契約した第三者)は、広告を提供する目的でのみ、広告識別子、および広告識別子の使用を通じて取得した情報を使用することができます。ユーザーがリセットした場合Advertising Identifierの場合、お客様は、以前のAdvertisingIdentifierおよび派生情報をリセットされたAdvertisingIdentifierと組み合わせたり、関連付けたり、リンクしたり、その他の方法で直接または間接的に関連付けたりしないことに同意するものとします。」

次のインスタンスを削除するには、コード(サードパーティライブラリを含む)を確認してください。

クラス:ASIdentifierManager
セレクター:advertisingIdentifier
フレームワーク:AdSupport.framework

将来のバージョンに広告を組み込むことを計画している場合は、広告機能が含まれるまで、アプリから広告IDを削除してください。

Advertising Identifierを見つけやすくするには、「nm」ツールを使用します。「nm」ツールの詳細については、ターミナルウィンドウを開き、「mannm」と入力してください。

ライブラリソースにアクセスできない場合は、「strings」または「otool」コマンドラインツールを使用して、コンパイルされたバイナリを検索できる場合があります。「文字列」ツールはライブラリが呼び出すメソッドを一覧表示し、「otool-ov」はObjective-Cクラス構造とそれらの定義済みメソッドを一覧表示します。これらの手法は、問題のあるコードが存在する場所を絞り込むのに役立ちます。

私が使用しているサードパーティライブラリは、の最新バージョンですparse.com sdk, latest version of flurry analytics, and version 2.2 of test flight。どのライブラリが問題なのか誰か知っていますか?ありがとう


IMOは、自分でその検索を行うための多くのヒントを提供しました...試してみましたが、見つかりませんでしたか?
アドリアーノレペッティ2014年

10
私はグーグルアナリティクスでこの問題を抱えている人々を見てきました
jcesarmobile 2014年

1
ただし、フラグが立てられる最大の理由はTestFlightであり、このIDは必須です。testflightapp.com / sdk / ios / doc / 2.0.0-「iOS6.0以降では、一意に識別するためにAdSupport.frameworkが必要です。 (ASIdentifierManagerを使用して)アプリのユーザー数を見積もることができるようにします。アプリ内のフレームワークを弱くリンクする場合があります。アプリがAdSupport.frameworkにリンクされていない場合、TestFlightSDKはで実行されているアプリに対して自動的にロードします。 iOS6.0以降。」
Louis St-Amour 2014

5
Testflightv2.2.0が競合であったことが判明しました。その後、変更ログに従って修正しました。両方のSDKバージョンを1つに統合して、ASIdentifierManagerへのすべてのアクセスを削除します
user2844801

5
AdSupport.frameworkがオプションとしてリンクされている場合、それはApp Storeの問題を解決しますか?
レゴレス2014

回答:


113

ターミナル内:

  1. プロジェクトのルートフォルダに移動します
  2. タイプ:(grep -r advertisingIdentifier . 最後のドットが重要です)

これにより、すべてのファイルが再帰的にチェックされ、問題のあるライブラリの名前がわかります。

(私の場合、それはFlurryでした)


1
私も同じことで殴られました。libFlurry_4.3.1.aとlibGoogleAnalyticsServices.aの両方にadvertisingIdentifierがあります。これらがいつ更新されるか、または回避策があるかどうかはわかりません。
Vidal Graupera 2014

2
これについて私たちは何をしていますか?私達はちょうど...完全に私たちの分析を削除することはできません
ニールゴラン

@ RedYeti-タイプミスを修正していただきありがとうございます。申し訳ありませんがそのことについて-コピー/エラーを貼り付け:(。
アダム

1
@ LouWeed-これが発生した場合は、アプリからFlurryを削除し、Flurryがパニックに陥っていて、すぐに新しいアップデートを提供すると想定する必要があります。無料のサードパーティ分析を使用することの欠点は、このように失敗することがあることです。私は過去にFlurry、TestFlight、Facebook、Parse、および他のいくつかと同様のことをしました。それは起こります。しかし、サービスにお金を払っていないのなら、文句を言うことはできません:)
Adam

2
上記のコマンドを使用すると、Flurry4.3.2がadvertisingIdentifierと一致しないことを確認できます。
Crafterm 2014

17

更新

GoogleはGoogleAnalytics Services iOS SDK v3.03cをリリースしました。これにより、デフォルトでAdSupport.frameworkの依存関係が削除されます。

リリースバージョン3.03c(2014年2月19日)の完全な変更ログエントリ:https://developers.google.com/analytics/devguides/collection/ios/changelog

Old Awnser

私の問題は、GoogleAnalyticsとTestFlightにありました。

TestFlightの場合、ライブラリをバージョン2.2.1(https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/)に更新するだけです。

しかし、Google Analyticsを更新するには、-ObjCフラグを削除する必要がありました。しかし、Cocoapodsを使用していくつかのサードライブラリを管理しているので、それを削除することはできませんでした。だから私は次のことをしました:

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}に変更します。

そのため、他のリンカーフラグは次の画像のようになりました。 その他のリンカーフラグ

誰かを助けたいと思っています。

英語でごめんなさい。=]


AdSupportフレームワークがないとアプリをビルドできません。未定義のシンボルASIIdentifierManagerを取得します
andygeers

Googleタグマネージャーを使用していますか?あなたがそうなら、この解決策は機能しないからです。
Glauco Neves 2014

私が知っていることではありません(タグマネージャーは何をしますか?)それはGAとタグマネージャーを組み合わせたライブラリファイルです
andygeers 2014

Pods /Pods.xcconfigを手動でOTHER_LDFLAGS直接編集することもできます。
リベラ

Googleは本日GoogleAnalytics Services iOS SDKv3.03cをリリースしました。答えを更新しました。=]
Glauco Neves

13

私にとって、FlurryAnalyticsとTestFlightの両方が問題でした。

TestFlightの場合、更新するのと同じくらい簡単です。2.2.1バージョンは問題を引き起こしません(Appleが提案するように、私は文字列を使用してチェックしました)

Flurryの場合、現在、Flurryを削除する以外に修正はありません。また、Lou Weedの提案に反して、AdSupport.frameworkがリンクされていなくても、アプリは拒否されます。

これがFlurryサポートの答えです:

「Flurryにご連絡いただきありがとうございます。最近、Appleが広告機能を含まずにIdentifier for Advertising(IDFA)を使用していると思われる一部のアプリを拒否したことを知りました。アプリにAdSupportが含まれていない限り、FlurryはIDFAを収集しないことに注意してください。 。広告機能のフレームワーク。Appleとの明確化を求めており、今後数日間で詳細がわかり次第、影響を受けるお客様を更新します。」

Flurryは、特にその問題に対処するSDKのバージョン4.3.2をリリースしました。


4

Testflightv2.2.0が競合であったことが判明しました。それ以来、彼らは変更ログに従ってそれを修正しました:Consolidate both SDK versions into one which removes all access to ASIdentifierManager


4

Crashlyticsが問題でした。そのため、いくつかのアプリが拒否されました。しかし、私はすでにCrashlyticsと話し合っており、彼らはこの問題を修正する新しいアップデート(バージョン2.1.6)を本日リリースしました。

いくつかのライブラリにはAdSupport.frameworkがありますが、特に呼び出されない限り、それを使用しません。Crashlyticsは、アプリが広告をサポートしているかどうかを確認する必要があるため、フレームワークを呼び出していました。そして、その変更はバージョン2.1.5で実装されました

したがって、crashlyticsを使用している場合は、それが最も可能性の高い理由です。これを修正するには、アプリを再アーカイブして、crashlyticsがこの修正で新しいバージョンを使用できるようにします。

Crashlyticsチームからの回答:「このアップデートをプッシュしました。Macアプリを開いた状態でアプリを再度ビルドして実行し、SDKをアップデートできるようにすることはできますか?その後もよろしくお願いします。投稿を続けてください。再送信します:)」

PS:これは、AppleがADSupportの使用に関するポリシーを変更したように見えるために起こり始めています。


3

私は以前にコメントで次のように書き、人々を「文字列」または「otool」ターミナルコマンドに誘導しました。しかし、私はgrepを使用するという提案された答えが本当に好きです。だからあなたは最初にそれを試すことができます。私の提案は、そのコマンドの前に「git」を付けることです。これは非常に高速だからです。

git grep advertisingIdentifier

それがうまくいかない場合は、(以前に投稿したように)試してください:

grep -r advertisingIdentifier . 

以下は、ターミナルコマンドのハウツーとして、上記のコメントで以前に書いたものです。

Xcodeでプロジェクトのファイルを検索するか、AdSupportフレームワークを削除して、ビルド/実行時に何が失敗するかを確認できます。

ターミナルを使用するには、Spotlight(検索)をクリックして「ターミナル」と入力します。検索結果にアプリケーションとして表示されるのを待ちます。

ターミナルに移動したら、「cd」に続けてスペースを入力し、XcodeビルドフォルダをFinderからターミナルにドラッグアンドドロップします。これにより、そのフォルダ名が自動的に入力されます。Enterキーを押すと、ディレクトリ(cd)がそのフォルダに変更されます。

そこからstrings、スペース、ライブラリのファイル名、またはotoolスペースとライブラリのファイル名を入力します。Tabキーを押すと、ファイル名がオートコンプリートできるはずです。


1

私のアプリも同じエラーで拒否されました!最新のFacebookSDK(3.12)でadvertisingIdentifierの出現を見つけました。たぶん、以下の方法でライブラリの発生を確認できます。

ターミナルでライブラリとしてFacebookSDK.frameworkを開き、次のコマンドを入力しました

otool -v -s __TEXT __objc_methname FacebookSDK | grep AdvertisingIdentifier

しかし、私は何をすべきかわかりません。この参照のために私のアプリは拒否されましたか?はいの場合、アプリでFacebookの機能を使用したい場合はどうすればよいですか?


1
ここでは、これは役立つはず- stackoverflow.com/questions/21574680/...
アンドリュー

答えてくれてありがとう!変更を加えてアプリを再送信しました。再度拒否されないことを願っています:)
bolonn 2014

@ bolonn-上記の変更を行った後、アプリはAppleによって承認されましたか?
RoHaN 2014

はい、承認されました!
bolonn 2014

1

これは、表面的に見えるよりも少し複雑です。いくつかの実験の結果、AdSupportフレームワークで参照されているクラスに直接アクセスするだけでも、AdSupportフレームワークがリンクされていることがわかりました。皮肉なことに、[AsIdentifierManager class]、AdSupport Frameworkがリンクされているかどうかを確認するために多くのサードパーティライブラリで使用されている、は実際には原因AdSupport Frameworkがリンクします。を使用してクラスを難読化してもNSClassFromString(@"AsIdentfierManager")、AdSupportフレームワークは自動的にリンクされません。もちろん、ほとんどの場合、このコードはサードパーティのライブラリにあるため、あまり制御することはできませんが、これが行われていることです。

私はGitHubで、Segment.ioのフレームワークを使用してこの動作を説明するサンプルプロジェクトを作成しました。 https://github.com/distefam/AdSupportDemo


有用な投稿をありがとう。したがって、フレームワークをプロジェクト(私の場合は「GoogleInteractiveMediaAds」と呼ばれるGoogle広告フレームワーク)にウィークリンク(オプション)すると、アプリにAdSupport.frameworkが含まれます。アプリを送信すると、アプリに何も表示されません。広告(広告をまったく表示しない有料版があります)、それはAppleによって拒否されますか?
c0D3 2016年

0

FlurryAnalyticsはこのAPIも使用します。
ターミナル出力:

Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches

Flurryは、AdSupportフレームワークがリンクされていない場合、セレクターは呼び出されないと言います。
そこで、フレームワークを削除して、もう一度送信してみました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.