核心功能在这里,其余步骤其实在另外一个FrameWorks工程,那边做的事情就是建立了一个HotUpdateControl对象 内部有一个方法getVcs 可以返回一个UIViewController数组
#import "TabController.h"
//#import <HotUpdateMudel/HotUpdateControl.h>
@interface TabController ()
@end
@implementation TabController
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super initWithCoder:aDecoder]) {
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSArray* arrFramework = [self getFilenamelistOfType:@"framework" fromDirPath:documentDirectory];
NSLog(@"%@",arrFramework);
if (arrFramework.count==0) {
NSArray * arrTitle = @[@"首页",@"广场",@"朋友圈",@"我的",@"设置"];
NSMutableArray * arrVcs = @[].mutableCopy;
for (int i=0; i<arrTitle.count; i++) {
UIViewController * vcRoot = [[UIViewController alloc]init];
vcRoot.title = arrTitle[i];
vcRoot.view.backgroundColor = [UIColor whiteColor];
UINavigationController * navi = [[UINavigationController alloc]initWithRootViewController:vcRoot];
[arrVcs addObject:navi];
}
[self setViewControllers:arrVcs animated:YES];
}else{
NSString *bundlePath = [NSString stringWithFormat:@"%@/%@",documentDirectory,[arrFramework lastObject]];
if (![[NSFileManager defaultManager] fileExistsAtPath:bundlePath]) {
NSLog(@"file not exist ,now return");
return self;
}
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
if (!bundle || ![bundle load]) {
NSLog(@"bundle load error");
}
Class loadClass = [bundle classNamed:@"HotUpdateControl"];
if (!loadClass) {
NSLog(@"get bundle class fail");
return self;
}
NSObject *bundleObj = [loadClass new];
NSArray * arrVc = [bundleObj performSelector:@selector(getVcs)];
NSMutableArray * arrVcs = @[].mutableCopy;
for (int i=0; i<arrVc.count; i++) {
UIViewController * vcRoot =arrVc[i];
vcRoot.view.backgroundColor = [UIColor whiteColor];
UINavigationController * navi = [[UINavigationController alloc]initWithRootViewController:vcRoot];
[arrVcs addObject:navi];
}
[self setViewControllers:arrVcs animated:YES];
}
}
return self;
}
-(NSArray *) getFilenamelistOfType:(NSString *)type fromDirPath:(NSString *)dirPath
{
NSArray *fileList = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:dirPath error:nil]
pathsMatchingExtensions:[NSArray arrayWithObject:type]];
return fileList;
}
- (void)viewDidLoad {
[super viewDidLoad];
}