iOS自動化打包部署踩坑記

前記

因爲爲了提升工做效率,採用自動打包來解決問題,一開始在網上也是找到了不少的教程,仍是頗有信心的完成這個踩坑,可是沒想到坑比想象得多。有的文章甚至是抄襲、過期,致使沒能按照教程直接實現。
網上的教程多數是jenkins的xcode插件、證書管理的教程,可是這裏一個最坑的地方就是上傳了描述文件的路徑也沒法進行識別,致使構建版本的時候沒法正確配置證書,後來放棄了此方法。以及jenkins的安裝方式也是各類坑,使用官網包安裝以後執行腳本的時候常常出現權限的問題,沒法經過更改權限來解決問題。坑不少,可是沒有一一記錄,本文采用jenkins+fastlane進行自動化打包,遠程打包使用的局域網進行控制。本文講述了一些環境的配置以及所遇到的坑。html

安裝Homebrew

  1. 查看安裝腳本: https://raw.githubusercontent.com/Homebrew/install/master/install,並複製所有內容保存爲brew_install.sh文件java

  2. 更換腳本brew_install中的如下部分,注意新版的HomeBrew中沒有了CORE_TAP_REPO參數,變爲:HOMEBREW_CORE_TAP,下面第二行可能根據須要來更改ios

    BREW_REPO = "https://github.com/Homebrew/brew".freeze
    CORE_TAP_REPO = "https://github.com/Homebrew/homebrew-core".freeze
    複製代碼

    更改成git

    BREW_REPO="https://mirrors.ustc.edu.cn/brew.git".freeze
    CORE_TAP_REPO = "https://mirrors.ustc.edu.cn/homebrew-core.git".freeze
    複製代碼
  3. 執行brew_install腳本(注意將xxx替換爲文件真實路徑):github

    /usr/bin/ruby xxx/brew_install.sh
    複製代碼
  4. 若是出現瞭如下狀況:shell

    ==> Tapping homebrew/core
    Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core'...
    複製代碼

    咱們以前切換了鏡像源,可是仍是會出現這個問題,也就是克隆homebrew-core出錯,那咱們就本身手動克隆:xcode

    cd "$(brew --repo)"
    cd Library/Taps
    mkdir homebrew
    cd homebrew
    mkdir homebrew-core
    cd homebrew-core/
    git clone git clone git://mirrors.ustc.edu.cn/homebrew-core.git /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
    複製代碼
  5. 安裝完畢後能夠執行:brew doctor檢查安裝的brew是否有問題,會自動進行檢查並安裝缺乏的部分ruby

  6. 若是電腦已有homebrew,執行升級操做,若是出現下面錯誤字眼,不用折騰權限的問題了,老實重裝吧:bash

    ERROR: /usr/local/ must be writeable!
    複製代碼

    瞬間就想到是權限問題,有人直接找到那個文件夾進行更改權限,是否是發現沒有權限😆,因而乎就直接使用如下命令:服務器

    sudo chown -R $(whoami) /usr/local
    複製代碼

    接着你會發現絲毫沒有做用,因而乎又找到了新的命令:

    sudo chown -R $(whoami) $(brew --prefix)/*
    複製代碼

    😆😆,仍是沒用,是否是以爲個人天啊,其實解決辦法很簡單,前面說的別折騰這麼多,直接卸載重裝吧

    卸載😁:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
    複製代碼

    而後接着上面教程安裝。

安裝Java環境

  1. 由於jenkins須要在Java環境下運行,並且版本最好爲Java 8(由於jenkins的須要的條件就是Java 8),不然可能會出現某些出乎意外的狀況,例以下載插件可能會失敗且進去後沒法再下載安裝

  2. 下載地址爲:傳送門

  3. 手動安裝Java

安裝jenkins

  1. 因爲下載官網的安裝包進行安裝可能會出現jenkins運行時權限的問題、以及下載插件失敗的可能性,因此最好是採用Homebrew 方式安裝。

  2. 執行安裝命令:brew install jenkins。還有一個長期支持的版本,在jenkins後面加 -lts 後綴,其餘命令也須要加後綴**-lts**,長期支持安裝命令: brew install jenkins-lts

  3. 完成後開始啓用jenkins

    第一種方式:jenkins
    第二種方式:open /usr/local/opt/jenkins/libexec/jenkins.war
    都是前臺啓動的,前者須要一個終端窗口來顯示日誌,關閉將會關閉jenkins,後者是隱藏的方式運行,能夠關閉終端窗口
    推薦使用:brew services start jenkins
    此外還能夠經過Mac系統的自帶後臺管理系統launchctl中的配置文件,存放於~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist,參數配置需自行google,brew的方式管理就是經過這個配置文件進行後臺管理的,因此推薦使用這種方式
    複製代碼
  4. 經過brew方式安裝的jenkins目錄存放於:~/.jenkins, 工做空間路徑:~/.jenkins/workspace/

  5. 安裝啓動成功後會在終端顯示初始密碼,須要拷貝改密碼進入jenkins,也能夠在初始密碼文件中拷貝初始密碼:

    cat ~/.jenkins/secrets/initialAdminPassword
    複製代碼
  6. jenkins 寫腳本時須要設置環境變量,在終端輸入以下命令,並將獲得的環境變量設置到jenkins的全局環境變量中

    echo $PATH
    複製代碼
  7. jenkins 寫腳本時最好設置編碼類型,且需註明腳本的工做路徑

    export LANG=en_US.UTF-8
    export LANGUAGE=en_US.UTF-8
    export LC_ALL=en_US.UTF-8
    
    ...
    
    cd $WORKSPACE #cd到工做路徑
    ....
    fastlane xxx
    複製代碼
  8. 沒法在腳本里進行 **fastlane init **,因此在部署項目且爲第一個項目時,cd到項目目錄, sudo 命令執行:

    cd XXXX
    sudo fastlane init
    複製代碼

    將在該目錄下生成指定fastlane的配置文件,能夠把事先準備的腳本配置複製fastlane目錄下的AppfileFastfile,若是項目使用了cocoapods管理第三方庫,還需在Gemfile配置文件添加一行:

    gem "cocoapods"
    複製代碼

    當第二個項目部署時能夠複製第一個項目的fastlane配置文件包括:GemfileGemfile.lockfastlane目錄 兩個文件一個目錄拷貝至新的項目目錄下,並更換Appfilefastfile的配置內容便可。

更新RubyGems

1.可能會因爲版本的緣由而沒法安裝fastlane,因此須要更新RubyGems。

2.淘寶維護的鏡像源已不在維護,鏡像源更改成:gem sources -a http://gems.ruby-china.com/

3.添加新鏡像源(org的域名還在備案,因此用com):

gem sources -a http://gems.ruby-china.com/
複製代碼

4.查看當前鏡像源:

gem source -l
複製代碼

5.刪除老的鏡像源:

gem source --remove https://ruby.taobao.org/
複製代碼

6.若是安裝或者升級的時候碰到權限不足的狀況,若是使用sudo後還遇到這個狀況:

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/bin directory. 複製代碼

使用以下命令解決:

gem update -n /usr/local/bin
複製代碼

若是安裝fastlane出錯出現如下加載插件錯誤問題:

Error loading RubyGems plugin "/Users/yuguo/.rvm/rubies/ruby-2.2.2/lib/ruby/gems/2.2.0/gems/executable-hooks-1.3.2/lib/rubygems_plugin.rb": dlopen(/Users/yuguo/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-darwin16/openssl.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /Users/yuguo/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-darwin16/openssl.bundle
Reason: image not found - /Users/yuguo/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/x86_64-darwin16/openssl.bundle (LoadError)
複製代碼

從新安裝最新Ruby版本:

curl -sSL https://get.rvm.io | bash -s stable
複製代碼

若是出現如下字眼,執行第一條:

Please do one of the following:
* 'rvm reload'
* open a new shell
* 'echo rvm_auto_reload_flag=1 >> ~/.rvmrc' # for auto reload with msg.
* 'echo rvm_auto_reload_flag=2 >> ~/.rvmrc' # for silent auto reload.
複製代碼
rvm reload
複製代碼

列出Ruby的可用的版本列表

rvm list known 

#版本隨本身選擇
rvm install 2.6 
#查看版本號,若是爲本身剛剛安裝的版本則成功安裝並應用最新版本
ruby -v
複製代碼

接着上面的更新操做執行一遍就能安裝fastlane了。

使用fastlane

  1. 安裝fastlane的過程,使用gem安裝,安裝命令爲:

    sudo gem install fastlane -NV -n /usr/local/bin
    複製代碼
  2. 本地打包的話,能夠在工程目錄執行 fastlane init 命令進行初始化後,能夠獲得Gemfile 、 fastlane/文件夾,若是使用的是sudo命令還會有一個 Gemfile.lock

  3. Gemfile文件配置以下:

    gem "fastlane"
    gem "cocoapods"` #當項目依賴了cocoapods管理第三方庫須要添加這行
    複製代碼
  4. fastlane/目錄下的Appfile和Fastfile兩個配置文件,其中Appfile的配置以下:

    app_identifier("com.xxx.xx.xxx") # 工程的Bundle id
    apple_id("xxxx@xx.com") # 蘋果帳號id,一般爲郵箱
    複製代碼
  5. Fastfile的配置以下:

    default_platform(:ios)  #申明打包平臺
            platform :ios do
            
                desc "這是一個任務的描述介紹"
                lane :AP_Debug do       #這是申明一個fastlane命令,其中名稱爲 AP_Debug
                gym(
            
                    scheme: "AutoPackage",      #項目的target 
                    #導出ipa包類型,共有五種方案,分別爲:app-store, ad-hoc, package, enterprise, development, developer-id
                    export_method:"ad-hoc",   
                    clean: true,                #打包前是否先clean一遍,通常打包前都是須要clean的
                    output_directory:"./build", #打包的ipa包存放目錄
                    output_name:"AutoPackage-Beta.ipa",  #打包的ipa包名
                    #workspace: "xxx.xcodeproj", #打包的項目名稱, xxx.xcodeproj 或者 xxx.xcworkspace
                    #slient: true, #是否不輸出日誌模式
                    #configuration: "Debug", #設置打包的類型
                    #buildlog_path: "xxx/xxx", #設置打包的日誌存放目錄
                    #codesigning_identity: "iPhone Developer xxx(xxx)", #設置當前打包模式的證書
                    #設置導出ipa的選項
                    export_options: {
                        #配置文件設置
                        provisioningProfiles: {
                        		#格式爲 bundle id => 配置文件名稱(不須要.mobileprovision後綴)
                            "com.xxx.xxx.xxx" => "xxx provision file name", 
                        }
                    }
                )
            end
            
            desc "這是一個新的項目"
            lane: xx_task_name do
            
            ......
            
            end
            
    end
    複製代碼

6.執行上面定義的方法:

fastlane AP_Debug
複製代碼

7.打包腳本須要導入當前電腦配置環境,能夠在終端執行:echo $PATH, 把環境配置複製在打包shell腳本包

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export PATH=[上述環境配置]

echo $WORKSPACE;
cd $WORKSPACE;
#判斷是否有fastlane配置文件
bundle exec fastlane fastfile_defined_name
複製代碼

後記

由於ipa打包必須依賴於xcodebuild,而xcodebuild依賴於Mac OS系統,要麼使用真機mac,要麼使用配置高的服務器裝虛擬機再裝蘋果系統。還有一些細節未填補,後續加上。

相關文章
相關標籤/搜索