发布的应用程序显示空白屏幕,但不在调试器中

问题描述:

我有这个应用程序,最初是为iOS 2.x编写的。 我最近需要添加一个小功能,并且*制作应用程序,它在没有任何问题的iOS升级过程中幸免于难,符合iOS5。 只有在测试并提交应用程序后,我才从300,000个用户群获取报告,该应用程序无法在iOS 4.2.1的第二代iPod Touch上使用。我在第一代iPod touch上测试过,而且运行得很好。 有趣的是,现在我终于找到了第二代iPod,在设备上的调试模式下,该应用程序运行良好。只有当我通过iTunes同步AdHoc时,我会得到与通过App Store下载应用程序相同的症状:UIImageView加载图像,但几秒后,图像消失,留下空白屏幕。发布的应用程序显示空白屏幕,但不在调试器中

什么是最好的方法弄清楚,在代码中哪里出了问题?

感谢您的帮助

更新:我已经要求苹果来帮助我在这里。到目前为止,这是通信的相关部分:

“通常只会在商店或审阅期间显示的问题是由于Xcode如何配置为在Debug vs Release中构建您的应用程序(即构建配置用于提交到商店)。

要确保你正在测试的确切构建应用程序的您提交到App Store,你可以创建一个归档的身材,你既可以测试,并提交在Xcode 4中,产品 - >存档会将你的应用程序版本存档到Organizer窗口中。

你可以通过“共享...” f作为IPA,从Xcode的Organizer窗口中,然后使用iTunes安装IPA。

(仅供参考:“分享...”您使用iTunes安装的存档版本是测试应用程序的首选方式,Xcode以与App Store稍微不同的方式安装应用程序。它的速度更快,但对于最后的测试,通过iTunes安装是最接近于用户将体验)“

和:

”。因此,我的建议是,发生在你的代码的地方,你“想断言“是可疑的。在你的代码监控进程中放置几个​​NSLog语句,也许输出像你的UIImageView的帧大小等信息。“

虽然我明白,这显然是唯一的出路,我有点震惊的意思所有这一切:

正如你应该拥有和测试设备和操作系统的组合,或只是在你的客户把它和看到的东西出问题开发商

+0

你检查了崩溃日志,看看有没有写出来吗? – 2012-03-05 13:36:18

+0

与你的问题无关..但只是想知道你有300.000+用户群运行它一个 Shubhank 2012-03-05 13:42:36

+0

@Nick Bull:该应用不会崩溃。它只是显示一个空白的视图,而不是带有图像的视图。 – Sjakelien 2012-03-05 14:18:43

我不记得在哪里,但我听说这个问题与UIImageView之前有关。我记得问题是他们在后台线程上实例化了UIImage。由于NSLog()影响线程我可以想象,在使用日志的调试模式下,多线程的任何影响都可能得到缓解。但是,在发布模式下,日志语句被剥离,可能会发生错误。

+0

我对此感到兴奋,因为它非常有意义。但是,当我对所有的NSLog进行了评论(并检查它们是否确实已从控制台中消失)时,该应用程序只能在调试模式下在设备上正常运行。 – Sjakelien 2012-03-06 08:20:38

+0

我还没有听说过有关问题,这些问题与是否从XCode启动的跳板启动相关。 – NJones 2012-03-06 09:19:48

+0

@Sjakelien你是在后台线程上创建'UIImage'还是'UIImageView'? – NJones 2012-03-07 02:48:23

我刚碰到类似的问题。原来我是在混合和匹配NSManagedObjectContext对象。我不知道为什么这在调试器中起作用,并且在我从跳板启动时破坏了。

我能够通过使用Xcode中的“Product-> Attach to Process”来调试我在模拟器中启动的应用程序。

希望能帮助别人。

我有一个类似的问题:在开发中运行良好,但Product/Archive/Distribute/Ad Hoc ipa文件无法正常运行。由于@CornPuff我开始挖了我的CoreData的东西,解决了这个问题:

我有一些像这样的代码:

dbMethods * myDbMethods = [[dbMethods alloc] init]; 
aUser *local_db_user = [myDbMethods getTopRecord]; 

if (local_db_user != nil) { 

    lbl_user_name.text = [NSString stringWithFormat:@"Welcome %@", local_db_user.user_name]; 

在发展始终把像欢迎约翰·史密斯在标签中。在存档文件中,始终将Welcome(空)放在标签中。注意:NSManagedContextObject是在getTopRecord方法中创建的。

我不得不在我需要我的aUser的方法中创建NSManagedObjectContext对象myDb;发送的方法,我现在叫,getTopRecordSafe

NSManagedObjectContext *myDb = [[[dbManager alloc] init] getManagedObjectContext]; 
dbMethods * myDbMethods = [[dbMethods alloc] init]; 
aUser *local_db_user = [myDbMethods getTopRecordSafe: myDb]; 

if (local_db_user != nil) { 
    lbl_user_name.text = [NSString stringWithFormat:@"Welcome %@", local_db_user.user_name]; 

最后,我发现this article有助于理解(?)为什么会这样。 Objective-C当然是C语言。

如果有人在Xcode或Jetbrain的AppCode,或任何其他iOS IDE复选框,上面写着创建并运行,你会在发展中要发送给苹果,这里的同一个文件的知道请让我们知道。 :-)