今年2月に入ってからAdSupport.frameworkのASIdentifierManagerクラスにあるadvertisingIdentifierメソッドを使ったアプリがリジェクトされているという投稿が目立っていました。
参考:
ASIdentifierManager の advertisingIdentifier を使っているとリジェクトされる問題
http://qiita.com/monry/items/b473e3db7e48f05be96b
(上記では主にUnityが吐き出すコードを変更して対応)
解決法
Google Analyticsのライブラリを最新のv3.03aに置き換えることでAdSupport.frameworkをリンクしなくてもビルドできるようになります。
Downloads - iOS SDK
https://developers.google.com/analytics/devguides/collection/ios/resources?hl=ja
念のためAdHocビルドしたアプリのバイナリファイルに対してstringsコマンドでadvertisingIdentifierが使われていないか文字列を全て調べて見るのもよいでしょう。
$ unzip <アプリのバイナリ名>.ipa
$ cd Payload/
$ cd <アプリのバイナリ名>.app/
$ strings <アプリのバイナリ> | grep advertisingIdentifier
Payloadとか何やねんっという人は次の記事が参考になるでしょう
http://qiita.com/yimajo/items/b2afd85513ea7c47b66a
AdSupport.framework周辺のことがら
advertisingIdentifierとは
iOS6からUDIDが実質使えなくなったことで、広告ネットワーク用の共通のUUIDとして使われることを想定しているようです。
利用方法としてはAdSupport.frameworkをリンクし次のようなコードを書きます
ASIdentifierManager *adManager = [ASIdentifierManager sharedManager];
if ([adManager isAdvertisingTrackingEnabled]) {
//使えるぜ
NSLog(@"%@",[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]);
} else {
//ユーザーによって使えないようになってるぜ
NSLog(@"optout");
}
これによってユーザーが拒否しなければアプリにまたがった共通のUUIDを取得できます。
Google Analyticsでv3.0あたりからAdSupport.frameworkが必須になっていた
v3.0からこのadvertisingIdentifierを取得するためなのかは分かりませんが、ターゲットをAdSupport.frameworkにリンクをすることが必須になっていました。
ただ、そうすると広告が表示されているアプリではリジェクトされないが、広告が表示されていないアプリではリジェクトされるという事があったようです。
しかし100%リジェクトされるわけじゃない
ここまで書いててあれですが、自分の広告を表示しないアプリで、アクセス解析のためにGoogle Analytics v3.03組み込み1月にバージョンアップでリリースしていても実際はリジェクトされていませんでした。なので今年に入ってから100%リジェクトされるわけじゃないとは思います。