从项目创建开始
-
版本支持 建议iOS 7.0+
-
语言选择:** Objective-C**
OC,Swift。 OC对于大多数iOS开发者来说都没有问题,Swift只有部分开发者熟悉并且运用自如。 创业公司建议使用OC,这样便于后续人员的维护以及扩展,等到时机成熟了接入Swift进行混合开发即可。如果喜欢Swift开发或者熟悉这门语言的话可以直接用。 -
工程结构:主工程 + cocoapods
现在的iOS项目一般都离不开第三方库,所以要选择合理的第三方库管理,使用OC当然要配合cocoapods,如实使用Swift可以选择carthage等。不建议自己手动管理第三方库。 -
原生/H5: 建议原生为主+H5
关于用原生好还是用H5好,一直在争论,其实适应项目最重要。如果我们不止要做这些:AndroidApp, iOS App, 微信公众号;
如果我们的H5人员很缺,并且职业技能不是很好,并且公司中恰好有人对原生开发很熟悉,并且开发效率很高,那么还是优先选择原生的,某些小部分的界面可以使用H5开发。相反,则以H5为主,原生为辅助,App中,iOS、Android、微信公众号等相同的界面使用H5开发,App转悠的部分,比如说导航条,标题栏,登录等界面才使用原生实现,另外,webView里边有H5的点击事件,也许是URL链接,也许是JS,都不要让他直接在当前web容器中跳转,要在native端做一下截获,使用原生跳转。如果要使用一些已经开源的框架,比如说ReactNative,一定要慎重,这些框架学习的成本比较高,而且效率、性能未必好。
如果本地以web为主,那么就要优化这里的显示。webView分为两种方式,一种是加载本地的h5界面,另一种是加载服务器端的h5界面。加载服务器的比较简单,直接load一下就好了,加载本地的h5界面,相对比较复杂,但是加载速度要快于前者。
- 架构选型 MVC/MVP/MVVM 建议使用MVC
- MVC 经典模式 Model-View-Controller
- MVP 解耦V M
- MVVM 优化MVP,双向绑定,View的变动自动映射到VM,反之亦然。
别的架构模式在设计,不知道要比MVC复杂了多少倍,为了降低成本,还是直接使用大家都熟悉的MVC比较好。
项目
- 网络层 使用手机号码+验证码登录
网络层开发已经相对成熟,有很多的成熟框架,比如说afnet,mknet等、所以要注意的只有安全的问题。 现在大多数的app的登录流程就是 用户名加密码登录,然后获取到token存到本地,很容易被抓包拦截然后模拟请求。所以这里强烈建议使用手机号码+验证码登录的方式,设计简单,而且很安全。
接口数据一定要使用JSON,但是这里服务端要额外的注意JSON的数据类型,举个例子,JSON不支持Date类型,如果传的话,可能会被解析成 某年某月某日时区这样的,客户端很难处理,有些bool会直接返回true,false字串,甚至还会返回null,这些都会导致客户端显示出错或者解析出错。 所以服务端一定要保证数据类型与数据的正确,给客服端开发减轻压力。
一般的JSON格式
{
error : 0, //错误码
message : "hello", // 提示信息
data : {...}, //数据
}
另外接口的设计一定要加上版本号,在客户端也有方便的切换版本的地方。举例: /v2/login.api -> /v3/login.api 在客户端可以直接封装一个小方法 path('/login'), 这个path方法就是自动加上版本号的,便于统一升级等。
- 数据层 缓存一定要做好,使用数据库
阅读类的App需要做本地的缓存,这个可以看一下简书,最好缓存一定的文章给读者看。 这里缓存策略一定要做。 最好在本地自己维护数据库,然后把每次网络请求的数据更新到数据库中,然后加上过期时间等策略控制本地缓存大小,提供缓存清理等功能。
- 展示层 SB/XIB + 纯代码
界面的开发上建议选择 SB/XIB + AutoLayout与纯代码结合开发。 因为App中大部分的几面比较简单,使用SB可以加快开发的速度。
- 基类的定义
ViewController, NavigationController最好定义基类,便于统一操作以及一些代码便捷。
参考内容
- 项目的结构:
总体看起来是这样的
每一个模块内是这样的
-
代码规范需要注意。
-
关于部分第三方库的选择。
JSON->Model : YYModel, JSONModel
Network : AFNetworking
ImageSyncLoad: SDWebImage, YYImage(yyimageView提供了gif等支持)
WaterFlow: CHTCollectionViewWaterfallLayout
HUD,alert: SVProgressHUD, LGAlertView
DB: FMDB
Debug: FLEX
Animated: pop, canvas.
网友评论