macOSでCocoaアプリケーションをデフォルトのWebブラウザに設定する方法

Webブラウザの作成は daunting に聞こえるかもしれませんが、もしCocoaアプリケーションにその役割を持たせたい場合はどうでしょうか?macOSでアプリケーションをデフォルトのWebブラウザに設定するのは実現可能であり、HTTPおよびHTTPSリンクとのシームレスなインタラクションを提供することでユーザーエクスペリエンスを向上させることができます。このブログ投稿では、この目標を達成するための重要なステップを説明します。

問題

ユーザーがMailやiChatなどのアプリケーションでWebリンクをクリックすると、デフォルトのWebブラウザが起動します。Cocoaアプリケーションを開発しており、これらのリンクを開くアプリケーションにしたい場合は、HTTPおよびHTTPSリンクを処理できるようにアプリを構成し、それをデフォルトのブラウザとして設定する必要があります。

解決策

CocoaアプリケーションをデフォルトのWebブラウザにするための4つのステップは次のとおりです。

1. アプリケーションのInfo.plistにURLスキームを追加

最初のタスクは、macOSにアプリケーションがHTTPおよびHTTPSリクエストを処理できることを知らせることです。これは、アプリケーションのInfo.plistファイルを修正することで行います。以下の手順で行います:

  1. アプリケーションのInfo.plistファイルを開きます。
  2. 次のXMLスニペットを追加します:
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>http URL</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>http</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleURLName</key>
        <string>Secure http URL</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>https</string>
        </array>
    </dict>
</array>

この追加により、アプリが両方のタイプのURLスキームを処理できることを宣言しています。

2. URLハンドラーメソッドを作成

次に、アプリケーションにURLを開くように求められたときにトリガーされるメソッドを作成する必要があります。以下は、その簡単な例です:

- (void)getUrl:(NSAppleEventDescriptor *)event 
    withReplyEvent:(NSAppleEventDescriptor *)replyEvent 
{
    NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject] 
        stringValue];

    // TODO: カスタムURL処理コードをここに実装
}

このメソッドでは、URLを取得した後に処理するためのロジックを実装します。

3. URLハンドラーメソッドを登録

URLハンドラーメソッドを作成したので、macOSのイベントマネージャーに登録する必要があります。このためには、アプリケーションの初期化セクションに次のコードを追加します:

NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
[em setEventHandler:self 
  andSelector:@selector(getUrl:withReplyEvent:) 
  forEventClass:kInternetEventClass 
  andEventID:kAEGetURL];

また、古いアプリケーションをサポートするために、WWW!/OURL Apple Eventにも登録します:

[em setEventHandler:self 
  andSelector:@selector(getUrl:withReplyEvent:) 
  forEventClass:'WWW!' 
  andEventID:'OURL'];

4. アプリをデフォルトのブラウザに設定

最後に、Launch Services APIを使用してアプリをHTTPおよびHTTPSスキームのデフォルトハンドラーとして設定する必要があります。次のコードを追加します:

CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier];
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID);
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID);
// TODO: httpResultとhttpsResultをエラーのためにチェック

ヒント:デフォルトのブラウザ設定を変更する前に、ユーザーに許可を求めることは良い習慣です。

カスタムURLスキーム

標準のURLスキームに加えて、独自のカスタムスキームも実装できます。他のアプリケーションと競合しないように、カスタムスキームはアプリのバンドル識別子を基にすることが賢明です。たとえば、バンドルIDがcom.example.MyAppの場合は、x-com-example-myapp://のような構成を実装することを検討してください。

結論

このシンプルなガイドに従うことで、CocoaアプリケーションをmacOSのデフォルトWebブラウザにすることができます。これにより、アプリケーションの利用価値が向上し、ユーザーにとってより良く統合されたWeb体験が提供されます。デフォルト設定を変更する際には、常にユーザーの同意を優先して、スムーズな移行を心掛けてください。

実装中に問題が発生した場合は、質問やコメントがあれば自由にお知らせください!