プログラミング

MacOSアプリ公開:備忘録、ライブラリLink

投稿日:

Web上にMacOSアプリ公開に関する情報は少なくて苦労しています。iPhoneアプリと比較した場合、MacOSアプリはAdmobで稼ぐという手段がなく有料版リリースをするしかないので開発者からは敬遠されがちかもしれません。しかしながら、MacOSアプリには結構高額な価格設定でも売れるという傾向があるようなので私は細々と開発を続けています。
おそらく標準ライブラリのみを使ったアプリならばiPhoneアプリと同等の労力で公開できると思われます。しかし外部ライブラリを用いた場合は結構苦労します。今回、久々に更新を試みたところ何度もリジェクトを受けてしまったので、忘れないように要点を記しておきたいと思います。

3年放置していたらストアから削除された

当然のことですが有料アプリを約3年間ノーメンテナンスで放っておいたら「ストアから削除しました」というメールが来ました。売り上げを見たら直近でも僅かながら収益があったのでこれはまずいと思い、大急ぎで再申請をしました。

デプロイツールを削除してしまったので苦労するはめに

一応、過去の公開手順メモがあったのでそれに沿ってやれば問題ないと考えていました。XcodeにてArchiveで出力したものに数行のコマンドを走らせるだけです。しかしコマンドにはQtのデプロイツールが含まれていました。少し前にQtはもう使用しないと思ってアンインストールしてしまいました。Qtは数Gあるのでまたインストールするのも少々面倒です。勉強のためにデプロイツールを使用せずに自分でコマンド操作を行う事にしました。
やる事は外部ライブラリのLink参照をopt/..などからパッケージ内のFrameWorks下に変更するだけです。しかし過去にこの点を完全に理解していなかったので今回とても苦労しました。

リンク修正:otool -Lで確認してinstall_name_tool -change

手順:
・Finderにてxcarchiveファイルを「パッケージ内容を表示」で開けて、Products->Applicationsフォルダに移動
・ターミナルを開いて、cdの後にApplicationsフォルダをドラッグ&ドロップ
・otool -L ooo.app を実行
・ライブラリのリンク先一覧が出力されるので、全てアプリ内になっているかを確認。
 私の場合は、opt/local/lib/以下のものがあったのでこれを修正します。
・Finderにて ooo.app を 「パッケージ内容を表示」で開けて、 Contents以下を表示。
・FrameWorksフォルダがない場合は自分で作成して、
 opt/local/lib以下に参照されている依存ライブラリを全てFrameWorksフォルダ以下にコピー
・再びターミナル。先ほどのApplicationsフォルダにて全てのライブラリファイルに対して以下を実行
 install_name_tool -change /opt/local/lib/xxx.dylib @executable_path/../Frameworks/xxx.dylib ooo.app/Contents/MacOs/ooo
・再度otool -L ooo.app を実行してリンク先が修正されているかを確認する。

リンク先修正は以上。

コードサインと確認

以下のコマンドについては現在も必要かは分からずおまじない的に実行しています。

手順:
・Finderにてxcarchiveファイルを「パッケージ内容を表示」で開けて、Products->Applicationsフォルダに移動
・ターミナルを開いて、cdの後にApplicationsフォルダをドラッグ&ドロップ
・以下のコードサインのコマンドを実行:
 codesign –deep –force –verify –verbose –sign “Apple Development: △ △ △” –entitlement ooo.app/Contents/Resources/ooo.entitlements ooo.app
・以下の確認コマンドを実行。問題なければsatisfiedと表示される。だめならinvalid。
 codesign –verify –verbose=4 ooo.app
 


-プログラミング

執筆者:

関連記事

今さらNode.js+Three.jsでゲームを作る理由 – なぜUnity, Unreal Engineでないのか

目次 目的を「コードを書いてゲームを作る」に絞る捨てる物余談、私自身の目的皆さんに言えるJavascriptでゲームを作るメリット 目的を「コードを書いてゲームを作る」に絞る ゲーム作成経験のない場合 …

弾丸と壁/人の接触判定を少し真面目に実装してみる|ゲーム作成

フォートナイトみたいなオンラインバトロワゲームを作っています。優秀なサンプルコードから作成を開始したので早い段階で一応形にはなりました。しかし、サンプルをいじりすぎて接触判定に矛盾が生じてきてしまいま …

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

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

no image

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

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

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

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

スポンサーリンク