ITMS-90809: Sử dụng API không được chấp nhận - Apple sẽ ngừng chấp nhận gửi ứng dụng sử dụng API UIWebView


91

Hôm qua, tôi đã tải ứng dụng của mình lên TestFlight và một lúc sau Apple đã gửi cho tôi cảnh báo này:

ITMS-90809: Sử dụng API không được chấp nhận - Apple sẽ ngừng chấp nhận gửi các ứng dụng sử dụng API UIWebView. Xem https://developer.apple.com/documentation/uikit/uiwebview để biết thêm thông tin.

Vấn đề là tôi không sử dụng UIWebView trong ứng dụng của mình nên tôi đã cố gắng cập nhật các nhóm của mình nhưng vẫn vậy. Có ý kiến ​​gì không?

Cập nhật

Đây là các vỏ của tôi:

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'

Cập nhật 2

Có vẻ như tôi đã tìm thấy các khuôn khổ có vấn đề.

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

Vậy bây giờ tôi có phải đợi google sửa chúng và cập nhật pod của tôi không?


Kiểm tra những Pod bạn đang sử dụng và chúng có sử dụng UIWebView hay không. Ví dụ: các SDK biểu ngữ, nhưng bạn cũng có thể muốn kiểm tra các SDK khác.
Gerharbo

1
@Gerharbo Tôi chỉ sử dụng các nhóm Firebase và tôi không thể tìm thấy UIWebView bên trong chúng.
Nick

Đối với những người sử dụng cordova + reactjs (hoặc angle), hãy xem cordova-plugin-wkwebview-enginecordova-plugin-wkwebviewxhrfix
Jacksonkr

Câu trả lời:


102

Kiểm tra xem bạn có sử dụng lớp UIWebView trong mã của mình không; nếu có, hãy thay thế việc triển khai của bạn bằng WKWebView, nếu không, cần kiểm tra các Pod của bạn.

Đi với terminal vào thư mục dự án của bạn và thực hiện lệnh: grep -r "UIWebView" .

Tất cả nhóm phù hợp phải được cập nhật. Bây giờ tôi bị mắc kẹt vì tôi đã tìm thấy UIWebView trong Google AdMob (phiên bản 7.49.0) và tôi đang chờ phiên bản mới từ Google.


22
Khi tôi nhập lệnh trong thiết bị đầu cuối, tôi nhận được cảnh báo sau "grep: warning: tìm kiếm đệ quy của stdin" và Nó không trả lại bất kỳ phản hồi nào ngay cả sau 30 phút.
Durai Amuthan.H

1
Hoạt động hoàn hảo. Tôi đã sử dụng điều này để tìm hiểu UnityAds.framework đang sử dụng UIWebView. Họ cần cập nhật lên WKWebView.
PHẦN MỀM Apollo

1
Có thể bạn sẽ nhận được kết quả như bên dưới .. Tệp nhị phân /Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate khớp. Tôi đã giải quyết nó bằng cách xóa xcworkspace của mình và cài đặt lại pod.
ShaoJen Chen

2
Bạn vẫn nhận được @WilliamNardo này chứ? Mặc dù tôi đã cập nhật trước bản phát hành được cho là để sửa lỗi: " 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), tôi vẫn nhận đượcBinary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
10623169

14
@ DuraiAmuthan.H kiểm tra xem bạn đã thêm dấu chấm / full-stop (.) Vào cuối lệnh grep. Ban đầu tôi cũng mắc lỗi tương tự
Wheelie

68

Bạn có thể kiểm tra từng khuôn khổ trong ứng dụng đã lưu trữ để xem có bất kỳ khuôn khổ nào trong số chúng tham chiếu đến không UIWebView. Từ dòng lệnh, cdđến ứng dụng đã lưu trữ, ví dụ:

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

Khi đó, hãy sử dụng nmlệnh để kết xuất các ký hiệu của ứng dụng của bạn và từng khuôn khổ của ứng dụng:

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

Điều này ít nhất sẽ cho bạn biết khung công tác nào là thủ phạm.


Cảm ơn bạn đã trả lời của bạn, nó đã giúp rất nhiều. Tôi sẽ cập nhật câu hỏi của tôi với thông tin thêm.
Nick,

