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

Posted

技术标签:

【中文标题】使用最新的 xcode/OSX 版本构建项目时出现奇怪的应用程序行为【英文标题】:Strange application behavior when building a project with the latest xcode/OSX version 【发布时间】:2012-06-24 09:29:57 【问题描述】:

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

【问题讨论】:

您在运行应用程序之前尝试过“验证设置”吗? 是的,我做到了。它对结果没有影响。 做一个干净的构建,然后尝试(删除项目的所有派生数据,使用管理器) 嗯,这些我都试过了。我认为这是比这更基本的东西。 请在 iOS 设备上运行您的应用,重新创建导致崩溃的步骤,并附上崩溃日志。 【参考方案1】:

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

希望您检查 ARC 信息

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

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

Xcode-->preferences-->Documentation check installed core Libraries (or) install it 像那样 Xcode--> 首选项-->组件检查是否安装了所需的组件

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

【讨论】:

这是一个 OSX 应用程序,而不是 iOS,所以我不在模拟器中运行。我也不使用 ARC。 OP 没有指明 ARC。您是如何推断 ARC 参与其中的? 不使用 ARC 并不意味着您的 Xcode 项目没有得到“升级”或更改为使用垃圾收集或 ARC。您的项目设置使用什么编译器?您的 PDFKit 安装也可能远程损坏。我还想知道您的项目设置是什么:Objective-C Automatic Reference Counting Objective-C Garbage Collection Compiler for C/C++/Objective-C 正如我在问题中所说,我尝试在与我无关的另一台机器上构建项目,结果相同。所以我知道这不是损坏的库的问题。该项目最初是在 xcode3 中创建的,当我迁移到它时,我只是将它导入到 xcode4 中。除非明确需要,否则我不会更改该项目中的任何内容。使用的编译器是 Apple LLVM 3.1(也尝试使用 LLVM GCC 4.2)。 LLVM 3.1 中 ARC 和 GC 的设置分别设置为“No”和“Unsupported”。【参考方案2】:

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

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

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

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

【讨论】:

当然我的客户肯定没有这个问题!!!首先,我有几千个,他们抱怨每一个小细节:)。其次,正如我所说,问题不会发生在我的机器上,它使用的是在 10.7.4 之前编译的旧二进制文件,因此提交的应用程序是可以的。我在另一台机器上验证了这些结果。剩下的唯一因素是,在 10.7.4 之前编译的应用程序在任何地方都可以正常工作,而我现在在两台不同的机器上用 10.7.4 编译的应用程序在任何系统上都不能正常工作。 不同/损坏的库会如何影响这一点? Cocoa 框架不是静态链接的。所以目标机器上的库应该是最重要的,不是吗? 一种可能的理论是库的地址已更改,并且您在某处有一个不正确的指针,但在 10.7.4 之前没有造成任何伤害,现在它确实如此。可能还有其他我现在想不到的解释。无论哪种方式,找到一个可重现的场景,并从您的应用程序中删除所有看似无关的内容,直到您看到正在发生的事情。当只剩下几行代码时,就会很清楚:这是您的错误,或者是 Apple 的错误(在这种情况下,您提交了一个雷达并尝试在您的代码中解决它)。 是的,我通常会这样做。我的问题是我遇到的问题是与 PDFKit 框架中的 PDFView 组件交互时出现的视觉故障。从屏幕上删除这些组件自然会解决问题,但几乎不能证明什么。 PDFView 中的内部绘图机制似乎存在问题。我将尝试创建一个演示它的基本应用程序,不确定它是否能让我更接近找到解决方法。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

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

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

感谢您的回复。

【讨论】:

以上是关于使用最新的 xcode/OSX 版本构建项目时出现奇怪的应用程序行为的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2010 中构建任何 ffmpeg 项目时出现错误链接 2001 libavformat.a(tls_schannel.o)

在元素标签中使用 twitter 引导属性时出现 *** 错误

在 iOS 中构建 Flutter 时出现构建错误

将 Rails + mongoid 与嵌入式 shopify 应用程序集成时出现问题

尝试注册 ImageIOFactory 时出现 ITK 构建错误

尝试在 IntelliJ 上构建 gradle 项目时出现错误代码 B0