【iOS】史上最全的iOS持續集成教程 (上)


這個系列的博客分為上下兩篇,上篇介紹命令行工具使用,下篇介紹利用Jenkins進行持續化集成

在iOS的開發過程中總是免不了要不停的打包,通常的打包方式是這樣的

XCode->Archive->Export

期間還要選擇對應的證書與pp文件,進行一次打包會花不少的時間,在打包的過程中你啥都做不了,只能干等着。今天主要介紹利用命令行來解放你的雙手,讓你在打包的時候能夠釋放你的雙手。

今天分享的內容如下:

  1. xcodebuild指令介紹與使用
  2. 利用shell腳本打包
  3. fastlane介紹與使用

xcodebuild

xcodebuild 指令是蘋果官方提供的命令行打包工具,你可以使用此命令來進行clean、build、test、archive。

要查看官方的使用指南,可以通過命令 man xcodebuild來查看

project構建

要構建xcode項目需要在工程所在目錄運行xcodebuild指令,如果目錄中含有多個preoject的話,就需要使用-project指令來指定需要構建的工程。默認情況下xcodebuild會以工程里默認的configuration來build工程里的第一個target。

workspace構建

要構建workspce,需要設置-workspace與-scheme來定義構建,scheme用於指定要構建的targt以及怎樣構建,也可以傳遞其他參數對scheme進行覆蓋。

我們可以通過以下選項來查看工程中的環境

  • -list 查看當前工程的信息,如:target列表、configuration列表、scheme列表,同時能看到默認的configuration
  • -showBuildSettings 查看構建設置
  • -showdestinations 僅對workspace有效
  • -showsdks 查看SDK列表
  • -usage 使用示例
  • -version 查看當前版本

xcodebuild 所有指令默認的configuration都是Release

clean

#清理構建目錄 默認的configurationRelease
xcodebuild clean
#也可以指定configuration
xcodebuild clean -configuration Debug

build

### 默認構建
xcodebuild build
### 指定configuration
xcodebuild build -configuration Debug

test

test指令需要指定scheme, 同時還需要指定destination。 可以通過-showdestinations指令來獲取可用的destination

xcodebuild -showdestinations -scheme demo_xocdebuild
xcodebuild test -scheme demo_xocdebuild -destination "platform=iOS Simulator,name=iPhone 8"

archive

需要注意的archive時要指定scheme才行

#projectarchive
xcodebuild archive -scheme demo_xocdebuild -archivePath test

-exportArchive

此指令用於導出ipa包,必填參數archivePath、exportPath、exportOptionsPlist

### option.plist用於指定打包的method等,此文件可以通過用xcode打包后生成 xcodebuild -exportArchive -archivePath test.xcarchive -exportPath test -exportOptionsPlist 'ExportOptions.plist' 

利用shell腳本打包

shell腳本示例如下:

#!/bin/sh 
### 配置定義
PROJECT_NAME="test"

# 獲取當前腳本路徑
# basepath=$(cd `dirname $0`; pwd)

CONFIGURATION="Debug"

#工程名
WORKSPACE="demo.xcworkspace"

#設置打包路徑
PACKAGE_PATH="Package"

#archive path
XCARCHIVE_PATH="${PACKAGE_PATH}/xcarchive/${PROJECT_NAME}.xcarchive"

#ipa 路徑
IPA_Path="${PACKAGE_PATH}/ipa"

#ipa名稱
IPAFILE_NAME="${PROJECT_NAME}.ipa"

#導出ipa路徑
EXPORT_PATH="${IPA_Path}/${IPAFILE_NAME}"

optionPlistName="ExportOptions_development"

# clean
echo "xcodebuild clean"
xcodebuild clean -workspace ${WORKSPACE} \
             	   -scheme ${PROJECT_NAME} \
                 -configuration ${CONFIGURATION} \
                 | xcpretty 

