private Apple APIs を使ってると言われて、セレクタを探す(今回は initWithSlotId: )

(開発をやってると)こういうメールをiTunes Connectから送りつけられることがある。 プライベートな(パブリックじゃない)APIを使ってるから受けつけられない、Invalid Binaryですよ、と。

よくあるのがシステムのバージョンアップ時で、今後追加されるであろうAPIを事前に追加しちゃってサブミットすると(方法はともあれ)、それはだめだと蹴られちゃうパターン。 もしくは新しくプライベートでそのものずばりなAPIが追加されちゃったパターン。

恐らくであろうけど今回は後者のようで。

initWithSlotId: なんていうセレクタ、いかにもな感じでありまして、取り敢えずはググってみると、広告関連のSDKで実装されているよう。 私はその会社のSDKは使っていないんだけど、なんちゃらいう広告を回し飲みするような仕組みの関係でうんぬんかんぬんなのかな、って思って。

それはともかく、バイナリから initWithSlotId: をチェックしてみる。

ipaファイルだったら拡張子をzipに変更して展開。 Payloadディレクトリの中に.appパッケージがあるので、中身を見ると、アプリ名と同じ名前で拡張子の付いていないファイルがある。 これがバイナリファイルで、こいつをターミナルを起動してstringsコマンドで開く。

strings (bynary file)

検索すると、ヒットする。 しかも2つ。

で、これでもって、どこのSDKが使っているのかを調べるんですけど、総当りでやっつけるのが一番いいみたい。 あとは、XcodeでProductをCleanしてからそのままArchiveすると、前後関係がなんとなくわかる場合が・・・あるけど、ないこともあるみたいなのでなんとも言えないですごめん。

実際問題、上の画像はAdGenerationのSDKをチェックしてたらヒットしたところで、こうなるとしかたない、このSDKは外すしかないです。 もしくは、SDKのバージョンアップまで待つか。 でも、待てないよね、正直。