Picture 2

7 октября 2019 года Apple выпустила в свет новую версию своей операционной системы для Mac, macOS Catalina. Версия 10.15 содержит множество изменений и улучшений. Одно из значимых – полный отказ от 32-битных приложений. Будучи разработчиком таких приложений для macOS, что вы можете сделать? Правильно, портировать приложение на 64-битную платформу. Будет ли приложение работать правильно с первого раза? Возможно. Зависит от сложности и объёма кода. Но, скорее всего, разработчики столкнутся с множеством неочевидных ошибок, которые можно заранее выявить с помощью PVS-Studio.

Введение


Несмотря на то, что технически запуск 32-битных приложений в 64-битной среде возможен, Apple решила более не идти по этому пути и завершить процесс перехода на 64-битную платформу, начатый ею ещё 10 лет назад. Для пользователя это означает, что если разработчик их любимого приложения вовремя не озаботился его переводом на 64-битную платформу, то приложение просто перестанет работать в обновленной macOS Catalina.

Нельзя сказать, что решение Apple было неожиданным: уже в 2018 году на конференции Worldwide Developers Conference компания говорила, что macOS Mojave станет последней версией macOS с поддержкой 32-битных программ. Вероятно, большинство разработчиков популярных приложений успешно мигрировали на 64-разряда к выходу macOS Catalina, или завершают переход.

Нужно отметить, что при кажущейся простоте, перевод приложения на 64-битную платформу содержит массу «подводных камней». А если часть приложения написана с использованием языка С++, то от разработчика может потребоваться глубокое понимание механизмов работы с памятью и указателями, а также учет многих неочевидных нюансов. В данном случае полезно воспользоваться инструментом, позволяющим проконтролировать корректность кода именно с учетом перехода с 32 на 64-битную платформу. Например, статическим анализатором кода PVS-Studio.

64-битные диагностики


Анализатор PVS-Studio содержит в своем составе специальную группу диагностик для этого случая. Вообще, PVS-Studio как инструмент изначально создавался для целей анализа С/C++ кода при поиске именно ошибок миграции на 64 бита, и только впоследствии развился в анализатор более общего назначения: были добавлены языки C# и Java, появилась возможность поиска потенциальных уязвимостей, поддержка стандартов безопасного кодирования (MISRA, например) и многое другое.

За прошедшее время нами накоплен большой опыт по вопросам перехода на 64-битную платформу, написаны статьи. Одна из хороших статей на эту тему: "Коллекция примеров 64-битных ошибок в реальных программах". Статья довольно старая, но проблемы, описанные в ней, не теряют актуальности и сегодня. Рекомендую к прочтению, особенно если вы планируете или уже работаете над переводом своих приложений на 64 бита (будь то приложения на С++ для macOS или любой другой операционной системы).

Включить 64-битные предупреждения можно следующим образом:

Windows/Visual Studio

В окне просмотра предупреждений есть кнопка включения всей группы 64-битных диагностик:

Picture 3

Linux/macOS

При запуске анализатора из консоли необходимо включить 64-битные диагностики как в анализаторе, так и в генераторе отчётов:

pvs-studio-analyzer analyze ... -a 5 ...
plog-converter ... -a "64:1,2,3"

Заключение


Ну и, конечно, ничто не мешает вам скачать и попробовать анализатор PVS-Studio на своем коде. Удачи в борьбе с 64-битными и другими ошибками!



Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Sergey Khrenov. MacOS 10.15 no longer supports 32-bit apps. What can you do?.

