Как собрать приложение для iOS на обычном ПК, или длинный путь установки MacOS на нормальное железо

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

Но спешу вас расстроить. MacOS совсем не предназначена для использования на обычных компьютерах. Совсем. Это будет ОЧЕНЬ неприятно, странно и незачем.

Если вы собираетесь делать это ради развлечения -- вы этого не получите. Вы испытаете боль при установке, вы испытаете боль при использовании. Всё будет работать медленно, греться и падать. Драйверов даже на самые базовые устройства (типа сетевой карты) -- не будет. Вы точно этого хотите?

ЕДИНСТВЕННЫЙ нормальный повод проворачивать это, за который вас НЕ обоссут: если вы хотите разработать софт для техники яблочных огрызков. Но при этом не хотите выкладывать 200 баксов на барахолке, чтобы купить умеренной-убитости макбук, для использования его для сборки проекта.

ДА ДА ДА -- программу для Маков или iOS можно собрать только в приложеньке XCode для MacOS. Других компиляторов не существует в природе. Совсем. И нет никаких альтернатив.

Пердолим? Пердолим!

Для этого (очевидно) уже есть кривые и глюченные опенсорсные решения, которые никогда дальше беда версии не уходят. И запускаются с феерическими танцами с бубном.

Я прочесал все возможные Hackintosh-проекты и представляю вам максимально-автоматизированный путь установки. С минимальным пердолингом. (На момент декабря 2024 г.)

Раз: проверяем оборудование

Что делаем? Первым делом, нужно глянуть на конфигурацию пекарни, на которой мы будем это запускать:

  • По возможности, процессор должен быть не-супер-новым Intel годов 2015-2022 выпуска.
  • Видивокарта -- либо встроенная Intel HD Graphics, либо старенькие от NVidia

Чтобы не думать: скачиваем утилиту OpCore-Simplify. Запускаем, чекаем оборудование. Если что-то будет несовместимо -- программа ругнётся.

Если для какого-то оборудования существует кастомный драйвер, написанный комьюнити, то он автоматически подкачается.

По итогу, будет понятно, можно ли ставить. И если можно -- то какую максимальную версию.

Заранее готовьтесь, что почти вся ноутбуковская периферия (типа сетевых карт, веб-камер, тачпадов) будет вообще несовместима. Ибо яблочные никогда не ставили такое оборудование в свои устройства, и им незачем было писать для них драйверы.

Продумайте, как вы будете заменять эти устройства. (Например, заменив их внешними USB-аналогами). Например, у меня не было драйвера для Wi-Fi карты, и мне пришлось подключать внешний свисток.

../../../Assets/MacOS/Pasted image 20241208193100.png

После того, как проанализировали оборудование: жмем на "Собрать OpenCore EFI", наслаждаемся автоматической сборкой конфига для загрузчика.

../../../Assets/MacOS/Pasted image 20241208193610.png

Двас: мэппим USB порты на порты Apple

Чтобы новая операционка понимала, как работать с кучей USB портов в нашей машине, нужно их ей представить как что-то вот такое:
../../../Assets/MacOS/Pasted image 20241208194805.png

Чтобы не думать: качаем ещё одну утилиту -- USBToolBox.

Прежде чем сканировать -- в настройках программы включаем "Use Native Class" (по умолчанию выключено).

Запускаем сканирование USB контроллеров. По инструкции программа просит повтыкать в каждый порт какое-нибудь устройство во время сканирования, чтобы "разбудить" порт, который был отключен из-за неиспользования.

../../../Assets/MacOS/Pasted image 20241208202856.png

Но у меня сразу вывалился полный список USB портов, и не пришлось такое делать. Выходим в главное меню и жмём "S. Select Ports and Build Kext".
Выбираем все USB порты, собираем Kext.
../../../Assets/MacOS/Pasted image 20241208203120.png

Если спросит ввести идентификатор: вводим iMacPro1,1. Сформированные файлы раскладываем в /EFI/OC/Kexts/ в директорию, которую мы получили на предыдущем шаге.

Трис: делаем итоговую компиляцию конфига загрузчика

Качаем утилиту ProperTree. Выбираем config.plist в директории /EFI/, ждем подгрузки всех конфигов.

Затем жмём File -> RUN OC Snapshot.

Софтинка пробежится по всем конфигам/драйверам и т.д. Установит правильный порядок загрузки, допишет загрузку родительских драйверов, при наличии дочерних. И в принципе приведет все в порядок.

Но, когда я выполнял эти действия, у меня в голове всё громче и громче задавался вопрос: почему этот ворох софтин не интегрирован в единственное однокнопочное решение?

Думаете, это всё? Агащас!

Четырес: воруем файлы у эпл

Драйверы и конфиги мы собрали на предыдущем этапе. Теперь нам осталось спиз честно представиться владельцем техники эпл и скачать ТРИ интересные штуки с серверов Apple:

  1. Целиковый образ операционной системы (той версии, которая нам порекомендовалась при анализе оборудования)
  2. Образ Recovery Menu -- отладочной менюшки, в которую мы будем подсовывать кастомные драйверы. -- именно той же версии, что и операционка в пункте 1
  3. Образ Recovery Menu -- версии Ventura (да да, ещё одно рекавери меню. Уже чувствуете как пахнет писю костылями?)

Я знаю, вы этого ждали.
Вы верили.

Ведь для скачивания образа операционки -- одна утилита (gibMacOS).
А для скачивания рекавери -- ДРУГАЯ (macrecovery).

Почему, если по итогу качается из одних и тех же серверов? Ни малейшего понятия.

gibMacOS -- в моём случае выбираю 15.0 Sequoia и просто инициирую скачивание. Итоговый образ появится в директории с софтинкой.

А вот с macrecovery -- всё сложнее. Для скачивания нужного рекавери, нужно передать в параметрах вместо версии -- его ID.

ID версий рекавери можно узнать например вот туть в официальной документации:

Для скачивания 15.0 секвойи и 13.0 вентуры нужно выполнить следующие команды:

# Ventura (13)
python macrecovery.py -b Mac-4B682C642B45593E -m 00000000000000000 download
# После вызова команды выше, появившуюся директорию с рекавери стоит переместить куда-нибудь отдельно. Потому то при следующем вызове это перезапишется. (пометьте что это именно вентура 13, чтобы не перепутать)

# Latest version
# ie. Sequoia (15)
python macrecovery.py -b Mac-937A206F2EE63C01 -m 00000000000000000 download

Вы думали, это всё? Агащас

Пятьс: формируем загрузочную флешку (наконец-то)

Жмём Win Btn+R -> diskmgmt.msc.
Удаляем все разделы с флешки, создаём с нуля ДВА новых раздела:

  1. Размером в +- 1ГБ с файловой системой FAT32 (для удобства раздел называем OPENCORE)
  2. Размером во всё остальное пространство с файловой системой EXFAT (для удобства раздел назовём UnPlugged)

../../../Assets/MacOS/Pasted image 20241208214749.png

В раздел OPENCORE кладём директории:

  1. com.apple.recovery.boot (та директория что от вентуры)
  2. EFI (сформированная в самом нашем начале пути)
    По итогу там должна получиться вот такая структура
    ../../../Assets/MacOS/Pasted image 20241208215722.png

В раздел UnPlugged складываем следующее:

  1. Создаём директорию macos
  2. В неё складываем BaseSystem.dmg + .chunklist из рекавери от актуальной версии MacOS
  3. Прямо туда же складываем все файлы из директории с самим образом системы (который появился после скачивания через gibMacOS)
  4. Скачиваем файл UnPlugged.command из гитхаб репозитория. Складываем в ту же директорию.
    Получается вот такая итоговая структура:
    ../../../Assets/MacOS/Pasted image 20241208220321.png

Теперь нужно всего лишь загрузиться с флешки и установить? Ведь да?
Агащас! Ещё как минимум 2-3 шага.

Шестьс:

Before you start: если мы идём по пути минимального пердолинга, то ооооочень рекомендую устанавливать макось на отдельный диск (на тот, на котором уже нет какой-то существующей операционной системы).

Если вы попытаетесь разместить макось и винду на разных разделах одного и того же диска -- то очень велик шанс, что обе операционки при обновлениях будут пытаться перезаписать загрузчик на свой, ломая наху напрочь загрузку второй операционной системы. Вам оно надо? Всё-таки маковский загрузчик в beta, он не такой интеллектуальный как линуксовый grub, надо делать скидку.

Последующий гайд будет про установку на отдельный диск. Увы.

Поехали!

  1. В bios отключаем secureboot и всякие флаги отвечающие за шифрование жестких дисков и дополнительные проверки.
  2. Грузимся с флешки в OPENCORE, а из него в рекавери макоси.
  3. Открываем disk utility
    -> удаляем все разделы целевого диска, на который собираемся установиться
    -> добавляем на диск один партишн с типом APFS + Guid partition map. Назовите как-нибудь наглядно, что-то уровня "MacOS"
  4. Открываем Utils -> Terminal
    -> cd /Volumes/UnPlugged/macos
    -> ./UnPlugged.command
    -> Скрипт спросит какую рекавери вшивать в установщик: вытащить из раздела Unplugged или использовать от Вентуры. Соглашаемся на первый вариант.
    -> Выбираем созданный через disk utility раздел, куда будем устанавливать.
  5. После этого на какое-то время скрипт задумается, а потом самостоятельно откроет второе окно со стандартной установкой MacOS. Там всё просто, отвечайте на вопросы установщика и ждите.
  6. При установке компьютер может несколько раз перезагружаться

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

Семьс: устанавливаем загрузку с жесткого диска

Похоже, для разработчиков OpenCore это кажется отличной идеей -- после установки операционки -- НЕ записывать загрузчик в первую загрузочную запись жесткого диска. И теперь после установки операционки вы можете попасть в MacOS только при вставленной установочной флешке.
Давайте исправлять это недоразумение!

  1. Снова грузимся с флешки в OpenCore -> затем в рекавери.
  2. Открываем Utils -> Terminal -> набираем diskutil list
  3. Сейчас нужно проявить немного аналитики и найти EFI раздел того диска, на котором MacOS.
    ../../../Assets/MacOS/Pasted image 20241208232626.png
  4. Ищем диски с пометкой (internal, physical) -- это реальные диски в компьютере.
  5. В моём случае -- у меня два диска.
    -> На одном -- windows (его можно отличить по разделу windows recovery)
    -> На втором -- macOS (его можно отличить по разделу Apple_APFS)
  6. Нас интересует раздел EFI на диске с macOS -- cмотрим на его идентификатор (disk1s1), запоминаем
  7. diskutil mount disk1s1
  8. Теперь копируем EFI файлы с загрузчиком из флешки на этот раздел жесткого диска:
    -> cp -R /Volumes/OPENCORE/EFI /Volumes/EFI
  9. Осталось перезагрузиться, и в приоритете загрузки bios выбрать первоочередную -> загрузку с жесткого диска макоси.
  10. Готово! Теперь при каждом включении компьютера будет показываться экран OpenCore с выбором что загрузить: Windows/MacOS/MacOS Recovery