はじめに
Xcodeでアプリを作る際、本番用アプリだけでなく開発用アプリも作ることがよくあると思います。
Xcodeでアプリをわける方法について記載します。(実際にこうやってるのを見たという紹介です)
開発環境
Xcode 10.2.1
Swift 5.0
要件
下記のような要件で本番、開発、ダミーの3つのアプリにわけます。
- 本番、開発、ダミーで別々のアプリにわけたい(bundle idをわけたい)
- 本番、開発、ダミーで接続先サーバをわけたい
- 本番、開発、ダミーでアプリ名をわけたい
- 本番、開発、ダミーでアプリアイコンをわけたい
※ 2.は本番→本番用サーバ、開発→開発用サーバ、ダミー→サーバ接続せずローカルのファイルを読み込むのような想定です。
完成図
方法
「やめて...」「べつにいいけど...」「おすすめ」の3つの方法を記載します。おすすめは最後のわけ方です。
やめて...
1つ目はGitのブランチでわける方法です。
Xcodeでわける方法といいつつこれはXcodeの機能を使いません。
手順
- gitのブランチをmaster(本番)、develop(開発)、dummy(ダミー)の3つにわける
- それぞれのブランチでbundle idを設定する
- それぞれのブランチで接続先サーバを設定する
- それぞれのブランチでアプリ名を設定する
- それぞれのブランチでアプリアイコンを設定する
これで要件通り3つのアプリにわけることができました!!簡単ですね!!
評価
この方法はやめて...
いったいだれがそのブランチを管理するんだい??今後環境が増えたらその都度ブランチを増やすのかい??
べつにいいけど...
2つ目はXcodeのTargetでわける方法です。
手順
- General→TARGETS→Duplicateでターゲットを複製する
var serverURL: String {
#if DEVELOP
// 開発用URL
return "https://example.com/piyoDev"
#elseif DUMMY
// ダミー用URL(ダミーはローカルのJSONファイル読み込む想定なので空文字でもOK)
return "https://example.com/piyoDummy"
#else
// 本番用URL
return "https://example.com/piyo"
#endif
}
多少手間がかかりましたがこれで要件通り3つのアプリにわけることができました!!
フラグの設定場所
手順の9.のフラグの追加場所ですがBuild Settingsにはフラグを設定できる場所が下記のようにいくつかあります。
- Apple Clang - Preprocessing → Preprocessor Macros
→ だめ。Objective-Cの遺産です。Swiftを使うならやめましょう。 - Swift Compiler - Custom Flags → Other Swift Flags
→ だめ。ちょっと古いやつ。書き方が多少めんどくさいです。 - Swift Compiler - Custom Flags → Active Compilation Conditions
→ ココ。ここに書きましょう。
評価
この方法はべつにいいけど...
同一プロジェクトで複数アプリを作成することができましたが...引き継ぐ人たちのことも考えてほしい。
ターゲットが複数あるとあるターゲットにだけファイルを追加し忘れることが稀によくあります。クラスファイルならまだビルド実行時に気づけますが、xibファイルなどの場合はその画面を表示するまで気付くのがなかなか難しいです。
例えばPiyoViewControllerでPiyoView.xibを読み込んでいた場合「本番アプリだけPiyo画面表示したらクラッシュすんねんけど?」のような悲劇が起こります。
おすすめ
3つ目はXcodeのConfigurationsでわける方法です。
手順
- Project→Info→ConfigurationsでDeugを複製する
var serverURL: String {
#if DEVELOP
// 開発用URL
return "https://example.com/piyoDev"
#elseif DUMMY
// ダミー用URL(ダミーはローカルのJSONファイル読み込む想定なので空文字でもOK)
return "https://example.com/piyoDummy"
#else
// 本番用URL
return "https://example.com/piyo"
#endif
}
これで要件通り3つのアプリにわけることができました!!(なぜか小さいアイコンが全部緑になったけどビルドしたらそれぞれ違うアイコンが表示されます)
評価
この方法がおすすめ!!
不必要にブランチを増やしたり、無駄にターゲットを増やす必要もなし!!管理も楽!!これがおすすめ!!
さいごに
タイトルにベストプラクティスと書きましたが1回使ってみたかっただけです。他にこんな方法があるよとかこの方法のがいいよとかあればぜひ教えてくださいmm