素材巴巴 > 程序开发 >

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 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。