問題
Xcode9の画面。 以前のバージョンでも出てた模様。 |
正常に動いていたアプリをAppStoreに提出すべくArchiveをし、Validate...しようとしたら
Found an unexpected Mach-O header code: 0x72613c21
という妙ちきりんなメッセージが出てニッチもサッチも行かなくなった。
意味は
訳すと「予期しない Mach-O ヘッダーのコードを発見した」である。
Mach-O(マーク・オー)はmacOSの前身であるNESTSTEP由来のコンパイラが生成するオブジェクトファイル/実行ファイルのファイルフォーマットだそうだ。(カーネルの名前がMachだからだな)
さらにMachHeaderはCPUの種類、ファイルの種類などの情報が書かれたヘッダのようだ。
要するに想定外の 0x72613c21 という情報がヘッダに書かれてるということだろう。
メッセージで検索すると 0x72613c21 の部分も含めて全く同じものが出ているようだ。人によって数値が変わるわけじゃないのだな。
どうやらこれはFrameworkをインストールした際の設定などがうまくいってないっぽい。
自分の場合TwitterKitと、画像処理のためのオープンソースライブラリのOpenCVをインストールしているので、それが関係していそう。
対処
Logファイルを見ても、エラーメッセージの後にDVTFilePathがどうのというのがいくつも出ているけど、さっぱりわからなかった。
./Users/YourFile/Library/Developer/Xcode/DerivedData の削除をしてもダメ
XcodeでProductのClean、Clean Build Folder...をしてもダメ。
解決した
TwitterKitの公式サイトに書かれていたインストール方法が、以下のようだった。
- TwitterKitをEmbedded Binariesに
- TwitterKitとTwitterCoreをLinked Frameworks and Librariesに
TwitterKitが2つ出てきておかしいとは思いつつ、Embedded 〜 に追加すると自動的にLinked 〜 にも追加されるんで、下の方ではTwitterCoreしか追加してなかったのだが、それが良くなかったようだ。
結果的にEmbedded 〜 の方を削除し、Linked 〜 の方にだけあらためてTwitterKitを追加したところ、無事Validate...が通った。
Embedded 〜 に残しておいても通ったけど、Linked 〜 にTwitterKitが2つ重複して入るため、気持ち悪いから消した。
原因
こちら(stack overflow)の回答を見たところ、以下のような記述があった(英語で)。
Mach-O型のFrameworkが「Static(静的)ライブラリ」である場合、それをEmbed(埋め込み)フレームワークに入れるべきではありません。 Mach-Oタイプが「Dynamic(動的)ライブラリ」の場合は、Embedフレームワークに配置する必要があります。TwitterKitがStatic LibraryなのかDynamic Libraryなのかよくわからんのだけど、結果的にEmbedded Binaries に入れず、Linked Frameworks 〜 に入れるべきだったのだな。
とにかく解決したようなので助かった。こんなん、ネットがなかったら絶対わからんかったもん。
今後やはりEmbedded 〜 にも入れないといけない不具合が出るかもしれないけど、そしたらまた追記/訂正します。
0 件のコメント:
コメントを投稿