欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IOS 靜態(tài)庫打包流程簡化詳細介紹

 更新時間:2016年12月23日 10:42:32   投稿:lqh  
這篇文章主要介紹了IOS 靜態(tài)庫打包流程簡化詳細介紹的相關(guān)資料,開發(fā)好的靜態(tài)庫后需要手動的合并.a文件,然后再拷貝相關(guān)的頭文件,接著把靜態(tài)庫和頭文件放在同一個文件里面打包發(fā)送給SDK的使用者,這里簡化下流程,需要的朋友可以參考下

IOS 靜態(tài)庫打包流程簡化

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

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

項目配置

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

然后點擊Target下邊的加號按鈕,添加新的Target
這里寫圖片描述

選擇Cross-platform,新建一個Aggregate,命名為TestSDKShell
這里寫圖片描述

可以看到TARGETS目錄下多了一個新的Target。
這里寫圖片描述

點擊TARGETS->TestSDKShell->Build Phases->+->New Run Script Phases
這里寫圖片描述

然后新建一個Shell文件,命名為build_TestSDK_script.sh
這里寫圖片描述

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

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

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

最后把博客最后的shell代碼拷貝到build_TestSDK_script.sh文件下,運行TestSDKShell即可完成自動打包。
這里寫圖片描述

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

sudo chmod +x build_TestSDK_script.sh

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

這里寫圖片描述

簡化流程分析

開始編寫腳本簡化步驟,我們首先需要明確SDK需要注意的以下幾點:

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

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

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

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

打包時候修改這里決定是打什么版本
這里寫圖片描述

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

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

打包真機庫文件

#編譯真機庫文件
xcodebuild -project ${PROJ} \
-scheme ${LIB_STATIC_NAME} \
-configuration ${CONFIGURATION} \
-sdk iphoneos \
clean \
build \
CONFIGURATION_BUILD_DIR=${IPHONE_OS_DIR}

最后是把兩個庫文件合在一起

# 靜態(tài)庫文件
LIB_NAME=lib${LIB_STATIC_NAME}.a

#合并模擬器文件和真機文件
lipo -create ${IPHONE_OS_DIR}/${LIB_NAME} ${IPHONE_SIMULATOR_DIR}/${LIB_NAME} -output ${TEMP_DIR}/${LIB_NAME}
lipo -info ${LIB_NAME}

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

#拷貝頭文件和.a文件到同一目錄下
##建立SDK目錄
pushd ${TEMP_DIR}
if [[ -d ${LIB_STATIC_NAME} ]]; then
rm -fR ${LIB_STATIC_NAME}
fi

mkdir -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}

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

#打包為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}.zip

zip -qr ${SDK_ZIP_NAME} ${LIB_STATIC_NAME}

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

腳本完整代碼

#!/bin/sh

# build_TestSDK_script.sh
# TestSDK
#
# Created by jianquan on 2016/11/16.
# Copyright © 2016年 JoySeeDog. All rights reserved.

PROJ=${PROJECT_NAME}.xcodeproj
LIB_STATIC_NAME=TestSDK #把項目名改為自己的即可使用
TEMP_DIR=~/XcodeTestTempBuild#打包出來的文件的目錄,可以自己定義


IPHONE_OS_DIR=${TEMP_DIR}/${CONFIGURATION}-iphoneos
IPHONE_SIMULATOR_DIR=${TEMP_DIR}/${CONFIGURATION}-iphonesimulator

#創(chuàng)建真機庫文件目錄
if [[ ! -d ${IPHONE_OS_DIR} ]]; then
mkdir -p ${IPHONE_OS_DIR}
fi

#創(chuàng)建模擬器庫文件目錄
if [[ ! -d ${IPHONE_SIMULATOR_DIR} ]]; then
mkdir -p ${IPHONE_SIMULATOR_DIR}
fi


#編譯真機庫文件
xcodebuild -project ${PROJ} \
-scheme ${LIB_STATIC_NAME} \
-configuration ${CONFIGURATION} \
-sdk iphoneos \
clean \
build \
CONFIGURATION_BUILD_DIR=${IPHONE_OS_DIR}
# -archivePath ${IPHONE_OS_DIR}

#編譯模擬器庫文件
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)庫文件
LIB_NAME=lib${LIB_STATIC_NAME}.a

#合并模擬器文件和真機文件
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} ]]; then
rm -fR ${LIB_STATIC_NAME}
fi

mkdir -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}.zip

zip -qr ${SDK_ZIP_NAME} ${LIB_STATIC_NAME}

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

相關(guān)文章

  • iOS開發(fā)之獲取系統(tǒng)相冊中的圖片與視頻教程(內(nèi)帶url轉(zhuǎn)換)

    iOS開發(fā)之獲取系統(tǒng)相冊中的圖片與視頻教程(內(nèi)帶url轉(zhuǎn)換)

    本篇文章主要介紹了iOS開發(fā)之獲取系統(tǒng)相冊中的圖片與視頻教程(內(nèi)帶url轉(zhuǎn)換),主要介紹AssetsLibrary 框架,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • IOS 開發(fā)之 NSMutableArray與NSArray 的區(qū)別

    IOS 開發(fā)之 NSMutableArray與NSArray 的區(qū)別

    這篇文章主要介紹了IOS 開發(fā)之 NSMutableArray與NSArray 的區(qū)別的相關(guān)資料,希望通過本文能掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • iOS使用AVFoundation展示視頻

    iOS使用AVFoundation展示視頻

    這篇文章主要為大家詳細介紹了iOS使用AVFoundation展示視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • iOS中NSPredicate謂詞的使用

    iOS中NSPredicate謂詞的使用

    這篇文章主要給大家介紹了關(guān)于iOS中NSPredicate謂詞的使用方法,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • IOSdrawRect實現(xiàn)雪花飄落效果

    IOSdrawRect實現(xiàn)雪花飄落效果

    這篇文章主要為大家詳細介紹了IOSdrawRect實現(xiàn)雪花飄落效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • iOS移動端軟鍵盤彈起空白和滾動穿透問題解決方案

    iOS移動端軟鍵盤彈起空白和滾動穿透問題解決方案

    這篇文章主要為大家介紹了iOS移動端軟鍵盤彈起空白和滾動穿透問題解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • iOS中的實時遠程配置全紀錄

    iOS中的實時遠程配置全紀錄

    這篇文章主要給大家介紹了關(guān)于iOS中實時遠程配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • iOS獲取設(shè)備唯一標(biāo)識的實現(xiàn)步驟

    iOS獲取設(shè)備唯一標(biāo)識的實現(xiàn)步驟

    這篇文章主要介紹了iOS獲取設(shè)備唯一標(biāo)識的實現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)ios開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • IOS中NSPredicate和NSRegularExpression校驗正則表達式區(qū)別

    IOS中NSPredicate和NSRegularExpression校驗正則表達式區(qū)別

    本文文章通過實例代碼給大家講述了在IOS開發(fā)中NSPredicate和NSRegularExpression校驗正則表達式區(qū)別,需要的朋友趕快學(xué)習(xí)下吧。
    2018-01-01
  • IOS網(wǎng)絡(luò)請求之NSURLSession使用詳解

    IOS網(wǎng)絡(luò)請求之NSURLSession使用詳解

    這篇文章主要介紹了IOS網(wǎng)絡(luò)請求之NSURLSession使用詳解,今天使用NSURLConnection分別實現(xiàn)了get、post、表單提交、文件上傳、文件下載,有興趣的可以了解一下。
    2017-02-02

最新評論