2013-01-08 41 views
1

我上週發佈了我的第一個獨奏iPhone應用程序,計算12V Marine and Boat Battery usage。我已經在模擬器和iPhone上進行了大力測試,當我感覺舒適時,一切都很好,我將應用程序歸檔併發布給Apple。當用戶開始使用該應用程序時,他們注意到計算未按預期工作。下面的代碼是NSManagedObject模型中的一個方法,它在釋放時調試時產生一個DIFFERENT輸出。將iPhone應用浮點計算髮布到應用商店時。

下面應該總結相關放電項目的總數 - 但如果沒有BBDischarge項目,則應該返回零。相反,當沒有項目(因此for循環不會觸發)時,它會返回一個數字,它是家用AH(NSNumber)的直接產品。如果將家用AH設置爲100,則下面的放電量AH返回8,如果將家用電器AH設置爲1000,則返回83(當顯示時,浮點值被舍入)。再一次,我強調在模擬器上運行時,下面的工作很好,或者直接放到我的iPhone 4s上,只有通過應用商店發佈後才能完成。

//Other dynamics hidden for simplicity 
@dynamic domesticAH; 
@dynamic voltage; 
@dynamic profileDischarge; 

-(NSNumber*) dischargeAmpH 
{ 

    float totalWattsPD; 

    //Calculate the watts per day so we can accurately calculate the percentage of each item line 
    for(BBDischarge* currentDischarge in self.profileDischarge) 
    { 
     float totalWatt = [currentDischarge.wattage floatValue] ; 
     float totalMinsPD = [currentDischarge.minutesPD floatValue]/60; 
     float totaltimesUsed = [currentDischarge.timesUsed floatValue]; 
     float numberInOperation = [currentDischarge.number floatValue]; 
     totalWattsPD = totalWattsPD + ((totalWatt * totalMinsPD) * (totaltimesUsed * numberInOperation)); 
    } 

    int voltage = ([self.voltage integerValue] + 1) * 12; 

    float totalAmpsPD = totalWattsPD/voltage; 

    return [NSNumber numberWithFloat:totalAmpsPD]; 

} 

正如你所看到的,self.domesticAH未在方法特徵的任意位置,因爲我無法重新創建這個在模擬器上,我有一個很難跟蹤下來。

幾個問題:

  • 我可以調試我的應用程序的真人版?將XCode附加到我正在運行的App Store下載的應用程序實例?
  • 有沒有一種方法可以模擬從存檔安裝 - 任何人都會推薦臨時分發來做到這一點?我還沒有使用特設。
  • 任何其他想法,爲什麼這可能會以這種方式表現?
+0

嘗試,看看(在你的項目目標)的調試之間的性差異和釋放..做一些測試..創建IPA文件..have的一些行爲? – TonyMkenu

+0

託尼,你好,謝謝你的提示。在Ad Hoc中,錯誤依然存在!這太好了,意味着我至少可以測試一下,看看我能否在重新發布之前消除這個bug。你可以指向我的任何構建設置?代碼簽名在版本上有所不同,在發佈版本中,所有調試符號都被刪除,並且代碼被優化。還有什麼我應該看看那裏? – MagicalArmchair

+0

檢查此...關於「可憐的浮點性能」 http://www.mindjuice.net/2011/11/30/how-to-fix-an-app-that-c​​rashes-in-release-but- not-debug/ – TonyMkenu

回答

1

更多的是一個提示而不是答案..但是,正如我已經在評論中所說的:你可以檢查Release和Debug版本之間的不同行爲。

過去曾見過這種不同的「行爲」。由「優化級別」設置給出。調試版本設置爲無[-O0],而發佈版本設置爲最快,最小[-Os]。

一個例子here .. here另一個..

+1

上述代碼中的實際修復,一旦我可以使用最快,最小(我必須設置兩次,一次在項目中,一次在目標中)的「優化級別」重新創建錯誤,我需要做的就是修復該錯誤是初始化原始浮點數。因此,代碼行'float totalWattsPD;'變成了'float totalWattsPD = 0;',並且,計算開始按預期工作。 – MagicalArmchair

相關問題