是否可以在运行时检测到已通过TestFlight Beta(通过iTunes Connect提交)与App Store安装了应用程序?您可以提交单个应用包,并通过它们提供。是否有可以检测安装方式的API?或者收据是否包含允许确定的信息?
答案 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>
中找到
答案 5 :(得分:-4)
有一种方法可以将它用于我的项目。以下是步骤。
在Xcode中,转到项目设置(项目,而不是目标)并添加&#34; beta&#34;配置到列表:
然后你需要创建一个新的方案,在&#34; beta&#34;组态。要创建方案,请访问:
将此方案命名为您想要的任何名您应该编辑此方案的设置。要执行此操作,请点击此处:
选择存档选项卡,您可以在其中选择Build configuration
然后你需要添加一个值Config
,其值为$(CONFIGURATION)
项目信息属性列表,如下所示:
然后就是你需要在代码中执行特定于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
}