プログラミング

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

-プログラミング

執筆者:

関連記事

Heroku 独自ドメインで公開の手順 / ムームードメイン, ロリポップ使用の場合

HerokuでいくつかNode.jsゲームを公開しています。そのままただ公開すると「https://アプリ名.herokuapp.com」というURLになりますが、収益化などを考えた場合は独自ドメイン …

FFmpeg.wasm使い方: 動画をアップロードして音声を抽出する

FFmpeg.wasmの使い方の一例として、動画をアップロードしてその音声を抽出したmp3を出力してみます。処理が終わると音声が自動で再生されます。音声のプレイヤー上で右クリックするとファイルの保存選 …

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

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

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

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

2重(N重)振り子の数値シミュレーション – Javascriptで計算から描画まで

2重振り子を数値シミュレーションをJavascriptでやってみます。Javascriptでやる利点は計算後の結果表示アニメーションまで容易に行える事だと言えます。2重振り子の解法に関する記事はWeb …

スポンサーリンク