有沒有辦法在運行時發現應用程序當前是在測試設備/模擬器上運行還是從真實應用程序商店安裝中運行?應用程序正在測試設備/模擬器上運行/真實應用程序商店安裝
我需要在應用程序和測試/調試期間實施廣告跟蹤我不想發送跟蹤數據,因爲這會更改統計信息。
但我不想區分DEBUG/RELEASE構建,因爲RELEASE構建是例如。也在分析過程中使用。
如果應用程序來自真正的應用程序商店安裝,可能是某個地方存在配置集?或者其他方式?
謝謝。
有沒有辦法在運行時發現應用程序當前是在測試設備/模擬器上運行還是從真實應用程序商店安裝中運行?應用程序正在測試設備/模擬器上運行/真實應用程序商店安裝
我需要在應用程序和測試/調試期間實施廣告跟蹤我不想發送跟蹤數據,因爲這會更改統計信息。
但我不想區分DEBUG/RELEASE構建,因爲RELEASE構建是例如。也在分析過程中使用。
如果應用程序來自真正的應用程序商店安裝,可能是某個地方存在配置集?或者其他方式?
謝謝。
您可以在上添加以下類別來檢查它是否在設備或模擬器上運行。
- (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。
如果您爲調試,分發和應用商店版本創建單獨的配置(您理想情況下應該這樣做),則可以爲每個配置添加具有不同值的「用戶定義的設置」。 通過將其通過info.plist文件導出,可以將其作爲捆綁包屬性展示,並且您可以編寫代碼以不同方式處理每個配置。
Refer this answer用屏幕截圖詳細瞭解這一點。
也是一個好方法,我想我會另外做到這一點。謝謝。 – Darko
我想出了以下解決方案:
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的手動解決方案外)。
謝謝Abhinav! – Darko
樂意幫忙!乾杯:-)! – Abhinav