美文网首页
iOS动态更新

iOS动态更新

作者: 暖羊羊_d603 | 来源:发表于2018-06-08 18:13 被阅读0次

    iOS 可以使用本地库来加载代码 实现更新,只是需要将部分初始化写好;

    将打包的的framework 下载在 新的工程的 NSDocumentDirectory路径下 
    测试的话 可以直接打开路径 将打包好的 framework 放在对应的路径下面 
    

    这里有个问题,
    1.打包的库中,加载的资源文件 统一放在一个NSbundle中,并且使用 路径的方式加载,
    (1)要么统一命名一个当前bundle 在初始化的时候 对这个bundle进行初始化,
    (2)最方便的 就是创建bundle的时候 修改一下方式 则可以访问当前bundle中的资源

      // 加载资源文件  主要是 bundle的创建方式
        self.imageView.image = [UIImage imageNamed:@"data.png"
                                          inBundle:[NSBundle bundleForClass:[self class]]
                     compatibleWithTraitCollection: nil];
    

    下面就是根据路径 加载bundle获取对应的 ViewController
    如果直接暴露的是 控制器的名字 也可以直接获取控制器

    + (UIViewController *)readFramework {
    
        NSString *bundlePath = [self getFrameworkFilePath];
        if (![[NSFileManager defaultManager] fileExistsAtPath:bundlePath]) {
            NSLog(@"file not exist ,now  return");
            return nil;
        }
        NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
        if (!bundle || ![bundle load]) {
            NSLog(@"bundle load error");
            return nil;
        }
        
    //    void *lib = dlopen([bundlePath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_NOW);
    //    if (!lib) {
    //        NSLog(@"bundle load error");
    //        return nil;
    //    }
        
        Class loadClass = [bundle classNamed:@"WYJUIM"];
        if (!loadClass) {
            NSLog(@"get bundle class fail");
            return nil;
        }
        
        NSObject *bundleObj = [[loadClass alloc] init];
        UIViewController *vc = [bundleObj performSelector:@selector(getVC)];
        return vc;
        
    }
    

    相关文章

      网友评论

          本文标题:iOS动态更新

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