Xcode Cloudを個人開発で利用した感想 2022年11月版

Xcode Cloudを個人開発で利用した感想 2022年11月版
Photo by Hans Isaacson / Unsplash

開発環境

  • Xcode 14.1
  • macOS Monterey 12.6

はじめに

Xcode CloueはAppleが提供するAppleプラットフォームのためのCI/CDサービスです。

去年からBeta版として公開されていましたが、2022年にXcode Cloudがパブリックリリースされました。
CircleCIBitriseなどすでにCI/CDサービスがたくさんありますが、ついにApple自身がApple開発者のためのCI/CDサービスを提供したということで、個人開発に取り入れてみました。

結果からいうと、とても良かったです。
まだまだリリースしたばかりで、機能は最低限ですが、個人開発では十分です。
逆にチーム開発としては使いづらそうな印象を受けました。

この記事では、私が個人開発で利用した内容を共有したいと思います。
皆さんのXcode Cloud利用の参考になれば幸いです。

あくまで自分の経験や感想を中心に記載するので、Xcode Cloud自体の使い方の解説は少なめになると思います。

とりあえずの感想を列挙するとこんな感じです。

よかったこと

  • とにかく設定が楽
    • iOSでハマりがちな証明書周りの設定が自動でされるのがとにかく楽。
      • 他のCI/CDサービスでは時間が溶けがちですが、Xcode Cloudが自動でやってくれます
    • 証明書問題が解決するだけでも利用する価値ありです。
  • 無料で利用できる
    • 公式ページによると2023年12月までは一ヶ月25コンピューティング時間までは無料とのことです。
      • コンピューティング時間はタスクの実行に費やす時間の合計です。
        ----------2022-11-27-19.59.38
    • 他のCI/CDサービスではmacOSによるジョブ実行は料金が高い傾向がありますが、Xcode Cloudではある程度まで無料でビルドを回せるのがありがたいです。
    • 個人開発では一ヶ月25コンピューティング時間では十分そうです。

悪いこと、まだ制限がありそうなところ

  • ワークフローの設定はXcodeから操作して設定します。今のところGUIでの操作でしか設定ができなさそうです。
    • チーム開発ではGUIよりもfileで管理したほうがいいので、GUI操作オンリーなXcode Cloudはまだ導入が辛いかもしれません。
    • 一方CircleCIやBitriseはymlファイルでワークフローが管理できます。
  • アプリはApp Connectにつなげるのが前提
    • Xcode Cloudのデプロイは現状「Test Flightにサブミットする」という意味のようです。なのでCI/CDを回せるアプリはApp Connectに登録したAppが前提になります。
    • ストアには出さないけどCI/CDは試したいという用途の場合もApp Connectへの登録が必要のようです。

Xcode Cloudの使い方

いいところ、悪いところを列挙したところで私のXcode Cloudの使い方を少しお見せしたいと思います。

ワークフローの設定

なにはともあれ、まずはワークフローの設定が必要です。

Report NavigatorのCloudタブから設定ができます。
詳しくは公式ページを参照しましょう。
英語ですが、キャプチャつきでわかりやすく解説されているので参考になります。

ci_scripts

Gitのチェックアウトやビルド前、ビルド後のタイミングで独自のスクリプトを実行できます。
私はXcodeGenでプロジェクト管理を行い、ライブラリー管理をCarthageで行っています。
Gitチェックアウトのタイミングでこれらのツールのインストールが必要でした。

独自のスクリプトは次のドキュメントに記載されています。

独自のスクリプトを実行させたい場合、まずルートディレクトリにci_scriptsというディレクトリを作ります。
各タイミングごとに実行されるスクリプトは決められているので、それに対応するスクリプトファイルを作成します。
各スクリプトファイル名と対応するタイミングは次のとおりです。

  • ci_post_clone.sh

    • Xcode CloudがGitをクローンしたタイミングで実行されます。
    • 追加のツールをインストールする際に利用できます。
    • 私はXcodeGenやCarthageをインストールする際に利用しました。
  • ci_pre_xcodebuild.sh

    • Xcode Cloudがxcodebuildを実行する前、ビルドする前のタイミングで実行されます。
    • 追加のコンパイルオプションを指定するのに利用できます。
  • ci_post_xcodebuild.sh

    • Xcode Cloudがxcodebuildを実行した後、ビルドした後のタイミングで実行されます。
      • ビルドが失敗しても実行されます。
    • ビルドの成果物を外部にアップロードするのに利用できます。
  • Making dependencies available to Xcode Cloud

私のci_post_clone.sh

私はci_post_clone.shを次のように記載しました。

#!/bin/sh
set -e

brew install mint
brew install carthage
mint bootstrap -m ../Mintfile --overwrite y # ディレクトリ指定
carthage bootstrap --use-ssh --platform iOS --use-xcframeworks --cache-builds --project-directory ../ # ディレクトリ指定する
../scripts/generate-projects.sh .. # XcodeGenでプロジェクト生成するスクリプト

私はXcodeGenをMintで管理しているのでまずそれをインストールしています。

ポイントとしては実行時のカレントディレクトリがci_scriptsディレクトリ以下になるみたいなので、実行しても問題ないようにディレクトリ指定をする必要があることです。

GitHubのPR作ったらUnit Testを実行する

Xcode Cloudのジョブをスタートする条件は現状4つ指定できます。

  • ブランチのファイルが更新された時
  • プルリクエストのファイルが更新された時
  • タグのファイルが更新された時
  • 定期実行(cron)

----------2022-11-27-23.00.31

プルリクエストをスタートの条件にした場合、ソースブランチやターゲットブランチの条件や、どのファイルが変更されたら実行するかの条件を指定できます。

----------2022-11-27-23.08.48

GitHubのプルリクエストからは何もしなくてもXcode Cloudとの連携が表示されていました。

----------2022-11-27-23.13.28

まとめ

Xcode Cloudを個人開発に利用した感想をまとめてみました。
セッティングも特につまずくことなくでき、シンプルに使えて、個人的にはとても満足です。
一ヶ月25コンピューティング時間まで無料ということで、お財布にも優しくなっています。
個人開発するならXcode Cloudはピッタリのサービスだと思いました。

参考

宣伝

BOOTHより、同人版「Swift Concurrency入門」発売中です。
Swift Concurrencyを網羅的に学べ、さらに既存アプリへの適応方法も解説しています。
日本語で体系的に学べる解説本は他になかなかありません。
1章、2章が立ち読みできるおためし版もありますので、ぜひチェックしてください!



Swift Concurrency入門

https://personal-factory.booth.pm/items/3888109