如何识别包括Test Flight在内的app运行环境

时间:2016-05-15 11:16:36

标签: ios xcode testflight

我正在开发iOS应用程序,需要确定运行应用程序的环境以对API端点进行分类。我想知道应用程序是否在生产,模拟器和Test Flight下运行。 我已经按用户定义的设置对生产和模拟器进行了分类,但我仍然不确定如何识别Test Flight。 有小费吗?谢谢!

3 个答案:

答案 0 :(得分:1)

如果您要求在应用内获取此信息,则可以appStoreReceiptURL NSBundle

获取所有这些信息

来自apple documentation ...

  

对于从App Store购买的应用程序,请使用此应用程序包属性来查找收据。此属性不保证仅在URL处是否存在文件,如果存在收据,则表示其位置。

NSBundle.mainBundle().appStoreReceiptURL?.lastPathComponent

有关实施,请参阅this问题

答案 1 :(得分:0)

还可以使用收据字段中的environment字段。请检查所附的屏幕截图,以获取sandboxproduction的收据。 enter image description here enter image description here

答案 2 :(得分:0)

迅速5。使用下面的WhereAmIRunning类检查环境。

import Foundation

class WhereAmIRunning {

    // MARK: Public

    func isRunningInTestFlightEnvironment() -> Bool{
        if isSimulator() {
            return false
        } else {
            if isAppStoreReceiptSandbox() && !hasEmbeddedMobileProvision() {
                return true
            } else {
                return false
            }
        }
    }

    func isRunningInAppStoreEnvironment() -> Bool {
        if isSimulator(){
            return false
        } else {
            if isAppStoreReceiptSandbox() || hasEmbeddedMobileProvision() {
                return false
            } else {
                return true
            }
        }
    }

    // MARK: Private

    private func hasEmbeddedMobileProvision() -> Bool{
      if let _ = Bundle.main.path(forResource: "embedded", ofType: "mobileprovision") {
            return true
        }
        return false
    }

    private func isAppStoreReceiptSandbox() -> Bool {
        if isSimulator() {
            return false
        } else {
          if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
            let appStoreReceiptLastComponent = appStoreReceiptURL.lastPathComponent as? String, appStoreReceiptLastComponent == "sandboxReceipt" {
                    return true
            }
            return false
        }
    }

    private func isSimulator() -> Bool {
        #if arch(i386) || arch(x86_64)
            return true
            #else
            return false
        #endif
    }
}