So setzen Sie Ihre Cocoa-Anwendung als Standard-Webbrowser in macOS

Einen Webbrowser zu erstellen, mag einschüchternd erscheinen, aber was ist, wenn Sie möchten, dass Ihre Cocoa-Anwendung diese Rolle übernimmt? Ihre Anwendung als Standard-Webbrowser in macOS festzulegen, ist nicht nur machbar, sondern ermöglicht es Ihnen auch, das Benutzererlebnis durch nahtlose Interaktionen mit HTTP- und HTTPS-Links zu verbessern. In diesem Blogbeitrag werden wir die wesentlichen Schritte durchgehen, um dies zu erreichen.

Das Problem

Wenn Benutzer auf einen Weblink in Anwendungen wie Mail oder iChat klicken, wird ihr Standard-Webbrowser gestartet. Wenn Sie eine Cocoa-Anwendung entwickeln und möchten, dass sie die Links öffnet, müssen Sie Ihre App so konfigurieren, dass sie HTTP- und HTTPS-Links verarbeitet und sie als Standardbrowser festlegt.

Die Lösung

Um Ihre Cocoa-Anwendung zum Standard-Webbrowser zu machen, können Sie diese vier Schritte befolgen:

1. Fügen Sie URL-Schemata zur Info.plist Ihrer Anwendung hinzu

Ihr erster Schritt besteht darin, macOS mitzuteilen, dass Ihre Anwendung HTTP- und HTTPS-Anfragen verarbeiten kann. Dies geschieht durch die Änderung der Info.plist-Datei Ihrer Anwendung. So machen Sie das:

  1. Öffnen Sie die Info.plist-Datei Ihrer Anwendung.
  2. Fügen Sie den folgenden XML-Schnipsel hinzu:
<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>Sichere http URL</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>https</string>
        </array>
    </dict>
</array>

Mit dieser Ergänzung erklären Sie, dass Ihre App beide Arten von URL-Schemata verarbeiten kann.

2. Schreiben Sie eine URL-Handler-Methode

Als nächstes müssen Sie eine Methode erstellen, die ausgelöst wird, wenn Ihre Anwendung gebeten wird, eine URL zu öffnen. Hier ist ein einfaches Beispiel:

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

    // TODO: Ihr benutzerdefinierter URL-Verarbeitungscode hier
}

In dieser Methode implementieren Sie schließlich die Logik zur Verarbeitung der URL, nachdem sie abgerufen wurde.

3. Registrieren Sie die URL-Handler-Methode

Jetzt, da Sie Ihre URL-Handler-Methode haben, müssen Sie sie beim macOS Event Manager registrieren. Sie können dies tun, indem Sie den folgenden Code in den Initialisierungsabschnitt Ihrer Anwendung einfügen:

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

Zusätzlich, um ältere Anwendungen zu unterstützen, registrieren Sie das WWW!/OURL Apple Event:

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

4. Setzen Sie Ihre App als Standardbrowser

Schließlich müssen Sie Ihre App als Standard-Handler für HTTP- und HTTPS-Schemata mithilfe der Launch Services API festlegen. Fügen Sie den folgenden Code hinzu:

CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier];
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID);
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID);
// TODO: Überprüfen Sie httpResult und httpsResult auf Fehler

Hinweis: Es ist eine gute Praxis, den Benutzer um Erlaubnis zu bitten, bevor Sie seine Standardbrowser-Einstellungen ändern.

Benutzerdefinierte URL-Schemata

Zusätzlich zu standardmäßigen URL-Schemata können Sie auch Ihre eigenen benutzerdefinierten Schemata implementieren. Um Konflikte mit anderen Anwendungen zu vermeiden, ist es ratsam, Ihr benutzerdefiniertes Schema auf der Bundle-ID Ihrer App basieren zu lassen. Wenn beispielsweise Ihre Bundle-ID com.example.MyApp ist, sollten Sie in Betracht ziehen, Konfigurationen wie x-com-example-myapp:// zu implementieren.

Fazit

Indem Sie dieser unkomplizierten Anleitung folgen, können Sie Ihre Cocoa-Anwendung zum Standard-Webbrowser für Benutzer auf macOS machen. Dies verbessert nicht nur den Nutzen Ihrer Anwendung, sondern bietet auch ein besseres, integriertes Web-Erlebnis für Benutzer. Denken Sie daran, immer die Zustimmung der Benutzer zu priorisieren, wenn Sie Standard-Einstellungen ändern, um einen reibungsloseren Übergang zu gewährleisten.

Zögern Sie nicht, weitere Fragen zu stellen oder Kommentare zu hinterlassen, falls Sie während der Implementierung auf Probleme stoßen!