Unity编译至Xcode工程后自动添加文件和库的方法

XUPorter使用说明 概述 在打包IOS的过程中,针对需要接入的不同SDK,包括源码、需要的库和框架等,若不使用一些辅助工具的话,需要在导出的IOS工程中手动进行,针对不同SDK的依赖库的添加等操作,路径设置等操作,会消耗大量的时间,于是需要一套自动化添加IOS端SDK相关配置的方案 Unity的支持 Unity中加入了[PostProcessBuild]标签,通过该标签标注的函数,在build player结束后会自... 阅读详情

XUPorter项目Github链接

为什么想要自动添加

由于Unity是全平台的游戏开发环境,在开发中针对特定平台的特定功能时,很难避免根据对象平台的不同而引入不同的依赖。包括源码,需要的库和框架等。在使用各种插件后这种情况愈发严重:比如想加入内购功能,StroreKit.framework必不可少,而且也需要相应的处理代码。按照一般的Unity插件开发流程,在完成.cs的接口声明和Unity侧的调用实现后,最重要的当然是在iOS native侧完成实现。而在以前,包括依赖库和所有源码文件,都只有在Unity生成Xcode工程之后,再手动添加。如果工程小依赖少的话花不了太多时间,但是如果项目很大,很可能折腾一次就要十来分钟,严重影响了工作效率,必须加以解决。

怎么办

Unity开发团队也意识到了这个问题,在Unity编译的最后加入了一个脚本调用的命令,会自动搜索Editor文件夹下的PostprocessBuildPlayer,并进行调用,在该文件中可以自己加入脚本来向Xcode中添加库和文件。关于PostprocessBuildPlayer的详细信息,可以参看官方文档,关于向Xcode中添加文件或库,gonzoua的xcs也许是不错的选择。但是似乎xcs只能针对Xcode3来添加,在Xcode4中,主工程文件的结构发生了改变,导致xcs失效,而这个项目也迟迟没有更新(也许有时间我会考虑接手继续这个项目,但肯定不是现在...)。因此不得不打其他主意。

在Unity3.5中,加入了一个很棒的标签——[PostProcessBuild],被该标签标注的函数将自动在build player后被调用,这为大家提供了一个不需要用脚本和命令行就能添加或修改编译得到的工程的绝好的入口。darktable用python实现了一个Xcode4工程文件读写的接口Mod PBXProj,但是对于Unity来说,更需要的是C#的实现。Cariola完成了一部分实现,但是存在一些错误和不太好用的地方,代码也很乱。我在其基础上进行了一些改进和整理。但是因为变动的还是比较大,很难merge回去,所以决定自己开一个项目来继续推进这个项目。

XUPorter

我把它叫做XUPorter,a dependency porter from Unity to Xcode。XUPorter可以读取Xcode工程文件并进行解析(再次感谢darktable的工作),之后在Unity工程的Assets目录下寻找所有的.projmods文件,并根据文件内容向工程中添加文件或库。

使用方法

将Github项目中的所有文件copy到Unity工程文件夹下的/Assets/Editor目录中,XUPorter使用一个改良版的MiniJSON来进行。如果你的项目中已经在使用这个MiniJSON了的话,可以直接将XUPorter文件夹下的MiniJSON文件夹删掉;如果不一样的话,你可以选择其中一个重构一下或者加上命名空间来解决类名冲突。接下来,Mods文件夹下是示例文件以及需要导入Xcode的文件。在看完以后你需要把Mods文件夹下的所有.projmods文件以及Mods/iOS文件夹下的内容删除或者替换为你所需要的内容。

在这里提供了.unitypackege格式文件的下载,你也可以选择下载打包好的文件并导入你的工程,之后的步骤和上面一样。

.projmods文件是一个JSON格式的配置patch文件,定义了要如何设置Xcode工程。举个基本的例子,比如KKKeychain.projmods:

{
    "group": "KKKeychain",
    "libs": [],
    "frameworks": ["Security.framework"],
    "headerpaths": [],
    "files":   [],
    "folders": ["iOS/KKKeychain/"],
    "linker_flags": [],
    "excludes": ["^.*.meta$", "^.*.mdown$", "^.*.pdf$"]
}

各参数定义如下:

  • group:所有由该projmods添加的文件和文件夹所属的Xcode中的group名称
  • libs:在Xcode Build Phases中需要添加的动态链接库的名称,比如libz.dylib
  • frameworks:在Xcode Build Phases中需要添加的框架的名称,比如Security.framework
  • headerpaths:Xcode中编译设置中的Header Search Paths路径
  • files:加入工程的文件名
  • folders:加入工程的文件夹,其中所有的文件和文件夹都将被加入工程中
  • linker_flags:添加到工程linker flag中的链接配置,比如-ObjC
  • excludes:忽略的文件的正则表达式,匹配的文件将不会被加入工程中

更多的例子可以参看Mods文件夹中的其他projmods文件。所有的定义路径都是基于当前projmods文件位置的相对路径。 最后,在完成projmods后,Unity会在编译完成后,调用XCodePostProcess的OnPostProcessBuild来对编译得到的Xcode工程进行修改。

之后进一步要做的是为MiniJSON添加一个namespace,这样可以避免不必要的冲突。另外如果您有什么好的想法,也欢迎fork这个项目并给我pull request。项目的github链接请猛击这里。

Unity XCode自动化打包以及 Unity2020 接入 iossdk相关配置 unity xcode打包自动化,在unity打完xcode包以后,unity自己回调带有【PostProcessBuild】的方法或者脚本,从而读取到xcode配置。 特别注意:此脚本不用挂 monobehaviour ,只需要把脚本放入Assets/Editor/下即可!!! 把你的写的.mm 和.h 文件放入 Plugin/ios下面,这个是和oc交互需要用到的,他需要在ios模式下交互 具体的api不解释了,去查unity官网文档即可。 就根据unity2020接入ios sdk来说 阅读详情

相关推荐

Unity 导出Xcode 项目的结构

前言 本文涉及到两个部分,第一部分说一下导出Xcode 项目,Unity的基本配置以及一些小细节。第二部分说一下Unity导出的Xcode工程结构。文章内容比较基础。在Unity和iOS方向我是一个新手,文章内容只为了记录一下学习的过程,帮助有需要的同学。 编译器版本 Unity :Unity 19.4.2f1 Personal Xcode : Xcode 12.2 第一部分 用Unity导出Xcode,肯定是需要Mac电脑一台,打开Unity — File — Build Settings — P

北京朝阳区精神病院院长 2730

Unity编译到Xcode自动添加文件及代码修改

1、XUPorter用起来很厉害的样子!! 对于修改Xcode代码的问题参考了MOMO大神的代码:http://www.xuanyusong.com/archives/2720。 扩展类: using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; using

九村五组的专栏 4981

Unity-Unity工程嵌入到Xcode原生工程中的相关步骤

2016-12-17/Unity5.5.0f3/Xcode_8.1(8B62)/MacBook/OS X 10.11.6 参考地址: https://the-nerd.be/2015/11/13/integrate-unity-5-in-a-native-ios-app-with-xcode-7/ http://www.jianshu.com/p/715adc38e451 最近接到不少单子

闲心居 1810

xcode 一步导入.a文件

导入.a文件 看图。

sunjie886的博客 4059

mac 10.15.7 & Unity 2021.3.14 & XCode 12.4 -> Unity IOS 自动安装 Cocoapods 失败解决方法

用贵州的那个ip,ping虽然最快,但是下载有问题)3. 打开 unity,触发自动安装 Cocoapods(显示 gem install cocoapods)-> 还是安装失败的话,直接看第4步(好像unity中gem认到的还是旧的,而不是我用rvm安装好ruby后新的gem)原因:unity 打开时,他的 gem 命令好像用的还是旧的,会自动安装到/Library库中,不是我新装好的 gem,导致出错(怎么在unity中让gem运行时是新的,弄了一会没弄出来,算了,先不管了,终端能安装也行了)

kyo7552的专栏 2357

