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;
}
网友评论