2015-10-20 159 views
1

有沒有辦法在運行時發現應用程序當前是在測試設備/模擬器上運行還是從真實應用程序商店安裝中運行?應用程序正在測試設備/模擬器上運行/真實應用程序商店安裝

我需要在應用程序和測試/調試期間實施廣告跟蹤我不想發送跟蹤數據,因爲這會更改統計信息。

但我不想區分DEBUG/RELEASE構建,因爲RELEASE構建是例如。也在分析過程中使用。

如果應用程序來自真正的應用程序商店安裝,可能是某個地方存在配置集?或者其他方式?

謝謝。

回答

4

您可以在上添加以下類別來檢查它是否在設備或模擬器上運行。

- (BOOL)isSimulator { 
#if TARGET_IPHONE_SIMULATOR 
    return true; 
#else 
    return false; 
#endif 
} 


+ (BOOL)isSimulator { 
    return [[self currentDevice] isSimulator]; 
} 

編輯:我只是探索和發現,有知道的應用實例是從App Store或沒有辦法。它是:

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

有關更多詳細信息,請參閱此SO thread

+0

謝謝Abhinav! – Darko

+0

樂意幫忙!乾杯:-)! – Abhinav

2

如果您爲調試,分發和應用商店版本創建單獨的配置(您理想情況下應該這樣做),則可以爲每個配置添加具有不同值的「用戶定義的設置」。 通過將其通過info.plist文件導出,可以將其作爲捆綁包屬性展示,並且您可以編寫代碼以不同方式處理每個配置。

Refer this answer用屏幕截圖詳細瞭解這一點。

+0

也是一個好方法,我想我會另外做到這一點。謝謝。 – Darko

0

我想出了以下解決方案:

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)的設備。我仍然無法找到解決方案來檢查此問題(除了lukya的手動解決方案外)。

相關問題