Как я перенёс Mac-версию Baldur's Gate 3 на iPhone и что сломалось по дороге
Коротко: это настоящая Mac-версия Baldur's Gate 3, которая работает прямо на iPhone 17 Pro Max. Не облачный гейминг и не эмулятор: игра идёт на самом телефоне, ровные 30 кадров в секунду. Приложение, которое это делает, называется BG3iOS. Оно бесплатное, код открыт. Игру оно скачивает из Steam с вашей учётной записи, так что играть можно, только если BG3 у вас куплена. Нужен iPhone с 12 ГБ оперативной памяти: 17 Pro и 17 Pro Max, скорее всего iPhone Air и новый складной iPhone Duo.
Почему это вообще возможно
Новые Mac и iPhone 17 Pro построены на очень похожих чипах Apple: одна архитектура процессора и одна графическая система (Metal). Mac-версия BG3 давно собрана под эти чипы, так что код игры подходит телефону как есть, переводить его не нужно. Не хватает только самой macOS: окон, мыши, звуковой системы и ещё десятков мелочей.
Идея такая же, как у LiveContainer, программы, которая запускает одни iOS-приложения внутри другого:
— исполняемый файл игры переделывается из программы для macOS в библиотеку для iOS, приложение загружает её и запускает;
— всё, чего в iOS нет, подменяется заглушками, которые изображают macOS;
— всё это подписывается вашим сертификатом прямо на телефоне.
Игра обращается к 1077 функциям системы. 72 из них в iOS нет: 37 из AppKit (окна и интерфейс Mac), 27 из CoreGraphics и ещё по мелочи. Звучит посильно. А дальше начались настоящие проблемы.
Что ломалось, по порядку
1. Графика. iOS отказалась загружать шейдеры игры (маленькие программы, которые рисуют всё на экране): «формат библиотеки не поддерживается на этой платформе». Я уже готовился пересобрать около 31 000 шейдеров. Оказалось, всё дело в одном бите в заголовке файла, который говорит «это для Mac». Сбросил его, и iOS спокойно приняла все три библиотеки.
2. Окна Mac. Их в iOS нет вообще. А BG3 не просто вызывает AppKit, она строит на нём свои классы: своё приложение, своё окно, свои кнопки. Пришлось написать свой маленький AppKit поверх интерфейса iPhone: окно Mac на самом деле рисует на экране телефона, касания превращаются в движения и щелчки мыши, есть даже разбор файла интерфейса игры, чтобы она нашла, с чего начинать.
3. Подпись. iOS загружает в приложение только библиотеки, подписанные тем же сертификатом, что и само приложение. А сертификат у каждого пользователя свой, его выдаёт Apple на ваш Apple ID. Поэтому в приложение встроена своя программа подписи, написанная с нуля. Она подписывает 480 МБ файлов игры прямо на телефоне примерно за полторы секунды.
4. Видеокарта. Metal на телефоне — не совсем Metal на Mac. Часть памяти видеокарты устроена иначе, а некоторые функции из macOS в iOS есть, но нарочно роняют программу. Пришлось переводить всё это на лету.
5. Память. Игра молча исчезала в главном меню: без ошибки, без отчёта о сбое. Это iOS убивает приложения, которым не хватает памяти. Особое разрешение поднимает потолок для одного приложения до 6 ГБ, а игровой режим — примерно до 8 ГБ на телефоне с 12 ГБ. Игре в городе третьего акта нужно до 7,5 ГБ. Поэтому и нужен iPhone с 12 ГБ: на моделях с 8 ГБ (15 Pro, вся линейка 16, обычный 17) iOS одной программе столько не даст.
6. Звук съедал целое ядро процессора. Настоящая звуковая система Mac тянула за собой модуль Bluetooth, который в iOS бесконечно крутился вхолостую. Теперь игра получает свою простую «звуковую карту» на 48 кГц, а звук уходит в динамики штатным способом iOS.
7. Игра работала на медленных ядрах. Движок сам расставляет приоритеты своим потокам, и в iOS это выкидывает их из обычного распределения: загрузчики, логика игры и главный поток сидели на экономичных ядрах. Помогло переназначить потоки так, как ждёт iOS.
8. Пропадали сохранения. Они загружались, но не показывались в списке, а «Загрузить игру» была серой. Оказалось, что на iPhone одна и та же папка имеет два имени, /var и /private/var, а движок считает пути по количеству папок и путался. Одна маленькая правка — и сохранения появились.
9. Персонажи в Т-позе и без текстур. Экран загрузки ждёт подгрузки мира максимум 20 секунд, это зашито в игру. На компьютере этого с запасом хватает, на телефоне — нет, и иногда ты входил в сцену, полную людей в Т-позе. Теперь ждёт до 60 секунд.
10. Подтормаживания. Самая сложная задача. Когда забегаешь в новую область, игре вдруг нужно в два-три раза больше процессора, и ровно в этот момент iOS сбрасывает частоты: видеокарта уже съела почти весь бюджет энергии. Кадры застревали на 50–150 мс. Помогло ограничение в 30 кадров встроенным ограничителем самой игры: остаётся запас, и почти каждый кадр держится на экране ровно 33 мс.
11. Управление. Я сделал свой экранный геймпад: кнопки живут в чёрных полосах по бокам экрана и не закрывают картинку, а стики появляются там, где коснулся пальцем. Для игры это обычный геймпад. DualSense, DualShock 4 и Xbox тоже работают, сразу со своими значками кнопок. Для ввода текста, например входа в аккаунт Larian, есть кнопка клавиатуры: буквы уходят в игру как нажатия клавиш Mac.
12. Скачать 156 ГБ на телефон. Клиент Steam взят из проекта Playport, который запускает на iPhone Windows-игры, за что им огромное спасибо. Некоторые серверы Steam часами отвечали ошибкой на куски игры, поэтому недостающие куски докачиваются с других серверов. Сохранения синхронизируются через Steam Cloud, так что можно продолжить на компьютере.
13. Сломалась даже установка. В октябре AltStore, через который ставится приложение, перестал входить в Apple ID с ошибкой 503. Причина нашлась: сервер Apple отвергает старую «подпись» программы, которую AltStore ему отправлял. Исправленный AltStore лежит в каждом выпуске.
Что в итоге получилось
— Скачивание игры из Steam с вашей учётной записи, 156 ГБ, с докачкой после обрыва.
— 15 языков текста в игре, включая русский. Озвучка английская, как во всех версиях.
— Графика, настроенная под телефон, и ровные 30 кадров. Ограничение можно поднять в настройках игры, вплоть до 120 Гц.
— Экранный геймпад или настоящий контроллер.
— Сохранения в Steam Cloud.
— Счётчик кадров: подержите три пальца на экране.
— В последней версии — поддержка складного iPhone Duo: игра во весь внутренний экран, кнопки поверх картинки. Сделано и проверено только в симуляторе, на живом Duo ещё никто не пробовал.
Что нужно и чего пока нет
— iPhone с 12 ГБ памяти и iOS 26 или новее. Проверено на 17 Pro Max; 17 Pro, iPhone Air и Duo должны подойти, но пока никто не проверял.
— Около 165 ГБ свободного места.
— Аккаунт Steam, на котором куплена Baldur's Gate 3. Mac-версия входит в покупку в Steam. Файлов игры в приложении нет.
— Компьютер, Mac или Windows, для установки через AltStore. Честно: установка непростая, потому что Apple не пускает такие приложения в App Store. С бесплатным Apple ID приложение нужно продлевать раз в 7 дней.
— Долгие сессии греют телефон, самое тяжёлое место — город в третьем акте.
— Пока нельзя обновить игру после нового патча в Steam. Мультиплеер не проверялся.
Это вообще законно?
Приложение бесплатное, с открытым кодом (GPL-3.0), без рекламы, без своих серверов и без сбора данных. Игру вы скачиваете сами из Steam со своей учётной записи, поэтому играть можно, только если она у вас куплена. С Larian, Valve и Apple проект не связан. И да, в App Store встречаются поддельные «BG3 для iPhone» с платной подпиской — это не они.
В особо сложных моментах мне помогал Claude от Anthropic: он указан соавтором в коммитах.
Ссылки
— Скачать
Отвечу на вопросы в комментариях. Если у вас iPhone 17/18 Pro, Air или Duo — напишите, как работает.










































