4

我有一个使用 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

4 回答 4

1

只需重置您的模拟器然后尝试。

我希望你检查 ARC 信息

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

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

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

在你的项目中检查这些东西。

于 2012-06-28T12:53:09.587 回答
1

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

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

无论如何,消除所有可以消除的参数以简化问题。解构应用程序直到问题不再出现,或者在不同的项目中重构应用程序直到问题再次出现。

这听起来很糟糕,但你最终会到达那里,有耐心和毅力:)

于 2012-06-28T16:29:44.083 回答
1

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

对于 EXC_BAD_ACCESS,XCode 分析会给出有用的信息。

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

于 2012-06-29T04:40:27.830 回答
0

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

首先,我在我的 Lion 10.7.4 上编译了 Apple 的示例“PDF Annotation Editor”项目,虽然功能与我的项目明显不同,但它也表现出与我的项目在使用 10.7.4 编译时的 PDFView 显示类似的故障

然后我开始在新硬盘上构建一个全新的干净系统。安装 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 提交票证,这将是一个难以解释的案例。

感谢您的回复。

于 2012-07-11T11:34:36.750 回答