Комментарии (21)


  1. SerJook
    16.10.2019 09:58
    +1

    Стоит ли ждать такого от Microsoft?


    1. DonCarBon
      16.10.2019 10:24
      +1

      Я думаю это рано или поздно произойдет, а может к этому времени появятся какие то 128 битные платформы и все на них перейдут разом. На счет майкрософт волноваться не стоит, они самые демократичные в этом плане если не будет своего, то стронний эмулятор 100% будет.

      Ведь по факту Виндовс это народная ось!


    1. snuk182
      16.10.2019 15:58

      Если опыт "Windows Mobile -> Windows Phone -> пустота" ничему не научил, то да. К сожалению (наверное) для компании, легаси — мощный столп, на котором держится популярность десктопной оси.


    1. balamutang
      16.10.2019 18:30

      Конечно стоит ждать. Я думаю однажды прекратится поддержка 32-битных приложений. и 64-битных кстати тоже, в этот же день: они просто настольную винду забросят (как забросили Phone и CE), она у них и так сейчас не основной доход уже.
      :)


    1. mistergrim
      16.10.2019 23:53

      С учётом того, что они пилят для ARM эмулятор x86? Думаю, не в ближайшее время.


      1. DonCarBon
        19.10.2019 23:28
        -1

        В любом случае с технической стороны, apple это тупиковая ветвь развития. Их конёк дизайн. Производство Китай, микросхемы сторонних фирм, софт «на патентах».


  1. Vindicar
    16.10.2019 10:03

    >memsize type is used in struct/class
    почему это проблема?
    Да, размер и/или layout структуры/класса будет зависеть от платформы. Но это имеет значение только при вводе/выводе структуры как двоичного массива.


    1. Andrey2008
      16.10.2019 10:07
      +1

      1. Vindicar
        16.10.2019 18:00

        Ну т.е. как я и написал, если класс/структура с таким полем сериализуется. Спасибо.


  1. Juzo
    16.10.2019 10:24

    С моей точки зрения это хорошее решение, смелое и немного революционное. Конечно у разработчиков, которые не озаботились перевести свои приложения сразу, возникнут проблемы, но как написано выше, разговор об этом давно шел. Какие тут есть подводные камни для обычных юзеров?


    1. vrnvorona
      16.10.2019 11:22
      +3

      Не уверен что форсирование перехода на 64 это революция. Все так же как и с джеком 3.5


      1. Ilusha
        17.10.2019 20:30

        У них переход на свои ARM, думаю, они хотят унифицировать железо, чтобы один и тот же софт работал везде.
        А отказ от x32 — дешевле разработка.


    1. Dobryak88
      16.10.2019 12:16
      +2

      У обычных пользователей появится острая необходимость приобрести новые версии ПО, т.к. старая версия вполне могла работать и без актуальной поддержки.
      А ещё будут проблемы, например, со старыми принтерами, разработчики которых не обновляли и, вероятно, не будут выкатывать драйвера под 64-битную систему, что обернётся необходимостью купить новое оборудование.


      1. Goodkat
        16.10.2019 14:43

        Причём новых версий может и не быть, и придётся искать альтернативы.


  1. ohai2u
    16.10.2019 10:24

    Оказывается немножко, но поддерживаются


    http://netkas.org/?p=1491


  1. spbsmile
    16.10.2019 10:24

    А visual studio for mac 32 битная ?)


    1. NetBUG
      16.10.2019 11:03

      Сама VS может быть и под 64 собрана.
      А вот 100500 бинарников, которые дёргаются в процессе сборки — зависит от.

      Например, у меня есть VS Code, в ней из плагинов стоит в том числе PlatformIO, и в нём несколько профилей для разного железа. В том числе закрытые бинарные пакеты, которые собраны под макось в 2013 году под 32 бита и шансов на обновление около нуля.
      Впрочем, даже avrdude вроде идёт 32-битный из репы)


  1. PurpleTentacle
    16.10.2019 10:56
    +9

    Особенно эпично выглядит фэйл любимой Adobe, у которой ВНЕЗАПНО с выходом Каталины флагманский CC 2019 оказался несовместим с ОС по ряду функций. Вероятно, несколько выпусков beta-версий для разработчиков за полгода до релиза и прямой канал общения с Apple — это пути для слабаков. Помнится, введение ежемесячной подписки объясняли как раз тем, что у пользователей всегда будет актуальная версия. Это же как нужно облениться, чтобы забить на апдейт своего основного продукта под основную ОС, на которой сидит львиная доля художников и дизайнеров. Да, они «уже работают над исправлениями», спустя неделю после выхода ОС.

    Самое ироничное в том, что похожая ситуация вывела Adobe в лидеры рынка издательских систем в начале 2000-х. В те годы лидером рынка сложной полиграфической вёрстки была Quark со своим пакетом QuarkXPress, почти весь глянец верстали именно в ней. А надо сказать, что глюков у QuarkXPress 4 хватало, особенно с расширениями, потому Quark решила хорошо вложиться в версию 5 и вылизать все шероховатости. Вложились так, что разрабатывали её целых пять лет и пропустили переход мака с Mac OS 9 на OS X. В итоге, когда вышла модная OS X, под неё не было основного издательского пакета, что заставляло отделы вёрстки сидеть на «классике». И вот тут Adobe очень круто подсуетилась с выпуском InDesign в 2002 году, одновременно с QuarkXPress 5 (для старой Mac OS 9), в результате чего на целый год оставались единственной издательской системой под OS X, пока Quark лихорадочно делала шестую версию. Года хватило, чтобы народ распробовал новый пакет от Adobe и дальше InDesign медленно, но верно захватил рынок у Quark.


    1. spiceginger
      16.10.2019 13:03

      Застал как раз этот момент на моей первой работе)


      1. PurpleTentacle
        16.10.2019 14:20
        +3

        Ах… золотые годы :) Флайчек для проверки postscript, мольба, чтобы не сорвало кривые на выводе плёнок, огромнные Линотроники и дорогущие цветопробы-хромалины. Несовместимость вёрстки на Mac и на PC, файлы на SyQuest и магнитооптике, ночи на плёнковыводе, барабанные сканеры, большие мониторы Барко и Радиус с козырьками и прогрев кинескопов перед работой и калибровкой… Как вчера это всё было.


        1. spiceginger
          16.10.2019 15:18

          Эх юность