天天看點

蘋果獎學金獲得者:我的自學 iOS 開發曆程

蘋果獎學金獲得者:我的自學 iOS 開發曆程

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。是以有機會享受了加州的陽光,參觀了矽谷、斯坦福大學,很榮幸地與庫克等蘋果高管合影。

蘋果獎學金獲得者:我的自學 iOS 開發曆程

成長曆程

接觸計算機對我來說是個巧合,聯考填志願的時候原來一直想學建築學,但是由于聯考的失利的原因,最終選了物聯網工程,就是看好物聯網的發展,也沒好好了解過。我是從大學才接觸程式設計的,也是像大多數計算機學生一樣通過學習 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 組成的。

蘋果獎學金獲得者:我的自學 iOS 開發曆程

遊戲架構

我使用了 SpriteKit、GameplayKit 來組織遊戲邏輯。選用 SpriteKit 的原因是因為可以用 Swift 開發,而且對開發過 iOS 應用開發人員很好上手 SpriteKit 是蘋果的推出的遊戲引擎,對 iOS 來說是無縫的,但一大硬傷就是不能支援跨平台,隻能在蘋果的生态系統中使用。

GameplayKit 是去年新加入的架構,是一個不參與動畫和渲染,擁有基礎工具和技術架構,可提供遊戲資源、子產品、玩法設計以及系統規則方面的内容的架構。我用了 GameplayKit 的 Entity-Components 和 State Machine,來提高遊戲的可擴充性,減少代碼備援。剛開始做時并沒有用 GameplayKit,當我想要擴充遊戲内容時,按照原來的代碼會造成很多備援,就用 GameplayKit 花了一周時間進行代碼重構,之後的擴充相當簡潔優雅。

在 Entity-Components 中,實體(Entity)指的是遊戲的對象類型,一個元件(Component)處理處理特定的功能和動作,如渲染、操控、瞄準、旋轉、平動等。在這個架構中,組建一個實體就像在搭積木一般,通過不同的元件拼出不同的實體,能讓代碼能充分的利用。State Machine 是狀态機,使用狀态機管理代碼能讓狀态變化,控制更加簡單,清晰。

蘋果獎學金獲得者:我的自學 iOS 開發曆程
蘋果獎學金獲得者:我的自學 iOS 開發曆程

另外,我還內建了 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 開發曆程
蘋果獎學金獲得者:我的自學 iOS 開發曆程

代碼之外

對我來說最難的不是代碼,而是靈感和設計,這對程式員來說很難。完全不懂設計,就憑個人感覺來做,最後做出來的效果也還好,不算特别醜。

整個項目都是我一個人完成,這就意味着我承擔了很多角色,我是 iOS 工程師、後端工程師、前端工程師(一小部分)、設計師、産品經理、測試工程師,我不僅要寫代碼,還要設計、指定計劃、控制開發進度。整個過程我雖然遇到些意外、困難,一些地方還不完善,但最終還是如期完成了。我戲稱自己做了次全棧工程設計師,當然也遠遠沒有達到這個程度。我個人認為我能拿到這個獎學金的最大因素是我遊戲的靈感,感覺實作這個遊戲其實也不算難,最重要的是敢想敢做。

申請流程

每年5月左右蘋果會在 https://developer.apple.com/wwdc/scholarships/ 這個網址開放申請通道,這上有一些關于申請獎學金的具體要求,有興趣的可以看一下。申請這個獎學金需要送出一款自己做的 App,不管是上架的還是非上架的都可以,另外還需要填寫一些個人簡介,關于你用到什麼技術,遇到什麼困難怎麼解決等的問題,這些其實都是次要的,另外還要送出英文的學籍證明。最後隻要靜等最終結果的郵件即可。

申請建議

通過閱讀申請要求,不難發現創意和所用技術很重要。是以做的 App 一定要有創意, 多用 Apple 的技術,尤其是最新的那些,用最新的特性組合創造更多的可能,另外關注 Use Accessibility,這一部分蘋果也極其的重視。還可以做一些幫助一些患有特殊疾病的 App。另外界面一定要好看,蘋果給我們獎學金得主一個建議就是:做一個 App 時,要 Design first。

WWDC 見聞總結

這次 WWDC 還認識了一些來自中國的獎學金得主,有來自北京科技大學的李鑫,來自香港的何一非,來自長沙的匡定宇,在美國紐約讀高中的周睿。他們都相當地優秀,給我印象最深刻的是一位來自巴西的獎學金獲得者,他有自己的公司,一個人做了很多遊戲,特别敬佩他。參加這次 WWDC,得到了很多來自前輩的幫助,十分感激,謝謝你們的建議和幫助。原本參加這次 WWDC 的目的就不是學什麼技術,而是去感受 WWDC 的氣氛,認識更多的人,聆聽前輩的建議,多表達、多交流。這次參會也達到了自己的預期,整體還是比較滿意的,因為英語不是很好,沒有進一步的交流,留下了些遺憾。

繼續閱讀