ITMS-90809:不推荐使用的API-Apple将停止接受使用UIWebView API的应用程序的提交


91

昨天,我将我的应用程序上传到TestFlight,一段时间后,Apple向我发送了此警告:

ITMS-90809:不推荐使用的API-Apple将停止接受使用UIWebView API的应用程序的提交。有关更多信息,请参见https://developer.apple.com/documentation/uikit/uiwebview

事实是我没有在应用程序中使用UIWebView,所以我尝试更新Pod,但还是一样。有任何想法吗?

更新资料

这些是我的豆荚:

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'

更新2

好像我找到了问题的框架。

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

所以,现在我必须等待谷歌修复它们并更新我的吊舱吗?


检查您正在使用的Pod,以及它们是否使用UIWebView。例如横幅SDK,但您可能还需要检查其他SDK。
Gerharbo

1
@ Gerharbo我仅使用Firebase吊舱,但在其中找不到UIWebView。
尼克,

对于使用cordova + reactjs(或角度)的用户,请查看cordova-plugin-wkwebview-enginecordova-plugin-wkwebviewxhrfix
Jacksonkr,

Answers:


102

检查是否在代码中使用UIWebView类;如果是,请用WKWebView替换您的实现,否则需要检查您的Pod。

与终端一起进入您的项目文件夹并执行命令: grep -r "UIWebView" .

所有匹配的广告连播都必须更新。现在我被困住了,因为我在Google AdMob(版本7.49.0)中找到了UIWebView,并且正在等待Google的新版本。


22
在终端中输入命令时,出现以下警告“ grep:warning:stdin的递归搜索”,即使30分钟后它也没有返回任何响应。
Durai Amuthan.H

1
工作完美。我用它来发现UnityAds.framework正在使用UIWebView。他们需要更新到WKWebView。
阿波罗软件

1
也许您会得到如下所示的结果。二进制文件/Users/xxx/xxxx/xxxx.xcworkspace/xcuserdata/xxx.xcuserdatad/UserInterfaceState.xcuserstate匹配。我通过删除xcworkspace和pod安装再次解决了该问题。
陈少仁

2
你还得到这个@WilliamNardo吗?即使我已经更新了应该发布的版本以进行修复:“ 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),我仍然得到Binary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
10623169

14
@ DuraiAmuthan.H检查是否在grep命令的末尾添加了句点/句号(。)。我最初犯了同样的错误
Wheelie,

68

您可以检查已存档应用程序中的每个框架,以查看是否引用了这些框架UIWebView。从命令行cd到存档的应用程序,例如:

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

nm到达那里后,使用命令转储应用程序和每个应用程序框架的符号:

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

这至少会告诉您哪个框架是元凶。


谢谢您的回答,对您有很大帮助。我将用更多信息更新我的问题。
尼克,

所以,现在我唯一能做的就是等待谷歌解决问题?
尼克,

2
是的,您将需要等待(或自行修复它们并提交请求请求)。我不确定要删除所有使用的确切截止日期是什么UIWebView,但是我非常怀疑会在今年秋天发布iOS 13之前。
Rudedog

@Rudedog我如何固定框架能自我工作?首先,感谢您的回答...遵循您的回答后,看来我有4个使用UIWebView的框架>>>>>> Alamofire Cosmos NMSSH Stripe
johnny

2
@johnny,您将必须克隆每个存储库,并找出它们在哪里使用UIWebView,删除或替换使用它的代码,如果希望将更改返回到主存储库,则可能会提交拉取请求。或者,您可以等待维护人员自己修复它。如前所述,Apple现在只是在警告开发人员有关此操作,而实际上并未拒绝二进制文件,因此您有一些时间等待上游维护人员修复问题。
Rudedog

9

当我收到有关此电子邮件的新闻时,我将回答我自己的问题。Google告诉我,有几张有关此问题的票证,他们将尽快解决。也是今天,我的应用已获得AppStore的批准,因此暂时只是警告。


您好,您可以直接寻求解决方案吗,我也面临同样的问题。应用程序是不是批准后也可能会命中和试验..
迪内希拉瓦特

6

WKWebView是的替代品UIWebView。如果您UIWebView的代码中没有使用代码,那么通过执行以下终端命令,您可以轻松了解哪个库仍在使用UIWebView引用(不要错过。(点))。

从命令行,cd到存档的应用程序,例如

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

然后运行

grep -r UIWebView

致电

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

这将为您提供框架匹配的输出

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

库匹配的输出

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

更新这些库

