应用程序在模拟器和测试设备上工作但从应用商店下载后崩溃

时间:2011-10-20 15:20:08

标签: iphone objective-c xcode4 crash app-store

我有一个应用程序,我只是做了更新和上传,一切都在模拟器和在设备上测试时很好。但是,从appstor下载时,它会在特定情况下崩溃。

我开始在这里找到问题的线程:My app crash after downloading it from appstore现在我需要解决这个问题

问题似乎如下:

10  CoreFoundation  0x3614f4c4 +[NSException raise:format:] + 28
11  Foundation      0x34514e28 -[NSURL(NSURL) initFileURLWithPath:isDirectory:] + 68

然而,挑战在于我不在程序中使用“initFileURLWithPath”,因此我不知道该寻找什么。我正在查看所有的内容,但没有找到任何看起来像问题的东西。

我从之前版本更改的内容是:

  • 新的背景图片,通过xcode添加
  • 一种新的快速游戏功能,包括一个新按钮和一些新功能。我已经检查了所有这些。

这里真正的问题是如何找到它,因为它只是从appstore下载时才出现问题。顺便说一句,我知道当我按下quizapp中的“错误”按钮时它会崩溃。这很好,但我仍然无法弄清楚出了什么问题。

任何人都可以给我一些提示如何处理这个奇怪的问题,并解释一下如何在测试设备上完美运行,但不是来自appstore?顺便说一句,我该怎么测试呢?

提前致谢:-)

=============================================== =====================

我想我发现了这个问题。当我在崩溃发生时我是新的,我检查了那个模块并发现了一些有趣的东西然后我在现场设备上测试了声音的转动,问题就消失了。打开声音导致了撞击。

代码是:

if (sound == YES) {
    //==== PLAY THE LOOSING SOUND ====//
    // Form a URL to the sound file, which in init using the Path
    NSBundle *mainBundle = [NSBundle mainBundle];
    NSString *filePath = [mainBundle pathForResource:@"wrong2" ofType:@"wav"];
    NSURL *aFileURL = [NSURL fileURLWithPath:filePath isDirectory:NO];

    // Create a sound ID, 
    SystemSoundID myID;
    // Register the sound
    AudioServicesCreateSystemSoundID((CFURLRef)aFileURL, &myID) ;
    // Play the sound!
    AudioServicesPlaySystemSound(myID);
}

代码行是:

NSString *filePath = [mainBundle pathForResource:@"wrong2" ofType:@"wav"];

我不明白的是资源文件夹中存在“wrong2.wav”,但仍然存在问题?

=============================================== =====

我刚刚发现“wrong2.wav”文件没有出现在正确的目录中,但在xcode4中看起来仍然是正确的。我已将该文件的新版本复制到正确的目录,在xcode中删除该文件并将其重新复制到xcode中。

只是不知道如何测试。

=====问题解决了======= 问题是我从另一个目录而不是应用程序所在的目录中导入了wav文件。

2 个答案:

答案 0 :(得分:2)

我可以告诉你,我对图形和未初始化的值有类似的体验。最后我发现在发布模式下编译,但使用我的开发证书允许我在我的设备上重现问题,让我调试它。我很快发现了这个错误。看似不同的库或优化用于发布模式编译。我知道在提交到appstore之前,只有在发布模式下编译时才养成测试习惯。

我不知道你的具体错误建议什么。

答案 1 :(得分:2)

您可能没有直接调用[initFileURLWithPath:],但是您是否在应用程序中的任何位置加载文件,而其他方法调用可能正在调用它(例如,[UIImage imageNamed:])?如果是这种情况,请浏览已编译的Release IPA(右键单击,浏览包)并验证您认为应该存在的所有文件。

如果您要将文件下载到要打开的设备上,请确认它们实际上是从服务器下载的(可能是SIM卡和您的设备正在缓存某些内容)。


要记住的一件事是Xcode中的文件夹/组不一定反映硬盘驱动器上项目的文件夹结构。将项目复制到Xcode中的组不会将其复制到该文件夹​​。

此外,在编译期间整个文件夹层次结构变得扁平化,因此在MainBundle中根目录中的所有内容(无文件夹),因此在开发时请记住这一点。

至于测试,您是否尝试从设备中完全删除应用程序(并重置模拟器)并重新添加?在部署时,Xcode喜欢采用快捷方式和缓存很多东西,所以偶尔清理它是件好事。