成都ios培训:游戏开发中的10大坑及解决方案

时间:2017-04-18 15:03来源:成都达内 作者:达内杨老师 点击:

iOS是由苹果公司开发的移动操作系统 。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等产品上。iOS与苹果的Mac OS X操作系统一样,属于类Unix的商业操作系统。原本这个系统名为iPhone OS,因为iPad,iPhone,iPod touch都使用iPhone OS,所以2010WWDC大会上宣布改名为iOS(iOS为美国Cisco公司网络设备操作系统注册商标,苹果改名已获得Cisco公司授权)。
2016年1月,随着9.2.1版本的发布,苹果修复了一个存在了3年的漏洞。该漏洞在iPhone或iPad用户在酒店或者机场等访问带强制门户的网络时,登录页面会通过未加密的HTTP连接显示网络使用条款。在用户接受条款后,即可正常上网,但嵌入浏览器会将未加密的Cookie分享给Safari浏览器。利用这种分享的资源,黑客可以创建自主的虚假强制门户,并将其关联至WiFi网络,从而窃取设备上保存的任何未加密Cookie。

一、 iOS设备出现本地存档丢失

描述:在苹果设备上,当系统提示存储空间已满时,发现本地的存档会丢失。

原因:在默认情况下,本地存档放在了/Library/Caches下面,根据苹果官方的描述,放在/Library/Caches目录下的任意文件将在系统弹出存储空间将满的警告时被系统清空。解决方案:将所有数据和热更新文件放在/Library/Application Support目录下,此目录下的所有文件在收到空间将满警告时不会被移除。此外,这还避免了放在Documents目录下可能会被苹果在审核中干掉的风险。

二、Apple Watch 版本提交失败

描述:首次向AppStore提交带Apple Watch的版本,提示失败,导致提交无法继续。原因:Apple Watch版本的AppIcon的PNG图带了Alpha通道,故被拒。

解决方案:去除Apple Watch版本的所有AppIcon的PNG图的Alpha通道。

三、Apple Watch 版本审核被拒

描述:Apple Watch版本提交后,在苹果审核的阶段被拒了。

原因:在iPhone上的Apple Watch的这个应用内,我们的游戏名称显示为codename:xxx ios。

解决方案:发现在Watchkit Extension的Info.plist里,Bundle ame为默认的PRODUCT_ID,这就是我们的codename,将Bundle name修正为游戏名称即可。需要注意的是Bundle ame不等同于Bundle display name,前者用于系统的设置的一些显示名称,后者用于在Launcher的App的名称显示。

四、单机游戏内购(IAP)被破解

描述:根据后台的Counter报告,我们确信我们的单机游戏内购被破解了。

原因:一个高度可能的原因是我们把订单编号存在本地的一个缓存文件里,每次去苹果服务器询问订单是否成功时,先去此缓存文件内查找是否有相同的订单编号,若找到则说明订单有重复发。但是一旦玩家删除了这个缓存文件,则可反复利用一个已经支付成功了的订单号来反复刷了。

解决方案:最稳妥的解决方案是将订单编号存在服务端,然后对服务端的通信进行加密。我们采用了一种不走服务器的方法:即在首次充值成功时,给金币的缓存文件添加一个标记位(负号),然后查询订单缓存文件时,先去查询此标记位,若找到标记位,则说明之前充值过,订单缓存文件应有内容,如果订单缓存文件内容为空,或找不到有意义的订单编号,则说明玩家作弊,此次充值金币将不会加上(作弊惩罚)。由于缓存文件事先已被AES加密过,所以玩家很难去找到该标记位。

五、Apple Watch OS2 运行时找不到图片

描述:Apple Watch OS1的版本一行代码没改,但运行起来却提示图片无法找到。

原因:WatchKit App下的Images.xcassets里的图只设置了1x的图片,2x和3x没有设置。

解决方案:设置好2x和3x的图片。

六、用Application Loader上传二进制时报错ERROR ITMS-90168: "The binary you uploaded was invalid."

描述:同标题。

原因:未知,可能跟Xcode升级到7有关。

解决方案:打开命令行,输入以下代码:

cd ~/.itmstransporter

rm update_check*

mv softwaresupport softwaresupport.bak

cd UploadTokens

rm *.token

七、iOS 9 以下的设备不支持ReplayKit导致无法启动游戏

描述:同标题。

原因:ReplayKit是iOS9才引入的framework,所以无法在iOS9以下的设备上使用。

解决方案:打开Xcode,在target的Build Phases下搜索ReplayKit,把ReplayKit.framework的Status由Require改成Optional。同理,在遇到低版本iOS系统不支持的情况,比如iOS8以下不支持CloudKit,一律将framework的Status由Require改成Optional即可。

八、Xcode 7以上默认不支持http请求

描述:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.。

原因:Xcode 7以上为了安全考虑默认只支持https请求。

解决方案:打开Xcode,编辑Info.plist或选中target的Info栏,新增字段App Transport Security Settings,将其内键Allow Arbitrary Loads设置值为YES。

九、Xcode 7 ERROR ITMS-90474: “Bundle Invalid…”

描述:提交二进制文件时报错:ERROR ITMS-90474: "Bundle Invalid. iPad Multitasking support requires there orientations: 'UIInterfaceOrientationPortrait,UIIinterfaceOrientationPortraitUpsideDown,UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight'. Found 'UIInterfaceOrientationPortrait' in bundle.。

原因:由于iOS 9引进了多任务处理,所以iOS应用必须设置其是否要求全屏显示。

解决方案:打开Xcode,选中target,在General一栏,将Requires full screen勾选上。

十、Xcode 7 ERROR UnityAds.Bundle ITMS-90535 Unexpected CFBundleExecutable Key

描述:提交二进制文件时报错:ERROR UnityAds.Bundle ITMS-90535 Unexpected CFBundleExecutable Key。

原因:老版本的UnityAds.Bundle里包含CFBundleExecutable字段,苹果在Xcode7之后会对其进行验证。

解决方案:Xcode内搜索UnityAds,找到UnityAds.Bundle里的Info.plist,删除其CFBundleExecutable字段即可,该字段在Xcode中显示的名称为:Executable file。

 

成都it培训哪家好,当然是成都达内培训,成都达内是一家专业的程序员培训机构,专注于成都java培训,成都ios培训,成都android培训,成都C++培训,成都PHP培训,成都IT培训,成都编程培训等IT培训,专业的成都软件培训机构,专业师资授课,真实项目实战、零首付、低押金、名企就业

(责任编辑:成都达内)

CopyRight © 2002-2016 成都达内科技职业技能培训学校 (www.cdtedu.com) 版权所有 成都达内 川公网安备 51019002000307号 网站地图