Skip to content

MASTG-KNOW-0082: Extensões de aplicativo

Junto com o iOS 8, a Apple introduziu as App Extensions. De acordo com o Apple App Extension Programming Guide, as app extensions permitem que apps ofereçam funcionalidades e conteúdo personalizados aos usuários enquanto eles interagem com outros apps ou com o sistema. Para isso, elas implementam tarefas específicas e bem delimitadas, como, por exemplo, definir o que acontece após o usuário clicar no botão "Compartilhar" e selecionar algum app ou ação, fornecer o conteúdo para um widget do Today ou habilitar um teclado personalizado.

Dependendo da tarefa, a app extension terá um tipo específico (e apenas um), os chamados pontos de extensão. Alguns notáveis são:

  • Custom Keyboard: substitui o teclado do sistema iOS por um teclado personalizado para uso em todos os apps.
  • Share: publica em um site de compartilhamento ou compartilha conteúdo com outras pessoas.
  • Today: também chamados de widgets, oferecem conteúdo ou executam tarefas rápidas na visualização Today do Centro de Notificações.

Como as app extensions interagem com outros apps

Há três elementos importantes aqui:

  • App extension: é aquela agrupada dentro de um app contêiner. Apps hospedeiros interagem com ela.
  • App hospedeiro: é o app (de terceiros) que aciona a app extension de outro app.
  • App contêiner: é o app que contém a app extension agrupada nele.

Por exemplo, o usuário seleciona texto no app hospedeiro, clica no botão "Compartilhar" e seleciona um "app" ou ação da lista. Isso aciona a app extension do app contêiner. A app extension exibe sua visualização no contexto do app hospedeiro e usa os itens fornecidos por ele, o texto selecionado neste caso, para executar uma tarefa específica (publicá-lo em uma rede social, por exemplo). Veja esta imagem do Apple App Extension Programming Guide, que resume isso muito bem:

Considerações de Segurança

Do ponto de vista da segurança, é importante observar que:

  • Uma app extension nunca se comunica diretamente com seu app contêiner (normalmente, ele nem está em execução enquanto a app extension contida está rodando).
  • Uma app extension e o app hospedeiro se comunicam via inter-process communication.
  • O app contêiner de uma app extension e o app hospedeiro não se comunicam de forma alguma.
  • Um widget do Today (e nenhum outro tipo de app extension) pode pedir ao sistema que abra seu app contêiner chamando o método openURL:completionHandler: da classe NSExtensionContext.
  • Qualquer app extension e seu app contêiner podem acessar dados compartilhados em um contêiner compartilhado definido de forma privada.

Além disso:

  • App extensions não podem acessar algumas APIs, por exemplo, HealthKit.
  • Elas não podem receber dados usando AirDrop, mas podem enviar dados.
  • Não são permitidas tarefas em segundo plano de longa duração, mas uploads ou downloads podem ser iniciados.
  • App extensions não podem acessar a câmera ou o microfone em um dispositivo iOS (exceto para app extensions do iMessage).