【问题标题】:iphone application distribution build contains a bugiphone 应用程序分发版本包含一个错误
【发布时间】:2011-01-13 18:23:06
【问题描述】:

解决方案: 在很多人的帮助下,这个问题已经解决了。我现在写这篇文章,以便有类似问题的人可以从中受益。为了让我重新创建这个错误,我必须在我的设备上运行分发版本。这是按照 MrMage 的建议完成的,它告诉我将证书更改给开发人员,而不是分发。这使我可以重新创建错误并对其进行调试。问题原来是编译器忽略了所有设置 CGSize 值的调用。我可以通过将目标首选项中的“优化级别”设置为“无”而不是“最快、最小”来防止这种情况。


你好,

我的应用程序中有一个非常奇特的地方。几天前,我的应用程序获得了应用商店的批准,但令我惊恐的是,我很快发现它存在一个重大错误。我去了我的电脑,但是当我运行代码时(在模拟器和设备上),一切都很完美。我已经尝试了一切:重新编译并提交更新、清理所有目标、重新安装 SDK 等。

这里有更详细的问题描述。我的应用程序中有一个明细表视图,它从在线资源加载一些数据。它在下载时显示加载视图,然后在设置数据源后重新加载表格视图。表格的单元格包含 UITextViews,它会改变大小以适应文本。当我在电脑上运行应用程序,或者在设备上调试时,文本被下载并完美显示,但是当我从 App Store 下载并启动它时,它只会在第一次显示文本,然后留空为休息。我知道数据会被下载,因为 texviews 会自行调整大小以适应文本,它们只是不显示它。

有人知道是什么导致了这个错误吗?我如何知道我的分发版本是否包含错误,而该错误未显示在调试版本中?

你的, 本。

PS:我已经比较了调试和分发版本的目标设置。我看到的唯一区别是“代码生成”下的“优化级别”。我已尝试为调试版本更改此设置,但未发现问题。


编辑:我按照 MrMage 的建议解决了这个问题。事实证明,这段代码确实是错误的原因。在调试器中运行时,'s'的width和height属性始终为零,无论如何我都无法更改。我正在研究为什么会发生这种情况。

- (void) setText:(NSString *)string 
{

CGSize s = [string sizeWithFont:textView.font constrainedToSize:CGSizeMake(290, FLT_MAX)];
s.height += kStaticSize;

//SizeWithFont is very unreliable so have to do some dirty tweaking
if (s.height > 100 && s.height <= 250)
    s.height += 20;
else if (s.height > 250 && s.height <= 500) 
    s.height += 40;
else if (s.height > 500 && s.height <= 800 )
    s.height += 50;
else if (s.height > 800 && s.height <= 1200)
    s.height += 60;
else if (s.height > 1200 && s.height <= 1700)
    s.height += 100;
else if (s.height > 1700) 
    s.height += 200;

s.width = 290;
CGRect r = textView.frame; 
r.size = s;
[textView setFrame:r];

[self.textView setText: string];
[self.textView setNeedsDisplay];

}

【问题讨论】:

  • 您应该在完善最终解决方案时保持更新。这是一个有趣的问题,可能其他人也会遇到。
  • 很好的建议,'除非我已经这样做了,在我原来的帖子的顶部。
  • 我认为理想的解决方案是找到错误的真正原因,将优化级别降低到类似于调试构建的东西只是一种快速的解决方法。如果您的代码在逻辑上是正确的,那么无论二进制文件是否经过优化,都不会出现该错误。
  • 我记得这个朋友只在发布版本时崩溃,而不是调试。事实证明他在滥用 C 字符串函数,但在调试(未优化)设置中,恰好有很多“安全”,空内存填充他的变量两侧,因此非法访问没有发生。也许您的代码正在发生类似的事情。

标签: iphone cocoa-touch debugging distribution


【解决方案1】:

您是否尝试仅采用您的分发构建配置并将其代码签名选项更改为 iPhone 开发人员,然后在您的设备上测试该构建?

据我所知,您现在还可以上传使用开发者证书签名的二进制文件。因此,您可以采用一个有效的开发人员构建并将其提交给 Apple。

【讨论】:

  • 就是这样!它工作得很好(或者不完美,这是我想要做的)。当我这样做并在设备上运行时(在模拟器中仍然没有问题),我得到了以前无法复制的错误。我将编辑我的第一篇文章来展示这一点,并添加更多关于为什么会发生这种情况的信息。
  • 不过,这是非常奇怪的行为。编译器应该优化您以后需要的变量更改。
【解决方案2】:

您是否测试过优化的构建?优化器可以做一些非常时髦的事情(比如重新排列你的代码),如果你有一个未初始化的变量,这可能会导致问题。

我还建议运行 Clang(进行构建和分析)。

【讨论】:

  • 感谢您的建议。我尝试运行clang,它没有找到任何东西。我还尝试使用所有优化选项单独构建调试版本;没有什么区别......
【解决方案3】:

自更新以来,您如何更改代码? (我希望您使用某种形式的版本控制)我认为目标设置与它没有太大关系。

与此同时,如果它严重错误,我会将其从商店中删除。然后努力使下一个版本稳定并对其进行广泛测试。

(我认为您不需要使用自定义 tableView 单元格来调整文本大小,我很确定 Apple 的股票会自动执行此操作。)

【讨论】:

  • 我完全没有对源代码进行任何更改,并且我已经发布了更新以确保我没有更改。我确实也从销售中删除了我的应用程序,这真的让我很烦恼。至于广泛测试它,我宁愿做些什么。我的问题是该程序在我所有的测试环境中都是坚如磐石的。
【解决方案4】:

在疯狂猜测的标题下。

我会看看你的开发环境和正常的操作环境有什么不同。例如,在我的开发环境中,我的 iPhone 默认使用我的 wifi 来处理除电话以外的所有事情。由于某些网络操作对时间和带宽很敏感,因此在 3G/边缘上操作可能是问题所在。

我正在尝试考虑什么可能导致文本视图缩放以保存文本但不显示文本。如果 textview 没有适合的内容,则无法缩放以适应。这表明文本要么由空格组成,要么由于某种原因文本颜色的 alpha 为零。你有没有设置文本颜色/字体?

【讨论】:

  • 我已经把源代码贴在我的原帖里了,据我所见,什么都没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 2014-05-02
相关资源
最近更新 更多