iOSでは、Fastlaneを使って自動化したパッケージ化とリリースを実現します。


概要
FastlaneはRubyを使って書かれた自動化ツールセットで、iOSとAndroidの自動化パッケージ、リリースなどの作業に使われています。時間を節約できます。
Github:https://github.com/fastlane/fastlane
公式サイト:https://fastlane.tools/
ドキュメント:https://docs.fastlane.tools/
インストール
1、まず正しいRubyバージョンをインストールします。端末ウィンドウで下記のコマンドで確認します。

ruby -v
2、Xcodeコマンドラインツールがインストールされているかを確認します。ターミナルウィンドウにコマンドを入力します。

xcode-select --install
もしインストールしていないならば、端末はインストールを始めることができて、もしエラーを申し込むならば:command line tools are already installed、use“Software Update”to install udates.はすでにインストールしたことを代表します。
3、以上の依存配置ができたらルビーゲットでインストールできます。

$ sudo gem install fastlane
安心して待ってください。fastlaneはインストールされました。
初期化
端末を開けて、cdはプロジェクトディレクトリに行き、その後fastlane initを実行します。

$ cd to/your/ios/project 
$ fastlane init
[14:21:43]: Detected iOS/Mac project in current directory...
[14:21:43]: This setup will help you get up and running in no time.
[14:21:43]: fastlane will check what tools you're already using and set up
[14:21:43]: the tool automatically for you. Have fun! 
[14:21:43]: Created new folder './fastlane'.
[14:21:43]: $ xcodebuild -showBuildSettings -project ./xxx.xcodeproj
[14:21:48]: Your Apple ID (e.g. [email protected]): [email protected]
[14:21:54]: Verifying that app is available on the Apple Developer Portal and iTunes Connect...
[14:21:54]: Starting login with user '[email protected]'
+----------------+--------------------------------------+
|          Detected Values          |
+----------------+--------------------------------------+
| Apple ID    | [email protected]          |
| App Name    | xxx              |
| App Identifier | com.xxx.xxx        |
| Project    | /Users/lisong/Desktop/xxx/x |
|        | xx.xcodeproj           |
+----------------+--------------------------------------+
[14:22:06]: Please confirm the above values (y/n)
y
[14:22:09]: Created new file './fastlane/Appfile'. Edit it to manage your preferred app metadata information.
[14:22:09]: Loading up 'deliver', this might take a few seconds
[14:22:09]: Login to iTunes Connect ([email protected])
[14:22:13]: Login successful
+-----------------------+------------------------+
|       deliver 2.30.1 Summary       |
+-----------------------+------------------------+
| screenshots_path   | ./fastlane/screenshots |
| metadata_path     | ./fastlane/metadata  |
| username       | [email protected]   |
| app_identifier    | com.xxx.xxx |
| edit_live       | false         |
| platform       | ios          |
| skip_binary_upload  | false         |
| skip_screenshots   | false         |
| skip_metadata     | false         |
| force         | false         |
| submit_for_review   | false         |
| automatic_release   | false         |
| dev_portal_team_id  | WKR87TTKML       |
| overwrite_screenshots | false         |
+-----------------------+------------------------+
[14:22:21]: Writing to 'fastlane/metadata/zh-Hans/description.txt'
...
[14:22:21]: Writing to 'fastlane/metadata/review_information/notes.txt'
[14:22:21]: Successfully created new configuration files.
[14:22:22]: Successfully downloaded large app icon
[14:22:22]: Downloading all existing screenshots...
[14:22:27]: Downloading existing screenshot '1_iphone4_1.1.jpg' for language 'zh-Hans'
・・・
[14:22:34]: Downloading existing screenshot '5_iphone6_5.5.jpg' for language 'zh-Hans'
[14:22:34]: Successfully downloaded all existing screenshots
[14:22:34]: Successfully created new Deliverfile at path 'fastlane/Deliverfile'
[14:22:34]: $ xcodebuild -list -project ./xxx.xcodeproj
[14:22:35]: 'snapshot' not enabled.
[14:22:35]: 'cocoapods' enabled.
[14:22:35]: 'carthage' not enabled.
[14:22:35]: Created new file './fastlane/Fastfile'. Edit it to manage your own deployment lanes.
[14:22:35]: fastlane will collect the number of errors for each action to detect integration issues
[14:22:35]: No sensitive/private information will be uploaded
[14:22:35]: Learn more at https://github.com/fastlane/fastlane#metrics
[14:22:35]: Successfully finished setting up fastlane
「Your Apple ID」にアップル開発者のアカウントを入力します。「Please confirm the above values」では、メッセージを確認し、問題なく入力します。その後、fastlaneはApp Store上のメタデータのダウンロードとスクリーンショットファイルのダウンロードを含む一連の初期化動作を行います。
初期化が完了すると、プロジェクトディレクトリにfastlaneディレクトリが追加されます。その内容は以下の通りです。
二つの主要なアプリとFastfileを見に来ました。
Appfile
アプリfileはアプリを保存します。identifer,apple_idとチーム_id詳細を知るには、フォーマットはこうです。

