質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

1回答

1843閲覧

XcodeでGradleのProduct Flavour的なパラメータを参照させたい

f97one

総合スコア29

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2016/08/24 11:26

###前提・実現したいこと
はじめまして。

僕は普段AndroidやWindows Forms相手のお仕事をしている者ですが、このほど「数年前に書かれたiOSアプリ改修」のお仕事をやることになりました。
既存アプリの改修ということでソースを眺めていたのですが、定数を定義している箇所の構造を見て驚愕しました。

###該当のソースコード

Obj-Cに不慣れなためJavaで書かせていただきますが、件の箇所の構造はだいたいこんな感じです。

Java

1 2package net.formula97.WonderInplementation; 3 4public class StupidConstants { 5 6 private String mHost; 7 private String mContextRoot; 8 9 // TODO: リリース時に変更のこと 10 private boolean isDebug = true; 11 12 public StupidConstants() { 13 if (isDebug) { 14 // TODO: 結合テスト時はサーバ設定を変更のこと 15 this.mHost = "192.168.1.100"; // 開発用サーバ 16 //this.mHost = "192.168.1.110"; // 結合テスト評価サーバ 17 this.mContextRoot = "debugRoot"; 18 } false { 19 // TODO: 受入れテスト時はサーバ設定を変更すること 20 this.mhost = "10.1.0.100"; // 受け入れテストサーバ 21 //this.mhost = "honban.host.tld"; // 本番環境 22 this.mContextRoot = "releaseRoot"; 23 } 24 } 25 26 // Getter省略 27}

###実現したいこと
ごらんのとおり、結合テストやリリースの際に接続するサーバが異なるのですが、それぞれのフェーズ用のアプリを作るたびに手作業で接続先等を書き換えていたようです。

こんなことをしていると、いつかリリース手順を間違ってしまうことは火を見るより明らかなので、コンパイラから指定した定数に従い処理を分岐させるようなことを行いたいのですが、Xcodeでの実現方法がわからず困っています。

Gradleプロジェクトの場合は、Product Flavourを定義することで実現できることはわかっていますが、Xcodeではどうしたらよいか、ご教示いただきたく。

###補足情報(言語/FW/ツール等のバージョンなど)
現在使用している開発環境は以下のとおりです。

  • Mac OS X El Capitan
  • Xcode 6.1.1(もともとはXcode 3.2で作成された)
  • プロジェクトのDeployment targetはiOS 4.3

なお、接続先サーバ等を入力しておく設定画面を用意すれば事足りることはわかっていますが、設定画面の追加等がどういうわけか要件として盛り込まれておらず、手が出せません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「ソースを弄りたくないという」という認識で回答します。
勘違いでしたら罵倒してください。
2パターンあります。

#1 Configuration + Info.plist + Scheme

ざっくり書きます。

1. PROJECTの設定でCongurationを追加します。

Configuration

2. Info.plistを追加し、割り当てます。

Info.plist

3. 各Info.plistにConfiguration毎のキーを追加します。

Edit Info.plist

4. Schemeを追加します。

Product-Scheme-Manage Schemes...でDuplicateします。

Duplicate Scheme

5. 追加したSchemeにHogehogeを割り当てる。

Product-Scheme-Edit Schemes...

Edit Scheme

6. Schemeを選択する

の右横で選択できます。

Select Scheme

以上。

#2 Scheme + Arguments

簡単に言うと起動オプションです。
すごくざっくり書きます。

1. Schemeを追加します。

さっきと同じ。

2. Argumentを追加します。

Add Argument

3. アプリ内で取得します。

objectivec

1NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 2NSString *key = @"ipaddr"; 3NSLog(@"%@=%@", key, [ud stringForKey:key]); 4//=> ipaddr=192.168.1.100

以上。

まとめ?

どちらにしても、ビルド設定を変えたりできるのでSchemeを分けるのは色々と便利かと思います。

投稿2016/08/25 01:25

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問