国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

IOS 靜態(tài)庫(kù)打包流程簡(jiǎn)化詳細(xì)介紹

2020-07-26 03:01:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

IOS 靜態(tài)庫(kù)打包流程簡(jiǎn)化

在iOS開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到開(kāi)發(fā)SDK的需求。開(kāi)發(fā)好的靜態(tài)庫(kù)后需要手動(dòng)的合并.a文件,然后再拷貝相關(guān)的頭文件,接著把靜態(tài)庫(kù)和頭文件放在同一個(gè)文件里面打包發(fā)送給SDK的使用者。本文將介紹如何使用腳本,簡(jiǎn)化這一連串的過(guò)程。為了照顧廣大初學(xué)者,教程將會(huì)詳細(xì)介紹打包的基本流程。

關(guān)于靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)區(qū)別,可以看我的另外一篇文章: iOS靜態(tài)庫(kù)和Framework區(qū)別

項(xiàng)目配置

新建一個(gè)名為TestSDK的靜態(tài)庫(kù)工程
這里寫(xiě)圖片描述

然后點(diǎn)擊Target下邊的加號(hào)按鈕,添加新的Target
這里寫(xiě)圖片描述

選擇Cross-platform,新建一個(gè)Aggregate,命名為TestSDKShell
這里寫(xiě)圖片描述

可以看到TARGETS目錄下多了一個(gè)新的Target。
這里寫(xiě)圖片描述

點(diǎn)擊TARGETS->TestSDKShell->Build Phases->+->New Run Script Phases
這里寫(xiě)圖片描述

然后新建一個(gè)Shell文件,命名為build_TestSDK_script.sh
這里寫(xiě)圖片描述

添加Shell文件后的工程如下
這里寫(xiě)圖片描述

然后把shell文件的目錄寫(xiě)到剛才所建立的Run Script Phases里面。
這里寫(xiě)圖片描述

編碼完成后設(shè)置我們需要暴露出來(lái)的頭文件,把需要暴露出來(lái)的頭文件添加到Copy Files
這里寫(xiě)圖片描述

最后把博客最后的shell代碼拷貝到build_TestSDK_script.sh文件下,運(yùn)行TestSDKShell即可完成自動(dòng)打包。
這里寫(xiě)圖片描述

這里可能存在的問(wèn)題就是腳本沒(méi)有運(yùn)行的權(quán)限,在終端中切換到build_TestSDK_script.sh所在目錄,使用

sudo chmod +x build_TestSDK_script.sh

對(duì)shell文件進(jìn)行授權(quán),再次運(yùn)行即可。運(yùn)行成功后,即可看到包打好了。文件的命名包括靜態(tài)庫(kù)名字,日期,Git版本(我這里還沒(méi)提交過(guò)代碼,所以Git版本獲取不到),Debug/Release版本。

這里寫(xiě)圖片描述

簡(jiǎn)化流程分析

開(kāi)始編寫(xiě)腳本簡(jiǎn)化步驟,我們首先需要明確SDK需要注意的以下幾點(diǎn):

  1.     需要支持所有位數(shù)的設(shè)備,arm64 armv7 armv7s
  2.  需要可以配置Debug和Release版本
  3.     需要支持模擬器和真機(jī)

第一點(diǎn)我們需要注意的是配置文件里面的Build Active Architecture Only
這里寫(xiě)圖片描述
這個(gè)配置的作用是開(kāi)發(fā)者可以設(shè)置Xcode,僅編譯生成滿足當(dāng)前插入的設(shè)備的處理器二進(jìn)制文件。當(dāng)前插入設(shè)備就是你正在用于調(diào)試的機(jī)器。在日常開(kāi)發(fā)中為了提高編譯的速度,我們可以把Debug模式下的設(shè)置為YES,但是Release模式下必須設(shè)置為NO,否則打包上線的文件可能就會(huì)出問(wèn)題了。

在開(kāi)發(fā)SDK的時(shí)候,我們把所有的都設(shè)置為NO,這樣打包出來(lái)的文件就不會(huì)出問(wèn)題了。

為了讓腳本可以適配Debug和Relaese模式。我們使用Xcode自帶的配置變量${CONFIGURATION}。在打包的時(shí)候,使用該變量即可。

打包時(shí)候修改這里決定是打什么版本
這里寫(xiě)圖片描述

打包模擬器靜態(tài)庫(kù)

#編譯模擬器庫(kù)文件xcodebuild build -project ${PROJ} /-scheme ${LIB_STATIC_NAME} /-configuration ${CONFIGURATION} /-sdk iphonesimulator /clean /build /CONFIGURATION_BUILD_DIR=${IPHONE_SIMULATOR_DIR}

打包真機(jī)庫(kù)文件

#編譯真機(jī)庫(kù)文件xcodebuild -project ${PROJ} /-scheme ${LIB_STATIC_NAME} /-configuration ${CONFIGURATION} /-sdk iphoneos /clean /build /CONFIGURATION_BUILD_DIR=${IPHONE_OS_DIR}

最后是把兩個(gè)庫(kù)文件合在一起

# 靜態(tài)庫(kù)文件LIB_NAME=lib${LIB_STATIC_NAME}.a#合并模擬器文件和真機(jī)文件lipo -create ${IPHONE_OS_DIR}/${LIB_NAME} ${IPHONE_SIMULATOR_DIR}/${LIB_NAME} -output ${TEMP_DIR}/${LIB_NAME}lipo -info ${LIB_NAME}

