XCodeGenを導入してみた
XcodeGen
Xcodeでチーム開発をすると、*.xcodeproj
でコンフリクトが度々起こりコンフリクトを修正する機会が多くあります。
iOS開発者なら、誰しもが歩ん道だと思います。
*.xcodeproj
は、ソースファイルの管理を行なっておりファイルの追加や削除をするとこのファイルが更新されます。
大規模になればなるほど、このファイルはコンフリクトする可能性が高まります。
また、大規模開発ではマルチモジュール化により大規模な改修が見込まれます。
その際、ファイル移動は必須であり*.xcodeproj
がコンフリクトする可能性は高いです。
ベンチャー企業でも下記のような問題は起こってくると考えています。
- プログラミングに慣れていない人がいるため、コンフリクトを比較的起こしたくない
- プロジェクトが始まってまもないためファイル生成する機会が多い
ですので、XcodeGenの仕組みについて理解しておく必要があると思っています。
導入
XcodeGenは、Swiftで記述されたコマンドラインツールでXcodeのプロジェクトデータをYamlで定義する事で*.xcodeproj
を生成してくれます。
プロジェクトの仕様は、ターゲット、構成、スキーム、カスタムビルド設定、その他カスタマイズしていく事で生成が可能です。
https://github.com/yonaskolb/XcodeGen
では、実際に作ったYamlファイルを見ていきます。
name: proj-name options: bundleIdPrefix: com.proj-name targets: proj-name: type: application platform: iOS deploymentTarget: "11.0" sources: [proj-name] settings: MARKETING_VERSION: 1.0.0 schemes: proj-name: testTargetName: proj-nameTests dependencies: - carthage: RxCocoa - carthage: RxRelay - carthage: RxSwift - carthage: Action - carthage: RxOptional - carthage: Swinject - carthage: DifferenceKit - carthage: KeychainAccess - carthage: SVProgressHUD preBuildScripts: - path: /bin/sh name: Run R.swift inputFiles: - $TEMP_DIR/rswift-lastrun outputFiles: - $SRCROOT/$PROJECT_NAME/R.generated.swift script: | "Pods/R.swift/rswift" generate "$SRCROOT/testProject/R.generated.swift" proj-nameTests: type: bundle.unit-test platform: iOS deploymentTarget: "11.0" sources: [proj-nameTests] dependencies: - target: proj-name - carthage: RxBlocking - carthage: RxTest
実装は、このようになりました。
ほとんど、ReadMeに書いてあるままで生成出来ました。
settings: MARKETING_VERSION: 1.0.0
こちら、Build Settingでエラーが起こったためこの設定を入れました。
R.swiftをよく使うのですが、BuildScriptsで、普段の導入時に指定している内容を書くだけでR .swiftの導入も可能でした。
今後、Xcodeの設定も日々複雑になると思うので悪戦苦闘しながらこの辺り学んでいきたいと思います。
今後したいこと
XcodeGenをMintで、管理したいと思っています。 他には、Xcode Genのようなコマンドラインを作ってみるのも面白そうだと書きながら感じました。
記事としては、Makefileも同時に作成したのでそれを書いていきます。