如何为旧版本的 Mac OS X 调试应用程序?

lms*_*lms 5 macos xcode cocoa gdb lldb

我正在 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 令牌。

关于如何调试应用程序有什么建议吗?

Mik*_*hke 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
Run Code Online (Sandbox Code Playgroud)

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

    int macVersion;
    if (Gestalt(gestaltSystemVersion, &macVersion) == noErr) {
        runningOnLionOrLater = macVersion > MAC_OS_X_VERSION_10_6;
    }
Run Code Online (Sandbox Code Playgroud)

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