portaldacalheta.pt
  • Principal
  • Talento Ágil
  • Lucratividade E Eficiência
  • Móvel
  • Estilo De Vida
Móvel

Um tutorial sobre extensões de aplicativos iOS 8



Poucos haviam tentado antes ( dê uma olhada neste ), mas foi a Apple com o primeiro Iphone quem definiu como um smartphone e um sistema operacional móvel deve olhar. A Apple fez um avanço incrível em hardware e experiência do usuário. No entanto, muitas vezes esquecemos que eles também definem padrões em como um sistema operacional móvel deve funcionar e como os aplicativos de smartphone devem ser feitos.

Construir paredes de concreto entre os aplicativos, deixando-os completamente isolados e inconscientes uns dos outros, foi o melhor método para mantê-los seguros e proteger seus dados. Todas as atividades foram monitoradas de perto pelo iOS, e havia apenas um punhado de ações que um aplicativo poderia ter feito fora de seu escopo.



“A abstinência é a melhor proteção!” - mas onde está a diversão nisso?



Demorou um pouco; muito tempo se você me perguntar, mas com o iOS 8 a Apple decidiu se divertir. iOS 8 introduziu um novo conceito chamado extensões de aplicativo. Esse novo recurso não quebrou as paredes entre os aplicativos, mas abriu algumas portas, proporcionando um contato suave, mas tangível, entre alguns aplicativos. A última atualização deu desenvolvedores iOS uma opção para personalizar o ecossistema iOS, e estamos ansiosos para ver esse caminho se abrindo também.



eclipse vs notepad ++

extensões de aplicativo iOS 8

O que são as extensões de aplicativo do iOS 8 e como funcionam?

Em termos simples, as extensões de aplicativos iOS 8 oferecem um novo método de interação com seu aplicativo, sem iniciá-lo ou exibi-lo na tela.



Como esperado, a Apple garantiu que eles permanecessem no topo de tudo, então há apenas um punhado de novos pontos de entrada que seu aplicativo pode fornecer:

  • Hoje (também chamado de widget) - uma extensão exibida na visualização Hoje do Centro de Notificações mostra informações breves e permite a execução de tarefas rápidas.
  • Compartilhar - uma extensão que permite que seu aplicativo compartilhe conteúdo com usuários em redes sociais e outros serviços de compartilhamento.
  • Açao - uma extensão que permite a criação de botões de ação personalizados na folha de ação para permitir que os usuários visualizem ou transformem o conteúdo originado em um aplicativo host.
  • Edição de fotos - uma extensão que permite aos usuários editar uma foto ou um vídeo no aplicativo Fotos.
  • Provedor de Documentos - uma extensão usada para permitir que outros aplicativos acessem os documentos gerenciados por seu aplicativo.
  • Teclado personalizado - uma extensão que substitui o teclado do sistema.

As extensões de aplicativo não são aplicativos independentes. Eles estão fornecendo funcionalidade estendida do aplicativo (que pode ser acessada de outros aplicativos, chamados de aplicativos de host) que se destina a ser eficiente e focada em uma única tarefa. Eles têm seu próprio binário, assinatura de código própria e conjunto de elementos próprios, mas são fornecidos por meio da App Store como parte do binário do aplicativo que o contém. Um aplicativo (contendo) pode ter mais de uma extensão. Depois que o usuário instalar um aplicativo com extensões, eles estarão disponíveis no iOS.



Vejamos um exemplo: um usuário encontra uma imagem usando o Safari, clica no botão de compartilhamento e escolhe a extensão do aplicativo para compartilhar. O Safari “conversa” com o framework iOS Social, que carrega e apresenta a extensão. O código da extensão é executado, passa dados usando os canais de comunicação instanciados do sistema e, uma vez que a tarefa é concluída, o Safari destrói a visualização da extensão. Logo em seguida, o sistema encerra o processo e seu aplicativo nunca mais foi exibido na tela. Ainda assim, completou uma função de compartilhamento de imagens.

O iOS, usando comunicação entre processos, é o responsável por garantir que o aplicativo host e uma extensão de aplicativo possam trabalhar juntos. Os desenvolvedores usam APIs de alto nível fornecidas pelo ponto de extensão e pelo sistema, para que nunca tenham que se preocupar com os mecanismos de comunicação subjacentes.



