随笔-生活工作点滴

iOS手把手创建framework与资源使用

2019-07-05  本文已影响32人  灬朴一生

前言

近期在工作中与SDK 配合开发,由于之前没做过framework,为了能更好的配合设计,所以进行了简单的了解,以下就是简单的一个入门

概述

为了完成此次GitHub-testFrameWork,我们需要创建三个类型的文件.

打开xcode -> shift + command + N 进行创建

  1. 资源文件: macOS -> Bundle
  2. framework: iOS -> Cocoa Touch Framework
  3. demo项目
1.创建配置资源文件Bundle

根据项目需要修改此次模式,macOS模式 -> iOS模式

WX20190705-003529@2x.png

COMBINE_HIDPI_IMAGES 修改为 NO,否则bundle中的图片格式别替换成就tiff格式

WX20190705-003606@2x.png

作为资源包,仅仅需要编译,无需安装相关的配置,设置Skip install为YES

WX20190705-003639@2x.png

Debug-iphoneos : 手机-Debug模式
Debug-iphonesimulator : 模拟器-Debug模式

Release-iphoneos : 手机-Release模式
Release-iphonesimulator : 模拟器-Release模式

WX20190705-004619@2x.png
2.创建配置framework

Build Active Architecture Only为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真机运行

WX20190705-005603@2x.png

编译选项优化

WX20190705-005649@2x.png

Xcode默认是动态库,需要配置成静态库(StaticLibrary)

WX20190705-005726@2x.png

最低支持版本

WX20190705-005921@2x.png

创建了3个类作为例子

// 模型
Preson : NSObject
// 类方法
+ (void)eat;
// 控制器
TestViewController : UIViewController
// 代理
@property (nonatomic, weak) id<TestViewControllerDelegate>  delegate;
// 私有类,仅在framework中可以调用
Private : NSObject

根据下图设置公开或不公开

WX20190705-011059@2x.png

打开刚刚的Bundle文件,command + B 编译后
Show in Finder 找到对应的文件

WX20190705-103016@2x.png

将.bundle文件添加进framework

WX20190705-103114@2x.png
// 获取plist文件 进行打印
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"testFrameWork.framework/TestLibrary" ofType:@"bundle"];
NSBundle *testBundle = [NSBundle bundleWithPath:bundlePath];
NSString *p = [testBundle pathForResource:@"test_Plist" ofType:@"plist"];
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:p];
NSLog(@"\n-----------\ntestFrameWork->Preson读取到的plist\ntest_Plist:%@\n-------------",dic);
// 获取图片路径
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"testFrameWork.framework/TestLibrary" ofType:@"bundle"];
NSBundle *testBundle = [NSBundle bundleWithPath:bundlePath];
NSString *path = [testBundle pathForResource:@"test_Image@2x" ofType:@"png"];
// 设置图片
imageView.image = [UIImage imageWithContentsOfFile:path];

设置模式,此次以Release模式为标准设置
红色框住内容,均设置为 Release

WX20190705-102704@2x.png

分别设置手机与模拟器方式编译一次framework (Command + B)

WX20190705-102742@2x.png
WX20190705-102752@2x.png

编译完成,找到对应的framework后,将两种模式合并,这样我们的生成的framework可以在手机和模拟器两种模式下使用

WX20190705-011130@2x.png WX20190705-011357@2x.png
WX20190705-011418@2x.png

进行合并sudo lipo -create

WX20190705-011643@2x.png
WX20190705-011742@2x.png

设置输出路径 -output

WX20190705-012015@2x.png WX20190705-012140@2x.png

使用lipo -info查看是否成功

WX20190705-012404@2x.png

替换文件,项目使时,记得拷贝我们替换过的framework

WX20190705-012542@2x.png
3.整合项目及使用
// 导入头文件
#import <testFrameWork/Preson.h>
#import <testFrameWork/TestViewController.h>
// 调用类方法
[Preson eat];
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    // 使用testVC
    TestViewController *tVC = [[TestViewController alloc] init];
    tVC.delegate = self;
    [self.navigationController pushViewController:tVC animated:YES];
}

#pragma mark Delegate
-(void)clickTestViewController{
    NSLog(@"TestViewController-----Delegate");
}
具体内容可以下载Demo进行查看

GitHub-testFrameWork

上一篇下一篇

猜你喜欢

热点阅读