ラベル AdMob の投稿を表示しています。 すべての投稿を表示
ラベル AdMob の投稿を表示しています。 すべての投稿を表示

2014年4月27日日曜日

AdMobで「Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GADSlot state]: unrecognized selector sent to instance 0x1701dbc60'」という様なエラーが出る。

AdMob導入時に「Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GADSlot state]: unrecognized selector sent to instance 0x1701dbc60'」という様なエラーが出る場合、「Build Settings」の設定が足りない場合がある。

「Build Settings」の「Linking」の「Other Linker Flags」に「-ObjC」を設定すると解決する。


2013年6月14日金曜日

アプリ申請時にUDIDの件でInvalid Binary となる ... その後解決

先日の記事でアプリにAdMobを組み込んでAppleに申請するとUDID の件で弾かれると書いたかと思います。
http://startup-objc.blogspot.jp/2013/05/udidinvalid-binary.html

これが、AdMobライブラリに非があるのか、Appleの検査モジュールが誤検知したのかわかりませんが、広告を非表示にするという事でアップしました。
(元々広告収入を目的とするアプリでは無かったため。)



今回、アプリを更新する事案がありましたので、再度広告表示に挑戦しました。

一番の疑わしきはAdMob。
ライブラリのページを見てみると。。。
https://developers.google.com/mobile-ads-sdk/download











バージョン上がってるやないかい!
前回は6.4.1だったのが6.4.2、やっぱりこれか・・・


新しいのをダウンロード&展開して、組み込み!
クリーン&アーカイブしてアップ!



























だめか・・・



こういう時はstackoverflowに助けを求める
http://stackoverflow.com/questions/16409966/app-rejected-but-i-dont-use-udid

ibGoogleAnalytics_debug.a が含まれていて、悪さをしているとの事。
罠かよ・・・

ターミナルで以下を実行して、バイナリ内で利用している箇所を探せとあったので、実行してみたところ。
find . | grep -v .svn  | grep "\.a" | grep -v "\.app" | xargs grep uniqueIdentifier


























確かにある。これだな。削除。


再度、クリーン&アーカイブしてアップ!



























だめだな・・・


もしかしてと思いプロジェクトファイルを開く。エディタで。










思った通りや・・・

ライブラリ更新の度にディレクトリ作って追加していったから、
検索パスがその度に増えていました・・・

プロジェクトファイルからの直削除はこわかったので、
xcodeから削除。
















※画像は勢い余って消してしまった後のものです。


再度、クリーン&アーカイブしてアップ!

。。。成功やー!



結局、何が原因かというと、検索パス内に以前のライブラリへのパスが残っていた事が原因。
xcode内で、視覚的にファイルを消したとしても、検索パスには残る。
再度、別のファイルを追加してバージョンアップしている風にはxcode上は見えるんだけど、実際には「検索パスが新たに追加される」ことと「ファイル名単位のファイルパス」が追加されるようです。

そのため、検索パスの最初にあるAdmobの6.2.1の「同名ファイル」が選択されてAppleに弾かれていた模様。。。

もちろん、ibGoogleAnalytics_debug.aのファイルを消した事も影響しているかも知れないけど、検証しなおす余力がありません。

最終的なまとめとしては、検索パスをチェック。


なお、こういう目に遭うのは、ライブラリをバージョン別に分けて管理したがる僕みたいなタイプの人間で、ライブラリを上書き更新かけるタイプの方は、問題ない模様。
(twitterとか見たけど、みんな普通に出来ているしね。。。)


2013年5月7日火曜日

アプリ申請時にUDIDの件でInvalid Binary となる


何の気なしに、アプリを更新申請すると以下の様なメールが届いた。

Non-public API usage:
  • Apps are not permitted to access the UDID and must not use the uniqueIdentifier method of UIDevice. Please update your apps and servers to associate users with the Vendor or Advertising identifiers introduced in iOS 6.
どうやら、UIDevice の uniqueIdentifier は非推奨APIになったので、利用したものは受け付けないよ。

との事らしい。。。
(2013年5月1日よりそうなった模様)

急いで修正&更新申請したが、同様のメールが届けられる。。。




外部ライブラリだ!
と閃き、AdMobのサイトに行くと、案の定ライブラリが更新されている。

今までは6.2.1のバージョンを利用していたが、6.4.1を導入。

だがまたAppleから突き返される。。。


ここで試しにXcode をバージョンアップ、もしかして本来は入っていなければならないライブラリをバージョンアップを怠った事によって入れていなかったのかな・・・と


これも関係なく弾かれる。。。


どう考えても怪しいのはAdMobのライブラリ。
そこで試しにライブラリをアプリ内から除去。


問題なく申請が通る・・・おい!



Twitterとかで調べても、みんな「6.4.0以降は大丈夫だ」とつぶやいていたが、6.4.0は大丈夫だったかもしれないが6.4.1は駄目な模様。
そして、6.4.0に関してはもうダウンロードできない。

とりあえず広告非表示の件は適当な理由を付けて、申請しました。


実際に、AdMobでUDIDを利用しているのかは不明ですが、
Appleにバイナリを申請した際には、「そう検知される」


ぐぬぬ。


追記(2013-06-20):

以下の対応でAdMobが利用できるかも知れません。
http://startup-objc.blogspot.jp/2013/06/udidinvalid-binary.html

2013年2月4日月曜日

AdMobをiOSアプリに組み込む際の注意

AdMob導入方法を以下のページで確認する際、
https://developers.google.com/mobile-ads-sdk/docs/ios/fundamentals

日本語訳の方で見ると、以下のフレームワークを追加するように書いてある。

  • AudioToolbox
  • MessageUI
  • SystemConfiguration
  • CoreGraphics

が、実際には以下のフレームワークも必要。


  • StoreKit
  • AdSupport

英語版のページを見るとちゃんと書いてある。
訳が古いのかな?