iOS腳本打包和持續(xù)集成

head.png

BWiOSPackage

iOS Continuous Integration

Github:https://github.com/bobwongs/BWiOSPackage

Contents

  • iOS Xcode Project
  • Xcode打包
  • 腳本打包
  • iOS ipa包
  • 持續(xù)集成
  • 自動(dòng)化測(cè)試
  • Reference
  • 經(jīng)驗(yàn)總結(jié)
  • Follow Me

iOS Xcode Project

  • Workspace

    簡(jiǎn)單來(lái)說(shuō),Workspace就是一個(gè)容器,在該容器中可以存放多個(gè)你創(chuàng)建的Xcode Project, 以及其他的項(xiàng)目中需要使用到的文件。使用Workspace的好處有,1),擴(kuò)展項(xiàng)目的可視域,即可以在多個(gè)項(xiàng)目之間跳轉(zhuǎn),重構(gòu),一個(gè)項(xiàng)目可以使用另一個(gè)項(xiàng)目的輸出。Workspace會(huì)負(fù)責(zé)各個(gè)Project之間提供各種相互依賴的關(guān)系;2),多個(gè)項(xiàng)目之間共享Build目錄。

  • Project

    指一個(gè)項(xiàng)目,該項(xiàng)目會(huì)負(fù)責(zé)管理生成一個(gè)或者多個(gè)軟件產(chǎn)品的全部文件和配置,一個(gè)Project可以包含多個(gè)Target。

  • Target

    一個(gè)Target是指在一個(gè)Project中構(gòu)建的一個(gè)產(chǎn)品,它包含了構(gòu)建該產(chǎn)品的所有文件,以及如何構(gòu)建該產(chǎn)品的配置。

  • Scheme

    一個(gè)定義好構(gòu)建過(guò)程的Target成為一個(gè)Scheme。可在Scheme中定義的Target的構(gòu)建過(guò)程有:Build/Run/Test/Profile/Analyze/Archive

  • Build Setting

    配置產(chǎn)品的Build設(shè)置,比方說(shuō),使用哪個(gè)Architectures?使用哪個(gè)版本的SDK?。在Xcode Project中,有Project級(jí)別的Build Setting,也有Target級(jí)別的Build Setting。Build一個(gè)產(chǎn)品時(shí)一定是針對(duì)某個(gè)Target的,因此,XCode中總是優(yōu)先選擇Target的Build Setting,如果Target沒(méi)有配置,則會(huì)使用Project的Build Setting。

  • Build Phases

    • Target Dependencies
    • Compile Sources(編譯資源,可設(shè)置Compiler Flags)
    • Link Binary With Libraries
    • Copy Bundle Resources(直接拷貝到包里面的資源)
    • Run Script(運(yùn)行腳本,運(yùn)行腳本不用拷貝到Bundle

Xcode打包

  • 打包機(jī)制

    • 流程
      xcodebuild -> Package;
  • xcodebuild

    • 流程細(xì)節(jié)
      Check dependencies(檢查項(xiàng)目配置,如Code Sign) -> Preprocessor -> Compile -> Link -> Copy Resource、Compile Xib、CompileStoryboard、CompileAssetCatalog -> Generate DSYM File -> ProcessProductPackaging -> Code Signing(需要訪問(wèn)鑰匙串信息) -> Validate -> Result;
    • Result
      .app和.DSYM;
    • Code Signing
      • Code Signing Identity
      • Provisioning Profile
    • Reference:Terminal執(zhí)行命令,查看輸出信息
  • Package

    • 把.app文件放入命名為“Payload”的新建文件夾中,對(duì)“Payload”文件夾進(jìn)行壓縮,對(duì)壓縮生成的文件修改后綴名為.ipa,這樣,就能生成有效的ipa包了;
  • Xcode可視化打包

    Select Generic iOS Device -> Xcode Menu Bar - Product -> Archive -> Select Package Type -> Select Provisoning Profile -> Export ipa or Upload to App Store

腳本打包

  • 腳本打包思路設(shè)計(jì)

    • 配置參數(shù)設(shè)計(jì)
    • 腳本修改項(xiàng)目配置和項(xiàng)目代碼
    • xcodebuild clean和remove上次打包生成的文件
    • xcodebuild
    • Package, Denominate ipa file, Move files
    • Back up DSYM
  • 配置參數(shù)設(shè)計(jì)

    • Configuration-Release or Debug
    • 后臺(tái)環(huán)境
    • 包類型
      • App Store
      • InHouse
      • Adhoc
    • Bundle ID
    • App版本號(hào)
    • App Display Name
  • 命令

    • xcodebuild命令

      • 可構(gòu)建的對(duì)象
        • workspace:必須和“-scheme”一起使用,構(gòu)建該workspace下的一個(gè)scheme。
        • project:當(dāng)根目錄下有多個(gè)Project的時(shí)候,必須使用“-project”指定project,然后會(huì)運(yùn)行
        • target:構(gòu)建某個(gè)Target
        • scheme:和“-workspace”一起使用,指定構(gòu)建的scheme。
      • 構(gòu)建行為
        • clean:清除build目錄下的文件,build目錄和其子目錄沒(méi)有被移除
        • build: 構(gòu)建
        • test: 測(cè)試某個(gè)scheme,必須和"-scheme"一起使用
        • archive:打包,必須和“-scheme”一起使用
    • 獲取參數(shù)

      • $1、$2。。。、$n,n代表參數(shù)編號(hào),$0為第一個(gè)參數(shù),在此為腳本的路徑,$#獲取參數(shù)個(gè)數(shù)

        param1=$1
        param2=$2
        
    • 文件操作

      • 查找文件

        • 命令:find
      • 修改文件

        • 修改文件名

          命令:mv(move files)

          mv file.txt new_file.txt  # 帶上文件格式
          mv directory new_directory  # 修改目錄名
          
        • 查找和修改文件內(nèi)容

          命令:sed(stream editor)

          替換指定文本
            sed -i ".tmp" "/words_to_find_which_line/s/replaced_word/new_word/" file_path
            參數(shù)說(shuō)明
              -i:備份原文件,修改文件的操作不可逆,如果需要查看原來(lái)的內(nèi)容,則可以在備份文件中進(jìn)行查看,此腳本執(zhí)行之后會(huì)生成一個(gè).tmp文件,謹(jǐn)慎進(jìn)行移除
              .tmp:備份的原文件名稱
              words_to_find_which_line:通過(guò)文本找到需要修改的目標(biāo)文本屬于哪一行
              s:替換操作
              replaced_word:被替換的文本
              new_word:新文本
          替換目標(biāo)位置文本
            sed -i ".tmp" "/words_to_find_which_line/s/regular_expression/new_word/" file_path
            示例
              sed -i ".tmp" "/kEnvironment/s/=.*;/= new_tag;/" file_path  # 更換kEnvironment的值,不修改其余部分,如后面對(duì)代碼的注釋
              說(shuō)明
                .*:正則表達(dá)式規(guī)則,“.”表示任意字符,“*”表示任意長(zhǎng)度
          
      • 移除文件

        命令:rm(remove)

        rm path/file.format  # 移除文件
        rm -r path/directory  # 移除目錄,-r命令可以刪除非空目錄
        
      • 移動(dòng)文件:mv(move files)

        mv file_path/file.format new_file_path/new_file.format
        
  • 項(xiàng)目的腳本

    • 本項(xiàng)目Shell腳本放置在工程根目錄下,腳本文件為package.sh;
  • Reference

    • 終端查看對(duì)應(yīng)的Manuel手冊(cè)
  • 待完善

    • 腳本讀取和修改Xcode工程文件信息,如版本號(hào)、包類型、授權(quán)文件等;
    • 腳本中的參數(shù)編寫需要設(shè)計(jì)得更加靈活;
  • 學(xué)習(xí)方向

    • 正則表達(dá)式
    • Shell Script
    • 操作文本能力的提高
    • Python腳本的學(xué)習(xí)

iOS ipa包

  • ipa包的解壓

    修改后綴名,把后綴名修改為Mac OS可解壓的,如:ipa -> zip;

  • .app包轉(zhuǎn)換為有效的.ipa包

    方式一:把.app文件拖入iTunes“我的應(yīng)用”,再?gòu)膇Tunes中拖出來(lái),就是一個(gè).ipa文件啦;

    方式二:把.app文件放入命名為“Payload”的新建文件夾中,對(duì)“Payload”文件夾進(jìn)行壓縮,對(duì)壓縮生成的文件修改后綴名為.ipa;

  • 從優(yōu)秀App的ipa包中提煉信息

    如微信等知名應(yīng)用的ipa包;

