これ見ればiOSアプリの環境構築に必要なツールの導入とプロジェクト毎のセットアップができます。 ※セットアップはプロジェクトのルートフォルダで作業することを想定。
- rbenv
- bundler
- carthage、cocoapods
- swiftlint
- swiftgen
- mergepbx
Rubyのバージョンを管理してくれるやつ。 (たいていは開発者全員でRubyのバージョンを揃えて開発に取り組む)
複数のRubyのバージョンを入れて、たとえばプロジェクトに合わせてバージョンを自由に変えることができる(MacOSに標準でインストールされているRubyではバージョンを選べない)。
具体的には… 特定のディレクトリ配下に特定のバージョンを適応するといった制限を掛けてくれる。それによって指定したディレクトリ(プロジェクト)外には影響を与えず、環境を隔離することができる。
rbenvとそのプラグインruby-buildをインストール。
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ mkdir -p ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
以下を .bash_profile に追記。
.bash_profile
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
変更内容をPCに反映
$ source ~/.bash_profile
正常にインストールできているか確認
$ rbenv --version
rbenv 0.0.0
$ rbenv local 0.0.0
gemパッケージ(Gemfileに書くやつ)の管理ツール。
例)cocoapods、fastlane...
bundlerのインストール
$ gem install bundler
rbenvをリフレッシュ
$ rbenv rehash
正常にインストールされたか確認
$ bundle -v
Bundler version 0.0.0
Gemfileを生成
$ bundler init
Gemfileにリスト化したgemを一括インストール
$ bundle install --path .bundle
※パス指定オプションを付けないとグローバルにインストールされてしまうので注意
ライブラリを管理するやつ。
- carthage:ライブラリを入れるのがcocoapodsよりちょっとめんどい(慣れれば簡単)。事前にGitからごっそりとってきてビルドするので、cocoapodsよりも毎回のビルド時間が短縮できる。ライブラリを入れるたびにupdateが必要(めっちゃ時間かかる…)。"カーセッジ"と呼ぶ人もいれば、"カルタゴ"と呼ぶ人もいる。
- cocoapods:ライブラリを入れるのが簡単。ビルドするたびにGitからライブラリをとってくるので、毎回のビルドにcarthageよりも時間がかかる。ライブラリを入れるたびにupdateが必要(時間かからない)
みたいな違いがある。
基本的にはcarthageで管理、carthageで配布されてないライブラリはcocoapodsで管理すると結構効率が良い。
carthageをインストール
$ brew install carthage
cocoapodsをインストール
$ gem install cocoapods
cocoapodsをセットアップ
$ pod setup
Cartfileを生成
$ touch Cartfile
Cartfileに必要なライブラリを記述してから、ビルド。
$ carthage bootstrap --platform iOS --no-use-binaries
Xcodeに反映 Xcodeのプロジェクトにビルドしたライブラリを導入する
Podfileを生成
$ pod init
Podfileに必要なライブラリを記述してから、ビルド。
$ bundle exec pod install
文法などのコードレビューを勝手にやってくれるやつ。 怪しいところとか、バグになりそうなところ、古いコードなど、ガンガン指摘してくれる。超便利。
※Homebrewで導入するとあとあと面倒なことの原因になったりするので、cocoapodsで入れることを推奨。
※SwiftLintの警告の内容がよくわからないって時はこちら → SwiftLintの全ルール集
Podfileに以下の文言を追加
pod 'SwiftLint'
cocoapodsをビルド
$ bundle exec pod install
Build Phasesに下記文言を追加してXcodeをビルド
Build Phases_Script
if which "${PODS_ROOT}/SwiftLint/swiftlint" >/dev/null; then
"${PODS_ROOT}/SwiftLint/swiftlint"
else
echo "SwiftLint does not exist, download from https://github.com/realm/SwiftLint"
fi
プロジェクト内のリソース管理を楽にしてくれます。 (コードから簡単に呼び出せるようになります)
参考:[SwiftGenとは] (https://qiita.com/usamik26/items/292ae8ab7cb491309932)
Podfileに以下の文言を追加
pod 'SwiftGen'
cocoapodsをビルド
$ bundle exec pod install
Build Phasesに下記を追加してXcodeをビルド
Build Phases_Script
$PODS_ROOT/SwiftGen/bin/swiftgen
Build Phases_Output Files
$(SRCROOT)/{プロジェクト名}/Resources/Generated/LocalizableStrings.swift
$(SRCROOT)/{プロジェクト名}/Resources/Generated/StoryboardScenes.swift
$(SRCROOT)/{プロジェクト名}/Resources/Generated/StoryboardSegues.swift
$(SRCROOT)/{プロジェクト名}/Resources/Generated/Assets.swift
swiftgen.ymlを追加
ib:
inputs: {プロジェクト名}/UserInterface
outputs:
- templateName: scenes-swift4
output: {プロジェクト名}/Resources/Generated/StoryboardScenes.swift
- templateName: segues-swift4
output: {プロジェクト名}/Resources/Generated/StoryboardSegues.swift
xcassets:
inputs:
- {プロジェクト名}/Resources/Assets.xcassets
outputs:
- templateName: swift4
output: {プロジェクト名}/Resources/Generated/Assets.swift
strings:
inputs: {プロジェクト名}/Resources/Strings/Localizable.strings
outputs:
templateName: structured-swift4
output: {プロジェクト名}/Resources/Generated/LocalizableStrings.swift
xcodeのプロジェクトファイル(XXX.xcodeproject)のコンフリクトが発生した時に、マージを簡単にしてくれる(といっても難しい)やつ。 複数人で開発してるとプロジェクトファイルが嫌になるほどコンフリクト起こすので、必須。
margepbxをインストール
$ git clone https://github.com/simonwagner/mergepbx
$ cd mergepbx/
$ ./build.py
$ sudo cp mergepbx /usr/local/bin/
.gitconfigに以下を追加
# driver for merging Xcode project files
[merge "mergepbx"]
name = XCode project files merger
driver = mergepbx %O %A %B
.gitattributesに以下を追加
*.pbxproj binary
*.pbxproj merge=mergepbx
- Periphery を追加