プログラミング

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ができると思います。

-プログラミング

執筆者:

関連記事

no image

ショーモナイノ/ ソースコード(クライアントサイド)

サーバサイドのソースコードを公開したところ、結構ビュー数が伸びているようです。なのでクライアントサイドも公開しておきます。何かの役に立てればと思います。 内容はとんでもないジャンクコードとなっています …

Android studio|FFmpegでやりたい放題するための準備

動画を利用したアプリを作成するにあたりFFmpegを使用できると大変便利です。Web上に多数の情報がありますが、数年前の記事は役に立たなかったり、実用的な情報が少なかったりします。本記事ではAndro …

no image

ショーモナイノ/ ソースコード(サーバーサイド)

ショーモナイノのコードを公開していないかとのお問い合わせを頂きました。GitHubでの公開を検討しましたが、書き散らかした粗末なコードをGitHubに置くべきではないと判断しました。代わりに自分のブロ …

iPhoneアプリ公開でAppStoreにて言語が英語になる場合の対処 | Xcode

日本語にしか対応していないアプリを作成してAppStoreConnectでも言語を日本語しか選択していないのに、公開したらAppStoreでの言語表記が「英語」に。日本語にしたい場合の対処法です。[対 …

2重振り子の数値シミュレーション、解析から結果描画まで[Octave / Matlab / Android iPhoneアプリもあるよ]

久々に数値解析をやってみたくなりました。題材としては多くの人がやっている二重振り子が面白そうです。では言語は何にしようかと迷うところですが、コードを書いて計算して結果を描画するまで可能な「Octave …

スポンサーリンク