持續(xù)集成

  • 持續(xù)集成

    • 編譯,發(fā)布,自動(dòng)化測(cè)試
    • 目的
      • 減少風(fēng)險(xiǎn)
      • 減少重復(fù)過(guò)程
  • 自動(dòng)化構(gòu)建

    • 自動(dòng)化構(gòu)建的的首要前提

      Anyone should be able to bring in a virgin machine, check the sources out of the repository, issue a single command, and have a running system on their machine.

      自動(dòng)化構(gòu)建的的首要前提是有一個(gè)支持自動(dòng)化構(gòu)建的命令行工具,可以讓開(kāi)發(fā)人員可以通過(guò)一個(gè)簡(jiǎn)單的命令運(yùn)行當(dāng)前項(xiàng)目。

    • 命令行工具

      自動(dòng)化構(gòu)建的命令行工具比持續(xù)集成的概念要誕生得早很多,幾十年前,Unix世界就已經(jīng)有了Make,而Java世界有Ant,Maven,以及當(dāng)前最流行的Gradle,.Net世界則有Nant和MSBuild。作為以GUI和命令行操作結(jié)合的完美性著稱的蘋果公司來(lái)說(shuō),當(dāng)然也不會(huì)忘記為自己的封閉的iOS系統(tǒng)提供開(kāi)發(fā)環(huán)境下命令行編譯工具:xcodebuild

  • 持續(xù)集成平臺(tái)Jenkins

  • 待研究,下載不了Jenkins

