一憎妙、a庫封裝
1.1 創(chuàng)建工程
1.2添加需要封裝的代碼文件
1.3 添加對外開放的頭文件
選中Targets-Build phases-Copy Files
1.5 編譯:
通過simulator編譯纱烘,a庫只能在simulator運行类嗤。通過真機編譯,a庫只能在真機運行闸盔。
查看庫所支持的架構(gòu):lipo -info 庫的絕對路徑
手動合成:
simulator 庫與真機庫合成通用庫:lipo -create simulator庫 真機庫 -output 存放合成庫絕對路徑-
編譯時自動合成支持所有架構(gòu):
選擇工程悯辙,添加targets-Aggregate
添加shell腳本區(qū)域:
添加shell腳本命令:
if [ "${ACTION}" = "build" ]
then#要build的target名 target_Name=${PROJECT_NAME} echo "target_Name=${target_Name}" #build之后的文件夾路徑 build_DIR=${SRCROOT}/build echo "build_DIR=${build_DIR}" #真機build生成的頭文件的文件夾路徑 DEVICE_DIR_INCLUDE=${build_DIR}/Release-iphoneos/include/${PROJECT_NAME} echo "DEVICE_DIR_INCLUDE=${DEVICE_DIR_INCLUDE}" #真機build生成的.a文件路徑 DEVICE_DIR_A=${build_DIR}/Release-iphoneos/lib${PROJECT_NAME}.a echo "DEVICE_DIR_A=${DEVICE_DIR_A}" #模擬器build生成的.a文件路徑 SIMULATOR_DIR_A=${build_DIR}/Release-iphonesimulator/lib${PROJECT_NAME}.a echo "SIMULATOR_DIR_A=${SIMULATOR_DIR_A}" #目標文件夾路徑 INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME} echo "INSTALL_DIR=${INSTALL_DIR}" #目標頭文件文件夾路徑 INSTALL_DIR_Headers=${SRCROOT}/Products/${PROJECT_NAME}/Headers echo "INSTALL_DIR_Headers=${INSTALL_DIR_Headers}" #目標.a路徑 INSTALL_DIR_A=${SRCROOT}/Products/${PROJECT_NAME}/lib${PR OJECT_NAME}.a echo "INSTALL_DIR_A=${INSTALL_DIR_A}" #判斷build文件夾是否存在,存在則刪除 if [ -d "${build_DIR}" ] then rm -rf "${build_DIR}" fi #判斷目標文件夾是否存在迎吵,存在則刪除該文件夾 if [ -d "${INSTALL_DIR}" ] then rm -rf "${INSTALL_DIR}" fi #創(chuàng)建目標文件夾 mkdir -p "${INSTALL_DIR}" #build之前clean一下 xcodebuild -target ${target_Name} clean #模擬器build xcodebuild -target ${target_Name} -configuration Release -sdk iphonesimulator #真機build xcodebuild -target ${target_Name} -configuration Release -sdk iphoneos #復制頭文件到目標文件夾 cp -R "${DEVICE_DIR_INCLUDE}" "${INSTALL_DIR_Headers}" #合成模擬器和真機.a包 lipo -create "${DEVICE_DIR_A}" "${SIMULATOR_DIR_A}" -output "${INSTALL_DIR_A}" #打開目標文件夾 open "${INSTALL_DIR}" fi
1.6 注意事項
- 選中Targets-Build Setting-Architectures-Build Active Architecture Only設置為NO躲撰,build所有架構(gòu)
- Architectures 默認結(jié)構(gòu)不包含armv7s(iphone5c),可在Architectures中添加
二、Framework(動態(tài),靜態(tài))封裝
1.創(chuàng)建Framework工程
2.添加封裝代碼文件
3.頭文件歸類
將對外開放的頭文件導入與庫名稱相同的頭文件中击费,此文件作為公共的頭文件拢蛋,使用者只需要將此頭文件導入即可使用,無需導入多個蔫巩,下圖的頭文件為:DynamicWebFramework.h
4.編譯
編譯原理與a庫編譯原理相同谆棱,但shell腳本有很多種寫法,具體可以查詢學習一下圆仔,在此不再詳解垃瞧,因為我還沒搞懂啊~~
5.注意事項
- Build Setting——“Mach -O Type”默認為:Dynamic Library(iOS 8+支持動態(tài)庫),可選擇Static Library
6.對于三方庫的處理
不建議將三方庫封裝進自己的庫中荧缘,(貌似你也封裝不進去~~)
6.1 正常導入三方已封裝的庫
6.2 封裝代碼中正常導入頭文件皆警,調(diào)用三方庫相關方法
6.3 配置search path
- 其實,F(xiàn)ramework Search Paths截粗、Header Search Paths信姓、Library Search Paths三個相對地址相同也可以(文件路徑最大化)——》輕松愉快解決戰(zhàn)斗
- 默認檢索header search paths,User Header Search Paths只有Always Search User Paths為(o)/YES!時绸罗,才會去檢索
6.4 刪除三方庫封裝工程的關聯(lián)意推,切記:物理地址中的三方庫不要delete,否則會出人命的
7.Framework的使用
獲取Framework 庫中的資源文件:
iOS 8+:獲取圖片
[UIImage imageNamed:@"imageView" inBundle:[NSBundle bundleForClass:self.class]compatibleWithTraitCollection:nil];
獲取XIB文件
//這個Class對應你工程所在的類名
[[NSBundle bundleForClass:self.class] loadNibNamed:@"ColorView" owner:self options:nil];
//這個對應你的FrameWork的Bundle Identifier
[[NSBundle bundleWithIdentifier:@"com.xxx.xx"] loadNibNamed:@"ColorView" owner:self options:nil];
- Framework(靜態(tài)庫)
- Framework(動態(tài)庫)
三珊蟀、bundle(資源包)封裝
1.創(chuàng)建bundle工程
2.導入資源文件
- Create groups 只會根據(jù)導入的資源文件結(jié)構(gòu)進行分組
- Create folder references 會對導入文件的物理結(jié)構(gòu)進行關聯(lián)