我们有一个(运行iOS 1.5-1.7的iPad)应用程序,希望用户填写表单并按下按钮上传数据。然后,应用程序使用VPN连接到运行MS-SQL Web服务的组织后端服务器,并上载数据。该应用程序在连接和上载过程中从未出现任何问题,直到在续订分发证书后重新编译它。
现在由Mac OSX(10.9)XCode(5.1.1)生成的.ipa - >产品 - >通过iTunes等将.ipa存档并上传到设备,对数据输入部分运行没有任何问题,但在按下服务器上传按钮时立即崩溃。我不会详细介绍连接和Web服务等,因为当ipa由Xcode创建时 - >产品 - >在连接设备的情况下运行,.ipa将传输到设备,在连接Web服务和上传时没有问题,
因此,XCode生成的代码 - >产品 - >运行或模拟(连接设备)在进行网络连接等时运行良好,但Product-> Archive生成的代码没有任何改变,在进行网络连接和上传时失败。
答案 0 :(得分:2)
除非使用XCode更改了默认值 - >产品 - > Run将使用Debug配置构建。但是,Archive会构建应用程序的Release配置。调试版本具有可以隐藏问题的更改并不罕见。记忆的时间和处理通常是不同的。
使用“运行”命令时,可以部署发布版本。要做到这一点:
这至少应该允许您查看更详细的调用堆栈信息。
另一种选择是从设备中检索崩溃日志。您可以通过将设备(已崩溃)连接到XCode并转到Window - >来执行此操作。组织者。
进入组织者后,选择已连接的设备并转到设备日志。任何崩溃都应记录在那里。如果你按下Re-Symbolicate按钮,你会看到一个可用的callstack,它将为你提供一个起点。
根据其他信息进行更新
因此崩溃日志中的这两行是您的起点:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Crashed Thread: 0
他们表示该应用已触发EXC_BAD_ACCESS异常。如果您访问未初始化或已释放的对象,则会发生这种情况。如果在对象上调用不受支持的选择器,也会发生这种情况。它还表明它发生在线程0上,它基于日志指的是包含该块的堆栈
[RootViewController uploadCompletedSlips] (RootViewController.m:120)
这意味着您的起点应该是 RootViewController.m 中的第120行,它应位于 uploadCompletedSlips 方法中。
除了检查代码是否有任何明显错误之外,我建议按照Rob Thread 1 : EXC_BAD_ACCESS (Code = 1, address = 0x30000008)的答案中的步骤进行操作。这些步骤的摘要是:
通过静态分析器运行代码(Xcode“产品”菜单上的“分析”)并确保不提供任何警告。
启用“异常断点”,查看是否标识了作为问题根源的特定代码行。有时,这可以识别代码行,而无需通过查看堆栈跟踪来反向设计发生错误的位置。
暂时开启僵尸。您可以在“设置配置”设置中看到此设置。
请参阅Ray Wenderlich文章http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1。
答案 1 :(得分:1)
以下是问题的答案
“我怀疑问题出在ASIHTTPRequest requestWithURL行。由于它已被优化,看起来在发布版本中存在先前的问题。来自adamsiton对stackoverflow.com/questions/9123975 / ...的回答:”对我有用的是关闭以下两个文件的优化:ASIFormDataRequest.m ASIHTTPRequest.m通过选择目标项目来执行此操作,在“构建阶段”选项卡的“编译源”部分中选择该文件;并添加-O0(国会大厦O零)。“
就是这样,它工作正常!这是一个很大的帮助!不知道如何欣赏你的知识,最重要的是愿意提供帮助。再次感谢!