4

我正在考虑放弃对自动引用计数的 32 位支持(仅支持 64 位二进制文​​件)。

我想在 Mac App Store 中避免这两种情况:

对于旧的 32 位 Mac 用户

  1. 谁购买了支持 32 位的先前版本:他们会在 Mac App Store 中看到该应用程序的更新消息吗?如果是这样,(现在仅限 64 位)更新将不适用于他/她。

  2. 谁以前没有购买过该应用程序:尽管该应用程序无法在他们的系统上运行,但他们能否购买该应用程序?

仅限 ARC 64 位:http: //developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html#//apple_ref/doc/uid/TP40011226

编辑:我发现有人能够将仅 64 位的应用程序下载到 32 位 MacBook 并显示错误消息“您的购买无法完成”。在这种情况下,它是一个免费的应用程序。我想知道何时会为付费应用弹出此消息(付款之前或之后)。

http://www.linethirteen.com/blog/2011/01/mac-app-store-32-bit-vs-64-bit/

4

2 回答 2

2

我还发现 ARC 需要 64 位处理器。但是,我设法构建了一个胖二进制文件,其中 64 位版本使用 ARC,32 位版本使用垃圾收集器。为此,我必须执行以下操作:

  • 设置使用 GC 的仅 32 位目标
  • 设置使用 ARC 的仅 64 位目标
  • 将 32 位目标作为依赖项添加到 64 位目标
  • 添加一个带有 shell 脚本的自定义构建阶段,该脚本用于lipo从两个目标中的二进制文件组装一个胖二进制文件

两个目标都使用相同的来源,但有一些#ifdef __OBJC_GC__声明是必要的。为了向后兼容,我不得不放弃合成的 ivars :(

于 2012-01-13T20:48:10.053 回答
1

我不知道 App Store 会做什么(无论如何它可能会发生变化),但如果该应用程序确实交付给 32 位客户,您可以通过以下方式解决该问题:

  1. 仅将您的应用程序设为 64 位。
  2. 制作第二个仅 32 位的应用程序,除了显示警报消息外什么都不做。
  3. 将第二个应用程序中的所有资源构建到第一个应用程序中(即,将它们添加到两个目标)。
  4. 使第二个目标成为第一个目标的依赖项,并lipo在第一个目标的 shell 脚本阶段使用将 32 位二进制文​​件同化为 64 位二进制文​​件。

然后,您将拥有一个通用二进制文件(或“胖二进制文件”),它是 64 位机器上的真正应用程序,以及 32 位机器上的“请升级您的 Mac”应用程序。

于 2011-10-23T15:53:33.130 回答