iPhone 发布版本的功能与调试版本不同

Posted

技术标签:

【中文标题】iPhone 发布版本的功能与调试版本不同【英文标题】:iPhone release build not functioning the same as debug build 【发布时间】:2009-08-31 17:44:51 【问题描述】:

在使用调试版本时,我的程序在 iPhone 模拟器和 iPhone 本身上都按照我希望的方式运行。但是,当我将其更改为发布版本时,它可以在 iPhone 模拟器上运行,但不能在设备上运行。我正在尝试使用计时器在屏幕上为球设置动画,如果球与屏幕边缘碰撞,球应该从侧面反弹。这适用于调试版本,但发布版本仅适用于模拟器而不适用于设备。在发布版本的设备上,球甚至不会移动。

我感觉这与从调试版本切换到发布版本时更改的优化级别有关。如果这是真的,我该如何更改我的代码以更好地适应优化级别?

视图控制器使用 initWithNibName: 调用,其中包含:

CGRect ballRect = CGRectMake(133, 424, 55, 56); 
newBall = [[Ball alloc] initWithFrame: ballRect];
[self.view addSubview: newBall];
[self setImage: [UIImage imageNamed: @"Red.png"]];

Ball *newBall 在接口文件中声明。球在屏幕上正确显示,所有版本的图像都正确。

当用户点击屏幕时,将调用移动球的计时器:

-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
    touch = [touches anyObject];
    touchPoint = [touch locationInView: self.view];
    dx = touchPoint.x - newBall.center.x;
    dy = touchPoint.y - newBall.center.y;
    newBallTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0/50.0 target: self selector: @selector(moveBall) userInfo: nil repeats: YES];

接口文件中也声明了CGPoint touchPoint、UITouch *touch、float dx、float dy和NSTimer *newBallTimer。

这是我移动球和检测碰撞的代码:

-(void) moveBall
       
    newBall.center = CGPointMake( newBall.center.x + dx, newBall.center.y + dy );

    // left boundary
    if( newBall.frame.origin.x <= 20 )
    
        dx = abs(dx);
       
    else if( newBall.center.x >= 280 )  
    
        dx = -abs(dx);
    
       

在设备上发布版本时,球不会移动。相反,它似乎被发送到屏幕底部并停留在那里。

非常感谢任何建议/解决方案/想法。 提前致谢!

【问题讨论】:

我猜你必须向我们展示代码。尽量减少代码,我们会更容易发现bug,有时你甚至会在这个过程中自己发现bug。 好吧,我已经发布了一些代码。希望这会有所帮助。 比较两个构建配置的差异。也许您在调试中定义了一些东西,但在发布中没有定义。模拟器并不总是正确的,所以不要考虑这个问题。 嗯……你有没有尝试在 moveBall 方法中设置断点?它是否按预期工作? 【参考方案1】:

您如何将版本构建到您的设备上?还是您的意思是 Ad Hoc 构建?

在任何一种情况下,您是否有任何 #define 或 #ifdef 代码块在您进行发布构建时可能被注释掉?

另一种可能性是在 NSAssert 中执行实际逻辑,然后在发布版本中关闭断言。当您关闭断言时,该断言中的任何代码都不会被调用。

【讨论】:

感谢您的回复。为了在设备上发布版本,我将活动 SDK 设置为 iPhone Device 3.0,并将活动配置设置为 Xcode 中的发布。我确实有#define 语句以及#include,但它们都没有被注释掉。我不使用 NSAssert。

以上是关于iPhone 发布版本的功能与调试版本不同的主要内容,如果未能解决你的问题,请参考以下文章

MAC M1开发实录---Xcode真机调试

强制通用应用在 iPad 上运行 iPhone 版本

Xcode 调试版本与发布版本

iOS 14.3 终于来了,连 iPhone 5S/6 也有更新!

iOS 14.3 终于来了,连 iPhone 5S/6 也有更新!

VSCode:终端使用与启动/调试器不同的nodejs版本