如何在运行时告知iOS应用程序是否正在通过TestFlight Beta安装运行

时间:2014-09-28 04:12:11

标签: ios testflight

是否可以在运行时检测到已通过TestFlight Beta(通过iTunes Connect提交)与App Store安装了应用程序?您可以提交单个应用包,并通过它们提供。是否有可以检测安装方式的API?或者收据是否包含允许确定的信息?

6 个答案:

答案 0 :(得分:97)

对于通过TestFlight Beta安装的应用程序,收据文件的名称为StoreKit\sandboxReceipt,而不是通常的StoreKit\receipt。使用[NSBundle appStoreReceiptURL],您可以在网址末尾查找sandboxReceipt。

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSString *receiptURLString = [receiptURL path];
BOOL isRunningTestFlightBeta =  ([receiptURLString rangeOfString:@"sandboxReceipt"].location != NSNotFound);

请注意,sandboxReceipt也是在本地运行构建时以及在模拟器中运行构建时的接收文件的名称。

答案 1 :(得分:49)

基于combinatorial's answer我创建了以下SWIFT助手类。使用此类,您可以确定它是否为debug,testflight或appstore构建。

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

我们在项目中使用这些方法为每个环境提供不同的跟踪ID 连接字符串

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

OR:

strFormula = "=(K19 * P13) + (I19 * P13/3,2)"
strCelda = "M20"
Range(strCelda).Formula = strFormula <---- Error

更新05-02-2016: 使用#if DEBUG之类的预处理器宏的先决条件是设置一些Swift编译器自定义标志。本答案中的更多信息:https://stackoverflow.com/a/24112024/639227

答案 2 :(得分:23)

Modern Swift版本,它考虑了模拟器(基于已接受的答案):

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

答案 3 :(得分:6)

我在Swift 5.2上使用扩展名Bundle+isProduction

import Foundation

extension Bundle {
    var isProduction: Bool {
        #if DEBUG
            return false
        #else
            guard let path = self.appStoreReceiptURL?.path else {
                return true
            }
            return !path.contains("sandboxReceipt")
        #endif
    }
}

然后:

if Bundle.main.isProduction {
    // do something
}

答案 4 :(得分:5)

更新

这不再适用。使用其他方法。

原始答案

这也有效:

<div id = "example"></div>
<div id = "gallery"></div>

Detect if iOS App is Downloaded from Apple's Testflight

中找到

答案 5 :(得分:-4)

有一种方法可以将它用于我的项目。以下是步骤。

在Xcode中,转到项目设置(项目,而不是目标)并添加&#34; beta&#34;配置到列表:

enter image description here



然后你需要创建一个新的方案,在&#34; beta&#34;组态。要创建方案,请访问:

enter image description here



将此方案命名为您想要的任何名您应该编辑此方案的设置。要执行此操作,请点击此处:

enter image description here



选择存档选项卡,您可以在其中选择Build configuration

enter image description here



然后你需要添加一个值Config,其值为$(CONFIGURATION)项目信息属性列表,如下所示:

enter image description here



然后就是你需要在代码中执行特定于beta版本的事情:

let config = Bundle.main.object(forInfoDictionaryKey: "Config") as! String
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
}