【问题标题】:Mac OS : runing app with old base SDK on recent version of OSMac OS:在最新版本的 OS 上使用旧的基础 SDK 运行应用程序
【发布时间】:2012-04-25 13:32:41
【问题描述】:

这听起来可能是一个新手问题,但我是 Mac OS 的新手,

这里我有一个使用旧 Base SDK 编译的应用程序,比如说 10.5 版本,它在 Mac OS 10.5 版本上运行没有任何问题。

在最新版本的 Mac OS 10.6、10.7 上,它在某些情况下无法正常工作。

旧应用程序应该在新版本的操作系统中保持兼容,基本上我想知道Apple如何在新版本的Mac OS中保持与旧应用程序的兼容性?

【问题讨论】:

  • 它应该可以正常运行 - 它可能是代码中的一个或多个潜在错误,仅在较新的操作系统中出现
  • 你能举个例子吗?以及 mac 如何处理应用程序的向后兼容性?
  • 想一想 - 当您将操作系统升级到较新版本时,所有旧应用程序是否突然停止工作?
  • 我知道他们不是!我对这个问题的技术方面很感兴趣,即 Apple 如何处理向后兼容性
  • 嗯,不打破它(通常)。他们只是将所有现有功能留在框架中,并确保它继续具有相同的语义,即使他们还向框架添加了新功能。换句话说,您并没有提出明确的问题。

标签: objective-c xcode macos osx-snow-leopard


【解决方案1】:

Apple 通常会非常小心地确保其 API 的向后兼容性,以便在升级操作系统时旧应用不会中断。他们不会删除 APIS,只是将它们标记为已弃用。

很可能您的应用程序正在做一些不受支持的事情,或者由于 Apple 更改了其 API 的实现而暴露了其中的错误。

我想不到一些可能的原因

  • 您的应用使用已更改的 Apple 私有 API。
  • 您的应用将一些无效参数传递给其实现已更改的 API(一个示例可能是使用 int,其中 API 需要一个 NSInteger)。
  • 您的应用无意中利用了一个现已解决的错误(例如,垃圾收集和 NSOperationQueues 存在于 10.5 中,但仍处于测试阶段)。

尝试使用当前 Xcode 针对最新 API 重新编译您的应用程序,同时打开 -Wall 警告标志并启用静态分析器。这将告诉您在哪里使用了已弃用的 API、关于参数和返回类型的错误假设以及许多其他问题。

【讨论】:

  • 好的,知道了,感谢您提供的详细信息,这是我想听到的。还有一个问题,我将其标记为答案。当您说针对最新 API 进行编译时,您的意思是设置最新的可用基础 SDK 吗?在那种情况下,我会收到很多折旧的警告。难道我不使用基本 10.5 SDK 编译并分别修复每个 Mac OS X 上的问题吗?
  • @deimus:抱歉,是的,最新的基础 SDK 将是 10.7。这只是为了让您确实收到所有弃用警告。如果您想单独处理它们,请使用最新的基础 SDK,但部署目标为 10.5,或者针对 10.5 SDK 进行编译
猜你喜欢
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2022-08-06
  • 2012-04-27
  • 1970-01-01
相关资源
最近更新 更多