【问题标题】:Is app running on test device/simulator/real app store install应用程序是否在测试设备/模拟器/真实应用商店安装上运行
【发布时间】:2015-10-20 08:37:12
【问题描述】:

有没有办法在运行时查明应用当前是在测试设备/模拟器上运行还是从真实的应用商店安装中运行?

我需要在应用程序中实现广告跟踪,并且在测试/调试期间我不想发送跟踪数据,因为这会改变统计信息。

但我不想仅仅区分 DEBUG/RELEASE 构建,因为 RELEASE 构建是例如在分析期间也使用。

如果应用来自真实的应用商店安装,也许在某处设置了配置?还是其他方式?

谢谢。

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

    您可以在UIDevice 上添加以下类别,以检查它是在设备上运行还是在模拟器上运行。

    - (BOOL)isSimulator {
    #if TARGET_IPHONE_SIMULATOR
        return true;
    #else
        return false;
    #endif  
    }
    
    
    + (BOOL)isSimulator {
        return [[self currentDevice] isSimulator];
    }
    

    编辑:我刚刚探索并发现有一种方法可以知道应用程序实例是否来自应用商店。这里是:

    if ([[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"]) {
      // not from app store
    } else {
      // from app store
    }
    

    您可以参考这个SO thread了解更多详情。

    【讨论】:

    • 乐于助人!干杯:-)!
    【解决方案2】:

    如果您为调试、分发和应用商店构建创建单独的配置(理想情况下应该这样做),您可以为每个配置添加具有不同值的用户定义设置。 可以通过 info.plist 文件将其作为捆绑属性公开给代码,您可以编写代码以不同方式处理每个配置。

    Refer this answer 通过屏幕截图更详细地查看此内容。

    【讨论】:

    • 也是一个好方法,我想我会另外做。谢谢。
    【解决方案3】:

    我想出了以下解决方案:

    private func isAppStoreDeployedBuild() -> Bool {
        func isSimulator() -> Bool {
            return TARGET_OS_SIMULATOR != 0
        }
    
        var isAppStore = false
        #if DEBUG
            isAppStore = false
        #else
            if isSimulator() {
                isAppStore = false
            } else {
                // Check if Ad Hoc build e.g. HockeyApp
                if NSBundle.mainBundle().pathForResource("embedded", ofType: "mobileprovision") == nil {
                    isAppStore = true
                } else {
                    isAppStore = false
                }
            }
        #endif
        return isAppStore
    }
    

    这涵盖了除直接(通过 USB)上传到设备的 RELEASE 构建之外的所有内容。我仍然找不到检查这个的解决方案(除了 lukya 的手动解决方案)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 2012-09-18
      • 2016-09-02
      • 2020-05-23
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多