プログラミング

Found an unexpected Mach-O header code: 0x72613c21 への対処 Xcode, Admob, xcframework

投稿日:

日々変わっていくAdmobの仕様への対応にとても苦労しています。
そんな中、アプリをApple Store Connectへ提出するためXcodeにてArchiveを作成してValidateしようとしたら突然

Found an unexpected Mach-O header code: 0x72613c21

というエラーが。
原因はアプリに組み込んだAdmob関連のxcframeworkがパッケージ内にファイルとして残っていたためでした。これらのxcframeworkはスタティックリンクのため削除する必要があるそうです。
対処法は検索すると

Build Phaseにて最後にRun scriptを作成し、script内にxcframeworkを削除するコマンドを記述する

参考記事:

https://qiita.com/temoki/items/da91bffe5a347103b0ca

との事です。
Twitterにてもこの対処法(参考記事リンク)で解決したというtweetを見つけました。
しかし私の場合はどうやらディレクトリ構造が参考記事と異なっていたためxcframeworkを削除することができませんでした。開発者それぞれで環境が異なるのであるあるですね。
そこで私は

FinderよりArchiveのパッケージを開けてxcframework関連を手動で削除

して、見事validateからDistributeに成功しました。
翌日、無事に審査は通りました。

以下にもう少し詳しく説明します。

開発環境

xcode: version12.5
Google Mobile Ads SDK : 8.1.0
iPhone: iOS14.6

Admobは手動インストール

そもそもここから既に難しいです。私はCocoaPods任せにするのが怖いので手動やる方法を選択しています。
最近はやっとWeb上に参考記事が増えてきたので何とか対応できましたが、数ヶ月前は情報がなくて私はxcframeworkを組み込めませんでした。実機用のframeworkのみを組み込んでシミュレーターは完全に捨てるという荒技で数ヶ月の間を乗り切ってきました。
しかし困った事態に遭遇しました。とあるアプリが「AppTrackingTransparencyが組み込まれていない」という理由でリジェクトされたのです。提出したアプリには数ヶ月前から確かにAppTrackingTransparencyが実装されており、しかもこれまで何回も審査を通ってきたのに不可解なリジェクトです。腹が立ちましたがReviewerとは絶対に言い争ってはいけないので(そのアプリは永久に公開されなくなります)、丁寧な文章で「確かに実装してあります」と書いて、証拠のスクリーンショットを添えて返信をしました。
すると翌日、さらに私を怒らせる返信が来ました。

「アプリを起動してAppTrackingTransparencyのメッセージが立ち上がり追跡を拒否と許可したところの様子を動画で送れ。」

との事。私は「お前が自分でやれよ。それが審査だろうが。」と思いましたが、はっと気がつきました。

審査員は実機を使っていない、シミュレーターでしか審査をしていない。

そうです。私はxcframeworkの実装を回避していたのでAdmobが含まれているアプリはシミュレーターで起動できないのです。この件に関しては要求通りに動画を撮影して返信して無事審査を通りましたが、この間に数日を要しました。この先、公開ずみの全てのアプリでこのやりとりをするのはしんどいと感じ、xcfameworkの実装に再挑戦する事にしました。

Webに情報があったのですんなりと実装できました。

https://koremo2020.com/xcode/1458/

JavaScriptCore.frameworkがないというエラーが出ましたが、追加するだけで解消できました。

この時点でAbmobが実装された状態で実機検証ができるようになりました。

xcframeworkの削除

XcodeにてProduct -> Archive でビルドが完了すると Organizerが立ち上がります。
ファイルを右クリックして「Show in Finder」 を選択。


ファイルを右クリックして「パッケージの内容を表示」を選択。


さらにProducts -> Applications からファイルを右クリックして「パッケージの内容を表示」を選択。
複数のファイルが表示されるので中から「GoogleMobileAdsSDK」関連のフォルダまたはファイルを全て手動で削除する。

以上を行なった上でOrganizerに戻ると、ValidateとDistributeができると思います。

-プログラミング

執筆者:

関連記事

Javascriptでまばたき検知 face-api.js landmarks

顔認識の技術の発展により、今日ではまばたきの検知まで容易に行えるようです。例えばPython、OpenCV、dlibを使用したものではhttps://www.pyimagesearch.com/201 …

Android Studio Admob Error “No Ads Config” from Domain “com.google.android.gms.ads

D/MyApp: {“Code”: 3,“Message”: “No ad config.”,“Domain&#82 …

Node.jsからGo-langへ移行

ストレスなく思いっきり遊べるゲームを実現したくなりました。現行のNode.jsでは処理性能が限界。PaaSが対応しているものの中で高速化が望めるものがGo言語しかない。全くもって無知だがやるしかない。 …

Python pyworld インストールできない時の対処法

Windows10でpyworldをインストールしようとしたら、途中で止まってしまった。なんかWarningがでてました。 WARNING: Ignoring invalid distribution …

100万DLアプリを生み出せ

アプリ公開で収益を得るようになってから数年、いまだ大当たりはありません。1本でも大当たりアプリを生み出した=アプリで成功と言って良いでしょう。では、そもそも「大当たり」アプリとはどんなものでしょうか? …

スポンサーリンク