web-dev-qa-db-ja.com

カスタムプロトコルをMac上のアプリケーションにマッピングするにはどうすればよいですか?

Mac上のアプリケーションにカスタムプロトコルを登録しようとしています。

  1. ユーザーが「abcdef:// some/url/here」のリンクをクリックします
  2. インストールされたアプリケーションは、最初のパラメータとして渡された上記の文字列で起動されます

この質問の情報を使用して、Windowsでこれを正常に実行しました。

独自のURLプロトコルを作成するにはどうすればよいですか?(例:so:// ...)

ブラウザに依存しない、つまりOSレベルの何かを見つけたいと思います。また、シェルスクリプトを使用してこの登録を自動化したいので、GUIを使用せずにこれを行う方法があることを願っています。

ありがとう!

26
cliff.meyers

私はそれを使用する機会がありませんでしたが、しばらく前にブックマークしました OS X URLハンドラーでローカルファイルへのリンクを開きます それはまさにあなたが探しているものです。

リンクされたプロシージャの重要な部分は、適切な CFBundleURLTypes をアプリケーションのInfo.plistに追加して、スキームを説明することです。そこに示されている例は次のようになります。

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Local File</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>local</string>
        </array>
    </dict>
</array>
14
Jay

Macでは、これはAppleScriptで簡単に実行できます。最も詳細な説明は、この記事 MacのWebページリンクからスクリプトを起動する にあります。完全なウォークスルーとダウンロードする完全な実例が含まれているので、そのページを読みました。

基本的に、スクリプトでイベントハンドラーを作成します。

on open location this_URL
    display dialog "I'm doing something with this URL: " & return & this_URL
end open location

次に、それをアプリケーションとして保存します。次に、Finderで[パッケージの内容を表示]を使用してInfo.plistを編集します。アプリにいくつかのプロパティを追加して、プロトコルのハンドラーとして登録します。

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Cliff's handler</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>abcdef</string>
        </array>
    </dict>
</array>
16
Turadg

今日の時点で、オーバーヘッドが最小のMacでこの問題を解決するために私が見つけた最善の方法は、コマンドラインを使用することです duti これにより、非常に単純なテキストファイルですべての関連付けを定義できます。

brew install duti

2つのものが必要になります。関連付けるアプリの最初のバンドルID:

mdls -name kMDItemCFBundleIdentifier /Applications/MacVim.app

2番目にファイルタイプのUTI Appleはリストを提供します ですが、次のようにアプリでサポートされているUTIを調べることもできます。

mdls -name kMDItemContentTypeTree /Applications/MacVim.app

次に、バンドルIDをUTIに関連付けるシステムのどこかにテキストファイルを作成します。

# ~/.default-apps.duti
#
# bundle id       UTI                  role
com.Apple.Safari  public.html          all
org.vim.MacVim    txmt
org.vim.MacVim    public.Ruby-script

TxmtのようなURLハンドラーと、Rubyスクリプトのようなファイルタイプを関連付けることができることに注意してください。

そのファイルでは、すべてのアプリ設定を追跡し、完全な新規インストールの直後、または実行中の他のMacでアカウントを取得したときにそれらを再現します。

duti ~/.default-apps.duti
6
SystematicFrank

ジェイの回答のリンクされたページの重要な部分は、Info.plistのエントリです。

Launch Servicesを使用すると、特定のURLスキームを処理できる唯一のアプリである場合、このアプリが自動的に開かれると思います。それ以外の場合は、チャーリーマーティンが説明するトリックを使用する必要があります。

実行する必要のあるdefaultsコマンドが何であるか、またはそれがlaunchctlコマンドであるかどうかはわかりません。

5

詳細を掘り下げるのは難しいですが、 RCDefaultApp という設定ペインがあり、それを処理します。私はまだそれがどのように機能するか知りたいです、掘り続けます。

4
Charlie Martin

この質問は10年前(!)ですが、Google検索でここにたどり着いたので、発見したばかりのことについて言及したいと思いました。

Platypus は、シェルスクリプトまたは他のスクリプト言語からスタンドアロンの「アプリケーション」を作成できるオープンソースツールです。これは実際には単なるスクリプトラッパーですが、ダイアログボックスやメニューバー項目などのいくつかの優れた機能を有効にします。

重要なのは、「アプリ」を独自のカスタムURLスキームのハンドラーとして登録することもできるということです。ドキュメントから:

URIスキームハンドラーとして登録すると、アプリはURIスキームのハンドラーとして登録されます。これらは、httpなどの標準URIスキーム、または選択したカスタムURIスキーム(myscheme://など)のいずれかです。アプリがURIスキームのデフォルトのハンドラーである場合、スキームに一致するURLが開かれるたびにアプリが開かれます。次に、URLが引数としてスクリプトに渡されます。

セットアップはとても簡単です。スクリプトを入力し、詳細設定ページで目的のスキーム名を入力してから、クリックしてアプリをビルドします(すべて自動化されています)。スキームとスラッシュの後のすべては、スクリプトへの引数として渡されます。

たとえば、次のbashスクリプトを「speak://」プロトコルのハンドラーとして使用できます。

#!/usr/bin/env bash
# The 'say' command on macOS will speak the provided text through the speaker
say $1

ブラウザにspeak://say-something-funnyと入力するか、コマンドラインでopenコマンドを使用して、これを呼び出すことができます。

$ open "speak://hello-from-the-command-line"
0
Mark Thomson