🛠️

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

2021/11/04に公開

これは何

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

GitHub Actionsについて - GitHub ヘルプ

利用申請

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

https://github.com/features/actions

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

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

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

スクリーンショット 2019-08-29 21.56.10.png

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

スクリーンショット 2019-08-29 21.56.54.png

workflow を編集する画面が表示されるので下記の 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 のバージョン一覧はこちら

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

スクリーンショット 2019-08-29 23.24.51.png

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

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

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

CocoaPods や Carthage を使う

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

- name: CocoaPods
  run: pod install
- name: Carthage
  run: carthage bootstrap --platform iOS --cache-builds

のように利用できます。

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

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

リンク

Discussion