iOS開發包含哪些內容?
題主想對iOS開發有一個整體的認識。希望知道如果想具有獨立開發普通APP的能力,意味著需要掌握哪些內容。比如需要掌握哪些語言、框架、環境、API、庫、工具、常識等等。這些內容互相是什麼關係。謝謝大家!
例如,Web開發包含的內容有:一種後端語言:PHP、Ruby、Python、Java、C#等各種前端語言:JS、CSS、HTML框架:ThinkPHP、ROR、Web.py、SSH
一種資料庫:MySQL等伺服器:Apache等操作系統:Linux、windowsserver等其他:HTTP常識、域名常識等
更新:答案有一些新的內容整理成了一篇文章,感興趣可以移步這裡
iOS開發路線簡述
-------------割-----------------------------------
首先我講的是iOS原生應用通過OC語言的開發,環境:MacOSX+Xcode,MacOSX沒錢只能裝黑蘋果,是可以的,有錢最好買mac。語言:Objective C,通常寫作objective-c或者obj-c,是根據C語言所衍生出來的語言,繼承了C語言的特性,是擴充C的面向對象編程語言。關於基本概念可以參考,十分鐘讓你明白Objective-C的語法(和Java、C++的對比) 。
框架:php的框架我不是很熟,首先iOS開發採用的是MVC模式,就是把項目分為Model、View和Controller三層進行管理。然後iOS的系統架構分為四個層次:核心操作系統層(Core OS layer)、核心服務層(Core Services layer)、媒體層(Media layer)和可觸摸層(Cocoa Touch layer)。這四層每層都有一系列相對應功能框架,比如負責app界面的UIKit就在Cocoa Touch layer。
API:iOS的四個層次就是蘋果公司iOS開發者提供的api。
庫:第三方庫的話,可以查看github上object -c的倉庫排名,Search · location:china · GitHub 。工具:
第一是多人協作的問題,你可以用svn或者git,git是比較流行的,但是大多數的公司還在用svn;第二,iOS的數據持久化有很多方案,最高效的就是sqlite,在mac上有很多sqlite的可視化管理工具,我用的是sqlitemanager。第三,關於查看模擬器或者真機的沙盒內容,模擬器可以使用SimPholders,真機可以用ifunbox。第四,屏幕取色工具,sip。第五,另外xcode也可以安裝很多輔助工具,例如,格式化xcode代碼的ClangFormat,第三方庫管理工具CocoaPods,壓力測試工具uiautomonkey。第六,移動開發有一些常用的平台的,比提供社會化分享、統計分析等的友盟,sharesdk;內測平台fir.im,蒲公英;雲測平台testin;廣告平台google的admob
另外講一些常識:
首先是賬號相關問題,如果要真機調試,用黑蘋果是沒辦法實現的。真機調試需要證書,如果你沒有99美元買賬號,可以在淘寶上買調試證書,如果要上傳appstore則需要買99美元的賬號。其次關於OC語言,OC是一個編譯型的語言,通過gcc編譯器把object-c代碼編譯成機器指令。OC具有一些動態特性,包括動態類型,動態綁定,動態載入,這讓OC稱為一門特殊的語言。然後一般寫iOS的UI有三種方式。xib,Storyboard以及代碼創建。我覺得代碼是效率最高也最厲害的,具體對比可以看喵神的博客代碼手寫,xib和StoryBoard間的博弈;關於iPad和iPhone如果要適配的話是不大好的,最好設計兩種UI。關於看書,對於某一個東西入門的話,其實不適合看書,或者你想看隨便挑一本入門的書就跟著看就好了。
但是不過後期要精通我覺得幾乎應該把所有iOS好的書看完,我在知乎曾問過有什麼iOS進階的書,這個回答非常中肯,有什麼iOS進階的書推薦嗎?還有關於一些學習的網站,
code4app,iOS開發社區 – 開源中國社區,cocoachina是國內常用的三大代碼庫網站,國外有,技術問答stackoverflow,代碼庫cocoacontrols,版本控制的網站github,並且歡迎關注我的github,coderyi · GitHub
這裡有一個別人整理的iOS學習資料,
馬上著手開發 iOS 應用程序 (apple官方整理),Aufree/trip-to-iOS · GitHub(資料最全) ,iOS資源 - Code4App.com ,iOS開發60分鐘入門 ,iOS開發從新手到上架,iOS開發路線簡述 。最後附贈一張傳智播客上的iOS學習路線圖 ,原圖鏈接(iOS完整學習路線圖),這一些東西只是iOS開發的冰山一角,哪一東西要做好都要學很多東西,學好最重要的就是你對他的熱情,路漫漫其修遠兮,祝你早日學成。iOS開發包含的內容有:
語言:objective-c,swift設計模式:mvc資料庫:sqlite coredata(一套api)操作系統:mac庫:太多了,ASI,AFN,FMDB這種大多數都會用到 github一搜一大把,很多不用自己寫多人協作:svn,git 經常要用github git是必須會的其他通用知識:http,socket等等至於工具,一上來整這麼多沒意義,你得會做點東西才用得上工具是不是。
有需求就會去分析去找解決方案。比如你發現xcode的文件結構是虛擬的,建了文件夾磁碟上沒有,很不好管理,那你就會去找解決方法,然後發現synx就可以解決這個問題。工具是這樣搜索,用起來的。iOS開發者有價值的工具集 前人也是總結了不少。
然後一般寫iOS的UI有三種方式。xib,Storyboard以及代碼創建。我覺得代碼是效率最高也最厲害的;關於iPad和iPhone如果要適配的話是不大好的,最好設計兩種UI。
不同意,代碼確實是最厲害的,但不是效率最高的,對個人而言,autolayout sizeclass絕對是storyboard更有效率,點兩下的事情代碼幾十行(當然基本都是自動補全,我還是嫌多),適配問題有了sizeclass也只需要一套UI了。但為什麼說個人而言,因為企業一般因為團隊協作問題不喜歡用storyboard,容易發生衝突,所以代碼,IB都得會,什麼適合用什麼。
除了上面答案的那些,
我也稍稍補充一下資料Swift語言指南 By @SwiftLanguageLearn iOS Online
Git教程 - 廖雪峰的官方網站iOS Developer Library目前想到這麼多,先這樣吧。題主說的是
希望知道如果想具有獨立開發普通APP的能力
既然這樣....
語言:建議Swift,而不是OC。現在公司里可能還是OC,但是Swift更加簡單好學,是未來iOS開發的主要語言,不在公司與人協作而是自己獨立開發App的話,Swift的開發難度比OC低,開發速度比OC快,而且現在Swift的資料也比較多了(當然大部分是英文資料,中午資料還是比較少)
資料庫:本地緩存一般用SQLlite。界面:主要storyboard,配合UIKit
設備:
- 最好有一台Mac,資金不夠不需要移動性的話可以買Mac mini,筆記本開發iOS,Air就可以,當然有Pro更好。
- 一台iOS設備(itouch,iPhone,iPad),實在沒錢可以用Mac自帶的iOS模擬器,調試時速度更快,但是一些不能調試(比如拍照)
- 開發者賬號,在蘋果官網買,但你需要雙幣的銀行卡,沒有雙幣銀行卡就去某寶。沒錢買開發者賬號又想真機調試也可以去某寶買個調試的賬號。
開發工具:Xcode
學習建議:看一些基礎的教學視頻,然後邊做邊學,常用Google英文搜索,多去Stackoverflow逛逛,多去Github上folk些demo源碼,慢慢就會了。
我也是一個多月前才開始學的,現在都做出一個和知乎iOS客戶端差不多的東西了(當然我只做客戶端,伺服器端是同學寫的)另外還寫了兩個小項目,一個以及提交App Store審核了。之前只學過C,C++和Java,沒有學過OC。但是後來Swift學得差不多了之後,我發現我竟然可以看懂OC的代碼(;?;)列一堆資料列表看到就怕了,我覺得實踐是最好的入門方式。
首先想個簡單或者複雜的App項目,自己給自己提需求,一點點實現,遇到問題就查谷歌,很自然的就掌握了。
第一肯定要稍微學習一點Objective-C。如果你學過 C/C++ 或者其他類C語言的話,還是很容易上手的,基本和C是一樣的。內存管理上,現在有 ARC 比以前要方便不少,可以不用去管,等玩得多了,自然要去考慮這些問題的時候再深入了解不遲。
界面上的東西,Xcode、IB的使用,找一兩篇入門的帖子看了就會了。複雜的界面,需要時谷歌會教你怎麼做的。如果不夠,就自己看明白再創作了。
其他功能,就看你的App需求。比如如果你要播放音樂,你會查到 AVPlayer 相關的內容。
如果你要用到http網路,會找到 NSURLConnection 相關的東西,覺得麻煩,也會找到 MKNetworkKit 這種封裝好的庫。
存數據,你會找到 NSUserDefaults, NSFileManager, 找到 SQlite3、Core Data 等等,按自己的需要和喜好來選擇。
。。。iOS開發所包含的學習內容包括:
環境:Mac系統自帶的OSX系統,黑蘋果或者虛擬機也可以。編譯環境為Xcode。
--------------------------------------------------------------------------------------------------------------------------------------------
語言:objective—C語言和Swift語言。
學習objective—C還是swift,這要視情況而定。如果你要把學習iOS開發當做一個業餘愛好,那麼從swift語言開始學起吧。swift是一種現代語言,相對於Objective—C來說,也更加簡單好學。你可以直接學習蘋果發布的官方的swift文檔(中文版)就ok。
但是,如果你將從事iOS開發為職業,那最好是選擇學習Objective—C。要知道目前的絕大多數應用都是用objective—C開發的。swift語言在2014年才正式發布。目前以swift語言為主要開發語言的公司還不多。完全零基礎的小白想系統學習Objective—C,可以學習我贏職場的iOS開發教程,這款教程很經典。其中Objective—C部分是完全免費的。
我贏職場iOS實戰開發工程師(Swift/Apple Watch/PHP)
其實,不管你選擇哪一門語言,學到最後你將發現,只要學會iOS SDK,使用哪種語言並不是很重要。學了一種語言之後,對於學習另一門語言也會變得更加容易。
--------------------------------------------------------------------------------------------------------------------------------------------工具:
iOS開發工具多如牛毛,這裡整理了對開發者有幫助的5個iOS編程工具,當然作為新手的話,這些工具完全沒有必要接觸。能把Xcode玩熟練已經不錯了。
1、名稱:CodeRunner
CodeRunner是一款輕量級,可以編寫和運行多種語言的編輯器,它不需要安裝額外的語言環境就可以執行多種語言代碼。如果開發者想要測試一段代碼或者一個API具體的功能,用Xcode未免過於麻煩,而CodeRunner卻恰巧彌補了Xcode在這方面的欠缺。開發者只需要在CodeRunner中編寫一個短小的代碼片段,即可測試代碼和API的具體功能。此外,CodeRunner能加快開發者的編程速度,所以開發者可以在很短的時間內完成代碼編寫工作,通過CodeRunner測試無誤後,就可以把它拷貝回Xcode的項目中,極大地提高了開發者的工作效率。
2、名稱:AppCode
AppCode是全新的Objective-C的IDE集成開發環境,旨在幫助開發者開發Mac OS X和iOS系統的相關應用程序。
3、名稱:Chocolat
Chocolat是Mac系統上最新出現的一款強大的文本編輯器,支持vim模式、多種編程語言、窗口分割、標籤頁、色彩主題等功能。另外Chocolat具有實時的代碼檢錯功能,它可以在編寫代碼時檢查代碼的正確性(目前只支持Ruby、Python、PHP和JavaScript)。
4、名稱:Alcatraz
Alcatraz是一個開源的Xcode管理器,可讓你更快捷地發現和安裝插件、模版和顏色方案。只需要簡單地點擊或者勾選,而無需手工克隆或拷貝文件。
5、名稱:Mou
對於熟悉Markdown的人來說,Mou是一款不錯的文本編輯器(Mac平台)。相比同類型產品,Mou 在功能性和易用性上都有眾多特色,在其簡單的界面之後,不僅擁有自定義樣式、增量搜索、中文字體「漂移」優化,還支持終端命令行啟動、內容發布、豎版文字布局,甚至還可以作為任務列表使用,其Markdown雙欄布局的實時預覽和同步滾動功能更是被眾多應用借鑒和採用。
尤其作為Mou的開發者——羅晨並非科班出身,卻做出一款世界流行的優秀產品,這無疑更加給了國內眾多「野生程序員」們莫大的動力。
--------------------------------------------------------------------------------------------------------------------------------------------框架:常用基礎框架包括:
1、名稱:Foundation 功能:提供OC的基礎類(像NSObject)、基本數據類型等
2、名稱:UIKit 功能:創建和管理應用程序的用戶界面
3、名稱:QuartzCore 功能:提供動畫特效以及通過硬體進行渲染的能力
4、名稱:CoreGraphics 功能:提供2D繪製的基於C的API
5、名稱:SystemConfiguration 功能:檢測當前網路是否可用和硬體設備狀態
6、名稱:AVFoundation 功能:提供音頻錄製和回放的底層API,同時也負責管理音頻硬體7、名稱:CFNetwork 功能:訪問和配置網路,像HTTP、FTP和Bonjour Services
8、名稱:CoreFoundation 功能:提供抽象的常用數據類型,如Unicode strings、XML、URL等
9、名稱:CoreLocation 功能:使用GPS和WIFI獲取位置信息
10、名稱:GameKit 功能:為遊戲提供網路功能:點對點互聯和遊戲中的語音交流
11、名稱:AddressBook 功能:提供訪問用戶聯繫人信息的功能
12名稱:AddressBookUI 功能:提供一個用戶界面,用於顯示存儲在地址簿中的聯繫人信息
13、名稱:AudioToolBox 功能:提供音頻錄製和回放的底層API,同時也負責管理音頻硬體
14、名稱:AudioUnit 功能:提供一個介面,讓我們的應用程序可以對音頻進行處理
15、名稱:MapKit 功能:為應用程序提供內嵌地圖的介面
16、名稱:MediaPlayer 功能:提供播放視頻和音頻的功能
--------------------------------------------------------------------------------------------------------------------------------------------
常用第三方框架:
1、名稱:Reachability 功能:用來檢查網路連接是否可用:包括WIFI和WWAN兩種工作模式。
2、名稱:ASIHTTPRequest 功能:ASIHTTPRequest是對CFNetwork API的一個包裝,它提供了一套更加簡潔的API,使用起來也更加簡單。
3、名稱:MBProgressHUD 功能:支持各種狀態載入的提示效果,以及帶進度的提示效果。
4、名稱:SVProgressHUD 功能:SVProgressHUD和MBProgressHUD效果差不多,不過不需要使用協議,同時也不需要聲明實例。
5、名稱:SDWebImage 功能:用於非同步下載網路上的圖片,並支持對圖片的緩存等。
6、名稱:UIActivityIndicator-for-SDWebImage 功能:用於為SDWebImage在UIImageView載入圖片時,顯示載入效果(UIActivityIndicatorView實現)
7、名稱:UIImage+Resize 功能:提供多種方法為圖片設置透明度、圓角、裁剪、調整大小等
8、名稱:ImageCacheResize 功能:整合了SDWebImage和UIImage+Resize的功能,用於圖片的非同步載入、緩存、以及下載完成後調整大小並顯示在UIImageView上。
9、名稱:EGOTableViewPullRefresh 功能:下拉刷新
10、名稱:CMPopTipView 功能:CMPopTipView用於在一些視圖上顯示提示信息
--------------------------------------------------------------------------------------------------------------------------------------------
庫:
iOS開發的庫數量繁多,魚龍混雜。在日常工作中,一般會經常接觸到下面九個庫。
1、名稱:SSToolkit 功能:幫助開發者解決一些普遍問題。
2、名稱:GPUImage 功能:提供各種各樣的圖像處理濾鏡,並且支持照相機和攝像機的實時濾鏡
3、名稱:SocketRocket 功能:是一個WebSocket客戶端,採用Object-C編寫,穩固易用。
4、名稱:HockeyKit 功能:能顯著提高整個Beta測試過程
5、名稱:JSONKit 功能:Objective C平台上比較常用的JSON數據訪問工具
6、名稱:MagicalRecord 功能:清理Core Data代碼,並且可以在必要的時候進行NSFetchRequest修改
7、名稱:Restkit 功能:可降低JSON/XML的處理的資源消耗,支持通過SBJSON和YAJL進行JSON解析
8、名稱:TestFlight 功能:測試應用的時候會經常用到。可以輕鬆採集測試用戶的UDID和iOS 版本、硬體版本,並發送給開發者
9、名稱:AFNetworking 功能:是一個輕量級的iOS網路服務類庫。它建立在NSURLConnection和NSOperation等類庫的基礎上,讓很多網路通信功能的實現變得十分簡單。
--------------------------------------------------------------------------------------------------------------------------------------------最後,給大家一個iOS學習知識體系圖:未完待更,先匿了。
語言:
語言有兩種,object-c、swift,目前剛好處於語言交替的一個過程,所以如果是自己獨立開發個人項目的話建議直接學習swift,如果是準備以此找一份工作的話建議還是先學好object-c,因為現在大部分的公司項目都是用oc寫的。環境:
系統環境為mac電腦自帶的osx系統,當然也可以自己安裝黑蘋果或者虛擬機。編譯環境為:xcode,其他的再折騰一下終端就OK了。系統框架:
如果只是入門的話,iOS開發就熟悉一下基本UIKit框架,mac開發就熟悉一下AppKit,其它的庫用到了就大概看一下就可以了。第三方框架:
AFNetworking,網路請求類JsonModel,數據模型解析MJRefresh,tableview下拉加在上拉刷新SDWebImage,圖片載入MBProgressHUD,載入用的菊花入門的話掌握上面就可以了,下面的可以大概了解一下子:
友盟,一個主要分享,其它還集成了一堆雜七雜八的環信,將xmpp做了二次封裝,開發起來沒啥難度了,但是功能上受限制fmdb,sqlite資料庫第三方管理庫 xmpp,IM通訊第三方庫AsynSocket,iOS中對socket的一個封裝工具:
數碼測色計(系統自帶),用於取屏幕上的顏色點cornerstone,svn管理工具sqliteManager,資料庫文件管理工具bejson,一個用來查看解析json數據的網站changes,一個二進位比對工具,比較工程代碼的wireshark,最喜歡的一個抓包工具,強大到沒得法蒲公英,一個應用分發平台,內部分發測試用的prep,製作一個1024*1024大小的圖標,拉進去就可以自動生成iOS開發所需的整套圖標Axure,畫原型的軟體,我一般是用它打開原型,不過非必需Mou,用來寫博客的一個工具IntelliJ IDEA ,應該是折騰javaScript的時候安裝的,不過基本上沒用過奇妙清單,提高效率的一個工具,可以將自己當天需要完成的任務記錄下來,然後一個個的去完成X-Lite ,語音電話,學習sip協議的時候用的WebStorm,JavaScript編譯器,聽朋友說這個沒有Sublime好用,但是我用習慣了,加上js也只是需要做些小界面,所以沒怎麼折騰再推薦幾個網站:
cocoachina,裡面有很多iOS開發的大神github,開源社區,裡面有很多開源的代碼,不過建議簡單學習一下git的用法,我一般是用終端操作的,感覺用起來很爽。我看的比較多的幾個博客:
葉孤城___ - 簡書(網傳是ios界的吳彥祖,但我覺得還沒我帥,哈哈哈)Garan no dou念茜的博客羅朝輝(飄飄白雲)sunnyxx的技術博客OneV"s Den推薦兩篇文章和幾本書籍:
禪與 Objective-C 編程藝術https://github.com/oa414/objc-zen-book-cn《招聘一個靠譜的 iOS》—參考答案:https://github.com/ChenYilong/iOSInterviewQuestions編寫高質量iOS與OS X代碼的52個有效方法(進階的時候看,初級就別看了,沒項目經驗你看的沒啥收穫)精通iOS開發(David Mark寫的,別買錯了,寫的蠻詳細的,初級也可以看)精通tcp/ip協議(進階的時候看,個人感覺想往高級程序員發展至少要對協議層有一定的了解)框架和工具還有蠻多,但是一時半會兒想不起來,後期補上。
寫的比較亂的,有時間我整理一下。可選編程語言,objective c 為主。cocoa 編程框架(其實還有些比較偏門的,這裡不提了)。人機交互設計知識,可以讀apple的設計指南。這個時代高質量的東西也多,建議 google 和 MS 的也都讀一下。還有就是各種相關服務的知識,包括如何申請和使用,有一些是技術問題,有一些是行政問題,如何獲取相關資格,如何提交,如何審核,等等。
從入門開始學習圖,來自培訓機構大神進階圖 來自李明傑
入門:
Objective C。Interface Builder, 懂得如何設計界面,鏈接到代碼。進階:簡單的界面動畫。如何進行http網路訪問。首先我講的是iOS原生應用通過OC語言的開發,
環境:MacOSX+Xcode,MacOSX沒錢只能裝黑蘋果,是可以的,有錢最好買mac。
語言:Objective C,通常寫作objective-c或者obj-c,是根據C語言所衍生出來的語言,繼承了C語言的特性,是擴充C的面向對象編程語言。關於基本概念可以參考,十分鐘讓你明白Objective-C的語法(和Java、C++的對比) 。
框架:php的框架我不是很熟,首先iOS開發採用的是MVC模式,就是把項目分為Model、View和Controller三層進行管理。然後iOS的系統架構分為四個層次:核心操作系統層(Core OS layer)、核心服務層(Core Services layer)、媒體層(Media layer)和可觸摸層(Cocoa Touch layer)。這四層每層都有一系列相對應功能框架,比如負責app界面的UIKit就在Cocoa Touch layer。
API:iOS的四個層次就是蘋果公司iOS開發者提供的api。
庫:第三方庫的話,可以查看github上object -c的倉庫排名,Search · location:china · GitHub 。
工具:
第一是多人協作的問題,你可以用svn或者git,git是比較流行的,但是大多數的公司還在用svn;
第二,iOS的數據持久化有很多方案,最高效的就是sqlite,在mac上有很多sqlite的可視化管理工具,我用的是sqlitemanager。
第三,關於查看模擬器或者真機的沙盒內容,模擬器可以使用SimPholders,真機可以用ifunbox。
第四,屏幕取色工具,sip。
第五,另外xcode也可以安裝很多輔助工具,例如,格式化xcode代碼的ClangFormat,第三方庫管理工具CocoaPods,壓力測試工具uiautomonkey。
第六,移動開發有一些常用的平台的,比提供社會化分享、統計分析等的友盟,sharesdk;內測平台fir.im,蒲公英;雲測平台testin;廣告平台google的admob
好吧,也許重複了,不過基本上就是如此。
個人也有一些今年iOS開發的視頻教程,不會需要的朋友加我好友2352149755我傳送給你吧。
另外就是你們所想要的的結構圖,iOS開發內容之間的關係。
GitHub - shaojiankui/iOS-Route: iOS學習路線
受益匪淺
李明傑的視頻必看,南方口音很有喜感,一驚一乍的,各類語言基礎紮實,善於圖形表達思路,我是通過他視頻自學
自學,iOS,怎麼自學的呢?基本的硬體要求不提了,個人方法,去淘寶買了套傳智的視頻,幾塊的都有。李明傑老師很牛,非廣告,李明傑老師講課非常有激情。
推薦閱讀:
※哪些 C++ 項目的源代碼最值得閱讀?
※編譯器中都有哪些演算法?
※軟體崩潰(crash)之後的報告(report)究竟是個什麼流程?
TAG:編程 | iOS開發 | Objective-C | 移動開發 | Swift語言 |