Xamarin | Deprecated API Usage — Apple will stop accepting submissions of apps that use UIWebView
Se você utiliza Xamarin Forms, com distribuição para IOS, ou a abordagem tradicional, possivelmente já se deparou com esse alerta. Vim trazer, neste post, algumas ferramentas que podem ser uteis para resolver essa situação.
Sugestões to time Xamarin
O post oficial, no blog da Microsoft, indica três passos para a resolução do problema. Sendo eles:
- Usar versões mais recentes do Xamarin.Forms e Xamarin.IOS;
- Utilizar uma flag de configuração de compilação, no projeto IOS;
- Fazer build e publicar o app na Apple Store;
Somente utilizar esses três passos pode não ser o suficiente, em alguns casos, abordaremos isso logo em seguida.
Passo 1 | Xamarin.Forms e Xamarin.IOS
Xamarin.iOS recebeu diversas alterações para “Substituição” do UIWebView para o WKWebView. É preciso garantir que você está usando a versão 13.10.0.17 (ou superior). No VisualStudio, esse pacote está incluso à partir das versões 8.4.1(MAC) e 16.4.3(Windows).
No projeto do Xamarin.Forms também foram aplicadas algumas alterações, elas foram aplicadas na versão 4.5, portanto é importante utilizar o pacote Nuget à partir dessa versão.
Passo 2 | Flag de compilação (MTouch)
— optimize=experimental-xforms-product-type
Esses argumentos utilizados na compilação são complementares ao comportamento do Linker, quando definido para “SDK Only” ou “All”.
Demonstração aplicada no projeto IOS, Visual Studio para Mac:
- AppCenter
Caso você utilize o appcenter, para gerar seu app IOS, recomendo verificar se a configuração de build utilizada contém a flag dos argumentos sugeridos nesse post. Você pode fazer isso selecionando “Todas as configurações”
Verifique também a versão do SDK utilizada no build do seu projeto IOS no app center. Como dito anteriormente, deve ser 13.10.0.17 (ou superior).
Passo 3 | Build e Publicação
Aqui, em uma parte dos casos, provavelmente o erro já estará sanado. Para ter certeza, sem precisar esperar por um retorno da Apple, você pode gerar o arquivo .IPA (via Ad-Hoc ou AppCenter), descompactar seu conteúdo e buscar por referências ao UIWebView com grep -r "UIWebView"
.
O comando
grep
refere-se ao exemplo para Mac, você pode buscar alternativas como ofindstr /R /C:"[UIWebView]"
para o CMD ouSelect-String -Pattern "UIWebView"
para o PowerShell
O comando grep
busca por referencias de texto, porém quando falamos de binários a situação muda um pouco, sendo necessária uma varreguda diferente, conforme essa thread no Twitter:
for framework in Frameworks/*.framework; do
fname=$(basename $framwork .framework)
echo $fname
nm NomeDoSeuApp | grep UIWebView
done
Com essa análise você será capaz de identificar, se algum componente externo está tendo alguma referência ao UIWebView (Como o Firebase), e tomar decisões para resolver a situação, como atualização de pacotes ou código obsoleto.
Eaí?! Esse apanhado de dicas foi útil para você? Conhece alguma outra dica para complementar e ajudar a comunidade? Comenta aí!
Um obrigado para o Douglas de Alvarenga Silva, que foi quem reuniu boa parte do conteúdo desse post. 🥂🎉
Recomendo, inclusive, o repositório do grande Thiago Bertuzzi que reune tratamentos de erros conhecidos, além dessa situaçao que abordo nesse post, pela comunidade.