app_identifier "com.xxx.xxx" # app bundle identifier
apple_id "[email protected]" #   Apple ID
team_id "XXXXXXXXXX" # Team ID
laneごとに異なるアプリを提供してもいいです。identifer,apple_idとチーム_id、例えば:

app_identifier "com.aaa.aaa"
apple_id "[email protected]"
team_id "AAAAAAAAAA"

for_lane :inhouse do
 app_identifier "com.bbb.bbb"
 apple_id "[email protected]"
 team_id "AAAAAAAAAA"
end
ここでは、Fastfileで定義されている、inhouseのための独自の情報を設定します。
Fastfile
Fastfileはあなたが作成したlaneを管理しています。詳しい情報を知ることができます。フォーマットはこのようです。

・・・
#     fastlane   
# update_fastlane
#   fastlane     ,                ,                
fastlane_version "2.30.1"
#        ios,              
default_platform :ios
platform :ios do
 before_all do
  # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
  cocoapods
 end
 desc "Runs all the tests"
 lane :test do
  scan
 end
 desc "      Beta    Apple TestFlight"
 desc "This will also make sure the profile is up to date"
 lane :beta do
  # match(type: "appstore") # more information: https://codesigning.guide
  gym(scheme: "Docment") # Build your app - more options available
  pilot
  # sh "your_script.sh"
 end
 desc "        App Store"
 lane :release do
  # match(type: "appstore")
  # snapshot
  gym(scheme: "Docment") # Build your app - more options available
  deliver(force: true)
  # frameit
 end
 #         lane
 #  lane      
 after_all do |lane|
  # slack(
  #  message: "Successfully deployed new App Update."
  # )
 end
 #                
 error do |lane, exception|
  # slack(
  #  message: exception.message,
  #  success: false
  # )
 end
end

            lane:

 desc "   "
 lane :inHouse do
 gym(scheme: "XXX",
   export_method:"enterprise",
   output_directory "./build", #      ipa        
   output_name "XXX" # ipa    
  )
 end
一つのlaneは一つの任務です。中は一つずつのactionからなるワークフローです。
現在サポートされているツールを利用して、自動化と持続可能な構築を含むあらゆる一環を行うことができます。例えば、
scan自動化テストツールは、Unit Testをよく封入しました。
sigh針はiOSプロジェクト開発証明書とProvision fileに対するダウンロードツールです。
tch同期チームの一人一人の証明書とProvision fileの素晴らしいツール
gymピンはiOSに対してコンパイルしてipadファイルを生成します。
deliverはアプリケーションのバイナリコードをアップロードします。スクリーンショットとメタデータをアプリアプリでApp Storeに送ります。
snapshotは自動的にiOSを各設備に適用することができます。
実行
ランを定義したらどうやって実行しますか?端末を開けて、プロジェクトのルートディレクトリに切り替えます。fastlane'nameを実行すればいいです。成功したら相応の経路でiPadファイルを作成します。エラーが発生したらエラー情報に基づいて文書をよく確認してください。
その他
1、ここは公式提供のいくつかの例です。
2、fastlaneコマンドを知りたいなら、$fastlane Chelpを実行できます。
3、利用可能なタスクのリストを見て、コマンドを実行できます。
4、fastlaneも多くのプラグインを提供しています。例えば、pgyer(appから蒲公英まで)を使いやすいです。私達もカバンを作り終わって直接にタンポポに伝わることができます。具体的にはタンポポの提供した文書を見ることができます。
一部のプラグインが自分の状況に合わないと感じたら、プラグインをカスタマイズすることもできます。
5、複数のlaneは実際に相互に呼び出すことができます。これはとても実用的です。たとえば:

default_platform :ios
platform :ios do
 lane :prepare do
  cocoapods
  match
 end
 desc 'fastlane build'  'fastlane build type:adhoc'
 lane :build do |options|
  #       prepare   
  prepare
  case options[:type]
  when 'adhoc'
   adhoc
  else
   appstore
  end
 end
 lane : adhoc do
 ・・・
 end
 lane : appstore do
 ・・・
 end
end
私たちはFastfileファイルに関数を追加してversion番号とbuild番号を設定できます。
default_plotform:ios

def prepare_version(options)
  increment_version_number(
    version_number: options[:version]
  )
  increment_build_number(
    build_number: options[:build]
  )
end
そして、この関数は一つのlaneで使用できます。

lane :appstore do |options|
  ・・・
  prepare_version(options)
  ・・・
end
このlaneを実行する時:

$ fastlane appstore version:2.4.0 build:2.0
はい、ここまで話しましょう。Fastlaneでできることはまだたくさんあります。文書をよく見て、高級な使い方を研究してみてください。