最近經(jīng)常會(huì)被問(wèn)到如何創(chuàng)建一個(gè)SDK,這里把步驟記錄下來(lái)。
1.首先 ?創(chuàng)建工程

2.工程創(chuàng)建好之后,就是配置一些東西了,這對(duì)SDK的通用性很重要
Build Setting -> Dead Code Stripping 改為NO
Build Setting -> Mach-O Type改為 Static Library
Build Setting -> Build Active Architecture Only 改為 NO
Build Setting -> Architectures 添加armv7s架構(gòu)
Build Setting -> Other C flags? 添加-fembed-bitcode ? ?(使SDK支持bitcode)
Build Phases -> Headers 將公開(kāi)的頭文件從Project中拖入Public
3.暴露出想要被引用的頭文件
需要暴露的頭文件都拖到public下面,不需要的都放在private或者project下面

4.好了,現(xiàn)在運(yùn)行工程,就能得到framework了

點(diǎn)擊show ?in finder 之后,得到兩個(gè)版本,一個(gè)模擬器用到的,一個(gè)真機(jī)用到的.但是一般我們都會(huì)把這兩個(gè)整合成一個(gè)framework,
5.合并真機(jī)和模擬器framework,可以用一段腳本代碼來(lái)實(shí)現(xiàn),還是上圖說(shuō)話(huà):

首先點(diǎn)擊+號(hào),添加一個(gè)Run Script,在輸入框里粘貼一段代碼:如下(腳本代碼是從這來(lái)的,感謝大神)
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
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#open "${DEVICE_DIR}"
#open "${SRCROOT}/Products"
fi
6.然后重現(xiàn)運(yùn)行 framework,,分別在下面三種條件下運(yùn)行一遍
(模擬器可以任選一中模擬器跑一遍)

7.然后? ,單擊Products,選擇 show in finder? ,在products目錄下,得到的就是合并后的framework,在真機(jī)模擬器上或者打包都可以用.

8,可以驗(yàn)證一下,打開(kāi)終端:輸入: lipo -info? ? 然后把生成的framework下的二進(jìn)制文件拖入終端,獲得路徑,回車(chē),得到我們想要的信息:


得到的framework支持的架構(gòu)如下:
說(shuō)明合并framework成功!
