Comment savoir à l'exécution si une application iOS est en cours d'exécution via une installation TestFlight Beta

Est-il possible de détecter à l'exécution qu'une application a été installée via TestFlight Beta (soumise via iTunes Connect) par rapport à l'App Store? Vous pouvez soumettre un seul set d'applications et le rendre disponible via les deux. Existe-t-il une API capable de détecter de quelle manière elle a été installée? Ou le reçu contient-il des informations permettant de le déterminer?

Pour une application installée via TestFlight Beta, le file de réception est nommé StoreKit\sandboxReceipt rapport au StoreKit\receipt habituel. En utilisant [NSBundle appStoreReceiptURL] vous pouvez searchr sandboxReceipt à la fin de l'URL.

 NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; NSSsortingng *receiptURLSsortingng = [receiptURL path]; BOOL isRunningTestFlightBeta = ([receiptURLSsortingng rangeOfSsortingng:@"sandboxReceipt"].location != NSNotFound); 

Notez que sandboxReceipt est également le nom du file de reçus lors de l'exécution locale des builds et de l'exécution des builds dans le simulateur.

Basé sur la réponse de combinatorial j'ai créé la class d'aide de SWIFT suivante. Avec cette class, vous pouvez déterminer s'il s'agit d'une version de debugging, testflight ou appstore.

 enum AppConfiguration { case Debug case TestFlight case AppStore } struct Config { // This is private because the use of 'appConfiguration' is preferred. 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 } static var appConfiguration: AppConfiguration { if isDebug { return .Debug } else if isTestFlight { return .TestFlight } else { return .AppStore } } } 

Nous utilisons ces methods dans notre projet pour fournir différents ID de suivi ou string de connection par environnement:

  func getURL(path: Ssortingng) -> Ssortingng { switch (Config.appConfiguration) { case .Debug: return host + "://" + debugBaseUrl + path default: return host + "://" + baseUrl + path } } 

OU:

  static var trackingKey: Ssortingng { switch (Config.appConfiguration) { case .Debug: return debugKey case .TestFlight: return testflightKey default: return appstoreKey } } 

MISE À JOUR 05-02-2016: Une condition préalable pour utiliser une macro de préprocesseur comme #if DEBUG est de définir des drapeaux personnalisés du compilateur rapide. Plus d'informations dans cette réponse: https://stackoverflow.com/a/24112024/639227

Version moderne Swift, qui représente les simulateurs (basé sur la réponse acceptée):

 private func isSimulatorOrTestFlight() -> Bool { guard let path = Bundle.main.appStoreReceiptURL?.path else { return false } return path.contains("CoreSimulator") || path.contains("sandboxReceipt") } 

Cela fonctionne aussi:

 if NSBundle.mainBundle().pathForResource("embedded", ofType: "mobileprovision") != nil { // TestFlight } else { // App Store (and Apple reviewers too) } 

Trouvé dans Détecter si l'application iOS est téléchargée depuis Testflight d'Apple

Il y a une façon que je l'utilise pour mes projets. Voici les étapes.

Dans Xcode, allez dans les parameters du projet (projet, pas cible) et ajoutez la configuration "beta" à la list:

entrez la description de l'image ici

Ensuite, vous devez créer un nouveau schéma qui exécutera le projet en configuration "beta". Pour créer un régime, allez ici:

entrez la description de l'image ici

Nommez ce système comme vous voulez. Le vous devriez éditer les arrangements pour ce régime. Pour ce faire, appuyez ici:

entrez la description de l'image ici

Sélectionnez l'onglet Archive où vous pouvez sélectionner la Build configuration

entrez la description de l'image ici

Ensuite, vous devez append une key Config avec la valeur $(CONFIGURATION) la list des propriétés info du projet comme ceci:

entrez la description de l'image ici

Alors c'est juste ce dont vous avez besoin dans le code pour faire quelque chose de spécifique à la version bêta:

 let config = Bundle.main.object(forInfoDictionaryKey: "Config") as! Ssortingng if config == "Debug" { // app running in debug configuration } else if config == "Release" { // app running in release configuration } else if config == "Beta" { // app running in beta configuration }