这篇文章主要用于记录本人亲身经历过的Unity发布到IOS平台所遇到的所有坑(其实也就是一些自己并不明白的强制设定),以便于后续再有类似需求时少走些弯路。

我的环境:

Unity 5.2.2 个人版(破解版)

macOS Sierra 10.12.1

Xcode 8.2

iPhone 6S真机一台

以上只是我的个人环境,如果因为unity的版本不同或是mac的版本不同,或是xcode的版本不同,很可能会遇到一些未知的坑,这里我也不可能把所有坑都踩一遍了,所以只能看个人的运气如何了,运气好一次就能成功,运气不好,卡在这里随随便便就是几天时间过去了,也没个头绪。

好吧,那现在开始吧。

第一步:安装环境

Unity 5.2.2个人版直接在unity官网下载,破解补丁在此

没有真机或黑苹果的话,安装虚拟机VM,虚拟机的安装流程百度很多,这里只有一个重点,VM安装成功以后需要使用对应的unlocker破解,破解以后才能直接安装apple os系统,这里有mac os x10.11.1的镜像系统,安装完后可以升级到最新版http://pan.baidu.com/s/1gft8azx

Xcode可以直接在app store下载,当然速度十分不可观,所以最好还是选择在苹果开发者中心下载,百度搜索苹果开发者中心

第二步:Unity发布Xcode工程

这里有两种方式,第一种是在windows上用Unity发布,第二种是在Mac上用Unity发布,这两种方式的操作流程几乎没什么区别,但某些项目因为引用了特殊插件的原因发布可能会失败,而在windows上发布失败的项目在mac上一般都是能成功的,我也不知道这是什么原因了,只能猜测是windows上缺少某些必要的组件,所以最好还是在mac系统上用unity发布xcode的工程,无论是真机、黑苹果还是虚拟机都行。

1、首先,在Build Setting里将当前平台切换至IOS(点击platform中的IOS,选择switch platform),Run in Xcode as 选择Release,其他保持默认

2、点击player setting,选择other setting(其他的设置可以保持默认,splash image 加载背景如果需要的话自行替换)

Auto Graphics API取消勾选,并取消Metal(选中Metal,点击右边的减号删除),让APP只用OpenGLES2渲染

Bundle Identfier按照标准的格式com.XXXX.XXXX,注意这里的XXXX不能写得太随意,否则Xcode编译可能不会通过

Target SDK选择Device SDK(真机),因为我这里是真机测试,模拟器的坑还没去踩,没有真机的请选择另一个(模拟器),不过不敢预测是否有更大的坑

AOT Compatibility Options 填上字符串:nrgctx-trampolines=8096,nimt-trampolines=8096,ntrampolines=4048  参考的这里,如果你的APP有不知名的闪退情况的话,请加上这条属性

其他的保持默认属性即可,大致如下:

然后就可以直接Build发布了(mac系统中build and run会在发布完成后自动打开xcode),当然这里可能会报另一个错(几率性的),如下,大概就是DLL加载不出来的意思,我这里是unityengine.UI及部分组件加载失败,这自然是致命性的,除非项目中没用到UGUI。

解决办法参考的这里,思路就是在unity的安装文件夹中找到这些加载失败的DLL,将他们全部移出去,然后运行一次unity,记住,千万不要保存场景,只运行打开窗口就可以了,接着关闭unity,将之前移出去的所有文件再放回原位,然后再打开unity,奇迹般的是,这些错误不复存在了,之前无法加载的组件已经加载成功了,只能说目前这应该算是一个bug吧。

第三步:用Xcode打开工程,进行相关设置并发布

1、打开Xcode,选择右下角的Open another Project,选择我们用Unity发布出来的Xcode工程并打开

2、到这里你不清楚要更改哪些配置的话,直接点击上方菜单栏Product -> Build生成项目,生成失败会弹出报错信息

3、查看报错信息,点击左侧的一个三角感叹号图标,并再次点击你的项目配置文件(项目的名称),我这里是Unity-iPhone,显示所有配置信息

4、到这里我们发现报错的原因是team id为空,所以我们必须为APP指定一个team id

5、点击这个team输入框后面的蓝色按钮,选择Add an Account,弹出一个窗口后,这里会提示你用Apple ID登录,有账号的话就直接登录,没有的话就点击左下角Create Apple ID去申请一个,这是免费申请的,过程很简单就不再描述了

6、选中我们登录的ID,可以在右下角(根据网络问题可能会加载缓慢)看到ID默认就有的一个个人团队证书

7、好,我们关闭这个窗口,这下直接在team输入框后面的蓝色按钮的下拉框中就可以选择我们的个人团队证书了

8、我们再次biuld项目,如果不出意外应该可以直接build成功,但据说是因为unity版本问题,这里还会报这一个错,如下,解决的办法在这里,很简单,直接删除NORETURN就可以了,这算是个bug吧,unity更新到5.3.2就修复了这一bug

9、然后,到这里再次build项目的话应该就能成功了,不过如果项目用到了摄像机以及定位之类的,还需要在配置信息中阐明使用的理由,不然发布到真机就会黑屏或闪退,在xcode编辑界面的左侧点击一个文件夹图标,展开项目的工程目录,选中info.plist,在Information Property List选项后面点击加号,在新生成的行的key值中选择:Privacy - Camera Usage Description  ,value值选项中输入要使用摄像机的理由,内容随意,只是用户在打开app的时候会看到这个string,如果写得太不友好,用户自然有可能会拒绝app访问摄像头,然后你就没辙了

