iOS端設(shè)計(jì)文檔

引言

  • APP采用object-c純代碼開發(fā)吧慢,未使用故事面板(storyboard),個(gè)別view采用xib(自定義cell可以是xib)。原因是:傳送門

  • 布局我們采用Masonry布局。Masonry是一個(gè)輕量級(jí)的布局框架 擁有自己的描述語法 采用更優(yōu)雅的鏈?zhǔn)秸Z法封裝自動(dòng)布局 簡潔明了 并具有高可讀性 。非常簡單的使用純代碼實(shí)現(xiàn)autoLayout布局檐蚜,是目前非常流行的手工布局框架 傳送門

  • 使用MVC的設(shè)計(jì)模式,顯示模塊與功能模塊的分離。提高了程序的可維護(hù)性沿侈、可移植性闯第、可擴(kuò)展性與可重用性,降低了程序的開發(fā)難度缀拭。它主要分模型咳短、視圖、控制器三層

  • 使用AFNetworking為網(wǎng)絡(luò)請(qǐng)求引擎蛛淋,目前被95%以上的app所采用咙好。 傳送門

  • 使用cocoapods進(jìn)行庫的統(tǒng)一管理,使用方便褐荷,清晰明了(前期我一個(gè)人闊以不要)勾效。傳送門

項(xiàng)目版本管理

使用git管理代碼,便于團(tuán)隊(duì)開發(fā)!

開發(fā)環(huán)境

操作系統(tǒng):Mac os
開發(fā)軟件:Xcode8.0
手機(jī)系統(tǒng):iOS8.0~iOS10.3.3

安全策略

在涉及個(gè)人帳戶信息有關(guān)網(wǎng)絡(luò)請(qǐng)求,采用https方式层宫,通過非對(duì)稱密鑰對(duì)請(qǐng)求串加解密,加密方式(MD5杨伙、AES )

框架目錄結(jié)構(gòu)

項(xiàng)目目錄.png

工具箱

工具箱.png

工具箱:開發(fā)中用到的常用工具,讓開發(fā)者的開發(fā)更加簡易

  • XLBMacro:宏定義字段和方法萌腿、公用枚舉
  • XLBCTool(工具類):loading框限匣、瀏覽器、輪播圖毁菱、掃碼米死、自定義視圖控件、常用方法工具類贮庞、定位哲身、獲取相冊(cè)及相機(jī)、彈出菜單贸伐、第三方分享二次封裝
  • XLBFoundation:Foundation類別
  • XLBUIKit:YNCUIKit類別

基類(XLBBase)

基類繼承關(guān)系圖
XLBBase.png
項(xiàng)目基類列表
  • ViewControllers
    • BaseViewController:所有控制器基類
    • BaseTabBarController:標(biāo)簽控制器基類
    • ListViewController:下拉刷新,上拉加載基類
    • WebViewController : 加載H5頁面基類
  • BaseModel( 所有model的基類)
  • Views
    • BaseView:所有view的基類
    • BaseTableViewCell:所有自定義Cell基類
項(xiàng)目基類列表
  • BaseViewController
    <pre>
    -屬性:
    -控制器推出類型
    -自定義導(dǎo)航條
    -導(dǎo)航條左側(cè)按鈕
    -導(dǎo)航條右側(cè)按鈕
    -導(dǎo)航條左側(cè)按鈕樣式
    -方法:
    -顯示重新加載視圖
    -隱藏重新加載視圖
    -沒有網(wǎng)時(shí)怔揩,點(diǎn)擊重新加載按鈕(重新方法)
    -有網(wǎng)時(shí)的處理(重新方法)
    -無網(wǎng)絡(luò)時(shí)的處理(重新方法)
    -創(chuàng)建沒有數(shù)據(jù)時(shí)的視圖
    -隱藏沒有數(shù)據(jù)時(shí)的視圖
    -設(shè)置導(dǎo)航條背景顏色
    -設(shè)置導(dǎo)航標(biāo)題
    -導(dǎo)航條左側(cè)按鈕點(diǎn)擊事件(重寫方法)
    -導(dǎo)航條右側(cè)按鈕點(diǎn)擊事件(重寫方法)
    -推出模態(tài)視圖
    -返回模態(tài)視圖
    -推出導(dǎo)航視圖
    -返回導(dǎo)航視圖
    -返回到導(dǎo)航根視圖
    </pre>

  • BaseViewModel

    • BaseModel.h
      <pre>#import <Foundation/Foundation.h>
      @interface BaseModel : NSObject <NSCoding>
      @end</pre>
  • BaseModel.mm
    <pre>#import "BaseModel.h
    #import <objc/runtime.h>
    #import <objc/message.h>
    @implementation BaseModel
    -(void)encodeWithCoder:(NSCoder *)aCoder {
    unsigned int outCount = 0;
    Ivar *vars = class_copyIvarList([self class], &outCount);
    for (int i = 0; i < outCount; i ++) {
    Ivar var = vars[i];
    const char *name = ivar_getName(var);
    NSString *key = [NSString stringWithUTF8String:name];
    id value = [self valueForKey:key];
    if (value) {
    [aCoder encodeObject:value forKey:key];
    }
    }
    }
    -(id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
    unsigned int outCount = 0;
    Ivar *vars = class_copyIvarList([self class], &outCount);
    for (int i = 0; i < outCount; i ++) {
    Ivar var = vars[i];
    const char *name = ivar_getName(var);
    NSString *key = [NSString stringWithUTF8String:name];
    id value = [aDecoder decodeObjectForKey:key];
    if (value) {
    [self setValue:value forKey:key];
    }
    }
    }
    return self;
    }
    @end
    </pre>

