2020最全iOS Framework/.a,動(dòng)態(tài)庫/靜態(tài)庫制作

前言:每次寫新項(xiàng)目,總是拖進(jìn)來很多公共類文件,是不是很麻煩呢,如果做成一個(gè)類似于蘋果自帶的靜態(tài)庫、靜態(tài)庫(eg: AVFoundation.framework 引用 <AVFoundation/AVFoundation.h)多方便呢!既能自己用,又方便給小伙伴用,兩全其美何樂而不為,那么,lets go 。。。

step1: 打開Xcode->File-> New Target ->Framework&Library ->Framework ->next

image.png

step2: 刪除自帶.h文件,拖入需要制作的文件(類,資源文件等)

image.png

step3: TARGETS —> Build Settings 一些設(shè)置:

(1)Build Active Architecture Only 設(shè)置為NO的意思是當(dāng)前打包的.framework支持所有的設(shè)備.否則打包時(shí)只能用當(dāng)前版本的模擬器或真機(jī)運(yùn)行.

image.png

(2)

①Build Setting 搜索linking 設(shè)置Dead Code Stripping 為NO是編譯選項(xiàng)優(yōu)化,包瘦身,(可不改)

②Mach-O Type 選中StaticLibrary (靜態(tài)庫) Xcode默認(rèn)是動(dòng)態(tài)庫.

image.png
image.png

注釋:如果此處不設(shè)置StaticLibrary, 那么在拖進(jìn)項(xiàng)目使用時(shí)會(huì)出現(xiàn)以下問題:

image.png

Reason:image not found 解決方案:Builld Phases->xxx.framework修改 Status 修改為 Optional

image.png

(3)設(shè)置framework最低支持的版本

image.png

(4) 頭文件設(shè)置 TARGETS —> Build Phases -》 Headers
把要暴露給別人的文件,從Project 拖動(dòng)到Public中既可

image.png

step4:編譯文件 選擇-Edit Scheme

image.png

編譯以下四種情況,注意:
framework由紅變黑表示編譯通過。
① debug 模式 模擬器運(yùn)行
② debug 模式 真機(jī)運(yùn)行
③ release 模式 模擬器運(yùn)行
④ release 模式 真機(jī)運(yùn)行

image.png

通過Finder找到位置:

image.png

step5:模擬器和真機(jī)通用模式合并

命令行: lipo -info 路徑
debug 真機(jī)

image.png

debug 模擬器
image.png

命令行: sudo lipo -create [模擬器路徑] [真機(jī)路徑] -output [合成路徑/文件名(自定義)]

image.png

結(jié)果
image.png

查看支持設(shè)備 模擬器+真機(jī)
image.png

寫在最后:合并其實(shí)還有腳本方式:

通過target創(chuàng)建 Aggregate

image.png

image.png

framework 合成腳本

# Type a script or drag a script file from your workspace to insert its path.
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework

# 如果真機(jī)包或模擬包不存在,則退出合并
if [ ! -d "${DEVICE_DIR}" ] || [ ! -d "${SIMULATOR_DIR}" ]
then
exit 0
fi

# 如果合并包已經(jīng)存在,則替換
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# 使用lipo命令將其合并成一個(gè)通用framework  
# 最后將生成的通用framework放置在工程根目錄下新建的Products目錄下  
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

#合并完成后打開目錄
open "${SRCROOT}/Products"

fi


.a 合成腳本

# Type a script or drag a script file from your workspace to insert its path.
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.a

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.a

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.a

# 如果真機(jī)包或模擬包不存在,則退出合并
if [ ! -d "${DEVICE_DIR}" ] || [ ! -d "${SIMULATOR_DIR}" ]
then
exit 0
fi

# 如果合并包已經(jīng)存在,則替換
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# 使用lipo命令將其合并成一個(gè)通用framework  
# 最后將生成的通用framework放置在工程根目錄下新建的Products目錄下  
lipo -create "${DEVICE_DIR" "${SIMULATOR_DIR}" -output "${INSTALL_DIR}"

#合并完成后打開目錄
open "${SRCROOT}/Products"

fi

step6 使用:

image.png

引用
#import <ZWIOSFramework/ZWIOSFrameworkHeader.h>

image.png

大功告成 ?。?! nice

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容