iOS App嵌入App,子App打包Framework 嵌入主App内

一直在搞开发,也没好好捋捋思路,就抽空总结一下
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 <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@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 <YYSubFramework/YYSubOpen.h>

// 调用跳转代码如下
#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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值