Simulink玩转PMSM无感FOC:从IF强拖参数调试到切换失败的避坑指南

本文深入探讨了Simulink在PMSM无感FOC控制中的IF强拖启动参数调试与切换避坑技巧。通过详细解析强拖加速、速度维持和闭环切换三大阶段的设计逻辑,以及五个常见陷阱的解决方案,帮助工程师快速定位启动失败和切换震荡问题。文章还提供了典型故障的波形诊断方法和高级调试工具链优化建议,是电机控制领域的实用指南。

weixin_29164843的博客 405

在Unity打包Xcode工程文件后报错 Apple Mach-O Linker (ld) Error Group)

问题描述 Apple Mach-O Linker (ld) Error Group): “xxx”,referenced from: 例如下图 原因分析: 提示:缺少 xxx.a 文件: 例如下图 解决方案: 提示:找到xxx.a文件添加即可: 再次打包后运行报错就解决了😊。 ...

weixin_45724919的博客 6246

OpenCode:开源代码智能代理平台的全面解析

OpenCode是一个开源代码智能代理平台,采用模块化微服务架构,支持多种AI模型集成。该系统包含前端交互层、代理服务层和模型集成层,提供Build、Plan和General三种代理模式,分别负责代码编写、分析和复杂任务处理。OpenCode支持跨平台安装,具备权限验证、上下文感知等安全机制,并集成LSP协议实现深度代码理解。相比竞品,其开源特性、终端优先设计和提供商无关架构具有明显优势,适用于个人开发、团队协作等多种场景,为开发者提供强大的AI辅助编程能力。

Aaron_945的博客 1416

Unity 自动打包 Part1—配置Xcode工程

目录 1.代码仓库 2. 代码展示 3. Feature 2017.3.29 设置XcodeCapabilities 4. Add Localizations 2017-04-07 5. 构建API 6. XUPorter 不建议使用 7. 新问题-2017.10.27 0.最近更新 添加微信SDK导出,修改xcode工程 添加plist scheme。 1.代码仓库...

Lee的博客 1万+

FastApi教程

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

小石潭记丶 1553

three.js开发3D地图记录(二)

添加地图点击事件,点击区域,地图区域改变颜色并浮起来。

anwebDesigner的博客 1687

iOS Xcode原生项目集成Unity导出的工程

Xcode原生项目集成Unity导出的工程注:成功的前提:Unity导出的Xcode工程可以编译。1、 创建好工程之后,将Unity导出的Xcode工程的以下文件夹复制到我们新建的工程中。Unity导出: 新建工程:复制到我们新建的工程中(Command + C,Command + V)2、 搜索Class/Native目录下的所有.h文件,如下图 之后新建一个文件夹,随便起名,然后将

Se7en丶潇洒哥 的博客 6059

MODIS 遥感数据批量下载(使用Cygwin)

MODIS 遥感数据批量下载(使用Cygwin)包含Cygwin的下载教程

weixin_45913084的博客 908

Unity-iOS工程导出Xcode自动构建方法

Unity-iOS发布基本流程首先在Unity中导出Xcode工程,然后在Xcode工程中设置IOS打包的一些流程,诸如引入lib、framework或其他资源、设置签名及其他编译设置、加入编译脚本等等操作。这些操作如果每次都是在导出Xcode后手动操作,一来浪费时间,二来容易出错。自动设置好Xcode工程后我们就可以使用xcodebuild命令自动构建Xcode工程,使用ExportOptions.plist配置自动发布ipa或者正式包的流程。

分享即学习 2954

学习QT之应用程序打包发布

一、编译QT程序(release编译) 二、将release文件夹中的可执行文件复制到一个空的文件夹中 三、使用windeployqt打包工程 切换到可执行文件路径,执行windeployqt xxx.exe: 然后就会将程序所需要用到的资源以及库文件生成到可执行文件路径下: 此时应用程序就可以点击运行了。 四、使用Enigma Virtual Box封包(将文件夹内的文件集成为单可执...

贝勒里恩的博客 752

用 CDS 作为 Referenced Data Source 开发 SAP Gateway OData 服务,一条更轻的 SEGW 路线

本文介绍了SAP Gateway项目中从传统手工建模到基于CDS View的现代化开发方式转变。主要内容包括: 传统方式需要在SEGW中手动创建Entity Type、Entity Set等元素,并在DPC_EXT中编写大量查询逻辑,存在模型层和业务逻辑重复表达的问题。 7.50版本后,SAP Gateway与ABAP CDS深度集成,可通过SEGW直接引用CDS View作为数据源,自动生成数据模型和SADL读取逻辑,支持完整的OData查询功能。 最佳实践建议通过Consumption View而非直接

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 675

Unity导出XCode工程的时候自动修改工程设置添加依赖

代码如下 #if UNITY_IOS || UNITY_EDITOR // ios版本xcode工程维护代码 [PostProcessBuild(999)] public static void OnPostprocessBuild(BuildTarget BuildTarget, string path) { if (BuildTarget ==

langresser的专栏 1万+

CDR插件开发之CPG插件017 - 在VS2019中实现CPG插件调试(自动写入CPG、自动启动CDR)

在上篇文章中,讲解了图像导出实例:当文档打开后,自动导出当前页面的图像到系统临时文件夹。在代码编写过程中,导出图像路径变量tmpFileName 被修改了很多次,有没有办法实现调试功能,通过控制台打印变量,而不用编译成CPG后再通过消息框来调试?当然是可以的。本篇作为单独篇,以CDR X8版本为例,讲解CPG插件在VS2019中实现调试的具体方法。 工程搭建准备 按照惯例,本篇文章的序号为017,请直接拷贝上一个工程016-export-image(拷贝前最好清理掉 Debug、x64等编译目录..

Zebe 1797

Unity Xcode方式接入sdk

并且在类的实现之前 需要 加 IMPL_APP_CONTROLLER_SUBCLASS(GameAppController),表明这个是程序的入口。Objective-C 与 Unity 交互 有时会使用到Json 进行数据传输,Unity 中 Null 在 Objectiv-C 中解析将会报错,使用NullSafe 库解决.这个账号不是指你当前有的账号,也就是不能输入当前存在的账号,可以随便输入,但不能跟现有的账号重复。关于微信登录,或者分享失效,没有回调的情况,应该是漏写了调用。字符串作为返回值返回。

磨刀不误砍柴工 2202

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Xcode自动化打包(基于Unity,lua)

Xcode 自动化打包(基于Unity,Lua) .sh文件:build_ios.sh 注意:luajit-mac需要单独生成(后续添加生成的文章),放在.sh文件同级即可 ./luajit-mac build_ios_ipa.lua lua脚本:build_ios_ipa.lua io = io local print = print local unity = "/Applications...

fushiqin5411的博客 714

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

使用 Jenkins 从 Unity 工程自动化导出 iOS 包

//////////////////////////////////Unity导出XCode替换资源流程///////////////////////////// Untiy 工程导出 Xcode 后通常需要修改一些 iOS 相关的配置,如果每次导出 Xcode 都去修改会比较浪费时间,这里介绍一种简单快捷的做法。 Untiy 导出的 Xcode 工程的目录结构 通过 git 比较发现,Untiy 工程内容通常会影响到 Xcode 的 Data、Classes、Libraries 下的内容,...

蛰伏--当你不够强大时,就不要放弃努力 1505

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Unity XCode自动发布ipa

工程路径 xcode_project_path=工程路径目录 build文件夹路径 build_path=xcodeprojectpath/项目目录archivepath={xcode_project_path}/项目目录 archive_path=xcodep​rojectp​ath/项目目录archivep​ath={build_path}/Archive/AutoBuild.xcarchive 编译工程 cd $build_path 清理# xcodebuild clean xcodebuild ||

走走牛的博客 2666
上一篇: Android详细的对话框AlertDialog.Builder使用方法
下一篇: php中preg_replace()和ereg_replace()函数的用法区别
一片
博客等级 码龄24年 147粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值