iOS App嵌入App,子App打包Framework 嵌入主App内
程序开发
2023-09-21 23:58:23
一直在搞开发,也没好好捋捋思路,就抽空总结一下
OC、Swift打包静态库,嵌入APP
演示项目地址:https://github.com/ySeasons/CustomFramework
1、场景:
介绍:
2、什么是库?
共享代码便是库,实现代码的复用,一般分为静态库和动态库
区别:
静态库:链接时完整的拷贝到可执行文件,多次使用多次拷贝,造成冗余,使包变得更大
动态库:链接时不复制,程序运行时由系统加载到内存中,不论系统加载次数,共用节省内存iOS静态库: .a 和 .framework 文件
iOS动态库: .dylib 和 .framework 文件
.framework 有动态/静态库?:系统的架构是动态的,自己创建的是静态的
.a和.framework区别: .a是单纯的二进制文件.framework是二进制文件+资源文件.a不能直接使用,需要.h文件配合 / .framework可以直接使用.framework = .a + .h + Resources(资源文件)为什么使用静态库?共享代码,方便使用;实现iOS程序的模块化,业务模块化,减少开发的重复劳动;与他人分享代码,但不想他人知道代码的具体实现;开发第三方SDK;其他项目集成调用3、注意点 打包.framework的项目(子项目)中:-AppDelegate、SceneDelegate 不要打包静态库中,文件中的操作要封装成接口暴露出去-项目中的三方库cocoapods管理,可以不用打包进静态库,(说明依赖哪些第三方库):主工程与子工程公用,主工程集成三方库;:若子项目打包了某个第三方库,主项目也用到该三方库,那么子项目要把该三方库在header暴露出来供主项目调用,主项目不要再集成此库-.pch文件重新设置地址-资源文件:默认情况下,静态库只会打包代码文件,创建bundle文件夹,把图片、Images.xcassets、plist、xib、storyboard、文件等打包- 主工程和子工程 文件命名不要相同,会出现问题嵌入到主工程中:<下面会具体指出>
本文以主工程(YYMain)和子工程(YYSub)来说明
过程:
1、YYSub是一个可以运行的子项目
2、新建YYSubFramework静态库工程,配置::CocoaPods 同步子工程的三方库安装 pod install:YYSub文件拖入YYSubFramework:创建bundle文件,拖入资源文件:重新配置 .pch 文件路径:删除AppDelegate文件:新建继承与NSObject的类对外开放(YYSubOpen.h在拖入header中)(此类中把AppDelegate中的方法实现封装):Mach-O Type 选择 Static Library (静态库):Architectures 默然arm64、armv7,(若支持老版本,请查资料):编译成功之后Products下的文件,就是打包成功的静态库(YYSubFramework.framework)注意:支持设备、版本号保持一致
打包过程中可能遇到:
.pch文件地址重新设置
.plist、read.md 等文件重复
Architectures 设置
...等问题,分别对应解决
新建 **framework库工程
YYSubOpen代码 如下:
.h
#import
#import
@interface YYSubOpen : NSObject
//跳转视图
- (UITabBarController *)openSubApp;
//配置内容
- (void)configSetting;
@end.m
#import "YYSubOpen.h"
#import "YYTabBarViewController.h"
@implementation YYSubOpen
//跳转视图
- (UITabBarController *)openSubApp {return (UITabBarController *)[[YYTabBarViewController alloc] init];
}
//配置内容
- (void)configSetting {// 配置一些三方设置// 账号是否连通// 。。。。
}
@end
YYMain主工程引入 YYSubFramework.framework静态库
导入
#import // 调用跳转代码如下
#import "YYMainViewController.h"
@interface YYMainViewController ()
@end
@implementation YYMainViewController
- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];[self.navigationController setNavigationBarHidden:NO animated:YES];[self.tabBarController.tabBar setHidden:NO];
}
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.navigationItem.title = @"首页";UIButton *button = [[UIButton alloc] init];button.frame = CGRectMake(50, 150, 200, 50);[button setTitle:@"跳转sub-App" forState:UIControlStateNormal];[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];[button addTarget:self action:@selector(goToSubApp) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:button];
}
- (void)goToSubApp{[self.tabBarController.tabBar setHidden:YES];[self.navigationController setNavigationBarHidden:YES animated:YES];YYSubOpen *subApp = [[YYSubOpen alloc] init];[subApp configSetting];UITabBarController *tabVC = [subApp openSubApp];[self.navigationController pushViewController:tabVC animated:YES];
}
@end// 子App 返回代码
- (void)backClick{[self.tabBarController.navigationController popToRootViewControllerAnimated:YES];
}
演示项目地址:https://github.com/ySeasons/CustomFramework
参考链接:
https://www.jianshu.com/p/b1859dc04fbd
https://www.jianshu.com/p/826c9af4323c
https://www.jianshu.com/p/44f924a44b76
https://www.jianshu.com/p/f6356a7bef25
https://www.jianshu.com/p/6790fc295f48?appinstall=0
标签:
上一篇:
HTML5之WebStorage
下一篇:
相关文章
-
无相关信息