您的位置:首页 > 移动开发

爱玩iOS app基础框架解析

2015-07-23 12:01 543 查看
爱玩iOS app基础框架解析

一. Root模块

Root模块主要功能是创建navigationController,tabController,以及定义rootController等。

1.CTRootViewController里集成了一些方法,例如返回,view消失时cancelRequest,设置title,set navigationbar是否hidden,页面适配等。

2.CTDragNavigationController主要实现了push到下一个vc时往左边拉会显示上一个vc的截图的方法

3.CTHomeTabViewController里主要是对底部的tab bar点击事件的处理

4.由于drag时的效果不包括h5页面所以建一个CTH5RootViewController来过滤掉h5页面的此功能

5.由上述VC而引入了一些commonUI,包括CTRootWindow,CTRootView,CTAlertView,CTLoadingView,CTTableView,CTToastTipView,和一些UIView的扩展类。同时引入了一些基础的control,如CTNavigationBar,CTTelephone。

6.引用到一些基础的类如CtripTime和StringUtil

二. download模块

downloadBase文件夹里集成了携程的downloader方法,调用下载方法如下:

1.#import “CTDownloader.h"

2.调用[CTDownloader addDownloadTaskWithURL:[NSURL URLWithString:module.url] delegate:self];

3.实现download delegate 方法:

- (void)downloadDidFailWithOperation:(CTDownloadTaskOperation *)operation error:(NSError *)error

(void)downloadDidCompleteWithOperation:(CTDownloadTaskOperation *)operation data:(NSData *)data

三. 数据库模块

此应用设定两个数据库,一个存储用户数据,另一个存储其他内容。存储用户数据的可以在应用升级时先copy这些数据然后写入到新版本的数据库。引入了第三方库FMDB

在DB.m中初始化数据库把其从bundle目录拷贝到document目录下,如果是开发环境即 #ifdef InDev 发现app build版本变化就先把此数据库remove([fileManager removeItemAtPath:path error:NULL])再拷贝新的[fileManager copyItemAtPath:fromPath toPath:path error:NULL]。

在golf这个应用中我们实现了数据库的升级和对部分数据的备份,在InitDBUtil.m中实现,由此引入了一个CTDataBaseCopyBean model,这两部分的代码不放入基础框架中。

在调用时[[InitDBUtil alloc] initDB];即实现上述功能,在执行sql方法时首先根据不同功能创建DBUtil如H5DBUtil, OtherDBUtil,然后调用下述方法(sql的执行方法在DB.m里):

[[DbManager getInstance:DBType_CtripUserInfo]

excuteBySqlAndMapInTx:@"Other_setUserSetting"

bindParamsDic:bindParamDic

error:nil];

其中getInstance的参数定位了相应的数据库,excuteBySqlAndMapInTx的参数代表去Other_SqlMaps.plist中找setUserSetting这个key去找相对应的sql语句。InTx代表doInOneTx使用事务,还有NoTx则代表不使用事务。

数据库这边需要导入libsqlite3动态库

四.H5模块

H5这块包括

1.VC (CTH5ViewController CTH5TestViewController CTH5TestURLViewController)

所有的h5页面都是此创建CTH5ViewController,然后在其webview里load的。我们加入了CTH5TestViewController,这样方便测试,在CTH5TestViewController里定义了h5的log。

2.获取url的路径 (CTH5TravelURL CTH5URL)

要load一个html页面首先需要找到相对应的包。CTH5TravelURL的功能就是传入包名找到相对用的路径(调用[CTH5URL getHybridModulePath:H5ModuleName_Cpage])

3.CTH5URLCommand

对h5返回的url进行解析,然后分成_callbackTagName,_className,_methodName,_argumentsDict等。

4.CTH5PackageManager主要对webapp包进行操作,首先copy webapp.zip 从bundle到cache目录,然后解压到cache下的webapp文件夹下。然后下载h5增量包,下载成功将data写入到wb-download下的增量包.zip下,之后copy到webapp文件夹下然后解压。(这中间使用数据库记录了是否需要再次下载的逻辑:判断app升级的response,首先查找数据库中有无increasedata model的数据,没有的话就重新alloc这个model 赋值写入数据库(insert),有的话看这个model的dataversion与response的fullVersion是否相同,相同continue检查下一个包,不相同的话删除重写(delete and insert)此时isNeedUpdate写yes,直到download finish了再去数据库中把isNeedUpdate写成no(update))

5.h5这边的逻辑主要是获取command进行plugin分发,其中不乏native与js交互,获取json 字符串等动作,需要导入jsonkit包,压缩解压需要导入zip包和libz的动态库。

五.测试基础框架工程解析

1.基础框架静态库的生成与导入

将上述的模块加入静态库工程里,编译,运行时先选择ios device等待.a文件由红色变黑,选择模拟器设备如iphone5s运行,找到.a文件所在目录Debug-iphonesimulator(测试工程为模拟器运行对应的静态库也必须为相同模拟器device运行生成的,同样如果静态库为Debug-iphoneos下的,测试工程就需要在设备上运行)导入到测试工程。

鼠标选中静态库工程的target-build phases空白处,点击editor-add build phase-add headers build phase 把需要暴露的.h文件加入到public下,这样在编译运行之后.h会出现在include文件夹下,同.a文件一同拷贝出来才可以用。默认会放到Debug-iphoneos/usr/local/include下。

2.其中libsql和libz需要手动添加到测试工程中

3. 测试

1)新建一个TabViewController继承自CTHomeTabViewController,主要实现

-(void)initDataSourse:(NSInteger)numberOfBarButton normalImageNameArr:(NSMutableArray *)imageArr selectedImageNameArr:(NSMutableArray *)imageArr imageWdith:(NSInteger)wdith indexStrs_NavHidden:(NSMutableArray*)array indexStrs_LoginNeedLoad:(NSMutableArray *)array;方法来进行一些配置,并重写selectPageWithIndex方法,以便对判断是否需要弹出登录页面。

2)加入CTBaseSender,进行网络请求,包括baseUrl的设置,get,post,delete等网络请求的调用等。(需要导入afnetworking库)

3)测试h5增量升级功能

h5增量升级功能囊括了上述所有功能。首先app lunch时需要初始化基础页面,数据库,copyandunzip webapp包,然后发送app是否需要升级的request进行h5增量包的下载,数据库记录其版本操作。([H5DataDBUtil updateH5IncreaseData:[responseObject objectForKey:@"h5VersionList"]];

[[CTH5PackageManager sharedInstance] updateHybridModuleList];)

真正调h5页面是在CTH5ViewController loadURL时。此时会调用[[CTH5PackageManager sharedInstance] copyAndUnzipDownloadPackages];来把下载的增量包拷贝到webapp目录下并解压替换旧包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: