使用最新的xcode / OSX版本构建项目时的奇怪应用程序行为

时间:2012-06-24 09:29:57

标签: objective-c xcode macos cocoa xcode4.3

我有一个使用xcode用Objective-C / Cocoa编写的OSX应用程序。该应用程序在App Store上完成,测试和销售。

我还没有在这个应用程序上工作一段时间,最近,我在我的OSX 10.7.4上使用xcode 4.3.3重建它,我注意到它虽然构建得很好,但在运行时会出现一些非常奇怪的视觉故障以前从未见过的应用程序偶尔会在关闭应用程序时得到EXC_BAD_ACCESS。所有这些似乎都与我正在使用的PDFKit框架有关。我无法调试这些问题,因为毛刺只是可视化的(我无法检查代码),EXC_BAD_ACCESS异常来自内部分配的与我的代码无关的对象。

代码本身没有改变,我尝试了以前的代码修订版,现在它们都表现出相同的奇怪行为。我尝试运行一个旧的二进制文件我有应用程序(几个月前编译),它的工作正常。然后我尝试使用之前版本的xcode构建它,低至4.2.1(当我将应用程序提交到应用商店时,我知道这是正常的)并且问题仍然存在。

然后我怀疑这可能是我的环境特有的东西所以我在不同的机器上使用xcode 4.3.2和OSX 10.7.4构建了项目。同样的结果,问题仍然存在。

所以现在我怀疑它与OSX 10.7.4更新有关,因为这是现在和我能够生成一个良好的应用程序构建之间的最后一件事。我很困惑下一步该做什么以及如何确定这个问题的原因。我有一个旧的二进制文件工作正常,我有一个新编译的二进制相同的代码修订版有问题。

我可以从这些二进制文件的区别中获得有用的信息吗?我该怎么做才能确定这些问题的原因?我接下来可以尝试什么?

谢谢!

注意(更新):我在上面说过,但我想确保它清楚。这是Mac OSX Cocoa应用程序,而不是iOS。

4 个答案:

答案 0 :(得分:1)

重新启动你的模拟器,然后尝试。

我希望您查看ARC信息

转到您的项目目标设置构建设置 - >搜索路径 - >始终搜索用户路径设置为是。

并检查彼此不同的所有类变量。

的Xcode - >首选项 - >文档检查已安装的核心库(或)安装它 像那样 xcode中 - >首选项 - >组件检查是否已安装所需组件

检查项目中的这些内容。

答案 1 :(得分:1)

您确定您的客户没有遇到同样的问题吗?既然你已经在不同的机器上测试了应用程序,你可能没有安装损坏的库(除非你没有从头开始安装但是使用了一些迁移工具?),所以这可能不是问题。

对我来说,最合乎逻辑的解释是你的客户也有这个问题,但他们还没有报告。在这种情况下,您可能存在内存问题,并且有一些技术可以攻击它。

在任何情况下,请删除所有可以消除的参数以简化问题。解构应用程序,直到问题不再发生或在不同的项目中重建应用程序,直到问题再次发生。

这听起来像是一个讨厌的人,但你最终会以耐心和毅力到达那里:)

答案 2 :(得分:1)

首先,您需要检查并验证构建日志中是否存在可疑的编译器警告。

对于EXC_BAD_ACCESS,XCode分析将提供有用的信息。

您可以尝试10.6或10.5(需要手动安装)SDK。或者将部署目标限制为10.5或10.6。

答案 3 :(得分:0)

我将回答我自己的问题(因为上述答案都没有真正回答),所以有类似问题的人可能会有一个提示。我无法理解为什么会发生这种情况,但我很确定这不是我的代码的问题,而是苹果方面的一些小问题。还有一种解决方法。

首先,我在Lion 10.7.4上编译了Apple的示例“PDF注释编辑器”项目,虽然功能明显不同于我的项目,但它也显示了与我的项目在使用10.7编译时所做的PDFView显示类似的故障。 4

然后我开始在新硬盘上构建一个 fresh clean 系统。 Intalled Snow Leopard并升级到10.6.8并且安装了xcode。编译我的项目(源代码总是完全相同),一切正常。在编译的项目中没有出现任何问题。

将我的OSX更新为Lion 10.7.4和xcode 4.3.3,相同的源代码。我编译之后就出现了问题。我很确定,如果我先尝试10.7.3,我就不会看到问题,因为我记得它只是从10.7.4开始,但Apple没有提供任何合理的方式来更新到10.7.3或降级到它之后安装了10.7.4(对它们感到羞耻,对开发人员不太友好!)。

因此,问题出现在10.7.4。

然后我安装了10.7.5的预发布版本。这是唯一被改变的,相同的源,相同的xcode。令我惊讶的是,编译后的代码现在完美无缺,10.7.4中出现的问题现在已经消失了!

所以我的解决方法 - 在进一步处理项目之前等待10.7.5版本。希望Apple将来不会与Mountain Lion搞砸。我不认为我会尝试进一步调试它或向Apple提交一张票,这将是一个难以解释的案例。

感谢您的回复。