iOS 静态库的封装
1、如果要封装的文件中有派生类,比如NSString+helper这样的写法,那就需要把TARGETS->Build Settings->Linking->Other Linker Flags的属性设置为-ObjC或者-all_load(注意是在打包SDK的项目中添加),否则它会一直奔溃,并且还一直奔溃在你正在使用中的派生类里边,接下来,补充一下,静态库的封装方法。
一、创建项目
创建静态库跟普通创建项目有点不一样,创建之时,他要选择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架构
.
- 使用
- 8.静态库的使用.只需将生成的.a文件和.h文件拖入到测试静态库的工程即可使用静态库.
编译Debug/Release 模拟器/真机版本的静态库
- 1.设置要编译成Debug还是Release版本的静态库.如果是要生成Release就选择Release
- 2.设置要编译成真机还是模拟器版的静态库
- 3.如果四种情况的静态库都进行编译,则会生成以下四个文件夹
合并静态库
- 1.使用lipo -create ... -output ... 合并静态库.最终合并的静态库的大小相当于Debug Device.a和Debug Simulator.a的总和.
.framework静态库的封装
- 1.创建工程选择
iOS/Framework & Library
,选择Coaoa Touch Framework
- 2.删除自动生成的头文件.
注意
: Info.plist不能删除
- 3.创建Tool类,并对应提供log类方法,实现log类方法
// Tool.h文件中提供接口
+ (void)log;
// Tool.m文件中实现方法
+ (void)log
{
NSLog(@"framework Test");
}
- 4.设置要生成的.framework文件为静态库
- 5.设置支持所有架构
- 6.设置要公开的所有头文件
.framework静态库的使用
- 1.创建一个测试静态库的工程,生成的.framework的静态库拖入到工程
- 2.使用
尖括号<>
导入头文件之后就能正常使用.framework的静态库注意
: 导入头文件为#import <Framework/Tool.h>
iOS 静态库的封装的更多相关文章
- iOS静态库相关-封装lib
来源:http://blog.csdn.net/zsomsom/article/details/9163635 Library介绍 基本知识 在实际的编程过程中,通常会把一些公用函数制成函数库,供其它 ...
- iOS - 静态库的创建与使用
在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来 ...
- iOS 静态库,动态库与 Framework
iOS 静态库,动态库与 Framework 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢 ...
- IOS静态库
如何在Xcode中创建C++静态库 http://jingyan.baidu.com/article/03b2f78c111fca5ea237ae26.html iOS 如何创建和使用静态库 http ...
- iOS静态库.a文件制作和导入使用
iOS静态库.a文件制作: 1.新建Cocoa Touch Static Library工程 新建工程 - 选择iOS-FrameWork&Libary,选择 Cocoa Touch Stat ...
- iOS静态库 ---iOS-Apple苹果官方文档翻译
iOS静态库 ---iOS-Apple苹果官方文档翻译 •什么是库? 库是共享程序代码的方式,一般分为静态库和动态库.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使⽤用就为什 ...
- iOS静态库的制作与引用
[iOS静态库的制作与引用] 1.Configuring Exported Headers To configure which headers are exported to clients, se ...
- 判断IOS静态库(.a文件)是否支持模拟器和真机运行
判断IOS静态库(.a文件)是否支持模拟器和真机运行 在mac终端下,进入到.a文件目录下,然后输入: lipo -info libMyAlertView.a Architectures in the ...
- iOS静态库转Framework动态库
参考文章: iOS静态库(.a 和framework) XCode6制作动态及静态Framework 说说iOS中静态库的开发 dyld: Library not loaded: @rpath/ ...
随机推荐
- 1070 Mooncake (25 分)
1070 Mooncake (25 分) Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn ...
- js实现手机号身份证等加星(*)号
下面来为各位整理了一些关于js实现手机号身份证等加星(*)号代码了,在js不足时我们还补充了php实现手机号身份证等加星(*)号的函数,有兴趣的一起来看看. 有时候为了不让用户的手机号码和身份证号 ...
- word2vec 的理解
1.CBOW 模型 CBOW模型包括输入层.投影层.输出层.模型是根据上下文来预测当前词,由输入层到投影层的示意图如下: 这里是对输入层的4个上下文词向量求和得到的当前词向量,实际应用中,上下文窗口大 ...
- HTML5中对于网络是否断开的检测.很有意思哦
//事件的封装 var EventUtil = { addHandler: function (element, type, handler) {//注册事件 if (element.addEvent ...
- unity开发android游戏
环境搭建: Unity+JDK+Android Studio+Android SDK(+NDK) 教程:unity开发android游戏(一)搭建Unity安卓开发环境 注意“Build System ...
- sklearn-MultinomialNB朴素贝叶斯分类器
原型 class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None) 参数 Parameter ...
- OpenGL 多线程共享纹理
1:opengl 多线程共享纹理纹理: //解码时候使用opengl进行绘制,需要构建队列和两个线程,分别用于解码数据并且填充纹理和渲染. 主线程常见两个共享上下文: main() { ⋯⋯⋯⋯ gH ...
- 管理oracle的一些知识
管理一个oralce软件: 如何管理数据库,须知道什么知识. 1.安装:位置,字符集 2.建库:什么数据库名称 3.数据库启动: nomout:读参数文件,一些初始化设置信息 mount:读取控制文件 ...
- javaScript语言的预编译与运行
JS代码执行的过程: 1.预编译 ---- 事先对js代码做一个预处理 2.代码运行---开始执行JS代码. JS编程: 1.加载DOM的最好在/BODY之前 2.与DOM渲染无关的放在Head里面 ...
- jenkins API
1.curl http://199.168.299.99:8080/job/send_message/lastBuild/api/json --user administrator:1234 获取j ...