Xamarin | Deprecated API Usage — Apple will stop accepting submissions of apps that use UIWebView

Felipe Baltazar
3 min readJul 2, 2020

--

A flat webbrowser window, apple logo, xamarin logo and world wide logo
Xamarin IOS 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:

IOS csproj with Link All option and — optimize=experimental-xforms-product-type as mtouch args
Origem da imagem: https://devblogs.microsoft.com/xamarin/uiwebview-deprecation-xamarin-forms/
  • 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”
Visual studio csproj setup for all build configurations
Todas as configuraçoes de build

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).

appcenter build configuration chosing the sdk version (13.1.18) to Xamarin.IOS
Selecione a versão do sdk IOS no appcenter

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 o findstr /R /C:"[UIWebView]" para o CMD ou Select-String -Pattern "UIWebView" para o PowerShell

O comando grepbusca 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:

Thread sobre meios de encontrar as referencias do UIWebView

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.

--

--

Felipe Baltazar
Felipe Baltazar

Written by Felipe Baltazar

Developer AspnetCore 🌐, Windows 💻, Xamarin 🐒, Nerd 🤓, Gamer 🎮 , Father 👨‍👩‍👦 | Github:https://github.com/felipebaltazar