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