ITMS-90809: Kullanımdan Kaldırılan API Kullanımı - Apple, UIWebView API'lerini kullanan uygulamaların gönderimlerini kabul etmeyecek


91

Dün Uygulamamı TestFlight'a yükledim ve bir süre sonra Apple bana şu uyarıyı gönderdi:

ITMS-90809: Kullanımdan Kaldırılan API Kullanımı - Apple, UIWebView API'lerini kullanan uygulamaların gönderimlerini kabul etmeyecek. Daha fazla bilgi için https://developer.apple.com/documentation/uikit/uiwebview adresine bakın .

Mesele şu ki, uygulamamda UIWebView kullanmıyorum, bu yüzden bölmelerimi güncellemeye çalıştım ama yine de aynı şey Bu arada bu, TestFlight'taki 3. yapım ve bu, Apple bana bunu ilk kez gönderiyor. Herhangi bir fikir?

Güncelleme

Bunlar benim kapsüllerim:

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'

Güncelleme 2

Görünüşe göre sorunla ilgili çerçeveleri buldum.

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

Öyleyse şimdi Google'ın bunları düzeltmesini ve kapsüllerimi güncellemesini beklemem gerekiyor mu?


Hangi Kapsülleri kullandığınızı ve bir UIWebView kullanıp kullanmadıklarını kontrol edin. Örneğin, banner SDK'ları, ancak diğer SDK'ları da kontrol etmek isteyebilirsiniz.
Gerharbo

1
@Gerharbo Yalnızca Firebase bölmeleri kullanıyorum ve bunların içinde UIWebView bulamıyorum.
Nick

Cordova + reactjs (veya angular) kullananlar için cordova -plugin-wkwebview-engine ve cordova-plugin-wkwebviewxhrfix'e göz atın
Jacksonkr

Yanıtlar:


102

Kodunuzda UIWebView sınıfını kullanıp kullanmadığınızı kontrol edin; evet ise uygulamanızı WKWebView ile değiştirin, aksi takdirde Bölmelerinizi kontrol etmeniz gerekir.

Terminal ile proje klasörünüze gidin ve komutu yürütün: grep -r "UIWebView" .

Tüm eşleşen kapsüller güncellenmelidir. Şimdi, UIWebView'ı Google AdMob'da (sürüm 7.49.0) bulduğum ve Google'ın yeni bir sürümünü beklediğim için takılı kaldım.


22
Komutu terminalde girdiğimde şu uyarıyı alıyorum: "grep: uyarı: stdin'in yinelemeli araması" ve 30 dakika sonra bile herhangi bir yanıt vermiyor. Herhangi bir fikriniz var mı?
Durai Amuthan. H

1
Mükemmel çalıştı. Bunu UnityAds.framework'ün UIWebView kullandığını öğrenmek için kullandım. WKWebView'a güncelleme yapmaları gerekir.
Apollo YAZILIMI

1
Belki aşağıdaki gibi bir sonuç alırsınız .. İkili dosya /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate eşleşmeleri. Xcworkspace ve pod kurulumumu tekrar silerek çözdüm.
ShaoJen Chen

2
Bu @ WilliamNardo hala var mı? Düzeltmek için varsayılan sürümü güncellememe rağmen: " 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)yine de Binary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
alıyorum

14
@ DuraiAmuthan.H, grep komutunun sonuna nokta / tam durma (.) Eklediğinizi kontrol edin. Başlangıçta aynı hatayı yaptım
Wheelie

68

Herhangi birinin başvuruda bulunup bulunmadığını görmek için arşivlenen uygulamadaki çerçevelerin her birini inceleyebilirsiniz UIWebView. Komut satırından cdarşivlenen uygulamaya, örneğin:

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

nmOradayken, uygulamanızın sembollerini ve uygulama çerçevelerinin her birini dökmek için komutu kullanın:

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

Bu, en azından hangi çerçevenin suçlu olduğunu söyleyecektir.


Cevabınız için teşekkür ederim, çok yardımcı oldu. Sorumu daha fazla bilgi ile güncelleyeceğim.
Nick

Yani şimdi yapabileceğim tek şey Google'ın sorunları çözmesini beklemek mi?
Nick

2
Evet, beklemeniz (veya bunları kendiniz düzeltmeniz ve bir çekme talebi göndermeniz) gerekecek. Tüm kullanımları kaldırmak için kesin son tarihin ne olduğundan emin değilim UIWebView, ancak iOS 13'ün bu sonbaharda yayınlanmasından önce olacağından şüpheliyim.
Rudedog

@Rudedog Çerçevenin kendi kendime çalışmasını nasıl düzeltebilirim? Öncelikle cevabınız için teşekkür ederim ... cevabınızı izledikten sonra UIWebView kullanan 4 çerçevem ​​var gibi görünüyor >>>>>> Alamofire Cosmos NMSSH Stripe
johnny

