はじまり
App store の APPについて数ヶ月前に AppleさんからiOS13 SDK使いなはれ、GoogleさんからAdmobのSDK換えなはれMailが来ていた。
対応しないとだめかなーとだらだら引き伸ばししていましたが、することになる。
配信APPでは特に問題がないのに、もぅーめんど草がとても大変な事となりました。
最初はMacさんが・・・
うちの Macさん High Sierraなんですが、Xcodeの新しいものはダメだとおっしゃる。
OSもアップグレードできんらしい。とても頑固なやつです。新入の登場となる
→ 審査用として中古のMAC購入。(ToT)/~
はじめのクラッシュ
新入MACにて、 新しいXcodeでstoryboard使って、新しいGoogleSDK乗っけて終わり。のはずが
クラッシュ
→ Google SDKで引き起こされてた
ググったら
Info.plistにGADApplicationIdentifierがなくて❌
[[GADMobileAds sharedInstance] startWithCompletionHandler:nil];がないので❌
でした。
修正して、足らない画像とか準備して審査提出
はじめのお叱り
→ APPLEから 「クラッシュするから、ログ見て直してね」
実はシミュレータでは問題なかったのでOKかなと気にしていたのだが
やっぱり現物で確認しないとわからないから 渋々iPhoneSE購入となる。(ToT)/~
→ 現物で問題なし(無駄だったのかよ)
きっと何かの手違いと思いGoogle SDKを最新にして審査提出
2回目のお叱り
→ APPLEから 「クラッシュするから、ログ見て直してね」
へ?現物でOKだったのにー
ログを覗くと
①EXC_CRASH (SIGABRT)
②Thread 4 name: Dispatch queue: com.apple.root.default-qos
Thread 4 Crashed:
→ よくわからんが Dispatch queue 使ってるので、何か問題あるのか解析
→ メモリー管理関連で怪しい部分あったので修正して審査提出
3回目のお叱り
→ APPLEから 「クラッシュするから、ログ見て直してね」
へ?また?
元々StoryBoard使っていなかったのですが使うように修正した時に何かチョンボ
したかなと確認して不足分修正して審査提出
4回目のお叱り
→ APPLEから 「クラッシュするから、ログ見て直してね」
そろそろノーヒントでは厳しくなってきてます。
ログをよくよく見ると機種がiPadでした(iPhone,iPad両対応だったんだ)
そこかーとシミュレーションで確認したら確かに操作でクラッシュする事確認
キター
対応して審査提出
5回目のお叱り
→ APPLEから 「クラッシュするから、ログ見て直してね」
やる気だいぶん失せてます。
こそっとiPadなしで審査提出したら、Xcodeから「ちゃんとサポートしなさい」と怒られる
やっぱり現物で確認しないとわからないから 渋々iPadmini購入となる。(ToT)/~
→ 現物で問題なし(また無駄だったのかよ)
これまでの間に他のAPPも審査提出したが問題なく通ってる事からadMobの有無に見える。
最新のSDKが出てたので入れ替えて審査提出
6回目のお叱り
→ APPLEから クラッシュするから、ログ見て直してね
投げやりになってきてます。
adMob関連の記事、情報をかき集め設定する。
Info.plistの設定
<key>gad_preferred_webview</key>
<string>wkwebview</string>
とか
NSLayoutConstraint constraintWithItem: の追加とか
こちらで見て動作問題ないので審査提出
7回目のお叱り
→ APPLEから クラッシュするから、ログ見て直してね
いいかげんやになってます。
ログの解析を真面目にやって確認した情報を持って確認
どうもadMobでクラッシュしている模様
まるで
Info.plistにGADApplicationIdentifierがなくて❌
のログに似てる
もしかして審査パッケージのplist間違えてるんではと思い
あっちこっちにInfo.plistがあるのでを整理
①テスト用の .xctest含むファイルを削
②Info.plistの場所と名前変更
build setting で plistで検索
Packagingに設定がある。
とりあえず修正して審査提出
8回目のお叱り
→ APPLEから クラッシュするから、ログ見て直してね
一体どなってんねん。こっちでは起こっとらんちゅーのに
でもadMobが関連している事は確かな模様
adMobでいろいろ実験して
設定関連(Info.plist)を最小にして、余分な設定(6回目のお叱り)も削除
GADMobileAds.sharedInstance().start(completionHandler: nil)
のパラメータと睨めっっこ
completionHandler:
「広告を読み込む前に
、アプリで GADMobileAds.sharedInstance の startWithCompletionHandler: メソッドを呼び出し、Google Mobile Ads SDK を初期化する必要があります。これにより、SDK が初期化され、初期化の完了後(または 30 秒のタイムアウト後)に完了ハンドラが呼び出されます。この処理は 1 回だけ行います。アプリの起動時に行うのが理想的で、できるだけ早く呼び出す必要があります。」
とGoogleさんは言ってますが・・・・・そんなに急かされてもねぇ
んん? 広告を読み込む前に
??? 広告のリクエストはするけど 読み込みはGoogleさんSDKがするんで
ないかい?
つまり初期化が終わるまで待ちなさいって事?
終わったらこのハンドラが呼ばれるって事かい
実験実験
ハンドラの呼び出しとリクエストの呼び出しのタイミング見ると
ハンドラ関連
https://developers.google.com/admob/ios/api/reference/Classes/GADMobileAds
の -startWithCompletionHandler: 参考
ハンドラは、どーもバックグラウンドで実行されてるようで、ハンドラが呼び出される前にリクエストしているようだ
!!!!!!!!!!!!
タイミングが早いとクラッシュ??
ファイナルアンサー
クラッシュは初期化が完了していない(Info.plist読み込み)時に広告読み込みしたので
クラッシュしたと推測、広告の処理は、ハンドラが呼び出されてから広告リクエストするようにに修正した
修正して審査提出
"Ready for Sale".
Mailきましたー 大当たり
当たりどす