ITMS-90809: Uso de API obsoleto - a Apple deixará de aceitar envios de aplicativos que usam APIs UIWebView

91

Ontem, carreguei meu aplicativo no TestFlight e depois de um tempo a Apple me enviou este aviso:

ITMS-90809: Uso de API obsoleto - a Apple deixará de aceitar envios de aplicativos que usam APIs UIWebView. Consulte https://developer.apple.com/documentation/uikit/uiwebview para obter mais informações.

O fato é que eu não uso UIWebView em meu aplicativo, então tentei atualizar meus pods, mas ainda sou a mesma coisa. Pelo jeito, esta é minha terceira compilação no TestFlight e esta é a primeira vez que a apple me envia isso. Alguma ideia?

Atualizar

Estes são meus pods:

pod 'Firebase/Core'
pod 'Firebase/Firestore'
pod 'Firebase/MLVision'
pod 'Firebase/MLVisionTextModel'
pod 'SVProgressHUD'
pod 'SPPermission/Camera'
pod 'SPPermission/PhotoLibrary'
pod 'Mantis'
pod 'SwiftKeychainWrapper'
pod 'SwiftyOnboard'
pod 'Fabric'
pod 'Crashlytics'

Atualização 2

Parece que encontrei as estruturas com o problema.

Binary file ./Pods/FirebaseMLCommon/Frameworks/FirebaseMLCommon.framework/FirebaseMLCommon matches
Binary file ./Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics matches
Binary file ./Pods/GoogleMobileVision/Detector/Frameworks/GoogleMobileVision.framework/GoogleMobileVision matches

Então, agora eu tenho que esperar o Google corrigi-los e atualizar meus pods?

usuario
fonte
Verifique quais pods você está usando e se eles usam um UIWebView. Por exemplo, banner SDKs, mas você pode querer verificar outros SDKs também.
Gerharbo
1
@Gerharbo Eu uso apenas pods do Firebase e não consigo encontrar UIWebView dentro deles.
Nick
Para aqueles que usam cordova + reactjs (ou angular), confira cordova-plugin-wkwebview-engine e cordova-plugin-wkwebviewxhrfix
Jacksonkr

Respostas:

104

Verifique se você usa em seu código a classe UIWebView; em caso afirmativo, substitua sua implementação por WKWebView, caso contrário, verifique seus pods.

Vá com o terminal para a pasta do projeto e execute o comando: grep -r "UIWebView" .

Todos os pods correspondentes devem ser atualizados. Agora estou preso porque encontrei UIWebView no Google AdMob (versão 7.49.0) e estou esperando uma nova versão do Google.

iNardex
fonte
23
Ao inserir o comando no terminal, recebo o seguinte aviso "grep: aviso: pesquisa recursiva de stdin" e não retorna nenhuma resposta mesmo após 30 minutos. Alguma idéia?
Durai Amuthan.H
1
Funcionou perfeitamente. Usei isso para descobrir que UnityAds.framework está usando UIWebView. Eles precisam ser atualizados para WKWebView.
Apollo SOFTWARE
1
Talvez você obtenha resultados como abaixo .. Arquivo binário /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate corresponde. Eu resolvi isso excluindo meu xcworkspace e pod install novamente.
ShaoJen Chen
2
Você ainda entende @WilliamNardo? Embora eu tenha atualizado a versão anterior para corrigi-lo: " 7.55.0 Removed all references to UIWebView. UIWebView is no longer supported.", Installing Google-Mobile-Ads-SDK 7.56.0 (was 7.53.1)ainda receboBinary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
10623169
17
@ DuraiAmuthan.H verifique se você adicionou o ponto final / ponto final (.) No final do comando grep. Eu inicialmente cometi o mesmo erro
Wheelie
68

Você pode examinar cada uma das estruturas no aplicativo arquivado para ver se alguma delas se refere a UIWebView. Da linha de comando cdpara o aplicativo arquivado, por exemplo:

