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

时间:2013-02-26 14:04:39

标签: xcode cocoa sdk backwards-compatibility

阅读Apple 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,但问题是,我有一个2011 macbook air目前运行10.8,这是我唯一的苹果机器。我可以使用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下拉列表
  4. ,我只能设置为10.8或10.7,但缺少10.6,我该如何解决?

  5. 提前致谢

4 个答案:

答案 0 :(得分:42)

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

  • 无论Apple在他们的文档中说什么,如果你想支持10.6,那么使用10.6 SDK构建。不要依赖分销目标。
    • 我与Xcode的工程师进行了这次讨论,虽然他们坚持使用Apple的派对,你应该始终使用最新的SDK构建,但他们也承认这样做通常是疯狂的。如果您针对10.8 SDK进行构建,并将部署目标标记为10.6,则{10}上的you will get no warnings for using methods that do not exist。你会发现你使用了一种不存在的方法的唯一方法是,它可能会在10.6上运行时给你带来奇怪的错误。那太疯狂了。
    • 请记住,发送未知选择器时OS X不会崩溃。它只是中止当前的runloop。所以这些错误甚至可以更难来跟踪然后在iOS上崩溃应用程序。
    • 当然,你可以做weak linking。谈论危险....是的,有几次这是有用的,但如果你没有正确地做,编译器不会给你任何警告。如果我要像这样做弱链接,我会采取另一种方式,链接旧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,it's a little harder to make VMs。我强烈建议在安装后立即对您的映像进行快照,并为其制作一个干净的备份副本。当您需要返回“原始”机器时,您将希望能够不时克隆该图像。
    • 养成在SDK出现时躲开SDK的习惯。 10.8有一天会老。你可以在现在轻松制作副本。
  • 无论您是否支持单个点发布,保留各个点发布的升级包都非常有用。当您遇到运行非当前版本的客户时,能够检查“不可复制”的错误实际上是否可以在其特定版本上轻松重现,这是很好的。这是否值得,在很大程度上取决于您的产品和客户。当10.4.11在点发布期间对WebKit进行重大更改时,这对我来说是一种救命...
  • 投资一个小型NAS或大型外置USB驱动器(虽然我在广泛使用时遇到了故障,所以我更喜欢RAID)。你需要这个空间。您希望保留大量虚拟机和许多SDK,有时甚至是旧版本的Xcode。

答案 1 :(得分:2)

加入Rob Napier的深入answer

要使用旧版SDK,请在此处输入SDK(或符号链接):

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

使用XCode 7.3或更高版本,您需要打开此文件并更改“MinimumSDKVersion”(否则XCode将拒绝使用旧版SDK):

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist

答案 2 :(得分:1)

  1. 您可以在一台计算机上安装多个版本的Mac OS,并在每台计算机之间启动。
  2. SDK应该是最新的(10.8)。
  3. 见2.
  4. 我考虑过的一个替代方案(我在同一条船上)是使用旧PC创建Snow Leopard Hackintosh,并在我的MBP上安装Lion和Mountain Lion。

答案 3 :(得分:0)

您需要进行以下设置:

1.将Base SDK设置为当前版本的Mac(例如10.7)

2.将Deployment SDK设置为旧版本(ex.1.4)

相关问题