2
@johnny, her bir depoyu klonlamanız ve UIWebView'ı nerede kullandıklarını bulmanız, onu kullanan kodu kaldırmanız veya değiştirmeniz ve değişikliklerinizin ana depoya geri dönmesini istiyorsanız muhtemelen çekme istekleri göndermeniz gerekir. Ya da bakımcıların kendi başlarına tamir etmelerini bekleyebilirsiniz. Daha önce de bahsettiğim gibi, şu anda Apple sadece geliştiricileri bu konuda uyarıyor ve aslında ikili dosyaları reddetmiyor, bu yüzden yukarı akış bakımcılarının bir şeyleri düzeltmesini beklemek için biraz zamanınız var.
Rudedog

9

Bu e-posta ile ilgili haberlerim olduğu için kendi sorumu cevaplayacağım. Google bana bu sorunla ilgili birkaç bildirim olduğunu ve bunu en kısa sürede çözeceklerini söyledi. Ayrıca bugün uygulamam AppStore için onaylandı, bu yüzden şimdilik sadece bir uyarı gibi görünüyor.


Merhaba, bir çözüme yönlendirebilir misiniz, ben de aynı sorunla karşı karşıyayım. Uygulama, isabet ve denemelerden sonra bile onaylamıyor ..
Dinesh Rawat

6

WKWebViewyerine geçer UIWebView. UIWebViewKodunuzda aşağıdaki terminal komutunu çalıştırmak yerine kullanımınız yoksa , hangi kütüphanenin hala UIWebViewreferansı kullandığını kolayca öğrenebilirsiniz (. (Nokta) işaretini kaçırmayın).

Komut satırından, cd'den arşivlenen uygulamaya, örn.

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

Ve sonra koş

grep -r UIWebView

YA çağrı

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

Bu size çerçeve eşleşmesi için Çıktı verecektir

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

Kitaplık eşleşmesi için çıktı

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

Bu Kitaplıkları güncelleyin

pod update

ayrıca bu Orta Makaleye göz atın


"grep -r -F" UIWebView "kullanın. "grep -r UIWebView" yerine
Manish

1
Mac'te "grep -r UIWebView" kullanın. proje yolunda (sonunda boşluk ve nokta ile)
Vins

Kullanmakta olan tüm bölmeleri zaten yükseltmişler UIWebView(örneğin, AFNetworking, ZDCChat) ve güncellenmiş bölmeleri zaten WKWebView için yükseltildikleri için kontrol ettiler, ancak yine de eşleşmeler grep -r UIWebView .için aynı bölme listesini UIWebViewveriyor ve apple ayrıca iTunesconnect uygulamasında uygulama gönderirken uyarı veriyor
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 Kalkanı

ZDCChatAPIbu bölmenin kullandığıuiwebview
Jawad Ali

5

Cocoapod'lu proje için:

grep -r UIWebView Pods/ 

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:



2

Arka plan

ReactJS + Cordova projemde uygulama mağazasına bir uygulama yükledim ve başarılı oldu. Alıntı yapan bir e-posta aldıktan kısa bir süre sonra ITMS-90809: Deprecated API Usage. Saatler süren (günler boyunca) araştırma ve birden fazla başarısız yüklemeden sonra, ücretli bir geliştirici simgesi (50 $) kullanarak Apple ile bağlantı kurdum; temelde "düğüm modülleri klasörünüzü kontrol edin" diyerek yanıt verdiler ve bu son derece belirsiz hatada bana yardımcı olmayacakları için belirtecimi iade ettiler.

Önceki Girişimler

  • wkwebview-engineVe wkwebviewxhrfixeklentilerini kullanmak için güncellenmiş cordova
  • Kullanılması grep -rkaynağı, proje tamamıyla kaynağı ios, arşivler, ben bir notların LOT ama gerçekten yardımcı olduğu hiçbir şey bulunamadı.
  • tüm npmpaketleri güncelledi
  • tüm cocoapodbölmeleri temizledi ve güncelledi

Son girişim

Tüm "ekstra" cordova eklentilerini, npm paketlerini ve kapsülleri kaldırdıktan sonra, bir uygulamanın kabuğuyla kaldım, ancak hala elma reddiyle karşı karşıyayım. grep -rtekrar kullanıldığında , beni eski bir kopyasına götüren "facebook" a referans vardı FBSDK.

Çözüm

FBSDKkonumuna manuel olarak eklendi target > Build Phases > Link Binary With Libraries. Bir de ilişkili cordovaFacebook.mvardı target > Build Phases > Compile Sources. Bu eski, bakımı yapılmayan dosyaları kaldırdıktan sonra sorun olmadan itunes connect'e yükleyebildim.


