美文网首页
记一次IOS提审被拒UIWebView问题

记一次IOS提审被拒UIWebView问题

作者: 北京朝阳区精神病院院长 | 来源:发表于2021-01-15 16:12 被阅读0次

前言

有一段时间没更新文章了,最近几天忙着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/

结尾

做最真实的分享,感谢大家的支持,如果疑惑评论区见,如果文章对你有帮助,留下的赞。

相关文章

网友评论

      本文标题:记一次IOS提审被拒UIWebView问题

      本文链接:https://www.haomeiwen.com/subject/gkrvaktx.html