7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

豊田高専コンピュータ部Advent Calendar 2019

Day 1

XcodeGenを使うとチーム開発が楽になる話

Posted at

この記事は豊田高専コンピュータ部アドベントカレンダー1日目の記事です

XcodeGenとは

iOSアプリ開発で複数人での開発をすると色々とつらいことがあるのでそのつらいことをなるべく無くそうという感じのツールです。具体的にはプロジェクトへのファイルの追加など行うとプロジェクトファイルが書き換わるのですが、そのプロジェクトファイルは人間におおよそ理解のできない形式で書かれており、チーム開発をしているとそれが恐ろしいコンフリクトを生み、その解消がとてもつらいという問題があります。そのプロジェクトファイルをコード(yaml)から生成することでチーム開発をやりやすくしようという感じのツールになります。
https://github.com/yonaskolb/XcodeGen

触ってみる

なにはともあれ百聞は一見にしかずなので触ってみましょう。まずはXcodeGenをインストールします

$ brew install xcodegen

XcodeGenを入れられたら次はXcodeのプロジェクトを作成します。プロジェクト名は今回は「SampleGen」とします。プロジェクトの作成手順は今回は割愛します。

プロジェクトを作成できたらプロジェクトファイルの内容をproject.ymlに書き起こしていきます。

project.yml
# プロジェクト構成・設定
name: SampleGen
configs:
  Debug: debug
  Release: release
options:
  groupSortPosition: top
attributes:
  ORGANIZATIONNAME: ymgn
fileGroups:
 - SampleGen
 - SampleGenTests

# ターゲット
targets:
  SampleGen:
    type: application
    platform: iOS
    sources:
      - path: SampleGen
    settings:
      base:
        PRODUCT_BUNDLE_IDENTIFIER: ymgn.SampleGen
        ASSETCATALOG_COMPIER_APPICON_NAME: AppIcon
        INFOPLIST_FILE: SampleGen/Info.plist
      configs:
        Debug:
          GCC_OPTIMIZATION_LEVEL: O
        Release:
          GCC_OPTIMIZATION_LEVEL: s
  SampleGenTests:
    type: bundle.unit-test
    platform: iOS
    dependencies:
      - target: SampleGen
    settings:
      TEST_HOSTS: $(BUILT_PRODUCTS_DIR)/SampleGen.app/SampleGen
      INFORPLSIT_FILE: SampleGenTests/Info.plist
    sources:
      - SampleGenTests

# スキーム
schemes:
  SampleGen:
    build:
      targets:
        SampleGen: all
    run:
      config: Debug
    test:
      config: Debug
      gatherCoverageData: true
      targets:
        - SampleGenTests
    profile:
      config: Release
    analyze:
      config: Debug
    archive:
      config: Release

要素一つ一つを説明するのはつらいのでXcodeGenのリポジトリにあるドキュメントを参照してもらうとして、プロジェクトファイルの項目に対応した要素が存在します。プロジェクトファイルからyamlへの書き起こしは手で書きましたが、自動で書き起こしてくれる方法などあればぜひコメントで教えてください。

project.ymlはプロジェクトファイルと同じ階層に配置し、プロジェクトに追加する必要はありません。
project.ymlが出来上がったらプロジェクトファイルは削除しても構いませんが、写しミスがあった場合悲しいので残しておくとよいでしょう。
project.ymlがあるディレクトリで


$ xcodegen generate

を実行するとプロジェクトファイルを生成します。既存のプロジェクトファイルがある場合は書き換えられます。

最低限の実装になっているのでそのままビルドするとおそらくSigningでエラーが出ると思いますので、Teamは手動で追加してもらうとエラーは消えるはずです。

これで一通りの導入は終了です。

まとめ

上記では手順だけ示したのであまり恩恵がわからないかもしれませんが、targetの追加や、ライブラリ、Embeded Frameworkの追加などもproject.ymlで記述できるのでコマンド一発でどの環境でもコンフリクトのない状態のプロジェクトファイルが生成されます。実際に使用する際はプロジェクトファイルは.gitignoreなどで管理には含めないようにすることに注意してください。
もっと詳しく知りたい場合はXcodeGenのリポジトリや他記事を参照してもらえると多くの設定が利用できたり、設定ファイルを分割できたりすることがわかると思います。iOSアプリのチーム開発で困っている人はぜひ試してみてください。

おまけ

XcodeGenを使ったプロジェクトをBitriseなどのCI/CDツールに載せるとプロジェクトファイルが存在しないため、validationが通らなくて焦るかもしれません。しかし、最初のvalidationが通らなくてもPROJECT_PATHには単に生成される.xcodeproj(もしくは.xcworkspace)のファイル名を入力して、workfrowにXcodeGenをビルド前に実行するようにすればビルドできるようになります。

スクリーンショット 2019-12-01 16.23.10.png

Bitriseであればこのようにxcodegenのコマンドを使用するためのユーティリティが存在します。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?