Características de creación e entrega de aplicacións iOS
Neste artigo, compartimos a experiencia de montar e entregar aplicacións iOS aos usuarios, que o estudo Plarium Krasnodar acumulou no proceso de depuración de CI/CD.
Adestramento
Todas as persoas que participen dun xeito ou doutro no desenvolvemento de aplicacións para dispositivos Apple xa apreciaron a polémica comodidade da infraestrutura. As dificultades atópanse en todas partes: desde o menú do perfil do programador ata as ferramentas de depuración e construción.
Hai moitos artigos sobre o "básico" en Internet, polo que tentaremos destacar o principal. Aquí tes o que necesitas para crear a túa aplicación con éxito:
aplicación creada con única ID (hai que ter en conta a importancia do identificador do paquete, porque o uso do ID comodín imposibilita o uso de moitas funcións da aplicación, por exemplo: dominios asociados, notificacións push, inicio de sesión de Apple e outras);
Débese xerar un certificado de programador mediante Keychain en calquera dispositivo macOS. O tipo de certificado é moi importante. Dependendo do contorno da aplicación (Dev, QA, Staging, Production) será diferente (Desenvolvemento ou Distribución), así como o tipo de perfil de sinatura da aplicación.
Principais tipos de perfís:
Desenvolvemento: para asinar a aplicación do equipo de desenvolvemento, úsase un certificado de desenvolvemento (nome de tipo iPhone Developer: XXXXX);
Ad Hoc - destinado a asinar unha aplicación de proba e verificación interna polo departamento de control de calidade, utilízase o certificado de distribución do programador (nome de tipo iPhone Distribution: XXXXX);
App Store: versión para probas externas mediante TestFlight e carga na App Store, utilízase o certificado de distribución do programador.
Á hora de xerar perfís de Desenvolvemento e Ad Hoc, tamén se indica lista de dispositivos, na que pode instalar unha compilación, que lle permite restrinxir aínda máis o acceso dos usuarios. Non hai unha lista de dispositivos no perfil da App Store, xa que o control de acceso durante as probas beta pechada corre a cargo de TestFlight, que se comentará máis adiante.
Para máis claridade, podes presentar o perfil do programador na forma dunha táboa a continuación. Isto facilita a comprensión de que parámetros necesitamos para a montaxe e de onde obtelos.
Asemblea
Para facilitar a separación dos conxuntos por proxecto e entorno, usamos nomes de perfil como ${ProjectName}_${Instance}, é dicir, nome do proxecto + instancia (depende do contorno da aplicación: Dev, QA, GD, Staging, Live, etc.).
Cando se importa ao servidor de compilación, o perfil cambia o seu nome a un ID único e móvese ao cartafol /Users/$Username/Library/MobileDevice/Provisioning Profiles (onde $Username corresponde ao nome da conta de usuario do servidor de compilación).
Hai dúas formas de construír un ficheiro *.ipa: herdado (PackageApplication) e moderno (mediante a creación e exportación de XcAchive). O primeiro método considérase obsoleto, xa que desde a versión 8.3 o módulo de empaquetado de ficheiros da aplicación foi eliminado da distribución Xcode. Para usalo, cómpre copiar o módulo do antigo Xcode (versión 8.2 e anteriores) ao cartafol: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
-scheme — O esquema utilizado, especificado no proxecto.
-derivedDataPath — camiño para descargar a aplicación montada (*.app).
CODE_SIGN_IDENTITY — o nome da conta do programador, que se pode verificar en Keychain (Desenvolvedor do iPhone: XXXX XXXXXXX, sen TeamID entre corchetes).
PROVISIONING_PROFILE — ID de perfil para asinar a aplicación, que se pode obter co comando:
cd "/Users/$Username/Library/MobileDevice/Provisioning Profiles/" && find *.mobileprovision -type f | xargs grep -li ">${ProjectName}_${Instance}<" | sed -e 's/.mobileprovision//'
Se a aplicación usa un perfil adicional (por exemplo, para notificacións push), en vez de PROVISIONING_PROFILE indicar:
As diferenzas residen no método de montaxe e nas opcións SYNCHRONOUS_SYMBOL_PROCESSING, que desactiva a descarga de símbolos no momento da construción.
A continuación, necesitamos xerar un ficheiro coa configuración de exportación:
$Method — método de entrega, corresponde ao tipo de perfil de sinatura da aplicación, é dicir, para o desenvolvemento o valor será desenvolvemento, para Ad Hoc - ad-hoc e para App Store - app-store.
$BundleID — ID da aplicación, que se especifica na configuración da aplicación. Podes comprobar co comando:
defaults read $ProjectDir/Info CFBundleIdentifier
$DevAccName и $ProfileId — Configuración do nome do programador e da ID do perfil de sinatura que se utilizaron anteriormente e que deben coincidir cos valores da configuración de exportación.
$TeamID — ID de dez díxitos entre corchetes despois do nome do programador, exemplo: Desenvolvedor do iPhone: …… (XXXXXXXXXX); pódese comprobar no Chaveiro.
A continuación, usando o comando de exportación, obtemos o ficheiro *.ipa necesario:
Agora o ficheiro recollido debe ser entregado ao usuario final, é dicir, instalado no dispositivo.
Hai moitos servizos para distribuír compilacións de desenvolvemento e ad hoc, como HockeyApp, AppBlade e outros, pero neste artigo falaremos dun servidor autónomo para distribuír aplicacións.
A instalación da aplicación para iOS realízase en 2 etapas:
Recibir o manifesto de instalación da aplicación a través do Servizo de Items.
Instalación do ficheiro *.ipa segundo a información especificada no manifesto a través de HTTPS.
Así, primeiro necesitamos xerar un manifesto de instalación (tipo de ficheiro *.plist) co comando:
Como podes ver, o manifesto contén case todos os parámetros implicados na construción da aplicación.
Versión da aplicación ($AppVersion) pódese comprobar co comando:
defaults read $ProjectDir/Info CFBundleVersion
Parámetro $ipaUrl contén unha ligazón directa para descargar o ficheiro *.ipa. A partir da sétima versión de iOS, a aplicación debe instalarse a través de HTTPS. Na oitava versión, o formato do manifesto cambiou lixeiramente: bloques con configuracións para iconas de aplicacións como
<images>
<image>...</image>
</images>
Así, para instalar a aplicación abonda cunha simple páxina HTML cunha ligazón coma esta:
Para as necesidades dos departamentos de desenvolvemento e probas, Plarium creou a súa propia aplicación de instalación de compilación, que nos ofrece:
autonomía e independencia,
centralización do control de acceso e instalación segura de aplicacións mediante ligazóns "temporais" creadas de forma dinámica,
funcionalidade expandible (é dicir, o equipo de desenvolvemento, se é necesario, pode integrar as funcións que faltan nunha aplicación existente).
Probas
Agora falaremos das probas previas ao lanzamento da aplicación usando TestFlight.
As condicións necesarias para a descarga son o tipo de perfil de sinatura da App Store e a presenza de claves API xeradas.
Hai varias formas de descargar a aplicación:
a través de Xcode (Organizador),
vía altool,
mediante Application Loader para versións anteriores de Xcode (agora Transporter).
Para a descarga automática, úsase altool, que tamén ten dous métodos de autorización:
Contrasinal específico da aplicación,
Clave API.
É preferible descargar a aplicación usando a clave API.
Para obter a clave API, vai a Ligazón e xerar unha chave. Ademais da propia chave en formato *.p8, necesitaremos dous parámetros: IssuerID e KeyID.
A continuación, importe a clave descargada ao servidor de compilación:
Onde apiKey и apiIssuer ten valores de campo da páxina de xeración de claves da API.
A continuación, tras a validación exitosa, cargamos a aplicación co comando --upload-app cos mesmos parámetros.
A aplicación será probada por Apple nun ou dous días e despois estará dispoñible para probadores externos: enviaranse ligazóns por correo electrónico para a instalación.
Outra forma de descargar unha aplicación a través de altool é usar o contrasinal específico da aplicación.
Para obter o contrasinal específico da aplicación, debes ir a Ligazón e xeralo na sección Seguridade.
A continuación, debes crear un rexistro do servidor de compilación en Keychain con este contrasinal. Desde a versión 11 de Xcode isto pódese facer co comando:
Como valor de parámetro -p podes tomar o valor $AppPswd en forma non cifrada (explícita).
Non obstante, como xa se mencionou, desde o punto de vista do rendemento, é mellor escoller a clave API para a autorización de altool, xa que as diferentes versións de Xcode teñen certos problemas ("non ve" Chaveiro, erros de autorización durante a carga, etc.).
Iso é todo, en realidade. Desexo a todos os implicados compilacións exitosas e versións sen problemas na App Store.