修改XUPorter兼容UnityFramework

XUPorter是unity导出xcode工程的自动化插件,因为后期Unity官方已经将相关API集成到引擎里,作者已经不再维护。

但对于大公司项目的自动化流程,短时间内更换一套API也是不太划算的,这里只记录一下修改XUPorter以兼容Unity2019.3之后导出xcode工程的UnityFramework形式。

其实很简单,先直接上代码,后面再讲原理。

//XCProject.cs中 Line 337
public PBXDictionary AddFile( string filePath, PBXGroup parent = null, string tree = "SOURCE_ROOT", bool createBuildFiles = true, bool weak = false )
{

//.....
    PBXNativeTarget mainTarget = GetNativeTarget("Unity-iPhone");//获取主工程Target
    ArrayList mainDic = (ArrayList)mainTarget.data["buildPhases"];//获取主工程的包含项目
//.....


    //在switch中各种资源下,加入剔除操作即可
    if(mainDic.Contains(currentObject.Key))
    {    
         Debug.Log("currentObject is: " + currentObject.Key + " " + filePath);
         continue;
    }
}

这样生成的xcode工程就不会把咱们自己的资源、依赖、桥接等文件加入到主工程了。

着急用的朋友可以直接拿走,没事的朋友可以听我唠叨一下。

=========================================================================

unity官方推出这种结构的意图我其实还不太明确,从CP角度来讲其实没什么变化,仅仅是把所有代码、资源、数据都放在了UnityFramework里,之前的主工程只是个入口,相当于Launcher,只做一件事就是加载UnityFramework。

对于老式的SDK接入方式也没有什么影响,毕竟是渠道方把SDK的东西都给到咱们这边对接,这些都可以用XUPorter来处理。

但对于Pod管理的SDK就需要修改下配置了,SDK的技术同学可以参考下,把Framework pod进UnityFramework里即可,也很简单:

target 'UnityFramework' do
      inherit! :search_paths
      
      pod 'XXXFramework', 'versionNum'

end

另外,有的朋友肯定会问,如果都和以前一样放到主工程行不行,我觉得行,但是会很麻烦。

首先就要处理Classes及c# Native的target。这些都是Unity导出的c#代码和相关oc类,unity每次导出都会自动修改到UnityFramework下,我们再将他们都改成主工程就很无意义。

我们就默许它们是UnityFramework里的,遵循unity的意思。

c#在Framework里,这就限制了桥接文件也必须在Framework里,而桥接文件一般也会引用第三方SDK的代码,也就形成了:C#、桥接oc、sdk都必须编译到UnityFramework的限制。

至此我的趟坑记录形成了,分享给各位遇到的朋友,欢迎大家评论转发!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值