午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

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

 quasiceo 2020-05-05

dvlproad

目錄

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

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

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

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

  • 五、打包完后
    1、Bugly 符號表上傳
    2、分支branch與標(biāo)簽tag

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

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

前言

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

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

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

2、實(shí)現(xiàn)過程中需要了解和操作的東西:
  • ①項(xiàng)目中存在多個(gè)環(huán)境

  • ②每個(gè)環(huán)境都有自己打包時(shí)候需要的對應(yīng)描述文件

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

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

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

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

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

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

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

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

image.png


本操作沒什么問題,就是你不覺得如果可以不用改來改去的話會(huì)更好嗎?
所以,以下說法鑒于你不想每次打包時(shí)候去Xcode設(shè)置里頻繁的根據(jù)所需要的環(huán)境修改使用的描述文件。不去修改才是正道,如果你習(xí)慣了頻繁的修改,建議你改掉那個(gè)習(xí)慣。如果你不想改,請略過本小節(jié)。
  • 問題/為什么會(huì)有此操作:
    我們的正常開發(fā)環(huán)境總有“測試環(huán)境”、“預(yù)生產(chǎn)環(huán)境”、“生產(chǎn)環(huán)境”三種環(huán)境,而Xcode默認(rèn)的模式只有DEBUG和RELEASE兩種模式。沒法讓我們一一對應(yīng)。

  • 解決:
    在項(xiàng)目中增加一個(gè)預(yù)發(fā)布環(huán)境或者再增加其他多個(gè)環(huán)境。即使用Xcode增加環(huán)境變量為每個(gè)打包環(huán)境對應(yīng)一個(gè)打包模式

  • 步驟:

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

image.png


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

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)境對應(yīng)一個(gè)打包模式結(jié)束。


分割圖1.jpg

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

image.png

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

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

所使用的打包命令:

# 進(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)目對應(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)容是怎樣的,如果要修改要怎么修改
。

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

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

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

ExportOptions(打包出來的內(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><none></string></dict></plist>

其中的重點(diǎn)是

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

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

描述文件匹配.png

仔細(xì)看圖,上面的Name自己在創(chuàng)建時(shí)候,命名的是有.的,所以我們這邊exportOptionsPlist文件中的這個(gè)string值,也應(yīng)該使用有.的(當(dāng)然如果你取的時(shí)候是沒有,那這邊也應(yīng)該是沒有,反正這邊的是要和網(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)境??梢?,但不要這么做,下面將告訴你為什么?

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

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

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

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

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

附:腳本小樣地址:CJDemo

分割圖1.jpg

五、打包完后

1、Bugly 符號表上傳

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

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

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

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

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

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

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

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

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

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

描述文件的位置.png

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

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

End

1人點(diǎn)贊

iOS開發(fā)

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多