iOS Unity 提包UIWebView 解决方案

3 篇文章 0 订阅

最近项目进行iOS的SDK更新,因为提审包时,Apple邮件提示UIwebview即将不能使用,2020年4月后包含UIwebview的新应用不能上传,老应用九月必须更新。

定位问题

于是我将项目所有用到UIWebView的地方进行了更换,
于是进行下述步骤:
1.屏蔽移除项目所以三方SDK,直接入自己开发的SDK和代码
提审有警告
2.屏蔽移除项目所以三方SDK,将项目自己开发的SDK和代码UIWebView进行更新去除
提审有警告
定位到问题,项目本身就有,不全在SDK。

查找发现unity存在UIWebView的使用,于是找到解决方案:

unity libiPhone-lib.a 里面有UIWebView的引用,虽然项目没用到

解决:

将libiPhone-lib.a拆开,将里面的引用更新,再合并。

!!!!!!!!!!!!!
PS:最终建议,最好升级项目unity版本,别直接改unity的东西,这只是解决UIWebView的一种方案,但改动unity的东西会存在风险,比如破坏其他unity功能。
!!!!!!!!!!!!!
比如:Application.OpenURL(),做了如下处理后,这个方法iOS将无法生效,需要自定义实现相关功能

具体实现

2.1 构建URLUtility.o

(1)新建文件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 *c_str(void);
};
}

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;
UIApplication *app = [UIApplication sharedApplication];
NSString *urlStr = [NSString stringWithUTF8String:(char *)arg2];
NSURL *url = [NSURL URLWithString:urlStr];
[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];
[app openURL:url];

}

(2)使用脚本将URLUtility.mm生成对应的URLUtility.o

打开终端,使用cd命令先去 URLUtility.mm 对应的目录,执行下述脚本

clang -c URLUtility.mm -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk

意思是使用Xcode编译 URLUtility.mm生成arm64架构支持的URLUtility.o(如果项目包含其他的架构,可在执行脚本生成)

在这里插入图片描述

2.2 处理libiPhone-lib.a

找到自己即将打到包力的libiPhone-lib.a,使用脚本查看包含的架构,

lipo -info libiPhone-lib.a

在这里插入图片描述

比如我们就是用到了 armv7 arm64 两种架构

(1)拆分libiPhone-lib.a

现在分别将这个libiPhone-lib.a 拆分为对应架构的libiPhone-lib.a并放到对应架构URLUtility.o所在的文件夹

lipo libiPhone-lib.a -thin armv7 -output /Users/admin/URLUtility7/libiPhone-lib7.a
lipo libiPhone-lib.a -thin arm64 -output /Users/admin/URLUtility64/libiPhone-lib64.a

(2)替换libiPhone-lib.a里的URLUtility.o

将各自架构libiPhone-lib.a里的URLUtility.o替换为我们生成的。
ar -d 是移除,ar -q是添加

ar -d /Users/admin/URLUtility7/libiPhone-lib7.a URLUtility.o
ar -q /Users/admin/URLUtility7/libiPhone-lib7.a /Users/admin/URLUtility7/URLUtility.o

ar -d /Users/admin/URLUtility64/libiPhone-lib64.a URLUtility.o
ar -q /Users/admin/URLUtility64/libiPhone-lib64.a /Users/admin/URLUtility64/URLUtility.o

在这里插入图片描述

如果出现这样的提示,就说明对应架构里不包含URLUtility.o,可以跳过,直接进行下一步。

(3)合并libiPhone-lib.a

现在两个架构的libiPhone已经是符合标准的,,我们再做最后一步,就是将两个架构的libiPhone合成为一个

lipo -create /Users/admin/URLUtility7/libiPhone-lib7.a /Users/admin/URLUtility64/libiPhone-lib64.a -output libiPhone-lib.a 

做完这部,再上传提审,没有警告邮件。

3.其他三方SDK,进行更新,一般的SDK最新版都进行了处理。

联系作者

期待你的点赞和关注!如有疑问,联系作者。
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个我知道诶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值