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 classeNSExtensionContext. - 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).