4

我正在 OS X 10.8 机器上使用 Xcode 4.6 开发应用程序。应用部署目标设置为 10.6,这是我们需要支持的。但是当我存档应用程序(编译、链接和嵌入资源+框架)并将其部署(也称为复制)到 10.6 测试机器时,它会因通用分段错误而崩溃。它在 10.7 上运行良好。

我无法在旧 Mac 上的 Xcode 中编译项目,因为该应用程序是使用较新的编译器构建的(它使用 ARC、隐式属性合成、新的 Objective-c 文字语法等)。它也不会进行类型检查,因为基础 SDK 是 10.8,并且它引用了 10.6 机器上的编译器不知道的一些 10.8 令牌。

关于如何调试应用程序的任何建议?

4

3 回答 3

2

我与这家公司/软件没有任何关系,但Deploymate是一款付费应用程序,它可以扫描您的应用程序的 SDK 使用情况,并在您调用旧操作系统版本上不可用的选择器和 API 时告诉您。这可以帮助您跟踪与 API 使用相关的异常和崩溃。

于 2013-04-08T15:16:32.373 回答
1

您很可能使用了一个或多个在 10.6 上崩溃的 10.7+ API。使用 10.8 目标 SDK,您允许对该 SDK 中可用的所有函数调用。但是,应用程序绑定较晚,因此当您实际上不调用这些函数时,它不会崩溃。您需要与此类似的显式检查(此处为全屏功能):

#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_6
if (runningOnLionOrLater) {
    [mainWindow setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary];
    [toggleFullscreenItem setHidden: NO];
}
#endif

确定当前版本的一种方法是:

    int macVersion;
    if (Gestalt(gestaltSystemVersion, &macVersion) == noErr) {
        runningOnLionOrLater = macVersion > MAC_OS_X_VERSION_10_6;
    }

为了调试有问题的调用,只需将基本 SDK 设置为 10.6,XCode 应该标记那些在那里不可用的功能。

于 2013-04-08T15:15:45.163 回答
0

虽然对此没有真正好的解决方案(我在不同的 macOS 版本上看到了不同的行为),也没有办法简单地模拟旧的 macOS 版本,但如果你有一台机器备用:

可以使用外部 HD,对其进行分区并安装不同的 macOS 版本。它们都可以启动,并且为每个操作系统版本重新启动机器是一个问题(痛苦)。

于 2017-12-25T09:04:14.943 回答