
ITMS-90809 Deprecated API Usage
iOS提交审核后,提示
ITMS-90809: Deprecated API Usage — New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).
Best regards,
The App Store Team
意思是项目中使用被废弃的UIWebView。
解决H2
直接的办法升级项目依赖的版本,但是历史项目升级的成本比较高。另外一种方式删除所有引用了UIWebView的代码。这里主要讨论后者
首先使用下面的方式来查找,最终的分发包中是否引用了UIWebView
构建xcarchive归档包
找到归档包
/Products/Application目录下的elf文件的,执行bash
nm xxx | grep UIWebView如果包含UIWebView,则会返回类似下述的内容
bash
U *OBJC_CLASS*$_UIWebView
AppStore中是要求最终的二进制包文件中不能包含UIWebView的引用,单纯的使用useWebKit 等修改运行时的行为是没有用的,我们需要在构建时避免这些包的引用被编译进去。直接的方式是在xcode或者node_moudles 中搜索UIWebView ,然后把相关的文件删除。
bash
❯ grep -r UIWebView node_modules/*node_modules/fbjs/lib/UserAgent.js: * - UIWebViewnode_modules/fbjs/lib/UserAgent.js.flow: * - UIWebViewnode_modules/jsc-android/dist/include/JSContextPrivate.h:/*! @abstract The delegate the context will use when trying to load a module. Note, this delegate will be ignored for contexts returned by UIWebView. */node_modules/metro/node_modules/fbjs/lib/UserAgent.js: * - UIWebViewnode_modules/metro/node_modules/fbjs/lib/UserAgent.js.flow: * - UIWebViewnode_modules/react-native/node_modules/fbjs/lib/UserAgent.js: * - UIWebViewnode_modules/react-native/node_modules/fbjs/lib/UserAgent.js.flow: * - UIWebViewnode_modules/react-native-webview/README.md:- [7.0.1](https://github.com/react-native-community/react-native-webview/releases/tag/v7.0.1) - Removed UIWebViewnode_modules/ua-parser-js/test/browser-test.json: "ua" : "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456 QQ/6.5.3.410 V1_IPH_SQ_6.5.3_1_APP_A Pixel/1080 Core/UIWebView NetType/WIFI Mem/26"
可能包括的地方有
- React Native的
RCTWebview - React Native WebView的
RNCUIWebView - react-native-device-info的
RNDeviceInfo
上面的方式只能查找源码中的引用,但是无法找到framework等二进制依赖文件。通过下面的脚本查找项目所有的framekwork文件,并查看它们的链接表
bash
FRAMEWORK_DIRS=$(find . -name '*.framework')for framework in $FRAMEWORK_DIRS; dofname=$(basename $framework .framework)echo $framework/$fnamenm $framework/$fname | grep UIWebdone
如果.framework 包含的静态链接文件,还有可能有.a的静态链接文件
可能包括的有
- AlipaySDK
- WeChatSDK
参考:
[1]: https://github.com/facebook/react-native/issues/26255
[2]: https://qiita.com/yum_fishing/items/95e7ff1528c6c69c00aa
评论
新的评论
上一篇
Annotation Processor
Annotation Processor主要是用来根据注解生成代码, 主要发生编译时。 Javac 、或者 apt 都支持调用预处理器来进行预处理、代码生成。 Javac默认启用了apt,除非通过 -proc:none 选项关闭。处理器的搜索路径可以通过 -processo…
下一篇
Algolia
索引 时间日期 如果根据时间来进行过滤和排序,必须将数据格式化为Unix时间戳(比如 1435735848 ) Faceting Faceting 相当于类别属性,可以用来过滤结果集。 搜索 设置可搜索属性,需要配置 searchableAttributes 匹配 algoli…