Vì vậy, bây giờ điều duy nhất tôi có thể làm là đợi google giải quyết các vấn đề?
Nick

2
Có, bạn sẽ cần phải đợi (hoặc tự sửa chúng và gửi yêu cầu kéo). Tôi không chắc thời hạn chính xác để loại bỏ tất cả các mục đích sử dụng UIWebView, nhưng tôi rất nghi ngờ rằng đó sẽ là trước khi iOS 13 được phát hành vào mùa thu này.
Risedog

@Risedog làm cách nào để tôi có thể tự sửa khung hoạt động? Trước hết, cảm ơn bạn đã trả lời ... sau khi theo dõi câu trả lời của bạn, có vẻ như tôi có 4 khung công tác đang sử dụng UIWebView >>>>>> Alamofire Cosmos NMSSH Stripe
johnny

2
@johnny, bạn sẽ phải sao chép từng kho lưu trữ và tìm ra nơi họ sử dụng UIWebView, xóa hoặc thay thế mã sử dụng nó và có thể gửi yêu cầu kéo nếu bạn muốn các thay đổi của mình quay trở lại kho lưu trữ chính. Hoặc, bạn có thể chỉ cần đợi người bảo trì tự sửa nó. Như tôi đã đề cập trước đây, ngay bây giờ Apple chỉ đang cảnh báo các nhà phát triển về điều này chứ không thực sự từ chối các tệp nhị phân, vì vậy bạn có một chút thời gian để chờ các nhà bảo trì thượng nguồn sửa chữa mọi thứ.
Risedog

9

Tôi sẽ trả lời câu hỏi của riêng tôi khi tôi có tin tức về email này. Google cho tôi biết rằng có một số yêu cầu về vấn đề này và họ sẽ giải quyết vấn đề này càng sớm càng tốt. Ngoài ra hôm nay ứng dụng của tôi đã được phê duyệt cho AppStore nên có vẻ như nó chỉ là một cảnh báo trong thời điểm hiện tại.


Xin chào bạn có thể hướng đến một số giải pháp, tôi cũng đang đối mặt với vấn đề tương tự. Ứng dụng không phê duyệt ngay cả sau khi như vậy có thể bị tấn công và thử nghiệm ..
Dinesh Rawat

6

WKWebViewlà sự thay thế cho UIWebView. Nếu bạn không UIWebViewsử dụng mã của mình bằng cách thực hiện lệnh đầu cuối bên dưới, bạn có thể dễ dàng biết rằng thư viện nào vẫn đang sử dụng UIWebViewtham chiếu (đừng bỏ lỡ. (Dấu chấm)).

Từ dòng lệnh, cd đến ứng dụng đã lưu trữ, ví dụ:

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

Và sau đó Chạy

grep -r UIWebView

HOẶC gọi

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

Điều này sẽ cung cấp cho bạn Đầu ra cho khớp khung

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

Đầu ra cho khớp thư viện

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

Cập nhật các Thư viện này

pod update

cũng xem Bài báo phương tiện này


sử dụng "grep -r -F" UIWebView "." istead của "grep -r UIWebView"
Manish

1
Trong Mac, hãy sử dụng "grep -r UIWebView." trong đường dẫn dự án (có khoảng trắng và điểm ở cuối)
Vins

Đã nâng cấp tất cả các nhóm đang sử dụng UIWebView(ví dụ: AFNetworking, ZDCChat) và cũng kiểm tra các nhóm đã cập nhật vì chúng đã được nâng cấp cho WKWebView nhưng vẫn grep -r UIWebView .cung cấp cho tôi danh sách nhóm tương tự cho các UIWebViewtrận đấu và apple cũng đưa ra cảnh báo khi gửi ứng dụng trên 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

ZDCChatAPInhóm này sử dụnguiwebview
Jawad Ali

5

Đối với dự án với cocoapod:

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

Nếu bạn đang xây dựng bằng Unity 3D , đây là một vấn đề (được thừa nhận trong các bản thay đổi), nó hiện đã được khắc phục cho phiên bản 2019.3 (đang được thử nghiệm và báo cáo lại).

Kiểm tra vé tại đây https://unity3d.com/unity/whats-new/2019.2.4


2

Cốt truyện

