【潮汐-framework真機模擬器合并】iOS開發(fā):iOS SDK 從開發(fā)到發(fā)布

iOS SDK 從開發(fā)到發(fā)布

最近在做封裝 SDK(Framework) 的工作逞怨,本篇文章將記錄 iOS SDK 從開發(fā)到發(fā)布的具體流程和經(jīng)驗總結(jié)败京。本文主要以圖片形式展示,畢竟有圖才是王道嘛,代碼可在 github鏈接 下載揍庄。

首先介紹下創(chuàng)建 SDK 工程以及對應(yīng) Demo 工程的具體流程。

創(chuàng)建 SDK 工程

創(chuàng)建 workspace东抹,用以管理 SDK 和 Demo project

image

創(chuàng)建 Cocoa Touch Framework蚂子,并加入到之前創(chuàng)建的 workspace 里

image
image
image

更改工程設(shè)置

  • 更改 Info -> development target 到目標(biāo)系統(tǒng)版本

    image
  • 確認 Target -> Build Settings -> Mach-O Type 為 Dynamic

    image
  • 更改 Target -> Build Settings -> Build Active Architchture Only 為 NO

    image
  • 更改 Target -> Build Settings -> Bitcode 為 NO

    image
  • 更改 Edit scheme -> Run -> Build Configuration 為 Release

    image

配置公共頭文件

  • 添加測試代碼

    image
  • 設(shè)置測試類的頭文件 .h 為 public

    image
  • 在 MFramework.h 文件中引入所有公開的頭文件

    image

創(chuàng)建 Demo 工程

創(chuàng)建 MDemo project,加入之前創(chuàng)建的 workspace缭黔。

image
image
image

更改 MDemo 工程設(shè)置

image
image

[站外圖片上傳中...(image-b6da99-1571883793797)]

集成 SDK 測試

  • 在 Target -> General 配置 Linked Framework 和 Embeded Binaries 為 MFramework

    image
  • 調(diào)用 MFramework 的測試代碼食茎,console 打印如預(yù)期

    image

本地打包 手動發(fā)布

創(chuàng)建 Cross-platform 的 Aggregate,執(zhí)行 build 腳本馏谨,通過 lipo 命令將之前構(gòu)建好的 模擬器架構(gòu)的 SDK 產(chǎn)物真機架構(gòu)的 SDK 產(chǎn)物 合成 適用于真機和模擬器的 SDK 產(chǎn)物

  • 創(chuàng)建 Cross-platform 的 Aggregate

    image
    image
    image
  • 修改 Configuration, 添加 Dependency 和 Build Script

    image
    image
    image
    image
  • 腳本代碼

    TARGET_NAME=${PROJECT_NAME}
    OUTPUT_DIR=${SRCROOT}/Products/${TARGET_NAME}.framework
    DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework
    SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework
    
    if [ -d "${OUTPUT_DIR}" ]
    then
    rm -rf "${OUTPUT_DIR}"
    fi
    
    mkdir -p "${OUTPUT_DIR}"
    cp -R "${DEVICE_DIR}/" "${OUTPUT_DIR}/"
    
    lipo -create "${DEVICE_DIR}/${TARGET_NAME}" "${SIMULATOR_DIR}/${TARGET_NAME}" -output "${OUTPUT_DIR}/${TARGET_NAME}"
    
    open "${SRCROOT}/Products"
    
    
  • 構(gòu)建 MFramework 的模擬器產(chǎn)物

    image
  • 構(gòu)建 MFramework 的真機產(chǎn)物

    image
  • 構(gòu)建 MFrameworkCommon别渔,通過 Build Script 會產(chǎn)生 支持模擬器和真機的 SDK 產(chǎn)物

    image
    image
  • MDemo 工程集成 SDK 產(chǎn)物 MFramework.framework,添加 Embedded Binaries 和 Linked Frameworks.

    image

持續(xù)構(gòu)建 自動發(fā)布

每次發(fā)布都手動打包钠糊,不僅繁瑣挟秤,耗人工,而且容易出現(xiàn)遺漏甚至錯誤抄伍。下面介紹下如何達到持續(xù)構(gòu)建和自動發(fā)布艘刚。在 workspace 根目錄創(chuàng)建構(gòu)建腳本 build.sh,命令行運行腳本 sudo ./build.sh, 則會在 workspace 根目錄下創(chuàng)建 result 文件夾并生成目標(biāo)產(chǎn)物截珍。借助 藍盾 等持續(xù)構(gòu)建平臺攀甚,則可以達到持續(xù)構(gòu)建,自動發(fā)布岗喉,自動歸檔的完美操作秋度。

  • 目標(biāo)產(chǎn)物預(yù)覽

    image
  • 腳本代碼

# 環(huán)境變量
#version=$MajorVersion"."$MinorVersion"."$FixVersion"."$BuildNo
#shortVersion=$MajorVersion"."$MinorVersion"."$FixVersion
version=2.3.4.5
shortVersion=2.3.4

xcworkspace="DevFramework"
scheme="MFramework"
configuration="Release"

WORKSPACE=`pwd`
RESULT_DIR=$WORKSPACE/result

