GitHub Actions で Xcode プロジェクトをビルドしてみる

## これは何

GitHub Actions で Xcode プロジェクトをビルドする方法のメモです。そもそも GitHub Actions って何よ？という方は下記サイトを御覧ください。

[GitHub Actionsについて \- GitHub ヘルプ](https://help.github.com/ja/articles/about-github-actions)

## 利用申請



~~GitHub Actions はまだベータ版であり、利用するには下記URLから申し込む必要があります。~~
現在はベータが外れています。下記URLからすぐに利用できます。

https://github.com/features/actions

~~何日か待つと「使えるようにしたよ〜」といった内容のメールがGitHubから届きます。~~



## とりあえずビルドしてみる

リポジトリのトップページに「Actions」タブが追加されているので「Set up Actions」をクリックしましょう。

![スクリーンショット 2019-08-29 21.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8292/6a59854a-3037-003b-f353-0e784067e58b.png)


スタートページが表示されます。ここでサンプルの workflow を動かすこともできますが、今回は右上の「Set up workflow youself」をクリックします。

![スクリーンショット 2019-08-29 21.56.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8292/d4d069a1-1838-8255-3496-3d1a045928e2.png)


workflow を編集する画面が表示されるので下記の yml を入力してください。

```yml
name: CI

on: [push] # git push をトリガーとする

jobs:
  build:

    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v1 # ソースコードをcheckout
    - name: Select Xcode version # Xcode 12.4 を使う
      run: sudo xcode-select -s '/Applications/Xcode_12.4.app/Contents/Developer'
    - name: Show Xcode version
      run: xcodebuild -version
    - name: Build # シミュレーター向けにビルド
      run: xcodebuild -sdk iphonesimulator -configuration Debug build 
```

※利用できる Xcode のバージョン一覧は[こちら](https://github.com/actions/virtual-environments/blob/main/images/macos/macos-11-Readme.md#xcode)

せっかくなので上記内容を適当なブランチに push してプルリクエストを作成してみましょう。「Checks」タブで workflow が動いていることが確認できます。

![スクリーンショット 2019-08-29 23.24.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8292/4a157603-653c-816c-bfb4-ab6664a6d62c.png)


これで Xcode プロジェクトをビルドできました！

この要領でテストを実行したり、IPAを書き出したりもできそうですね。

- [GitHub Actionsを使ってFirebase App Distributionへ配布する \- Lento con forza](https://kouki.hatenadiary.com/entry/2019/10/02/094358)

`xcodebuild` については下記サイトで丁寧に解説されています。

- [Xcodeでのビルドを自動化するxcodebuildコマンドとIPAファイルを作成してiTunes Connect\(Testflight\)に投げる方法 \- 酢ろぐ！](https://blog.ch3cooh.jp/entry/20150210/1423573065)

## CocoaPods や Carthage を使う

GitHub Actions の仮想環境にはすでに  CocoaPods や Carthage がインストールされているので

```yml
- name: CocoaPods
  run: pod install
```

```yml
- name: Carthage
  run: carthage bootstrap --platform iOS --cache-builds
```

のように利用できます。

* [GitHub Actions の仮想環境でのソフトウェア \- GitHub ヘルプ](https://github.com/actions/virtual-environments/blob/main/images/macos/macos-11-Readme.md)

**2019/11/20 追記：キャッシュも使えるようになりました**

* [actions/cache: Cache dependencies and build outputs in GitHub Actions](https://github.com/actions/cache)

```yml
    - name: Cache CocoaPods files
      uses: actions/cache@preview
      with:
        path: Pods
        key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
        restore-keys: |
          ${{ runner.os }}-pods-
```

```yml
    - name: Cache Carthage files
      uses: actions/cache@v1
      with:
        path: Carthage
        key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }}
        restore-keys: |
          ${{ runner.os }}-carthage-
```

# リンク

* [Configuring a workflow \- GitHub Help](https://help.github.com/en/articles/configuring-a-workflow)