私は現在、既存のiOSアプリを非常によく似たアプリのファミリーに適合させる過程にあります(各アプリインスタンスはおそらく異なる国/地域にマップされます)。
これらのインスタンスごとに異なるビルドターゲットを設定することを計画していますが、それらの違いは次のとおりです。
- 画像(おそらくスプラッシュスクリーンとアイコンだけ)
- ローカリゼーション
- 文字列変数:リモートサービスのベースURL、アプリケーションID、サポート電子メールなど(おそらくそのような変数の半ダース)
コード自体はすべてのアプリで同じである必要があります。
私が知りたいのは、このようなアプリケーションのファミリーを管理するためのベストプラクティスであるとあなたが考えるものです。
画像とローカリゼーション(または一般的なリソース)に関しては、ターゲットから適切なファイルを追加/削除するだけで済みます(異なるディレクトリで、画像に同じ名前を使用することもできます)。
私がよくわからない主なことは、他の構成変数です。
私はいくつかのオプションを聞いた/考えました:
- プリプロセッサマクロと、さまざまなURL、IDなどのメイン構成ヘッダーファイルを使用する
- アプリケーションが起動するたびにplist(または同様の構成ファイル)からそれらをロードし、ターゲットごとにそのようなファイルを1つ持つ
- 空の.sqliteファイル(このアプリはすでにCore Dataを使用しています)を作成し、デフォルトの構成変数を設定し、ターゲットごとにそのようなファイルを1つ作成します
このアプリのインスタンスがいくつかあると、最初のオプションが手に負えなくなるのが最も速いと思います。さらに、これらの設定の1つを変更するたびに再コンパイルする必要があります。
3番目のオプションもわかりません。データベースにエンティティが属しているようには感じられないエンティティをデータベースに追加するためです。さらに、おそらく5〜10の設定ではやり過ぎのように感じます。また、アップデートで新しい設定を追加する方法もわかりません。
だから私は2番目のオプションにもっと傾いています。
考え?これらに代わるものはありますか?
更新#1:
2番目のオプションに関しては、これらの文字列(ID、URLなど)がソースコードにある場合よりもわずかに公開されるという欠点もあります(つまり、誰かがアプリを開いてplistを調べた場合)。これはそれほど大きな問題ではありませんが、考慮すべきことです。
アップデート#2:
アプリのinfo.plistを直接使用して、そこに保存するのはどうですか?(したがって、ターゲット構成ごとにinfo.plistがあります)当初は個別のplistを用意し、起動時にそこからすべてをロードする「構成シングルトン」を作成することを考えていましたが、単純に作成する方が簡単かもしれません。 info.plistに入力し、を介して読み取ります[[[NSBundle mainBundle] infoDictionary] objectForKey:@"com.example.mykey1"]
。