• Xcode11+ iOS13+ Unity 提包UIWebView 解决方案


    最近项目进行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最新版都进行了处理。

    点个赞再走呗。。。

    如有疑问,联系作者

    博客园:这个我不知道诶


     
  • 相关阅读:
    一起谈.NET技术,用PagePaser创建Page作为HttpHandler 狼人:
    一起谈.NET技术,Visual Studio 2010构建Web浏览器应用程序 狼人:
    一起谈.NET技术,C#中的lock关键字 狼人:
    一起谈.NET技术,OnLoad与Page_Load的差异分析 狼人:
    一起谈.NET技术,使用LINQ Expression构建Query Object 狼人:
    一起谈.NET技术,Visual Studio 2008单元测试_数据库测试 狼人:
    一起谈.NET技术,ASP.NET绑定的技巧 狼人:
    动态加载js和css
    错误:该行已经属于另一个表
    c#中转义符总结
  • 原文地址:https://www.cnblogs.com/Yongersblog/p/12530589.html
Copyright © 2020-2023  润新知