自動(dòng)化測(cè)試

  • 自動(dòng)化測(cè)試

Reference

構(gòu)建iOS持續(xù)集成平臺(tái)(一)——自動(dòng)化構(gòu)建和依賴管理:http://www.infoq.com/cn/articles/build-ios-continuous-integration-platform-part1/

一步一步構(gòu)建iOS持續(xù)集成:Jenkins+GitLab+蒲公英+FTP:http://www.itdecent.cn/p/c69deb29720d

手把手教你利用Jenkins持續(xù)集成iOS項(xiàng)目:http://gold.xitu.io/post/57b01d50128fe10055bbc6d5

Jenkins:https://jenkins.io/index.html

Manual:xcodebuild

經(jīng)驗(yàn)總結(jié)

  • Mac OS Terminal中的Shell腳本命令操作后不可以撤銷
  • Xcode Command+B是按照當(dāng)前設(shè)定的Scheme進(jìn)行Build,而不是固定選擇Release進(jìn)行Build

Follow Me

Github:https://github.com/BobWongs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 眾所周知,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的。如果一個(gè)公司的推廣...
    偏偏就是禰閱讀 9,338評(píng)論 34 59
  • 前言 眾所周知,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的。如果一個(gè)公司的推廣...
    閑云清煙閱讀 2,621評(píng)論 1 4
  • 來(lái)源:伯樂(lè)在線專欄作者 - 一縷殤流化隱半邊冰霜鏈接:http://ios.jobbole.com/87576/ ...
    飛天豬Pony閱讀 3,099評(píng)論 0 20
  • 她有水晶般的心 純潔而易碎 她有黑珍珠般的眼 明亮而清澈 她如金子美玲般細(xì)膩、敏感 她,就是你們 你們就是她 純真...
    李笑然閱讀 354評(píng)論 0 4
  • 昨天聽(tīng)了普通人快速崛起的10大狠招,總而言之,對(duì)于我來(lái)說(shuō)最重要的結(jié)論還是需要大量的輸入和輸出!輸入的速度還是太慢...
    紫微星秦皇島閱讀 326評(píng)論 2 1

友情鏈接更多精彩內(nèi)容