2

Bu sorunu, ionic webview eklentisini güncelleyerek ve konfigürasyonda tercihler ekleyerek çözdüm.

Aşağıdaki adımları takip ettim:

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

2.cordova eklentisi cordova-plugin-ionic-webview @ latest ekleyin

3. ios platformu altındaki yapılandırma dosyasına tercihler eklendi:

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

Bu adımları izledikten sonra uygulamam gönderilir ve daha sonra incelemede onaylanır.


1

Benim durumumda, Firebase/Authkullanımdan kaldırılmış UIWebView API'sini kullanıyordum ve kullandığım sürüm daha eskiydi. Bu yüzden Firebase/Authşu komutu kullanarak bölmeyi güncelledim ,

pod update 'Firebase/Auth'

Not : Bu API'yi kullanan çerçeveleri bulmak için "UIWebView" ( cmd+ shift+ F) araması yapmanız yeterlidir.


Yaptığım şey buydu ve görünüşe göre FirebaseInstanceID 4.2.5'i Kurmak yazıyor (4.2.2 idi) ve problemimi çözmedi
Jules Lee

1

Uzun bir süreçti ama yukarıda bahsedilen sorunu çözmeyi başardım. Süreç boyunca size rehberlik etmeme ve bulgularımı paylaşmama izin verin. İlk önce, benim için işe yarayan şey sizin için işe yarayacak gerekli değil. Siz juts, ortaya çıkan her olası çözümü denemelisiniz. Çeşitli konulardaki bazı çözümleri takip ettim. (Aşağıda bağlantılı).

  1. RN 0.59'dayken, burada bahsedilen bu dosya yorumlarını buldum . İşe yaramadı
  2. RN 0.61'e yükselttim, bu dosyaları bulamadım. Uygulamayı yüklemeyi denedim ama hala uyarı alıyorum. İşe yaramadı
  3. Aşağıdaki kitaplıkları en son sürümlerine güncelledim. React-native-device-info react-native-view çalışmadı
  4. Burada bahsedilen grep komutunu denedim . Bazı kitaplıklar ortaya çıktı, örneğin react-native-fbsdk, react-native-google-sign, react-native-hareket-işleyici. Bu yüzden hepsini yükselttim ve yapıyı yükledim ama yine de uyarı alıyorum. İşe yaramadı

  5. Çok zaman alacağını bildiğim tüm kütüphaneleri güncellemek için son çare. İlk tahminim güncelleme oldu Yani 'tepki yerli-Firebase' son v6 sürümü için konuyla . Ancak Bildirimin açık olmamasıyla ilgili bazı sorunları vardı, bu yüzden kullanamadım. Ayrıca, iOS sdk'nizi 6.12'ye güncellemeniz için v.5.5.6'nın temiz olduğunu ve UIWebViewIssue'larının bulunmadığını belirttiler. + Daha fazla bilgi burada . Bu da beni ikinci tahminime götürdü ki benim durumumda "react-native-ux-cam" oldu. Neyse ki, UIWebView'in tüm referanslarını kaldırmak için kitaplıklarını güncellediler. En son sürüme ve BOOM'a güncelledim, sorun çözüldü. Uygulamamı Apple'a gönderdim ve şu ana kadar uyarı almadım. Daha fazla bilgi burada Çalıştı 💥

Umarım bu birine yardımcı olur.


1

Sürüm 7.16.1'in üstündeki FB Sdk'de bu sorun var. Aslında çerçeve klasöründe dosya yok.

FBSDK v7.16.1 kullanarak oluşturduğunuzda bu hata kaldırılır, ancak Appstore, amortismana tabi API kullanımı (UIWebView) nedeniyle uygulamayı reddeder.

FBSDK v7.19.2 kullanarak çözüyorum.

1) xcode için proje oluşturduğunuzda, bahsetme hatasını gösterir, shareKit bulunamadı. Önceki yapımın çerçeve klasöründen (fbsdk v7.16.1 ile) facebookSDK klasörünü mevcut xcode klasörünün (çerçeveler / FacebookSDK ....) aynı konumuna kopyalayarak çözüyorum.

2) Ardından, xcode projenizi açın, konumdan dosyalar ekleyin: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) Xcode'daki Frameworks'e.

3) Xcode'daki yapı ayarlarına "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" ekleyin.

4) Projeyi Terminale Açın: "grep -r" UIWebView "yazın. , bu, UIWebView ile herhangi bir eşleşme gösteriyorsa, dosyayı açarak kaldırın.

5) FBSDKCoreKit'in ikili dosyasında eşleşmeyi gösteriyorsa. Dosyayı MAC'de TextEdit'te açın ve tüm "UIWebView" u "WKWebView" olarak Bulun ve Değiştirin

6) Kaydedin ve tekrar Xcode'daki Frameworks'e ekleyin. Uygulama mağazasını derleyin ve gönderin.


0

Bir Ionic uygulaması oluşturduğunuzda, yerel bir mobil sürümü dağıtmak için Cordova veya Capacitor arasında seçim yapabilirsiniz. Daha yeni sürümler otomatik olarak WKWebView kullanırken, Cordova hala UIWebView API'lerini doğrudan kullanıyor veya bunlara referanslar içeriyor (Kapasitör, bu referansları kaldırmak için güncellendi - aşağıya bakın).

Uygulama gönderildikten sonra Apple, uygulamanın kodunu "UIWebView" dizesi için arar ve bulunursa bir gönderim uyarısı oluşturur. Bu nedenle, UIWebView API'lerine yönelik tüm referansların kaldırıldığından emin olmak için gelecekteki bir cordova-ios sürümü (Cordova iOS kitaplığı) gerekecektir.

başka bir düşünce. Mantıklı mı yoksa teknik olarak mümkün mü bilmiyorum.

UIWebView'ı bir eklentiye taşıyın ve cordova-ios'un bunu veya WKWebView eklentilerinin bir kısmını kullanmasını sağlayın. cordova-ios yalnızca bir web görünümünü yüklemek için gereken kodu içerir. Varsayılan olarak, sonraki sürüm Apache WKWebViewEngine'i yüklemelidir (Eklenti yeni uygulamalara varsayılan olarak yüklenir, eski uygulamalar için Taşıma talimatı). UIWebView, Ionic olan, bir fork veya diğerlerine ihtiyaç duyan kullanıcılar, şimdi olduğu gibi kendi çatallarını belirleyebilirler.

Bu şekilde, hiçbir UIWebView, cordova-ios'ta olmayacak ve bugünkü gibi yeterince esnek olacaktır.


0

React yerel uygulaması için de aynı şeyle karşılaştım. Aşağıdaki şeyleri kontrol edin:

1) React-native-webview modülünü doğrudan react-native'den içe aktarmak yerine kullanıyorsunuz (topluluk web görünümü, v0.60'da yalın çekirdek kaldırma olarak kullanımdan kaldırılmıştır ve bir sonraki kararlı sürümde kaldırılacaktır). ( burayı kontrol edin )

2) Lütfen webview kullanan herhangi bir üçüncü taraf kitaplığı kullanıp kullanmadığınızı da doğrulayın, yoksa lütfen kütüphane sorumlularından react-native-webview'u yükseltmelerini isteyin.

3) yükleme için gitmekte iyisiniz, Lütfen herhangi biri daha fazla zorluk bulursa yorum ekleyin.

V0.60'daki son değişiklikleri buradan kontrol edin

Bu uyarıdan kurtulmanın başka bir yolu şudur: useWebKit = {true} 'yi geçmeye başlayın, yani UIWebView yerine WKWebView kullanıyorsunuz. Ardından sorunu çözmek için şunları yapabilirsiniz - Kullanımdan Kaldırılan API Kullanımı.

  1. Kitaplıkları Kaldır / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Kitaplıkları Kaldır / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Artık app.ipa'yı herhangi bir izin uyarısı olmadan başarıyla AppStore'a yükledim.

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

0

Herhangi biri yardım ederse pod update, terminalde çalışırım ve ardından tekrar arşivlerim. Bu benim için çalışıyor.


Bu, ios uygulamalarını kapsar, ancak android veya diğer mobil uygulamalara yardımcı olmaz.
Jacksonkr

Bu, iOS'a özgü bir sorun, Android'de aynı sorun yok
slothstronaut

0

Bana göre senaryolar yardımcı olmadı. Her çerçeveyi manuel olarak gözden geçirip sürüm notuna bakmam ve bunları güncellemem gerekiyordu.


0

Aşağıdaki adımları izleyerek bundan kurtuldum.

Aşama 1:

Xcode proje dizininde "UIWebView" arayın

Adım 2:

Sağ tıklayın (RCTWebView.m'de) ve "Proje Gezgini'nde Göster" i seçin

Aşama 3:

Aşağı kaydırın ve yalnızca aşağıdaki dört dosyayı silin:

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

Ardından projeyi ve arşivi temizleyin.

Not: 'react-native-community / react-native-webview' kitaplığını kullanıyorsanız en son sürümle güncelleyin, aksi takdirde yapılır.



0

A'yı nerede kullandığınızı bulmak için UIWebView, terminalde proje kökünüze gidin ve bu komutu kullanın

grep -r -F "UIWebView" .

'' çok önemli. Sisteme , geçerli klasör ve alt klasörlerdeki "UIWebView" dizesini aramasını söyler . Bu, cocoapods kitaplıklarını da arayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.