你的位置:首页 > 操作系统

[操作系统]一个iOS开发者的修真之路


  在微信上有童鞋问我iOS开发者的入门标准是神马?这个问题难到我了,而且贸然给一个答案出来的话,必定会有万千高手来喷。

  凡人修仙,仙人修道,道人修真。当我们还是一个在青石板上蹲马步汗水涔涔的废柴时,或许天空中偶尔会有御剑飞行的仙人路过。金色的阳光洒在仙人随风舞动的剑穗上,此时不禁会油然而生一种冲动,希望有一天能成为这样的高手,自由飞翔。只是路漫漫其修远兮,漫漫修真路,从一个后天废柴到羽化升仙成为大神需要太多的努力。

4b41d9c45441f34d9851b604a904adb9_b

  我个人还属于iOS开发的外门弟子,正在入门的门槛上,所以还是一起来看看iOS开发内门弟子给出的答案吧。

  参考图详见pdf文档,这里大概归纳下。

  Objective-C 语言

  欲练神功,必先自宫!除非是仙人转世,任何一个修真者都要从最基本也最痛苦的炼体开始。对Objective-C语言的学习可以对应修真者的炼体或者后天境界。经过后天境界的苦修,一个修真者可以轻松打败几个普通流氓,不过当十几个甚至更多人一拥而上时,还是赶紧逃命吧。 欲学iOS开发,必先学习Objective-C! iOS开发中用到的主要编程语言就是Objective-C语言,虽然也可以使用C和C++语言混合编程,不过Objective-C语言是最核心的部分。

  其中又包括:

  面向对象编程基础(类和继承,变量和方法的作用域,MVC基本概念,分类)

  方法和函数(消息,类定义和属性,与C/C++的混合编程)

  内存管理(strong/weak, ARC自动引用计数,自动释放对象)

  代码设计模式(Block块语句,Target/action,协议)

  UIKIT(视图层级,绘制事件,触摸事件,动画)

  多媒体(配置,AVFoundation, C语言的API)

  核心iOS7类库

  编程语言只是基础,真正的开发利器是iOS7的核心类库。掌握了Objective-C语言只是让你从一个普通人变成侠客,但是离真正的修真高手还有很长的路。从只懂得炼体的后天境界晋升到挥手间敌人灰飞烟灭的练气或者先天境界,就必须掌握核心iOS7类库。

  其中又包括:

  相机和microphone

  社交网络与分享

  CoreData数据持久化

  Foundation,又包括Application loop(应用循环),Threads(线程),Networking(网络)。

  MapKit,也就是如何使用地图

  Passbook,也就是和移动支付系统的整合

  CoreLocation,如何在茫茫人海之中找到你所爱的位置

  Bluetooth,蓝牙模块,如果你要开发周边硬件设备,这是必不可少的

  Notifications,消息推送,又包括Local本地和Push(APNS)推送

  CoreMotion, 比如陀螺仪相关的东西

  GameKit,和第三方游戏设备(手柄)相关的东西

  SpriteKit,类似cocos2d的2D游戏引擎

  第三方依赖库管理

  晋升先天之后,一个修真者就脱离了低级趣味,成了修真队伍的真正成员。虽然自身对天地大道的感悟和修炼是根本,但如果有那么几件灵器、仙器甚至神器在手,无论是保护自身的护身法宝还是令敌人胆寒的攻伐之器,都可以让你在修炼的路上笑傲江湖。

  对iOS开发者来说,善于借助第三方类库的强大力量来实现产品的各种功能,就如同修真者手持神兵法宝一般,无往而不利。神器法宝多了也不好办,所谓财不外露,拿着一大堆法宝在外面炫富是修真者大忌。这个时候一个能容纳万物的储物乾坤袋就成了修真者的梦想之物。好在有CocoaPods,它比修真者储物袋更神奇的是,你只需使用CocoaPods,就可以自动将各种优秀的第三方类库包含在项目之中。一个iOS开发者如果不懂CocoaPods,简直就是修真界的穷DS一枚。懂CocoaPods的iOS开发者不说立马晋升高富帅,起码也会成为中产阶层之一。

  对CocoaPods的使用请参考这里:CocoaPods安装和使用教程

  Xcode 5

  修真者都喜欢天地灵气充足的修炼之地,iOS开发者也非常需要一个强大的开发环境帮助自己打理项目。

  寻找一个理想的修炼之地对于修真者是奢侈的,因此大量散修选择加入各种宗门或学院,否则万难有出头之日。

  对于iOS开发者则可以省掉这份烦恼,因为所有iOS开发者都可以免费享受最强大的iOS开发环境-Xcode 5。

  对于Xcode5的学习又包括:

  项目管理:包括文件结构,导航,Build 设置,属性列表等

  代码编辑器:包括如何高亮,查找,自动完成,查看文件,Assistant Editor等等。

  Interface Builder: 如今的Interface Builder(界面编辑器)是内置在Xcode中的,这部分又包括Storyboards和xib的使用,控件类型及属性设置,IBOutlet和IBAction,自定义类,Tag,视图文件结构等。

  代码调试工具:包括lldb,断点,日志等

  Instrumentation工具:包括内存泄露和CPU使用率的监控等。

  Git版本管理:包括repository的管理,branching和merging。

  详情请参考:

  开发者工具概述

  软件工程

  修真者除了修身练气,还要炼神,也就是修炼自己的神魂。神魂的层次提高了,不光对自身的修炼有益,还可以控制其他修真者当自己的小弟,或者有节操点,吸引其他修真者为了自己的目标共同奋斗(比如一起探索某个神府)。

  iOS开发者除了知道如何具体写代码,还要在思想上提升自己的档次,站在一个更高的角度看待项目的开发和管理。这个时候就需要了解一些软件工程的概念。

  对于软件工程,需要掌握的内容如下:

  应用程序的架构:比如模块化和SOA,逻辑封装等

  敏捷过程:比如项目所有者和用户场景,迭代开发,高效沟通等。其中迭代开发步伐又包括测试和结对编程,CI和代码审阅,QA质量测试和调试。

  项目管理:比如项目规划和评估,工具和文档化,Licensing等。

  iOS开发者的神通功法1-Tests测试

  修真者乃逆天而为,其中所遇到的艰难险阻是常人难以理解和接受的。当自身实力到了一定的程度之后,就要承受天威的打击-各种雷劫,比如四九雷劫,六九雷劫,九九雷劫,飞升时的万雷劫。不管你自身实力如何强大,肉身如何抗操,元气如何充盈,神魂如何逆天,在雷劫时一不小心就会永坠轮回。

  在iOS开发时,不管我们如何努力熬夜,如何苦逼编码,到了测试的时候发现程序直接挂掉了,简直是亲者痛仇者呵呵的不可承受之重。

  因此一个有经验的iOS开发者往往会采用测试驱动开发的思路。

  大概要学习的内容包括:

  测试类型:单元测试,功能测试,整合测试,性能测试,可用性测试,回归测试等。

  连续测试:continuous integration,自己去google

  XCTest:Xcode特有的测试方法。

  关于这部分的内容详细参考:

  Quality Coding

  TDD的iOS开发初步以及Kiwi使用入门

  Xcode Overview: Unit Test Your App

  iOS开发者的神通功法2-Git版本控制

  常言道,一人得道鸡犬升天。修真者在飞升之后往往会将自己的修炼资源留给家族后人或好友使用。一方面是因为基因的自私天性,另一方面则是因为希望通过这种方式让更多的追随者可以一同飞升,在更广阔的大千世界中可以携手打拼。

  iOS开发的独行侠时代已经过去了,很多团队中的产品或项目开发是协同进行的,即便是纯粹个人开发,也经常需要用到版本控制工具。

  因此,iOS开发者需要对Git版本控制有一定程度的了解。

  具体包括:

  版本控制系统:其中又包括分布式VCS,Branch,Merge,Diff

  GitHub的使用:Fork和Pull requests

  config: remotes和default behaviors。

  iOS开发者的神通功法3—移动应用开发的独特性

  凡人修仙,仙人修道,道人修真。后天期,先天期,金丹期,元婴期,洞虚期,空冥期,渡劫期,大成期。。。无论修真者处在哪个阶段,都需要针对特定的修炼阶段了解和获取所需资源。

  开发者也是如此,虽然Web开发,PC端应用开发,移动应用开发并没有等级之分,但各自却有了完全不同的特点。

  开发者需要根据移动应用开发的独特性掌握相应的知识:

  HIG(Human Interface Guidelines):人机界面交互,具体参考:

  iOS Human Interface Guidelines: Designing for iOS 7

  流量消耗的考虑:包含两个方面,一个是安装包的大小,另一个则是在使用过程中的流量消耗。

  多线程操作:比如上传下载文件之类比较耗时间的操作可以单独放在一个线程中,详细请参考:Grand Central Dispatch (GCD) Reference

  状态保存和恢复:让用户下一次进入应用时仍然进入此前所在的界面和状态。

  本地化:根据用户所在的地区选择对应的语言显示

  iOS开发者的神通功法4—吸星大法-参考别人的源代码

  无论是修炼武功还是修真,都有一个类似吸星大法的邪门功法,那就是把别人的功力占为己有。

  在iOS中,同样有这样一门强大的功法,那就是参考别人的源代码。比吸星大法更神奇的地方是,参考别人的源代码是双赢的过程,不会让别人的功力下降,反而让大家在切磋的过程中共同进步。

  源代码的来源包括:

  http://developer.apple.com中苹果官方的源代码;

  http://github.com里面的源代码;

  code4app,cocoachina等第三方网站中大家共享的源代码;

  教程网站和其它第三方网站中的源代码(如http://raywenderlich.com等);

  通过逆向过程研究别人的应用,这个有点高大上了。

  真正的高手善于利用吸星大法迅速提升自己的实力,实在是居家旅行行走江湖修真者的必备功法啊。

  iOS开发者的神通功法5—提高英语水平

  一个修真者莫大的痛苦是,自己的面前摆着一门绝世神通,却TMD是火星文完全看不懂?

  对于iOS开发者(包括其它程序猿)来说,如果自己的英文水平不行,就等于手握万千绝世神通却半个字都不懂。

  所以,最起码要多花时间看看英文文档,教程,博客,论坛,不必刻意去学,而是在提高自己iOS功力的同时提高自己的英文水平。两者相辅相成,相得益彰。

  产品发布

  修真者在漫长的修炼过程中,需要消耗大量的资源。这些资源除了家族门派储备,强取豪夺,各种奇葩奇遇之外,就只有靠剩余价值交换的形式了。比如炼丹师把自己的仙丹拿来换一门功法,炼器师把自己的法宝拿来换仙丹,有多余功法的修真者会拍卖功法换取能让自己修为一日千里的仙丹,等等。

  iOS开发者(我承认这部分有点扯~),特别是个人开发者不是神人,也要食人间烟火。所以辛辛苦苦开发的产品肯定是要上线发布,让更多人使用甚至购买的(或者让投资人买单)。

  因此一个真正的开发者也必须学会如何发布自己的产品,所以必须掌握以下知识:

  设备测试:我的第一款iPad应用没经过设备测试你敢信?不过当时第一代iPad还没有T正式发布,是特殊历史时期的特殊做法,而且是得到苹果认可的。如今你这样做试试看?TestFlight: 就让身边的几个程序猿一起测测就算用户测试完成了?赶紧试试这个利器吧。

  App Store发布:包括provisioning profile,code-signing,开发者入口,具体参考:

  如何发布IOS应用程序到苹果APP STORE

  或苹果官方文档,因为具体做法经常会有调整。

  好了,一个iOS开发修真者在有了以上的基础之后,在成为高手的路上虽然还会有诸多波折,但至少有了前进的方向,或者说有了指引。

  修真之路最重心智开启和意志的磨练,不管采用何种方法,不管有着何种目标,如果意志不坚定,向道之心会受到美女,懒惰,娱乐等各方面的影响,最终中道而去。 大家一起努力吧。

  参考:

  https://www.codefellows.org/blogs/everything-a-competent-ios-developer-needs-to-know

  信息图:iOS 7开发者需要知道的事

94c0740068d01f2743aecdbd8fdf24ed_b