作成したスタンドアロ​ンアプリケーションの​インストーラが他のマ​シンで開けない

App Designerで作ったアプリをスタンドアロンデスクトップアプリケーションとして他の人(MATLABを持っているとは限らない)に配布し使ってもらうことを考えています。
App Designerでアプリを作成した後、 https://jp.mathworks.com/help/matlab/creating_guis/app-sharing.htmlhttps://jp.mathworks.com/matlabcentral/answers/1928010-how-do-i-deploy-an-app-designer-application-to-a-standalone-desktop-apphttps://jp.mathworks.com/help/compiler/create-standalone-app-using-application-compiler-app.html 等に従い、「Desginer」タブの「Share」の「Standalone Desktop App」を押してApplication Compilerを開き、「PACKAGING OPTIONS」欄の「Runtime included in package」を選択した上で、「PACKAGE」欄の「Package」を押してパッケージ化しました。
https://jp.mathworks.com/help/compiler/files-generated-after-packaging-application-compiler.htmlhttps://jp.mathworks.com/matlabcentral/answers/1959629-matlab-runtime 等によると、生成される三つのフォルダのうち「for_redistribution」フォルダを渡せば良いようなので、他の人にこれを渡して中の「MyAppInstaller_mcr.app」を開いてもらおうとしたのですが、「アプリケーション"MyAppInstaller_mcr.app"を開けません。」というダイアログボックスが表示され開くことができませんでした。ちなみにフォルダごとではなく「MyAppInstaller_mcr.app」そのものを渡しても同様でした。
・どこに問題の原因がありそうでしょうか?
・MATLAB関連のソフトウェアが導入済みかどうかにかかわらず、このMyAppInstaller_mcr.appを無事に開くことができれば、MATLAB Runtimeが(入っていない場合には)インストールされてスタンドアロンアプリが動かせるようになるというのが、本来期待される動作だと理解しています。そもそもこの理解は正しいでしょうか?
環境は以下の通りです。
・スタンドアロンアプリを作成しMyAppInstaller_mcr.appを生成した環境:Apple M2、macOS 14.4.1、MATLAB 24.2.0.2740171 (R2024b) Update 1 (※ちなみに同じマシン上でMATLAB 2023bを使った場合でも同様であることを確認済みです。)
・MyAppInstaller_mcr.appを開いてもらうとした環境:Apple M2、macOS 14.5
よろしくお願いいたします。

Answers (1)

Kojiro Saito
Kojiro Saito on 11 Nov 2024

1 vote

.appを開けないというメッセージで、かつ「開発元を検証できないため開けません」のエラーではなさそうなので、ファイルアクセス権限の問題が考えられます。
該当のMacでターミナルを起動し、MyAppInstaller_mcr.appがあるディレクトリのファイル権限を確認してみてください。例えばデスクトップにファイルを置いている場合は下記のように確認できます。
ls -l ~/Desktop
または
ls -l ~/Desktop/for_redistribution
出力が「-rw-r--r--」のようになっていたら、実行権限(x)がないので「chmod +x」で追加します。
chmod +x MyAppInstaller_mcr.app
MyAppInstaller_mcr.appはパッケージ化したアプリとMATLAB Runtimeをインストールするインストーラーですので、これが開けてインストールができればアプリを実行できるようになります。

3 Comments

