2012-09-14 6 views
9

TestFlightとApp Storeのビルド構成を同じにすることをお勧めします。アプリケーションがTestFlightまたはApp Store経由でインストールされているかどうかを実行時に検出する方法はありますか? (私が考えているのは、App Store経由でインストールされていないのであれば、takeOffと呼ぶだけです)TestFlightを検出しますか?

AppForeのビルドでTestFlightを使用しないで、ユーザーのプライバシーを保護し、ネットワーキング議論されたhere

+0

さまざまなターゲットはどうですか? – Jessedc

+0

Xcodeのアーカイブを壊すと思う。私はここで間違った質問をしていると思う。他の誰かが良いアイデアを持っていない限り、私は自分のアプリにTestFlightスイッチを追加し、それをデフォルトにするつもりです。 –

+1

Xcodeのアーカイブは、さまざまなターゲットで問題ありません。私はしばしば、内部リリース用に異なるターゲットを使用し、他のものはアプリストア用に使用します。それらは同じ設定(デバッグ、リリース)を可能にしますが、異なるビルド設定を設定して、TFアウトオブプロダクション/アプリストアターゲットをコンパイルすることができます。 – Jessedc

答えて

4

私はこれが閉じることができるCheck if iOS app is live in app storeの複製に十分近いと考えています。

埋め込みモバイルサービスがないことを確認することで、アプリがアプリストア経由で配信されたかどうかを判断できます。このファイルは、アドホックビルドにのみ含まれています。 TestFlightまたはHockeyAppを介してのみビルドを配布していて、ではなく、ストアビルドの場合は、TestFlightまたはHockeyAppビルドでなければなりません。このよう

if ([[NSBundle mainBundle] pathForResource:@"embedded" 
            ofType:@"mobileprovision"]) { 
    // not from app store 
} else { 
    // from app store 
} 

この技術はthe HockeyApp SDKからです。スウィフトにおけるデバッグ、TestFlightやAppStoreの展開を決定するために

+0

TestFlightがプロダクションビルドをApple部門で受け入れるので、うまくいきませんね。 – zaplitny

+1

公式ストアのリリースには、「embedded.mobileprovision」は含まれません。新しいiTunes Connect TestFlightのビルドは、そうでないかもしれません。おそらくちょうどチェックするべきです。 –

+0

私は、このテクニックが生産現場での 'iOS 9.1' + TestFlight以来もう使われていないことを確認します。 – loretoparisi

0

あなたはドキュメントがsetDeviceIdenifierコールに示唆するものと似たような行うことができます:SDK Documentationベータテストおよびリリース分化セクションでは、以下が[TestFlight takeOff:@"api-token"];の前に置くことが示唆

を:

#define TESTING 1 
#ifdef TESTING 
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; 
#endif 

アプリをリリースする時間が来たときにのコメント#define TESTING 1の行をコメントアウトし、setDeviceIdentifierへのその後の呼び出しがスキップされる。あなたのコードは、次のようになります。

//#define TESTING 1 
#ifdef TESTING 
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; 
#endif 

ソリューション

上記の提案のように、あなただけのsetDeviceIdentifierの下にそれを置くと#define TESTING 1をコメントアウトすることができますと呼ばれているからtakeOffを防ぐために。これはあなたを与えるだろう:

//#define TESTING 1 
#ifdef TESTING 
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; 
    [TestFlight takeOff:@"api-token"]; 
#endif 

HTH


あなたが慣れていない場合は#ifdefhereについての詳細を読むことができます。

+0

あなたは使用していますプリプロセッサマクロが間違っている場合は、プロジェクトのビルド設定の 'Preprocessor Macros'キーにそれらを入れるべきですが、同じビルド設定が必要であることがわかっているので、プリプロセッサマクロは同じ値を与えます。スティーブンフィッシャーのようなランタイムの違いは正しい答えでした。また、あなたはほとんどそれをコメントアウトするようなソリューションを使用していない、非常にアマチュアと簡単に忘れられない。 – Laszlo

1

private static let isTestFlight = NSBundle.mainBundle().appStoreReceiptURL?.lastPathComponent == "sandboxReceipt" 

    // This can be used to add debug statements. 
    static var isDebug: Bool { 
    #if DEBUG 
     return true 
    #else 
     return false 
    #endif 
    } 

完全なソースコードおよびサンプル:https://stackoverflow.com/a/33830605/639227

0

Hereは、DebugとRelease(ほかに追加の設定を追加する方法を示しますブログ記事ですベータ版)。

ベータ設定を追加した後、別のプロジェクト方式を作成します。そして、この新しい計画を編集してください。アーカイブのセクションで、ベータ設定を使用するように選択してください。次に、このスキームをTestflightと以前のスキームをアーカイブするために、App Storeを利用するために使用します。

関連する問題