cd ~/Library/Developer/Xcode/Archives/<date>/myapp.xcarchive/Products/Applications/myapp.app

Uma vez lá, use o nmcomando para despejar os símbolos do seu aplicativo e cada uma das estruturas do aplicativo:

nm myapp | grep UIWeb
for framework in Frameworks/*.framework; do
  fname=$(basename $framework .framework)
  echo $fname
  nm $framework/$fname | grep UIWeb
done

Isso pelo menos lhe dirá qual framework é o culpado.

Rudedog
fonte
Obrigado pela sua resposta ajudou muito. Vou atualizar minha pergunta com mais informações.
Nick
Agora, a única coisa que posso fazer é esperar que o Google resolva os problemas.
Nick
2
Sim, você precisará esperar (ou corrigi-los você mesmo e enviar uma solicitação de pull). Não tenho certeza de qual é o prazo exato para remover todos os usos do UIWebView, mas duvido muito que seja antes do lançamento do iOS 13 neste outono.
Rudedog
@Rudedog como posso corrigir o quadro funciona sozinho? Em primeiro lugar, obrigado por sua resposta ... depois de seguir sua resposta, parece que tenho 4 frameworks que estão usando UIWebView >>>>>> Alamofire Cosmos NMSSH Stripe
johnny
2
@johnny você teria que clonar cada repositório e descobrir onde eles usam o UIWebView, remover ou substituir o código que o usa e, possivelmente, enviar solicitações pull se quiser que suas alterações voltem para o repositório principal. Ou você pode apenas esperar que os mantenedores consertem por conta própria. Como mencionei antes, agora a Apple está apenas alertando os desenvolvedores sobre isso e não rejeitando os binários, então você tem algum tempo para esperar que os mantenedores originais consertem as coisas.
Rudedog
9

Responderei minha própria pergunta conforme tiver novidades sobre este e-mail. O Google me disse que existem vários tíquetes sobre esse problema e eles vão resolver isso o mais rápido possível. Também hoje meu aplicativo foi aprovado para a AppStore, então parece ser apenas um aviso por enquanto.

usuario
fonte
Olá, você pode direcionar para alguma solução, também estou enfrentando o mesmo problema. O aplicativo não está aprovando mesmo depois de ser atingido e ser testado.
Dinesh Rawat
6

WKWebViewé o substituto para UIWebView. Se você não tem UIWebViewuso em seu código do que executando o comando de terminal abaixo, você pode facilmente saber qual biblioteca ainda está usando a UIWebViewreferência (não perca o. (Ponto)).

Na linha de comando, faça cd para o aplicativo arquivado, por exemplo

cd ~/Library/Developer/Xcode/Archives/<date>/myapp.xcarchive/Products/Applications/myapp.app

E então corra

grep -r UIWebView

OU ligue

 grep -r UIWebView /Path/To/Project/*

Isso lhe dará saída para correspondência de estrutura

./<ANY>.framework/Headers/ANY.h:#define ANYUseUIWebView ANY_NAME_PASTE(ANY_PREFIX_NAME, ANYUseUIWebView)

Saída para correspondência de biblioteca

Binary file ./<FRAMEWORK-NAME>.framework/<LIB-FILE>.a matches

Atualize essas bibliotecas

pod update

também verifique este artigo médio

Jawad Ali
fonte
use "grep -r -F" UIWebView "." istead of "grep -r UIWebView"
Manish
1
No Mac, use "grep -r UIWebView." no caminho do projeto (com espaço e ponto no final)
Vins
Já atualizei todos os pods que estavam usando UIWebView(por exemplo, AFNetworking, ZDCChat) e também verifiquei os pods atualizados, pois já foram atualizados para WKWebView, mas ainda grep -r UIWebView .me dá a mesma lista de pods para UIWebViewcorrespondências e a Apple também dá um aviso ao enviar o aplicativo no iTunesconnect
Sunil Targe
./Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h:#import "UIWebView+AFNetworking.h" Binary file ./Pods/ZDCChat/ZDCChatAPI.framework/ZDCChatAPI matches Binary file ./Pods/ZDCChat/ZDCChat.framework/ZDCChat matches Binary file ./Pods/.git/index matches
Sunil Targe
ZDCChatAPIeste pod usauiwebview
Jawad Ali
6

Para projeto com cocoapods:

grep -r UIWebView Pods/ 
hstdt
fonte
4
brew install ripgrep 
cd Pods
rg UIWebView
YoutubePlayer-in-WKWebView/README.md
10:- using WKWebView instead of UIWebView.

TTTAttributedLabel/TTTAttributedLabel/TTTAttributedLabel.h
166: to emulate the link detection behaviour of UIWebView.

TwitterKit/iOS/TwitterKit.framework/Headers/Twitter.h
28:     * either UIWebView or SFSafariViewController depending on iOS

TwitterKit/iOS/TwitterKit.framework/Headers/TWTRTweet.h
84: *  Suitable for loading in a `UIWebView`, `WKWebView` or passing to Safari:
Svitlana
fonte
3

Resolvi esse problema atualizando o plug-in iônico do webview e adicionando preferências na configuração.

Eu segui os seguintes passos:

1. plugin cordova rm cordova-plugin-ionic-webview

2. plugin cordova add cordova-plugin-ionic-webview @ mais recente

3.Adicionou preferências no arquivo de configuração na plataforma ios:

<preference name="WKWebViewOnly" value="true" />
    <feature name="CDVWKWebViewEngine">
        <param name="ios-package" value="CDVWKWebViewEngine" />
    </feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />

Depois de seguir essas etapas, meu aplicativo é enviado e posteriormente aprovado em revisão.

Munish Chechi
fonte
2

Se você está construindo com Unity 3D , este é um problema conhecido (reconhecido nos changelogs), está corrigido atualmente para a versão 2019.3 (sendo testado e portado para trás).

Verifique o tíquete aqui https://unity3d.com/unity/whats-new/2019.2.4

Dalton Lima
fonte
2

Foi um processo longo, mas consegui resolver o problema mencionado acima. Deixe-me guiá-lo pelo processo e compartilhar minhas descobertas. Em primeiro lugar, não é necessário que o que funcionou para mim funcione para você. Você só precisa tentar todas as soluções possíveis disponíveis. Segui algumas das soluções postadas em vários tópicos. (Link abaixo).

  1. Quando eu estava no RN 0,59, encontrei o comentário desses arquivos aqui mencionado . Não funcionou
  2. Eu atualizei para RN 0.61, não encontrei esses arquivos. Tentei fazer o upload do aplicativo, mas ainda recebi o aviso. Não funcionou
  3. Eu atualizei as seguintes bibliotecas para suas versões mais recentes. Não funcionou react-native-device-info react-native-view
  4. Tentei este comando grep mencionado aqui . Algumas bibliotecas apareceram, por exemplo, react-native-fbsdk, react-native-google-sign, react-native-gestos-handler. Então eu atualizei todos eles e carreguei a compilação, mas ainda recebi o aviso. Não funcionou

  5. O último recurso para atualizar todas as bibliotecas, que sei que levaria muito tempo. Então, meu primeiro palpite foi atualizar 'react-native-firebase' para o problema da versão v6 mais recente . Mas ele teve alguns problemas com a notificação não estar ativada, então não pude usá-lo. Também mencionaram que seu v.5.5.6 é limpo e não tem nenhum UIWebViewIssues, dado que você atualiza seu SDK do iOS para 6.12. + Mais informações aqui . Portanto, isso me levou à minha segunda hipótese, que no meu caso era 'react-native-ux-cam'. Felizmente, eles atualizaram sua biblioteca para remover todas as referências de UIWebView. Atualizei para a versão mais recente e BOOM, o problema foi resolvido. Enviei meu aplicativo para a Apple e nenhum aviso até agora. Mais informações aqui Trabalhou 💥

Espero que isso ajude alguém.

Zeerak Hameem
fonte
2

História

No meu projeto ReactJS + Cordova, carreguei um aplicativo na app store e foi bem-sucedido. Pouco depois recebi um email citando ITMS-90809: Deprecated API Usage. Depois de horas (ao longo de dias) de pesquisa e vários uploads com falha, conectei-me à Apple usando um token de desenvolvedor pago ($ 50); eles responderam basicamente dizendo "verifique sua pasta de módulos de nó" e reembolsaram meu token porque não iriam me ajudar com esse erro extremamente ambíguo.

Tentativas Anteriores

  • Cordova atualizado para usar os plug wkwebview-engine- wkwebviewxhrfixins e
  • Usando grep -rarquivos, fonte ios e fonte inteira do projeto, encontrei MUITAS notas, mas nada que realmente ajudou.
  • atualizou todos os npmpacotes
  • limpou e atualizou todos os cocoapodpods

Tentativa Final

Depois de remover todos os plug-ins "extras" do Cordova, pacotes npm e pods, fiquei com o shell de um aplicativo, mas ainda enfrentando a rejeição da apple. usando grep -rnovamente ainda havia uma referência a "facebook" que me levou a uma cópia antiga do FBSDK.

Solução

FBSDKfoi adicionado manualmente a target > Build Phases > Link Binary With Libraries. Também havia um associado cordovaFacebook.mem target > Build Phases > Compile Sources. Depois de remover esses arquivos antigos e não mantidos, consegui fazer o upload para o iTunes Connect sem problemas.

Jacksonkr
fonte
1

No meu caso, Firebase/Authestava usando a API UIWebView obsoleta e a versão que estava usando era mais antiga. Acabei de atualizar o Firebase/Authpod usando o comando,

pod update 'Firebase/Auth'

Observação : para descobrir as estruturas que estão usando esta API, basta pesquisar "UIWebView" ( cmd+ shift+ F)

ceekay
fonte
Então foi isso que eu fiz e, aparentemente, está escrito Instalando FirebaseInstanceID 4.2.5 (era 4.2.2) e não resolveu meu problema
Jules Lee
1

FB Sdk acima da versão 7.16.1 tem esse problema. Na verdade, não há arquivos na pasta do framework.

Este erro é removido quando você o constrói usando FBSDK v7.16.1, mas o Appstore rejeitou o aplicativo, devido ao uso depreciado da API (UIWebView).

Eu resolvo isso usando FBSDK v7.19.2.

1) Quando você constrói o projeto para xcode mostra o erro de menção, shareKit não encontrado. Eu resolvo isso copiando a pasta facebookSDK da pasta do meu build anterior (com fbsdk v7.16.1), para o mesmo local da pasta xcode atual (frameworks / FacebookSDK ....)

2) Em seguida, abra seu projeto xcode, adicione arquivos do local: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) em Frameworks no Xcode.

3) Adicione "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" no Framework Search Paths nas configurações de compilação no Xcode.

4) Abra o Projeto no Terminal: digite "grep -r" UIWebView "." , se isso mostrar qualquer correspondência com UIWebView, remova-o abrindo o arquivo.

5) Se houver correspondência em um arquivo binário do FBSDKCoreKit. Abra o arquivo no TextEdit em MAC e encontre e substitua todos os "UIWebView" por "WKWebView"

6) Salve-o e adicione-o novamente ao Frameworks no Xcode. Crie e envie para appstore.

Aqib Ahmed
fonte
0

Ao construir um aplicativo Ionic, você pode escolher entre Cordova ou Capacitor para implantar uma versão móvel nativa. Embora as versões mais recentes usem WKWebView automaticamente, Cordova ainda usa APIs UIWebView diretamente ou contém referências a elas (o capacitor foi atualizado para remover essas referências - veja abaixo).

Após o envio do aplicativo, a Apple pesquisa o código do aplicativo para a string “UIWebView” e gera um aviso de envio, se encontrado. Portanto, uma versão futura do cordova-ios (a biblioteca Cordova iOS) será necessária para garantir que todas as referências às APIs UIWebView sejam removidas.

outro pensamento. Não sei se faz sentido ou se é tecnicamente possível.

Mova UIWebView para um plug-in também e faça cordova-ios usar este ou alguns dos plug-ins WKWebView. cordova-ios contém apenas o código para carregar um webview. Por padrão, a próxima versão deve carregar o Apache WKWebViewEngine (plug-in instalado por padrão em novos aplicativos, instrução de migração para aplicativos antigos). Os usuários que precisam de UIWebView, o Ionic, um fork ou outros podem especificar o seu próprio como está agora.

Dessa forma, nenhum UIWebView estaria em cordova-ios e ainda seria flexível o suficiente como hoje.

Sugestão de especialista
fonte
0

Eu enfrentei o mesmo para o aplicativo nativo React. Confira abaixo as coisas:

1) Você está usando o módulo react-native-webview em vez de importá-lo diretamente do react-native (o community webview está obsoleto como uma remoção de núcleo enxuto na v0.60 e será removido na próxima versão estável). ( verifique aqui )

2) Verifique também se você está usando qualquer biblioteca de terceiros que usa o webview está atualizado. Caso contrário, peça aos mantenedores da biblioteca para atualizar o react-native-webview.

3) você está pronto para fazer o upload, por favor, adicione comentários se alguém encontrar mais dificuldades.

Confira aqui as últimas mudanças na v0.60

Outra maneira de se livrar desse aviso é: comece a passar useWebKit = {true}, ou seja, você está usando WKWebView e não UIWebView. Em seguida, você pode fazer o seguinte para resolver o problema - Uso de API obsoleto.

  1. Remover bibliotecas / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Remova Libraries / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Agora eu já carreguei app.ipa na AppStore com sucesso sem nenhum aviso de permissão.

<WebView
 style={{flex: 1, backgroundColor: Colors.white}}
 useWebKit={true}
 startInLoadingState={true}
 source={{uri: 'my http url'}}
/>```
Shashank Malviya
fonte
0

Se alguém ajudar eu corro pod updateno terminal e depois arquivo novamente. Isso funciona para mim.

Alfredo Luco G
fonte
Isso cobre os aplicativos ios, mas não ajuda o Android ou outros aplicativos móveis.
Jacksonkr
Este é um problema específico do iOS, o Android não tem o mesmo problema
slothstronaut
0

Para mim, os scripts não ajudaram. Tive que passar manualmente por cada estrutura e olhar a nota de versão e atualizá-los.

green0range
fonte
0

Eu me livro disso seguindo as etapas abaixo-

Passo 1:

Pesquise “UIWebView” no diretório do projeto xcode

Passo 2:

Clique com o botão direito (em RCTWebView.m) e selecione “Reveal In Project Navigator”

Etapa 3:

Role para baixo e exclua apenas os quatro arquivos a seguir:

 1. RCTWebView.h
 2. RCTWebView.m
 3. RCTWebViewManager.h
 4. RCTWebViewManager.m

Em seguida, limpe o projeto e o arquivo.

NB: Se você usar a biblioteca 'react-native-community / react-native-webview' então atualize com a versão mais recente, caso contrário está feito.

Ali Hasan
fonte
0

A fim de encontrar onde você está usando um UIWebView, vá para a raiz do seu projeto no terminal e use este comando

grep -r -F "UIWebView" .

O '.' é muito importante. Diz ao sistema para pesquisar a string "UIWebView" na pasta e subpastas atuais. Isso também pesquisará as bibliotecas de cocoapods

Amal TS
fonte
0

Para atualizar o WebView obsoleto no ios

Isso resolveu meu problema com sucesso

plataformas de cd / ios grep -r UIWebView Pods /

Abra o Podfile e adicione / substitua o pod AFNetworking como

pod 'AFNetworking', '~> 4.0'

Finalmente na atualização do terminal pod

user2931571
fonte