Maui publicando IPA na AppleStore pelo AzureDevops
Published: 2024-02-04 21:56:35


Configurando CI/CD para aplicativos dotnet MAUI utilizando AzureDevops

MAUI and AzureDevops
Esse artigo faz parte de uma série que visa explicar sobre todo potencial que podemos adquirir através de pipelines automatizadas.
Nesses artigos vou apresentar formas de criar essas automações tanto utilizando o Azure Pipelines quanto o Github Actions.
Caso você tenha alguma outra sugestão de artigo, fique a vontade para sugerir nos comentários no final do post!

---

## 1. Build dos artefatos

Para seguirmos nesse tópico de publicação precisamos ter configurado o build que vai gerar o nosso artefato (IPA).
Caso ainda nao tenha configurado isso, [você pode conferir meu outro post que ensina a configurar o build para Android e IOS.](https://dev.to/felipebaltazar/maui-gerando-apkipa-no-azuredevops-4o09)

---

## 2. Instalando extensões

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6yvksewcavswujb347at.png)

https://marketplace.visualstudio.com/items?itemName=ms-vsclient.app-store

** **Caso você não seja o administrador do AzureDevops, vai ser necessário solicitar permissão para instalar a extensão**

--- 

## 3. Service Connection

Vamos criar a conexão que vai ser usada para a pipeline se comunicar com a AppleStore.
Para isso vamos precisar ir até a [AppleStoreConnect e criar uma chave de API.](https://medium.com/r/?url=https%3A%2F%2Fappstoreconnect.apple.com%2Faccess%2Fapi)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vtuaxvkvk7toj5lqaedn.png)

Clique em adicionar uma nova chave e forneça as permissões necessarias para que seja possivel publicar uma nova versão.

Baixe o arquivo que contém a _privateKey_ e armazene em segurança.
** **Você não terá mais acesso ao download desse arquivo posteriormente.**

No AzureDevops, vá até _Configurações do projeto => Service Connections_:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/su2qf0i5857gertbaphu.png)

Clique em **New service Connection** e selecione **Apple App Store**:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w3cu4nlxrc4gw38r0qi6.png)

Vamos utilizar a opção "**_Token Based Authentication_**":


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s5037v19pc3kz0301vmb.png)

**Key ID** você encontra na **_AppleStoreConnect_** onde você criou a chave de Api:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qidialbwc3or5j8wp0s4.png)

**Issuer ID** você também vai encontrar na **_AppleStoreConnect_**, mas logo acima da lista de chaves de API:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ioxbvh8fhr7dbxxnkuon.png)

**KeyContent** você vai precisar copiar todo o conteúdo do arquivo .p8, que você baixou da sua nova chave de API, e convertê-lo para base64 (_na internet tem varios conversores de string para base64_).

Depois desses passos, inclua um nome para seu **ServiceConnection** que seja facil de você identificar na pipeline.

---

## 4. Pipeline Task
Agora vamos utilizar a Task "**_AppStoreRelease@1_**" para publicar nosso app no _TestFlight_.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xvu6gg9i6h47hepfy8s8.png)

Configure com a conexão que acabou de criar e os dados do seu app.

{% embed https://gist.github.com/felipebaltazar/dd165b50f4807f97e40ab6c3c4a53db9 %}

---

## Considerações finais
Nesse post aprendemos um pouco do funcionamento do AzurePipelines, utilizando _yaml_ focado em MAUI. No meu proximo post ensinarei a fazer a publicação dos artefatos para **Android**.
Caso tenha dúvidas sobre alguma tema específico, deixa aqui nos comentários para eu trazer de forma simplificada para você.

Repositório de exemplo:
https://github.com/felipebaltazar/Maui.AzurePipelines

## Referências:
[DevOps With .Net Maui](https://learn.microsoft.com/pt-br/shows/dotnetconf-focus-on-maui/devops-with-dotnet-maui-using-github-actions-azure-devops)
[Getting Started With DevOps and .Net MAUI](https://devblogs.microsoft.com/dotnet/devops-for-dotnet-maui/)