Vida útil

Ciclo de vida da extensão do aplicativo

As extensões de aplicativos têm um ciclo de vida diferente dos aplicativos iOS. O aplicativo host inicia o ciclo de vida da extensão como uma resposta à ação de um usuário. Em seguida, o sistema instancia a extensão de aplicativo e configura um canal de comunicação entre eles. A visualização da extensão é exibida dentro do contexto do aplicativo host usando os itens recebidos na solicitação do aplicativo host. Depois que a visualização da extensão é exibida, o usuário pode interagir com ela. Em resposta à ação do usuário, a extensão completa a solicitação do aplicativo host executando / cancelando imediatamente a tarefa ou, se necessário, iniciando um processo em segundo plano para executá-la. Logo depois disso, o aplicativo host destrói a visualização da extensão e o usuário retorna ao contexto anterior dentro do aplicativo host. Os resultados da execução desse processo podem ser retornados ao aplicativo host assim que o processo for concluído. A extensão geralmente é encerrada logo após concluir a solicitação recebida do aplicativo host (ou iniciar um processo em segundo plano para executá-la).



O sistema abre a extensão da ação de um usuário do aplicativo host, a extensão exibe a IU, realiza algum trabalho e retorna dados ao aplicativo host (se for apropriado para o tipo de extensão). O aplicativo que o contém nem mesmo está em execução enquanto sua extensão está em execução.

Criando uma extensão de aplicativo - exemplo prático usando a extensão Today

As extensões de hoje, também chamadas de widgets , estão localizados na visualização Hoje da central de notificações. Eles são uma ótima maneira de apresentar um conteúdo atualizado para o usuário (como mostrar as condições meteorológicas) ou realizar tarefas rápidas (como marcar o que foi feito em um widget de aplicativo de lista de tarefas). Eu tenho que apontar aqui que o entrada de teclado não é suportada .



como as extensões de aplicativo funcionam

Vamos criar uma extensão Hoje que exibirá as informações mais atualizadas de nosso aplicativo ( código no GitHub ) Para executar este código, certifique-se de que você (reconfigurado o App Group para o projeto (selecione sua equipe de desenvolvimento, lembre-se de que o nome do App Group deve ser único e seguir as instruções do Xcode).

extensão de aplicativo ios 8

tamanho da tela de consulta de mídia css

hoje extensões de aplicativos

extensão de aplicativo usando hoje

Criando um Novo Widget

Como dissemos antes, as extensões de aplicativo não são aplicativos independentes. Precisamos de um aplicativo de contenção no qual construiremos a extensão de aplicativo. Assim que tivermos nosso aplicativo de conteúdo, optamos por adicionar um novo destino navegando até Arquivo -> Novo -> Destino no Xcode. A partir daqui, escolhemos o modelo para nosso novo destino para adicionar uma extensão de hoje.

criando um modelo de widget

Na próxima etapa, podemos escolher nosso nome de produto. Esse é o nome que aparecerá na visualização Hoje da Central de Notificações. Há uma opção para escolher o idioma entre Swift e Objective-C nesta etapa também. Ao terminar essas etapas, o Xcode cria um modelo Hoje, que fornece o cabeçalho padrão e os arquivos de implementação para a classe principal (denominada TodayViewController) com Info.plist arquivo e um arquivo de interface (um storyboard ou arquivo .xib). O Info.plist arquivo, por padrão, tem a seguinte aparência:

NSExtension NSExtensionMainStoryboard MainInterface NSExtensionPointIdentifier com.apple.widget-extension

Se você não quiser usar o storyboard fornecido pelo modelo, remova o NSExtensionMainStoryboard e adicione a NSExtensionPrincipalClass chave com o nome do seu controlador de visualização como um valor.

Um widget Hoje deve:

  • certifique-se de que o conteúdo esteja sempre atualizado
  • responder adequadamente às interações do usuário
  • bom desempenho (os widgets iOS devem usar a memória com sabedoria ou serão encerrados pelo sistema)

Compartilhando dados e um contêiner compartilhado

A extensão de aplicativo e o aplicativo que o contém têm acesso aos dados compartilhados em seu contêiner compartilhado definido de forma privada - que é uma forma de comunicação indireta entre o aplicativo que o contém e a extensão.

Você não adora como a Apple torna essas coisas tão “simples”? :)

Compartilhando dados através de NSUserDefaults é simples e um caso de uso comum. Por padrão, a extensão e o aplicativo que o contém usam NSUserDefaults separado | conjuntos de dados e não podem acessar os contêineres uns dos outros. Para mudar esse comportamento, o iOS introduziu Grupos de aplicativos . Depois de habilitando grupos de aplicativos no aplicativo que o contém e na extensão, em vez de usar [NSUserDefaults standardUserDefaults] usar [[NSUserDefaults alloc] initWithSuiteName:@'group.yourAppGroupName'] para acessar o mesmo contêiner compartilhado.

Atualizando o widget

Para garantir que o conteúdo esteja sempre atualizado, a extensão Today fornece uma API para gerenciar o estado de um widget e lidar com as atualizações de conteúdo. O sistema ocasionalmente captura instantâneos da visualização do widget, então quando o widget se torna visível, o instantâneo mais recente é exibido até que seja substituído por uma versão ao vivo da visualização. Uma conformação para NCWidgetProviding protocolo é importante para atualizar o estado de um widget antes que um instantâneo seja obtido. Assim que o widget receber o widgetPerformUpdateWithCompletionHandler: chamada, a visualização do widget deve ser atualizada com o conteúdo mais recente e o manipulador de conclusão deve ser chamado com uma das seguintes constantes para descrever o resultado da atualização:

  • NCUpdateResultNewData - O novo conteúdo requer um redesenho da vista
  • NCUpdateResultNoDate - O widget não requer atualização
  • NCUpdateResultFailed - Ocorreu um erro durante o processo de atualização
- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { // Perform any setup necessary in order to update the view. // If an error is encountered, use NCUpdateResultFailed // If there's no update required, use NCUpdateResultNoData // If there's an update, use NCUpdateResultNewData [self updateTableView]; completionHandler(NCUpdateResultNewData); }

Controlando quando o widget pode ser visualizado

Para controlar quando um widget é exibido, use o setHasContent:forWidgetWithBundleIdentifier: método de NCWidgetController classe. Este método permitirá que você especifique o estado do conteúdo do widget. Ele pode ser chamado a partir do widget ou do aplicativo que o contém (se estiver ativo). Você pode passar um NO ou um YES sinalize para este método, definindo se o conteúdo do widget está pronto ou não. Se o conteúdo não estiver pronto, o iOS não exibirá seu widget quando a visualização Hoje for aberta.

NCWidgetController *widgetController = [[NCWidgetController alloc] init]; [widgetController setHasContent:YES forWidgetWithBundleIdentifier:@'com.your-company.your-app.your-widget'];

Abrindo o aplicativo que contém a partir do widget

O widget Hoje é a única extensão que pode solicitar a abertura do aplicativo que o contém chamando o openURL:completionHandler: método. Para garantir que o aplicativo que o contém abra de uma maneira que faça sentido no contexto da tarefa atual do usuário, um esquema de URL personalizado (que tanto o widget quanto o aplicativo que o contém podem usar) deve ser definiram .

[self.extensionContext openURL:[NSURL URLWithString:@'customURLsheme://URLpath'] completionHandler:nil];

Considerações sobre IU

Ao projetar seu widget, aproveite as vantagens do UIVisualEffectView , tendo em mente que as visualizações que devem ser desfocadas / vibrantes devem ser adicionadas à classe contentView e não para UIVisualEffectView diretamente. Os widgets (em conformidade com o protocolo NCWidgetProviding) devem carregar os estados em cache em viewWillAppear: para corresponder ao estado da visualização do último viewWillDisappear: e, em seguida, faz a transição suave para os novos dados quando eles chegam, o que não é o caso de um controlador de visualização normal (a IU é configurada em viewDidLoad e lida com animações e dados de carregamento em viewWillAppear). Os widgets devem ser projetados para executar uma tarefa ou abrir o aplicativo que o contém com um único toque. A entrada do teclado não está disponível em um widget. Isso significa que nenhuma IU que requeira entrada de texto deve ser usada.

Adicionar scrolls em um widget, tanto vertical quanto horizontal, não é possível. Ou, mais precisamente, adicionar uma visualização de rolagem é possível, mas a rolagem não funciona. O gesto de rolagem horizontal em uma visualização de rolagem na extensão Hoje será interceptado pelo centro de notificação, o que causará a rolagem de Hoje para o centro de notificação. A rolagem vertical de uma visualização de rolagem dentro de uma extensão Hoje será interrompida pela rolagem da Visualização de hoje.

Notas Técnicas

Aqui, vou apontar algumas coisas importantes para manter em mente ao criar uma extensão de aplicativo.

Recursos comuns a todas as extensões

Os seguintes itens são verdadeiros para todas as extensões:

usando raspberry pi como servidor
  • O objeto sharedApplication está fora dos limites : As extensões de aplicativo não podem acessar um objeto sharedApplication ou usar qualquer um dos métodos relacionados a esse objeto.

  • Câmera e microfone estão fora dos limites : As extensões de aplicativo não podem acessar a câmera ou o microfone no dispositivo (mas este não é o caso para todos os elementos de hardware). Isso é resultado da indisponibilidade de algumas APIs. Para acessar alguns elementos de hardware na extensão de aplicativo, você terá que verificar se sua API está disponível para extensões de aplicativo ou não (com a verificação de disponibilidade da API descrita acima).

  • A maioria das tarefas em segundo plano está fora dos limites : As extensões de aplicativo não podem executar tarefas em segundo plano de longa duração, exceto iniciar uploads ou downloads, que é discutido abaixo.

    que tipo de ataques de aplicativo de servidor da web introduzem uma nova entrada para explorar uma vulnerabilidade
  • AirDrop está fora dos limites : As extensões de aplicativo não podem receber (mas podem enviar) dados usando o AirDrop.

Upload / Download em segundo plano

A única tarefa que pode ser executada em segundo plano é o upload / download, usando o NSURLSession object.

Depois que a tarefa de upload / download é iniciada, a extensão pode concluir a solicitação do aplicativo host e ser encerrada sem qualquer efeito no resultado da tarefa. Se a extensão não estiver em execução no momento em que a tarefa em segundo plano for concluída, o sistema iniciará o aplicativo que o contém em segundo plano e o método delegado do aplicativo application:handleEventsForBackgroundURLSession:completionHandler: é chamado.

O aplicativo cuja extensão inicia um plano de fundo NSURLSession a tarefa deve ter um contêiner compartilhado configurado para que o aplicativo contido e sua extensão possam acessar.

Certifique-se de criar diferentes sessões em segundo plano para o aplicativo que o contém e cada uma de suas extensões de aplicativo (cada sessão em segundo plano deve ter um identificador exclusivo). Isso é importante porque apenas um processo pode usar uma sessão em segundo plano por vez.

Ação vs. Compartilhamento

As diferenças entre as extensões Action e Share não são completamente claras do ponto de vista do codificador, porque na prática elas são muito semelhantes. O modelo do Xcode para o destino da extensão de compartilhamento usa SLComposeServiceViewController, que fornece uma IU de visualização de composição padrão que você pode usar para compartilhamento social, mas não é obrigatório. Uma extensão de compartilhamento também pode herdar diretamente de UIViewController para um design totalmente personalizado, da mesma forma que uma extensão de ação pode herdar de SLComposeServiceViewController.

As diferenças entre esses dois tipos de extensões estão em como devem ser usadas. Com a extensão Action, você pode construir uma extensão sem UI própria (por exemplo, uma extensão usada para traduzir o texto selecionado e retornar a tradução para o aplicativo host). A extensão de compartilhamento permite que você compartilhe comentários, fotos, vídeos, áudio, links e muito mais diretamente do aplicativo host. O UIActivityViewController direciona as extensões Action e Share, onde as extensões Share são apresentadas como ícones coloridos na linha superior e as extensões de ação são apresentadas como ícones monocromáticos na linha inferior (Imagem 2.1).

APIs proibidas

APIs marcadas nos arquivos de cabeçalho com NS_EXTENSION_UNAVAILABLE macro, ou macro semelhante para indisponibilidade, não pode ser usada (por exemplo: HealthKit e estruturas de IU EventKit no iOS 8 não estão disponíveis para uso em qualquer extensão de aplicativo).

Se você estiver compartilhando código entre um aplicativo e uma extensão, deve ter em mente que mesmo fazer referência a uma API não permitida para a extensão de aplicativo levará à rejeição de seu aplicativo na App Store. Você pode escolher lidar com isso reformulando as classes compartilhadas em hierarquias, com um pai comum e diferentes subclasses para diferentes destinos. Outra maneira é usar o pré-processador por #ifdef Verificações. Como ainda não há uma condicional de destino integrada, você deve criar a sua própria.

Outra boa maneira de fazer isso é criando sua própria estrutura incorporada. Apenas certifique-se de que não contenha APIs indisponíveis para extensões. Para configurar uma extensão de aplicativo para usar uma estrutura incorporada, navegue até as configurações de compilação de destino e defina a configuração 'Exigir apenas API segura de extensão de aplicativo' como Sim. Ao configurar o projeto Xcode, na fase de construção de Copiar Arquivos, “Frameworks” deve ser escolhido como o destino para o framework incorporado. Se você escolher o destino “SharedFrameworks”, seu envio será rejeitado pela App Store.

Uma nota sobre compatibilidade com versões anteriores

Embora as extensões de aplicativo estejam disponíveis apenas a partir do iOS 8, você pode disponibilizar o aplicativo que o contém para as versões anteriores do iOS.

Conformidade de interface humana da Apple

Lembre-se das Diretrizes de Interface Humana do iOS da Apple quando projetar uma extensão de aplicativo . Você deve garantir que seu extensão de aplicativo é universal , não importa qual dispositivo seu aplicativo contém suporte. Para garantir que a extensão de aplicativo seja universal, use a configuração de compilação da família de dispositivos de destino no Xcode especificando o valor “iPhone / iPad” (às vezes chamado de universal).

Conclusão

As extensões de aplicativo definitivamente têm o impacto mais visível no iOS 8. Como 79% dos dispositivos já usam o iOS 8 (conforme medido pela App Store em 13 de abril de 2015), as extensões de aplicativo são recursos incríveis que os aplicativos devem aproveitar. Combinando as restrições da API e a forma de compartilhamento de dados entre as extensões e o aplicativo que os contém, parece que a Apple conseguiu resolver uma das maiores reclamações sobre a plataforma sem comprometer seu modelo de segurança. Ainda não há como os aplicativos de terceiros compartilharem diretamente seus dados uns com os outros. Embora este seja um conceito muito novo, parece muito promissor.

Rajiv Gandhi: Cinco fatos menos conhecidos

Pesquisar

Rajiv Gandhi: Cinco fatos menos conhecidos
Três princípios básicos da estratégia de portfólio de capital de risco

Três princípios básicos da estratégia de portfólio de capital de risco

Investidores E Financiamento

Publicações Populares
A inegável importância de um plano de negócios
A inegável importância de um plano de negócios
Teste de unidade .NET: gaste com antecedência para economizar mais tarde
Teste de unidade .NET: gaste com antecedência para economizar mais tarde
Tanzânia tomará posse do novo presidente na sexta-feira após a morte de Magufuli
Tanzânia tomará posse do novo presidente na sexta-feira após a morte de Magufuli
Tutorial de física de videogame - Parte I: Uma introdução à dinâmica de corpos rígidos
Tutorial de física de videogame - Parte I: Uma introdução à dinâmica de corpos rígidos
Estilos tipográficos para a web e design editorial e impresso
Estilos tipográficos para a web e design editorial e impresso
 
Como os PMs podem estar prontos para a automação de processos robóticos
Como os PMs podem estar prontos para a automação de processos robóticos
IU futura e sandboxes de fim de design
IU futura e sandboxes de fim de design
Protótipo com facilidade - um tutorial do InVision Studio
Protótipo com facilidade - um tutorial do InVision Studio
Táticas e estratégias de negociação de fusões e aquisições: dicas de um profissional
Táticas e estratégias de negociação de fusões e aquisições: dicas de um profissional
Esses profissionais de saúde preferem ser demitidos do que vacinados
Esses profissionais de saúde preferem ser demitidos do que vacinados
Publicações Populares
  • plano de contas para empresa de manufatura
  • futuro do sistema operacional linux
  • tipo de retorno sobre o investimento
  • iônico 1 a iônico 2
  • Calculadora corp para corp vs w2
Categorias
  • Talento Ágil
  • Lucratividade E Eficiência
  • Móvel
  • Estilo De Vida
  • © 2022 | Todos Os Direitos Reservados

    portaldacalheta.pt