前言:每次寫新項(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