iOS 打包(一)--精簡(jiǎn)總結(jié)(證書(shū)、自動(dòng)化、持續(xù)集成等)(精簡(jiǎn))

目錄

  • 一、描述文件.mobileprovision的再次認(rèn)識(shí)
  • 二、使用Xcode增加環(huán)境變量為每個(gè)打包環(huán)境對(duì)應(yīng)一個(gè)打包模式
  • 三、認(rèn)識(shí)打包命令
  • 四、自動(dòng)化打包時(shí)候,參數(shù)化環(huán)境改變
  • 五、打包完后
    1、Bugly 符號(hào)表上傳
    2、分支branch與標(biāo)簽tag
  • 附:描述文件的位置與內(nèi)容查看

其他文章:
iOS 打包(二)--掃碼安裝問(wèn)題的完整排查

前言

首先說(shuō)明這邊不對(duì)簡(jiǎn)單的打包再累訴,因?yàn)榫W(wǎng)上一堆。
這邊只對(duì)一些平時(shí)不容易注意的東西,以及重要的一些點(diǎn)進(jìn)行說(shuō)明。

1、要達(dá)到的目的/效果:

構(gòu)建一個(gè)Jenkins項(xiàng)目,通過(guò)該項(xiàng)目,在輸入打包環(huán)境后自動(dòng)打包項(xiàng)目。

2、實(shí)現(xiàn)過(guò)程中需要了解和操作的東西:
  • ①項(xiàng)目中存在多個(gè)環(huán)境
  • ②每個(gè)環(huán)境都有自己打包時(shí)候需要的對(duì)應(yīng)描述文件

一、描述文件.mobileprovision的再次認(rèn)識(shí)

通過(guò)以下表格,你將認(rèn)識(shí)到為什么你這個(gè)環(huán)境需要使用這個(gè)描述文件打包,用其他描述文件會(huì)有什么問(wèn)題。

類型 可安裝的設(shè)備 證書(shū)環(huán)境(開(kāi)發(fā)/生產(chǎn)) 推送 用于測(cè)試環(huán)境(測(cè)試/預(yù)生產(chǎn)/生產(chǎn))
development 已注冊(cè)的設(shè)備 開(kāi)發(fā)環(huán)境的證書(shū) 測(cè)試環(huán)境的推送 測(cè)試環(huán)境
adhoc 已注冊(cè)的設(shè)備 生產(chǎn)環(huán)境的證書(shū) 和appstore一樣的正式環(huán)境推送 預(yù)生產(chǎn)環(huán)境
appstore 所有的設(shè)備 生產(chǎn)環(huán)境的證書(shū) appstore的推送肯定是要正式環(huán)境的 生產(chǎn)環(huán)境

所以在需要考慮收到的推送環(huán)境是否正確的情況下,有下面的因果關(guān)系:

①測(cè)試環(huán)境:需要"測(cè)試推送",且可以測(cè)試,所以只能使用development;
②預(yù)生產(chǎn)環(huán)境:需要"正式推送",且可以測(cè)試,即又不能上線,所以只能用adhoc;
③生產(chǎn)環(huán)境:需要"正式推送"環(huán)境,又需要上線,所以只能用appstore;

二、使用Xcode增加環(huán)境變量為每個(gè)打包環(huán)境對(duì)應(yīng)一個(gè)打包模式

首先,請(qǐng)回想你是否有以下這個(gè)笨笨的經(jīng)歷,如果有請(qǐng)認(rèn)真看本節(jié)內(nèi)容。

什么經(jīng)歷呢?即:給測(cè)試人員打預(yù)發(fā)布版本的時(shí)候,去Xcode設(shè)置里選xxx_adhoc.mobileprovision,提線上版本的時(shí)候,又去Xcode里將它改為xxx_appstore.mobileprovision

image.png

本操作沒(méi)什么問(wèn)題,就是你不覺(jué)得如果可以不用改來(lái)改去的話會(huì)更好嗎?
所以,以下說(shuō)法鑒于你不想每次打包時(shí)候去Xcode設(shè)置里頻繁的根據(jù)所需要的環(huán)境修改使用的描述文件。不去修改才是正道,如果你習(xí)慣了頻繁的修改,建議你改掉那個(gè)習(xí)慣。如果你不想改,請(qǐng)略過(guò)本小節(jié)。

  • 問(wèn)題/為什么會(huì)有此操作:
    我們的正常開(kāi)發(fā)環(huán)境總有“測(cè)試環(huán)境”、“預(yù)生產(chǎn)環(huán)境”、“生產(chǎn)環(huán)境”三種環(huán)境,而Xcode默認(rèn)的模式只有DEBUG和RELEASE兩種模式。沒(méi)法讓我們一一對(duì)應(yīng)。
  • 解決:
    在項(xiàng)目中增加一個(gè)預(yù)發(fā)布環(huán)境或者再增加其他多個(gè)環(huán)境。即使用Xcode增加環(huán)境變量為每個(gè)打包環(huán)境對(duì)應(yīng)一個(gè)打包模式
  • 步驟:

步驟①、點(diǎn)擊下方的"+",選擇復(fù)制Debug模式的欄目

image.png

細(xì)心的你,可能會(huì)發(fā)現(xiàn)我們項(xiàng)目中這里有pod,所以我們需要立即執(zhí)行一下pod install,讓pod自己去生成新的正確的xcconfig文件才能被識(shí)別到。否則待會(huì)你編譯的時(shí)候會(huì)報(bào)錯(cuò)。那么你打包的時(shí)候肯定也會(huì)報(bào)錯(cuò),一般是報(bào)Pod庫(kù)問(wèn)題,如下圖
image.png

重新pod install后的圖如下:
image.png

步驟②、因?yàn)閯?chuàng)建的 Prerelease 環(huán)境變量,是copy Debug模式下的,所以在Xcode的配置中需要更改預(yù)編譯的環(huán)境變量為PRERELEASE=1,,修改處路徑是:TARGETS-->Build Settings-->Preprocessor Macros
image.png

恭喜您,至此,使用Xcode增加環(huán)境變量為每個(gè)打包環(huán)境對(duì)應(yīng)一個(gè)打包模式結(jié)束。


分割圖1.jpg

附:有時(shí)候您還想讓app根據(jù)不同的環(huán)境顯示不同的應(yīng)用名,那么您可以:

image.png

打包配置就講到這,下面講講打包命令。這個(gè)在自動(dòng)化打包中常需要用到。建議都熟悉一下。

三、認(rèn)識(shí)打包命令

所使用的打包命令:

# 進(jìn)入build路徑clean一下你的工程
xcodebuild clean -workspace ${TARGET_NAME}.xcworkspace -scheme ${TARGET_NAME} -configuration ${BUILD_TYPE}

# archive導(dǎo)出.xcarchive文件
xcodebuild archive -workspace ${TARGET_NAME}.xcworkspace -scheme ${TARGET_NAME} -archivePath {ARCHIVEPATH}

# 導(dǎo)出ipa包
xcodebuild -exportArchive -archivePath "${ARCHIVEPATH}/${TARGET_NAME}.xcarchive" -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST}

解釋:
${TARGET_NAME} 項(xiàng)目對(duì)應(yīng)targets的名字
${BUILD_TYPE} 打包類型 Debug,Release 等
${archivePath} .xcarchive文件導(dǎo)出目錄
${EXPORTPATH} 導(dǎo)出.ipa包的目錄
${EXPORTOPTIONSPLIST} exportOptionsPlist文件所在目錄,可判斷development, ad-hoc等
1、archive

2、exportArchive

這個(gè)步驟,著重介紹需要使用的exportOptionsPlist文件內(nèi)容是怎樣的,如果要修改要怎么修改

所以,我們?cè)賹?duì)平時(shí)手動(dòng)打包出來(lái)的文件目錄,重新認(rèn)識(shí)下。細(xì)心的你應(yīng)該發(fā)現(xiàn)里面其實(shí)已經(jīng)有一個(gè)ExportOptions .plist文件了。

ExportOptions(打包出來(lái)的文件目錄).png

我們打開(kāi)該文件查看一下里面的內(nèi)容。

ExportOptions(打包出來(lái)的內(nèi)容).png

下面我們舉個(gè)例子

# 一個(gè)完整 exportOptionsPlist 文件內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>development</string>
    <key>provisioningProfiles</key>
    <dict>
        <key>com.dvlproad.Demo</key>
        <string>com.dvlproad.Demo_development</string>
    </dict>
    <key>signingCertificate</key>
    <string>iPhone Developer</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>你的teamID,不管是什么描述文件,teamID都是一樣的</string>
    <key>thinning</key>
    <string>&lt;none&gt;</string>
</dict>
</plist>

其中的重點(diǎn)是

<dict>
    <key>com.dvlproad.Demo</key>
    <string>com.dvlproad.Demo_development</string>
</dict>

上面的key值,是bundleID,肯定是有"."的;
但是下面的string值,是蘋(píng)果開(kāi)發(fā)者中心下管理描述文件下的Name,而不是下載下來(lái)生成的Name,或者自己改的Name。
這個(gè)點(diǎn)尤其要注意。

描述文件匹配.png

仔細(xì)看圖,上面的Name自己在創(chuàng)建時(shí)候,命名的是有.的,所以我們這邊exportOptionsPlist文件中的這個(gè)string值,也應(yīng)該使用有.的(當(dāng)然如果你取的時(shí)候是沒(méi)有,那這邊也應(yīng)該是沒(méi)有,反正這邊的是要和網(wǎng)站上的Name保持一致的,而不是自己隨便重命名的那個(gè))。

四、自動(dòng)化打包時(shí)候,參數(shù)化環(huán)境改變

參數(shù)化環(huán)境改變,這是什么鬼意思?

首先,在我們的項(xiàng)目中,肯定有一個(gè)變量是控制當(dāng)前打包的是什么環(huán)境的代碼吧。一般的代碼如下:

#import "STDemoEnvironmentConfig.h"

//@"Product",
//@"PreProduct",
//@"Develop1",
//@"Develop2",
//@"Develop3",
NSString * const STDemoCurrentEnvironment = @"PreProduct";  //取值為上述五個(gè)中的一個(gè)

如果我們是手動(dòng)打包,那么每次打包之前都得修改當(dāng)前打包的環(huán)境變量。那自動(dòng)化打包的時(shí)候呢?難不成我們也那么處理,每次打包時(shí)候,去修改項(xiàng)目中的代碼,讓其打包成我們想要的環(huán)境。可以,但不要這么做,下面將告訴你為什么?

試想以下兩種情況,情況①,什么功能都沒(méi)修改,只是為了換個(gè)打包環(huán)境就得去修改代碼,然后重新commit,Jenkins再構(gòu)建,是不是感覺(jué)不知不覺(jué)多了很多不必要的commit節(jié)點(diǎn)。情況②,某個(gè)分支下已經(jīng)是穩(wěn)定的了,如master,但是測(cè)試人員想要不同的環(huán)境,你認(rèn)為為了這個(gè)需求,你頻繁的去改這個(gè)穩(wěn)定的版本有必要嗎?(情況①在這里就顯得更容易理解了)。

所以為了避免這些多余的無(wú)用功,我們將更改環(huán)境的操作,參數(shù)化到Jenkins中執(zhí)行命令的地方,通過(guò)命令中所帶的參數(shù)結(jié)合python腳本,讓python腳本去把我們項(xiàng)目中的環(huán)境變量值改為命令中的。

這里我們把環(huán)境改變腳本macro_env.py和要改變的文件單獨(dú)提取出來(lái)測(cè)試。

參數(shù)化環(huán)境改變1.png

可以看到執(zhí)行命令后,腳本中指定的文件中的CJDemoCurrentEnvironment變量的值被我們改變成了Develop3(原本在項(xiàng)目中的值為Develop1)。

附:腳本小樣地址:CJDemo
分割圖1.jpg

五、打包完后

1、Bugly 符號(hào)表上傳

打包完后,為了能快速并準(zhǔn)確地定位用戶APP發(fā)生Crash的代碼位置,每次Jenkins構(gòu)建成功后,需要上傳符號(hào)表到Bugly,以備后續(xù)使用符號(hào)表對(duì)APP發(fā)生Crash的程序堆棧進(jìn)行解析和還原。詳細(xì)操作略,請(qǐng)前往官網(wǎng)查看Bugly iOS 符號(hào)表配置的配置方法。

2、分支branch與標(biāo)簽tag

①、功能開(kāi)發(fā)時(shí)候的分支情況:

功能開(kāi)發(fā)時(shí)候的分支情況.png

②、進(jìn)入發(fā)布時(shí)候的分支情況:

進(jìn)入發(fā)布時(shí)候的分支情況.png

③、發(fā)布后開(kāi)始維護(hù)時(shí)候的分支情況:

發(fā)布后開(kāi)始維護(hù)時(shí)候的分支情況.png

附:描述文件的位置與內(nèi)容查看

描述文件的位置~/Library/MobileDevice/Provisioning Profiles

描述文件的位置.png

在上圖中,點(diǎn)擊 空格鍵可以查看描述文件的詳細(xì)信息,如下圖:

描述文件的詳細(xì)信息.png

End

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,606評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,044評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,826評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,227評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,447評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,807評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,001評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評(píng)論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,243評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,667評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,930評(píng)論 1 287
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,709評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,996評(píng)論 2 374

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

  • 用到的組件 1、通過(guò)CocoaPods安裝 2、第三方類庫(kù)安裝 3、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,639評(píng)論 1 180
  • 那是我還很小的時(shí)候,我已經(jīng)記不起來(lái)那是上小學(xué)幾年級(jí)了。那一天,鄰居從鎮(zhèn)上租來(lái)了碟片,那一年,我家還沒(méi)有VCD。...
    七色泥閱讀 777評(píng)論 2 10
  • 今天六點(diǎn)半起床,上午送女兒去上培訓(xùn)班,然后為大公益聯(lián)誼會(huì)做準(zhǔn)備,十一點(diǎn)準(zhǔn)時(shí)出發(fā)前往鄂州,中午和同學(xué)們一起午餐,三點(diǎn)...
    星鑠閱讀 203評(píng)論 0 0
  • 文/辛超凡 老高不老,是一位30多歲的姐姐;我與老高不熟,我們僅有一面之緣;我該叫她高姐,“老高”是高姐的自稱;所...
    拾月星河閱讀 1,086評(píng)論 15 20
  • 1、如何讓程序員更高效的工作? 讓程序員只做他們?cè)撟龅模瑤退麄冏龊闷渌乃惺拢≌f(shuō)的通俗一點(diǎn),一個(gè)需求下達(dá)到程序員...
    斷指鶴閱讀 436評(píng)論 5 2