# archive
echo "xcodebuild archive"
xcodebuild archive -workspace ${WORKSPACE} \
                   -scheme ${PROJECT_NAME} \
                   -configuration ${CONFIGURATION} \
                   -destination generic/platform=iOS \
                   -archivePath ${XCARCHIVE_PATH} \
                   | xcpretty 
                   

# test
xcodebuild  test -workspace ${WORKSPACE} \
                 -scheme ${PROJECT_NAME} \
                 -sdk iphonesimulator \
                 -destination 'platform=iOS Simulator,name=iPhone 8' \
                | xcpretty 

# export ipa
echo "xcodebuild exportArchive"
xcodebuild -exportArchive -archivePath ${XCARCHIVE_PATH} \
                          -exportPath ${EXPORT_PATH} \
                          -exportOptionsPlist ${optionPlistName}.plist \
                          -verbose \
                          | xcpretty 
                          


使用方式,將此腳本放到項目路徑下,然后執行即可

sh debug.sh 

fastlane 使用與介紹

什么是fastlane?

fastlane是可以自動打包iOS和Android項目的第三方工具,通過簡單的配置即可完成打包,還有的功能是實現屏幕截圖並上傳,上傳ipa到testflight,上傳ipa到app-store。

在這里我就只介紹iOS方面的使用了,首先需要安裝fastlane。

安裝fastlane

  1. 確定安裝了最新的xcode命令行工具
xcode-select --install
  1. 安裝fastlane
[sudo] gem install fastlane -NV

使用fastlane

和xcodebuild的使用方式一樣,fastlane也需要在項目所有路徑使用。首先我們在命令行進入到項目路徑,然后初始化fastlane。以下介紹都是基於使用XCode自動創建了證書的情況下來使用,因為這樣fastlane自動生成的pp文件才能匹配,否則就需要在gym中顯示的指定pp文件。

fastlane init -verbose

初始化后,就可以變成fastlane命令了 示例如下

default_platform(:ios)

platform :ios do
  desc "Description of what the lane does"
  lane :test do
  	scan(
      # workspace: "FinupCredit.xcworkspace",
      # scheme: "test",
      devices: ["iPhone 8 Plus"],
    )
	 end

  lane :beta do |values|
    scan(
      # workspace: "FinupCredit.xcworkspace",
      devices: ["iPhone 8 Plus"],
    )
  	v = values[:i]
  	time = Time.new.strftime("%Y%m%d")
  	version = get_version_number
  	ipaName = "debug_#{version}_#{time}_V_#{v}.ipa"
    gym(
  	  clean: true,
	  configuration: "Debug",
	  export_method: "development",
	  output_directory: "./Debug",
	  output_name:  "#{ipaName}",
	)
	end

	lane :release do |values|
    scan(
      # workspace: "FinupCredit.xcworkspace",
      devices: ["iPhone 8 Plus"],
    )
  	v = values[:i]
  	time = Time.new.strftime("%Y%m%d")
  	version = get_version_number
  	ipaName = "release_#{version}_#{time}_V_#{v}.ipa"
    gym(
  	  clean: true,
	  configuration: "Release",
	  export_method: "app-store",
	  output_directory: "./Release",
	  output_name:  "#{ipaName}",
	)
	end
end

在這里scan和gym分別是fastlane提供的兩個action,scan的作用是執行項目中的單元測試,gym則是用來打包的。在這個腳本中我們允許傳入變量,用來生成ipa名稱。

gym中的。。。也可以指定plist文件,使用方式如下

desc "使用opetionPlist來指定打包配置"
	lane :useOptionPlist do |values|
    scan(
      # workspace: "FinupCredit.xcworkspace",
      devices: ["iPhone 8 Plus"],
    )
  	v = values[:i]
  	time = Time.new.strftime("%Y%m%d")
  	version = get_version_number
  	ipaName = "debug_#{version}_#{time}_V_#{v}.ipa"
    gym(
  	  clean: true,
	  configuration: "Release",
	  export_method: "development",
	  output_directory: "./Release",
	  output_name:  "#{ipaName}",
	  #指定plist路徑
	  export_options: "./ExportOptions_app_store.plist" 
	)
	end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM