Cocoa アプリケーションをデフォルトの Web ブラウザーとして設定するにはどうすればよいですか?
ユーザーが他のアプリケーション (メール、iChat など) で HTTP または HTTPS リンクをクリックしたときにデフォルトで起動されるアプリケーションを作成したいと考えています。
Cocoa アプリケーションをデフォルトの Web ブラウザーとして設定するにはどうすればよいですか?
ユーザーが他のアプリケーション (メール、iChat など) で HTTP または HTTPS リンクをクリックしたときにデフォルトで起動されるアプリケーションを作成したいと考えています。
既定の Web ブラウザーとして機能するアプリを作成するには、4 つの手順があります。最初の 3 つのステップでは、アプリが関連する URL スキーム (HTTP および HTTPS) のロール ハンドラーとして機能できるようになり、最後のステップでそれらのスキームのデフォルトのロール ハンドラーになります。
1) アプリが処理できる URL スキームをアプリケーションの info.plist ファイルに追加します
のサポートを追加するには、アプリケーションの info.plist ファイルに次を追加する必要がhttp://
ありhttps://
ます。これにより、アプリケーションが HTTP および HTTP URL を処理できることが OS に通知されます。
<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>
2) URL ハンドラー メソッドを作成する
このメソッドは、アプリケーションを使用して URL を開く必要がある場合に、OS によって呼び出されます。このメソッドをどのオブジェクトに追加するかは問題ではなく、次のステップでイベント マネージャーに明示的に渡されます。URL ハンドラー メソッドは次のようになります。
- (void)getUrl:(NSAppleEventDescriptor *)event
withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
// Get the URL
NSString *urlStr = [[event paramDescriptorForKeyword:keyDirectObject]
stringValue];
//TODO: Your custom URL handling code here
}
3) URL ハンドラ メソッドを登録する
次に、アプリを使用して URL を読み込む場合に呼び出すオブジェクトとメソッドをイベント マネージャーに伝えます。ここのコードでは、メソッドを定義する同じオブジェクトからself
呼び出していると仮定して、イベント ハンドラーとして渡されます。setEventHandler
getUrl:withReplyEvent:
このコードは、アプリケーションの初期化コードのどこかに追加する必要があります。
NSAppleEventManager *em = [NSAppleEventManager sharedAppleEventManager];
[em
setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:kInternetEventClass
andEventID:kAEGetURL];
Adobe AIR の初期バージョンを含む一部のアプリケーションは、別の WWW!/OURL AppleEvent を使用して、アプリケーションが URL を開くように要求するため、これらのアプリケーションと互換性を持たせるには、次のものも追加する必要があります。
[em
setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:'WWW!'
andEventID:'OURL'];
4) アプリを既定のブラウザーとして設定する
アプリケーションがブラウザであることを OS に通知するまで、これまで行ってきたことはすべて、それをデフォルトのブラウザにする必要があります。
これを行うには、Launch Services API を使用する必要があります。この場合、アプリを HTTP および HTTPS リンクのデフォルトのロール ハンドラーに設定します。
CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier];
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID);
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID);
//TODO: Check httpResult and httpsResult for errors
(既定のブラウザを変更する前に、ユーザーの許可を求めるのがおそらく最善です。)
カスタム URL スキーム
これらと同じ手順を使用して、独自のカスタム URL スキームを処理することもできます。カスタム URL スキームを作成する場合は、他のアプリとの競合を避けるために、アプリのバンドル ID に基づいてスキームを作成することをお勧めします。したがって、バンドル ID が である場合は、 URL のcom.example.MyApp
使用を検討する必要があります。x-com-example-myapp://
http(s) のデフォルトのヘルパー アプリを変更したいだけの場合は、Safari の設定で変更できます。そこにドロップダウンがあり、http 用に登録されているすべてのハンドラー アプリケーションを選択できます。アプリ自体を既定のブラウザーとして自動的に設定するには、前の手順を参照してください。
System Preferences > General > Default web browser
(少なくとも macOS 11 の場合)オプションとして表示するには、次のように、 HTMLおよびXHTMLのドキュメント タイプをInfo.plistに追加する必要があります(受け入れられた回答ですでに説明されている 4 つの手順の後)。
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>HTML document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>public.html</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>XHTML document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSItemContentTypes</key>
<array>
<string>public.xhtml</string>
</array>
</dict>
</array>