KZWFoundation基礎(chǔ)配置之Debug模式

之所以有這個(gè)東西是因?yàn)榉奖阏{(diào)試和查問題恤煞,正常來說我們需要的基礎(chǔ)功能包括切換環(huán)境,看日志侄柔,清緩存共啃,限制網(wǎng)速測(cè)試等。還有一些的就是根據(jù)不同的業(yè)務(wù)場(chǎng)景來添加如快速訪問一個(gè)網(wǎng)頁暂题,特殊測(cè)試需求的入口等移剪。一定要注意這些功能都要判斷debug,不要出現(xiàn)在線上P秸摺W菘痢!
切換環(huán)境的原理就是我們?nèi)直4嬉粋€(gè)key來當(dāng)現(xiàn)在的環(huán)境言津,切換的時(shí)候改變value的值然后接口訪問的時(shí)候根據(jù)不同的value值拼接不同的接口鏈接就可以了攻人。
代碼如下:

AppDelegate設(shè)置默認(rèn)
#if DEBUG
    [ELMEnvironmentManager setEnvironment:[[NSUserDefaults standardUserDefaults] objectForKey:@"LPDB_ENV"]? ((NSNumber *)[[NSUserDefaults standardUserDefaults] objectForKey:@"LPDB_ENV"]).integerValue: ELMEnvBeta];
#endif
環(huán)境枚舉如下:
typedef NS_ENUM(NSUInteger, ELMEnv) {
    ELMEnvTesting = 1,
    ELMEnvStaging,
    ELMEnvBeta,
    ELMEnvAlpha,
    ELMEnvProduction,
};

看日志,我是在接口返回的基類里去保存下接口的返回值悬槽,然后在viewcontroller的基類里寫搖一搖進(jìn)行展示返回怀吻。
代碼如下:
1.創(chuàng)建一個(gè)KZWDebugService來管理日志的保存和刪除

#import "KZWDebugService.h"
#import "KZWConstants.h"

@implementation KZWDebugService

static id _debug = nil;

+ (id)currentDebug {
    @synchronized(self) {
        if (!_debug) {
            NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:KZWDEBUGKEY];
            if (data) {
                _debug = [NSKeyedUnarchiver unarchiveObjectWithData:data];
            }
        }
    }
    return _debug;
}

+ (void)setCurrentDebug:(id)debug {
    @synchronized(self) {
        _debug = debug;
    }
}

+ (void)saveDebug {
    @synchronized(self) {
        if (_debug == nil) {
            [[NSUserDefaults standardUserDefaults] removeObjectForKey:KZWDEBUGKEY];
        } else {
            NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_debug];
            [[NSUserDefaults standardUserDefaults] setObject:data forKey:KZWDEBUGKEY];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }
}

+ (void)deleteDebug {
    @synchronized(self) {
        _debug = nil;
        [[NSUserDefaults standardUserDefaults] removeObjectForKey:KZWDEBUGKEY];
    }
}

@end

2.保存日志數(shù)據(jù):

#import "LPDBRequestObject.h"
- (void)handleRespondse:(NSURLSessionDataTask *)response responseObject:(id)responseObject error:(NSError *)error {
#if DEBUG
    [KZWDebugService setCurrentDebug:responseObject];
    [KZWDebugService saveDebug];
#endif
}

3.在基類KZWViewController中加搖一搖觸發(fā)

#if DEBUG
    [[UIApplication sharedApplication] setApplicationSupportsShakeToEdit:YES];
#endif
#pragma mark - ShakeToEdit 搖動(dòng)手機(jī)之后的回調(diào)方法

- (void) motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    //檢測(cè)到搖動(dòng)開始
    if (motion == UIEventSubtypeMotionShake)
    {
        // your code
        NSLog(@"檢測(cè)到搖動(dòng)開始");
    }
}

- (void) motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    //搖動(dòng)取消KZWDebugService
    NSLog(@"搖動(dòng)取消");
}

- (void) motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    //搖動(dòng)結(jié)束
    if (event.subtype == UIEventSubtypeMotionShake) {
        // your code
        NSLog(@"搖動(dòng)結(jié)束");
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//振動(dòng)效果 需要#import <AudioToolbox/AudioToolbox.h>
        
        NSString *message = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:[KZWDebugService currentDebug] options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];  //對(duì)展示進(jìn)行格式化處理
        [[KZWHUD sharedKZWHUD] showDebug:message];
        
    }
}
- (void)showDebug:(NSString *)message {
    [[[[UIApplication sharedApplication] delegate] window] addSubview:self.bgView];
    self.bgView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
    [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.mas_equalTo(UIEdgeInsetsMake(0, 0, 0, 0));
    }];
    
    
    
    UIScrollView *scrollerview = [[UIScrollView alloc] initWithFrame:CGRectMake(10, KZW_StatusBarAndNavigationBarHeight, SCREEN_WIDTH - 20, SCREEN_HEIGHT - KZW_StatusBarAndNavigationBarHeight - KZW_TabbarHeight)];
    scrollerview.backgroundColor = [UIColor whiteColor];
    
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH - 20, SCREEN_HEIGHT - KZW_StatusBarAndNavigationBarHeight - KZW_TabbarHeight) textColor:[UIColor colorWithHexString:FontColor333333] font:FontSize26];
    label.text = message;
    [label sizeToFit];
    [scrollerview addSubview:label];
    scrollerview.contentSize = CGSizeMake(SCREEN_WIDTH - 20, label.frame.size.height);
    [self.bgView addSubview:scrollerview];
    
    UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH - 30 - 20, KZW_iPhoneX?44:20, 30, 30)];
    [backButton setImage:[UIImage imageNamed:@"bg_cancel"] forState:UIControlStateNormal];
    [self.bgView addSubview:backButton];
    
    @WeakObj(self)
    [backButton touchUpInside:^{
        @StrongObj(self)
        [self.bgView removeFromSuperview];
        self.bgView = nil;
    }];
}

限制網(wǎng)速是去設(shè)置中的開發(fā)者里的network link conditioner進(jìn)行設(shè)置。


網(wǎng)速限制.jpeg

清緩存在之前的文章中說過初婆,就直接放代碼了:

- (void)clearCache {
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
        WKWebsiteDataStore *dateStore = [WKWebsiteDataStore defaultDataStore];
        [dateStore fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes]
                         completionHandler:^(NSArray<WKWebsiteDataRecord *> * __nonnull records) {
                             for (WKWebsiteDataRecord *record  in records)
                             {
                                 if ( [record.displayName containsString:@"xxxxx"])
                                 {
                                     [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:record.dataTypes
                                                                               forDataRecords:@[record]
                                                                            completionHandler:^{
                                                                                NSLog(@"Cookies for %@ deleted successfully",record.displayName);
                                                                                [KZWTosatView showToastWithMessage:@"清除成功" view:self.view];
                                                                            }];
                                 }
                             }
                         }];
    }else {
        NSString *librarypath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
        NSString *cookiesFolderPath = [librarypath stringByAppendingString:@"/Cookies"];
        [[NSFileManager defaultManager] removeItemAtPath:cookiesFolderPath error:nil];
    }
    NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (NSHTTPCookie *cookie in [cookieJar cookies]) {
        [cookieJar deleteCookie:cookie];
    }
}

這只是一些通用的debug設(shè)置蓬坡,更多的是不同公司不同業(yè)務(wù)需求下的一些debug配置,讀者可以在評(píng)論里說出來磅叛,有意思的可以一起討論下屑咳。文章完。
代碼地址:https://github.com/ouyrp/KZWFoundation

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宪躯,一起剝皮案震驚了整個(gè)濱河市乔宿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌访雪,老刑警劉巖详瑞,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異臣缀,居然都是意外死亡坝橡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門精置,熙熙樓的掌柜王于貴愁眉苦臉地迎上來计寇,“玉大人,你說我怎么就攤上這事》” “怎么了元莫?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蝶押。 經(jīng)常有香客問我踱蠢,道長(zhǎng),這世上最難降的妖魔是什么棋电? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任茎截,我火速辦了婚禮,結(jié)果婚禮上赶盔,老公的妹妹穿的比我還像新娘企锌。我一直安慰自己,他們只是感情好于未,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布撕攒。 她就那樣靜靜地躺著,像睡著了一般烘浦。 火紅的嫁衣襯著肌膚如雪打却。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天谎倔,我揣著相機(jī)與錄音,去河邊找鬼猿推。 笑死片习,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹬叭。 我是一名探鬼主播藕咏,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼秽五!你這毒婦竟也來了孽查?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤坦喘,失蹤者是張志新(化名)和其女友劉穎盲再,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓣铣,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡答朋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棠笑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梦碗。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洪规,到底是詐尸還是另有隱情印屁,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布斩例,位于F島的核電站雄人,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏樱拴。R本人自食惡果不足惜柠衍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晶乔。 院中可真熱鬧珍坊,春花似錦、人聲如沸正罢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翻具。三九已至履怯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裆泳,已是汗流浹背叹洲。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留工禾,地道東北人运提。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闻葵,于是被迫代替她去往敵國(guó)和親民泵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • 1槽畔、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,981評(píng)論 3 119
  • 愛若不放電栈妆,空若電線桿,愛若不瀟灑厢钧,呆如池塘蛙鳞尔,愛若不表達(dá),憋死別說啥坏快,大聲說出來铅檩,早就把你愛,明白不明白莽鸿,...
    風(fēng)雨一起走閱讀 297評(píng)論 0 0
  • 我非常地迷戀英國(guó)昧旨。為什么呢拾给?準(zhǔn)確地來說,我迷戀的是某個(gè)時(shí)期的英國(guó)⊥梦郑現(xiàn)代化的元素削弱了英國(guó)在我心目中的浪漫感...
    Sunnyliu_5d5a閱讀 761評(píng)論 2 4
  • 祈請(qǐng)上夢(mèng)下參恩師阿彌陀佛 五臺(tái)首嘗甘露味蒋得, 法喜周遍狂心皈。 夜半步拜黛螺頂乒疏, 誠謝文殊法雨威额衙。 一代宗師,驚天圓...
    捧圣閱讀 215評(píng)論 0 0
  • 電裝工藝:從設(shè)計(jì)到生產(chǎn)的橋梁 產(chǎn)品制造可行性設(shè)計(jì):能夠找到生產(chǎn)的廠家 聚四氟乙烯:(PTFE,F4)化學(xué)穩(wěn)定性怕吴、熱...
    TG帥閱讀 211評(píng)論 1 0