混淆如何使osx app向后兼容以及如何测试它们

Jos*_*osh 19 sdk xcode cocoa backwards-compatibility

阅读苹果SDK指南后 https://developer.apple.com/library/mac/#documentation/developertools/conceptual/cross_development/Overview/overview.html

我仍然对如何使mac app向后兼容以及如何正确测试它们感到困惑

我有一个应用程序,我运行它并在Mountain Lion 10.8上测试它没有任何问题,但我想让这个应用程序向后兼容,以便其他用户可以在Mac 10.6 - 10.7机器上运行它.

  1. 我有一个苹果开发者ID,我可以下载的10.7和10.6的旧版本,但问题是,我当前正在运行10.8 2011的MacBook Air,这是唯一的苹果机,我有.我可以使用vmware或parallels测试10.7和10.6吗?

  2. 在我的项目设置中,我将目标部署设置为10.6(因为我希望10.6个用户运行我的应用程序),但是我应该将我的SDK设置为10.8或10.7吗?如果我将SDK设置为10.8但将目标部署设置为10.6,如​​果我修复了所有xcode警告,它将在10.6上成功运行吗?

  3. 从SDK下拉,我只能设置为10.8或10.7,但缺少10.6,我该如何解决?

提前致谢

Rob*_*ier 44

我在10.8盒子上开发并支持10.5.就在几个月前,我们放弃了10.4 PPC支持,而我仍在清理一些特定于10.2的代码.这可能会有点咆哮,但我已经做了很长时间的旧版本.我对此事有一些看法.

  • 无论Apple在他们的文档中说什么,如果你想支持10.6,那么使用10.6 SDK构建.不要依赖分销目标.
    • 我与Xcode工程师进行了这次讨论,虽然他们坚持使用最新的SDK,但他们仍然坚持使用最新的SDK,他们也承认这样做通常是疯狂的.如果您针对10.8 SDK构建并将部署目标标记为10.6,则不会收到使用 10.6上不存在的方法的警告.你会发现你使用了一种不存在的方法的唯一方法是,它可能会在10.6上运行时给你带来奇怪的错误.那太疯狂了.
    • 请记住,发送未知选择器时OS X不会崩溃.它只是中止当前的runloop.因此,在iOS上崩溃应用时,更难以追踪错误.
    • 当然,你可以做弱链接.谈论危险....是的,有几次这是有用的,但如果你没有正确地做,编译器不会给你任何警告.如果我要像这样做弱链接,我会采用另一种方式,链接旧SDK并将新函数的原型复制到我的实现中.这样我就可以记录每个函数,我认为我会弱化链接.
  • 下载旧的SDK并将它们符号链接到您的Xcode发行版中.
    • 小心翼翼地保护他们.Apple每次升级Xcode时都会尝试删除它们.制作自己的副本并将其粘贴在/ SDK或远离Xcode的其他地方.我提供了一个名为fix-xcode的脚本来自动管理符号链接.我是否因为他们不遗余力地删除我的旧SDK而对Apple感到痛苦?我是.
  • 您可以合法地在VM中运行10.6 Server.您可以合法地在VM中运行10.7+ Desktop.这些是测试代码的好方法.
    • 或者你可以做我做的事情并拥有一小堆旧MacBook,每个MacBook上有两个或三个分区,你可以随时重启.
    • 现在10.7来自App Store,制作虚拟机有点困难.我强烈建议在安装后立即对您的映像进行快照,并为其制作一个干净的备份副本.当您需要返回"原始"机器时,您将希望能够不时克隆该图像.
    • 习惯于在SDK出现时将其丢弃.10.8有一天会老.你现在也可以轻松制作副本.
  • 无论您是否支持单个点发布,保留各个点发布的升级包都非常有用.当您遇到运行非当前版本的客户时,能够检查"不可复制"的错误实际上是否可以在其特定版本上轻松重现,这是很好的.这是否值得,在很大程度上取决于您的产品和客户.当10.4.11在点发布期间对WebKit进行重大更改时,这对我来说是一个救生员...
  • 投资一个小型NAS或大型外置USB驱动器(虽然我在广泛使用时遇到了故障,所以我更喜欢RAID).你需要这个空间.您希望保留大量虚拟机和许多SDK,有时甚至是旧版本的Xcode.

  • 哇,在阅读了所有这些评论并重读了苹果文档之后,我真的认为如果我将部署目标设置为10.6并将SDK设置为最新版本,如果我使用任何不受支持的方法,xcode会发出警告.真的,非常感谢你对此的帮助!! (2认同)
  • 您可以在这里找到较旧的OS X SDK:https://github.com/phracker/MacOSX-SDKs (2认同)