2013-01-08 46 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