美文网首页
JSPatch使用小记

JSPatch使用小记

作者: xietao3 | 来源:发表于2016-11-03 09:57 被阅读50次

如何与产品和谐相处

前言

由于苹果审核周期过长,导致iOS App发包所需要的成本超出其他平台,在遇上一些严重Bug的时候,往往只能申请加急,审核加急又是有限制的。而JSPatch的闪亮登场,有效地解决了这一问题,关于基本使用的参考已经非常多了,本文着力讲优化相关。

参考

接入使用JSPatch

# Your Podfile
platform :ios, '6.0'
pod 'JSPatch'

检测更新

  • 首先我们需要先判断是否需要更新,一般由一个单独接口返回,如果需要更新,再去获取最新的补丁,而我们本地要记录好补丁的版本号,下载修复包建议使用JPLoader,这个类几乎帮我们做好了所有事情。下载方法:
/**
 *  更新到指定hotfix版本
 *
 *  @param version    指定hotfix版本  
 *  @param rootUrl    更新包所在服务器根地址  
 *  @param publicKey  验签下载内容所需要的公钥  
 *  @param callback   更新完成后的回调
 */
+ (void)updateToVersion:(NSInteger)version rootUrl:(NSString *)rootUrl publicKey:(NSString *)publicKey callback:(JPUpdateCallback)callback;
  • 根据实际情况考虑是否要添加请求间隔,以避免接口请求过于频繁
/**
 检测请求间隔(建议请求间隔为1小时)
 
 @return 是否可以请求
 */
- (BOOL)checkRequestVersionInterval {
    // 间隔检查
    NSString *updateDateString = kUserDefaultsObjectForKey(kJSPatchUpdateDateKey);
    NSDate *updateDate = [NSString dateFromString:updateDateString];
    NSLog(@"old %@",updateDateString);
    // 检查本地保存的时间是否合法
    if (updateDate && [updateDate isKindOfClass:[NSDate class]]) {
        
        NSDate *nowDate = [NSDate date];
        NSLog(@"now %@",nowDate);

        // 看是否到了需要更新的时候
        if ([nowDate compare:updateDate] == NSOrderedAscending) {
            return NO;
        }
    }
    
    NSDate *newUpdateDate = [NSDate dateWithTimeIntervalSinceNow:3600];
    NSString *newUpdateDateString = [NSString stringFromDate:newUpdateDate];
    NSLog(@"new %@",newUpdateDateString);
    [[NSUserDefaults standardUserDefaults] setObject:newUpdateDateString forKey:kJSPatchUpdateDateKey];
    return YES;
}

加载修复代码

  • 加载修复代码这里需要注意的是,万一补丁代码出错,造成的后果是不堪设想的,会导致App无法开启,连续闪退的情况,所以监控连续闪退的情况是十分有必要的。
  • 这里的监测方法十分简单,延时器的简单用法
/**
 检查Crash的情况(如果加载补丁后导致连续闪退 则不再加载)
 
 @return bool
 */
- (BOOL)checkCrashEvent {
    // 闪退次数延时清0
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:kJSPatchCrashCountKey];
    });
    
    NSString *crashCount = kUserDefaultsObjectForKey(kJSPatchCrashCountKey);
    if (crashCount && [crashCount integerValue] > 0) {
        NSInteger crashNum =  [crashCount integerValue];
        if (crashNum > 3) {
            NSLog(@"连续闪退超过3次了");
            return NO;
        }
        
        // 记录crash次数
        crashNum++;
        [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%ld",crashNum] forKey:kJSPatchCrashCountKey];
    }else{
        [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:kJSPatchCrashCountKey];
    }
    return YES;
}
  • 用来实现闪退的相关代码,还有数组越界等方式
//crash code
{
    NSArray *arr = [[NSArray alloc] init];
    id fadeDict = arr;
    NSDictionary *dict = fadeDict;
    [dict getObjectForKey:@"key"];
}
  • 在连续闪退的情况下不执行加载补丁方法

结语

宝剑用好了是制胜利器,没用好的话...

相关文章

  • JSPatch使用小记

    hotfix的作用众所周知,Android和iOS都有各自的技术,但是相比Android的当天发布来说(如果你们的...

  • JSPatch 使用小记

    前言 JSPatch是一个开源项目(Github链接),只需要在项目里引入极小的引擎文件,就可以使用JavaScr...

  • JSPatch使用小记

    如何与产品和谐相处 前言 由于苹果审核周期过长,导致iOS App发包所需要的成本超出其他平台,在遇上一些严重Bu...

  • JSPatch使用 私有变量操作

    基本使用 ** JSPatch 官方平台 ** ** JSPatch 语法转换 ** JSPatch基本使用 JS...

  • JSPatch小记

    iOS App发展到今天,越来越多的 App 需要动态部署技术,无需等待周期不定的苹果审核,实时修复线上bug,对...

  • JsPatch学习(1)【使用篇】

    JsPatch的使用很多,简单介绍热修复功能。JsPatch【使用篇】 最简单的使用: 1、注册App 到JSPa...

  • JSPatch基础用法总结

    JSPatch 1.打印console.log(); 2.Protocol 3.Masonry使用JSPatch如...

  • 网站

    iOS常用 XCode代码混淆 Mac常用软件破解版下载 mongodb jspatch介绍 jspatch使用 ...

  • JSPatch 使用

    JSPatch以小巧的体积做到了让JS调用/替换任意OC方法,让iOS APP具备热更新的能力,在实现 JSPat...

  • 使用七牛下发JSPatch文件及文件加密

    使用JSPatch这么久了,一直都是使用http://jspatch.com/平台集成SDK来实现js文件下发和版...

网友评论

      本文标题:JSPatch使用小记

      本文链接:https://www.haomeiwen.com/subject/pmcbuttx.html