Trong dự án ReactJS + Cordova của tôi, tôi đã tải một ứng dụng lên cửa hàng ứng dụng và nó đã thành công. Ngay sau khi tôi nhận được một email trích dẫn ITMS-90809: Deprecated API Usage. Sau nhiều giờ (trong nhiều ngày) nghiên cứu và nhiều lần tải lên không thành công, tôi đã kết nối với Apple bằng mã thông báo nhà phát triển trả phí ($ 50); Về cơ bản họ đã trả lời rằng "hãy kiểm tra thư mục mô-đun nút của bạn" và hoàn lại tiền cho tôi vì họ sẽ không hỗ trợ tôi với lỗi cực kỳ mơ hồ này.

Những nỗ lực trước đây

  • Đã cập nhật cordova để sử dụng wkwebview-enginewkwebviewxhrfixplugin
  • Sử dụng grep -rtrên kho lưu trữ, nguồn ios và toàn bộ nguồn dự án, tôi tìm thấy RẤT NHIỀU ghi chú nhưng không có gì thực sự hữu ích.
  • cập nhật tất cả npmcác gói
  • làm sạch và cập nhật tất cả cocoapodvỏ

Nỗ lực cuối cùng

Sau khi xóa tất cả các plugin, gói npm và pod "bổ sung", tôi vẫn còn lại một phần vỏ của một ứng dụng nhưng vẫn phải đối mặt với sự từ chối của quả táo. sử dụng grep -rlại vẫn có một tham chiếu đến "facebook" dẫn tôi đến một bản sao cũ của FBSDK.

Giải pháp

FBSDKđã được thêm vào theo cách thủ công target > Build Phases > Link Binary With Libraries. Cũng có một liên kết cordovaFacebook.mtrong target > Build Phases > Compile Sources. Sau khi xóa các tệp cũ, không được duy trì này, tôi có thể tải lên itunes kết nối mà không gặp sự cố.


2

Tôi đã giải quyết vấn đề này bằng cách cập nhật plugin webview ionic và thêm các tùy chọn trong cấu hình.

Tôi đã làm theo các bước sau:

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

2.cordova plugin thêm cordova-plugin-ionic-webview @ mới nhất

3.Thêm tùy chọn trong tệp cấu hình dưới nền tảng ios:

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

Sau khi làm theo các bước này, ứng dụng của tôi được gửi và sau đó được phê duyệt trong quá trình xem xét.


1

Trong trường hợp của tôi, Firebase/Authđang sử dụng API UIWebView không dùng nữa và phiên bản tôi đang sử dụng là phiên bản cũ hơn. Vì vậy, tôi vừa cập nhật Firebase/Authnhóm bằng lệnh,

pod update 'Firebase/Auth'

Lưu ý : Để tìm ra các khuôn khổ đang sử dụng api này, chỉ cần tìm kiếm "UIWebView" ( cmd+ shift+ F)


Vì vậy, đây là những gì tôi đã làm và dường như nó nói Cài đặt FirebaseInstanceID 4.2.5 (đã 4.2.2) và didnt giải quyết vấn đề của tôi
Jules Lee

1

