ITMS-90809: Penggunaan API yang Tidak Berlaku Lagi - Apple akan berhenti menerima pengiriman aplikasi yang menggunakan API UIWebView

91

Kemarin, saya mengunggah Aplikasi saya ke TestFlight dan setelah beberapa saat Apple mengirimi saya peringatan ini:

ITMS-90809: Penggunaan API yang Tidak Berlaku Lagi - Apple akan berhenti menerima pengiriman aplikasi yang menggunakan API UIWebView. Lihat https://developer.apple.com/documentation/uikit/uiwebview untuk informasi lebih lanjut.

Masalahnya adalah saya tidak menggunakan UIWebView di aplikasi saya jadi saya mencoba memperbarui pod saya tetapi masih tetap sama. Ngomong-ngomong ini adalah build ketiga saya di TestFlight dan ini adalah pertama kalinya Apple mengirimkan ini kepada saya. Ada ide?

Memperbarui

Ini adalah pod saya:

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'

Perbarui 2

Sepertinya saya menemukan kerangka kerja dengan masalah ini.

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

Jadi sekarang apakah saya harus menunggu Google untuk memperbaikinya dan mengupdate pod saya?

Nick
sumber
Periksa Pod apa yang Anda gunakan dan apakah mereka menggunakan UIWebView. Misalnya SDK spanduk, tetapi Anda mungkin ingin memeriksa SDK lain juga.
Gerharbo
1
@Gerharbo Saya hanya menggunakan pod Firebase dan saya tidak dapat menemukan UIWebView di dalamnya.
Nick
Bagi mereka yang menggunakan cordova + reactjs (atau angular) periksa cordova-plugin-wkwebview-engine dan cordova-plugin-wkwebviewxhrfix
Jacksonkr

Jawaban:

102

Periksa apakah Anda menggunakan kelas UIWebView dalam kode Anda; jika ya, ganti implementasi Anda dengan WKWebView, jika tidak, perlu periksa Pod Anda.

Pergi dengan terminal ke dalam folder proyek Anda dan jalankan perintah: grep -r "UIWebView" .

Semua pod yang cocok harus diperbarui. Sekarang saya mandek karena saya menemukan UIWebView di Google AdMob (versi 7.49.0) dan saya menunggu versi baru dari Google.

iNardex
sumber
22
Ketika saya memasukkan perintah di terminal, saya mendapatkan peringatan berikut "grep: peringatan: pencarian rekursif stdin" dan Itu tidak mengembalikan respons apa pun bahkan setelah 30 menit. Ada ide?
Durai Amuthan.H
1
Bekerja dengan sempurna. Saya menggunakan ini untuk mengetahui UnityAds.framework menggunakan UIWebView. Mereka perlu memperbarui ke WKWebView.
PERANGKAT LUNAK Apollo
1
Mungkin Anda akan mendapatkan hasil seperti di bawah ini .. File biner /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate cocok. Saya menyelesaikannya dengan menghapus xcworkspace dan pemasangan pod saya lagi.
ShaoJen Chen
2
Apakah Anda masih mendapatkan @WilliamNardo ini? Meskipun saya telah memperbarui melewati rilis yang seharusnya untuk memperbaikinya: " 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), saya masih mendapatkanBinary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
10623169
14
@ DuraiAmuthan.H periksa Anda menambahkan titik / berhenti penuh (.) Di akhir perintah grep. Saya awalnya melakukan kesalahan yang sama
Wheelie
68

Anda dapat memeriksa setiap kerangka kerja di aplikasi yang diarsipkan untuk melihat apakah ada kerangka yang dirujuk UIWebView. Dari baris perintah, cdke aplikasi yang diarsipkan, misalnya:

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

Sesampai di sana, gunakan nmperintah untuk membuang simbol aplikasi Anda dan setiap kerangka aplikasi:

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

Ini setidaknya akan memberi tahu Anda kerangka kerja mana yang menjadi pelakunya.

Rudedog
sumber
Terima kasih atas jawaban Anda, itu sangat membantu. Saya akan memperbarui pertanyaan saya dengan informasi lebih lanjut.
Nick
Jadi sekarang satu-satunya hal yang dapat saya lakukan adalah menunggu google menyelesaikan masalah?
Nick
2
Ya, Anda harus menunggu (atau perbaiki sendiri dan kirimkan permintaan tarik). Saya tidak yakin berapa batas waktu yang tepat untuk menghapus semua penggunaan UIWebView, tetapi saya sangat ragu bahwa itu akan terjadi sebelum iOS 13 dirilis musim gugur ini.
Rudedog
@Rudedog bagaimana saya bisa memperbaiki bingkai bekerja sendiri? Pertama-tama terima kasih atas jawaban Anda ... setelah mengikuti jawaban Anda, sepertinya saya memiliki 4 framework yang menggunakan UIWebView >>>>>> Alamofire Cosmos NMSSH Stripe
johnny
2
@johnny Anda harus menggandakan setiap repositori dan mencari tahu di mana mereka menggunakan UIWebView, menghapus atau mengganti kode yang menggunakannya, dan mungkin mengirimkan permintaan penarikan jika Anda ingin perubahan Anda kembali ke repositori utama. Atau, Anda bisa menunggu pengelola memperbaikinya sendiri. Seperti yang saya sebutkan sebelumnya, saat ini Apple hanya memperingatkan pengembang tentang hal ini dan tidak benar-benar menolak binari, jadi Anda punya waktu untuk menunggu pengelola hulu memperbaiki berbagai hal.
Rudedog
9

