11 August 2015

项目要求一个月时间完成第一版,所有用了非常多的第三方库,现在列举一下。

基本上都能在 github 上面找到,或者使用

$ pod search xxx

找到,就不列举网址了。

Third

设置属性 Label

TTTAttributedLabel

极光推送 (其它人用)

APService

短信验证码

CCPRestSDK

ios-charts

图表库,用作股票 k线图,分时图(后期因为收费去除了),庄家历史操作图

Podfile


source 'https://github.com/CocoaPods/Specs.git'

最底版支持7.0,好像最后改成 8.0了

platform :ios, '7.0'

网络库

pod "AFNetworking", "~> 2.0"

数据库 (未使用)

pod 'FMDB', '~> 2.5'

分离 Storyboard

pod 'RBStoryboardLink', '~> 0.1.4'

刷新库

pod 'MJRefresh', '~> 2.2.0'

侧边栏抽屉菜单(未使用,由REFrostedViewController替换)

pod 'RESideMenu', '~> 4.0.7'

提示框

pod 'MBProgressHUD', '~> 0.9.1'

引导画面

pod 'Onboard', '2.1.5'

自动更新

pod 'iVersion', '~> 1.11.4'

侧边栏抽屉菜单

pod 'REFrostedViewController', '~> 2.4.8'

扩展库(未使用)

pod 'MJExtension', '~> 2.4.0'

日志转换(未使用)

pod 'DateTools', '~> 1.6.1'

函数响应库 实现注册登录功能

pod 'ReactiveCocoa', '2.5'

日志库

pod 'CocoaLumberjack', '~> 2.0.1'

手工 Autolayout (其他人用)

pod 'Masonry', '~> 0.6.2'

输入管理

pod 'IQKeyboardManager', '~> 3.2.4'

替代 UIAlertView (其他人用)

pod 'SIAlertView', '~> 1.3'

另一个 提示库 (其他人用)

pod 'SVProgressHUD', '~> 1.1.3'

应用内测

pod 'FIR.im', '~> 1.2.0'

统计 (其它人用)

pod 'UMengAnalytics-NO-IDFA', '~> 3.5.9'

自定义 AlertView (未使用)

pod 'CustomIOSAlertView', '~> 0.9.3'

Block 库 (未使用)

#pod 'BlocksKit', '~> 2.2.5'

提示库 (未使用)

pod 'SDCAlertView', '~> 2.4.1'

分段选择 类似 Android, 在顶部实现 Tabbar 效果

pod 'THSegmentedPager', '~> 1.1.0'

自己实现的广告条,项目中用 SDWebImage 加载网络图片

pod 'YWBannerView', '~> 1.0.0'

调试使用,可观察 手机上面 UIView 尺寸

pod 'MMPlaceHolder', '~> 1.8'

瀑布流 (后期不用了)

pod 'CHTCollectionViewWaterfallLayout', '~> 0.9.1'

提示用户先登录

pod 'KLCPopup', '~> 1.0'

缓存图片

pod 'SDWebImage', '~> 3.7.3'

主页三个卡片滑动,替换 UICollectionView

pod 'iCarousel', '~> 1.8.1'

数据存储 (其他人用)

pod 'NanoStore', '~> 2.7.7'

显示 TextField 提示信息

pod 'JVFloatLabeledTextField', '~> 1.1.0'

实时推送右上角图标

pod 'RKNotificationHub', '~> 2.0.1'

带分享的 WebView

pod 'SVWebViewController', '~> 1.0'

二级 TableViewCell

pod 'RATreeView', '~> 1.0.3'

状态栏提示 无网络时使用

pod 'JDStatusBarNotification', '~> 1.5.2'

TableViewCell 自适应高度 (比较麻烦,后期改 iOS 8, 就不使用了)

pod 'UITableView+FDTemplateLayoutCell', '~> 1.3'

开发过程


7月5号编码开始,8月10号第一版完成,花了一个月零几天。

一开始是两个人做,我测试了网络连接,做好应用架构后让另一个哥们做网络请求,后期作数据缓存。

其它我处理,7月5号新建项目,上传到 Bitbucket 免费仓库。用 iOS 最佳实践 上面的方式,分了

Models, Views, Controllers, Stores, Helpers几个组,又添加了Constants, Third, ViewModel。

  • 常量使用

// Constants.h
FOUNDATION_EXPORT NSString * const kUserHasOnboardedKey;

// Constants.m NSString * const kUserHasOnboardedKey = @"user_has_onboarded";

最先把引导画面,左侧菜单,注册,登录完成,又把最右边的 Tabbar 信息完成。

股票图最开始使用的是原生组件 CoreGraphics,为了和 Android 一样(Android 用的MPAndroidChart, 比iOS早一个多月开发)。

在 github 上面找到 ios-charts,一些东西需要定制,比如颜色,要改源码。第一版完成,坐标轴也没有改成和 Android 一致,主要是没有时间了。

有比较多的模型数据,我找到一个可以把 JSON 数据转换成 Objective-c 的 Xcode 插件 ESJsonFormat.

可以直接输入到 文件 ,再添加进 XCode 就可以了。记得把映射 id。

+ (NSDictionary *)replacedKeyFromPropertyName {
    return @{@"ID": @"id"};
}

一开始没有设计图,说先按照 Android 的做,而 Android 还要改版。7月20几号了 iPhone 6 设计图终于出来了,没有标记尺寸。

幸好有 Pixel Winch,当时是免费使用的,可以取尺寸。然后又按照设计图改,花时间啊。

网络层测试,参照 WWDC 2014 上的视频,那个是 swift 版的,后来找到objc.io上面的 测试异步代码。

// 获取新闻
- (void)testGetBanner {
    XCTestExpectation *expectation = [self expectationWithDescription:@"GetBanner called"];

[[DataCenter SharedInstance] GetBannerWithCallBack:^(id data, NSError *error) {
    [expectation fulfill];

    XCTAssertNil(error, @"error should be nil");
    XCTAssertNotNil(data, @"data should not be nil");

    NSDictionary *dictData = (NSDictionary *)data;
    XCTAssertNil(error, @"dictData should be Dictionary");

    id resultData = dictData[@"data"];
    XCTAssertNotEqual([NSNull null], resultData, @"resultData should not be nil");

    NSLog(@"Success : %s-%@", __func__, data);
}];

// 10s 超时
[self waitForExpectationsWithTimeout:10 handler:^(NSError *error) {
    NSLog(@"%s-%@", __func__, error);
}];

}

最后新招进一个专职的,处理业务逻辑。

8月10号,星期天,第一版本要出来,加班,处理股票池的排序等其它事情。

总结


一定要把主界面先做出来,主要功能先处理,而不要挑两侧菜单上不太重要的提示,动态,简介之类的先处理。

另一点是一定不能等后台数据。当时显示 k 线图是数据是错误的,怎么改都不对,一两天过去,也没有什么进展。

要么模拟数据,不太熟悉数据,要么就先做其它的吧。

最后,能见面沟通还是见面沟通吧。



blog comments powered by Disqus