前言
目前同時維護(hù)了三四個項(xiàng)目、每個項(xiàng)目中都有一些共同的與具體業(yè)務(wù)無關(guān)的模塊。在公司啟動iOS組件化開發(fā)新項(xiàng)目之際、逐步的開始封裝各個項(xiàng)目中與業(yè)務(wù)無關(guān)的模塊。經(jīng)過多個項(xiàng)目的上線審核與用戶校驗(yàn),不斷的進(jìn)行各個組件完善,分享出來供大家參考。
效果圖展示

分組.png
App Store功能封裝需求、業(yè)務(wù)剝離
APP應(yīng)用與App Store交互相關(guān)的功能有:
- 檢測APP應(yīng)用最新版本、獲取應(yīng)用更新內(nèi)容、提示用戶版本更新。
- 請求評論視圖,限制每日最多出現(xiàn)次數(shù)、限制每次出現(xiàn)概率、限制最大出現(xiàn)次數(shù)避免用戶反感。
- 前往App Store評價應(yīng)用,給以星級評論。
- 系統(tǒng)級APP中應(yīng)用星級評價。
APP版本更新使用簡介
- 自動根據(jù)BundleId去App Store獲取信息、實(shí)現(xiàn)版本更新。
//推薦方法、自動檢測APP并彈出更新視圖
[ZWCheckVersion zw_autoCheckVersion];
- 自動檢測更新、用戶自定義提示更新視圖。appModel中保存應(yīng)用最新的基本信息。
//推薦方法、自動檢測APP并彈出更新視圖。
[ZWCheckVersion zw_autoCheckVersionHandleView:^(ZWAppStoreModel *appModel) {
//需要更新版本、自定義更新視圖
}];
- 根據(jù)APP應(yīng)用的iTunesId實(shí)現(xiàn)版本檢測更新
/**
* 根據(jù)應(yīng)用itunesId版本更新
* appInfo:根據(jù)App Store信息自定義處理更新版本視圖。
*/
+ (void)zw_checkVersionItunesId:(NSString *)itunesId;
+ (void)zw_checkVersionItunesId:(NSString *)itunesId handleView:(BlockAppStoreInfo)appInfo;
- 判斷是否需要更新方法
+ (BOOL)zw_shouldUpdateApp:(ZWAppStoreModel *)model;
- 檢測更新版本對比邏輯
- 本地版本與App Store版本位數(shù)相同、逐位對比。
- 本地版本與App Store版本位數(shù)不同、位數(shù)補(bǔ)0后逐位對比。
/**
* 判斷是否需要更新
*/
+ (BOOL)zw_shouldUpdateApp:(ZWAppStoreModel *)model {
NSMutableArray *currentVersions = [NSMutableArray array];
NSMutableArray *appStoreVersions = [NSMutableArray array];
[currentVersions addObjectsFromArray:[APP_Version componentsSeparatedByString:@"."]];
[appStoreVersions addObjectsFromArray:[model.version componentsSeparatedByString:@"."]];
NSInteger difference = currentVersions.count - appStoreVersions.count;
if (difference < 0) {
for (NSInteger i = 0; i < labs(difference); i++) {
[currentVersions addObject:@"0"];
}
}else if (difference > 0){
for (NSInteger i = 0; i < labs(difference); i++) {
[appStoreVersions addObject:@"0"];
}
}
for (NSInteger i = 0; i < appStoreVersions.count; i++) {
NSInteger currNum = [currentVersions[i] integerValue];
NSInteger appStoreNum = [appStoreVersions[i] integerValue];
if (appStoreNum > currNum) {
return YES;
}else if (appStoreNum < currNum) {
return NO;
}
}
return NO;
}
請求應(yīng)用評論視圖封裝
- 自動檢測APP應(yīng)用的App Store地址、點(diǎn)擊前往對應(yīng)App Store評論頁面。
//推薦方法、
/**
* 請求評論視圖
* 視圖出現(xiàn)邏輯:限制每日最多出現(xiàn)次數(shù)、限制每次出現(xiàn)概率
* 限制最大出現(xiàn)次數(shù)避免用戶反感。
*/
[[ZWActionReview instanceReview] zw_actionRequestReview];
- 根據(jù)APP應(yīng)用的iTunesId請求評論視圖
/**
* 請求應(yīng)用評論彈窗
* 自定義iTunesId
*/
- (void)zw_actionRequestReview:(NSString *)itunesId;
- 直接跳轉(zhuǎn)到應(yīng)用App Store評論頁面
/**
* 前往當(dāng)前應(yīng)用的App Store評論界面
*/
- (void)zw_skipToAppStoreReview;
- 前往指定itunesId應(yīng)用的App Store評論界面
/**
* 前往指定itunesId應(yīng)用的App Store評論界面
*/
- (void)zw_skipToAppStoreReview:(NSString *)itunesId;
- 評論視圖邏輯控制
/**
* 請求評論視圖、每次出現(xiàn)的概率(0~1)
* 默認(rèn):0.1
*/
@property (nonatomic, assign) CGFloat probabilityDaliy;
/**
* 請求評論視圖、每日最多出現(xiàn)的次數(shù)
* 默認(rèn):每天最多出現(xiàn)一次
*/
@property (nonatomic, assign) NSInteger maxNumDaliy;
/**
* 請求評論視圖、一共允許出現(xiàn)的次數(shù)
* 默認(rèn):一共允許出現(xiàn)最多5次、避免引起用戶反感
*/
@property (nonatomic, assign) NSInteger maxTotalNum;
如何使用封裝SDK
強(qiáng)烈建議您使用pod導(dǎo)入,節(jié)省導(dǎo)入依賴的時間。
- 使用cocoaPods導(dǎo)入(搜索不到請更新本地倉庫)
pod 'ZWAppStore'
- 直接將文件夾ZWAppStore拖入工程中
#import "ZWAppStore.h"
源碼
源碼放在GitHub上,歡迎指正,記得star哦!
【V0.0.5】版本更新記錄
- 【修改】: 修改版本對比邏輯、適應(yīng)版本號位數(shù)不一致導(dǎo)致檢測更新失敗問題。
【V0.0.2】版本更新記錄
- 【修改】: 應(yīng)用檢測更新視圖圖片偏移bug。
【V0.0.1】版本更新記錄
- 【新增】: 封裝APP應(yīng)用與App Store交互相關(guān)邏輯。