Đó là một quá trình dài, nhưng tôi đã giải quyết được vấn đề được đề cập ở trên. Hãy để tôi hướng dẫn bạn qua quá trình và chia sẻ những phát hiện của tôi. Điều đầu tiên, không cần thiết những gì hiệu quả với tôi sẽ hiệu quả với bạn. Bạn cần thử mọi giải pháp khả thi được đưa ra. Tôi đã làm theo một số giải pháp được đăng trong các chủ đề khác nhau. (Liên kết bên dưới).

  1. Khi tôi ở trên RN 0.59, tôi thấy các tệp này nhận xét được đề cập ở đây . Không hoạt động
  2. Tôi đã nâng cấp lên RN 0,61, tôi không tìm thấy các tệp này. Tôi đã thử tải ứng dụng lên nhưng vẫn nhận được cảnh báo. Không hoạt động
  3. Tôi đã cập nhật các thư viện sau lên phiên bản mới nhất của chúng. Không hoạt động react-native-device-info react-native-view
  4. Tôi đã thử lệnh grep này được đề cập ở đây . Đã có một số thư viện nhất định xuất hiện, tức là react-native-fbsdk, react-native-google-sign, react-native-scroll-handler. Vì vậy, tôi đã nâng cấp tất cả chúng và tải lên bản dựng nhưng vẫn nhận được cảnh báo. Không hoạt động

  5. Phương án cuối cùng để cập nhật tất cả các thư viện, mà tôi biết sẽ mất rất nhiều thời gian. Vì vậy, đoán đầu tiên của tôi là để cập nhật 'phản ứng bản địa-căn cứ hỏa lực' để phiên bản mới nhất v6 vấn đề . Nhưng nó có một số vấn đề với Thông báo không được bật nên tôi không thể sử dụng nó. Ngoài ra, họ cũng đề cập rằng v.5.5.6 của họ là sạch và không có bất kỳ UIWebViewIssues nào cho phép bạn cập nhật sdk iOS của mình lên 6.12. + Thông tin thêm tại đây . Vì vậy, điều này chuyển tôi đến dự đoán thứ hai, trong trường hợp của tôi là 'react-native-ux-cam'. May mắn thay, họ đã cập nhật thư viện của mình để xóa tất cả các tham chiếu của UIWebView. Tôi đã cập nhật lên phiên bản mới nhất và BOOM, vấn đề đã được giải quyết. Tôi đã gửi ứng dụng của mình cho Apple và không có cảnh báo nào cho đến nay. Thông tin thêm tại đây Đã hoạt động 💥

Hy vọng điều này sẽ giúp ai đó.


1

FB Sdk trên Phiên bản 7.16.1 có vấn đề này. Trên thực tế, nó không có tệp nào trong thư mục khung.

Lỗi này sẽ loại bỏ khi bạn tạo nó bằng FBSDK v7.16.1, nhưng Appstore đã từ chối ứng dụng do việc sử dụng api (UIWebView) bị giảm giá trị.

Tôi giải quyết nó bằng cách sử dụng FBSDK v7.19.2.

1) Khi bạn xây dựng dự án cho xcode, nó hiển thị lỗi đề cập, không tìm thấy shareKit. Tôi giải quyết nó bằng cách sao chép thư mục facebookSDK từ thư mục khung của bản dựng trước của tôi (với fbsdk v7.16.1), vào cùng vị trí của thư mục xcode hiện tại (framework / FacebookSDK ....)

2) Sau đó, mở dự án xcode của bạn, thêm tệp từ vị trí: Frameworks / FacebookSDK / Plugins / IOS / (sharekit, corekit, loginkit) vào Frameworks trong Xcode.

3) Thêm "$ (PROJECT_DIR) / Frameworks / FacebookSDK / Plugins / iOS" vào Framework Search Paths vào cài đặt xây dựng tại Xcode.

4) Mở Project vào Terminal: gõ "grep -r" UIWebView "." , nếu điều này hiển thị bất kỳ khớp nào với UIWebView, hãy xóa nó bằng cách mở tệp.

5) Nếu nó hiển thị khớp trong tệp nhị phân của FBSDKCoreKit. Mở tệp trong TextEdit tại MAC và Tìm và Thay thế tất cả "UIWebView" thành "WKWebView"

6) Lưu nó và thêm một lần nữa vào Frameworks tại Xcode. Xây dựng và đẩy lên kho ứng dụng.


0

Khi bạn xây dựng ứng dụng Ionic, bạn có thể chọn giữa Cordova hoặc Capacitor để triển khai phiên bản di động gốc. Trong khi các phiên bản gần đây hơn sử dụng WKWebView tự động, Cordova vẫn sử dụng hoàn toàn các API UIWebView hoặc chứa các tham chiếu đến chúng (Tụ điện đã được cập nhật để xóa các tham chiếu này - xem bên dưới).

Sau khi gửi ứng dụng, Apple sẽ tìm kiếm mã của ứng dụng cho chuỗi “UIWebView”, sau đó tạo cảnh báo gửi nếu tìm thấy. Do đó, cần có bản phát hành cordova-ios (thư viện Cordova iOS) trong tương lai để đảm bảo rằng tất cả các tham chiếu đến API UIWebView đều bị xóa.

suy nghĩ khác. Tôi không biết nếu nó có ý nghĩa hoặc là có thể về mặt kỹ thuật.