A
A on 11 Nov 2024
Edited: A on 11 Nov 2024
早速のご回答ありがとうございます。
1.
ちょうど先ほど、私も配布先の環境での実行権限の問題を疑っていたところでした。
ただ、ご提示いただいた方法では問題は解決できないことを確認しました。まず、MacにおいてMyAppInstaller.appはディレクトリ扱いですのでパーミッションを表す10文字の最初の文字は「-」ではなく「d」です。また、MyAppInstaller.appのパーミッションは最初から「drwx------」で所有者には実行権限がありました。この状態でMyAppInstaller.appは開けないという状況でした。(なお、ご提示いただいたコマンドでこれを「drwx--x--x」にしたりあるいは「drwxr-xr-x」などに変更したりしたとしてもMyAppInstaller.appが開けないという状況は変わりません。)
このことを確認した上で、次にMyAppInstaller.appの中の方にあるファイルのパーミッションを疑いました。その中で特にsetupというファイルのパーミッションが「-rw-------」だったのを
chmod +x MyAppInstaller_mcr.app/Contents/MacOS/setup
としてみたところ、MyAppInstaller.appを開くことができるようになり、無事にインストーラが最後まで進みました。(あるいはsetupというファイル以外もまとめて「chmod -R +x MyAppInstaller_mcr.app」などとすることによってもMyAppInstaller.appを開くことができるようになりました。)
ただこれは「とりあえずできた」というだけなので(上記setupというファイルが何なのかなど理解していないので)、まずこの点についてご見解を伺いたく思います
次に、これで問題解決かと思われたのですが、インストールされたアプリをダブルクリックして開こうとしたところ「(アプリ名) quit unexpectedly.」と出て今度はアプリを開くことができませんでした。このダイアログボックスからは詳細情報を確認することができたので見てみたところ、以下のように書かれていました。(抜粋です。またアプリの名前はappnameです。)
Termination Reason: Namespace DYLD, Code 1 Library missing
Library not loaded: @rpath/libmwsafe_env.dylib
Referenced from: <456235B3-22FF-3EA9-B82F-A8B68D7BE80A> /Applications/appname/*/appname.app/Contents/MacOS/applauncher
Reason: tried: '/Applications/appname/application/appname.app/Contents/MacOS/libmwsafe_env.dylib' (no such file), '/Applications/appname/application/appname.app/Contents/MacOS/./libmwsafe_env.dylib' (no such file), '/Applications/appname/application/appname.app/Contents/MacOS/../../sys/os/maca64/libmwsafe_env.dylib' (no such file), '/Applications/appname/application/appname.app/Contents/MacOS/libmwsafe_env.dylib' (no such file), '/Applications/appname/application/appname.app/Contents/MacOS/./libmwsafe_env.dylib' (no such file), '/Applications/appname/application/appname.app/Contents/MacOS/../../sys/os/maca64/libmwsafe_env.dylib' (no such file)
(terminated at launch; ignore backtrace)
必要なdylibファイルがないようです。アプリを開く際にこういったエラーが発生しないようにするにはどうしたら良いかご教示いただきたく思います。(上記エラー情報は抜粋なので追加で必要な情報があればおっしゃっていただければと思います。)
2.
ここまではMyAppInstaller.appの共有にGoogle Driveを用いていたのですが、MacのAirDropで共有した場合にはMyAppInstaller.appを開こうとすると「"MyAppInstaller_mcr" is damaged and can't be opend. You should move it to the Trash.」というダイアログボックスが出て開くことができませんでした。このケースではパーミッションの不足はありませんでした。この場合MyAppInstaller.appを開けるようにするにはどうしたら良さそうでしょうか?
また、共有方法に依存してMyAppInstaller.appの性質が変わるということのようですが(しかも試したどの共有方法でも何かしらの問題が生じておりアプリが正常に動作するところまでは至っておりませんが)、正常にMyAppInstaller.appを受け渡しするための手段として何を使うべきかを説明する公式のドキュメントはあるでしょうか?
3.
また、もう一つ別種の問題が出て来て困っております。
これまでとは別のMac上でこのMyAppInstaller_mcr.appを開いてもらおうとしたところ、「アプリケーション"MyAppInstaller_mcr"は、このMacには対応していないため開けません。」というダイアログボックスが出、開くことができませんでした。これが起きることを確認した環境はMacOS バージョン11台(Apple M1)とMacOS バージョン13台(Intel)です。
スタンドアロンアプリを作成しMyAppInstaller_mcr.appを生成したのがmacOS 14.4.1(Apple M2)であることも考えると、14.4.1よりも前のバージョンのmacOSでは開けないのではないかと疑っています。
一般に、スタンドアロンアプリを作成しMyAppInstaller_mcr.appを生成した環境のOSよりも前のバージョンのOSだとMyAppInstaller_mcr.appは開けずそれゆえスタンドアロンアプリの実行もできない、といった類の制約はあるでしょうか?
また、そのあたりのcompatibilityの問題を解説した公式ドキュメントを見つけられていないため、ご教示いただけますと幸いです。
お手数をおかけいたします。よろしくお願いいたします。
Kojiro Saito
Kojiro Saito on 12 Nov 2024
1. ファイル共有サービス経由のダウンロードで、フォルダー内のパーミッションが変わってしまったためと思われます。
libmwsafe_env.dylibのロードエラーについては、インストール時に格納されるシェルスクリプトを実行することで解消すると思います。/Applications/アプリ名/application/の中に「run_アプリ名.sh」というファイルが置かれるので、
./run_xxx.sh /Applications/MATLAB/MATLAB_Runtime/R2024b 引数1 引数2
のようにシェルスクリプト経由で実行してみてください。
2.生成したアプリの共有方法については公式ドキュメントは見つかりませんでした。
3.MATLAB CompilerではOSのマイナーバージョンまで合わせる必要はないのですが、少なくともAppleシリコン (Arm64)とIntel CPUではMATLAB Runtimeのソフトウェアが別になるので、現在のようにRuntimeをパッケージに含める方法ではうまくいかないと思います。
パッケージ化する際にMATLAB RuntimeをWebからインストールするデフォルトの設定にして作成されるインストーラー (MyAppInstaller_web.app)をIntel CPUのMacに配布してみてください。
A
A on 12 Nov 2024
Edited: A on 12 Nov 2024
ありがとうございます。
1.
libmwsafe_env.dylibのエラーについてですが、
./run_xxx.sh /Applications/MATLAB/MATLAB_Runtime/R2024b
とシェルスクリプト経由で実行することで時間はかかりましたが確かにアプリが起動しました。
ようやく全体像が見えてきた気がしているのですが、今回のようにApp Designerでスタンドアロンアプリを作成しfor_redistributionフォルダーの中のインストール用appファイルを配布している場合であったとしても、環境がMacやLinuxの場合は、配布先においてそのスタンドアロンアプリを使うためには必ず、上記のように毎回シェルスクリプト経由で実行する必要がある(もしスタンドアロンアプリのappファイルをダブルクリックして直接実行できるようにしたければ「デプロイ用の MATLAB Runtime パスの設定」に書かれているパスの設定が必ず必要である)ということでしょうか?
また、Windowsの場合はその必要はなく、アプリケーションのexeファイルをダブルクリックするだけで実行可能という理解は正しいでしょうか?
2.
了解いたしました。
3.
必要になるMATLAB Runtimeの種類の問題なのですね。こちらの経験とご回答内容を踏まえて、
・OSのマイナーバージョンの違いは問題ない
・OSのメジャーバージョンが違うと今回のようにうまくいかない可能性がある
・Macの場合、AppleシリコンかIntel CPUかが違うと(OSが同じでも)うまくいかない
ということだと了解しました。
ということは、配布用途のスタンドアロンアプリのパッケージ化では原則として"Runtime downloaded from web"を選択しておいた方が無難であると言えそうな気がします。
それでは、今回私が選択してしまっていた"Runtime included in package"を選択すべき時というのはどういう時でしょうか?
よろしくお願いいたします。

Sign in to comment.

Categories

Find more on 起動と終了 in Help Center and File Exchange

Products

Release

R2024b

Asked:

A
A
on 9 Nov 2024

Edited:

A
A
on 12 Nov 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!