pod update

也查看这篇中篇文章


使用“ grep -r -F” UIWebView“。” 代替“ grep -r UIWebView”
Manish

1
在Mac中,使用“ grep -r UIWebView”。在项目路径中(最后有空格和点)
Vins

已经升级了所有正在使用的Pod UIWebView(例如AFNetworking,ZDCChat),并检查了已更新的Pod,因为它们已经升级为WKWebView,但仍为grep -r UIWebView .我提供了UIWebView匹配的Pod列表,并且Apple在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

ZDCChatAPI这个吊舱使用uiwebview
贾瓦德·阿里

5

对于带有可可足类的项目:

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

背景故事

在我的ReactJS + Cordova项目中,我将一个应用程序上载到应用程序商店,并且成功。在我收到一封电子邮件后不久ITMS-90809: Deprecated API Usage。经过数小时(数日)的研究和多次上传失败,我使用了付费的开发人员令牌(50美元)与Apple建立了联系;他们基本上回答说“检查您的节点模块文件夹”,并退还了我的令牌,因为他们不会帮助我解决这个非常模棱两可的错误。

以前的尝试

  • 更新了cordova以使用wkwebview-enginewkwebviewxhrfix插件
  • 使用grep -r的归档,IOS源,以及整个项目的来源,我发现的笔记很多,但没有真正的帮助。
  • 更新了所有npm软件包
  • 清理并更新所有cocoapod吊舱

最终尝试

删除所有“额外的” cordova插件,npm软件包和pods之后,我剩下了一个应用程序的外壳,但仍然面对苹果的拒绝。grep -r再次使用时,仍然有对“ facebook”的引用,这导致我找到的旧副本FBSDK

FBSDK已手动添加到中target > Build Phases > Link Binary With Libraries。还有一个相关的cordovaFacebook.mtarget > Build Phases > Compile Sources。删除了这些旧的,未维护的文件后,我可以将其上传到itunes,而不会出现问题。


2

我通过更新ionic webview插件并在配置中添加首选项解决了此问题。

我遵循以下步骤:

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

2.cordova插件添加cordova-plugin-ionic-webview @ latest

3.在ios平台下的配置文件中添加了首选项:

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

完成这些步骤后,我的应用程序便提交了,并随后获得了审核批准。


1

就我而言,我Firebase/Auth使用的是不推荐使用的UIWebView API,而我使用的版本是一个较旧的版本。所以我只是Firebase/Auth使用命令更新了pod

pod update 'Firebase/Auth'

注意:要弄清楚正在使用此api的框架,只需搜索“ UIWebView”(cmd+ shift+ F


所以这就是我所做的,显然它说安装FirebaseInstanceID 4.2.5(是4.2.2)并没有解决我的问题
Jules Lee

1

这是一个漫长的过程,但是我设法解决了上述问题。让我向您介绍整个过程并分享我的发现。首先,对我有用的对您有用的是不必要的。您可能需要尝试这里提出的所有可能的解决方案。我遵循了张贴在各个主题中的一些解决方案。(链接如下)。

  1. 当我使用RN 0.59时,我发现这里提到了这些文件注释。没工作
  2. 我升级到RN 0.61,但没有找到这些文件。我尝试上传应用程序,但仍然收到警告。没工作
  3. 我将以下库更新为最新版本。没有工作 react-native-device-info react-native-view
  4. 我尝试了这里提到的grep命令。有某些库显示出来,例如react-native-fbsdk,react-native-google-sign,react-native-gesture-handler。因此,我升级了所有这些文件并上传了构建,但仍然收到警告。没工作

  5. 更新所有库的最后手段,我知道这将花费很多时间。所以我的第一个猜测是,更新“的反应,本机火力点”到最新版本的V6发行。但是由于Not Notification处于启用状态,因此存在一些问题,因此我无法使用它。此外,他们提到,他们v.5.5.6是干净的,没有任何UIWebViewIssues给你更新iOS SDK 6.12。+更多的信息在这里。因此,这使我想到了第二个猜测,在我的情况下是“ react-native-ux-cam”。幸运的是,他们更新了自己的库,以删除UIWebView的所有引用。我已更新到最新版本和BOOM,问题已解决。我已将应用程序提交给Apple,到目前为止没有任何警告。更多信息在这里 工作ed

希望这对某人有帮助。


1

7.16.1版以上的FB Sdk就有此问题。实际上,它在Framework文件夹中没有文件。

使用FBSDK v7.16.1进行构建时,此错误已消除,但由于api使用率下降(UIWebView),Appstore被拒绝了。

我通过使用FBSDK v7.19.2来解决它。

1)当您为xcode构建项目时,它显示提及错误,找不到shareKit。我通过将我之前构建的framework文件夹(带有fbsdk v7.16.1)中的facebookSDK文件夹复制到当前xcode文件夹的相同位置(frameworks / FacebookSDK ...)来解决该问题。

