如何在当前项目中搜索任何 UIWebView 组件使用情况?

How to search for any UIWebView component usage inside a current project?

在提交我的最新版本时,Apple 回应了这个警告。

ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.

仅供参考,我已经根据 Apple 的推荐将我项目中的所有 UIWebView 组件迁移到 WKWebView 组件,但 Apple 仍然以相同的警告响应。

除了在 Xcode 中使用搜索功能之外,是否有任何方法可以搜索仍然附加到我的项目的任何 UIWebView 元素?

嘿,我试着在 Xcode 中搜索。 一些第三方图书馆使用了它。 (以 FBSDK 为例) 我更新了这些库,但这还不够。

在下一次上传时,可怕的电子邮件再次到达。

然后我找到了这篇文章: https://medium.com/@zivchen_42755/for-me-that-wasnt-enough-it-didn-t-found-all-of-them-thats-weird-something-to-do-with-pod-i-a068d55b7fab

并且在评论中有人提到 grep 是药。

所以我尝试了grep -r UIWebView /Path/To/Project/*

并且它发现了几个也使用 UIWebView 的二进制框架。 (GoogleSignin、Crashlytics ...) 我也更新了那些。

在下一次上传时没有可怕的电子邮件 :D

您可以在您的项目中使用以下命令行找到。

$ cd yourprojectpath

$ grep -r "UIWebView" .

grep -r UIWebView 适用于源,但部分适用于第 3 方二进制文件,因为从一方面来说,它们可以包含 UIWebView 的引用、注释或字符串数​​据,而无需实际使用 API,而从另一方面来说,它们可以使用它但没有任何参考。

要检查二进制文件(应用程序、静态库或动态框架),您应该使用 nm 获取符号 table(llvm 符号 table dumper),例如:

nm staticlib.a | grep UIWebView
0000000100117c38 t +[UIWebView(SCORVCE) load]
0000000100117c30 t +[UIWebView_SCORVCE_Importer import]
0000000100117ea4 t -[UIWebView(SCORVCE) vce_delegate]
0000000100117d54 t -[UIWebView(SCORVCE) vce_setDelegate:]
000000010012880c t -[VCETrack setUsingUIWebView:]
00000001001287fc t -[VCETrack usingUIWebView]
                 U _OBJC_CLASS_$_UIWebView
0000000100640668 s _OBJC_CLASS_$_UIWebView_SCORVCE_Importer
0000000100639f88 s _OBJC_IVAR_$_VCETrack._usingUIWebView
0000000100640640 s _OBJC_METACLASS_$_UIWebView_SCORVCE_Importer
0000000100117ca0 t ___26+[UIWebView(SCORVCE) load]_block_invoke

对于框架,您应该对其二进制文件执行相同的操作:

nm MyFramework.framework/MyFramework | grep UIWebView

最后,为了确保应用程序不使用 UIWebView,您应该制作一个存档,然后找到您的应用程序文件 (YourApp.app) 和 运行 里面的下一个脚本:

# Check the app with static libraries
echo "YourApp"
nm YourApp | grep UIWebView

# Check dynamic frameworks
for framework in Frameworks/*.framework; do
  fname=$(basename $framework .framework)
  echo $fname".framework"
  nm $framework/$fname | grep UIWebView
done