App Store的代码与iPhone 3G上的Xcode / Device代码不同
我不知道如何解释这一个。 我昨天提交了一个应用程序更新到商店。 第一个截图是一个特定的屏幕如何运行在我的iPhone 3G上,运行iOS 4.2.1,从App Store下载:
下面的第二张图片是完全相同的代码 ,自从原始提交以来,没有任何更改,运行在通过Xcode连接的完全相同的设备上。
该应用程序运行正常 ,我的iPhone 4,运行iOS 5,从App Store下载。 所以回顾一下:
- 从App Store获得的应用程序在iPhone 3G上存在缺陷
- 从App Store获得的应用程序在iPhone 4上很好
- 通过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?