2016 年 9 月 23-24 日,由 CSDN 和创新工场联合主办的“MDCC 2016 移动开发者大会• 中国”(Mobile Developer Conference China)将在北京• 国家会议中心召开,来自 iOS、Android、跨平台开发、产品设计、VR 开发、移动直播、人工智能、物联网、硬件开发、信息无障碍10个领域的技术专家将分享他们在各自行业的真知灼见。
从 8 月 8 日起至 9 月 4 日,MDCC 大会门票处于 6.8 折优惠票价阶段,五人以上团购更有特惠,限量供应(票务详情链接,6.8折优惠,欲购从速!)
作者简介: 左辰豪(Nero),苏州大学计算机科学与技术学院物联网工程学生,WWDC 2016 奖学金获得者,RoDot 作者,2015年接触 iOS 开发,热爱 Swift,博客地址:http://nero5023.github.io/。
我是一名来自苏州大学物联网工程的学生,马上读大三。今年凭借一款游戏 RoDot 获得了苹果的奖学金,受邀参加了今年的在旧金山举行的 WWDC。因此有机会享受了加州的阳光,参观了硅谷、斯坦福大学,很荣幸地与库克等苹果高管合影。
接触计算机对我来说是个巧合,高考填志愿的时候原来一直想学建筑学,但是由于高考的失利的原因,最终选了物联网工程,就是看好物联网的发展,也没好好了解过。我是从大学才接触编程的,也是像大多数计算机学生一样通过学习 C 语言入门的。但我能取得现在的成绩,是因为我有了自己的想法,有那么一点点的叛逆。
刚进大学时候还是挺迷茫的,就跟着课程学习,但是学了一个学期后发现所学的东西和自己所期望的相差很大,并不能做出一个实际的项目出来。我就开始自学 iOS 开发,观看斯坦福大学 iOS 开发公开课,但对于没有接触面向对象开发的我来说太难了,还买了一些书,如从零基础到上架、从入门到精通这种书,但基本都没用,走了很多弯路。慢慢地开始看国外的网站,同时庆幸的是,在大一下学期的时候遇到了贾俊铖老师,给我项目做,将我带入了门。同时在大一暑假时找了份实习工作,这个经历真的让我学到了很多东西,接触到了正式工程代码,详细得了解了团队人员构成。
同时我也接触了 Udacity、Coursera 等 MOOC 网站,让我见识到了内容更丰富,更先进的教育资源。Udacity 上的课程都是计算机课程,我学习了 Full Stack Nanodegree 以及各种课程,学会了用 Python 开发 Web 后端,数据库、Linux、HTML、CSS 等相关知识,增强了自主学习的能力,使我少走了很多弯路。Coursera 上的课程各个门类都有,我参加了面向对象高级课程和数据科学家的工具箱这两门课,学了一些 UML,及数据分析所用工具语言,对数据分析有了大概的了解。在大二时积极参加 GDG 苏州等开发者社区活动,社区交流是学习、分享技术、答疑解惑最好的途径之一。现在所获得的计算机的知识基本都是自己学习的,学校并不能给我们什么,所有的一切必须靠我们自己。
苹果奖学金是苹果为鼓励更多学生投入开发者群体而专门设立的一个奖项,我觉得他们做到了,苹果将美国梦诠释得很形象。今年 WWDC 的 Keynote 上,苹果还放了一段激励下一代视频,并在 iPad 上推出 Swift Playground,目的就是让更多的年轻开发者投入到苹果的怀抱。
我大一时就关注到了这个奖学金,但是当时刚接触 iOS 开发,还没有能力,而且也完全没有时间了,就准备在下一年申请。因此做了很多功课,暑假实习,增加经验,学习 Web 技术,提高自己的技能,参加开发者社区活动,扩展视野。
我是凭借一款小游戏 RoDot 拿到了这个奖学金的,其实这个游戏就是为了申请奖学金的,还有就是想要挑战一下自己,之前从没有做过游戏,想要尝试一下。整个开发过程花了 3 个月时间,所有的课余时间都花在这个上了。
我的游戏灵感来源是来自天天看得到的电脑后面的墙砖,当时获得这个灵感很巧合,就是对着墙发呆突然灵感就来了,找到这个灵感我整整花了 3 周。当找到灵感后我就用牙签棒做游戏原型,就开始做起了 Demo。我的游戏是由点和棒组成的,游戏名 RoDot 是由 rod(棒)、dot(点)共用一个 d 组成的。
我使用了 SpriteKit、GameplayKit 来组织游戏逻辑。选用 SpriteKit 的原因是因为可以用 Swift 开发,而且对开发过 iOS 应用开发人员很好上手 SpriteKit 是苹果的推出的游戏引擎,对 iOS 来说是无缝的,但一大硬伤就是不能支持跨平台,只能在苹果的生态系统中使用。
GameplayKit 是去年新加入的框架,是一个不参与动画和渲染,拥有基础工具和技术框架,可提供游戏资源、模块、玩法设计以及系统规则方面的内容的框架。我用了 GameplayKit 的 Entity-Components 和 State Machine,来提高游戏的可扩展性,减少代码冗余。刚开始做时并没有用 GameplayKit,当我想要扩展游戏内容时,按照原来的代码会造成很多冗余,就用 GameplayKit 花了一周时间进行代码重构,之后的扩展相当简洁优雅。
在 Entity-Components 中,实体(Entity)指的是游戏的对象类型,一个组件(Component)处理处理特定的功能和动作,如渲染、操控、瞄准、旋转、平动等。在这个框架中,组建一个实体就像在搭积木一般,通过不同的组件拼出不同的实体,能让代码能充分的利用。State Machine 是状态机,使用状态机管理代码能让状态变化,控制更加简单,清晰。
另外,我还集成了 ReplayKit 和 Universal Links。ReplayKit 是 iOS 9 中新增的框架,可以让玩家在游戏中录制游戏视频,并且可以添加语音评论,然后通过社交网络分享出去。iOS 10 中 ReplayKit 新增了直播功能,我应该会在游戏的后续更新中加入这个功能,但是由于没有游戏类 App 的批准号码,我的游戏不出意外的话,会在 10 月 1 日在中国区下架。Universal Links 是为了解决 URL scheme 的一些问题而推出的一项 App 间跳转的技术,如一些开发商利用 URL scheme 收集了用户的APP列表,涉及到了用户的隐私。实现了Universal Links,能通过点击一个普通的 http url 就能跳转到目标 App 中。
游戏中有个功能是制作自己的关卡然后分享到设计网络上,可以让他人通过点击链接跳转到 RoDot 中挑战这个关卡,Universal Links 完美地解决了我的问题,同时我也是对新技术的狂热爱好者,这样就再适合不过了。我个人认为这是 RoDot 中最好的一个功能,但是由于界面还不是友好,用的人不是很多,需要重新设计。Universal Links 首先需要一个域名,同时这个域名需要支持 htpps,并在 https://domain.com/apple-app-site-association 返回一个特殊的 JSON 文件,然后在代码中定义跳转规则,在整个实现过程中我第一次完成了域名和 https 的配置,学到了很多。
对我来说最难的不是代码,而是灵感和设计,这对程序员来说很难。完全不懂设计,就凭个人感觉来做,最后做出来的效果也还好,不算特别丑。
整个项目都是我一个人完成,这就意味着我承担了很多角色,我是 iOS 工程师、后端工程师、前端工程师(一小部分)、设计师、产品经理、测试工程师,我不仅要写代码,还要设计、指定计划、控制开发进度。整个过程我虽然遇到些意外、困难,一些地方还不完善,但最终还是如期完成了。我戏称自己做了次全栈工程设计师,当然也远远没有达到这个程度。我个人认为我能拿到这个奖学金的最大因素是我游戏的灵感,感觉实现这个游戏其实也不算难,最重要的是敢想敢做。
每年5月左右苹果会在 https://developer.apple.com/wwdc/scholarships/ 这个网址开放申请通道,这上有一些关于申请奖学金的具体要求,有兴趣的可以看一下。申请这个奖学金需要提交一款自己做的 App,不管是上架的还是非上架的都可以,另外还需要填写一些个人简介,关于你用到什么技术,遇到什么困难怎么解决等的问题,这些其实都是次要的,另外还要提交英文的学籍证明。最后只要静等最终结果的邮件即可。
通过阅读申请要求,不难发现创意和所用技术很重要。所以做的 App 一定要有创意, 多用 Apple 的技术,尤其是最新的那些,用最新的特性组合创造更多的可能,另外关注 Use Accessibility,这一部分苹果也极其的重视。还可以做一些帮助一些患有特殊疾病的 App。另外界面一定要好看,苹果给我们奖学金得主一个建议就是:做一个 App 时,要 Design first。
这次 WWDC 还认识了一些来自中国的奖学金得主,有来自北京科技大学的李鑫,来自香港的何一非,来自长沙的匡定宇,在美国纽约读高中的周睿。他们都相当地优秀,给我印象最深刻的是一位来自巴西的奖学金获得者,他有自己的公司,一个人做了很多游戏,特别敬佩他。参加这次 WWDC,得到了很多来自前辈的帮助,十分感激,谢谢你们的建议和帮助。原本参加这次 WWDC 的目的就不是学什么技术,而是去感受 WWDC 的气氛,认识更多的人,聆听前辈的建议,多表达、多交流。这次参会也达到了自己的预期,整体还是比较满意的,因为英语不是很好,没有进一步的交流,留下了些遗憾。