一、做项目的原则

1、谋定而后动:不给自己埋坑
2、可复用性:减少代码和工作量
3、低耦合性:减少bug出现的几率,提高复用

 


二、前期选型

 

1、项目结构选型

 

1)MVC:

MVC是常用的设计模式,把软件系统分为三个部分:Model,View,Controller。大部分项目都用到MVC。太常用了,就不多赘述,可以看看斯坦福白胡子老头的iOS7应用开发第一节课课件或视频

2)MVVM:

MVC中,Controller很容易变得庞大和复杂。由于Controller承担了Model和View之间的桥梁作用,所以Controller常常与对应的View和Model的耦合度非常高,这同时也造成对其做单元测试非常不容易,对iOS工程的单元测试大多都只在一些工具类或与界面无关的逻辑类中进行。

而MVVM(Model-View-ViewModel)比MVC更加简洁,ViewModel链接Model和View,所有的UI逻辑都在ViewModel中,可以在没有视图的情况下运行整个程序,增加了它的可测试性。关于MVVM的介绍和用法可参考,南峰子博客中MVVM的介绍和唐巧博客中ReactiveCocoa的介绍

 

2、文档结构管理

 

1)Libraries 第三方库

2)Utilities 工具类

3)Constants 常量类

4)Resources 资源文件 plist、数据库资料 图片、音频、视频等资源

5)为每个功能模块建立对应的文件组及实际文件夹,相关的功能都放入其中

注:可用其他命名方式,大体分这几类而已。

 

3、第三方框架选型

 

1)常用框架:

AFNetworking、MBProgressHUD、SDWebImage、SVPullToRefresh、IQKeyboardManager

2)其他第三方框架选型tips:

根据具体功能做出选型。比如轻量建模使用JSONModel,分页滚动使用iCarousel。

i、搜索:提取关键词,在Google或者GitHub中搜索。

ii、众多框架中选型:

一看star数,star数越高越好;二看最近更新时间,越近越好,说明有人维护;三看介绍中文字图片,是否与开发的功能相符;到这步可以下载demo运行;如果选中框架与实际开发功能有出入,同时没有更好的选择,可尝试修改demo代码并通过假数据验证是否能实现指定功能,如果无法实现或者修改代价太大,可尝试自行开发。

iii、优秀的框架:代码整齐,封装有层次,即便没注释也能很明了。

3)第三方框架推荐:

上上篇文章中列出部分GitHub中第三方框架及组件。亦可参考该文章,它将GitHub中常用iOS的框架进行了分类,很详细。同时来感受一下Facebook的Paper中使用到的第三方库吧。

4)建议

尽量少使用第三方框架,简单的功能可以自己造轮子。毕竟很多框架功能丰富,必然给项目带来很多所不需要的冗余代码,同时使用的第三方框架终究不能完全保证代码的安全性。

 

4、Model转化方式

 

接口数据转换为Model方式:NSDictionary/JsonModel/Mantle

NSDictionary:优点,简单易用;缺点,代码繁冗,重复工作。

第三方框架(JsonModel/Mantle):优点,减少繁冗代码,简单;缺点,容错性不可控,当 JSON 格式错误时,Model 框架可能会产生错误结果或造成 Crash。

iOS JSON 模型转换库评测可参看资料

 

5、给项目减肥

 

矢量图:

平常项目多使用png等图片,为了良好的UI效果,可能还要切到几套图,很占空间,同时不一定能达到最好UI效果。

矢量图类似于字体,可任意拉伸压缩、设置颜色,不会影响像素,所以做小图标的时候,一套矢量图就能适用各种机型。

值得注意的是,矢量图只适用于单色的图片,所以多用于单色小图标,如果需要阴影效果、颜色很丰富的图片,可以切一套正常的png图片。矢量图使用可参加iconfont

 


三、开发

 

1、代码复用小技能

 

1)代码块:

i、封装类文件
ii、宏
iii、Xcode自带代码片段库
Xcode代码块操作:随便找个空白位置,输入“@property (nonatomic, retain) <#type#> *<#name#>;”,把它拖到Code Snippets Library中。其中“<#”、“#>”引用的部分用于替换。

11

可参见资料,讲的很详细。

2)颜色组:

Xcode颜色盘中可以添加颜色组,一个项目可以建一个颜色组,统一了颜色风格。同时将别人分享的颜色文件,放在Library -> Colors路径下,导入到Xcode中。具体可参见资料

color

3)targets

待续

 

2、代码规范

 

1)借助插件:实在没必要记细枝末节的编码规则,用工具来代替吧。

格式化,ClangFormat和Xalign更配哦。

ClangFormat的使用可参见我的博客中第一篇文章。用完ClangFormat,发现还是有些细节的不足,代码洁癖严重作怪,不对齐的代码能忍?于是发现了XAlign,和ClangFormat一样下载后放到Xcode/Plug-ins/下,运行完重启Xcode即可。

2)基本原则:

i、代码控制在300行

ii、每个动作尽量提取为单独的方法

iii、命名规范:类名、方法名、变量名、常量规范命名

 

3、编程

 

1)manager管理操作

多页面、多场合间的重复性操作,使用manager封装,通过参数区分细节;

2)自定义view

所需属性结合在初始化方法中传入,而非通过给公共属性传入,这样在使用自定义view时就不会漏参数;

 

4、一劳永逸小插件

 

合适的小插件能提高编程效率,减少重复性、降低无技术含量的操作、编码方便。

经常使用的插件如:XToDo、ClangFormat、ColorSense、VVDocumenter、KSImageNamed、BBUDebuggerTuckAway、deriveddata-exterminator、XcodeBoost、Xalign、HOStringSense-for-Xcode。

插件很多地方有介绍,推荐唐巧博客中介绍的开发工具

其中HOStringSense-for-Xcode:在输入大段文本时,如果文本中包含了各种换行和特殊字符,转换起来比较麻烦,可以通过HOStringSense解决。HOStringSense支持编辑正则表达式、多行文本、内联HTML等,GitHub下载链接

5、debug方式:

 

1)编辑断点(添加条件,自动打印日志)

1

右击断点便可进入编辑页面,condition设置断点条件;

Action选择Log Message,输入打印格式,并设置自动,便可自动打印出日志。

2)Symbolic Breakpoint

22

33

进入断点列表,点击左下角+,选择Symbolic Breakpoint,便可进入Symbolic Breakpoint页面。

如图所示设置后,在程序中所有的 viewDidLoad 方法被调用时都会触发断点

3)监控断点

44

55

找到变量第一次出现的地方,添加一个普通断点,然后Watch 变量名。可以在控制台 中看到其变化。

 

6、代码审查:

 

关于代码审查,objc中国有篇文章写得不错,可参考

 


四、内测

蒲公英:

 

蒲公英可以方便开发者能够做 iOS 应用的测试分发工作。先注册蒲公英,然后将生成的ipa上传到蒲公英的发布应用上 。上传成功后,可以选择设置一个 “安装密码”,以避免一些越狱用户非法安装你的应用。对于小范围试用的应用,建议也不发布到 “应用广场”。然后内部测试人员可以通过生成的二维码下载应用。

77

88

分类: iOS开发