zoukankan      html  css  js  c++  java
  • iOS 静态库的封装

     
    注意:封装静态库时要注意的地方:

    1、如果要封装的文件中有派生类,比如NSString+helper这样的写法,那就需要把TARGETS->Build Settings->Linking->Other Linker Flags的属性设置为-ObjC或者-all_load(注意是在打包SDK的项目中添加),否则它会一直奔溃,并且还一直奔溃在你正在使用中的派生类里边,接下来,补充一下,静态库的封装方法。

     
    2、创建项目后赶紧把PROJECT->Info->Deployment Target->iOS Deployment Target的目标版本给换成自己要的版本,以免到时候弄个乌龙出来

    一、创建项目

    创建静态库跟普通创建项目有点不一样,创建之时,他要选择Framework &Library中的Cocoa Touch Static Library

    二、把你要封装的文件拖进项目,然后就开始开放接口了

    开放接口的方法:TARGETS->点击Target Dependencies左上角的"+",再出现的弹框中选择New Headers Phase,此时在Target Dependencies最底部便能出现Headers了,将SDK中的所有.h文件添加进入Headers->Project,然后把要开放的.h文件从Project中拖进Public中,实际上自己在里边直接创建、编写SDK文件也是没问题的,至此便达成了开放SDK接口的目的。

    如果你有什么不方便开放的东西或者给予用户一点点开放空间,就创建一个类吧,但是别把它添加进入封装之列,我这边是预留了一个类one_analysis.h,等到SDK出来之后我会直接在Demo中把它添加进去

    三、静态库模式

    静态库分为四种模式:1、真机Debug模式;

                                        2、真机Release模式;

                                       3、模拟器Debug模式;

                                       4、模拟器Release模式

    1、选机型

    选择真机模式的时候机器要选择Generic iOS Device,这个是真机通用型,可以用于所有真机,模拟器就可以在iOS Simulators中随便选了

    2、选模式

    选模式即在Edit Scheme->Info的Bulid Configuration中选择对应的Debug/Release

    3、生成不同模式的静态库文件

    当你在模拟器时选了Debug,然后Command+B(或者Command+R),运行成功后,项目自带文件夹Products中的.a文件就会由红色变为黑色,这就意味着静态库已经生成了。光标指向.a文件,右键 show in Finder就可以找到.a文件了

    四、合并静态库

    一般来说,为了节省内存,以上四种模式就够用了,但是总有奇怪的需求:要合并静态库,增加自己的应用大小。

    我现在还只能做:通用Debug = 模拟器Debug+真机Debug

                                 通用Release = 模拟器Release+真机Release

    合并需要在终端进行,以Debug为例,公式是这样的lipo -create 模拟器Debug静态库地址+真机Debug静态库地址 -output 存放通用静态库的文件夹地址+通用静态库名

    五、组合SDK

    简单的说就是静态库文件+接口+用户可操作的.h、.m文件

     
     
     
     
    • 7.确保生成的静态库能在你所有模拟器上运行,先查看静态库支持的平台.
      • 使用lipo -info查看库所支持的架构. i386 x86_64: 表示能在所有模拟器上运行.
      • 模拟器架构: iPhone 4s - iPhone 5是i386架构,iPhone 5s - iPhone 6s Plus是x86_64架构.

    07.查看库所支持的架构.png

    • 8.静态库的使用.只需将生成的.a文件和.h文件拖入到测试静态库的工程即可使用静态库.

    08.静态库的使用.png

    09.静态库的使用.png

    编译Debug/Release 模拟器/真机版本的静态库

    • 1.设置要编译成Debug还是Release版本的静态库.如果是要生成Release就选择Release

    10.设置要编译成Debug还是Release版本的静态库.png

    11.选择对应的版本.png

    • 2.设置要编译成真机还是模拟器版的静态库

    12.设置要编译成真机.png
    • 3.如果四种情况的静态库都进行编译,则会生成以下四个文件夹

    13.四种情况的静态库都进行编译.png

    合并静态库

    • 1.使用lipo -create ... -output ... 合并静态库.最终合并的静态库的大小相当于Debug Device.a和Debug Simulator.a的总和.

    14.合并静态库.png

    .framework静态库的封装

    • 1.创建工程选择iOS/Framework & Library,选择Coaoa Touch Framework

    15.创建工程.png
    • 2.删除自动生成的头文件.注意: Info.plist不能删除


    16.删除自动生成的头文件.png

    • 3.创建Tool类,并对应提供log类方法,实现log类方法
    // Tool.h文件中提供接口
    + (void)log;
    
    // Tool.m文件中实现方法
    + (void)log
    {
        NSLog(@"framework Test");
    }
    
    

    • 4.设置要生成的.framework文件为静态库

    17.设置要生成的.framework文件为静态库.png

    • 5.设置支持所有架构

    18.设置支持所有架构.png

    • 6.设置要公开的所有头文件

    19.设置要公开的所有头文件.png

    .framework静态库的使用

    • 1.创建一个测试静态库的工程,生成的.framework的静态库拖入到工程

    20.静态库拖入到工程.png
    • 2.使用尖括号<>导入头文件之后就能正常使用.framework的静态库
      • 注意: 导入头文件为 #import <Framework/Tool.h>

    21.使用.framework的静态库.png 
  • 相关阅读:
    log4j不生成日志文件的问题
    前端得到或者改变组件的值
    取list的值
    idea Library XXXXXXXX has broken classes paths
    session.save()返回值问题
    Intellij Error:Cannot build Artifact 'XXX:war exploded' because it is included into a circular dependency
    shell小结
    python操作rabbitMQ小结
    python+rabbitMQ实现生产者和消费者模式
    Python操作rabbitmq消息队列持久化
  • 原文地址:https://www.cnblogs.com/xsyl/p/6524981.html
Copyright © 2011-2022 走看看