1、什么是库ios
库其实是一种代码共享的方式,主要用于代码重用和源码隐藏,一般分为动态库和静态库。xcode
静态库:连接时完整的拷贝至可执行文件中,被屡次使用就有多份冗余拷贝。架构
动态库:连接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存空间。iphone
2、什么是.a、.bundle、.framework模块化
在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。优化
之因此.framework既多是动态库又多是静态库,是由于苹果公司禁止用户级App使用动态库,而本身却又冠冕堂皇的使用动态库,这就形成了iOS中系统级的.framework是动态库,用户级的.framework是静态库。ui
两者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制文件外,还包含一些资源文件(头文件,plist等),因为自身包含了头文件,因此.framework能够单独使用。.net
.a和.framework两种静态库,一般都是把须要用的到图片或者xib文件存放在一个bundle文件中,而该bundle文件的名字和.a或.framework的名字相同。关于bundle文件的制做方法,后面有专门介绍。code
3、静态库使用的必要性图片
1>. 代码的共享与重用
2>. 程序模块化
3>. 分享给别人代码库时代码隐藏
4>. 开发第三方SDK
4、.a静态库文件
一、点击建立Project
二、在.m和.h中进行代码编写
三、根据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
模拟器包和真机包也能够用该方法进行合并。
四、合并后导入到项目中,并把.h文件与.a 文件一块儿导入到项目中
五、编译项目,导融TestLibrary 便可调用.a中的方法
总结:.a文件须要模拟器和真机文件进行合并后项目中才均可以使用,避免切换形成的开发成本高的问题。
5、资源库.bundle
一、bundle资源库的特色
Bundle是静态的,也就是说,咱们包含到包中的资源文件做为一个资源包是不参加项目编译的。也就意味着,bundle包中不能包含可执行的文件。它仅仅是做为资源,被解析成为特定的2进制数据。
二、新建.bundle
三、加入你须要编译在bundle中的资源文件。
UIImageView *image = [[UIImageViewalloc]initWithFrame:CGRectMake(0,0,320,480)];
image.backgroundColor = [UIColorredColor];
image.image = [UIImageimageNamed:@"TestBundle.bundle/Contents/Resources/1.png"];
[self.viewaddSubview:image];
# 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/"
lipo -info /Users/tiansha/Desktop/Demo/TestFramework/Products/TestFramework.framework/TestFramework
九、导入项目中便可使用
注意:运行的xcode版本是7.3