美文网首页随笔-生活工作点滴
iOS手把手创建framework与资源使用

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

作者: 灬朴一生 | 来源:发表于2019-07-05 17:37 被阅读32次

    前言

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

    概述

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

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

    1. 资源文件: macOS -> Bundle
    2. framework: iOS -> Cocoa Touch Framework
    3. demo项目
    1.创建配置资源文件Bundle
    • 创建Bundle WX20190705-003327@2x.png
    • 配置Base SDK

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

    WX20190705-003529@2x.png
    • 配置COMBINE_HIDPI_IMAGES

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

    WX20190705-003606@2x.png
    • 配置Skip Install

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

    WX20190705-003639@2x.png
    • 添加所需资源 WX20190705-004507@2x.png
    • 编译生成.bundle文件,command + B 编译后生成相应文件

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

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

    WX20190705-004619@2x.png
    2.创建配置framework
    • 创建framework - Cocoa Touch Framework WX20190705-004806@2x.png
    • 配置Build Active Architecture Only

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

    WX20190705-005603@2x.png
    • 配置Dead Code Stripping

    编译选项优化

    WX20190705-005649@2x.png
    • 配置Mach-O Type

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

    WX20190705-005726@2x.png
    • 配置iOS Deployment Target

    最低支持版本

    WX20190705-005921@2x.png
    • 删除自带的头文件 WX20190705-010122@2x.png
    • 创建生成所需文件

    创建了3个类作为例子

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

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

    WX20190705-011059@2x.png
    • Bundle整合进framework

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

    WX20190705-103016@2x.png

    将.bundle文件添加进framework

    WX20190705-103114@2x.png
    • 在framework中使用.bundle的资源
    // 获取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];
    
    • 配置生成framework

    设置模式,此次以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.整合项目及使用
    • 整合配置 WX20190705-160300@2x.png WX20190705-112651@2x.png
    • framework使用

    // 导入头文件
    #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

    相关文章

      网友评论

        本文标题:iOS手把手创建framework与资源使用

        本文链接:https://www.haomeiwen.com/subject/lypshctx.html