14

私は異なる設定といくつかの異なる設定APIを持つ3つを持っていますAPI Keys

  • 開発用または内部テスト用ビルド- iOS App Store 外での開発配布

    • Host- devapi.プロジェクト名.com
    • API Key- 開発キー
    • FLEX[ 1 ] - 有効にする
  • クライアント テスト ビルドの場合- iOS App Store 外のエンタープライズ配布

    • Host- stgapi.プロジェクト名.com
    • API Key- エンタープライズキー
    • FLEX- 有効
  • プロダクション ビルドの場合- iOS App Store での配布

    • Host- API.プロジェクト名.com
    • API key- app_store_key
    • FLEX- 無効にする

を使用して2つの設定を管理できますDEBUG

#if DEBUG
    #define API_BASE_URL @"http://devapi.project-name.com/api/v1"
    #define API_KEY @"development_key"
#else
    #define API_BASE_URL @"http://stgapi.project-name.com/api/v1"
    #define API_KEY @"enterprise_key"
#endif

// In AppDelegate.m 
#if DEBUG
    [[FLEXManager sharedManager] showExplorer];
#endif

しかし、最初の問題は、Enterprise ディストリビューション (クライアント テスト用) と iOS App Store ディストリビューション (プロダクション) のビルドです。Enterprise および App Store ディストリビューションでは、毎回コードを変更する必要があります。

  • エンタープライズ配布用

    #if DEBUG
        //debug setting
    #else
        //enterprise setting
        #define API_BASE_URL @"http://stgapi.project-name.com/api/v1"
        #define API_KEY @"enterprise_key"
    #endif
    
  • App Store 配布用

    #if DEBUG
        //debug setting
    #else
        //app store setting
        #define API_BASE_URL @"http://api.project-name.com/api/v1"
        #define API_KEY @"app_store_key"
    #endif
    

私はこのような方法を探しています

#ifdef DEVELOPMENT
    #define API_BASE_URL @"http://devapi.project-name.com/api/v1"
    #define API_KEY @"development_key"
#elif ENTERPRISE
    #define API_BASE_URL @"http://stgapi.project-name.com/api/v1"
    #define API_KEY @"enterprise_key"
#elif APP_STORE
    #define API_BASE_URL @"http://api.project-name.com/api/v1"
    #define API_KEY @"app_store_key"
#endif

それとも他の?


2番目の問題

異なるターゲットを作成せずに、異なる名前で 3 つのビルドを作成する方法はありますか?

  • ProductName- App Storeの場合
  • ProductName-Dev- 内部開発ビルド用
  • ProductName-Stg- クライアント テスト (エンタープライズ) ビルド用

iamnicholsが提供するソリューションに基づいて、デモ プロジェクトと完全なビジュアル ガイドを作成しました。

4

3 に答える 3

16

デバッグ ビルドとリリース ビルドの違いは、一方はアーカイブされてエクスポートされ、もう一方はデバッガーで Xcode を介してローカルで実行されることです。場合によっては、本番ビルドまたはステージング ビルドもデバッガーで実行したい場合がありますが、#ifdef DEBUG.

これは私がしていることの単純化されたバージョンです:

個々の構成を作成する

プロジェクト (ターゲットではない) 設定で、次の構成を作成します (元のものから複製します)。

  • Debug_Dev
  • Debug_Staging
  • Debug_Prod
  • Release_Dev
  • Release_Staging
  • Release_Prod

Cocoapods を使用する場合は、構成を none に戻し、プロジェクト ( Pods プロジェクトではありません) の Pods フォルダーの内容を削除し、再実行する必要があることに注意してくださいpod install

環境ごとにスキームを作成する

MyApp スキームを作成するだけでなく、次のものを作成します (オリジナルを複製します)。

  • MyApp_Dev
  • MyApp_Staging
  • MyApp_Prod

各スキームで、関連する Debug_* および Release_* 構成を適宜使用します。

環境を識別するプリプロセッサ マクロを追加する

追加のプリプロセッサ マクロを追加して、ビルド対象の環境を識別します。

プロジェクトのビルド設定で、+ をクリックし、ユーザー定義のビルド設定を追加して、MYAPP_ENVIRONMENT. 次に、環境の異なるグループごとに、それぞれに異なるプリプロセッサ マクロを追加します。すなわちENV_DEV=1ENV_STAGING=1およびENV_PROD=1

次に、c プリプロセッサ マクロで (ターゲット レベルではなくプロジェクト レベルで)、この新しい MYAPP_ENVIRONMENT 設定を$(MYAPP_ENVIRONMENT).

このようにして、次のように構築している環境を決定できます。

#ifdef ENV_DEV
    NSString * const MyAppAPIBaseURL = @"https://api-dev.myapp.com/";
#elif ENV_SAGING
    NSString * const MyAppAPIBaseURL = @"https://api-staging.myapp.com/";
#elif ENV_PROD
    NSString * const MyAppAPIBaseURL = @"https://api.myapp.com/";
#endif

大変なこともあると思いますが、どのようにすればよいか教えてください。


その後、アプリの表示名を変更するなど、さまざまなことを行うために、さまざまなユーザー定義のビルド設定を作成することもできます。

MYAPP_DISPLAY_NAMEこれを行うには、たとえば、という新しい設定を作成し、各構成に正しい名前をinfo.plist設定してから、バンドルの表示名の値を に設定します$(MYAPP_DISPLAY_NAME)

于 2016-02-23T08:25:05.960 に答える
0

単純で洗練されていない解決策は、構成ごとに異なるヘッダー ファイルを使用し、そのうちの 1 つだけを #import することです。これは自動ではありませんが、かなり単純です。

// You only need to switch the following lines when passing from qa 2 production and back:
#import "Mode_QA.h"
//#import "Mode_Production.h"
于 2016-02-23T08:41:18.807 に答える