介绍
本文章将构建一个示例Unity项目到iOS设备进行测试(
非常详细,简直细到了每个操作,每个情况),原文出自Unity官网教程 Building your Unity game to an iOS device for testing,
但略做修改。
本文章不包含构建一个可分发到其他设备的游戏,或向App Store提交游戏。
自2015年Xcode 7发布以来,可用免费的Apple ID来构建应用(包含使用Unity制作的游戏)。在此之前,只有付费的Apple Developer Program(苹果开发者计划)的成员才可以这样做。免费选项是有限的:不能使用Game Center或In-App(内购)等服务,而且不能提交游戏到App Store。但是,可以使用免费的Apple ID在iOS设备上测试你的游戏。
环境
- Mac Pro系统版本:macOS Sierra 10.12.6
- Xcode版本:Xcode 8.3.3
- Unity版本:Unity 5.4.1
- iphone6 10.3.3
建立工程Simple Mobile Placeholder
首先,我们来简单介绍一下工程Simple Mobile Placeholder。顾名思义,这是一个有意为之的迷你项目-它只是为了测试构建过程而创建的。因此,用它测试是否正确构建和是否在设备上按预期运行是很容易的。
- 打开Unity并创建一个工程。
- 将工程命名为“SimpleMobilePlaceholder”。
- 选择一个位置并保存它。
- 确保选择“3D”,以在3D模式下使用Unity Editor。
- 点击“Create project”按钮创建工程。
- 使用顶部菜单,转到Window->Asset Store。
- 搜索“Simple Mobile Placeholder”。
- 点击Download来下载,下载完后,然后导入。
- 你将看到导入一个完整工程将覆盖你的porject setting的警告。因为我们创建了一个空工程,所以可直接点击Import来导入。
将出现一个导入窗口,显示工程中包含哪些文件。
- 点击Import导入此工程。
- 在“Project”窗口中,点击“Scenes”文件夹,双击“Main”场景来打开它。
你应该在Scene View中看到一个红色立方体。进入Play模式测试工程。立方体应该旋转。当你点击立方体时,立方体将向相反的方向旋转且Console窗口将输出一条消息:
Toggling rotation direction
现在我们知道工程是如何工作的了,接下来将要将其构建到iOS设备上。
注:如果出现“unity SpritePacker failed to get types from UnityEditor.WebGL.Extensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. Error: The classes in the module cannot be loaded.”警告,为没安装WebGL Build Support组件所致,不影响建iOS,若需消除此警告,点击File->Build Settings,选中WebGL,点击Open Download Page,下载安装即可。
将Apple ID添加到Xcode
在构建到设备之前,我们需要创建一个Apple ID并将其添加到Xcode。
如果还没有Apple ID,从 Apple ID站点获取。
一旦获得Apple ID,你必须将其添加到Xcode。
- 打开Xcode。
- 从屏幕顶部的菜单栏选择Xcode->Preferences打开Preferences窗口。
- 选择窗口顶部的Accounts,以显示有关已添加到Xcode的Apple ID的信息。
- 要添加你的Apple ID,点击左下角的加号,然后选择Add Apple ID。
- 将出现一个弹出窗口,填入你的Apple ID和密码。
- 你的Apple ID将出现在左侧列表中。选择你的Apple ID以查看更多信息。
- 在Team标题下,你将看到你所属的所有Apple Developer Program团队的列表。如果你使用不在Apple Developer Program的免费Apple ID,你将看到你的名字后显示有“(Personal Team)”。
在Apple Developer Program中,teams用于安排谁可以访问工程,拥有什么权限等等。当你使用免费的Apple ID时,Apple会为你的Apple ID创建一个只有你的Personal Team。现在不需担心-这只是测试你的应用所需的步骤之一。
更多有关在Xcode中管理Accounts和Teams的信息,参考此 Apple documentation。
准备你的Unity工程以构建到iOS
现在,返回到Unity并切换平台,以便可以构建iOS游戏。
- 在Unity中,从顶部菜单中打开Build Settings(File->Build Settings)。
- 点击左侧平台列表中的iOS并选择窗口底部的“Switch Platform”。
Switch Platform将当前工程的构建目标设为iOS。这意味着当我们构建时,Unity将创建一个Xcode工程。Switch Platform也强制Unity重新导入工程中的所有资源。在我们这个小测试工程中,并不需要花太长时间,但对于大工程,这将花费一些时间。
接下来,我们需要输入我们游戏的bundle identifier。bundle identifier是用于标识应用的字符串,使用reverse-DNS风格编写,如com.yourCompanyName.yourGameName。允许的字符有字母,数字,.(小数点),-(破折号)。为了构建,我们需要修改默认bundle identifier。
请注意,在写本文时,一旦你在Xcode中向Personal Team注册了bundle identifier,这意味着不能再向其他Apple Developer Program Team注册此bundle identifier。这意味着在使用免费的Apple ID和Personal Team测试游戏时,你应该选择一个仅用于测试的bundle identifier-你将无法使用相同的bundle identifier来发布游戏。一个简单的办法是将“Test”添加到要使用的任何bundle identifier末尾,如com.yourCompanyName.yourGameNameTest。
bundle identifier还有其他限制。当你发布应用时,它的bundle identifier必须是你应用唯一的,且应用提交到App Store之后将不能更改。有关bundle identifier的更多信息,请参阅此 Apple documentation。
- 在Inspector面板中打开Player Setting(Edit->Project Settings->Player)。
- 展开底部的“Other Setting”部分,然后在Bundle identifier处输入你的bundle identifier。
现在,可以准备构建了。
使用Unity构建一个Xcode工程
将游戏构建到iOS设备涉及两步。首先,Unity构建一个Xcode工程。然后,Xcode将该工程构建到你的设备上。一旦你完成了所有的工作,Unity可以为你启动这两步-但是,当你第一次构建工程到设备上时,包含一点额外的工作,所以你必须分开完成这两步。
有额外工作的原因是为了安全。Apple使用了一种叫做code signing(代码签名)的技术,以确保应用来自已知的代码且并没被篡改,而且在构建之前需要进行设置。更多有关代码签名的信息,请参阅此 Apple documentation。
首先,我们要让Unity构建Xcode工程。
- 从顶部菜单打开Build Settings("File"->"Build Settings")。
- 点击“Add Open Scenes”以将主场景添加到将要构建的场景列表。
- 点击“Build”来构建。
系统会提示你选择构建Xcode工程的位置。一个好选择是在工程文件夹中新建一个专用于构建的文件夹。
- 点击系统提示右上角的向下箭头将其展开,然后点击New Folder。
- 当系统提示选择一个名字是,输入“Builds”并点击Create。这将在你的工程的根目录下创建一个名为“Builds”的新文件夹。
- 在标记为Save As的文字输入栏中,输入“iOS”并点击Save。
Unity现在将在“Builds”文件夹下创建一个名为“iOS”的Xcode工程。
Xcode工程是使用Xcode构建应用所需的所有文件和信息,包含代码,图片资源等等的内容被安排到文件夹中。有关Unity创建的Xcode工程的更多信息,请参阅Unity Manual Xcode Project Structure页面。
使用Xcode将示例工程构建到你的设备
一旦Unity构建了Xcode工程,将打一个工程位置的Finder窗口。
- 双击.xcodeproj文件以使用Xcode打开工程。
- 在左上方,选择Unity-iPhone查看工程设置。它将打开并选择General选项。
- 最顶端之下的是Identity,你将看到一个带有Fix Issue按钮的警告。这个警告并不意味我们做错了什么-这只是表示Xcode需要下载或创建一些代码签名(code signing)文件。
- 点击Fix Issue按钮。
- 将出现一个弹出窗口,显示已添加到Xcode的任何Teams的详细信息。
- 确保在下拉列表中有显示正确的team-如果你使用一个免费的Apple ID,你的名字后会跟上“(Personal Team)”。
- 点击Choose以指示Xcode下载必须的证书(certificates)并生成一个配置文件(provisioning profile)。然后警告将会消失。
证书(certificates)和配置文件(provisioning profile)是代码签名(code signing)所需的文件。你现在不需要关心它们做了什么-但如果你想要了解更多,参见此 Apple documentation。
注:Xcode版本不同,出现的情形可能略有不同,如在Xcode 8.3.3中,选择工程配置和相应Targets->General->Signing,Team标签下选择之前生成的Personal Team(
“Signing for "Unity-iPhone" requires a development team. Select a development team in the project editor.“即可用此种方式解决)
现在用USB将你的设备连上电脑。如果这是你首次连接此设备,你可能在xcode上看到“processing symbol files”消息-这意味着Xcode正在从设备获取信息,以允许你在此设备上调试应用。等待处理完成。一旦符号文件(symbol files)处理完成,“processing symbol files”将会消失,且你的设备已经可以用来调试了。
构建到设备前的最后一步是确保设备解锁了,因为Xcode不能在密码锁定的设备上启动应用。如果你的设备设置为使用密码解锁,最好在构建到设备之前更改此配置,然后在测试完成后再改回来(其实也不用这么麻烦,因为Xcode在构建应用到设备上时会提示让你解锁设备)。
- 在设备上,进入“设置”->“显示器和亮度”->“自动锁定”。
- 禁用锁定时,选择“永不”。
值得注意的是,在“低电量模式”下,“自动锁定”设置将不能更改,除非关闭“低电量模式”。
- 要关闭“低电量模式”,进入“设置”->“电池”->“低电量模式”来关掉它。
现在,是时候将示例构建到设备上了。
如果你之前没有用Mac开发过iOS或OSX应用,此处则可能看到一个询问是否打开开发者模式(Developer Mode)的弹窗。启用开发者模式(Developer Mode)意味着执行常规开发任务是不需输入你的Mac密码。
- 选择Enable打开开发者模式,并按提示输入你的Mac密码。
稍等片刻,你会在Xcode顶部中心栏中看到“Build succeeded”的消息,且将应用加载到你的设备上。差不多要完成了!
注:此时如果出现访问钥匙串的授权,选择始终允许或允许,否则无法将应用构建到设备上(“钥匙串访问”可查看证书详细信息)。
你可能会在设备上收到标题为“Untrusted Developer”(不受信任的开发人员,可直接选择信任),或者在Xcode中显示“Could not launch [your app name]”。如果你看到这其中的任何一个,这意味着还剩最后一步:你需要将你的设备设置为信任你的Apple ID。
- 在设备上,进入“设置”->“通用”->“设备管理”(Device Management)->“开发者应用”(Developer App)->[your app name]。注:在没有Run之前,手机上是不会存在“设备管理”选项的。
- 选择你的Apple ID,然后选择“信任”(Trust)。
只要在你的设备上有一个使用该Apple ID构建的应用,你的设备将允许运行该Apple ID构建的任何内容。如果你从设备中删除了使用该Apple ID生成的所有应用程序,则需要返回到相应设置并再次选择“信任”。
在你的iOS设备上测试游戏
现在,游戏已经构建到你的设备上了。如果你将手机与电脑断开连接,游戏仍然存在。要在设备上运行,点击主屏幕上该游戏的图标即可。
游戏正常运行,红色立方体在旋转,点击它,它会改变旋转方向。
在设备上运行游戏是对其测试的一种方式。也是检查控件是否正常工作的好方法。但是,如果你需要更多的信息,例如,如果你希望玩游戏时看到unity的log,则需要构建运行程序时,设备保持与Xcode的连接。
说做就做。
- 将你的设备连上电脑。
- 像之前一样,双击.xcodeproj图标打开Xcode工程。
- 在Xcode中,选择Run。
Xcode将游戏构建到你的设备上并开始一个调试会话。
如果你在游戏运行时才查看Xcode右下角,你将看到Xcode调试控制台。这包含你在Unity控制台中看到的所有信息,以及有关操作系统中发生的其他事情的调试信息。你可以像使用Unity中的控制台一样使用它来帮助你调试游戏。
点击立方体,Unity控制台中看到的日志也会出现在Xcode调试控制台中,并带有Xcode输入的其他信息。
根据Deployment Info选择的不同iOS平台,会出现Deprecations的相关警告,若需要去除,点击该警告,根据iOS Frameworks里的注释修改即可。也可在出现警告的文件中加入:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations" // -Wdeprecated-declarations为需要去除的警告类型
#pragma clang diagnostic pop
警告类型查询
‘extern’ variable has an initializer:extern应在变量声明的头文件中加入,而在定义(申请内存空间)的cpp文件中不需extern,去除即可。
Non-portable path to file '"GlesHelper.h"'; specified path differs in case from file name on disk:使用GlesHelper.h替代GLESHelper.h
结论
“如何构建Unity游戏到iOS设备进行测试”学习了:
- bundle identifier是什么。
- 如何使用Xcode构建Unity游戏到你的设备上进行测试。
- 如何使用Xcode的调试控制台在iOS设备上调试Unity游戏。