openFrameworksで作った.appを配布する

openFrameworksで作ったアプリを共有したい時、どのファイルを共有すればいいのか情報があまりなかったので、メモ。
といっても下記参考サイトをそのまま。

実際どの方法が正しいのか私自身よくわかってないけれど、とりあえずは以下の方法が良さそう。環境はMac OSXでのみ確認、、、確認中です。
Mac同士では問題なさそうだけど。。

手順はふたつ!
まず、XcodeからBuild Phasesを開いて、RunScriptに以下を追加する。

cp -r bin/data "$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources";

※上をコピペすると”がフォントの違い?でパスとして認識されませんでした。
→「”」だけ手入力で修正したらパスの文字列が赤色になって有効になります。

うえすることで、bin/data以下に入っているイメージとかなんやかんやが、ビルド時にできるOOO.appファイルのResourcesファイルにコピーされるわけですね。
これがうまくいってるかはビルドして生成されるOOO.appを右クリック→パッケージの内容を表示 でResourcesフォルダ確認できます。

で次に、ofAppのsetup()内で以下を追加

ofSetDataPathRoot("../Resources/data/");

うえすることで、bin/dataフォルダではなく、app内のResourcesフォルダからデータ取ってくると指定している。

そんな感じだと思います。

こうすれば、OOO.appを他のPCでも動かせるようになります。
dataフォルダに画像素材とか置く必要ないのであればこんな処理も必要ないだろうけど。

参考:
https://stackoverflow.com/questions/4882572/how-to-bundle-an-openframeworks-application-in-xcode-relative-resource-linking

20190106追記

app化したファイルをAirdropで別のPCに送ると、dataフォルダを参照できないことがありました。実際には、ofxGuiの設定xmlをセーブなどできてもロードできないというもので、たしかにappのコンテンツの中のResourceフォルダのxmlが更新されていませんでした。

詳しいことはわかりませんが、Airdropで送ったappをダウンロードフォルダにおいたまま開くと上のような現象が起こり、一度デスクトップや別フォルダに移動させると正しいdataパスを指定していました。

ofFilePath::getCurrentExePath() などでちらっと確認したところ、Airdropで送りたてのappではprivate/~~の一時的なフォルダにappが置いてあるみたいで、期待するdataフォルダ(この場合は~~~/downloadsにあると思ってた)を参照しないようです。

とにもかくにも上の現象が起こる場合は、一度別のフォルダに移動して開いてみると良いかもしれません。

コメントを残す

メールアドレスが公開されることはありません。