【问题标题】:How to search for any UIWebView component usage inside a current project?如何在当前项目中搜索任何 UIWebView 组件使用情况?
【发布时间】:2019-09-25 04:38:05
【问题描述】:

在提交我的最新版本时,Apple 对此警告做出了回应。

ITMS-90809:已弃用的 API 使用 - Apple 将停止接受使用 UIWebView API 的应用提交。请参阅https://developer.apple.com/documentation/uikit/uiwebview 了解更多信息。

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

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

【问题讨论】:

  • 也许您正在使用其中使用 UIWebView 的某些框架或第三方工具。尝试更新框架和工具。

标签: ios xcode uiwebview wkwebview


【解决方案1】:

嘿,我尝试在 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

在 cmets 中,有人提到 grep 是药物。

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

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

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

【讨论】:

  • 我试过 grep -r UIWebView 。找到了几个也使用 UIWebView 的二进制框架和 project.xcworkspace。我清除了所有并再次运行 grep -r UIWebView 。 - 现在它被清除了,我将一个版本上传到商店。我再次收到 ITMS-90809: Deprecated API Usage email:( 我尝试了你的建议,它的工作方式与 grep -r UIWebView 相同。任何其他建议/解决方案?请尽快回复
  • 如果您需要更多关于 UIWebView 在您的应用中的使用情况的线索,您还可以 grep 生成的可执行文件:nm YourApp.app/YourApp | grep UIWebView
【解决方案2】:

您可以在项目中使用以下命令行来查找。

$ cd yourprojectpath

$ grep -r "UIWebView" .

【讨论】:

    【解决方案3】:

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

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

    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
    

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      相关资源
      最近更新 更多