網(wǎng)絡(luò)請(qǐng)求 (XLBNetwork)

采用AFNetworking捉邢,目前被95%以上的app所采用,并進(jìn)行了二次封裝商膊,加入了緩存策略伏伐。采用block進(jìn)行回調(diào),返回成功晕拆、請(qǐng)求異常藐翎、請(qǐng)求失敗。

項(xiàng)目基類列表
XLBNetWork.png
使用工具
  • AFnetworking網(wǎng)絡(luò)框架
  • SQLite數(shù)據(jù)庫
  • FMDB數(shù)據(jù)庫操作工具
示例代碼

<pre> WEAKSELF
[self showProgress];

[BaseHttpRequstManager loginu_name:u_name u_passwd:u_passwd type:type listener:^(NSString *error, NSDictionary *resultDic) {
    
    if ([CommonUtils IsOkNSDictionary:resultDic]>0) {
        
        if ([resultDic[@"code"] isEqualToString:@"CSD000"]) {
            
            [weakSelf HttpLoginResponse:resultDic];
        }
        else{
        
            [weakSelf hideProgress];
            
            NSString  *error=resultDic[@"msg"];
            NSString  *code=resultDic[@"code"];
            [self checkRetCode:code str:error];
        }
        
    }
    else{
        
        [weakSelf hideProgress];
    }
    
    
}];

</pre>

項(xiàng)目開發(fā)模塊目錄

項(xiàng)目開發(fā)模塊.png
業(yè)務(wù)模塊開發(fā)
  • 首頁
  • 我的頁面
  • 存管版(普通版)切換
業(yè)務(wù)模塊開發(fā)
  • app啟動(dòng):AppDelegate实幕,啟動(dòng)廣告吝镣,引導(dǎo)頁,更新
  • 登錄注冊(cè)
  • 根視圖控制器

開發(fā)模塊設(shè)計(jì)模式

MVC設(shè)計(jì)框架
  • model:數(shù)據(jù)模型
  • view:視圖顯示
  • viewcontroller:視圖控制器
基本流程

Model請(qǐng)求并對(duì)數(shù)據(jù)進(jìn)行處理昆庇,將處理后的模型數(shù)據(jù)傳遞給viewcontroller,viewcontroller拿到數(shù)據(jù)后控制view的顯示末贾。
MVC 設(shè)計(jì)模式,顯示模塊與功能模塊的分離。提高了程序的可維護(hù)性整吆、可移植性拱撵、可擴(kuò)展性與可重用性,降低了程序的開發(fā)難度


MVC模型圖.png

界面布局

使用Masnory工具表蝙,對(duì)Autolayerout和Size Classes的布局方式進(jìn)行了封裝拴测,簡單實(shí)用,節(jié)省了大量代碼

數(shù)據(jù)存儲(chǔ)方式

根據(jù)產(chǎn)品需要府蛇,數(shù)據(jù)從服務(wù)器下載和本地存儲(chǔ)集索,本地?cái)?shù)據(jù)分緩存和內(nèi)存保留,經(jīng)常讀取的寫入緩存,內(nèi)存數(shù)據(jù)按大小抄谐,小的寫入plist文件渺鹦,大的寫入數(shù)據(jù)庫,用FMDB