10、然后用数据线连接上真机,在xcode编辑界面左上方选择我们的iPhone设备

11、现在就可以再次biuld,成功以后点击左上角的三角箭头运行图标,当显示Running XXX on iPhone的时候,就可以打开你的iPhone,app就能自动运行了,不能自动的手动点击图标运行就可以了

这里其实就是最麻烦的,很多做unity开发的并没有接触过IOS开发,自然也对xcode的一些标准配置完全就不清楚,当然我这里也并没有发布至App store,只是发布到真机的测试版,后面有时间再添加发布到app store的流程。

发布越狱版:如何在xcode打包越狱ipa文件

Unity发布至IOS的流程(踩坑记录)的更多相关文章

  1. Unity 发布到IOS,Android的各种坑

    Unity 发布到IOS的注意事项1.开发环境MAC环境:Xcode环境 7.2.1Unity环境:Unity5.32.基本说明首先,我说一下,这是我在对Unity发布到IOS的实际使用中,总结出来的 ...

  2. Unity AssetBundle 踩坑记录

    Unity AssetBundle 踩坑记录 editor 下选择什么平台的 ab 加载 Material doesn't have a color property '_Color' UnityEd ...

  3. python发布包到pypi的踩坑记录

    前言 突然想玩玩python了^_^ 这篇博文记录了我打算发布包到pypi的踩坑经历.python更新太快了,甚至连这种发布上传机制都在不断的更新,这导致网上的一些关于python发布上传到pypi的 ...

  4. DevOps落地实践点滴和踩坑记录-(2) -聊聊平台建设

    很久没有写文章记录了,上一篇文章像流水账一样,把所见所闻一个个记录下来.这次专门聊聊DevOps平台的建设吧,有些新的体会和思考,希望给正在做这个事情的同学们一些启发吧. DevOps落地实践点滴和踩 ...

  5. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  6. IDFA踩坑记录

    IDFA踩坑记录: 1.iOS10.0 以下,即使打开“限制广告跟踪”,依然可以读取idfa: 2.打开“限制广告跟踪”,然后再关闭“限制广告跟踪”,idfa会改变: 3.越狱机器安装开发证书打的包, ...

  7. VUE使用微信JDK(附踩坑记录)

    VUE使用微信分享SDK(附踩坑记录) 微信分享官方文档 安装JS-SDK npm i -S weixin-jsapi 引入包 ES5 写法 const wx = require('weixin-js ...

  8. manjaro xfce 18.0 踩坑记录

    manjaro xfce 18.0 踩坑记录 1 简介1.1 Manjaro Linux1.2 开发桌面环境2 自动打开 NumLock3 系统快照3.1 安装timeshift3.2 使用times ...

  9. 移动端Video标签踩坑记录

    需求 用户能在手机上上传视频并预览. 问题 上传完成后安卓下封面展示正常,ios下封面空白.如下图所示: 利用canvas截取视频第一帧发现,ios下截取到的第一帧一直是空白图片, 安卓正常. 后端利 ...

随机推荐

  1. JS面向对象使用面向对象进行开发

      面向对象基础一之初体验使用面向对象进行开发 对 JS 中的面向对象的基础进行讲述, 初体验使用面向对象进行开发 主要内容是 面向对象的概念及特性 用面向对象的方式解决简单的标签创建实例 一些基础的 ...

  2. PHP多个一维数组合并成二维数组的简易方法

    当我们需要进行数组遍历数据的时候,需要将多个一维数组进行二维的转换,方法很简单.如下: <?php $a= array('张三','李四','王五'); $b= array ('23','24' ...

  3. JAVA_扫雷游戏(布置地雷)

    1.要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示.如某位置为地雷,则该位置用数字-1表示, 如该位置不是地雷,则暂时用数字0表示. 编写程序完成在该二维数组中随机布雷的操作,程序读 ...

  4. 云如何让App开发更简单?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 互联网"下半场",移动App开发对于质量.速度的要求更加苛刻.4月初,腾讯云正式上线移动开发平台MobileLine,借 ...

  5. 6.QT-简易计算器实现(详解)

    界面展示 1.用户界面类设计 需要使用QWidget组件作为顶层窗口,QLineEdit组件作为输入框,QPsuhButton作为按钮 1.1 在代码里处理按键消息时,需要处理下用户输入的格式(方便逻 ...

  6. bzoj 2437: [Noi2011]兔兔与蛋蛋

    Description Solution 考虑犯错误的条件:之前是处于必胜状态,该操作之后就变成了必败状态. 我们可以把这个过程看成两人对网格图进行黑白染色,变成了一个二分图模型,即当前位置向相邻不同 ...

  7. UVA - 11992:Fast Matrix Operations

    线段树,注意tag优先级 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cs ...

  8. ●BZOJ 2251 [2010Beijing Wc]外星联络

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2251 题解: 后缀数组,倍增,RMQ 题意:把重复次数超过 1次的子串按字典序输出它们重复的 ...

  9. 【UOJ UNR #1】争夺圣杯

    来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 考虑直接对每个数字,统计它会产生的贡献. 单调栈求出每个数字左边第一个大等于他的数,右边第一个大于他的 (注意只能有一边取等) 假设左 ...

  10. [2017/5/28]FJ四校联考

    来自FallDream的博客,未经允许,请勿转载,谢谢. 话说这一段时间算是过去了,好久好久之后终于又有联考了  没想到这次到我们学校出题,昨天才想起来,临时花一天赶了一套,我出了一个sbFFT,质量 ...