1.新建FW.xcworkspace,FWFramework.xcodeproj,FWApp.xcodeproj。
1
2.关联项目,将FWApp.xcodeproj和FWFramework.xcodeproj拖入FW.xcworkspace。
2
3.在FWApp的Build Scheme中添加FWFramework的编译并前置。
Paste_Image.png
4.在FWFramework中设置脚本,将编译好的FWFramework.framework放置在指定文件夹,并在FWApp中设置文件夹引用。
在指定位置新建文件夹
4.2
在FWApp中拖入Embedded文件夹,设置为文件夹引用,减小依赖
4.3
设置FWFramework脚本,将编译好的FWFramework.framework放在指定文件夹里
4.1
# copy framework to FWApp/Embedded
rm -rf "${PROJECT_DIR}/../Embedded/${PROJECT_NAME}.framework"
cd "${CONFIGURATION_BUILD_DIR}"
cp -r "${PROJECT_NAME}.framework" "${PROJECT_DIR}/../Embedded/"
#end
尝试编译,在指定文件夹中预期,出现FWFramework.framework
Paste_Image.png
5.在FWApp中调用FWFramework.framework
Paste_Image.png
- (IBAction)clickGoFWFrameworkViewControllerButton:(id)sender {
UIViewController *fwFrameworkViewController = [self loadFrameworkViewControllerWithBundleNamed:@"FWFramework" ViewControllerName:@"FWFrameworkViewController"];
[self.navigationController pushViewController:fwFrameworkViewController animated:YES];
}
- (id)loadFrameworkViewControllerWithBundleNamed:(NSString *)frameworkName ViewControllerName:(NSString *)viewControllerName{
NSFileManager *manager = [NSFileManager defaultManager];
NSString *bundlePath = [[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"Embedded/%@",frameworkName] ofType:@"framework"];
// Check bundle exists
if (![manager fileExistsAtPath:bundlePath]) {
UIAlertController *alertViewController = [UIAlertController alertControllerWithTitle:nil message:@"Not Found Framework" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"👌" style:UIAlertActionStyleDefault handler:nil];
[alertViewController addAction:okAction];
[self presentViewController:alertViewController animated:YES completion:nil];
return nil;
}
// Load bundle
NSError *error = nil;
NSBundle *frameworkBundle = [NSBundle bundleWithPath:bundlePath];
if (frameworkBundle && [frameworkBundle loadAndReturnError:&error]) {
NSLog(@"Load framework successfully");
}else {
NSLog(@"Failed to load framework : %@",error);
return nil;
}
// Load class
Class class = NSClassFromString(viewControllerName);
if (!class) {
NSLog(@"Unable to load class");
return nil;
}
id object = [class new];
return object;
}
RUN 调用成功(暂时还未解决加载nib和storyboard)
Paste_Image.png