# 清理工作區(qū)
rm -r ~/Library/Developer/Xcode/Archives/`date +%Y-%m-%d`/$scheme\ *.xcarchive
xcodebuild clean -workspace $xcworkspace.xcworkspace -scheme $scheme -configuration $configuration

# 更新版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $version" $scheme/$scheme/Info.plist
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $shortVersion" $scheme/$scheme/Info.plist

# 分別編譯真機和模擬器的 framework
xcodebuild -workspace $xcworkspace.xcworkspace -scheme $scheme -configuration $configuration ONLY_ACTIVE_ARCH=NO -sdk iphoneos BUILD_DIR="$RESULT_DIR" BUILD_ROOT="${BUILD_ROOT}" clean build
if ! [ $? = 0 ] ;then
    echo "xcodebuild iphoneos fail"
    exit 1
fi

xcodebuild -workspace $xcworkspace.xcworkspace -scheme $scheme -configuration $configuration ONLY_ACTIVE_ARCH=NO -sdk iphonesimulator BUILD_DIR="$RESULT_DIR" BUILD_ROOT="${BUILD_ROOT}" clean build
if ! [ $? = 0 ] ;then
    echo "xcodebuild iphonesimulator fail"
    exit 1
fi

# 合并 framework,輸出適用真機和模擬器的 framework 到 result 目錄
cp -R "$RESULT_DIR/${configuration}-iphoneos/${scheme}.framework/" "$RESULT_DIR/${scheme}_${version}.framework/"
lipo -create "$RESULT_DIR/$configuration-iphonesimulator/${scheme}.framework/${scheme}" "$RESULT_DIR/${configuration}-iphoneos/${scheme}.framework/${scheme}" -output "$RESULT_DIR/${scheme}_${version}.framework/${scheme}"
if ! [ $? = 0 ] ;then
    echo "lipo create framework fail"
    exit 1
fi

版本號設(shè)置

Framework 一定要配置版本號的钱床,這樣方便用戶(SDK使用者)接入合適目標(biāo)版本荚斯,也有利于后期的定位問題和開發(fā)維護。
版本號格式推薦是 主版本.特性版本.修正版本.持續(xù)構(gòu)建build號查牌,具體如何配置可以參考上面的【持續(xù)構(gòu)建 自動發(fā)布】事期。

結(jié)語

看到這里,iOS SDK 開發(fā)到發(fā)布的基本流程都已走通纸颜。當(dāng)然 SDK 的開發(fā)工作遠不止這些兽泣,更多的坑和經(jīng)驗還要靠各位大佬總結(jié)和分享,hhhh胁孙,就先到這里啦~

--------另外-----------
【潮汐】iOS開發(fā) 靜態(tài)庫關(guān)聯(lián)demo 多工程聯(lián)調(diào)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唠倦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涮较,更是在濱河造成了極大的恐慌稠鼻,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件法希,死亡現(xiàn)場離奇詭異枷餐,居然都是意外死亡,警方通過查閱死者的電腦和手機苫亦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門毛肋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屋剑,你說我怎么就攤上這事润匙。” “怎么了唉匾?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵孕讳,是天一觀的道長匠楚。 經(jīng)常有香客問我,道長厂财,這世上最難降的妖魔是什么芋簿? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮璃饱,結(jié)果婚禮上与斤,老公的妹妹穿的比我還像新娘。我一直安慰自己荚恶,他們只是感情好撩穿,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谒撼,像睡著了一般食寡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廓潜,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天抵皱,我揣著相機與錄音,去河邊找鬼辩蛋。 笑死叨叙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堪澎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼味滞,長吁一口氣:“原來是場噩夢啊……” “哼樱蛤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剑鞍,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤昨凡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蚁署,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體便脊,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年光戈,在試婚紗的時候發(fā)現(xiàn)自己被綠了哪痰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡久妆,死狀恐怖晌杰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筷弦,我是刑警寧澤肋演,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響爹殊,放射性物質(zhì)發(fā)生泄漏蜕乡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一梗夸、第九天 我趴在偏房一處隱蔽的房頂上張望层玲。 院中可真熱鬧,春花似錦绒瘦、人聲如沸称簿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憨降。三九已至,卻和暖如春该酗,著一層夾襖步出監(jiān)牢的瞬間授药,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工呜魄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悔叽,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓爵嗅,卻偏偏與公主長得像娇澎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子睹晒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 夜鶯2517閱讀 127,712評論 1 9
  • 版本:ios 1.2.1 亮點: 1.app角標(biāo)可以實時更新天氣溫度或選擇空氣質(zhì)量趟庄,建議處女座就不要選了,不然老想...
    我就是沉沉閱讀 6,878評論 1 6
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月伪很,有人笑有人哭戚啥,有人歡樂有人憂愁,有人驚喜有人失落锉试,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,521評論 28 53
  • 兔子雖然是枚小碩 但學(xué)校的碩士四人寢不夠 就被分到了博士樓里 兩人一間 在學(xué)校的最西邊 靠山 兔子的室友身體不好 ...
    待業(yè)的兔子閱讀 2,585評論 2 9