地址信息:
plist文件寫入蛹含。路徑:(沙盒/Library/Caches)
用戶數(shù)據(jù)本地化:
NSUserdefuat 本地存儲(chǔ)毅厚。路徑:(沙盒/Library/Preferences)
本地文件路徑使用規(guī)范
1.Documents:
只有用戶生成的文件、其他數(shù)據(jù)及其他程序不能重新創(chuàng)建的文件浦箱,應(yīng)該保存在<Application_Home>/Documents 目錄下面吸耿,并將通過iCloud自動(dòng)備份。
2.Library:
可以重新下載或者重新生成的數(shù)據(jù)應(yīng)該保存在 <Application_Home>/Library/Caches 目錄下面酷窥。舉個(gè)例子咽安,比如雜志、新聞蓬推、地圖應(yīng)用使用的數(shù)據(jù)庫緩存文件和可下載內(nèi)容應(yīng)該保存到這個(gè)文件夾妆棒。
3.tmp:
只是臨時(shí)使用的數(shù)據(jù)應(yīng)該保存到 <Application_Home>/tmp 文件夾。盡管 iCloud 不會(huì)備份這些文件沸伏,但在應(yīng)用在使用完這些數(shù)據(jù)之后要注意隨時(shí)刪除糕珊,避免占用用戶設(shè)備的空間

事件處理

有通知,代理和block(使用代理最多)

模型定義

使用MJExtension對(duì)請(qǐng)求數(shù)據(jù)進(jìn)行model轉(zhuǎn)化毅糟,是一套字典和模型之間互相轉(zhuǎn)換的超輕量級(jí)框架红选,能對(duì)不同數(shù)據(jù)類型和不同數(shù)據(jù)結(jié)構(gòu)進(jìn)行處理。

網(wǎng)絡(luò)圖片加載

采用SDWebImage庫進(jìn)行處理姆另,可以對(duì)圖片進(jìn)行異步加載并緩存

熱補(bǔ)丁

ReactNative(跟王者榮耀一樣)

支付功能

支付寶喇肋,微信,銀行等支付功能嚴(yán)格按照文檔開發(fā),并做二次封裝

地圖

高德地圖,百度地圖(推薦使用百度,百度的定位準(zhǔn),開發(fā)簡單)

代碼規(guī)范

按照自己定制的代碼開發(fā)規(guī)范進(jìn)行開發(fā),規(guī)范文檔和代碼要上傳git迹辐,或者svn

統(tǒng)計(jì)

友盟統(tǒng)計(jì),TalkingData

項(xiàng)目打包

通過蒲公英快速打包蝶防,生成二維碼提供給出測(cè)試掃碼下載

模塊功能細(xì)分

由于整個(gè)APP都是我一個(gè)人做,我就是不細(xì)分了

總結(jié)

  • 合理的命名規(guī)則明吩,推薦使用Class prefix name就是Class的前綴名慧脱,使用前綴名能夠一定程度的避免你的Class和其他Framework / Library中的內(nèi)容重名,也能夠讓你在Import或使用Class的時(shí)候比較方便尋找
  • 將一個(gè)大型Project其中的內(nèi)容分組,不論P(yáng)roject的大小贺喝,我們都應(yīng)該將View Controllers, Views, Objects, Frameworks, Resources,等等不同類型的文件菱鸥,都按照他們的種類和具體用途進(jìn)行了歸類,這樣在日后修改和添加內(nèi)容時(shí)候都會(huì)同樣的事半功倍
  • 常用代碼的封裝
  • 最后就是Comments(注釋)的重要性

GitHub地址: https://github.com/jwh1650715313/app_demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躏鱼,一起剝皮案震驚了整個(gè)濱河市氮采,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌染苛,老刑警劉巖鹊漠,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件主到,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡躯概,警方通過查閱死者的電腦和手機(jī)登钥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娶靡,“玉大人牧牢,你說我怎么就攤上這事∽硕В” “怎么了塔鳍?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呻此。 經(jīng)常有香客問我轮纫,道長,這世上最難降的妖魔是什么焚鲜? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任掌唾,我火速辦了婚禮,結(jié)果婚禮上忿磅,老公的妹妹穿的比我還像新娘糯彬。我一直安慰自己,他們只是感情好贝乎,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叽粹,像睡著了一般览效。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虫几,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天锤灿,我揣著相機(jī)與錄音,去河邊找鬼辆脸。 笑死但校,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啡氢。 我是一名探鬼主播状囱,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼倘是!你這毒婦竟也來了亭枷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤搀崭,失蹤者是張志新(化名)和其女友劉穎叨粘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡升敲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年答倡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驴党。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘪撇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鼻弧,到底是詐尸還是另有隱情设江,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布攘轩,位于F島的核電站叉存,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏度帮。R本人自食惡果不足惜歼捏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望笨篷。 院中可真熱鬧瞳秽,春花似錦、人聲如沸率翅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冕臭。三九已至腺晾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辜贵,已是汗流浹背悯蝉。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留托慨,地道東北人鼻由。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像厚棵,于是被迫代替她去往敵國和親蕉世。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容