因?yàn)轫?xiàng)目原因,為方便以后維護(hù)需要制作動(dòng)態(tài)庫擅耽,其實(shí)跟制作spec文件作用差不多吧活孩,只不過.framework可以實(shí)現(xiàn)動(dòng)態(tài)或遠(yuǎn)程加載類似于熱更新吧,不知道有沒有先驅(qū)者試過沒有乖仇,查看網(wǎng)上資料說是不允許的憾儒,先不管行不行,我們先會(huì)再說∧松常現(xiàn)在可是進(jìn)入主題
第一步 起趾,創(chuàng)建一個(gè)新的Project 注意這里不要選Application啦而是 Framework&Library
第二步 我們創(chuàng)建一個(gè)繼承與NSObject 類,這里以testProject 為例 并提供一個(gè)實(shí)例方法以供調(diào)用警儒,并創(chuàng)建一個(gè)控制器 為后面動(dòng)態(tài)加載庫做準(zhǔn)備 并設(shè)置控制器頁面顏色為紅色
在這一步我們需要把一些展示出來共有的頭文件加入Public 里,剛開始的.h文件都在Project里训裆,可以直接按住向上拖入即可
此時(shí)我們已經(jīng)創(chuàng)建好一個(gè)動(dòng)態(tài)庫了 ,但是有一個(gè)小問題 當(dāng)你在真機(jī)編譯 跟在模擬器編譯會(huì)生成兩個(gè)庫 一個(gè)為模擬器使用一個(gè)為真機(jī)使用,很是不方便蜀铲,牛人還是有的 有大牛已找到更好的辦法 通過腳本編譯可以生成一個(gè)既可以滿足模擬器又可以滿足真機(jī)的動(dòng)態(tài)庫边琉,方法如下:
或者
通過創(chuàng)建Aggregate運(yùn)行腳本文件
選擇一個(gè)New Run Script Prase
在里面填寫腳本 直接復(fù)制內(nèi)容即可
# 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 "${INSTALL_DIR}"
最好在Devalopment target 都選擇iOS 8.0 從最低版本適應(yīng)
然后選擇MyAggregate 在 build only decice下編譯?
到這里大功告成记劝,在finder中查看工程 會(huì)多出一個(gè) Products文件夾
里面的framework 就是我們想要的動(dòng)態(tài)庫了 变姨,可以新創(chuàng)建一個(gè)項(xiàng)目 并將庫直接拖進(jìn)項(xiàng)目中引用頭文件并測試 ,是可以成功引用的厌丑。
注意: 在這里有一個(gè)問題 .framework 與Aggregate 的Scheme 中的Build Configuration模式要相同定欧,要么都選Debug 或者都是 Release模式
此時(shí)動(dòng)態(tài)庫制作已完成!
? ? ? 現(xiàn)在讓我們實(shí)現(xiàn)如何動(dòng)態(tài)加載動(dòng)態(tài)庫
這個(gè)就比較牛逼了 怒竿,有類似與熱更新的功能了?
首先呢 我們先創(chuàng)建一個(gè)新項(xiàng)目砍鸠,你可以通過iTunes(可以真機(jī)操作) 或者借助其他工具把framework 加入項(xiàng)目的documents文件夾中 也可以手動(dòng)添加(模擬器操作),編譯項(xiàng)目后通過查路徑 把剛才的.framework拖入項(xiàng)目的路徑文件夾中耕驰,注意路徑不要錯(cuò) 例如:
查路徑方法:
然后把文件加入Bundle中 ?方法如下:
接著我們初始化這個(gè)Class類 并調(diào)用 這個(gè)類在動(dòng)態(tài)庫中的方法
最后我們運(yùn)行項(xiàng)目 點(diǎn)擊屏幕 會(huì)發(fā)現(xiàn)跳入動(dòng)態(tài)庫中的控制器
傳Bundle 只是為了吧路徑傳給動(dòng)態(tài)庫中需要路徑的文件爷辱,根據(jù)自己的需要是否傳遞,加如庫中油 圖片 plist 加載控制器帶有Xib等文件 什么的 就需要了路徑了?
以上即為完整制作動(dòng)態(tài)庫及動(dòng)態(tài)加載庫文件的內(nèi)容朦肘,大家有更好的想法可以在下面留言托嚣。
工作中需要把兩個(gè)項(xiàng)目合并到一個(gè)項(xiàng)目可以用這個(gè)方法,不知道大家還有沒有其他更好辦法 類似于支付寶那種超級(jí)App,在項(xiàng)目中通過點(diǎn)擊事件直接進(jìn)入新的程序中(不是啟動(dòng)手機(jī)安裝的新應(yīng)用還是在原來的項(xiàng)目中實(shí)現(xiàn)) 不過它那個(gè)應(yīng)該封裝成網(wǎng)頁的原生的不知道有沒有, 希望有做過類似功能的小伙伴及時(shí)聯(lián)系我 非常感謝啦厚骗!
有問題或者好的建議請(qǐng)聯(lián)系我:
QQ:751638405