記一次IOS提審被拒UIWebView問題

前言

有一段時間沒更新文章了,最近幾天忙著IOS sdk接入提審過審工作,此文記錄一次提審被拒的棘手問題,我不以專業的IOS開發者,來記錄最有效的解決方案。

GIF.gif

拒審問題描述

這幾天提審ipa包,被拒審,內容如下 :

ITMS90809:

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)

翻譯過來:

不推薦使用這個API。新應用程序,不接受使用UIWebView

使用WKWebView可以提高安全性和可靠性。

更多了解需要參考蘋果開發者鏈接


開發環境

  • Xcode 12.2

  • Unity 2018.2.0f2 破解版 (有UIWebView引用)

解決問題方案

IOS接入SDK中我并沒有用到過UIWebView,SDK提供方也說沒有用過。很好奇這東西怎么來的,于是乎,查了下Google搜索怎么查看工程是否引用到UIWebView這東西,命令如下(后面有一個點 ,一定要注意):

grep   -r   UIWebView   .
終端命名展示.png

進入工程文件夾,輸入如上命令,可知Libraries文件夾下的libiPhone-lib.a 中用到過UIWebView。提審的是一個游戲的應用,也就是用Unity導出Xcode工程 ,接入SDK完成 提審的流程。

libiPhone-lib.a是什么呢? libiPhone-lib.a 文件是 Unity Runtime 靜態庫。遇到不知道怎么處理的問題,Google搜索嘍。Goolge上面的知識足夠解決我們開發中80%問題。

在查閱文章的時候發現了國內的方法大同小異沒什么區別,基于查閱的文章做三個解決方案(別人寫好的東西),針對三個方案具體的實現,進行可行性分析,說說我是怎么解決UIWebView的問題。

方案 一 (無效)

思路就是剝離libiPhone-lib.a中UIWebView,替換新的引用。代碼如下:

  • 指定位置新建一個同名URLUtility.mm文件
#include <iostream>
#import <UIKit/UIKit.h>

using namespace std;
namespace core {
    template <class type>
    class StringStorageDefault {};
    template <class type,class type2>
    class basic_string {
    public:
        char * str;
        basic_string( char* arg){
            str = arg;
        }
    };
}

void OpenURLInGame(core::basic_string< char,core::StringStorageDefault<char> > const&arg){}

void OpenURL(core::basic_string<char,core::StringStorageDefault<char> >const &arg){
    const void *arg2 = arg.str;
    UIApplication *app = [UIApplication sharedApplication];
    NSString *urlStr = [NSString stringWithUTF8String:(char *)arg2];
    NSURL *url = [NSURL URLWithString:urlStr];
    if (@available(iOS 10.0, *)) {
        [app openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:nil];
    } else {
        [app openURL:url];
    }
}


void OpenURL(std::string const&arg){
    UIApplication *app = [UIApplication sharedApplication];
    NSString *urlStr = [NSString stringWithUTF8String:arg.c_str()];
    NSURL *url = [NSURL URLWithString:urlStr];
    if (@available(iOS 10.0, *)) {
        [app openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:nil];
    } else {
        [app openURL:url];
    }
}
  • 使用lipo查看libiPhone-lib.a文件中包含的架構

  • 使用URLUtility.mm生成對應架構下URLUtility.o文件

  • 分離libiPhone-lib.a中各架構文件

  • 移除對應架構中的原有URLUtility.o文件

  • 將新生成的URLUtility.o文件添加到對應架構的.a中

  • 將各架構的.a文件合并生成新的libiPhone-lib.a

因為這個方案無效,我只展示思路和邏輯,要是有興趣的可以看下參考文章標題去鏈接里看

方案 二(無效)

思路跟方案一沒區別,為什么說沒區別呢,就是上面步驟 用Python腳本自動化處理了,方案一無效 同理方案二依舊是無效的

方案 三(親測有效)

升級Unity版本。這思路也是網上找的,我就是做了具體的實踐操作。題外話,關于Unity常識性知識,假如我們是在2018版本的Unity進行開發程序,那在2019的Unity是運行不起來的 ,除非是大改代碼。(向下不兼容,這一點很蛋疼)

2020年4月后,蘋果提審ipa文件如包含UIWebView相關引用,會拒審核。因為我們用的Unity開發的,這個問題歸根結底還是Unity的鍋。Unity在最新的版本中修復了UIWebView相關引用。

當前我用的Unity2018版,官方的解釋2019和2018部分版本修復了UIWebView相關引用(注意部分版本),這就蛋疼了。好多文章建議了18.xxx版本 ,我試過好起碼2個版本都沒效果。

一個個試不是高效方案,于是乎科學上網去國外的Unity官網查找版本更新日志,最后查到2018.4.10f1這個版本,經過下載實測沒有問題。國內域名Unity官網下載2018.4.10f1沒有試過。

就此問題解決,期間感謝黃亮大佬的技術支持。放幾張截圖 供參考,執行命令沒有看到引用UIWebView 的地方

image.png
image.png

參考文章

https://fusugz.github.io/2020/05/14/unity-uiwebview/

結尾

做最真實的分享,感謝大家的支持,如果疑惑評論區見,如果文章對你有幫助,留下的贊。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。