一、静态库和动态库的介绍

一、什么是库?

库是共享程序代码的方式,一般分为静态库和动态库。

二、静态库与动态库的区别?

静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

三、iOS里静态库形式?

.a和.framework

四、iOS里动态库形式?

.dylib和.framework

五、framework为什么既是静态库又是动态库?

系统的.framework是动态库,我们自己建立的.framework是静态库。

六、a与.framework有什么区别?

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile = .framework。

建议用.framework.

七、为什么要使用静态库?

方便共享代码,便于合理使用。

实现iOS程序的模块化。可以把固定的业务模块化成静态库。

和别人分享你的代码库,但不想让别人看到你代码的实现。

开发第三方sdk的需要。

PS:更为详细的解释可以参看我的另一篇文章http://www.cnblogs.com/wfwenchao/articles/5044475.html

二、制作使用静态库

IOS静态库a文件制作流程

字数345 阅读5120 评论7 喜欢23
1.新建Cocoa Touch Static Library工程
新建工程
2.Xcode的参数设置
  • "Build Active Architecture Only" 设置为"NO"
  • "IOS Deployment Target" 设置为 "IOS 7.0" ,表示支持IOS7.0以上系统版本的编译
    Build Active Architecture Only
    IOS Deployment Target
    Build Phases则使用默认设置
3.头文件添加接口
.h文件添加接口
.m文件代码实现
4.编译生成静态库.a文件
  • 分别选择真机和Iphone6模拟器进行编译
  • 首先找到真机编译成功生成的.a文件,Show In Finder
  • 然后找到Iphone6模拟器编译成功生成的.a文件(在真机目录中command+(向上剪头键)返回上一层文件夹路径)
    Show In Finder找到真机编译成功的.a文件
    分别为真机丶模拟器编译成功的.a文件
5.合成通用版的静态库.a文件
  • 使用终端进行合成操作
    lipo -create libStaticTest.a(真机.a文件路径) libStaticTest.a(Iphone6模拟器.a文件路径) -output 保存路径/StaticTest.a

    使用终端进行合成
  • 合成的.a文件(支持IOS7以上系统丶真机以及模拟器)
    合成的通用版静态库文件
6.测试自己制作的静态库文件

将.h以及合成的通用版.a文件导入测试工程中,实现.h提供的接口.

测试成功
 
