sobre leyes las falta exportación documentación descargar cumplimiento como codigo code app aplicaciones ios testflight

leyes - Cómo saber en tiempo de ejecución si una aplicación de iOS se está ejecutando a través de una instalación de TestFlight Beta



testflight falta documentación sobre el cumplimiento de las leyes de exportación (5)

Actualizar

Esto ya no funciona. Usa otro método.

Respuesta original

Esto también funciona:

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

Se encuentra en Detectar si la aplicación de iOS se descarga desde Testflight de Apple

¿Es posible detectar en tiempo de ejecución que una aplicación se ha instalado a través de TestFlight Beta (enviado a través de iTunes Connect) vs App Store? Puede enviar un único paquete de aplicaciones y tenerlo disponible a través de ambos. ¿Existe una API que pueda detectar de qué manera se instaló? ¿O el recibo contiene información que permite determinar esto?


Basado en la respuesta combinatoria, creé la siguiente clase de ayuda SWIFT. Con esta clase, puede determinar si se trata de una depuración, prueba de vuelo o compilación de la tienda de aplicaciones.

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 } } }

Utilizamos estos métodos en nuestro proyecto para proporcionar diferentes identificadores de seguimiento o cadenas de conexión por entorno:

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

O:

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

ACTUALIZACIÓN 05-02-2016: Un requisito previo para usar una macro de preprocesador como #if DEBUG es establecer algunos indicadores personalizados del compilador Swift. Más información en esta respuesta: https://.com/a/24112024/639227


Hay una forma en que lo uso para mis proyectos. Aquí están los pasos.

En Xcode, vaya a la configuración del proyecto (proyecto, no objetivo) y agregue la configuración "beta" a la lista:



Luego debe crear un nuevo esquema que ejecute el proyecto en la configuración "beta". Para crear un esquema, vaya aquí:



Nombra este esquema como quieras. Debería editar la configuración para este esquema. Para hacer esto, toque aquí:



Seleccione la pestaña Archivo donde puede seleccionar Build configuration



Luego debe agregar una Config clave con el valor $(CONFIGURATION) la lista de propiedades de información del proyecto de esta manera:



Entonces es justo lo que necesita en el código para hacer algo específico para la compilación 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 }


Para una aplicación instalada a través de TestFlight Beta, el archivo de recibo se denomina StoreKit/sandboxReceipt frente al StoreKit/receipt habitual. Usando [NSBundle appStoreReceiptURL] puede buscar sandboxReceipt al final de la URL.

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

Tenga en cuenta que sandboxReceipt también es el nombre del archivo de recibo al ejecutar compilaciones localmente y para compilaciones ejecutadas en el simulador.


Versión moderna de Swift, que representa los simuladores (según la respuesta aceptada):

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