iOS 热更新的开发思路

大概思路:后台开发一个相应的接口,在程序初始化的时候调用来获取是否要启用热更新功能和一个hotFix版本号,如果不起用热更功能直接return,反则用服务器的hotFix与本地的hotFix对比,如果服务器的hotfix高于本地的hotFix,下载服务器的热更资源。存在本地library下的caches文件夹中。

一个工程的热更新包括:1.代码的修改,用JSPatch。这个不多解释,在github上写的很清楚。


2.图片资源的更新。本地图片资源最大打到一个bundle中方便更新和修改(用文件夹也没什么关系),将需要热更的图片资源放到caches中。封装一个取图片的方法,先在caches中去判断此图片有没有,如果有用caches中的,如果没有用bundle中的。

+ (UIImage *)imageInBundleWithName:(NSString *)fileName {

    //caches路径

    NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    //图片路径

    NSString *strPath=[cachesPath stringByAppendingPathComponent:fileName];

    NSLog(@"%@",strPath);

    

    if ([[NSFileManager defaultManager] fileExistsAtPath:strPath]&&[IAParamManager shareInterface].isHotFix) {

        return [UIImage imageWithContentsOfFile:strPath];

    }

    

    else{

        //bundle中取

        NSArray *arr = [fileName componentsSeparatedByString:@"."];

        NSString *name = nil;

        NSString *type = nil;

        if ([arr count] == 2) {

            name = [arr objectAtIndex:0];

            type = [arr objectAtIndex:1];

        }

        NSString *path = [[IAUtility frameworkBundle] pathForResource:name

                                                               ofType:type];

        return [UIImage imageWithContentsOfFile:path];

    }

}

3.如果做了国际化需要热更语言包。语言包的热更不能更语言里面的某个翻译,只能整个语言包的整体替换。也是封装一个语言翻译方法,在方法中判断

 if ([[NSFileManager defaultManager] fileExistsAtPath:strPath]&&[IAParamManager shareInterface].isHotFix) {

            NSBundle * languageBundle = [NSBundle bundleWithPath:strPath];

            ss = [languageBundle localizedStringForKey:str value:@"" table:nil];

        }

        else{

        NSString * path= [[self frameworkBundle] pathForResource:@“语言” ofType:@"lproj"];

        NSBundle * languageBundle = [NSBundle bundleWithPath:path];

        ss = [languageBundle localizedStringForKey:str value:@"" table:nil];

        }

如果需要其他更新思路思路一样,先去caches中判断有误热更文件。

关于热更新的原理需要先理解runtime机制,推荐博客http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值