从App Store下载时,为什么我的应用程序会在iPhone 3G上绘制错误?

时间:2011-12-21 14:38:13

标签: iphone ios xcode cocoa-touch app-store

我的应用程序在设备的调试模式下工作正常。我将应用程序发送到App Store,除iPhone 3G外,它运行正常。

我的测试(调试)设备是iPhone 3G,它在调试中运行良好,但是当我下载应用程序并通过App Store安装它时,它也无法在我的iPhone上运行。

我在代码中有一些NSLog,并认为这可能是问题,但即使在删除NSLog之后,iPhone 3G也会发生同样的事情。

问题是我使用以下代码:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    mouseSwiped = YES;

    UITouch *touch = [touches anyObject];   
    CGPoint currentPoint = [touch locationInView:self.view];
    currentPoint.y -= 20;


    UIGraphicsBeginImageContext(self.view.frame.size);
    [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
    CGContextBeginPath(UIGraphicsGetCurrentContext());
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    lastPoint = currentPoint;

}

并且在iPhone 3G上这不正确。它只是做水平线。这在其他设备上运行良好。

这里可能出现什么问题?

2 个答案:

答案 0 :(得分:3)

在Xcode 4.2中,LLVM编译器存在一个已知错误,当​​在ARMv6体系结构上使用CGPoints等时会导致错误的结果。这在this thread on the Apple Developer Forums中有详细说明。 ARMv6是用于iPhone 3G之前的设备(例如你的iPhone 3G),这就是你在那里看到它的原因。

该错误与应用程序的ARMv6版本的错误Thumb代码生成有关。我在回答here中描述了如何选择性地禁用Thumb以用于旧架构(同时保留未受影响的ARMv7构建的性能)。

有些人说Xcode 4.2.1有一个固定版本的LLVM可以解决这个问题,但我无法确认。this Apple Developer Forum thread末尾附近阅读gparker的评论看看这个问题已经解决了。

答案 1 :(得分:2)

我遇到过类似的问题。我发现很多这样的麻烦都是由Xcode针对armv6架构进行的错误优化引起的。

In" Build Settings" - > " Apple LLMV编译器3.0 - 代码生成" - > "优化等级"你肯定有发布版本的优化设置。更改它并将其设置为NONE,因为调试版本是肯定的。

就是这样。如果问题是我认为的那样,那就是解决方案。您可以测试此解决方案构建Adhoc应用程序。