1

PhoneGap用の新しいUrbanAirshipiOSプラグインを使用しています。

プラグインのplistファイルには、プッシュ通知を有効にするために必要なアプリ固有のキーを入力することになっています。

問題は、同じアプリの2つのバージョン(無料と有料)がありますが、plistファイルは1つのバージョンしか収容できないことです。

基本的に、Objective-Cコードを変更して、無料バージョンかプレミアムバージョンかに応じて、さまざまなplist値を読み取る必要があります。

現在、同じコードベースとXcodeプロジェクトで両方のバージョンを管理しています。プラグインコードを変更しない限り、新しいXcodeプロジェクトを作成する必要があるようですが、これはやりたくないことです。

plsitファイルからさまざまな値を読み取るようにUrbanAirshipのObjective-Cファイルを調整するにはどうすればよいですか?

4

1 に答える 1

2

お待たせして申し訳ありません。昨夜急ぐのではなく、非常に詳細な回答を提供したかったのです :) それでは、始めましょう。

プロジェクトの最初に、新しいターゲットを追加する必要があります。プロジェクト設定に移動し、ターゲットを右クリックします。複製をクリックします。

ターゲットを複製します。

おそらくTarget-copyという名前の新しいターゲットを取得します。また、そのターゲット専用の新しい info.plist ファイルも取得します。

Xcode は自動的に新しい info.plist を作成します。

次に、Pro バージョンのビルド設定を編集します。Apple LLVM compiler 4.0 Preprocessingをスクロールまたは検索して見つけます。デバッグ構成とリリース構成の両方に追加します。私は通常、単純なものを使用しPRO=1ます。また、軽量バージョンに追加PRO=0する必要があります。そうしないと、そのバージョンをビルドしようとすると未定義になります。

カスタム PRO プリプロセッサを作成します。

次に、必要になると確信しているようなカスタム plist を追加する方法を見てみましょう。まず、2 つのフォルダーを作成します。これらはグループではなくフォルダであることが重要です。各フォルダーで、まったく同じファイル名の plist を作成できます。

Lite ターゲットに 1 つ追加します。 Pro ターゲットに 1 つ追加

今から、それぞれに何かを追加できます。キーpropertyと値pro string/を追加しましたlite string。いよいよコードへ。私が作成したサンプル プロジェクトでは単純に上書きviewDidLoadしましたが、明らかにこれはどこでも機能します。plist は同じ名前なので、1 行のコードでロードできます。それぞれのターゲットにコピーされるだけなので、混同されることはありません。コード レベル ベースのロジックを実行する必要がある場合は、作成したPROプリプロセッサを使用できます。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // This will load the proper plist automatically.
    NSLog(@"Plist Value: %@",[[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Property List" ofType:@"plist"]] objectForKey:@"property"]);

    // Also remember we set up a preprocessor PRO. you can use it as well.
    if (PRO) {
        NSLog(@"Only Show for Pro");
    } else {
        NSLog(@"Only Show for Lite");
    }

    NSLog(@"This will show for both");
}

これは、私がすべてのライト/プロ バージョンのアプリで使用している方法であるため、プロジェクトや他の複雑なシステム間でコードベースをコピーすることなく、共通のコードベースを共有できます。これまでのところ、私にとってはかなりうまく機能しています:)ハッピーコーディング!

ソース

誰かがプロジェクトを使って見ることができるかもしれないと考えたので、ここではGitHubにあります。

于 2012-08-15T12:25:07.750 に答える