実際に使ってるfastlaneの個人的に便利なlane集

自分が使ってる個人的に便利なfastlaneのlaneをメモ代わりに残しておきます。
リリースする時のlaneはまだfastlane経由でリリースしてないので書けてません。
多分testflightと同じような感じかな。

```:バージョン等
Xcode 10.0
Build version 10A255
fastlane 2.107.0
```

# Fabricのbetaで配布
## 概要
1. リリースノートを書く（最後に改行して`end`と書くまで書き続けられる）
2. 通常のアイコンにBETAのアイコン付ける
3. アーカイブ
4. BETAのアイコンを変更したので元に戻すためgitをリセット
5. アップロード
6. Slackでチームに通知


```ruby:fastfile
    desc "Betaで配布します。"
    lane :beta do |options|
        scheme = "スキーム名"
        ipa_path = "アウトプット名.ipa"
        provisioning_profile = "プロビジョニングファイル名"
        bundle_identifier = "バンドルID"

        if options[:releaseNotes]
            releaseNotes = options[:releaseNotes]
        else
            releaseNotes = prompt(
                text: "リリースノートを記載して最後にend: ",
                multi_line_end_keyword: "\nend"
            )
        end

        # アイコンにBetaのバッヂを付ける
        add_badge(dark: true)
        gym(
            scheme: scheme,
            export_method: "ad-hoc",
            export_xcargs: "-allowProvisioningUpdates",
            export_options: { 
                provisioningProfiles: {
                  bundle_identifier => provisioning_profile
                }
            },
            output_name: ipa_path
        )

        # バッヂ付けたやつをリセット
        force_git_reset(file: 'パスは適時変えて/Assets.xcassets/AppIcon.appiconset/*')

        crashlytics(
            crashlytics_path: "./Pods/Crashlytics/submit",
            notes: "#{releaseNotes}\n#{Time.new.to_s}",
            groups: ['テスターのグループを適時指定して'],
            ipa_path: ipa_path
        )
        upload_symbols_to_crashlytics

        # betaに配布したことをslackチャンネルに通知
        slack(
            success: true,
            message: "新しく#{scheme}をアップロードしたので、確認しましょう。\n\n#{releaseNotes}",
            default_payloads: []
        )
    end
```

# gitのコミットしてPUSH
## 概要
gitの変更点をすべてコミットしてプッシュする。
バージョンとか上げたあと、コミットしてプッシュしたくなることが多いのでまとめてる。
直接使うことないので`private_lane`にしてる

```
    private_lane :commit_push do |options|
        git_commit(path: "./*", message: options[:message])
        push_to_git_remote
    end
```

# バージョンだけ上げる
## 概要
以下のように３つの種類で聞かれるので、数字か`major`などのアルファベットで答える。
それぞれ、各バージョン番号がインクリメントされる。

```
1. major
2. minor
3. patch
```

```
    desc "バージョンだけ上げます"
    lane :update_version do
        # 変更したあとコミット・プッシュするのでgitが汚れてないか確認
        ensure_git_status_clean
        bump_type = UI.select("どのバージョンを上げますか？: ", ["major", "minor", "patch"])
        increment_version_number(bump_type: bump_type)
        # 上で作ったprivate_lane
        commit_push(message: "バージョン更新：#{get_version_number(target: "スキーム名")}")
    end
```

# ビルド番号だけ上げる
```
    desc "ビルド番号だけ一つあげます"
    lane :increment_build do
        # 変更したあとコミット・プッシュするのでgitが汚れてないか確認
        ensure_git_status_clean
        increment_build_number
        # 上で作ったprivate_lane
        commit_push(message: "ビルド番号更新：#{get_build_number}")
    end
```

# TestFlightで配布
バージョンやビルド番号を上げるか確認されてテストフライトにアップロードします。

```
    desc "TestFlightにアップロードします。"
    lane :testflight do
        if prompt(text: "バージョンを上げますか？", boolean: true) 
            update_version
        end

        if prompt(text: "ビルド番号を上げますか？", boolean: true) 
            increment_build
        end

        build_app(
            workspace: "適時変更.xcworkspace", 
            scheme: "適時変更",
            export_options: { 
                provisioningProfiles: {
                  "バンドルID" => "プロビジョニングファイル名"
                }
            }
        )
        upload_to_testflight
    end
```



# 参考ページ
[slack - 公式](https://docs.fastlane.tools/actions/slack/)
[badge - 公式](https://docs.fastlane.tools/actions/badge/)
[fastlane で build/version number をインクリメントする](https://qiita.com/takecian/items/1b33c8dcb26db70e917e)
[Xcode 9 + fastlaneでもManualでipaを作る](https://qiita.com/nokono/items/733bb32bf7cc899fe79c)