Saya akan menjawab pertanyaan saya sendiri karena saya memiliki berita tentang email ini. Google memberi tahu saya bahwa ada beberapa tiket tentang masalah ini dan mereka akan menyelesaikannya secepat mungkin. Juga hari ini aplikasi saya telah disetujui untuk AppStore jadi sepertinya hanya peringatan untuk saat ini.

Nick
sumber
Hai, bisakah Anda mengarahkan ke beberapa solusi, saya juga menghadapi masalah yang sama. Aplikasi tidak menyetujui bahkan setelah begitu mungkin hit dan uji coba ..
Dinesh Rawat
6

WKWebViewadalah penggantinya UIWebView. Jika Anda tidak memiliki UIWebViewpenggunaan dalam kode Anda selain dengan menjalankan perintah terminal di bawah ini, Anda dapat dengan mudah mengetahui perpustakaan mana yang masih menggunakan UIWebViewreferensi (jangan lewatkan. (Titik)).

Dari baris perintah, cd ke aplikasi yang diarsipkan, misalnya

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

Dan kemudian Jalankan

grep -r UIWebView

ATAU telepon

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

Ini akan memberi Anda Output untuk pencocokan kerangka kerja

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

Output untuk pertandingan perpustakaan

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

Perbarui Perpustakaan ini

pod update

lihat juga Artikel Sedang ini

Jawad Ali
sumber
gunakan "grep -r -F" UIWebView "." pertama kali "grep -r UIWebView"
Manish
1
Di Mac, gunakan "grep -r UIWebView." di jalur proyek (dengan ruang dan titik di akhir)
Vins
Sudah mengupgrade semua pod yang digunakan UIWebView(mis. AFNetworking, ZDCChat) dan juga memeriksa pod yang diperbarui karena sudah ditingkatkan untuk WKWebView tetapi masih grep -r UIWebView .memberi saya daftar pod yang sama untuk UIWebViewpertandingan dan apel juga memberi peringatan saat mengirimkan aplikasi di 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
ZDCChatAPIpod ini menggunakanuiwebview
Jawad Ali
5

Untuk proyek dengan cocoapods:

grep -r UIWebView Pods/ 
hstdt
sumber
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
sumber
2

Jika Anda membangun dengan Unity 3D , ini adalah masalah yang diketahui (diakui di changelogs), saat ini diperbaiki untuk versi 2019.3 (sedang diuji dan di-backport).

Cek tiketnya di sini https://unity3d.com/unity/whats-new/2019.2.4

Dalton Lima
sumber
2

Backstory

Pada proyek ReactJS + Cordova saya, saya mengunggah aplikasi ke toko aplikasi dan berhasil. Tak lama setelah saya menerima email yang mengutip ITMS-90809: Deprecated API Usage. Setelah berjam-jam (selama beberapa hari) penelitian dan beberapa unggahan yang gagal, saya terhubung dengan Apple menggunakan token pengembang berbayar ($ 50); mereka pada dasarnya menjawab dengan mengatakan "periksa folder modul node Anda" dan mengembalikan token saya karena mereka tidak akan membantu saya dengan kesalahan yang sangat ambigu ini.

Sebelumnya Attempts

  • Cordova yang diperbarui untuk menggunakan wkwebview-enginedan wkwebviewxhrfixplugin
  • Menggunakan grep -rarsip, sumber ios, dan seluruh sumber proyek, saya menemukan BANYAK catatan tetapi tidak ada yang benar-benar membantu.
  • memperbarui semua npmpaket
  • membersihkan dan memperbarui semua cocoapodpolong

Percobaan Terakhir

Setelah menghapus semua plugin cordova "ekstra", paket npm, dan pod, saya masih memiliki shell aplikasi tetapi masih menghadapi penolakan apel. menggunakan grep -rlagi masih ada referensi ke "facebook" yang membawa saya ke salinan lama dari FBSDK.

Larutan

FBSDKtelah ditambahkan secara manual ke target > Build Phases > Link Binary With Libraries. Ada juga yang terkait cordovaFacebook.mdi target > Build Phases > Compile Sources. Setelah menghapus file lama yang tidak terpelihara ini, saya dapat mengunggah ke itunes terhubung tanpa masalah.

Jacksonkr
sumber
2

Saya memecahkan masalah ini dengan memperbarui plugin tampilan web ionik dan menambahkan preferensi di konfigurasi.

Saya mengikuti langkah-langkah berikut:

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

2. plugin cordova tambahkan cordova-plugin-ionic-webview @ latest

3. Preferensi yang ditambahkan dalam file konfigurasi di bawah platform ios:

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

Setelah mengikuti langkah-langkah ini, aplikasi saya dikirim dan kemudian disetujui dalam peninjauan.

Munish Chechi
sumber
1

Dalam kasus saya, Firebase/Authmenggunakan API UIWebView yang tidak digunakan lagi dan versi yang saya gunakan adalah yang lebih lama. Jadi saya baru saja memperbarui Firebase/Authpod menggunakan perintah,

pod update 'Firebase/Auth'

Catatan : Untuk mengetahui kerangka kerja yang menggunakan api ini, cukup cari "UIWebView" ( cmd+ shift+ F)

ceekay
sumber
Jadi inilah yang saya lakukan dan ternyata dikatakan Menginstal FirebaseInstanceID 4.2.5 (sebelumnya 4.2.2) dan tidak menyelesaikan masalah saya
Jules Lee
1

Itu adalah proses yang panjang, tetapi saya berhasil menyelesaikan masalah yang disebutkan di atas. Izinkan saya memandu Anda melalui proses dan membagikan temuan saya. Hal pertama yang pertama, tidak perlu apa yang berhasil bagi saya akan berhasil untuk Anda. Anda hanya perlu mencoba setiap solusi yang mungkin tersedia. Saya mengikuti beberapa solusi yang diposting di berbagai utas. (Ditautkan di bawah).

  1. Ketika saya menggunakan RN 0,59, saya menemukan komentar file ini disebutkan di sini . Tidak berhasil
  2. Saya memutakhirkan ke RN 0,61, saya tidak menemukan file ini. Saya mencoba mengunggah aplikasi tetapi masih mendapat peringatan. Tidak berhasil
  3. Saya memperbarui perpustakaan berikut ke versi terbaru mereka. Tidak berfungsi react-native-device-info react-native-view
  4. Saya mencoba perintah grep yang disebutkan di sini . Ada library tertentu yang muncul, yaitu react-native-fbsdk, react-native-google-sign, react-native-gesture-handler. Jadi saya mengupgrade semuanya dan mengupload build tetapi masih mendapat peringatan. Tidak berhasil

  5. Upaya terakhir untuk memperbarui semua perpustakaan, yang saya tahu akan memakan banyak waktu. Jadi tebakan pertama saya adalah memperbarui 'react-native-firebase' ke masalah versi v6 terbaru . Namun ada beberapa masalah dengan Notifikasi tidak aktif sehingga saya tidak dapat menggunakannya. Juga mereka menyebutkan bahwa v.5.5.6 mereka bersih dan tidak memiliki UIWebViewIssues yang diberikan Anda memperbarui sdk iOS Anda ke 6.12. + Info selengkapnya di sini . Jadi ini memindahkan saya ke tebakan kedua saya yang dalam kasus saya adalah 'react-native-ux-cam'. Untungnya mereka memperbarui perpustakaan mereka untuk menghapus semua referensi UIWebView. Saya memperbarui ke versi dan BOOM terbaru, masalah telah teratasi. Saya mengirimkan aplikasi saya ke Apple dan sejauh ini tidak ada peringatan. Info lebih lanjut di sini Bekerja 💥

Semoga ini bisa membantu seseorang.

Zeerak Hameem
sumber
1

FB Sdk di atas Versi 7.16.1 mengalami masalah ini. Sebenarnya tidak ada file di folder framework.

Kesalahan ini dihapus ketika Anda membuatnya menggunakan FBSDK v7.16.1, tetapi Appstore ditolak aplikasi tersebut, karena penggunaan api yang disusutkan (UIWebView).

Saya menyelesaikannya dengan menggunakan FBSDK v7.19.2.

1) Ketika Anda membangun proyek untuk xcode, itu menunjukkan kesalahan penyebutan, shareKit tidak ditemukan. Saya menyelesaikannya dengan menyalin folder facebookSDK dari folder framework dari build saya sebelumnya (dengan fbsdk v7.16.1), ke lokasi yang sama dari folder xcode saat ini (frameworks / FacebookSDK ....)

2) Kemudian, buka proyek xcode Anda, tambahkan file dari lokasi: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) ke dalam Frameworks di Xcode.

3) Tambahkan "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" ke dalam Framework Search Paths ke dalam pengaturan build di Xcode.

4) Buka Proyek ke Terminal: ketik "grep -r" UIWebView "." , jika ini menunjukkan kecocokan dengan UIWebView, hapus dengan membuka file.

5) Jika itu menunjukkan kecocokan dalam file biner FBSDKCoreKit. Buka file di TextEdit di MAC dan Temukan dan Ganti semua "UIWebView" ke "WKWebView"

6) Simpan dan tambahkan lagi ke Frameworks di Xcode. Bangun dan dorong ke appstore.

Aqib Ahmed
sumber
0

Saat Anda membuat aplikasi Ionic, Anda dapat memilih antara Cordova atau Capacitor untuk menerapkan versi seluler asli. Sementara versi yang lebih baru menggunakan WKWebView secara otomatis, Cordova masih menggunakan API UIWebView secara langsung atau berisi referensi ke sana (Kapasitor telah diperbarui untuk menghapus referensi ini - lihat di bawah).

Setelah aplikasi dikirimkan, Apple mencari kode aplikasi untuk string "UIWebView" lalu menghasilkan peringatan pengiriman jika ditemukan. Oleh karena itu, rilis cordova-ios (pustaka Cordova iOS) di masa mendatang akan diperlukan untuk memastikan bahwa semua referensi ke API UIWebView dihapus.

pikiran lain. Saya tidak tahu apakah itu masuk akal atau mungkin secara teknis.

Pindahkan UIWebView ke plugin juga dan buat cordova-ios menggunakan ini atau beberapa plugin WKWebView. cordova-ios hanya berisi kode untuk memuat tampilan web. Secara default, versi berikutnya harus memuat Apache WKWebViewEngine (Plugin diinstal secara default pada aplikasi baru, Instruksi migrasi untuk aplikasi lama). Pengguna yang membutuhkan UIWebView, Ionic, fork atau lainnya dapat menentukan sendiri seperti sekarang.

Dengan cara itu, UIWebView tidak akan menggunakan cordova-ios dan masih cukup fleksibel seperti saat ini.

Saran Ahli
sumber
0

Saya menghadapi hal yang sama untuk aplikasi asli React. Periksa hal-hal di bawah ini:

1) Anda menggunakan modul react-native-webview daripada mengimpornya langsung dari react-native (tampilan web komunitas tidak digunakan lagi sebagai penghapusan lean core di v0.60 dan akan dihapus di rilis stabil berikutnya). ( periksa di sini )

2) Harap verifikasi juga jika Anda menggunakan pustaka pihak ketiga yang menggunakan tampilan web terbaru. Jika tidak, harap minta pengelola perpustakaan untuk meningkatkan versi react-native-webview.

3) Anda siap untuk mengunggah, Silakan tambahkan komentar jika ada yang menemukan kesulitan lagi.

Periksa di sini perubahan yang melanggar di v0.60

Cara lain untuk menghilangkan peringatan ini adalah: mulai meneruskan useWebKit = {true}, artinya, Anda menggunakan WKWebView bukan UIWebView sama sekali. Kemudian Anda dapat melakukan hal berikut untuk menyelesaikan masalah - Penggunaan API yang Tidak Berlaku Lagi.

  1. Hapus Perpustakaan / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Hapus Libraries / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Sekarang saya telah berhasil mengunggah app.ipa ke AppStore tanpa peringatan izin apa pun.

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

Jika ada yang membantu saya menjalankan pod updatedi terminal dan kemudian mengarsipkan lagi. Itu berhasil untuk saya.

Alfredo Luco G
sumber
Itu mencakup aplikasi ios tetapi tidak membantu android atau aplikasi seluler lainnya.
Jacksonkr
Ini adalah masalah khusus iOS, Android tidak memiliki masalah yang sama
slothstronaut
0

Bagi saya, skrip tidak membantu. Saya harus secara manual melalui setiap kerangka dan melihat catatan rilis, dan memperbaruinya.

green0range
sumber
0

Saya menyingkirkan ini dengan mengikuti langkah-langkah di bawah ini-

Langkah 1:

Cari "UIWebView" di direktori proyek xcode

Langkah 2:

Klik kanan (di RCTWebView.m) dan pilih "Reveal In Project Navigator"

Langkah 3:

Gulir ke bawah dan hapus hanya empat file berikut:

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

Kemudian bersihkan proyek & arsip.

NB: Jika Anda menggunakan pustaka 'react-native-community / react-native-webview', perbarui dengan versi terbaru jika tidak maka sudah selesai.

Ali Hasan
sumber
0

Untuk menemukan di mana Anda menggunakan a UIWebView, Pergi ke root proyek Anda di terminal dan gunakan perintah ini

grep -r -F "UIWebView" .

The '' sangat penting. Ini memberi tahu sistem untuk mencari string "UIWebView" di folder dan subfolder saat ini. Ini juga akan mencari perpustakaan cocoapods

Amal TS
sumber