Help us understand the problem. What is going on with this article?

【2019年版】チームが幸せなiOSプロジェクトの作り方

はじめに

チーム開発向けのプロジェクトキッティング

やりたいこと

チーム開発の時のコンフリクト絶対許さないプロジェクトの誕生を祝いたい

使うもの

  • XcodeGen
  • CocoaPods(Carthageの場合は臨機応変に)
  • xcconfig-extractor
  • MacOS 10.14.5 以上
  • Xcode 10.2 以上
  • .gitignore
  • SwiftLint

使用上の注意

※自己責任

下準備

1、XcodeGenのインストール

$ brew install xcodegen

# インスコ確認
$ xcodegen --help
Usage: xcodegen generate [options]

Generate an Xcode project from a spec
<以下、省略>

2、CocoaPodsのインストール

$ brew install cocoapods

# インスコ確認
$ pod --version
1.6.1(適宜)

3、xcconfig-extractorのインストール

brewで入れられなかったの悔しい

$ bash <(curl -sL https://raw.githubusercontent.com/toshi0383/scripts/master/swiftpm/install.sh) toshi0383/xcconfig-extractor

# バージョン確認
xcconfig-extractor --version
0.5.0

準備

1、xcodeで新規プロジェクト作る

2、swift5にアップ

Build Settings -> swiftで検索してSwift Language VersionをSwift 5にする

3、xcconfigの作成

commmand一発でやってくれるので楽チン

$ xcconfig-extractor {prj_dir}/{prj_name}.xcodeproj configs

4、project.ymlの作成

下記をコピってをエディタかなんかで自分のプロジェクト名に全置換
作成したらREADMEとかに置いてある階層に設置

project.yml
name: <project name>
fileGroups:
  - configs
configFiles:
  Debug: configs/Debug.xcconfig
  Release: configs/Release.xcconfig
targets:
  <project name>:
    type: application
    platform: iOS
    sources: <project name>
    configFiles:
      Debug: configs/<project name>-Debug.xcconfig
      Release: configs/<project name>-Release.xcconfig
    settings:
      CURRENT_PROJECT_VERSION: 1
    scheme:
      testTargets:
        - <project name>Tests
        - <project name>UITests
  <project name>Tests:
    type: bundle.unit-test
    platform: iOS
    sources: <project name>Tests
    configFiles:
      Debug: configs/<project name>Tests-Debug.xcconfig
      Release: configs/<project name>Tests-Release.xcconfig
    dependencies:
      - target: <project name>
  <project name>UITests:
    type: bundle.ui-testing
    platform: iOS
    sources: <project name>UITests
    configFiles:
      Debug: configs/<project name>UITests-Debug.xcconfig
      Release: configs/<project name>UITests-Release.xcconfig
    dependencies:
      - target: <project name>

5、xcodeprojファイルの作成

$ xcodegen

.gitignoreとの戦い編

1、.gitignore作成

gitignore.ioで作成する

今回使用したのはXcode、macOS、Swiftの3つ

エディタでファイル作ったらコピペ
プロジェクトディレクトリに置く

2、.gitignoreのカスタマイズ

75行目くらいのCocoaPodsのところ

 75 # CocoaPods
 76 # We recommend against adding the Pods directory to your .gitignore. However
 77 # you should judge for yourself, the pros and cons are mentioned at:
 78 # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
 79 # Pods/
 80 # Add this line if you want to avoid checking in source code from the Xcode workspace
 81 # *.xcworkspace

79行目、81行目の#を削除でこんにちわ

 75 # CocoaPods
 76 # We recommend against adding the Pods directory to your .gitignore. However
 77 # you should judge for yourself, the pros and cons are mentioned at:
 78 # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
 79 Pods/
 80 # Add this line if you want to avoid checking in source code from the Xcode workspace
 81 *.xcworkspace

116行目くらいのXcode Patchのところ

116 ### Xcode Patch ###
117 *.xcodeproj/*
118 !*.xcodeproj/project.pbxproj
119 !*.xcodeproj/xcshareddata/
120 !*.xcworkspace/contents.xcworkspacedata

119行目の!*.xcodeproj/project.pbxprojの!を削除

116 ### Xcode Patch ###
117 *.xcodeproj/*
118 *.xcodeproj/project.pbxproj
119 !*.xcodeproj/xcshareddata/
120 !*.xcworkspace/contents.xcworkspacedata

3、CocoaPodsをセットアップ

結構時間かかる

$ pod setup

4、Podfileを作成

プロジェクトディレクトリでチャカチャカターン!

$ pod init

5、Podfileを編集

  • 2行目のplatformのコメントアウト外してビルドターゲット入れないとxcodegen + pod installでエラー出る
  • 6行目のuse_frameworks!のコメントアウト外す
  • とりまSwiftLint入れる
  1 # Uncomment the next line to define a global platform for your project
  2 platform :ios, '12.0'
  3
  4 target '<project name>' do
  5   # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  6   use_frameworks!
  7
  8   # Pods for <project name>
  9   pod 'SwiftLint'
 10
 11   target '<project name>Tests' do
 12     inherit! :search_paths
 13     # Pods for testing
 14   end
 15
 16   target '<project name>UITests' do
 17     inherit! :search_paths
 18     # Pods for testing
 19   end
 20
 21 end

6、SwiftLint導入

$ pod install

# ここで以下が自動生成される

Podfile.lock
Pods/
.xcworkspace

7、Xcodeでビルド通るか確認する

ビルド通れば幸せでgit push
ビルド通ってなければ参考記事.gitignoreを後から適用する手順を使って頑張る

Podfile.lockは@mono0926さんの記事CocoaPods・Carthageでインストールした成果物はバージョン管理に含めるべきか?を読んで監視することにしました

git監視から外すのは以下3つ

  1. Pods/
  2. .xcworkspace
  3. [project name].xcodeproj/project.pbxproj

運用

ライブラリを追加する時<2019年8月16日追記>

<NGケース>

$ pod install
$ xcodegen

上記だとXcode上の設定が変わって大変な思いをしました
podでインストールしたはずのライブラリを認識してくれず Dyld Error が出まくりでストレスMAXになりました
【参考】:Library not loaded エラー?ここを見直そう

解決方法としてはxcodegenをしてからpod installをすると不幸が去って行きました
<OKケース>

$ xcodegen
$ pod install

これだけでチームが幸せ☺️

参考記事

Xcodegenを導入しました。
XcodeGenを導入してハマったこと

Alex_mht_code
マンハッタンコードのApplication Developerです。 主にスマートフォンアプリケーションサービスの開発やってます。 デザインとかテストとかチケットのモギりもやってます
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした