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

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 

iOS 静态库的封装的更多相关文章

  1. iOS静态库相关-封装lib

    来源:http://blog.csdn.net/zsomsom/article/details/9163635 Library介绍 基本知识 在实际的编程过程中,通常会把一些公用函数制成函数库,供其它 ...

  2. iOS - 静态库的创建与使用

    在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来 ...

  3. iOS 静态库,动态库与 Framework

    iOS 静态库,动态库与 Framework     静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢 ...

  4. IOS静态库

    如何在Xcode中创建C++静态库 http://jingyan.baidu.com/article/03b2f78c111fca5ea237ae26.html iOS 如何创建和使用静态库 http ...

  5. iOS静态库.a文件制作和导入使用

    iOS静态库.a文件制作: 1.新建Cocoa Touch Static Library工程 新建工程 - 选择iOS-FrameWork&Libary,选择 Cocoa Touch Stat ...

  6. iOS静态库 ---iOS-Apple苹果官方文档翻译

    iOS静态库 ---iOS-Apple苹果官方文档翻译 •什么是库? 库是共享程序代码的方式,一般分为静态库和动态库.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使⽤用就为什 ...

  7. iOS静态库的制作与引用

    [iOS静态库的制作与引用] 1.Configuring Exported Headers To configure which headers are exported to clients, se ...

  8. 判断IOS静态库(.a文件)是否支持模拟器和真机运行

    判断IOS静态库(.a文件)是否支持模拟器和真机运行 在mac终端下,进入到.a文件目录下,然后输入: lipo -info libMyAlertView.a Architectures in the ...

  9. iOS静态库转Framework动态库

    参考文章: iOS静态库(.a 和framework)  XCode6制作动态及静态Framework  说说iOS中静态库的开发  dyld: Library not loaded: @rpath/ ...

随机推荐

  1. IIS 配置1

    [转]HTTP 错误 401.2 - Unauthorized 由于身份验证头无效,您无权查看此页. IIS7.0解决办法 (2010-11-01 00:58:54) 原网址 http://blog. ...

  2. [UE4]GameMode

    GameMode定义了正在玩的游戏规则,积分等方面,游戏中有些数据和逻辑不适合放在某一个对象身上,这些数据在整个游戏运行中腰持续存在的(比如:积分.排名). 每次游戏一启动,GameMode就被创建, ...

  3. javascript中setInterval制作跑马灯的效果

    html代码: javascript代码 <script type="text/javascript"> function scroll() { var title = ...

  4. 第8章 信号(1)_Linux信号处理机制

    1. 信号的基本概念 1.1 基本概念 (1)信号(signal)机制是linux系统中最为古老的进程之间的通信机制,解决进程在正常运行过程中被中断的问题,导致进程的处理流程会发生变化. (2)信号本 ...

  5. 第11课 enum、sizeof、typedef 分析

    1. enum枚举类型 1.1 使用方法 (1)enum是C语言中的一种自定义类型 (2)enum值是可以根据需要自定义的的整型值 (3)第一个定义的enum值默认为0. (4)默认情况下的enum值 ...

  6. 代码生成器 CodeSmith 的使用(一)

    由于在项目中经常要会用到数据库的 CRUD 操作(增.删.改.查),而且还使用的是orm 框架将数据库表名和表中的的字段映射成相应的类属性.如果把大量的时间用到手工输入数据库表中的字段,除了能练习打字 ...

  7. Android SDK的安装与环境配置

    一.Android SDK工具下载.安装 Android SDK工具下载:http://www.androiddevtools.cn/ SDK下载页面如下,由于电脑Windows系统所以下载的Wind ...

  8. tomcat启动原理

    2018年04月12日 19:55:22 太极小帅帅 阅读数:282   前言 一直在用Tomcat,但是对其启动原理一直没去研究,这里准备去面试,可能会问道.于是总结了下启动原理.完全凭感觉去揣测, ...

  9. aix-syslog

    收集网络内路由器的日志信息,同时把本地日志信息与路由器信息分开. /etc/syslog.conf我写成: ## 本地日志处理 *.notice;*.err;*.warn<tab>;< ...

  10. OpenACC 优化矩阵乘法

    ▶ 按书上的步骤使用不同的导语优化矩阵乘法 ● 所有的代码 #include <iostream> #include <cstdlib> #include <chrono ...