Xcode
iOS
CircleCI

iOSプロジェクトのCircleCI 2.0設定例

iOSプロジェクトのCircleCI 2.0対応を行ったので、その内容を共有します。
オフィシャルのドキュメントが結構充実していて、これらを参考にしてymlを作りました。

またサンプルリポジトリも提供されています。

CircleCI 2.0では、 circle.yml の代わりにルートフォルダに .circleci/config.yml を作成します。

circleci/config.yml
version: 2
jobs:
  # ユニットテスト
  build-and-test:
    macos:
      xcode: "9.0"
    working_directory: /Users/distiller/output
    steps:
      - checkout
      - run:
          name: Run tests
          command: fastlane scan
          environment:
            # ユニットテストで使用するシミュレータ端末とshemeを指定
            SCAN_DEVICE: iPhone 8
            SCAN_SCHEME: <スキーム名>

      # ユニットテストの結果を保存
      - store_test_results:
          path: test_output/report.xml
      - store_artifacts:
          path: /tmp/test-results
          destination: scan-test-results
      - store_artifacts:
          path: ~/Library/Logs/scan
          destination: scan-logs

  # Beta配信
  beta-deployment:
    macos:
      xcode: "9.0"
    # Rubyのバージョンを指定するためにログインシェルを設定 
    shell: /bin/bash --login -eo pipefail
    working_directory: /Users/distiller/output
    steps:
      - checkout
      - run:
          # match でSSLのエラーを回避するためにruby2.4を使用
          name: Set Ruby Version
          command:  echo "ruby-2.4" > ~/.ruby-version
      # Gemのキャッシュを読み出す
      - restore_cache:
          key: 1-gems-{{ checksum "Gemfile.lock" }}
      - run: bundle check || bundle install --path vendor/bundle
      # Gemのキャッシュを保存
      - save_cache:
          key: 1-gems-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle
      # badge に必要
      - run: brew install imagemagick
      - run: brew install graphicsmagick
      # Beta配信
      # 弊社では beta コマンドの中で match, badge, gym をまとめて実行している
      - run: bundle exec fastlane beta
      # artifactsとして保存するファイルを明示
      - store_artifacts:
          path: <スキーム名>.app.dSYM.zip
      - store_artifacts:
          path: <スキーム名>.ipa

  # iTunes Connectへのアップロード
  release:
    macos:
      xcode: "9.0"
    shell: /bin/bash --login -eo pipefail
    working_directory: /Users/distiller/output
    steps:
      - checkout
      - run:
          name: Set Ruby Version
          command:  echo "ruby-2.4" > ~/.ruby-version
      - run: bundle install --path vendor/bundle
      - run: bundle exec fastlane release --verbose

workflows:
  version: 2
  build_test_deployment:
    jobs:
      - build-and-test
      - beta-deployment:
          filters:
            branches:
              # master ブランチのみで、このジョブを実行
              only: master
          requires:
            # このジョブを実行するためには、以下のジョブをパスしている必要がある
                        # 並列でジョブを実行したければ、この設定は削除すること
            - build-and-test
  release:
    jobs:
      - release:
          filters:
            branches:
              # 正規表現でこのジョブを実行できるブランチを指定する
              only: /release.*/

暫定版ですが、どなたかの役に立てば幸いです。