在使用静态库时,将other link flags 设置为 -ObjC (原因参看另一篇博客:http://www.cnblogs.com/wfwenchao/articles/4568999.html)
 

二、 Framework的制作流程

1.新建Framework项目

2.删除原有的.h文件,创建与工程同名的类

 

在新建类.h中添加接口,.m中添加实现代码

 

3.Xcode的参数设置

  • "Architectures" 添加 "armv7s"
  • "Build Active Architecture Only" 设置为 "NO"
  • "Dead Code Stripping" 设置为 "NO"
  • "Link With Standard Libraries" 设置为 "NO"
  • "Mach-O Type" 设置为 "Static Library"
  • "IOS Deployment Target" 设置为 "IOS 7.0" ,表示支持IOS7.0以上系统版本的编译
  •  

    4.为Framework添加文件

  • "Compile Sources" 添加封装进Framework的文件,即隐藏
  • "Headers->Public" 添加暴露给用户查看的头文件

    5.编译生成Framework文件

  • 分别选择真机和Iphone6模拟器进行编译
  • 首先找到真机编译成功生成的framework,Show In Finder
  • 然后找到Iphone6模拟器编译成功生成的framework(在真机目录中command+(向上剪头键)返回上一层文件夹路径)
  • 6.合成通用版的framework文件

  • 需要合成的文件是FrameworkTest.framework包中的FrameworkTest文件
  • 使用终端进行合成操作
    lipo -create FramewrokTest.framework/FrameworkTest(真机framework路径) FramewrokTest.framework/FrameworkTest(Iphone6模拟器framework路径) -output 保存路径/FrameworkTest
  • 合成的文件如下图:
  • 将合成的FrameworkTest文件替换掉真机或者模拟器路径中FrameworkTest.framework包中的FrameworkTest文件

    7.测试自己制作的framework

iOS 库文件制作的更多相关文章

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

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

  2. 【转】IOS静态库a文件制作流程

    原文网址:http://www.jianshu.com/p/3439598ea61f 1.新建Cocoa Touch Static Library工程 新建工程 2.Xcode的参数设置 " ...

  3. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  4. 制作静态库文件(.a文件)

    制作静态库文件(.a文件) 1.创建静态库工程: 在Xcode中new一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static ...

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

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

  6. iOS 静态库的制作

    按照公司的想法 要开发一款SDK,于是就抽空学习一下静态枯的制作过程. 在IOS中有静态库和动态库的区分,下面我们就来详细介绍一下. 一.静态库和动态库的详细介绍. 我们平时的工程中或多或少都要引入第 ...

  7. IOS开发中制作属于自己的静态库.a、资源库.bundle、.framework

    一.什么是库        库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库. 静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复 ...

  8. iOS开发之静态库的制作

    当你需要和别人分享代码,但又不想让别人看到你内部的实现时就需要制作静态库,通常用于第三方SDK 下面就分享一下制作静态库(.a)的过程: 1.打开Xcode,新建workspace 2.随便给work ...

  9. 关于C语言中用Keil软件制作Lib库文件的几点经验

    1.关于制止LIB库文件的几点经验 1. 一个工程如何生成lib文件: 2. 一个生成lib文件的工程可以调用这个工程中不存在的函数,只需要在.h文件中声明这些不存在函数的原型,然后在调用这个lib文 ...

随机推荐

  1. Android -- 系统信息(内存、cpu、sd卡、电量、版本)获取

    内存(ram)                                                                              android的总内存大小信息 ...

  2. 阴影 box-shadow(二)

    阴影 box-shadow(二) 1.阴影模糊半径与阴影扩展半径的区别 阴影模糊半径:此参数可选,其值只能是为正值,如果其值为0时,表示阴影不具有模糊效果,其值越大阴影的边缘就越模糊: 阴影扩展半径: ...

  3. LNMP系列网站零基础开发记录(二)

    [目录] 扯淡吹逼之开发前奏 Django 开发环境搭建及配置 web 页面开发 Django app开发 Django 站点管理 Python 简易爬虫开发 Nginx&uWSGI 服务器配 ...

  4. Netsharp快速入门(之11) 销售管理(开发销售订单工作区)

    作者:秋时 杨昶   时间:2014-02-15  转载须说明出处 4.3     销售订单开发 4.3.1  部件工作区设置 1.创建部件工作区,建工作区向导中要注意勾选组合并系部分.具体要建立的部 ...

  5. C语言面向对象风格编程

    前言 本文略谈C面向对象风格编程,如何使用过程式语言去模拟面向对象的特性?C面向对象的方式和形式很多,不一而足,本文的代码形式是模拟部分C++面向对象关键词并赋予其特性,这种方式对于初级程序员比较好理 ...

  6. c++ swap 函数

    转载地址 1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T ...

  7. 1.C#基础篇-->封装、继承和多态

    面向对象三要素:封装.继承和多态.正确理解这三个要素,才能在编程中建立面向对象的思想. 1.封装使用篇 作用:好的封装增加代码的可读性,易于维护. 什么情况下使用封装,封装的原则是? 1>功能相 ...

  8. hdu 3068 最长回文 manacher

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正 ...

  9. [百度空间] ld: add library file reference by path & file name

    By default, -l option will search libraries with lib* prefix in speficied search paths. i.e. 1 ld -o ...

  10. 功率单位mW 和 dBm 的换算

    无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去.电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈线送到无线电接收机.因此在无线网络的工程 ...