Mac App Store: отказавшись от поддержки 32 бит в пользу ARC, увидят ли существующие пользователи 32-битной версии сообщение об обновлении? - PullRequest
4 голосов
/ 23 октября 2011

Я рассматриваю возможность отказа от 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

EDIT: Я обнаружил один случай, когда кто-то смог загрузить 64-битное приложение на 32-битный MacBook и получил сообщение об ошибке «Ваша покупка не была завершена» . В данном случае это было бесплатное приложение. Интересно, когда появится это сообщение для платного приложения (до или после оплаты).

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

Ответы [ 2 ]

2 голосов
/ 14 января 2012

Я также узнал, что ARC требует 64-битных процессоров. Однако мне удалось создать толстый двоичный файл, в котором 64-битная версия использует ARC, а 32-битная версия использует сборщик мусора. Для этого мне пришлось сделать следующее:

  • установить 32-битную цель, которая использует GC
  • установить только 64-битную цель, которая использует ARC
  • добавить 32-битную цель как зависимость от 64-битной цели
  • добавить пользовательскую фазу сборки с помощью сценария оболочки, который использует lipo для сборки толстого двоичного файла из двоичных файлов в двух целях

Обе цели используют один и тот же источник, но было необходимо несколько операторов #ifdef __OBJC_GC__. Мне пришлось отказаться от синтезированных иваров для обратной совместимости: (

1 голос
/ 23 октября 2011

Я не знаю, что будет делать App Store (и, возможно, в любом случае он может измениться), но если приложение доставляется 32-разрядным клиентам, вы можете обойти эту проблему следующим образом:

  1. Сделайте ваше приложение только 64-битным.
  2. Создайте второе приложение, которое является только 32-битным и ничего не делает, кроме как показывает предупреждение.
  3. Объедините все ресурсы из второго приложения в первое (т.е. добавьте их к обоим целям).
  4. Сделайте вторую цель зависимой от первой и используйте lipo на этапе сценария оболочки в первой цели, чтобы ассимилировать 32-разрядный двоичный файл в 64-разрядный двоичный файл.

После этого у вас будет универсальный двоичный файл (или «толстый двоичный файл»), который является вашим настоящим приложением на 64-разрядных компьютерах, и приложение «Пожалуйста, обновите свой Mac» на 32-разрядных компьютерах.

...