Di chuyển UIWebView sang một plugin và làm cho cordova-ios sử dụng plugin này hoặc một số plugin WKWebView. cordova-ios chỉ chứa mã để tải chế độ xem web. Theo mặc định, phiên bản tiếp theo sẽ tải Apache WKWebViewEngine (Plugin được cài đặt theo mặc định trên các ứng dụng mới, Hướng dẫn di chuyển cho các ứng dụng cũ). Người dùng cần UIWebView, Ionic, fork hoặc những thứ khác có thể chỉ định UI của riêng họ như hiện tại.

Bằng cách đó, UIWebView sẽ không có trong cordova-ios và nó vẫn đủ linh hoạt như ngày nay.


0

Tôi cũng phải đối mặt với điều tương tự đối với ứng dụng gốc React. Kiểm tra những điều dưới đây:

1) Bạn đang sử dụng mô-đun react-native-webview thay vì nhập trực tiếp từ react-native (chế độ xem web cộng đồng không được dùng nữa như một loại bỏ lõi tinh gọn trong v0.60 và sẽ bị xóa trong bản phát hành ổn định tiếp theo). ( kiểm tra tại đây )

2) Cũng vui lòng xác minh xem bạn có đang sử dụng bất kỳ thư viện của bên thứ ba nào sử dụng webview hay không, nếu không, vui lòng yêu cầu người bảo trì thư viện nâng cấp phản ứng-native-webview.

3) bạn rất tốt để tải lên, Vui lòng thêm ý kiến ​​nếu bất kỳ ai thấy khó khăn hơn.

Kiểm tra tại đây các thay đổi đột phá trong v0.60

Một cách khác để loại bỏ cảnh báo này là: bắt đầu chuyển useWebKit = {true}, nghĩa là bạn đang sử dụng WKWebView không phải UIWebView. Sau đó, bạn có thể làm như sau để giải quyết vấn đề - Sử dụng API không được chấp nhận.

  1. Xóa Libraries / RNCWebView.xcodeproj / RNCUIWebView.h 、 RNCUIWebView.m 、 RNCUIWebViewManager.h 、 RNCUIWebViewManager.m
  2. Xóa Libraries / React.xcodeproj / React / Views / RCTWebView.h 、 RCTWebView.m 、 RCTWebViewManager.h 、 RCTWebViewManager.m

Bây giờ tôi đã tải app.ipa lên AppStore thành công mà không có bất kỳ cảnh báo quyền nào.

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

0

Nếu có ai giúp tôi chạy pod updatetrên thiết bị đầu cuối và sau đó lưu trữ lại. Nó ổn với tôi.


Điều đó bao gồm các ứng dụng iOS nhưng không giúp ích cho Android hoặc các ứng dụng di động khác.
Jacksonkr

Đây là một vấn đề cụ thể của iOS, Android không gặp vấn đề tương tự
slothstronaut

0

Đối với tôi, script không giúp ích gì. Tôi chỉ cần xem qua từng khuôn khổ theo cách thủ công và xem ghi chú phát hành và cập nhật chúng.


0

Tôi thoát khỏi điều này bằng cách làm theo các bước dưới đây-

Bước 1:

Tìm kiếm “UIWebView” trong thư mục dự án xcode

Bước 2:

Nhấp chuột phải (trên RCTWebView.m) và chọn “Hiển thị trong Bộ điều hướng dự án”

Bước 3:

Cuộn xuống và chỉ xóa bốn tệp sau:

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

Sau đó làm sạch dự án và kho lưu trữ.

NB: Nếu bạn sử dụng thư viện 'react-native-community / react-native-webview' thì hãy cập nhật phiên bản mới nhất nếu không thì hoàn tất.



0

Để tìm nơi bạn đang sử dụng a UIWebView, hãy chuyển đến thư mục gốc của dự án trong thiết bị đầu cuối và sử dụng lệnh này

grep -r -F "UIWebView" .

Dấu '.' là rất quan trọng. Nó yêu cầu hệ thống tìm kiếm chuỗi "UIWebView" trong thư mục hiện tại và các thư mục con. Điều này cũng sẽ tìm kiếm các thư viện cocoapods

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.