讓不懂程式設計的人愛上iPhone開發(2017秋iOS11+Swift4+Xcode9版)-第1篇
點選上方“iOS開發”,選擇“置頂公眾號”
關鍵時刻,第一時間送達!
說明:本系列教程僅針對入門新手!已有iOS開發經驗的請繞行~
本系列教程編譯自iOS Apprentice:http://www.raywenderlich.com/store
適合看本系列教程的物件:
1.從未學過程式設計,或者對Swift語言一無所知,但要懂一些常用的英語單詞
2.從未學過iPhone/iPad開發
3.喜歡蘋果,充滿想象力,喜歡創造,同時也願意承受學習的壓力,願意投入時間和精力
如果你對iOS開發已具備豐富的經驗,請不要在此浪費時間!
如果你只是想了解下Swift語言的開發知識,那麼建議直接閱讀蘋果的官方文件,或另外一份教程(Swift開發入門系列教程)。
簡介:
人天生就喜歡遊戲,所以我們要開發的第一款應用不會是蒼白無力的”Hello World”,而是一個小遊戲,名為Bull’s Eye(拖拖看)。雖然這個遊戲非常簡單,但如果你從未接觸過程式設計,可能還是會遇到一些困難。但是不要擔心,即便你第一遍接觸這些新概念的時候還有些含糊不清,但我們會在整個系列的教程中不斷重複,直到它們成功的進入你的潛意識,甚至在夢中都不會忘記~
需要提醒大家的是,學習一門語言或工具的最好方式是練習和實踐。因此,對於初學者來說,千萬不要只是看過一遍了事,而應該自己手動敲入所有的程式碼,甚至故意修改其中的程式碼,刻意製造一些bug,然後想辦法解決。而在學完本教程之後,要立即開始實戰,同時多看蘋果官方的示例程式碼和Github裡的示例。不要害怕麻煩和錯誤,在解決麻煩和修正錯誤的過程中,你能更深入的領會為何要這樣做,而不僅僅是簡單的copy和paste。
在學習的過程中,會要求你自己做一些思考和練習,而不是完全被動的接受。僅僅知道前面有這樣一條路和自己親自走過這條路是完全不同的感覺。學習程式設計唯一有效的途徑就是在思考的同時要自己寫程式碼。
前面說了,本系列教程是針對完全的菜鳥來設計的。也就是說,哪怕你是個完全不懂程式設計的文科生,我們也有信心讓你愛上iPhone開發。當然,如果你懂一點程式設計知識,學習起來會快很多。
處女座或強迫症患者必讀:
如果你在第一遍開教程的時候有些東西不能百分百理解,最好的方式不是立即鑽牛角尖死磕到底,畢竟你沒有打過很好的程式設計底子,這樣做會讓你很快喪失信心,甚至很快放棄。碰到這類情況,哥建議你先把問題放在那兒(或者記下來),然後繼續看下去。等到整個教程看完了,回過頭再看你之前遇到的問題,如果還是不能理解,那麼再看一遍。(其實90%的可能性是,等你回頭再看當時覺得比相對論和量子力學還難理解的問題,現在就是小學加減法的水平)。因為在整個教程的學習過程中,我們會對一些重要的概念不斷重複,直到你覺得跟吃飯走路一樣自然。
如果說Objective-C曾經是學習iOS開發的最大障礙,那麼這最後一點點擔憂也不需要了,因為在2014年的WWDC上蘋果釋出了一個新的程式語言-Swift。 它可以讓開發者在很短的時間裡面輕鬆上手,如同javascript一樣,與此同時它的效能又不會比Objective-C差多少,起碼是在Java之上。
對當前的主流開發語言難度排個序,大致如下(從最難到最簡單,比較主觀~):
機器語言 >彙編> C++ >Objective-C > C, Lisp,Prolog>C# > Java > Python,PHP, Swift, Javascript, Ruby
正如剛才所提到的,對於彙編以下難度的語言,只要真正學懂一門, 再學其它的程式語言會輕鬆很多。畢竟在現實的世界裡,真正的程式猿和攻城師很少只會一門開發語言的。只懂一門開發語言能活到現在的要嗎是某個方面的頂級專家,要嗎就是走了技術轉管理的路線。
在我們的教程中,不會也不可能教你學習所有和iPhone,iPad開發的知識。iOS SDK(開發工具包)非常龐大,除了蘋果的官方技術文件,市面上沒有任何一個教材可以涵蓋iOS開發的全部內容。我們只會教你瞭解Swift和iOS開發所需具備的核心基礎。一旦你掌握了建築技術,可以自己去探索iOS開發的其它細節。
除了Swift語言和iOS開發工具包的相關知識,我們最重要的目的是讓你學會程式猿的思維方式。一旦你具備了這種思維方式,可以完成任何程式設計任務,不管是遊戲,工具,網路應用還是其它你能想到的東西。作為一個程式猿,需要思考解決各種計算問題,並創造性的想出解決方案。一旦掌握瞭解決問題的方法,不論多複雜的問題都可以解決。這才是本系列教程的終極目的,讓不懂程式設計的人愛上開發!
可以百分百保證的是,你在學習的過程中一定會遇到各種問題。程式程式碼中會出現無數莫名其妙的bug,讓你不知所措。但即便是一個擁有30年以上程式設計經驗的程式猿,也會經常遇到這樣的問題。我們只是人類,而人類的大腦在處理複雜計算問題的時候總會出錯的。不要害怕出錯,但我們會提供一些思維工具,教會你如何填平自己挖的坑。
在我身邊有很多人學習iPhone開發的方式是:
從大量的部落格和網站中拷貝貼上程式碼,而完全不理解這些程式碼的工作原理,以及該如何將這些程式碼嵌入到自己的專案之中。從網路中尋找解決方案是一種高效的工作方式,但你必須真正的理解這些程式碼的作用,才能舉一反三。
在本系列教程中 ,我們從一開始就會學習如何構建真正的應用,而不是所謂的baby應用,或是僅僅為了學習目的而設計的簡單示例。我們會詳細解釋其中的每一步操作,並附上豐富的圖片幫助大家來理解。
通過這些步驟,你將在製作這些有趣應用的同時逐漸掌握程式設計的思維和技能。當你最終學完本系列教程後,應該已經掌握了Swift和iOS開發工具包的精髓。更重要的是,你應該學會了如何用程式猿的思維方式來程式設計和解決問題,並真正開始製作屬於自己的應用。對此,我有百分之一千的信心!
當然,最最重要的是,希望大家在看完教程後,能夠愛上iPhone開發,愛上用程式語言來創造世界的樂趣~
那還等什麼,讓我們就此開始吧!
iOS7, iOS8,iOS9, iOS10,iOS11…
時光飛逝,世事無常。自2007年1月Macworld上喬幫主那一次驚天地泣鬼神的演講至今,竟然已經10年了!
10年過去了,喬幫主的音容笑貌彷彿還在眼前,只是,人面不知何處去,桃花依舊笑春風。
很感激Cook,在iPhone X的釋出會上,他仍然把Steve Jobs的一段話放到了開頭。
10年前,Nokia藐視群雄,Motorola和三星爭鬥不休,眾多國產品牌手機和山寨手機還在華強北幸福的收割著打工者腰包裡不多的毛爺爺。
10年後,Nokia虧損連連,被Elop的木馬計成功收入微軟旗下,繼而又宣佈放棄了這塊業務。
Motorola早就被Google收入帳下,當年的手機三雄只剩下三星還在行業裡興風作浪。
早期混得風生水起的HTC也在最近將手機設計業務部門出售給了Google。
反觀天朝,小米、魅族、華為一片混戰,而採用農村包圍城市戰略的Vivo和Oppo手機則成功登頂國內市場。
不過回顧歷史會發現,當天朝的土豪們佔據市場主動的時候,就意味著一個行業發展到了高峰期,即將開始走下坡路了。比如從前的PC,比如再之前的家電,莫不如是。
蘋果帝國好不容易佔據半壁江山,卻不幸遭遇王者的離去,在Tim Cook接手蘋果之後,遲遲沒有給大家提供足夠的驚喜。
熟悉蘋果的童鞋都知道,喬幫主總是會將一些重要的產品放在One more thing…上。
然而在Cook時代,除了數年前iPhone6釋出會上的Apple Watch上用過這個標誌性的驚喜宣言, One more thing…竟然從蘋果釋出會中消失了,直到今年。
除了硬體之外,蘋果今年在技術創新了也著實拿出了新的東西。在2017年6月的WWDC上,蘋果推出了針對虛擬現實開發的ARKit,以及針對深度學習和人工智慧的Core ML。可以說,這兩個SDK的釋出,再配合iPhone X的諸多創新,確實很有可能引領未來十年的智慧手機。
總之,如果對蘋果開發感興趣,那麼入手一臺iPhone X幾乎是必然的選擇。如果哪位朋友能確保買到,別忘了幫我一把~
還是談談iOS11吧。
其實上面要說的是,移動網際網路行業的發展速度太快了,iPhone作業系統到現在已經到了iOS11。本系列教程將完全基於iOS11,並採用全新的程式語言Swift4。
既然是學習一門全新的工具,自然要從最新的版本學起,因此,iOS11+Swift4+Xcode9是我們的第一選擇。
有舍才有得
學習iPhone開發不但可以作為一門興趣愛好,同樣還可以帶來不錯的收益(如果你能給使用者帶來不錯的產品,或者找到一份提供給力薪水的工作~)。但天下沒有白吃的午餐,進行iOS開發也是要花錢的。以下是你需要投資的:
1.一臺iOS裝置:
iPhone,iPad,iPad Pro,iPad mini或iPad Touch中的任一種。只用虛擬機器永遠沒法學會真正的開發。當然,為了支援最新的iOS系統,就不要買太老型號的裝置了,比如iPhone4之類的。
因為本系列教程將使用iOS11,所以大家也要了解下支援iOS11的裝置:
iPhone:
iPhone 7
iPhone 7 Plus
iPhone 6s
iPhone 6s Plus
iPhone 6
iPhone 6 Plus
iPhone SE
iPhone 5s
iPad:
12.9-inch iPad Pro (2nd generation)
12.9-inch iPad Pro (1st generation)
iPad Pro (10.5-inch)
iPad Pro (9.7-inch)
iPad Air 2
iPad Air
iPad (5th generation)
iPad mini 4
iPad mini 3
iPad mini 2
當然,如果你希望在自己的應用中提供虛擬現實(ARKit)或人工智慧(Core ML)相關的特性,那麼就必須使用支援A9、A10或A11晶片的裝置,具體來說是這些:
• iPhone 6s /6s Plus
• iPhone 7 / 7 Plus
• iPhone SE
• iPhone 8/ 8 Plus
• iPhone X
• iPad Pro
• iPad (2017)
個人建議直接購買可以支援ARKit的裝置。
2.一臺使用Intel核心處理器的Mac電腦:
需要安裝最新的macOS High Sierra。建議電腦的記憶體在4G以上,否則你會很痛苦的。。。
有人說可以用虛擬機器在PC上開發,我的建議是,寧可買一臺二手的MAC,也不要用PC開發。否則,你會遇到各種莫名其妙的問題,而且對提高你的程式設計思維沒有任何幫助。
對一般的入門開發者來說,如果不是同時還身兼設計師的重任,那麼一臺13寸的Macbook Air或Macbook Pro就可以滿足要求了。
3.一個付費的iOS開發者賬號
有了開發者賬號,最簡單的裝B方式就是當蘋果釋出了新的beta版系統時(特別是大版本的更新,比如從iOS9到iOS10),你可以第一時間在自己的iOS裝置或者電腦上體驗。
當然,最重要的是可以將自己開發的產品放到蘋果AppStore裡面銷售,賺取真金白銀,當上CEO贏取白富美從此走上人生巔峰。
如何申請付費的iOS開發者賬號
狠簡單,直接到這裡就可以了:
https://developer.apple.com/programs/ios
整個過程其實很簡單,不過你需要先註冊一個Apple ID,因為你的開發者賬號會與之繫結。其實一年99美元的費用並不高,如果你是真心想學iOS開發,建議還是花了這筆錢。 而且蘋果現在相當厚道的一點是,只要加入一個開發者計劃,就可以為iOS裝置,Apple Watch, Mac,Apple TV等蘋果全系列硬體產品開發應用。而在此前iOS開發和Mac開發是兩個完全不同的開發者計劃,每個都要單獨收費的哦~
當然,如果朋友們實在是吃了上頓沒下頓,或者說只是想觀望下,還不想花一毛錢。那麼你也可以直接用自己的Apple ID來登入,同樣可以免費使用Xcode開發工具,也可以在裝置上進行測試。但是沒法獲得最新的Beta版本,更不可能將產品釋出到App Store裡面。
強大的Xcode
Xcode是開發iPhone應用的主要工具。Xcode帶有一個文字編輯器,可以讓你敲入自己的程式碼,同時還有一個視覺化的工具由來設計應用的使用者介面。Xcode可以將你編寫的原始碼編譯成可執行的應用,並在模擬器(Simulator)或裝置上進行測試。同時,Xcode還帶有一個debugger(偵錯程式),用於幫助你發現程式碼中的錯誤(很遺憾,目前它還沒法自動幫你修復bug,這一天的到來還需要更給力的人工智慧)
下載Xcode的方法很簡單,直接從這個連結下載:
http://itunes.apple.com/app/xcode/id497799835?mt=12
當然,最通常的做法是在Mac App Store裡面搜尋Xcode,然後下載安裝就好了。
再次提醒,下載Xcode,Unity和Cocos2d-x等開發工具時一定要從官網下載,且只使用最慢的http下載連結下載,或使用官方的下載工具(比如Unity),不要使用任何第三方下載工具(比如迅雷之類的)。
如果你的作業系統不是macOS High Sierra,那麼請先升級作業系統。
本系列教程用的Xcode版本是最新的Xcode 9.0(9A235),而iOS版本是10.3。
很多老的iOS教程還在用Xcode和iOS之前的版本,所以當你閱讀那些教程的時候,請注意開發工具的細節差異。
關於計算機語言
語言是一種溝通工具。很多時候我們以為iPhone只是一部手機,其實它的核心是一個非常先進的微型計算機,只是同時具備打電話的功能而已。和其它計算機一樣,iPhone是通過數位電路的0,1指令來工作的。如果我們編寫軟體在iPhone上執行,就必須把原始碼翻譯成計算機可以理解的0,1指令。
幾十年前,人們不得不使用0,1指令和計算機直接交流。而隨著彙編和高階語言的出現,大多數的程式語言變得更接近於日常生活所使用的英語。這樣一來,人們更容易理解程式語言的使用。但同時也需要將人類可以理解的語言翻譯成計算機可以理解的0,1指令。
舉例而言,計算機內部會使用以下的語言:(不要關注其中的細節,你現在還看不懂):
事實上,計算機真正看到的指令如下:
上面的movl和calll指令只是為了方便人類理解。但即便如此,對我個人來說這種語言還是令人望而生畏。
今天的程式語言是下面這樣的(先不要深入細節,看看而已):
void HandleMidiEvent(char byte1, char byte2, char byte3, int deltaFrames)
{
char command =(byte1 & 0xf0);
if(command == MIDI_NOTE_ON && byte3 !=0)
{
PlayNote(byte2 + transpose, velocityCurve[byte3]/ 127.0f, deltaFrames);
}
elseif((command == MIDI_NOTE_OFF)
|| (command == MIDI_NOTE_ON && byte3 ==0))
{
StopNote(byte2 + transpose, velocityCurve[byte3]/ 127.0f, deltaFrames);
}
elseif(command == MIDI_CONTROL_CHANGE)
{
if(data2 ==64)
DamperPedal(data3, deltaFrames);
elseif(data2 == 0x7e || data2 == 0x7b)
AllNotesOff(deltaFrames);
}
}
看到這裡或許你才有點感覺了。即便你沒有任何程式設計經驗,但只要懂英語,就大概能判斷出上面程式碼的意思。以上程式碼是從一個音效同步工具的程式中擷取的。它使用C語言編寫,這門語言是上世紀60年代開發的,人們用它開發了著名的Unix作業系統(今天所有作業系統的鼻祖,包括Windows,Mac,Linux)。當然,iOS的核心也是基於Unix系統的。
而這裡我們要著重提一下蘋果的新程式語言Swift。Swift集成了傳統面向物件程式語言的特性,同時又具備函數語言程式設計的一些特徵。如果你曾經學過C#,Python,Ruby或者JavaScript,那麼會發現Swift有很多相似之處,很容易上手。
在2014年WWDC之前,用來開發iOS應用的語言被稱為Objective-C,它是標準C語言的擴充套件。使用Objective-C可以完成C語言所能完成的任何工作。同時它還添加了很多有用的特性,比如最重要的面向物件程式設計(Objective-Oriented)。Objective-C在前些年可謂門庭冷落,無人問津,除了鐵桿的Mac粉絲,幾乎瀕臨滅絕。但隨著2007年那一次偉大的iPhone產品釋出後之後,幾乎要被歷史遺忘的Objective-C語言再次進入人們的視線,甚至成為今的主流開發語言。Objective-C是2012和2013年的年度程式語言No.1。
目前仍然有大量的iOS專案使用Objective-C開發,畢竟一個新的程式語言普及需要幾年甚至更長的時間,不過iOS開發的未來顯然是屬於Swift的。
這裡不得不提到C++語言,事實上C++和Objective-C語言幾乎是同時出現的。和Objective-C語言的簡潔不同,C++語言幾乎包含了所有可能的特性。作為一門程式語言,它非常強大,且執行效率超高。事實上,所有的作業系統,以及大量的網路遊戲,主機遊戲和PC遊戲,遊戲引擎都會使用C++來開發。C++的問題在於,對於一個新手來說,它異常複雜,包括了基本語言結構,面向物件開發和模板、標準庫等諸多內容。學習C++還是頗有難度的,僅次於組合語言。不過C++11(2011年的新標準)這一C++的最新版本在很多方面做了大的改進,相信會讓這門“古老”而又強大的程式語言更加褶褶生輝。
在進行iOS應用或遊戲開發的時候,我們可以混合使用C,C++和Objective-C(簡稱為Objective-C++)。
此外,Facebook在2015年開源的React Native可以使用Javascript開發原生的iOS和Android應用。但是目前因為授權的問題,React受到眾多開發者的抵制。所以雖然很多公司的專案用的是React,作為新手的你也可能經常聽人提到,但是,謹慎考慮是否用它。
對於iPhone手機遊戲開發來說,由於Cocos2d-x引擎的迅速普及,C++的使用頻率也大大增加。此外,主流的3D商業引擎Unreal Engine4使用的就是C++語言。而另一個主流的手遊開發引擎Unity則主要使用C#和Javascript指令碼語言。
總之,對於iPhone應用開發來說,最主要接觸的語言是Swift和Objective-C,部分情況下也會用到C++和C,以及javascript等指令碼語言。
考慮到本教程的很多讀者從未接觸過任何程式語言,這裡對其它幾個主流語言的特點和作用稍微說明一下:
-
Java語言是當今最普遍使用的開發語言,它簡單易學(相對C++,C和Objective-C),且跨平臺性非常強,對網路開發的支援令人稱讚。很多企業使用Java語言來開發商業相關的網路應用。此外,Java語言也是開發Android應用的必備工具。
-
C語言是幾個主流開發語言(Java,C++,C#,Objective-C)的根基所在。常有人說,學好C語言,其它的語言就會一通百通。因為對硬體底層效能的支援超強,它的主要應用領域是嵌入式開發、遊戲引擎開發等偏底層的部分。C語言基本上已經取代了組合語言和機器語言在底層開發的作用。
-
PHP語言主要用於開發網路應用(特別是web伺服器端,也就是使用者不可見的部分,如結合MySQL進行後臺資料傳輸處理等),相對其它幾門語言,它非常容易上手。但它的侷限性在於除了web應用,對其它應用的開發力不從心。
-
Javascript語言主要用於開發Web前端(也就是使用者可見的部分),隨著HTML5技術的興起,Javascript語言必將是未來三到五年的主流Web開發工具。在主流的3D遊戲開發引擎Unity中,同樣支援使用Javascript作為指令碼程式語言。此外,Facebook的開源專案React Native可以讓開發者使用Javascript語言輕鬆開發原生的iOS和Android應用。
-
C#語言是微軟為了對抗Java語言的強勢而自行開發的一種程式語言。它和Java一樣簡單易學(同樣是相對的),但只能支援微軟的平臺。聞名業界的.NET就是C#語言的最佳搭配。但隨著微軟在移動網際網路領域的式微,C#的地位和前幾年比起來大有下降。
不過雖然.NET和C#在Web開發領域的空間越來越小,但C#也有新的應用領域,目前最火爆的移動平臺3D遊戲開發引擎Unity3D主要支援C#和javascript開發,而windows手機平臺的捲土重來也讓C#有了新的機會。
-
Python,Ruby,Perl同PHP語言的作用類似,屬於指令碼語言,對於開發網路應用非常高效。其中Python和另一種指令碼語言Lua還常在遊戲中作為指令碼語言使用。
對於Python要特別補充一點,在2016年下半年開始異常火爆的AI(人工智慧)技術中,特別是深度學習等領域,科學家和開發者大量使用Python語言和相關框架。曾經的超輕量級指令碼語言在一個超重量級的應用領域重獲新生,而且越來越受人歡迎。
-
Go語言,一門全新的系統級語言,由Google開發,於2009年釋出。雖然它的歷史非常短暫,但根據目前的發展來看,Go語言有望在未來十年成為一款成功的系統級語言。Go語言功能強大,可以替代C++。
在TIBOE2017年最新的程式語言排行榜上,Go語言已經從去年的38位急速攀升到14位。
-
Basic(Visual Basic)語言,曾經風騷一時,若干年前很多程式設計入門課程必教的開發語言。其學習曲線非常平緩,易於上手,但實際專案中用到的不是很多。
-
SQL語言,這是目前最重要的關係資料庫操作語言,其影響已經超出資料庫領域,在很多其它領域得到採用,比如人工智慧領域的資料檢索,軟體開發工具中嵌入SQL的語言等。SQL語言是一種互動式查詢語言,允許使用者直接查詢儲存資料,但它並不是完整的程式語言,沒有DO或FOR類似的迴圈語句,但可以嵌入到另一種語言中,通過介面傳送到資料庫管理系統。
-
組合語言,雖然現在是高階程式語言的天下,但效能超強的直接面向硬體的組合語言仍然在嵌入式開發領域佔據著一席之地。只是組合語言和硬體本身的關聯很大,所以普及性一般。目前組合語言的江湖地位已被C語言替代,但在某些領域還有自己的一席之地。
-
Kotlin語言,Google推出的一門全新的程式語言,用於在Android應用開發中取代Java的地位。
其它語言相對來說比較冷僻,或者曾經熱門但如今使用的人很少,用不到的時候可以不管。
為了讓大家對各種程式語言的江湖地位有所瞭解,不妨看看TIOBE 最新的2017年9月程式語言排行榜~
2014年9月的時候,蘋果的御用開發語言Objective-C是Top3的程式語言。但是自從2014年蘋果WWDC上釋出了新的Swift語言後,Objective-C的排名迅速下降到如今的Top18,而Swift則上升到了Top13。
科普知識到此結束,我們不打算對Swift語言的特性做詳細的介紹,不然很可能5分鐘不到你就睡著了。我們將在建立專案的過程中一步步解釋你所遇到的語言。包括什麼是變數,什麼是物件,如何呼叫方法(傳送資訊)等等。
當然,如果你需要一本隨時可以查詢的工具書,我們強烈推薦蘋果的官方Swift指南。
好了,有了這麼多的基礎做鋪墊,我們可以進入正式的開發了!
-
作者:王寒
-
連結:https://zhuanlan.zhihu.com/p/29746936
-
iOS開發整理髮布,轉載請聯絡作者授權