這樣就完成了基本的編譯合并工作,但是對(duì)于一個(gè)很懶的程序員來(lái)說(shuō),這還不夠,這樣我還需要把頭文件合.a文件分別拷貝出來(lái),然后放到一個(gè)目錄下面。那就繼續(xù)寫(xiě)腳本,讓腳本完成吧。

#拷貝頭文件和.a文件到同一目錄下##建立SDK目錄pushd ${TEMP_DIR}if [[ -d ${LIB_STATIC_NAME} ]]; thenrm -fR ${LIB_STATIC_NAME}fimkdir -p ${LIB_STATIC_NAME}##拷貝.a和頭文件cp -fR ${LIB_NAME} ${LIB_STATIC_NAME}rm -fR ${LIB_NAME}cp -f ${IPHONE_SIMULATOR_DIR}/include/${LIB_STATIC_NAME}/* ${LIB_STATIC_NAME}

雖然放到了同一個(gè)文件夾,可我給使用SDK的用戶發(fā)放的時(shí)候總得使用壓縮包。壓縮也自動(dòng)化算了。

#打包為zip文件PACKAGE_DATE=`date '+%Y%m%d%H'`GIT_VERSION=`git log --abbrev-commit|head -1|cut -d' ' -f 2`SDK_ZIP_NAME=iOS_${LIB_STATIC_NAME}_${PACKAGE_DATE}_${GIT_VERSION}_${CONFIGURATION}.zipzip -qr ${SDK_ZIP_NAME} ${LIB_STATIC_NAME}

當(dāng)然,你也可以繼續(xù)寫(xiě)腳本。。。把壓縮包自動(dòng)發(fā)送給需要的人。。

腳本完整代碼

#!/bin/sh# build_TestSDK_script.sh# TestSDK## Created by jianquan on 2016/11/16.# Copyright © 2016年 JoySeeDog. All rights reserved.PROJ=${PROJECT_NAME}.xcodeprojLIB_STATIC_NAME=TestSDK #把項(xiàng)目名改為自己的即可使用TEMP_DIR=~/XcodeTestTempBuild#打包出來(lái)的文件的目錄,可以自己定義IPHONE_OS_DIR=${TEMP_DIR}/${CONFIGURATION}-iphoneosIPHONE_SIMULATOR_DIR=${TEMP_DIR}/${CONFIGURATION}-iphonesimulator#創(chuàng)建真機(jī)庫(kù)文件目錄if [[ ! -d ${IPHONE_OS_DIR} ]]; thenmkdir -p ${IPHONE_OS_DIR}fi#創(chuàng)建模擬器庫(kù)文件目錄if [[ ! -d ${IPHONE_SIMULATOR_DIR} ]]; thenmkdir -p ${IPHONE_SIMULATOR_DIR}fi#編譯真機(jī)庫(kù)文件xcodebuild -project ${PROJ} /-scheme ${LIB_STATIC_NAME} /-configuration ${CONFIGURATION} /-sdk iphoneos /clean /build /CONFIGURATION_BUILD_DIR=${IPHONE_OS_DIR}# -archivePath ${IPHONE_OS_DIR}#編譯模擬器庫(kù)文件xcodebuild build -project ${PROJ} /-scheme ${LIB_STATIC_NAME} /-configuration ${CONFIGURATION} /-sdk iphonesimulator /clean /build /CONFIGURATION_BUILD_DIR=${IPHONE_SIMULATOR_DIR}# -archivePath ${IPHONE_SIMULATOR_DIR}# 靜態(tài)庫(kù)文件LIB_NAME=lib${LIB_STATIC_NAME}.a#合并模擬器文件和真機(jī)文件lipo -create ${IPHONE_OS_DIR}/${LIB_NAME} ${IPHONE_SIMULATOR_DIR}/${LIB_NAME} -output ${TEMP_DIR}/${LIB_NAME}lipo -info ${LIB_NAME}#拷貝頭文件和.a文件到同一目錄下##建立SDK目錄pushd ${TEMP_DIR}if [[ -d ${LIB_STATIC_NAME} ]]; thenrm -fR ${LIB_STATIC_NAME}fimkdir -p ${LIB_STATIC_NAME}##拷貝.a和頭文件cp -fR ${LIB_NAME} ${LIB_STATIC_NAME}rm -fR ${LIB_NAME}cp -f ${IPHONE_SIMULATOR_DIR}/include/${LIB_STATIC_NAME}/* ${LIB_STATIC_NAME}#打包為zip文件PACKAGE_DATE=`date '+%Y%m%d%H'`GIT_VERSION=`git log --abbrev-commit|head -1|cut -d' ' -f 2`SDK_ZIP_NAME=iOS_${LIB_STATIC_NAME}_${PACKAGE_DATE}_${GIT_VERSION}_${CONFIGURATION}.zipzip -qr ${SDK_ZIP_NAME} ${LIB_STATIC_NAME}

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 和龙市| 高密市| 桑日县| 武城县| 镇江市| 镇坪县| 吕梁市| 绥阳县| 夏河县| 高雄市| 平和县| 东丰县| 隆德县| 郓城县| 孝义市| 肃南| 昭平县| 潼关县| 香格里拉县| 那坡县| 棋牌| 屯留县| 宁南县| 浑源县| 清丰县| 新乡县| 娄底市| 徐闻县| 江孜县| 藁城市| 罗源县| 尉犁县| 和平县| 阆中市| 会宁县| 资中县| 肃南| 敦化市| 上高县| 区。| 安徽省|