当前位置: 首页 > news >正文

Unity iOS 删除 UIWebView

Unity iOS 删除 UIWebView

https://www.colabug.com/2020/0113/6839873/amp/

 

 

 

CoLaBug.com Exit Reader Mode

Unity iOS 删除 UIWebView

狂飙

4月 ago

介绍

 

苹果在审核拒约时给出了以下信息:

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.

但是项目内并未使用 UIWebView API,尝试使用 Unity 构建一个空工程上传到 QuickSDK
进行预先检查,发现依然存在 UIWebView API 调用。

搜索后发现 Unity 已在 2017.4, 2018.4, 2019.2, 2019.3, 2020.1 中修复,但是旧版本如 Unity 5.6 就不管了:

  • Unity Issue Tracker – [iOS] Apple throws Deprecated API Usage warning for using UIWebView when submitting Builds to the App Store Connect

环境

  • Unity 5.6.6f2
  • macOS 10.14.6
  • Xcode 11.0

解决方案

虽然 Unity 官方不准备在旧版本修复此 Bug,但是在问题描述中阐述了具体细节:在 PlatformDependent/iPhonePlayer/URLUtility.mm
中使用 UIWebView 处理游戏内链接。

搜索后找到了一个现成的解决方案,经过测试后可用:

  • libiPhone-lib.a去掉WebViewController – 简书

下面记录一下实践过程并补充一些相关信息。

保存源文件

首先将以下内容保存为 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];
}

编译

原文只使用了 arm64 架构,实际上通过 file 命令查看 libiPhone-lib.a
是三个架构:

$ file libiPhone-lib.a
libiPhone-lib.a: Mach-O universal binary with 3 architectures: [arm_v7:current ar archive] [arm_v7s]
libiPhone-lib.a (for architecture armv7):    current ar archive
libiPhone-lib.a (for architecture arm64):    current ar archive
libiPhone-lib.a (for architecture armv7s):    current ar archive

因此在编译时建议三种架构都编译,否则在替换时会提示缺失符号问题。

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

执行完当前目录会生成 URLUtility.o
目标文件。

注意: -isysroot
指定的 SDK 路径一定是当前工程使用的 Xcode 版本,特别是当机器上存在多个 Xcode 版本时要注意。

替换

首先要明确, libiPhone-lib.a
是一个存档文件,内部保存了许多目标文件,可以使用 ar -tv libiPhone-lib.a
显示内容。

# 删除原有的 URLUtility.o
ar -d libiPhone-lib.a URLUtility.o
# 在文件最后增加 URLUtility.o
ar -q libiPhone-lib.a URLUtility.o

ar
命令的具体使用方法可以通过执行 man ar
查看。

建议

可以将以上步骤放到构建流程里,每次出包的时候自动将 Xcode 工程内的 libiPhone-lib.a
替换。

Categories: 综合开发

Tags: UIWebView, Unity

CoLaBug.com

Back to top

相关文章:

  • Jenkins 自己使用
  • Jenkins Pipeline语法(中)
  • Unity小技巧——设置代码编译时机
  • Unity 使用遇到的不足问题
  • 在eclipse中安装groovy插件详细步骤
  • Groovy 语言快速入门
  • Groovy常用语法总结
  • unity201 Mac15 bug
  • UE4扯淡大杂烩第二季
  • 《Gpu Gems》《Gpu Pro》《Gpu Zen》系列读书笔记
  • 【python3-4】Jenkins pipline集成参数自动化执行python脚本
  • Unity打包AssetBundle自动分析资源依赖关系(包括UGUI图集打包)
  • [Unity]AssetBundle资源更新以及多线程下载
  • 在AssetBundle打包的时候,我们是一个文件一个AssetBundle,基本不存在冗余的情况了。但这种做法是否可取?UWA有什么建议?
  • Unity技术分享连载(59)|AssetBundle粒度规划|Android上的多线程渲染...
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 30天自制操作系统-2
  • css的样式优先级
  • echarts花样作死的坑
  • exports和module.exports
  • github指令
  • JavaScript设计模式系列一:工厂模式
  • JavaScript异步流程控制的前世今生
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Laravel5.4 Queues队列学习
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python进阶细节
  • Redis 中的布隆过滤器
  • Spark学习笔记之相关记录
  • SQL 难点解决:记录的引用
  • Web标准制定过程
  • 开发基于以太坊智能合约的DApp
  • 面试遇到的一些题
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 微服务核心架构梳理
  • 译米田引理
  • 用jquery写贪吃蛇
  • 用Visual Studio开发以太坊智能合约
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • # 安徽锐锋科技IDMS系统简介
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (笔试题)分解质因式
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三)mysql_MYSQL(三)
  • (一)认识微服务
  • (转)jQuery 基础
  • (转)关于pipe()的详细解析
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .netcore 获取appsettings
  • .NET构架之我见
  • ::什么意思