iphone应用程序分发版本包含一个bug

时间:2010-02-06 00:53:33

标签: iphone cocoa-touch debugging distribution

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


你好,

我的申请非常特别。几天前,我的应用程序被批准进入应用程序商店,但令我恐惧的是,我很快发现其中存在一个主要错误。我去了我的电脑,但是当运行代码时(在模拟器和设备上),这一切都完美无缺。我已经尝试了一切:重新编译并提交更新,清理所有目标,重新安装SDK等。

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

有人知道可能导致此错误的原因吗?我如何知道我的发行版本是否包含错误,而这个错误在调试版本中没有显示?

此致, BEN。

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


编辑:我通过做MrMage建议解决了这个问题。事实证明,这段代码确实是错误的原因。在调试器中运行时,'s'的宽度和高度属性始终为零,无论如何我都无法改变它。我正在调查为什么会发生这种情况。

- (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];

}

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

我还建议运行Clang(做一个Build&amp; Analyze)。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

在狂野猜测的标题下。

我会考虑您的开发环境与正常运营环境之间的任何差异。例如,在我的开发环境中,除了电话,我的iPhone默认为我的wifi。由于某些网络操作对时间和带宽敏感,因此可能是在3G /边缘上操作是问题。

我正在尝试考虑可能导致textviews缩放以保留文本但不显示文本的原因。如果没有任何东西适合,textview无法缩放以适应。这表明文本由空格组成,或者由于某种原因文本颜色的alpha为零。您是否设置了文本颜色/字体?