昨天,我将我的应用程序上传到TestFlight,一段时间后,苹果向我发送了此警告:
ITMS-90809:不推荐使用的API-Apple将停止接受使用UIWebView API的应用程序的提交。有关更多信息,请参见https://developer.apple.com/documentation/uikit/uiwebview。
问题是我没有在应用程序中使用UIWebView,所以我尝试更新Pod,但还是一样。顺便说一句,这是我在TestFlight上的第三个构建,这是苹果第一次向我发送此消息。有什么想法吗?
更新
这些是我的豆荚
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
那么,现在我需要等待Google修复它们并更新我的吊舱吗?
答案 0 :(得分:25)
您可以检查已存档应用程序中的每个框架,以查看它们是否引用了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
这至少会告诉您罪魁祸首。
答案 1 :(得分:20)
检查是否在代码中使用UIWebView类;如果是,请用WKWebView替换您的实现,否则需要检查您的Pod。
使用终端进入项目文件夹并执行以下命令:
grep -r "UIWebView" .
所有匹配的广告连播必须更新。 现在,我被困住了,因为我在Google AdMob(版本7.49.0)中找到了UIWebView,并且正在等待Google的新版本。
答案 2 :(得分:8)
当我收到有关此电子邮件的新闻时,我将回答自己的问题。 Google告诉我,有几张有关此问题的票证,他们将尽快解决。 也是今天,我的应用已获得AppStore的批准,因此暂时只是警告。
答案 3 :(得分:6)
WKWebView
替代UIWebView
。如果您在代码中没有使用UIWebView
,而通过执行以下终端命令,则可以轻松地知道哪个库仍在使用UIWebView
引用(不要错过。(点)。 )。
从命令行cd到存档的应用程序,例如
cd ~/Library/Developer/Xcode/Archives/<date>/myapp.xcarchive/Products/Applications/myapp.app
然后运行
grep -r UIWebView
OR 呼叫
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
还请查看此Medium Article
答案 4 :(得分:5)
对于带有cocoapods的项目:
grep -r UIWebView Pods/
答案 5 :(得分: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:
答案 6 :(得分:3)
我通过更新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" />
按照这些步骤操作后,我的应用程序已提交并随后获得审核批准。
答案 7 :(得分:2)
背景故事
在我的ReactJS + Cordova项目中,我将一个应用程序上载到应用程序商店,并且成功。我收到一封引用ITMS-90809: Deprecated API Usage
的电子邮件后不久。经过数小时(数日)的研究和多次上传失败,我使用了付费的开发人员令牌(50美元)与Apple建立了联系;他们基本上回答说“检查您的节点模块文件夹”,并退还了我的令牌,因为他们不会帮助我解决这个极其模棱两可的错误。
以前的尝试
wkwebview-engine
和wkwebviewxhrfix
插件grep -r
,我发现了很多笔记,但没有任何真正的帮助。npm
个软件包cocoapod
个吊舱最终尝试
在删除了所有“额外的” cordova插件,npm软件包和pod之后,我剩下了一个应用程序的外壳,但仍然面临苹果的拒绝。再次使用grep -r
,仍然有对“ facebook”的引用,这使我找到了FBSDK
的旧副本。
FBSDK
已手动添加到target > Build Phases > Link Binary With Libraries
。 cordovaFacebook.m
中还有一个关联的target > Build Phases > Compile Sources
。在删除了这些旧的,未维护的文件后,我可以将其上传到iTunes,而不会出现问题。
答案 8 :(得分:2)
使用最新的Firebase版本
https://firebase.google.com/support/release-notes/ios
版本6.8.1:删除了对UIWebViewDelegate的引用,以符合App Store提交警告(#3722)。
答案 9 :(得分:1)
这是一个漫长的过程,但是我设法解决了上述问题。让我向您介绍整个过程并分享我的发现。 首先,对我有用的对您有用的没必要。您可能需要尝试这里提出的所有可能的解决方案。 我遵循了张贴在各个主题中的一些解决方案。 (在下面链接)。
我尝试了这个grep命令mentioned here。有某些库显示出来,即react-native-fbsdk,react-native-google-sign,react-native-gesture-handler。因此,我升级了所有这些文件并上传了构建,但仍然收到警告。 没用
更新所有库的最后手段,我知道这将花费很多时间。因此,我的第一个猜测是将'react-native-firebase'更新为最新的v6版本issue。但是由于Not Notification处于启用状态,因此存在一些问题,因此我无法使用它。他们还提到他们的v.5.5.6是干净的,并且没有iOSUI sdk更新为6.12的UIWebViewIssues。+更多信息here。 因此,这使我想到了第二个猜测,在我的情况下是“ react-native-ux-cam”。幸运的是,他们更新了自己的库,以删除UIWebView的所有引用。我已更新到最新版本和BOOM,问题已解决。我已将应用程序提交给Apple,到目前为止没有任何警告。更多信息here 工作?
希望这对某人有帮助。
答案 10 :(得分:1)
如果您使用Unity 3D进行构建,这是一个已知问题(已在变更日志中确认),当前已针对版本2019.3(已测试并向后移植)修复。
处检票答案 11 :(得分: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)将“ $(PROJECT_DIR)/ Frameworks / FacebookSDK / Plugins / iOS”添加到Framework Search Paths中的Xcode的构建设置中。
4)在终端中打开项目:键入“ grep -r“ UIWebView”。 ,如果显示与UIWebView匹配,请通过打开文件将其删除。
5)如果在FBSDKCoreKit的二进制文件中显示匹配项。在MAC上的TextEdit中打开文件,然后找到所有“ UIWebView”并将其替换为“ WKWebView”
6)保存并再次将其添加到Xcode的Frameworks中。建立并推送到应用商店。
答案 12 :(得分:1)
构建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中,并且像今天一样仍然足够灵活。
答案 13 :(得分:1)
在我的情况下,Firebase/Auth
使用的是不推荐使用的UIWebView API,而我使用的版本是较旧的版本。因此,我只是使用以下命令更新了Firebase/Auth
吊舱,
pod update 'Firebase/Auth'
注意:要弄清楚正在使用此api的框架,只需搜索“ UIWebView”(cmd
+ shift
+ F
)
答案 14 :(得分:0)
如果有人帮助我在终端上运行pod update
,然后再次存档。对我有用。
答案 15 :(得分:0)
对于React本机应用程序,我也面临同样的问题。检查以下内容:
1)您使用的是react-native-webview模块,而不是直接从react-native导入模块(社区Webview在v0.60中已作为精益核心删除而弃用,并将在下一个稳定版本中删除)。 (check here)
2)也请确认您是否正在使用任何使用webview的第三方库,如果不是,请请库维护人员升级react-native-webview。
3)您可以进行上传,如果有人遇到更多困难,请添加评论。
Check here the breaking changes in v0.60
摆脱此警告的另一种方法是: 开始传递useWebKit = {true},也就是说,您使用的是WKWebView而不是UIWebView。然后,您可以执行以下操作来解决问题-不推荐使用的API。
现在,我已经成功将app.ipa上传到AppStore,没有任何权限警告。
<WebView
style={{flex: 1, backgroundColor: Colors.white}}
useWebKit={true}
startInLoadingState={true}
source={{uri: 'my http url'}}
/>```
答案 16 :(得分:0)
对我来说,脚本无济于事。我只需要手动浏览每个框架并查看发行说明,然后对其进行更新。
答案 17 :(得分:0)
第1步:
在xcode项目目录中搜索“ UIWebView”
第2步:
右键单击(在RCTWebView.m上),然后选择“在Project Navigator中显示”
第3步:
向下滚动并仅删除以下四个文件:
1. RCTWebView.h
2. RCTWebView.m
3. RCTWebViewManager.h
4. RCTWebViewManager.m
然后清理项目和存档。
注意:如果您使用'react-native-community / react-native-webview'库,请使用最新版本进行更新。
答案 18 :(得分:0)
您应该安装此Cordova插件:
https://github.com/apache/cordova-plugin-wkwebview-engine
然后在iOS部分的config.xml中添加<preference name="WKWebViewOnly" value="true" />
。
然后增加版本并重新上传。
答案 19 :(得分:0)
为了找到您正在使用UIWebView
的位置,请在终端中转到项目根目录
并使用此命令
grep -r -F "UIWebView" .
'。非常重要。它告诉系统在当前文件夹和子文件夹中搜索字符串“ UIWebView” 。 这还将搜索 cocoapods 库
答案 20 :(得分:0)
更新 ios 中已弃用的 WebView
这成功解决了我的问题
cd 平台/ios grep -r UIWebView Pods/
打开 Podfile 并添加/替换 AFNetworking pod
pod 'AFNetworking', '~> 4.0'
最终在终端 pod 更新中
答案 21 :(得分:0)
根据 Apple 的新政策,不再接受使用 UIWebView 的新/旧应用。最好的解决方案是使用 WKWebView 来提高安全性。问题在于一些已弃用的旧插件,如 GoogleAd 或 GoogleVR SDK。如果你想要一个快速的解决方案,那么用 WKWebView 框架替换 UIWebView。
在终端中,在您的 iOS 项目文件夹中运行此命令:
grep -r "UIWebView"
然后你会找到所有使用 UIWebview 的文件的列表。更新任何文件以使用 WKWebView(或使用 gVim 将它们替换为 WKWebView)。如果您的 pod 库显示它具有 UIWebView。也更新 pods 文件。
就我而言,不受支持的插件是 GVR SDK,解决步骤是:
第一步:移除 UIWebView:
第 2 步:将框架添加到您的 Xcode 项目
答案 22 :(得分:0)
100% 工作解决方案 #ionic #wkwebview #webview
此处的 Webview 已被 Apple 弃用,因此请替换为 WKWebview。
按照几个简单的步骤来解决这个问题:-
1.Open Terminal and go to project path
2.cordova plugin rm cordova-plugin-ionic-webview
3.cordova plugin add cordova-plugin-ionic-webview@latest
4.open config.xml file and put below code inside <platform name="ios"> section.
<preference name="WKWebViewOnly" value="true" />
<feature name="CDVWKWebViewEngine">
<param name="ios-package" value="CDVWKWebViewEngine" />
</feature>
<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
在完成所有这一步之后,使用“ionic cordova build ios”命令再次构建并在appstore中再次提交。