最初に起動せずにファイルタイプをMacOS Xアプリに関連付ける方法
-
10-07-2019 - |
質問
Mac OS Xアプリケーションの最後にインストールされたバージョンを特定のタイプのファイルに関連付けたい。ちょっとした実験により、 info.plist ファイルは、アプリケーションバンドルをディスクにドラッグするときではなく、アプリケーションの起動時にオペレーティングシステムによって読み取られ、解釈されるように見えることがわかります。 実行時のAppleのドキュメント構成はそのトピックについてあまり語りません。
簡単な .dmg
イメージをインストールメディアとして使用して、システムが特定のファイルタイプを新しくインストールされたアプリに関連付けるようにする方法はありますか?起動することなく strong> first?
インストール中にこれを自動的に実行することを明確にする必要があります(ユーザーが自分で実行する必要はありません)。
解決
ユーザーがアプリケーションをアプリケーションフォルダーにドラッグすると、システムはそれをLaunch Servicesに自動的に登録する必要があります。 アプリケーション登録。
他のヒント
これを行うには、アプリケーションを関連付けるファイルにapple-Iと入力し、「開く...」という小さなボックスを使用します。アプリを選択します。 「すべて変更...」の下の小さなボックスをチェックできます。同様のすべてのファイルに変更を加えます。
Tonyの情報は正しいですが、こちらでも説明されていますが( MyApp.app
から Applications
は、 Info.plist
xmlファイルとセットアップファイルの関連付けからの情報を使用してLaunch Servicesに自動的に登録されます)、ファイルの関連付けに関する質問に完全には答えません。
これらの指示に従うと、アプリケーションは開かれますが、特定のファイルは開かれません。
[...]システムがその特定のファイルタイプを新しくインストールしたアプリに関連付けていることを確認します
ファイルの関連付けは、Macでは他のプラットフォームと比較すると少し異なります。ほとんどのプラットフォームでは、 *。foo
を myapp
に登録し、 MyFile.foo
をダブルクリックすると、次の行に沿って何かをディスパッチします。
/path/to/myapp MyFile.foo
また、このテクニックはMacのコマンドラインで自由に使用できますが、単に Finderで機能しません。また、関連ファイルをダブルクリックしても機能しません。デスクトップで。
質問と回答はこちら:
https://stackoverflow.com/a/19702342/3196753
このアプローチは、「アプリケーションの1つのインスタンスのみを開く」ため、 main()
の保守的なドキュメントオープンファイル処理よりも有利であるという主張もあります。この決定の背後にある理由に関係なく、C ++の観点から問題をさらに複雑にします。
- 108ページのPDFが利用可能こちら(警告、これは「レガシー」とマークされているため、linkrotが発生する可能性があります)。
- Appleの開発者ポータルから入手可能な関連ドキュメントここ。
- Qtのアプローチは、こちらに記載されています。 >
qt.ioから:
ユーザーがFinderでファイルをダブルクリックすると、FinderはAppleイベントをファイルに関連付けられたアプリケーションに送信し、ファイルを開くように要求します。アプリケーションが実行されていない場合は、アプリケーションが起動されてから要求が行われます。このアプローチの利点は、実行中のアプリケーションのインスタンスが1つしかないことです。
Windowsでは、これは通常、アプリケーションを起動し、コマンドライン引数としてファイルの名前を渡すことによって行われます。多くのファイルを見ると、同じアプリケーションの多くのインスタンスが起動します。 (Qtソリューションとして利用可能なQtSingleApplicationコンポーネントは、この問題に対処します。)
Qt 3はAppleイベントを処理するための抽象化を提供しませんが、MacのCarbon APIを使用するアプリケーションでそれらのサポートを追加するのは簡単です。 XPMファイル(X11画像形式)を表示するXpmViewerと呼ばれるアプリケーションがあると仮定しましょう。メインウィンドウクラスの宣言は次のとおりです。[コードスニペットを削除]
(BOOL)application:(NSApplication *)theApplication
openFile:(NSString *)filename
C ++ main()実行前のMac OS Xファイルオープンイベントの処理 AEInstallEventHandlerハンドラーが起動時に呼び出されない