一、什麼是庫
庫實際上是一種代碼共享的方式,主要用於代碼重用和源碼隱藏,通常分爲動態庫和靜態庫。
靜態庫:鏈接時完整的拷貝至可執行文件中,被多次使用就有多份冗餘拷貝。
動態庫:鏈接時不復制,程序運行時由系統動態加載到內存,供程序調用,系統只加載一次,多個程序共用,節省內存空間。
二、什麼是.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中的資源文件。
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
9、導入項目中即可使用