3

私は現在、既存の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"]

4

3 に答える 3

4

私はプリプロセッサオプションを取ります。すべてのプリプロセッサを1つのファイル/メソッドに入れることができ、面倒になることはありません。oefeが言ったように、.sqliteを変更するのはやり過ぎです。そして、複数のplistを使用すると、物事をドラッグして、エラーが発生しやすいアクションをたくさん実行していることに気付くでしょう。

ただし、アプリはあまり作りません。1つのアプリを作成し、ユーザーが起動時に自分の都市を選択できるようにします。また、アプリ内購入を追加して、ユーザーが必要なときに都市を追加できるようにすることもできます。

  • アプリのメンテナンスが簡単になります。更新のたびに10以上のアプリの説明とスクリーンショットをアップロード、変更しますか?私はこれを1つのアプリで行うのは苦痛だと思います...
  • AppStoreにスパムを送信することはありません。まったく同じ目的でAppStoreに10以上のアプリを追加するのはばかげています...そのため、Appleはその状況を回避するためにアプリ内購入を行いました。
  • 都市ごとに異なるアイコンを見つける必要があります。アイコンは、AppStoreでアプリを販売する際の最も重要な側面の1つです。あなたはそれを可能な限り磨き上げたいのです。Appleは、複数のアプリが同じアイコンを持ち、ラベルを付けることでアイコンを区別することを許可しません。これは良いオプションではありません。
于 2011-04-04T20:39:45.460 に答える
2

最終的にplistを選択しましたが、新しいファイルを作成する代わりに、info.plistファイルを使用しました。したがって、ターゲットごとに個別のinfo.plistが必要だったため、ターゲットごとに追加のファイルは必要ありませんでした。バンドルから直接ロードするだけです。

[[[NSBundle mainBundle] infoDictionary] objectForKey:@"com.example.mykey1"]

また、いくつかの目的でプリプロセッサ(ターゲット設定にフラグが設定されている)を使用しましたが、これは主に、アプリの一部を完全に無効化/削除したい場合に使用しました(たとえば、列挙値をコメントアウトしたすべてのものを確実に取得するため)いくつかの場所に含まれています)。

私はそれが比較的きれいだと思います、そして私はあまり混乱することなく将来のビルドのためにこれを簡単に複製することができます。

于 2011-04-10T09:10:41.503 に答える
1

バリエーションが国/地域ごとであり、これらの変数が文字列であることを考えると、単純にローカライズ可能な文字列として扱い、問題をすでに解決されたものに減らしてみませんか?

そうでなければ、私はplistに行きます。Sqliteはやり過ぎのようで、ソース管理に適していません。そして、条件付きコンパイルはすぐに面倒になります。

于 2011-04-04T20:24:25.610 に答える