【问题标题】:confusion of how to make osx app backward compatible & how to test them混淆如何使 osx 应用程序向后兼容以及如何测试它们
【发布时间】:2013-02-26 14:04:38
【问题描述】:

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

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

我有一个应用程序,我在 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 下拉菜单中,我只能设置为 10.8 或 10.7,但是缺少 10.6,我该如何解决?

提前致谢

【问题讨论】:

    标签: xcode cocoa sdk backwards-compatibility


    【解决方案1】:

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

    • 无论 Apple 在他们的文档中说什么,如果您想支持 10.6,请使用 10.6 SDK 构建。不要依赖分布目标。
      • 我曾与 Xcode 工程师进行过讨论,虽然他们坚持 Apple 的党派路线,即您应该始终使用最新的 SDK 进行构建,但他们也承认这样做通常很疯狂。如果您针对 10.8 SDK 构建并将部署目标标记为 10.6,则在 10.6 上 you will get no warnings for using methods that do not exist。你会发现你使用了一个不存在的方法的唯一方法是它在 10.6 上运行时可能会给你带来奇怪的错误。这太疯狂了。
      • 请记住,发送未知选择器时 OS X 不会崩溃。它只是中止当前的运行循环。因此,这些漏洞更难在 iOS 上追踪,导致应用程序崩溃。
      • 当然,你可以weak linking。谈论危险......是的,有几次这是有用的,但如果你没有正确执行,编译器不会给你警告。如果我要像这样进行弱链接,我会采用另一种方式,链接旧 SDK 并将新函数的原型复制到我的实现中。这样我就有了我认为要弱链接的每个函数的文档。
    • 下载旧的 SDK 并将它们符号链接到您的 Xcode 发行版中。
      • 嫉妒地保护他们。每次升级 Xcode 时,Apple 都会尝试删除它们。制作自己的副本并将它们粘贴到 /SDK 或远离 Xcode 的其他地方。我提供了一个名为fix-xcode 的脚本来自动管理符号链接。我对 Apple 坚持删除我的旧 SDK 感到不满吗?是的,我是。
    • 您可以合法地在虚拟机中运行 10.6 服务器。您可以合法地在 VM 中运行 10.7+ 桌面。这些是测试代码的好方法。
      • 或者您可以像我一样,拥有一小堆旧 MacBook,每台 MacBook 上都有两三个分区,您可以随时重启。
      • 现在 10.7 来自 App Store,it's a little harder to make VMs。我强烈建议您在安装后立即为您的映像创建快照,并对其进行干净的备份。当您需要回到“原始”机器时,您会希望能够不时克隆该图像。
      • 养成在 SDK 发布时将其隐藏的习惯。 10.8 总有一天会过时。您不妨趁现在轻松制作一份副本。
    • 无论您是否支持单独的 dot 版本,为单独的 dot 版本保留升级包都会非常有帮助。当您遇到运行非当前版本的客户时,很高兴能够检查“不可重现”的错误实际上是否可以在他们的特定版本上轻松重现。这是否值得在很大程度上取决于您的产品和客户。当 10.4.11 在 dot 发布期间对 WebKit 进行重大更改时,这对我来说是救命稻草...
    • 投资小型 NAS 或大型外部 USB 驱动器(尽管我在广泛使用时遇到了故障,因此我更喜欢 RAID)。你需要空间。您希望保留大量虚拟机和大量 SDK,有时甚至是旧版本的 Xcode。

    【讨论】:

    • 哇,在阅读了所有这些 cmets 并重新阅读了苹果文档之后,我真的以为如果我将部署目标设置为 10.6 并将 SDK 设置为最新版本,如果我使用任何 xcode 会警告我不支持的方法。真的,非常感谢您在这方面的帮助!
    • @Rob Napier 我有一个问题,我找到了 10.6 SDK 并复制到我的 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/ 我开始测试10.6 sdk 通过创建一个虚拟项目,将目标部署设置为 10.6 并将 sdk 设置为 10.6 但我遇到了一堆错误:i56.tinypic.com/hsu92f.png
    • 您无法使用 10.6 SDK 为 ARC 进行编译。您必须使用 10.7 SDK 构建并使用 10.6 分发目标。使用较旧的 SDK 进行构建的重点在于,您完全使用了该 SDK 可用的内容(这减少了出现错误的可能性)。在要求 ARC 时,您实际上要求的是 10.7 的东西,而不是碰巧在 10.6 上运行的东西。如果您想确定它将在 10.6 上运行,您不能使用 ARC 等 10.7 功能。在你的位置上,我会(并且确实)将我的 SDK 设置为 10.7,并在 10.6 上承受更高的错误风险。 (但我不使用 10.8。10.7 是最旧的具有该功能的。)
    • 我们使用一个名为 DeployMate 的应用来检查我们的代码是否与 10.8 兼容,运行良好,但我发现 Apple 强迫我们诉诸这种变通办法令人难以置信。
    • @Rob Napier:Apple 在 3 年后对您的罚单有何回应??
    【解决方案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
    

    【讨论】:

      【解决方案3】:
      1. 您可以在一台机器上安装多个版本的 Mac OS,并在每个版本之间启动。
      2. SDK 应该是最新的 (10.8)。
      3. 见 2。

      我考虑过的一种替代方法(我在同一条船上)是使用旧 PC 创建一个 Snow Leopard Hackintosh,然后在我的 MBP 上安装 Lion 和 Mountain Lion。

      【讨论】:

      • 谢谢,我的macbook air以前运行的是10.7,所以安装10.7应该没问题,但是我要怎么安装10.6呢?有人告诉我硬件不能比软件更新(10.6)
      • 是的,2011 年的型号似乎无法运行 10.6。你将不得不尝试 Hackintosh 方法或购买 Mac Mini 或其他东西。我有一个雪豹的朋友来为我覆盖那个基地......
      • 我想我必须在我的戴尔灵越 530 上重新安装 10.6,谢谢老兄
      【解决方案4】:

      你需要做这些设置:

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

      2.将部署 SDK 设置为旧版本(例如 1.4)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-12
        相关资源
        最近更新 更多