你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS腳本打包和持續集成

iOS腳本打包和持續集成

編輯:IOS開發基礎

2548829-01ff3d65f6b462b2.png

BWiOSPackage

iOS Continuous Integration

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

Contents

  • iOS Xcode Project

  • Xcode打包

  • 腳本打包

  • iOS ipa包

  • 持續集成

  • 自動化測試

  • Reference

  • 經驗總結

  • Follow Me

iOS Xcode Project

  • Workspace

    簡單來說,Workspace就是一個容器,在該容器中可以存放多個你創建的Xcode Project, 以及其他的項目中需要使用到的文件。使用Workspace的好處有,1),擴展項目的可視域,即可以在多個項目之間跳轉,重構,一個項目可以使用另一個項目的輸出。Workspace會負責各個Project之間提供各種相互依賴的關系;2),多個項目之間共享Build目錄。

  • Project

    指一個項目,該項目會負責管理生成一個或者多個軟件產品的全部文件和配置,一個Project可以包含多個Target。

  • Target

    一個Target是指在一個Project中構建的一個產品,它包含了構建該產品的所有文件,以及如何構建該產品的配置。

  • Scheme

    一個定義好構建過程的Target成為一個Scheme。可在Scheme中定義的Target的構建過程有:Build/Run/Test/Profile/Analyze/Archive

  • Build Setting

    配置產品的Build設置,比方說,使用哪個Architectures?使用哪個版本的SDK?。在Xcode Project中,有Project級別的Build Setting,也有Target級別的Build Setting。Build一個產品時一定是針對某個Target的,因此,XCode中總是優先選擇Target的Build Setting,如果Target沒有配置,則會使用Project的Build Setting。

  • Build Phases

    • Target Dependencies

    • Compile Sources(編譯資源,可設置Compiler Flags)

    • Link Binary With Libraries

    • Copy Bundle Resources(直接拷貝到包裡面的資源)

    • Run Script(運行腳本,運行腳本不用拷貝到Bundle

Xcode打包

  • 打包機制

    • 流程
      xcodebuild -> Package;

  • xcodebuild

    • 流程細節
      Check dependencies(檢查項目配置,如Code Sign) -> Preprocessor -> Compile -> Link -> Copy Resource、Compile Xib、CompileStoryboard、CompileAssetCatalog -> Generate DSYM File -> ProcessProductPackaging -> Code Signing(需要訪問鑰匙串信息) -> Validate -> Result;

    • Result
      .app和.DSYM;

    • Code Signing

      • Code Signing Identity

      • Provisioning Profile

    • Reference:Terminal執行命令,查看輸出信息

  • Package

    • 把.app文件放入命名為“Payload”的新建文件夾中,對“Payload”文件夾進行壓縮,對壓縮生成的文件修改後綴名為.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

腳本打包

  • 腳本打包思路設計

    • 配置參數設計

    • 腳本修改項目配置和項目代碼

    • xcodebuild clean和remove上次打包生成的文件

    • xcodebuild

    • Package, Denominate ipa file, Move files

    • Back up DSYM

  • 配置參數設計

    • Configuration-Release or Debug

    • 後台環境

    • 包類型

      • App Store

      • InHouse

      • Adhoc

    • Bundle ID

    • App版本號

    • App Display Name

  • 命令

    • xcodebuild命令

      • 可構建的對象

        • workspace:必須和“-scheme”一起使用,構建該workspace下的一個scheme。

        • project:當根目錄下有多個Project的時候,必須使用“-project”指定project,然後會運行

        • target:構建某個Target

        • scheme:和“-workspace”一起使用,指定構建的scheme。

      • 構建行為

        • clean:清除build目錄下的文件,build目錄和其子目錄沒有被移除

        • build: 構建

        • test: 測試某個scheme,必須和"-scheme"一起使用

        • archive:打包,必須和“-scheme”一起使用

    • 獲取參數

      • $1、$2。。。、$n,n代表參數編號,$0為第一個參數,在此為腳本的路徑,$#獲取參數個數

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

      • 查找文件

        • 命令:find

      • 修改文件

        • 修改文件名

          命令:mv(move files)

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

          命令:sed(stream editor)

          替換指定文本
            sed -i ".tmp" "/words_to_find_which_line/s/replaced_word/new_word/" file_path
            參數說明
              -i:備份原文件,修改文件的操作不可逆,如果需要查看原來的內容,則可以在備份文件中進行查看,此腳本執行之後會生成一個.tmp文件,謹慎進行移除
              .tmp:備份的原文件名稱
              words_to_find_which_line:通過文本找到需要修改的目標文本屬於哪一行
              s:替換操作
              replaced_word:被替換的文本
              new_word:新文本
          替換目標位置文本
            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的值,不修改其余部分,如後面對代碼的注釋
              說明
                .*:正則表達式規則,“.”表示任意字符,“*”表示任意長度
      • 移除文件

        命令:rm(remove)

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

        mv file_path/file.format new_file_path/new_file.format
  • 項目的腳本

    • 本項目Shell腳本放置在工程根目錄下,腳本文件為package.sh;

  • Reference

    • 終端查看對應的Manuel手冊

  • 待完善

    • 腳本讀取和修改Xcode工程文件信息,如版本號、包類型、授權文件等;

    • 腳本中的參數編寫需要設計得更加靈活;

  • 學習方向

    • 正則表達式

    • Shell Script

    • 操作文本能力的提高

    • Python腳本的學習

iOS ipa包

  • ipa包的解壓

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

  • .app包轉換為有效的.ipa包

    方式一:把.app文件拖入iTunes“我的應用”,再從iTunes中拖出來,就是一個.ipa文件啦;

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

  • 從優秀App的ipa包中提煉信息

    如微信等知名應用的ipa包;

持續集成

  • 持續集成

    • 編譯,發布,自動化測試

    • 目的

      • 減少風險

      • 減少重復過程

  • 自動化構建

    • 自動化構建的的首要前提

      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.

      自動化構建的的首要前提是有一個支持自動化構建的命令行工具,可以讓開發人員可以通過一個簡單的命令運行當前項目。

    • 命令行工具

      自動化構建的命令行工具比持續集成的概念要誕生得早很多,幾十年前,Unix世界就已經有了Make,而Java世界有Ant,Maven,以及當前最流行的Gradle,.Net世界則有Nant和MSBuild。作為以GUI和命令行操作結合的完美性著稱的蘋果公司來說,當然也不會忘記為自己的封閉的iOS系統提供開發環境下命令行編譯工具:xcodebuild

  • 持續集成平台Jenkins

  • 待研究,下載不了Jenkins

自動化測試

  • 自動化測試

Reference

構建iOS持續集成平台(一)——自動化構建和依賴管理:http://www.infoq.com/cn/articles/build-ios-continuous-integration-platform-part1/

一步一步構建iOS持續集成:Jenkins+GitLab+蒲公英+FTP:http://www.jianshu.com/p/c69deb29720d

手把手教你利用Jenkins持續集成iOS項目:http://gold.xitu.io/post/57b01d50128fe10055bbc6d5

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

Manual:xcodebuild

經驗總結

  • Mac OS Terminal中的Shell腳本命令操作後不可以撤銷

  • Xcode Command+B是按照當前設定的Scheme進行Build,而不是固定選擇Release進行Build

Follow Me

Github:https://github.com/BobWongs

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved