这篇文章主要用于记录本人亲身经历过的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. SpringMVC之数据传递二

    上一篇学习了从url或view中传数据到Controller中,今天学习下数据从Controller传到view中,主要有4种. 一.ModelAndView 处理方法返回值类型为 ModelAndV ...

  2. [LeetCode] Valid Triangle Number 合法的三角形个数

    Given an array consists of non-negative integers, your task is to count the number of triplets chose ...

  3. [LeetCode] Reshape the Matrix 重塑矩阵

    In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...

  4. pyqt5 动画学习(三) 指定控件的移动轨迹

    这一篇来讲解自定义控件的移动轨迹 原理:我们采用QPainterPath先画一个弧线,然后加载一个物体让物体移动,设置100个关键帧,每个关键帧物体的坐标位置就是弧线的坐标位置,这样就能达到按照指定轨 ...

  5. NOIP 2015运输计划

    题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...

  6. [BSGS算法]纯水斐波那契数列

    学弟在OJ上加了道"非水斐波那契数列",求斐波那契第n项对1,000,000,007取模的值,n<=10^15,随便水过后我决定加一道升级版,说是升级版,其实也没什么变化,只 ...

  7. hihocoder #1159 : 扑克牌

    描述 一副不含王的扑克牌由52张牌组成,由红桃.黑桃.梅花.方块4组牌组成,每组13张不同的面值.现在给定52张牌中的若干张,请计算将它们排成一列,相邻的牌面值不同的方案数. 牌的表示方法为XY,其中 ...

  8. python raise和assert的区别

    python中raise和assert的区别 一.使用raise抛出异常 python可以自动触发异常,raise(内置函数)的定义为显示的抛出异常,用户可以使用raise进行判断,显式的引发异常,r ...

  9. Python中set的功能介绍

    Set的功能介绍 1.集合的两种函数(方法) 1. 集合的内置函数 交集 格式:x.__and__(y)等同于x&y 例如:s1 = {'a',1,} s2 = {'b',1,} s3 = { ...

  10. idea Library XXXXXXXX has broken classes paths

    点fix 然后全部 全部按- 删掉 一开始以为会影响很大 后来发现他地址错了都导不进 要是真要用到的时候也没用 还是要maven单独导进来