O processo para publicar uma aplicação na Apple Store costuma ser muito mais complexo que Google Play, isso se deve por conta da segurança exigida pela Apple. Veremos aqui todos os passos necessários.
Nesse tutorial quase não iremos trabalhar com o Cronapp, pois estamos considerando que sua a aplicação já está desenvolvida.
De forma resumida, os passos que veremos nesse tutorial são:
Mostraremos também como testar sua aplicação no usando o simulador do Xcode e em um dispositivo móvel.
Antes de começar a seguir os passos do tutorial é preciso ter certeza de que se tem um ambiente minimamente preparado para reproduzir o exemplo. Abaixo estão os requisitos principais.
Requisitos:
Para esse tutorial usamos o macOS Mojave (versão 10.14.4) e Xcode versão 10.2. |
As aplicações submetidas para distribuição na loja da Apple passam por uma análise e é necessário está ciente sobre alguns requisitos para evitar que seu projeto seja rejeitado. Recomendamos fortemente que você leia as Diretrizes de Revisão da App Store, citamos abaixo alguns pontos:
Com seu projeto mobile aberto no Cronapp, vamos realizar algumas configurações necessárias para exportar e rodar no Xcode.
No menu do sistema, acesse Dispositivos móveis > Configurações e acesse a aba Aplicativo na Janela que abrir. (Figura 1.1)
Figura 1.1 - Configurações da aplicação dos dispositivos móveis
* A Apple exige que sejam inseridas imagens para cada tamanho de tela. Ao adicionar essas imagens nos campos ícones e abertura, elas serão redimensionadas para os tamanhos recomendados automaticamente.
No campo 9 da Figura 1.1 estamos usando a URL de debug gerado pelo Cronapp. Lembramos que esse endereço é temporário e poderá ser alterado se você parar e executar novamente o servidor da aplicação no Cronapp, Caso o endereço de debug altere, veja aqui como configurar no projeto aberto já no Xcode. |
Finalizada as configurações, clique no botão Salvar.
Após realizar as configurações na etapa anterior, vamos compilar o projeto. Ou melhor, na prática o que o Cronapp faz é compactar o projeto de modo que possa ser aberto pelo Xcode, no MacOS, pois a Apple só permite compilar as aplicações que rodam em suas plataformas através da sua própria IDE.
Acesse Dispositivos móveis > Compilar > IOS e selecione debug ou release e clique em Ok.
A diferença entre os dois modos está na presença da assinatura digital, que deve ser cadastrada previamente na aba IOS das configurações dos Dispositivos móveis. Caso o Cronapp não encontre a assinatura digital, será gerada sem a mesma, ou seja, será gerado em modo debug. Mas veremos também como adicionar essa assinatura digital posteriormente, no Xcode.
Figura 1.1 - Gerando a aplicação IOS no Cronapp
Após exibir a mensagem "Sua aplicação foi gerada com Sucesso!", clique em Baixar para iniciar o download e descompacte o arquivo em algum diretório.
Os passos a seguir terão que ser feito obrigatoriamente em um computador da Apple com o Xcode instalado. O Xcode é o ambiente de desenvolvimento integrado (IDE) para criar aplicativos para Mac, iPhone, iPad, Apple Watch e Apple TV.
Verifique se o seu Xcode não está desatualizado, caso esteja sem atualizações a muito tempo, é provável que você não consiga compilar seu projeto. Para esse tutorial estamos usando a versão 10.2 do Xcode.
Os passos para simular a aplicação no Xcode é bem simples, porém para testar em um dispositivo móvel ou publicar na loja dá Apple é um pouco mais complexo, por conta das configurações necessárias no portal da Apple. Mas não se preocupe, mostraremos tudo passo a passo!
Simulação no Xcode
Testar em Dispositivo Apple
Abra o Xcode, selecione a opção Open another project... (item 1 da figura 1.1) e selecione o diretório descompactado com o projeto que geramos no Cronapp.
Figura 1.1 - Abrindo novo projeto no Xcode
O Xcode solicitará uma autorização para abrir o projeto, confirme. (Figura 1.2)
Figura 1.2 - Confirmação ao abrir projeto baixado da internet
Teremos ainda que fazer uma pequena configuração no Xcode. Como o Cronapp utiliza o Cordova, é necessário que configuremos o Xcode para rodar em modo Legacy.
Para configurar acesse no menu do sistema File > Workspace Settings... e na janela de configurações, altere os campos Build System (1 e 2) para a opção Legacy Build System nas áreas Shared Workspace Settings e Per-User Workspace Settings, como na figura 1.2.
Figura 1.3 - Rodando em modo Legacy
Ao utilizar o servidor de testes do Cronapp durante a fase de desenvolvimento é comum que este endereço mude depois de algum tempo. Caso isso ocorra não será possível fazer requisições ao servidor, como logar no aplicativo.
Nesse caso você pode obter o novo endereço rodando o projeto no Cronapp e substituindo no arquivo hostApp.js, que encontra-se no caminho informado na área 1 da figura 1.4.
Figura 1.4 - Local com o endereço do servidor
Com o projeto aberto, selecione qual o modelo do dispositivo que deseja simular (1) e rode a aplicação (2).
Figura 1.5 - Iniciando a aplicação no simulador
O simulador irá iniciar o iOS e abrir automaticamente o aplicativo. (Figura 1.5)
Lembramos que o servidor da aplicação deve está rodando para conseguir logar e acessar a aplicação, caso contrário aparecer uma mensagem de erro dentro da aplicação do Cronapp. |
Figura 1.6 - Executando a aplicação no simulador
O portal de desenvolvimento da Apple possui vários recursos para o desenvolvimento na plataforma. Usaremos o portal para configurar os IDs, gerar os certificados e profiles, permitindo testes em dispositivos físicos e a publicação na Apple Store.
Constantemente a Apple remodela o layout do portal ou faz pequenas modificações no processo de publicação e testes. Caso isso ocorra, nos avise através da nossa central de ajuda para atualizarmos a nossa documentação: https://www.cronapp.io/pt-br/central-de-ajuda/
Como informado nos itens 2 e 4 dos requisitos para esse tutorial, é necessário possuir um Apple ID e uma conta desenvolvedor individual ou empresarial, tendo essas duas condições, logue no portal do desenvolvedor: https://developer.apple.com/
Figura 2.1 - Menus do portal do desenvolvedor
Principais serviços do portal:
As configurações necessárias para teste e publicação serão feitas acessando o menu Certificates, IDs & Profiles.
Figura 2.2 - Categorias do Certificates, Identifiers & Profiles
Existem vários tipos de certificados e cada certificado deverá ser usando para um contexto específico. É possível utilizar o mesmo certificado para diversos aplicativos das plataformas iOS, tvOS e watchOS, já aplicativos macOS necessitam de outro formato. Certificado de desenvolvimento permite executar seu App em um dispositivo cadastrado usando os serviços de aplicativos cadastrados, enquanto certificado de distribuição possibilita testes e o upload da sua aplicação para a loja da Apple através do App Store Connext.
Os certificados permitem que o sistema identifique quem assinou a aplicação e evita que projetos sejam gerados fora da plataforma da Apple. Por isso, para enviar seu aplicativo para a App Store ou distribuí-lo fora dela, é necessário que tenha uma assinatura com um certificado emitido pela Apple.
Para gerar o certificado, é necessário utilizar um computador da Apple para gerar uma solicitação de certificado e validar no portal de desenvolvimento da Apple.
Figura 2.3 - Abrindo a funcionalidade Assistente de Certificados a partir da aplicação Acesso às Chaves
Figura 2.4 - Informações para a solicitação de certificado
Figura 2.5 - Criando novo certificado
Figura 2.6 - Download do certificado gerado
Após baixar o certificado em seu Macintosh, dê um clique duplo no arquivo que acabamos de fazer o download para adicioná-lo na lista de certificados do sistema.
Para verificar se o certificado foi cadastrado corretamente, acesse novamente o aplicativo Acesso às Chaves e clique na categoria Meus Certificados. como na Figura 2.7.
Figura 2.6 - Lista dos certificados
As chaves privadas permitem que você acesse e autentique a comunicação com alguns serviços de aplicativos, como APNs, MusicKit, MapKit JS e DeviceCheck. Ao contrário dos certificados, as chaves não expiram e podem ser modificadas para acessar mais serviços após sua criação.
No exemplo que estamos fazendo neste tutorial não é necessário criar chaves, pois não estamos utilizando nenhum serviço específico.
Um App ID identifica seu aplicativo em um perfil de Provisionamento. Se trata de uma string dividida em duas partes separadas por um ponto (.): o prefixo representa o Team ID, enquanto que o sufixo representa o ID do pacote (Bundle ID) e é usado para identificar um ou mais aplicativos de uma única equipe de desenvolvimento. (Tabela 1)
App ID Prefix (Team ID) | App ID Sufix (Explicit ou Wildcar ID) | App ID (Prefix + Sufix) |
---|---|---|
329JDE83HD | io.cronapp.* | 329JDE83HD.io.cronapp.* |
Tabela 1 - O App ID são gerados pela união do prefixo Team ID mais o sufixo Explicit ou Wildcar ID
Existem dois tipos de Sufixos :
Os serviços de aplicativo são ativados para um ID de aplicativo e servem como uma lista de permissões para um ou mais aplicativos (a depender do sufixo). Você pode ativar serviços de aplicativo ao criar um ID de aplicativo ou pode modificar essas configurações posteriormente. Os serviços Game Center e a Compra no aplicativo são ativados por padrão para o ID de aplicativo explícito.
Para cadastrar o App ID é necessário ter o nome e identificador da aplicação, você pode obter nos campos Display Name e Bundle Identifier na área Identity da aba General no Xcode. (área 3 da Figura 1.3).
Figura 2.7 - Lista dos identificadores das aplicações
Para cadastrar basta seguir os passos:
A aba lateral Devices serve para que você possa cadastrar os dispositivos físicos que serão usados para testar a aplicação em suas versões de desenvolvimento. É possível cadastrar um único dispositivo por vez, informando o UDID do dispositivo e um nome ou registrar múltiplos dispositivos.
Figura 2.8 - Registrando os dispositivos que terão permissão para testar sua aplicação
O UDID é um acrônimo para Unique Device ID (ou identificador único do dispositivo) e se trata de uma combinação alfanumérica única de 40 dígitos específico para os dispositivos com iOS da Apple, seja ele um iPhone, iPad ou iPod touch. O UDID é uma criptografia SHA-1 calculada através da composição do número Serial, IMEI, wifiMac e bluetoothMac do aparelho.
A forma mais simples de obter o UDID é pelo iTunes. Por isso conecte o dispositivo via cabo USB no mac e o iTunes solicitará acesso ao dispositivo, dê a permissão (Figura 2.9).
Figura 2.9 - Após conectar o itunes pedirá permissão de acesso no dispositivo
Com o iTunes aberto, selecione o botão destacado na figura 2.10 para exibir as informações do dispositivo.
Figura 2.10 - Acessando a área de informações do aparelho
No menu lateral, seleciona a opção Resumo (item 1 da figura 2.11) para abrir a área exibida na figura 2.11 e clique no campo abaixo do Número de telefone (área 2, destacada na figura 2.10) para exibir o UDID. A cada clique nesse campo é exibido uma nova informação, variando entre o número de série, UDID, ECID e o Identificador do modelo.
Copie o UDID, pois usaremos para cadastrar o dispositivo na lista de permissões de acesso para testar a aplicação.
Figura 2.11 - Obtendo UDID pelo iTunes
Os perfis de provisionamento permitem que você instale aplicativos em seus dispositivos iOS e são gerados a partir do certificados de assinatura, identificadores de dispositivo e um ID do aplicativo. Os Provisioning Profiles (Development) são usados para criar e instalar versões de seu aplicativo durante o ciclo de desenvolvimento, enquanto os Provisioning Profiles (Distribution) são usados para enviar seus aplicativos para a App Store e distribuí-los para os testadores beta.
Para cadastrar o Perfil de provisionamento é necessário já ter criado o certificado digital, UDID de um dispositivo móvel e o ID do aplicativo.
Figura 2.12 - Informações de um Provisioning Profiles selecionado em um lista
Figura 2.13 - Provisioning profile gerado
Para adicionar o perfil de provisionamento em seu projeto, abra o Xcode e na aba General existem 2 opções: Signing (Debug) para projetos em desenvolvimento e Signing (Release) para projetos já em produção. Selecione a caixa de seleção Provisioning profile de uma das duas áreas e escolha a opção Import profile... (item 1 da figura 2.14), na janela de seleção importe o arquivo que baixamos no passo anterior, com a extensão *.mobileprovision.
Figura 2.14 - importando o Provisioning
A App Store Connect é o local de controle de suas aplicações na App Store, como cadastrar e publicar sua aplicação, definir o controle de países, cadastrar preços, observar diversos relatórios como downloads e financeiro, dentre outras funcionalidades.
Figura 3.1 - Tela inicial do Apple Store Connect
Acesse o site App Store Connect e logue com a mesma conta do portal developer, para acessar a tela da figura 3.1, clique no ícone Meus apps para ser direcionado a tela que exibe os aplicativos criados com os seus status.
Para adicionar um novo aplicativo, clique no + e selecione a opção Novo app (item 1 da figura 3.2).
Figura 3.2 - Lista dos aplicativo
Antes de começarmos a preencher os campos, talvez você queira saber quais campos são obrigatórios, permitem localização por região ou idioma e podem ser alterados sem a necessidade de atualizar a versão do seu aplicativo. Mais detalhes em Required, localizable, and editable properties. |
Ao abrir o modal preencha as informações básicas (figura 3.3). Informações sobre alguns campos:
Em Seguida clique em Criar.
Figura 3.3 - Dados iniciais do novo app
Após isso você será direcionado para a tela de configurações do novo app, caso não seja, basta clicar no ícone em branco do novo app criado na lista de aplicativo.
Na área de configurações do aplicativo, você verá quatro abas (área 1 da figura 3.4) contendo algumas subabas (área 2 da figura 3.4):
Figura 3.3 - Abas e subabas das configurações do aplicativo
*O testFlight é um serviço on-line para instalação e teste de aplicativos.
Para projetos simples, basta realizar as configurações da aba App Store para publicar a aplicação. Os campos preenchidos aqui serão exibidos diretamente nas página do seu aplicativo na App Store, para entender onde será exibido cada campo, veja em Making the Most of Your Product Page.
Ao acessarmos essa subaba veremos que a maioria dos campos já estarão preenchidos, pois informamos no momento em que cadastramos nossa aplicação no Connect. Informe os campos ainda estão em branco, como categoria do projeto e o subtítulo. (Figura 3.3)
Nessa subaba você deve informar o preço do seu aplicativo, e mesmo sendo gratuito é necessário informar USD 0. Caso queira restringir a disponibilidade para alguma região, informe na área Disponibilidade.
Figura 3.4 - Definição de preços e disponibilidade por região
Se você acabou de criar um projeto, você verá na última subaba o termo 1.0 Preparar para envio com um círculo amarelo na frente (item 1 da figura 3.5). Esse termo e cor variam de acordo ao status do seu projeto. Veja abaixo o significado de cada cor.
Para mais detalhes sobre todos os termos que podem vir junto com a cor, acesse a documentação oficial "App statuses".
Figura 3.5 - Status da aplicação para o envio e mais alguns campos para preenchimento
Nessa subaba teremos vários campos de preenchimento obrigatório, destacaremos alguns deles:
Figura 3.6 - Obtendo o screenshot direto do simulador do Xcode
Após completar o preenchimento dos campos, clique no botão Salvar no começo da página.
Após cadastrar todos os dados no site App Store Connect, vamos voltar ao Xcode para subir a aplicação. Selecione a opção Generic iOS Device na lista de seleção (item 1 da figura 4.1) para habilitar a opção do menu de sistema Product > Archive (2).
Figura 4.1 - Só após configurar o device para genérico que a opção Archive fica habilitada
Após clicar em Archive, a janela do Architive Organizer abrirá para você selecionar qual a aplicação criada no App Store Connect será feito o upload. (Figura 4.2)
Figura 4.2 - Validação e distribuição da aplicação
Selecione a opção Validate App (1) e algumas telas aparecerão para que você confirme:
Se tudo ocorreu bem, uma mensagem de sucesso aparecerá, clique em Done para voltar a janela da Figura 4.2. Caso seja exibido alguma mensagem de erro, verifique o problema, resolva e valide novamente para seguir para o próximo passo.
Clique agora em Distribute App (item 2 da figura 4.2) e outras janelas aparecerão:
Após a mensagem que o processo foi finalizado com sucesso, clique em Done.
Após o upload do projeto no passo acima, aguarde alguns minutos e logue no Apple Store Connect, se tudo ocorreu bem você verá que agora o app que criamos possui um ícone (item 1 da figura 5.1).
Clique no simbolo + (item 2 da figura 5.1) na área de compilação e selecione a versão que acabamos de subir e em seguida clique no botão Enviar para revisão (item 3 da figura 5.1).
Figura 5.1 - Selecionando a compilação do projeto
Na próxima tela será perguntado se seu projeto possui criptografia, possui direitos autorais de terceiros e se possui publicidade; caso alguma dessas perguntas seja positiva a tela irá expandir para você detalhar melhor esses pontos. Informe tudo corretamente e ao final clique em Enviar.
Figura 5.2 - Enviando para revisão
Durante o desenvolvimento desse tutorial, ao clicamos no botão Enviar a tela atualizava e não passava dessa etapa. Achamos que era algum problema com algum dos itens perguntados, mas bastou deslogar e logar novamente que o problema foi resolvido. Um pequeno probleminha no sistema. |
Se não encontrarem nenhum problema nos testes da sua aplicação, seu app ficará com o status de Pronto para venda e ficará disponível na loja da Apple automaticamente caso você tenha selecionado a opção "Liberar automaticamente esta versão" na área de Liberação da versão nas configurações.
O processo de testes leva em média de 1 a 2 dias.
Os testes nessa etapa costumam ser bastante rigorosos e é comum que as aplicações sejam rejeitadas por pequenos problemas. Caso isso ocorra, uma notificação irá aparecer na App Store Connect, Acesse a aba Atividades (1) e depois Versões na App Store (2) para visualizar todos os status da última versão, por fim clique em Central de resoluções (3) para ler o problemas relatado pelo testador da Apple. (Figura 6.1)
Figura 6.1 - Status de Aplicativo rejeitado nos testes
No exemplo da imagem, a aplicação foi rejeitada pois usamos um endereço temporário do servidor, no momento que o testador abriu a aplicação, o servidor não estava em execução e não foi possível logar. |
Veja todos os itens relatados na Central de resoluções, corrija os problemas e volte a fazer o upload na nova versão. Lembre-se de atualizar o valor da nova versão nos campos Version e Build (item 1 da Figura 6.2).
Figura 6.2 - Nova versão do Aplicativo
Os passos abaixo ainda são necessários, porém em um futuro próximo essas configurações serão geradas automaticamente pelo Cronapp. Essas melhorias já estão em nosso roadmap e assim que estiverem concluídas, retiraremos esse conteúdo extra dessa página.
O Cronapp utiliza o Cordova, que por padrão já deixa preparado as chamadas à vários recursos dos dispositivos móveis, como GPS, câmera, microfone e outros. Mesmo que sua aplicação não utilize esses recursos, ele já está lá, disponível para facilitar o desenvolvimento.
Por sua vez, as politicas de privacidade da Apple determina que seja informado ao usuário porquê a aplicação precisa acessar essas funcionalidades do dispositivo. No momento em que vamos fazer o upload do Xcode para o Apple Store Connect, se identificado qualquer chamada a esses recursos sem uma descrição do motivo para o usuário, você verá uma mensagem de erro e receberá um e-mail informando quais os recursos precisa justificar.
Dear Developer, We identified one or more issues with a recent delivery for your app, "Get Started". Please correct the following issues, then upload again. Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSPhotoLibraryUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy). ... |
Você pode verificar a lista de solicitações em Information Property List.
No exemplo informado acima, a mensagem pede que adicionemos a frase de solicitação de permissão para acessar a biblioteca de fotos do dispositivo. Lembramos que se a aplicação não utiliza esse recurso, o usuário não verá essa notificação.
A adição é bem simples, com o Xcode aberto, acesse a aba info (item 1 da figura 7.1) e clique com o botão de contexto (direito) do mouse e selecione Add Row (item 2 da figura 7.1).
Figura 7.1 - Criando nova propriedade
Após a criação da nova linha, insira na coluna Key a propriedade informada por e-mail e na coluna Value o texto que o usuário da aplicação receberá, informando porquê a aplicação necessita usar este recurso. Após inserir o nome da propriedade, o Xcode converte o nome para um mais amigável. (Figura 7.2)
Figura 7.2 - Adicionando propriedade