Xcodegenのサンプル

Xcodegenを導入しようとしたけどサンプルが少なくて手間取りました
自分が同僚に教えてもらいながら作ったものを載せておきます

同僚には大感謝

## 注意
真似する場合は自己責任でお願いします

間違い含めて気づいた点あればむしろコメントで教えてほしいです

## 前提

Xcode:10.3
Swift:5.0

Xcodeプロジェクト作成からSchemeとBuildConfigurations(Debug・Develop・Staging・Release)追加・Swiftlint導入、Xcodegen導入までの話なので、ライブラリのインストールはまだしてないです

## サンプル

プロジェクト名と.pbxprojを自身の環境用に変更してもらえれば問題ないはず

```project.yml


name: プロジェクト名
configs:
  Debug: debug
  Develop: develop
  Staging: staging
  Release: release
options:
  deploymentTarget:
    iOS: "11.0"
settings:
  base:
    SWIFT_VERSION: 5.0
    PRODUCT_NAME: $TARGET_NAME
    CURRENT_PROJECT_VERSION: 1
schemes:
  プロジェクト名:
    build:
      targets:
        プロジェクト名: all
        プロジェクト名Tests: [test]
        プロジェクト名UITests: [test]
    run:
      config: Debug
    test:
      config: Debug
    profile: 
      config: Develop
    analyze:
      config: Develop
    archive: 
      config: Develop
  プロジェクト名-staging:
    build:
      targets:
        プロジェクト名: all
    run:
      config: Debug
    test:
      config: Debug
    profile: 
      config: Staging
    analyze:
      config: Debug
    archive: 
      config: Staging
  プロジェクト名-store:
    build:
      targets:
        プロジェクト名: all
    run:
      config: Debug
    test:
      config: Debug
    profile: 
      config: Release
    analyze:
      config: Debug
    archive: 
      config: Release
targets:
  プロジェクト名:
    type: application
    platform: iOS
    sources: 
      プロジェクト名
    settings:
       CODE_SIGN_STYLE: Manual
       INFOPLIST_FILE: プロジェクト名/Info.plist
    configs:
      Debug:
        SWIFT_ACTIVE_COMPILATION_CONDITIONS: DEBUG
        CODE_SIGN_IDENTITY: iPhone Developer
        DEVELOPMENT_TEAM: .pbxproj参照
        PRODUCT_BUNDLE_IDENTIFIER: .pbxproj参照
        PRODUCT_NAME: $TARGET_NAME
        PROVISIONING_PROFILE_SPECIFIER: .pbxproj参照
      Develop:
        SWIFT_ACTIVE_COMPILATION_CONDITIONS: DEVELOP
        CODE_SIGN_IDENTITY: iPhone Distribution
        DEVELOPMENT_TEAM: .pbxproj参照
        PRODUCT_BUNDLE_IDENTIFIER: .pbxproj参照
        PRODUCT_NAME: $TARGET_NAME
        PROVISIONING_PROFILE_SPECIFIER: .pbxproj参照
      Staging:
        SWIFT_ACTIVE_COMPILATION_CONDITIONS: STAGING
        CODE_SIGN_IDENTITY: iPhone Distribution
        DEVELOPMENT_TEAM: .pbxproj参照
        PRODUCT_BUNDLE_IDENTIFIER: .pbxproj参照
        PRODUCT_NAME: $TARGET_NAME
        PROVISIONING_PROFILE_SPECIFIER: .pbxproj参照
      Release:
        SWIFT_ACTIVE_COMPILATION_CONDITIONS: RELEASE
        CODE_SIGN_IDENTITY: iPhone Developer
        PRODUCT_BUNDLE_IDENTIFIER: .pbxproj参照
        PRODUCT_NAME: $TARGET_NAME
        PROVISIONING_PROFILE_SPECIFIER: .pbxproj参照
    scheme:
      testTargets:
        - プロジェクト名Tests
        - プロジェクト名UITests
    prebuildScripts:
      - name: Run SwiftLint
        script: | 
                if which swiftlint >/dev/null; then
                swiftlint autocorrect --format
                swiftlint
                else
                echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
                fi 
  プロジェクト名Tests:
    type: bundle.unit-test
    platform: iOS
    sources: プロジェクト名Tests
    dependencies:
      - target: プロジェクト名
  プロジェクト名UITests:
    type: bundle.ui-testing
    platform: iOS
    sources: プロジェクト名UITests
    dependencies:
      - target: プロジェクト名

```


## 追記
これだとscheme「プロジェクト名」のProfile・ReleaseのConfigurationがそれぞれ本来DevelopになってほしいはずがReleaseになっていたので

```
scheme:
      testTargets:
        - プロジェクト名Tests
        - プロジェクト名UITests

```
の箇所をまるごとごっそり削除してあげたら期待どおりの設定になりました

この後はまだ確認できてないです
使用する中でなにか不備が発生するかもしれませんので
最初にもかいた通り使用する場合は自己責任でおねがいします
また時間があったらXcodegen試してわかったことを載せていきます