Como Definir Seu Aplicativo Cocoa como o Navegador da Web Padrão no macOS

Criar um navegador da web pode parecer desafiador, mas e se você quiser que seu aplicativo Cocoa assuma esse papel? Definir seu aplicativo como o navegador da web padrão no macOS não é apenas viável, mas também permite melhorar a experiência do usuário, fornecendo interações suaves com links HTTP e HTTPS. Neste post do blog, vamos percorrer as etapas essenciais para realizar isso.

O Problema

Quando os usuários clicam em um link da web em aplicativos como Mail ou iChat, o navegador da web padrão deles é iniciado. Se você está desenvolvendo um aplicativo Cocoa e deseja que ele seja o que abre esses links, precisará configurar seu aplicativo para lidar com links HTTP e HTTPS e definir como o navegador padrão.

A Solução

Para tornar seu aplicativo Cocoa o navegador da web padrão, você pode seguir estas quatro etapas:

1. Adicionar Esquemas de URL ao Info.plist do Seu Aplicativo

Sua primeira tarefa é informar ao macOS que seu aplicativo pode lidar com solicitações HTTP e HTTPS. Isso é feito modificando o arquivo Info.plist do seu aplicativo. Veja como fazer:

  1. Abra o arquivo Info.plist do seu aplicativo.
  2. Adicione o seguinte trecho de 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>

Com essa adição, você está declarando que seu aplicativo pode lidar com ambos os tipos de esquemas de URL.

2. Escrever um Método Manipulador de URL

A seguir, você precisa criar um método que será acionado quando seu aplicativo for solicitado a abrir uma URL. Aqui está um exemplo simples:

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

    // TODO: Seu código personalizado de manipulação de URL aqui
}

Neste método, você implementará a lógica para lidar com a URL após ela ser obtida.

3. Registrar o Método Manipulador de URL

Agora que você tem seu método manipulador de URL, precisa registrá-lo com o Gerenciador de Eventos do macOS. Você pode fazer isso adicionando o seguinte código na seção de inicialização do seu aplicativo:

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

Além disso, para dar suporte a aplicativos mais antigos, registre o Evento Apple WWW!/OURL:

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

4. Definir Seu Aplicativo como o Navegador Padrão

Por fim, você precisa definir seu aplicativo como o manipulador padrão para esquemas HTTP e HTTPS usando a API Launch Services. Adicione o seguinte código:

CFStringRef bundleID = (CFStringRef)[[NSBundle mainBundle] bundleIdentifier];
OSStatus httpResult = LSSetDefaultHandlerForURLScheme(CFSTR("http"), bundleID);
OSStatus httpsResult = LSSetDefaultHandlerForURLScheme(CFSTR("https"), bundleID);
// TODO: Verifique httpResult e httpsResult para erros

Dica: É uma boa prática pedir permissão ao usuário antes de alterar as configurações do navegador padrão deles.

Esquemas de URL Personalizados

Além dos esquemas de URL padrão, você também pode implementar seus próprios esquemas personalizados. Para evitar conflitos com outros aplicativos, é prudente basear seu esquema personalizado no identificador do pacote do seu aplicativo. Por exemplo, se seu ID de pacote for com.example.MyApp, considere implementar configurações como x-com-example-myapp://.

Conclusão

Seguindo este guia simples, você pode transformar seu aplicativo Cocoa no navegador da web padrão para os usuários no macOS. Isso não apenas melhora a utilidade do aplicativo, mas também oferece uma melhor experiência na web para os usuários. Lembre-se de sempre priorizar o consentimento do usuário ao alterar configurações padrão para uma transição mais suave.

Sinta-se à vontade para fazer mais perguntas ou deixar comentários se encontrar algum problema durante a implementação!