App Store的代码与iPhone 3G上的Xcode / Device代码不同

我不知道如何解释这一个。 我昨天提交了一个应用程序更新到商店。 第一个截图是一个特定的屏幕如何运行在我的iPhone 3G上,运行iOS 4.2.1,从App Store下载:

下面的第二张图片完全相同的代码 ,自从原始提交以来,没有任何更改,运行在通过Xcode连接的完全相同的设备上。

该应用程序运行正常 ,我的iPhone 4,运行iOS 5,从App Store下载。 所以回顾一下:

  1. 从App Store获得的应用程序在iPhone 3G上存在缺陷
  2. 从App Store获得的应用程序在iPhone 4上很好
  3. 通过Xcode连接的应用程序在iPhone 3G上很好

这些并不是唯一的graphics不一致,但它们都与自定义的UITableViewCell代码有关,它不会在每个目录中将标签推到几个像素,而且从第一天开始一直工作正常。 我已经提交了一份关于idp-dts的报告,我正在等待他们的回复,但由于候补名单通常是一周或更长时间,所以我宁愿自己解决。

任何帮助/提示/猜测将非常感激!

iPhone 3G运行我的应用程序的App Store版本:

在这里输入图像说明

运行Xcode的iPhone 3G连接版本的我的应用程序:

在这里输入图像说明

编辑:这听起来非常类似于这个问题: 与LLVM和任何优化的build设导致应用程序在启动时崩溃与我联系的客户是使用第二代iPod Touch,唯一的其他硬件,而不是使用armv6的iPhone 3G。

编辑2:这是代码左侧的颜色栏边界设置的代码段。 在代码中似乎没有任何可疑的事情发生:

- (void)layoutSubviews { CGRect colorViewFrame = self.bounds; colorViewFrame.size.width = 6; colorViewFrame.origin.y += 3; colorViewFrame.origin.x -= 1; colorViewFrame.size.height -= 8; colorView.frame = colorViewFrame; ... } 

所以这就是我在Build Settings下find的东西:

在这里输入图像说明

其中,编译器优化采取了一两个类,是有道理的。 为了debugging目的,设备上的代码debugging应该保持其原始状态,并且发布的代码应该被优化以提高速度和效率。

所以这里有趣的部分。 将我的debugging设置更改为最快,最小:

在这里输入图像说明

在Xcode中运行时,导致在我的设备上发生问题。

在提交雷达或作出任何轻率决定并向App Store提交未经优化的代码之前,还有什么我应该考虑调查的? 编译器优化是否真的是布局问题的根本原因?

编辑:如果优化级别是问题,为什么优化的代码在我的iPhone 4上正常运行,但在我的iPhone 3G上不正确?

编辑2:这个问题听起来非常类似于这个答案: 与LLVM和任何优化build设导致应用程序在启动时崩溃

编辑3:从苹果雷达回听,这是一个已知的问题。 将在未来版本的Xcode中得到修复。 感谢所有的帮助家伙!

我有同样的问题,并find了解决问题的方法。

我发现在优化和未优化的代码上做了一些NSLog之后,CGSize在第一次访问高度参数后变得腐败了。

所以这个代码是在我的UITableViewCell子类layoutSubviews:

  NSLog(@"size.height %f", size.height); NSLog(@"2nd access size.height %f", size.height); _titleLabel.frame = CGRectMake(kLeftSpacer, kSpacerHeight, kTitleWidth ,size.height); NSLog(@"after setFrame size.height %f", size.height); 

在日志中给出了以下内容:

size.height 19.000000

第二次访问size.height 56.00000

setFrame大小后,高度56.00000

所以,我的解决方法是使用中间身高标识符:

 CGFloat height = size.height; NSLog(@"size.height %f", size.height); _titleLabel.frame = CGRectMake(kLeftSpacer, kSpacerHeight, kTitleWidth ,height); NSLog(@"after setFrame size.height %f", size.height); 

一切都很好

我想不像closures优化一样安全,但我的应用程序的其余部分似乎很好…总是最好testing版本构build,然后!

如果要在表格视图单元格中添加和布置视图,则应将其添加到单元格的contentView并在所有布局代码中使用self.contentView.bounds而不是self.bounds

您还需要调用[super layoutSubviews]否则会发生许多奇怪的事情。

答案是为armv6编译添加编译器标志-mno-thumb,而不是为armv7编译添加它。

Howto可用: 在Xcode 4中有没有办法编译ARM而不是Thumb?