一、什么是库

       库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库。

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

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

二、什么是.a、.bundle、.framework

 

       在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。

之所以.framework既可能是动态库又可能是静态库,是因为苹果公司禁止用户级App使用动态库,而自己却又堂而皇之的使用动态库,这就造成了iOS中系统级的.framework是动态库,用户级的.framework是静态库。

二者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。

.a和.framework两种静态库,通常都是把需要用的到图片或者xib文件存放在一个bundle文件中,而该bundle文件的名字和.a或.framework的名字相同。关于bundle文件的制作方法,后面有专门介绍。

三、静态库使用的必要性

 

1>.  代码的共享与重用

2>.  程序模块化

3>.  分享给别人代码库时代码隐藏

4>.  开发第三方SDK

四、.a静态库文件

 

1、点击创建Project

2、在.m和.h中进行代码编写

3、根据armv7和arm64打包两个.a进行合并

合并两个.a文件

lips -create /Users/tiansha/Desktop/libTestLibrary.a /Users/tiansha/Desktop/Demo/Shengshihuihai/ShengShiHuiHai/Resource/libTestLibrary.a -output /Users/tiansha/Desktop/libTestLibrary2.a

模拟器包和真机包也可以用该方法进行合并。

4、合并后导入到项目中,并把.h文件与.a 文件一起导入到项目中

5、编译项目,导融TestLibrary 即可调用.a中的方法

总结:.a文件需要模拟器和真机文件进行合并后项目中才都可以使用,避免切换造成的开发成本高的问题。

五、资源库.bundle

1、bundle资源库的特点

Bundle是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的2进制数据。

2、新建.bundle

3、加入你需要编译在bundle中的资源文件。

当然,默认的配置也是可以的,如果你需要特定的优化或者特定的路径配置,你可以进行下面第4步的配置。
4、进行可选设置
资源包只需要编译不需要安装
 
 
5、编译即可生成.bundle文件,导入项目中
 
6、调用方式
 

UIImageView *image = [[UIImageViewalloc]initWithFrame:CGRectMake(0,0,320,480)];

image.backgroundColor = [UIColorredColor];

image.image = [UIImageimageNamed:@"TestBundle.bundle/Contents/Resources/1.png"];

[self.viewaddSubview:image];

五、.framework
 
1、创建
 
2、Build Phases -> Headers,可以看出有三个选项,分别是Public,Private,Project;把需要暴露给别人的.h文件拖到Public中,剩下的不要暴露的,即为隐藏的文件,放在Project中
 
 
3、把所有需要暴露的.h文件都用#import<TestFramework/TestLibrary.h>引入,记住一定要将所有的需要暴露的.h文件都写在给定的.h文件中,不然编译后生成的.framework在引用的时候会有警告。
 
 
4、新建一个Target,选择Other - >Aggregate
 
 
5、选中新建的Target,点击Build Pharas ,选中左上角的+,New Run Script Phase,添加脚本
 
脚本用于合并Framework,真机和模拟器版本,以及armv7 armv7s arm64等不同architectures

# Sets the target folders and the final framework product.

# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME

# 例如: FMK_NAME = "MyFramework"

FMK_NAME=${PROJECT_NAME}

# Install dir will be the final output to the framework.

# The following line create it in the root folder of the current project.

INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

xcodebuild -configuration "Release" -target"${FMK_NAME}" -sdk iphoneos clean build

xcodebuild -configuration "Release" -target"${FMK_NAME}" -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/""${INSTALL_DIR}/"

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

lipo -create "${DEVICE_DIR}/${FMK_NAME}""${SIMULATOR_DIR}/${FMK_NAME}" -output"${INSTALL_DIR}/${FMK_NAME}"

rm -r "${WRK_DIR}"

open "${SRCROOT}/Products/"

6、选中Targets中的第一个Target,点击Build Setting -> Mach-O Type,选择Static Library,到这里会有一个问题存在,就是无法在iPhone5c上使用.framework,这是我们需要在Build Setting -> Architectures ->Architectures中添加armv7s

 
 
7、选中Aggregate,进行编译,编译成功后自动打开product文件夹
 
 
8、打开终端,可以查看支持的架构
 

lipo -info /Users/tiansha/Desktop/Demo/TestFramework/Products/TestFramework.framework/TestFramework

9、导入项目中即可使用

注意:运行的xcode版本是7.3

IOS开发中制作属于自己的静态库.a、资源库.bundle、.framework的更多相关文章

  1. iOS开发——高级篇——换肤、静态库

    一.换肤 1.思路1> 解决方案1,使用颜色作为图片素材的命名关键字 问题1:要保证每套图片的文件名 颜色+ 名称.png的格式比较麻烦 问题2:如果要将某一个图片应用到其他皮肤不方便2> ...

  2. 汇总iOS开发中需要用到的开源库

    来源:http://mobile.51cto.com/hot-431256.htm 1.iOS &iPhone 网络异步加载 asi-http-request [1-1 ASI HTTP 下载 ...

  3. iOS开发中使用静态库 .a 文件

    ​​iOS开发中,在使用一些第三方库时,可能是一个静态库(比如GPUImage).这种情况下,需要编译出静态库文件(.a) ,然后配合响应的头文件(.h 文件)使用. 编译静态库,直接在Xcode中编 ...

  4. fir.im Weekly - iOS开发中的Git流程

    本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码等好用的轮子,还有一些 APP 设计的 Tips,希望对你有用. 精仿知乎日报 iOS 端 @我偏 ...

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

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

  6. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  7. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  8. IOS开发中UI编写方式——code vs. xib vs.StoryBoard

    最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关 ...

  9. iOS开发中调试小技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

随机推荐

  1. Linux\CentOS Tomcat 配置

    需要注意的是:安装 Tomcat 之前需要把 jdk 安装好. 一.下载安装包 - 安装可以在官网自行下载,下载 tar.gz 包便可. 二.解压缩: tar -zxvf apache-tomcat- ...

  2. 关于Pycharm的注册码

    最近安装pycharm,需要注册码,我在网上搜索了许多,这里一一记录下来,供大家参考: 在License server里面尝试输入下面任一地址:  http://elporfirio.com:1017 ...

  3. Go组件学习——Web框架Gin

    以前学Java的时候,和Spring全家桶打好关系就行了,从Spring.Spring MVC到SpringBoot,一脉相承. 对于一个Web项目,使用Spring MVC,就可以基于MVC的思想开 ...

  4. Redis实战--使用Jedis实现百万数据秒级插入

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 当我们 ...

  5. ThinkPHP6 核心分析:系统服务

    什么是系统服务?系统服务是对于程序要用到的类在使用前先进行类的标识的绑定,以便容器能够对其进行解析(通过服务类的 register 方法),还有就是初始化一些参数.注册路由等(不限于这些操作,主要是看 ...

  6. nyoj 833-取石子(七) (摆成一圈,取相邻)

    833-取石子(七) 内存限制:64MB 时间限制:1000ms 特判: No 通过数:16 提交数:32 难度:1 题目描述: Yougth和Hrdv玩一个游戏,拿出n个石子摆成一圈,Yougth和 ...

  7. paper sharing :学习特征演化的数据流

    特征演化的数据流 数据流学习是近年来机器学习与数据挖掘领域的一个热门的研究方向,数据流的场景和静态数据集的场景最大的一个特点就是数据会发生演化,关于演化数据流的研究大多集中于概念漂移检测(有监督学习) ...

  8. 《算法导论中文版》PDF 下载

    电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 在有关算法的书中,有一些叙述非常严谨,但不够全面:另一些涉及了大量的题材,但又缺乏严谨性.本书将严谨性和全面性融为 ...

  9. Mac的Safari安装油猴插件(Tampermonkey)

    Mac的Safari安装油猴插件(Tampermonkey) 官方的AppStore是没有油猴插件(Tampermonkey)的,官方插件不仅少,功能被阉割,相对弱小,还收费.嗯,这很苹果第三方拓展. ...

  10. python_day05

    今日内容 ''' post请求登录github Request URL: https://github.com/session Request Method: POST #Referer表示上一个请求 ...