MobileProject基于MVC的項目框架
MobileProject介紹
MobileProject項目是一個以MVC模式搭建的開源功能集合,基于Objective-C上面進行編寫,意在解決新項目對于常見功能模塊的重復開發(fā),MobileProject對于項目的搭建也進行很明確的劃分,各個模塊職責也比較明確,MobileProject也引入的一些常用第三方插件、宏定義、工具幫助類等;整個項目也是在不斷更新跟維護中,功能點也會不斷更新;代碼支持iOS7以后版本;
MobileProject模塊簡介
主項目中的分層主要包含四個模塊,Main(主要)、Expand(擴展)、Resource(資源)、Vender(第三方),還有本項目是有多個Tag,用于區(qū)分不同的版本,比如本地環(huán)境測試版、產品版,主要是通過Tag來區(qū)分,不同的標識對應不同的連接地址;當然也可以設置其它不同的內容;
Main(主要)模塊的內容
此模塊主要目的是為了存放項目的頁面內容,比如MVC的內容,Base(基類)用于存放一些公共的內容,其它功能模塊的提取,方便繼承調用;在本實例中已經在BaseController整理的一個公用的ViewControllerExpand(擴展)模塊的內容
此模塊主要包含Const、Macros、Tool、NetWork、Category、DataBase六個子模塊;
Macros(宏)主要存放宏定義的地方,這邊有兩個宏文件,Macros.h主要是項目的一些主要宏,比如字體、版本、色值等,而ThirdMacros.h主要用于存放一些第三放SDK的key值;
Tool(工具類)主要存放一些常用的類,此處Logger用于存放日志的封裝幫助類,Reachability用于存放判斷網絡狀態(tài)的幫助類;
Network(網絡)這邊主要用到YTKNetwork 是猿題庫 iOS 研發(fā)團隊基于 AFNetworking 封裝的 iOS 網絡庫,這邊是對它進行一些修改,為了滿足不同Tag及不同的功能模塊可能訪問不同URL的要求;
Category(分類)主要用到Git上面iOS-Categories分類的內容,多創(chuàng)建一個Other用于存放平時要擴展的分類;
Resource(資源)模塊的內容
資源模塊主要包含三方面,Global(全局)、Image(圖片)、Plist(配置文件);
Global用于存放項目一些全局的內容,包含啟動項的內容LaunchScreen.storyboard、頭部引用PrefixHeader.pch、語言包File.strings
Image用于存放圖片資源,可以根據(jù)功能模塊進行再分不同的xcassets文件;
Plist用于存放plist文件,主要是本項目中會創(chuàng)建多個的Tag,而每個Tag都會有自個的plist文件進行管理,所以統(tǒng)一存放方便管理;
部分代碼介紹
1:定義宏進行區(qū)分不同的環(huán)境,可以根據(jù)要求再增加不同環(huán)境
#if PRODUCT //產品環(huán)境#else //測試環(huán)境#endif
2:對應不同的環(huán)境API前綴
//測試環(huán)境
self.develpoerDictionary=@{ACCOUNT_SERVERCENTER_Key:@"http://private-eda65-mock.com/",PICTURE_SERVERCENTER_key:@"圖片前綴",BUSINESSLOGIC_SERVERCENTER_key:@"業(yè)務邏輯前綴",UPDATEVERSION_SERVERCENTER_key:@"版本升級前綴"}; //產品環(huán)境
self.productDictionary=@{ACCOUNT_SERVERCENTER_Key:@"http://private-eda66-mock.com/",PICTURE_SERVERCENTER_key:@"圖片前綴",BUSINESSLOGIC_SERVERCENTER_key:@"業(yè)務邏輯前綴",UPDATEVERSION_SERVERCENTER_key:@"版本升級前綴"};
3:網絡請求
@interface LogInApi()
{ NSString *_username; NSString *_password;
}@end@implementation LogInApi- (id)initWithUsername:(NSString *)username password:(NSString *)password {
self = [super init]; if (self) {
_username = username;
_password = password;
} return self;
}
- (NSString *)requestUrl { return @"user/login";
}
- (YTKRequestMethod)requestMethod { return YTKRequestMethodPost;
}
-(SERVERCENTER_TYPE)centerType{ return ACCOUNT_SERVERCENTER;
}
- (id)requestArgument { return @{ @"user_name": _username, @"user_password": _password
};
}@end
可以指定不同的方式,以及請求對應的前綴類型如ACCOUNT_SERVERCENTER
4: 目前Pod管理的第三方插件
platform :ios, '7.0'pod 'AFNetworking', '~>2.6.0'pod 'ReactiveCocoa', '~> 2.5'pod 'SDWebImage', '~> 3.7.5'pod 'JSONModel', '~> 1.0.1'pod 'Masonry','~>0.6.1'pod 'FMDB/common' , '~>2.5'pod 'FMDB/SQLCipher', '~>2.5'pod 'CocoaLumberjack', '~> 2.0.0-rc'pod 'BaiduMapKit' #百度地圖SDK pod 'UMengAnalytics-NO-IDFA'#友盟統(tǒng)計無IDFA版SDK pod 'GTSDK' #個推SDK pod 'UMengSocial', '~> 4.3' #友盟社會化分享及第三方登錄 pod 'FLEX', '~> 2.0', :configurations => ['Debug'] pod 'ActionSheetPicker-3.0'pod 'JSPatch'pod 'XAspect'pod 'CYLTabBarController'pod 'LKDBHelper'pod 'RegexKitLite', '4.0'pod 'IQKeyboardManager'pod 'LBXScan','~> 1.1.1'pod 'MBProgressHUD', '~> 0.9'pod 'MWPhotoBrowser'pod 'M13ProgressSuite', '~> 1.2.7'pod 'WebViewJavascriptBridge', '~> 5.0'
Vender(第三方)模塊的內容
雖然項目中已經用Pod來管理第三方插件,但對于一些可能要進行修改的第三方可以存放在這邊,本實例中引用的幾個比較常用的第三方插件,簡單介紹其中的幾個,GVUserDefaults是對UserDefaults的封裝,簡單就可以用于存取操作;JDStatusBarNotification是在狀態(tài)欄提示效果的插件;ActionSheetPicker底部彈出如時間選擇、選項的插件;QBImagePickerController是照片選擇插件,支持多選并可以設置最多選擇張數(shù);
功能模塊的集成
1 集成百度地圖(3.0.0版),目前有百度定位功能(ThirdMacros.h修改相應的key值)
2 集成友盟統(tǒng)計(ThirdMacros.h修改相應的key值)
3 集成CocoaLumberjack日志記錄
4 引入第三方inputAccessoryView 解決為一些無輸入源的控件添加輸入響應。比如按鈕、cell、view等
5 集成個推消息推送功能(ThirdMacros.h修改相應的key值),證書也要用你們自個的消息證書;
6 集成友盟分享SDK,并在登錄頁實現(xiàn)的(QQ,微信,新浪)三種的第三方登錄功能(ThirdMacros.h修改相應的key值)
7 集成友盟第三方分享(QQ空間分享,微信朋友圈,新浪微博分享,QQ微博分享,微信好友)
8 增加關于CocoaLumberjack日志記錄的展示及查看頁面
9 增加百度地圖顯示頁面功能實例,實現(xiàn)在地圖上顯示幾個坐標點,并自定義坐標點的圖標跟彈出提示窗內容,實現(xiàn)當前定位并畫出行車路線圖;
10 增加FLEX,在本地測試版本開啟,F(xiàn)LEX是Flipboard官方發(fā)布的一組專門用于iOS開發(fā)的應用內調試工具,能在模擬器和物理設備上良好運作,而開發(fā)者也無需將其連接到LLDB/Xcode或其他遠程調試服務器,即可直接查看或修改正在運行的App的每一處狀態(tài)。
11 增加FCUIID幫助類,用于獲取設備標識
12 增加熱更新JSPatch插件,并增加相應的幫助類及測試功能(JSPatchViewController)
13 集成啟動廣告功能模塊,如果不要功能可以在AppDelegate里面進行注掉
14 集成CYLTabBarController插件,為項目增加底部4個TabBar菜單
15 引入LKDBHelper并增加創(chuàng)建數(shù)據(jù)庫幫助類,實現(xiàn)實體直接映射到數(shù)據(jù)庫表
16 集成第一次啟動的引導頁功能模塊
17 集成LBXScan插件,實現(xiàn)二維碼相關功能模塊,包含掃二維碼顯示結果、從相冊讀取圖片中的二維碼結果
18 封裝MBProgressHUD擴展類,定義一些常見的提示效果,詳見MBProgressHUD+MP類
19 開發(fā)關于圖片上傳,包含選擇照片、拍照、瀏覽大圖、獲得圖片GPS、圖片名稱、圖片拍照時間、上傳時對圖片進行轉正調整、壓縮圖片、圖片展現(xiàn)效果
20 開發(fā)關于圖片上傳帶進度效果,并把照片先存入沙盒中,上傳成功刪除,引入M13ProgressSuite插件顯示進度扇形效果,部分用到ReactiveCocoa知識;
21 編寫一個以iphone5為效果圖的字體適配屏幕,兼容iphone6+效果,如果你的效果圖不是iphone5,可以修改相應的宏定義,現(xiàn)在是以iphone5為標準
22 編寫一個UITableViewCell倒計時功能,實例因為沒有服務端接口,所以時間都以本地時間為準,正式項目時間都要從服務端獲取;
23 引入WebViewJavascriptBridge進行H5交互,并對官網實例進行注解
24 增加省市區(qū)三級聯(lián)動的幫助類,可以設置綁定默認值,也可以查看當前的彈出窗狀態(tài),并實現(xiàn)其小實例
25 增加自定義彈出窗幫助類,模擬系統(tǒng)UIAlertView效果,增加一個帶UITextView的彈出效果,其它自定義視圖根據(jù)項目再創(chuàng)建;