2)然后,打开xcode项目,从以下位置添加文件:Frameworks / FacebookSDK / Plugins / IOS /(sharekit,corekit,loginkit)到Xcode的Frameworks中。

3)在框架搜索路径中的Xcode的构建设置中添加“ $(PROJECT_DIR)/ Frameworks / FacebookSDK / Plugins / iOS”。

4)在终端中打开项目:键入“ grep -r“ UIWebView”。,如果显示与UIWebView匹配,请通过打开文件将其删除。

5)如果在FBSDKCoreKit的二进制文件中显示匹配项。在MAC上的TextEdit中打开文件,然后找到所有“ UIWebView”并将其替换为“ WKWebView”

6)保存并再次将其添加到Xcode的Frameworks中。建立并推送到Appstore。


0

构建Ionic应用程序时,可以在Cordova或Capacitor之间进行选择,以部署本机移动版本。虽然较新的版本会自动使用WKWebView,但Cordova仍将直接使用UIWebView API或包含对它们的引用(已对电容器进行了更新,以删除这些引用–参见下文)。

提交应用程序后,Apple会在应用程序的代码中搜索“ UIWebView”字符串,如果发现,则会生成一个提交警告。因此,将需要cordova-ios的将来版本(Cordova iOS库)以确保删除对UIWebView API的所有引用。

另一个想法。我不知道这是否有意义或在技术上是否可行。

也将UIWebView移至插件,并使cordova-ios使用此插件或某些WKWebView插件。cordova-ios仅包含加载Web视图的代码。默认情况下,下一版本应加载Apache WKWebViewEngine(默认情况下在新应用程序上安装插件,旧应用程序的迁移说明)。需要UIWebView,Ionic,叉子或其他工具的用户可以像现在这样指定自己的工具。

这样,没有UIWebView将出现在cordova-ios中,并且像今天一样仍然足够灵活。


0

对于React本机应用程序,我也面临同样的问题。检查以下内容:

1)您使用的是react-native-webview模块,而不是直接从react-native导入(社区Webview在v0.60中已作为精益核心移除而弃用,并将在下一个稳定版本中移除)。(在这里检查

2)还请验证您是否正在使用任何使用webview的第三方库,如果不是,请请库维护人员升级react-native-webview。

3)您可以进行上传了,如果有人发现其他问题,请添加评论。

在此处查看v0.60中的重大更改

消除此警告的另一种方法是:开始传递useWebKit = {true},也就是说,您使用的是WKWebView而不是UIWebView。然后,您可以执行以下操作来解决问题-不建议使用的API使用情况。

  1. 删除库/RNCWebView.xcodeproj/RNCUIWebView.h、RNCUIWebView.m、RNCUIWebViewManager.h、RNCUIWebViewManager.m
  2. 删除库/React.xcodeproj/React/Views/RCTWebView.h、RCTWebView.m、RCTWebViewManager.h、RCTWebViewManager.m

现在,我已经成功将app.ipa上传到AppStore,没有任何权限警告。

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

0

如果有人帮助我pod update在终端上运行,然后再次存档。这对我行得通。


这涵盖了ios应用,但不适用于android或其他移动应用。
Jacksonkr

这是特定于iOS的问题,Android没有相同的问题
slothstronaut

0

对我来说,脚本无济于事。我只需要手动浏览每个框架并查看发行说明,然后对其进行更新。


0

通过执行以下步骤,我摆脱了这种情况-

步骤1:

在xcode项目目录中搜索“ UIWebView”

第2步:

右键单击(在RCTWebView.m上),然后选择“在Project Navigator中显示”

第三步:

向下滚动并仅删除以下四个文件:

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

然后清理项目并存档。

注意:如果您使用“ react-native-community / react-native-webview”库,请使用最新版本进行更新,否则就完成了。



0

为了找到您正在使用的位置UIWebView,请转到终端中的项目根目录并使用此命令

grep -r -F "UIWebView" .

“” 非常重要。它告诉系统在当前文件夹和子文件夹中搜索字符串“ UIWebView”。这还将搜索cocoapods

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.