XcodeGenを基本から理解する

XcodeGenを基本から理解する

Table of Contents

Xcodeプロジェクト(.xcodeproj)のコンフリクトはストレスです。
でもXcodeGenでXcodeプロジェクトを生成することで、このストレスから解消できます。

XcodeGenとは?

XcodeGenとは、フォルダ構造とプロジェクト仕様ファイルからXcodeプロジェクトを構築するコマンドラインツールです。なおSwiftで作られてます。

XcodeGen Logo

プロジェクト仕様ファイル

YAMLまたはJSONで記述されており、次の項目を定義できます。

  • ターゲット
  • 構成
  • スキーム
  • カスタムビルド設定
  • その他オプション

フォルダ構造がそのままXcodeプロジェクトのディレクトリ構造に反映される仕組みとなってます。
またデフォルト値が用意されているので必要な部分だけをカスタマイズするだけで構築できます。

プロジェクト仕様ファイルの中身

例えば下記は、YAML形式のプロジェクト仕様ファイルです。

name: MyProject
options:
  bundleIdPrefix: com.myapp
packages:
  Yams:
    url: https://github.com/jpsim/Yams
    from: 2.0.0
targets:
  MyApp:
    type: application
    platform: iOS
    deploymentTarget: "10.0"
    sources: [MyApp]
    settings:
      configs:
        debug:
          CUSTOM_BUILD_SETTING: my_debug_value
        release:
          CUSTOM_BUILD_SETTING: my_release_value
    dependencies:
      - target: MyFramework
      - carthage: Alamofire
      - framework: Vendor/MyFramework.framework
      - sdk: Contacts.framework
      - sdk: libc++.tbd
      - package: Yams
  MyFramework:
    type: framework
    platform: iOS
    sources: [MyFramework]

XcodeGenはこのファイルを元にXcodeプロジェクトを生成します。
つまりこのファイルをGit管理するだけでXcodeプロジェクトをGit管理から外すことができます。

XcodeGenのメリットはコンフリクト解決のしやすさ

フォルダ構造とプロジェクト仕様ファイルに基づいてXcodeプロジェクトを生成するため、
ファイル管理等はXcodeプロジェクト(.xcodeproj)ではなくなりことで、
.xcodeprojをgit管理する必要がなくなり、マージ時の衝突がなくなります。

またxcoderpoj(xml)よりも読みやすいプロジェクト設定で管理することができるようになります。
なのでもしコンフリクトが発生しても通常のJSONやyml同様に衝突解決が容易になります。

XcodeGenの特徴は衝突解決だけじゃない

  • ビルド設定をグループという単位で管理するため、複数のターゲット間でビルド設定を共有できます。
  • スキームの増減管理も簡単に行えます。
  • CIなどからXcodeプロジェクトを構築できます。
  • プロジェクト仕様を複数ファイルに分散させて共有や上書きなどができます。
  • Carthage経由のフレームワークを統合できます。
  • 依存関係をGraphvizを使って図をエクスポートできます。

XcodeGenのインストール方法

必須条件

  • Xcode11

Mint

$ mint install yonaskolb/xcodegen

Homebrew

$ brew install xcodegen

利用方法

$ xcodegen generate

これを実行すると、カレントディレクトリ上でプロジェクト仕様ファイル(project.yml)を検索し、仕様に沿ったXcodeプロジェクトが作成されます。

一部オプションの説明

  • --spec: 検索するファイルパスを指定します。ファイルは.ymlまたは.jsonになります。デフォルトはproject.ymlです。
  • --project: 生成先のパス。デフォルトはプロジェクト仕様ファイルと同じディレクトリ。
  • --quiet: 通知と成功時の通知を表示しなくなります。
  • --use-cache: このオプションをつけて実行するとXcodeプロジェクト生成時にキャッシュファイルも生成し、次回以降不要であれば生成をスキップします。
  • --cache-path: --use-cacheで作成されるキャッシュファイルのパス指定。デフォルトは~/.xcodegen/cache/{PROJECT_SPEC_PATH_HASH}

その他オプションやコマンドに関しては$ xcodegen helpで確認できます。

初期プロジェクトをXcodeGenで生成してみる

XcodeGenの概要からインストールまでを説明しました。
実際にXcodeプロジェクト生成は、「XcodeGenで最低限のXcodeプロジェクトを生成する 」で説明してます。

このエントリーをはてなブックマークに追加