CarrierSIM - Установка профилей операторов для разблокирования возможностей iPhone и iPad: VoWiFi, 5G и EVS в России и Беларуси
Python
241
134 commits
updated Oct 7, 2026
Скрипт привязывает SIM-карты iPhone по IMSI к системному пакету оператора Vodafone_hu или к любому другому пакету, который есть в iOS телефона. Задуман для включения звонков по Wi-Fi (VoWiFi) в России. Заодно включается кодек EVS и 5G на части диапазонов.
Python-скрипт работает на macOS, Windows и Linux. Готовые сборки без Python выпускаются для macOS, Windows x64 и Linux x64.
Работает на iPhone 12–18, включая модели mini, Pro, Pro Max, Plus, Air и e, с iOS 16 и новее.
| iOS | Работает | Не работает |
|---|---|---|
| 27.2 | ✅ 27.2 beta 2 (24B5089g) | ❌ $\color{red}{\textsf{начиная с 27.2 beta 3 (24B5099f)}}$ |
| 27.0 | ✅ 27.0.1 (24A446) | — |
| 26 | ✅ 26.7.1 (23H30) | — |
| 18 | ✅ 18.7.10 (22H374) | — |
| 17 | ✅ 17.7.2 (21H221) | — |
| 16 | ✅ 16.7.16 (20H392) | — |
| 15 | ❔ не проверялось, 15.8.8 (19H422) | — |
| 14 | ❔ не проверялось, 14.8.1 (18H107) | — |
Указаны самые свежие сборки каждой ветки по AppleDB. На iOS 27.2 beta 3 и новее Apple закрыла способ записи: скрипт предупреждает и останавливается, если iPhone откажет в переносе.
iPad Wi-Fi + Cellular: нужна активная SIM или eSIM; установка пока не проверена на устройстве. Модели Wi-Fi без сотового модема не поддерживают установку профилей.
Экспериментальный инструмент. Работа на будущих версиях iOS не гарантируется.
usbmuxd (например, sudo apt install usbmuxd на Debian/Ubuntu). Проверка --check покажет, найден ли он и есть ли сокет службы.Если устройство не определяется, разблокируйте его, разрешите подключение в «Настройки → Конфиденциальность и безопасность → Проводные аксессуары» и переподключите кабель. На Linux при необходимости: sudo systemctl restart usbmuxd.
Запуск macOS.commandЗапуск Windows.cmdbash "Запуск Linux.sh".До сообщения «Готово» держите iPhone разблокированным. Если включена резервная копия iCloud, а телефон на зарядке (кабель к компьютеру тоже считается) и экран погас, iOS примерно раз в сутки начинает копию и при этом переписывает служебные файлы Books — прямо посреди этапа (#44). Скрипт перед этапами предупреждает об этом и показывает, когда была последняя копия.
При первом запуске скрипт сам скачает нужные библиотеки в папку .venv. Это займёт пару минут.
К релизу прикладываются архивы CarrierSIM-vN-macOS-arm64.zip, CarrierSIM-vN-macOS-x86_64.zip, CarrierSIM-vN-Windows-x64.zip и CarrierSIM-vN-Linux-x64.zip. Python-вариант для всех трёх ОС — CarrierSIM-vN-Python-universal.zip. Python и библиотеки уже внутри. Их собирает GitHub Actions (.github/workflows/standalone.yml) из того же тега, происхождение подтверждено attestation: gh attestation verify CarrierSIM-vN-….zip -R ios-bundles/CarrierSIM.
CarrierSIM (CarrierSIM.exe) лежат bundle.yaml, assets.zip и README. runs появится там же.xattr -dr com.apple.quarantine ~/Downloads/CarrierSIM (путь укажите свой, куда распаковали), потом запустите CarrierSIM двойным щелчком. Без этого macOS не даст открыть файл или его библиотеки.CarrierSIM.exe. Если скачивание на 4PDA выдаёт ошибку 404, нужна регистрация, вход в аккаунт и некоторая активность на форуме.usbmuxd, распакуйте архив через unzip с сохранением символических ссылок и запустите ./CarrierSIM в терминале. Сборка создаётся и проверяется на Ubuntu 22.04 x64; для более старых систем используйте Python-вариант.Меню и флаги те же, что у скрипта: CarrierSIM --status, CarrierSIM --bundle Vodafone_ro --sims 1 и так далее. Сборка для macOS arm64 проверена без телефона (--check, меню). Сборки для Windows и Intel Mac на железе не запускались.
| Пункт | Что делает |
|---|---|
| 1 | Установить профиль по bundle.yaml (МТС России — Vodafone_ro, остальные — Vodafone_hu) |
| 2 | Показать SIM и план установки, ничего не записывая |
| 3 | Проверить компьютер и файлы, телефон не нужен |
| 4 | Вернуть штатный профиль (выбранной SIM или всем) |
| 5 | Восстановить после сбоя |
| 6 | Справка по флагам |
| 7 | Выбрать другой профиль и SIM (1, 2 или обе): сначала план и паспорт профиля, запись после подтверждения |
| 8 | Диагностика связи: IMS, VoLTE/VoWiFi/VoNR, ePDG, сеть, 5G SA (только чтение журнала) |
| 9 | Проверка звонка: канал (Wi-Fi/LTE/5G) и кодек EVS/AMR (только чтение журнала) |
| 10 | Переключить связь с iPhone: кабель или Wi-Fi (эксперимент). В режиме Wi-Fi все действия с телефоном идут без кабеля |
| 11 | Отчёт о профиле для темы или issue: журнал CommCenter и что вы проверили сами (только чтение) |
Файл bundle.yaml рядом со скриптом задаёт пакет для пункта 1:
# Пакет по умолчанию для SIM России (250) и Беларуси (257)
default: Vodafone_hu
# Пакет для конкретного оператора: MCCMNC без пробела (250 01 = МТС RU)
25001: Vodafone_ro
Для каждой SIM сначала ищется строка с её MCCMNC, затем default. Без файла ставится Vodafone_hu. default действует только на SIM операторов России (MCC 250) и Беларуси (MCC 257): зарубежная SIM сохраняет свой профиль, в плане (пункт 2) она помечена «не трогаю». Чтобы сменить профиль зарубежной SIM, добавьте строку с её MCCMNC или выберите её номер в пункте 7 (флаг --sims 1 или 2): явно выбранный слот получает профиль при любом операторе. Имя пакета — как папка в /System/Library/Carrier Bundles/iPhone на телефоне, без .bundle. Пункт 7 и флаг --bundle на время запуска заменяют файл.
Пункты 1, 2 и 7 под планом показывают свойства выбранного пакета из таблицы ios-bundles.github.io: приоритет VoWiFi дома, VoWiFi в роуминге, подпись сети при звонке по Wi-Fi, номер активации iMessage/FaceTime, значок LTE/4G, переключатель VoLTE, 5G, EVS, доп. услуги через IMS (XCAP) и визуальную голосовую почту. Например, у Vodafone_tr номер активации iMessage местный турецкий, 13191: из российской сети он недоступен, и слетевшая активация по номеру может не восстановиться (так пишут в теме на 4pda). У Vodafone_ro VoWiFi в роуминге выключен.
Это содержимое файлов пакета из iOS 27.0 для iPhone 17, не проверка на телефоне: на деле оператор может вести себя иначе. Таблица скачивается раз в неделю в runs/bundles.json. Без интернета паспорт просто не показывается. Если имя пакета отличается от таблицы только регистром (mts_ua вместо MTS_ua), скрипт остановится до записи. Имени, которого нет в таблице, он подскажет похожие и продолжит: в другой iOS пакет может быть.
Для полноценной работы профиля рекомендуется перезагрузить телефон после установки. Затем проверьте связь, звонки и интернет.
Пункт 8 (--diagnose) читает журнал CommCenter до 90 секунд: на это время включите и через 10 секунд выключите авиарежим, Wi-Fi не выключайте. По кабелю журнал при этом может оборваться, скрипт подключится снова. Когда после выключения авиарежима все SIM заново зарегистрировались в IMS, скрипт ждёт ещё 10 секунд и заканчивает сам; в терминале закончить раньше можно клавишей Enter. В отчёте по каждой SIM — IMS, VoWiFi, сеть, 5G SA, а отдельным блоком — VoWiFi-туннель: адрес ePDG, последнее состояние IKE и последняя ошибка IKE, если была. Если вместо адреса ePDG стоит 127.0.0.1 или 0.0.0.0, туннель до оператора не дойдёт ни на каком пакете. Обычно так имя ePDG закрывает DNS — роутер, фильтр рекламы (AdGuard, Pi-hole), VPN или оператор. Полный журнал CommCenter за это время, с подробностями IKE, лежит в runs/ДАТА-diagnose/commcenter.log (номера замаскированы).
Пункт 9 (--watch-call) слушает журнал до 180 секунд, пока вы делаете тестовый звонок, и показывает канал и кодек. После звонка можно нажать Enter.
Какой профиль лучше для какого оператора, решают отзывы, а не таблица свойств пакета. Пункт 11 (флаг --report) собирает их в одном виде:
*3001#12345#*, iMessage с номера, SMS по Wi-Fi, режим модема, объединение вызовов. Отвечайте «д» (да), «н» (нет) или Enter (не проверял). Вопросы задаются только в терминале: если скрипт запущен без него, вопросы пропускаются, а в отчёте появляется строка «Ручные проверки: не заданы».runs/ДАТА-report/report.txt.В отчёте модель, iOS, оператор, загруженный профиль с версией, сводка журнала и ваши ответы. Номера, IMSI и ICCID в нём нет. Блок вставьте в тему или в issue по шаблону «Отчёт о профиле». Телефон не меняется.
Слетит ли профиль после обновления iOS или перезагрузки? По отзывам в теме на 4pda не слетает: после обновления 27.0 на 27.0.1 и после перезагрузок профиль остаётся. В iOS 27.2 beta 3 Apple закрыла сам способ записи (#56): iPhone больше не переносит файлы AirTraffic в каталог операторов. Стоящий профиль после обновления остаётся, но поставить, сменить или удалить его скриптом на такой версии уже нельзя. На 27.2 beta 1 и 2 запись ещё работает. На более новых версиях скрипт предупреждает и всё равно пробует; если iPhone отказывает в переносе, скрипт останавливается до каких-либо изменений и пишет, что Apple закрыла способ. Если профиль ещё придётся менять, не обновляйтесь до 27.2 beta 3 и новее. Снять его там можно полным сбросом iPhone или сменой SIM: профиль привязан к IMSI, и для новой SIM iOS выберет штатный пакет. Сброс настроек сети профиль не снимает.
Поменял SIM, и профиль пропал. Профиль привязан к IMSI. Новая SIM, перевыпуск eSIM или перенос номера с eSIM на пластиковую SIM дают новый IMSI, поэтому профиль нужно поставить заново пунктом 1 или 7.
После смены SIM не активируются iMessage и FaceTime. В теме так бывает и на штатном пакете: откат пунктом 4 не помогает. Несколько человек вылечили это перевыпуском SIM или eSIM у оператора: у новой карты другой ICCID, и активация проходила за 10–60 минут. После перевыпуска профиль нужно поставить заново: IMSI тоже новый. Учтите: после перевыпуска SIM/eSIM оператор может ограничить отправку и получение SMS на первые 24 часа. В этот период активация iMessage и FaceTime по номеру может быть временно недоступна. Дождитесь снятия ограничений и повторите активацию.
Есть значок 5G, а скорость как в LTE. Значок и переключатель 5G ещё не значат, что телефон в сети 5G. Наберите *3001#12345# и нажмите вызов, откроется Field Test. Полосы с буквой n (n1, n7, n40) относятся к 5G NR, полосы с буквой b к LTE. NSA значит 5G поверх LTE: если рядом видны только b-полосы, телефон работает в LTE. n78 и n79 в России недоступны при любом пакете: разрешённые полосы задаёт подписанный файл GRI в Default.bundle, скрипт его не меняет.
Пропал переключатель VoLTE. У многих пакетов, в том числе Vodafone_hu, Vodafone_ro и Vodafone_tr, переключателя нет, а VoLTE включён всегда. Проверить просто: выключите Wi-Fi и позвоните. Если сеть во время звонка не падает в 3G и интернет работает, VoLTE работает.
EVS (HD Voice+) не включается. EVS бывает только когда он есть у обоих абонентов и оба в IMS: VoLTE, VoNR или VoWiFi. Короткие номера и службы поддержки почти всегда отвечают в AMR, поэтому проверять EVS звонком на 611 или 0890 бесполезно — звоните абоненту того же оператора с EVS. Если EVS есть только на исходящих, а входящие идут в AMR-WB, перезагрузите iPhone: по наблюдению автора скрипта настройки EVS из пакета применяются после полной перезагрузки, авиарежим и переустановка не помогали. Кодек звонка показывает пункт 9.
После установки медленнее интернет или не уходят MMS. Вместе с пакетом меняются настройки сотовых данных: в них может оказаться точка доступа (APN) оператора-донора. Откройте «Настройки → Сотовая связь → [номер] → Сотовая сеть передачи данных» и, если там чужой APN, впишите APN и настройки MMS своего оператора с его сайта; затем включите и выключите авиарежим. Если пункта нет или APN уже свой, дело, скорее всего, в покрытии: в теме у одних на том же пакете скорость упала, у других нет, и сравнение в разных местах Москвы показало зависимость от вышек.
VoWiFi включается только в авиарежиме или при слабом сигнале. Когда звонить через Wi-Fi, а когда через сотовую сеть, решают пакет и оператор. У части пакетов в домашней сети приоритет у сотовой связи. Сравнить пакеты по этому признаку можно на ios-bundles.github.io.
В строке оператора «Vodafone TR Wi-Fi» или «4G» вместо «LTE». Название сети при звонке через Wi-Fi и значок задаёт пакет. На связь это не влияет, а поменять их, не меняя пакет, нельзя: пакеты подписаны Apple.
Предлагают «Обновить настройки оператора». В теме один человек нажал «Обновить», и профиль слетел наполовину: 5G пропал. Ставил он версией v3. У другого с Vodafone_tr это предложение приходит каждый день, у третьего с тем же пакетом не приходит ни разу. Проверенных данных пока нет, поэтому обновление лучше не принимать. Если профиль всё же слетел, поставьте его заново пунктом 1 или 7 и опишите случай в issue #16.
МегаФон: SMS через VoWiFi. Звонки через Wi-Fi работают, SMS — не у всех. До 02.10.2026 в теме SMS через VoWiFi на МегаФоне не уходили ни у кого. 02.10 у двух человек с Vodafone_hu SMS в авиарежиме ушли, у третьего с тем же пакетом нет. Проверять лучше на обычном номере: SMS на короткие номера через VoWiFi не уходят и на штатном пакете. На Билайне SMS через VoWiFi ходят.
Билайн: переключатель «Вызовы по Wi-Fi» есть, а VoWiFi не работает. Сперва проверьте, что услуга подключена на номере. По отзывам в теме Билайн выключает её у SIM, которая стояла в телефоне без официальной поддержки VoWiFi. Помогает одно из двух. Позвонить в поддержку и попросить включить VoWiFi на номере (бывает, что отказывают). Или вставить SIM в Android либо в iPhone 13 и старее, включить там VoWiFi и вернуть SIM в iPhone.
T2 и VoWiFi. До 01.10.2026 у T2 VoWiFi на iPhone в теме не работал ни на одном пакете, кроме Nova_is с подменой адреса ePDG в своём DNS, да и так вышло не у всех. В ночь на 02.10 VoWiFi включился сам, без DNS и без переустановки, у многих в разных городах: Москва, Санкт-Петербург, Нижний Новгород, Волгоград, Омск, Брянск, Калужская область. Пакеты — Vodafone_hu, MTS_ua, Telia_az. Из Перми и части Москвы пишут, что пока нет, и смена пакета не помогла. Похоже, T2 включает услугу на своей стороне по регионам: если не работает, подождите и время от времени включайте и выключайте авиарежим. Ещё в теме приводят условие с сайта T2: VoWiFi не работает вместе с услугами «Городской номер», «Второй номер», «Корпоративная АТС», CVPN и CSD. Если одна из них подключена, пакет не поможет.
Профиль оператора для SIM выбирает процесс CommCenter. Пакеты лежат в двух местах:
/System/Library/Carrier Bundles/iPhone/*.bundle — системные пакеты, подписаны Apple, раздел только для чтения;/var/mobile/Library/Carrier Bundles/iPhone — пользовательский каталог: обновления пакетов (IPCC) и симлинки, по которым CommCenter находит пакет для SIM.Скрипт меняет только пользовательский каталог.
Компьютер общается с iPhone по USB или, в режиме Wi-Fi, по локальной сети через службы, которые телефон открывает после «Доверять». Скрипт использует пять из них:
com.apple.afc) — доступ к файлам телефона, но только внутри /var/mobile/Media. Этой службой пользуются приложения для импорта фото и файловые менеджеры для iPhone. К /var/mobile/Library и /System она доступа не даёт.installation_proxy — установка приложений и пакетов оператора IPCC.syslog_relay — системный журнал телефона, из него читаются сообщения CommCenter.streaming_zip_conduit — загрузка ZIP-архива с распаковкой в /var/mobile/Media.com.apple.atc) — синхронизация медиатеки iTunes/Finder.Первые четыре скрипт вызывает через библиотеку pymobiledevice3, AirTraffic — через библиотеку Apple (см. ниже).
Шаги:
installation_proxy ставит подписанный IPCC другого оператора (AVEA_tr, Swisscom_ch или O2_Germany — тот, что не совпадает с вашими SIM). Установка IPCC заставляет CommCenter заново выбрать пакеты. Если каталога на телефоне ещё нет, она его создаёт. Пакет триггера остаётся в каталоге, но к вашим SIM не относится./var/mobile/Media, читает его по AFC и сохраняет в runs/…/original.zip./System/Library/Carrier Bundles/iPhone/Vodafone_hu.bundle (или на пакет, выбранный в пункте 7). Остальное содержимое каталога не меняется.Resolved path, Verification Result) проверяет, какой пакет выбран для каждой SIM и принята ли его подпись. Если в пункте 7 выбранный пакет не выбран ни для одной SIM (такого пакета нет в этой iOS), каталог возвращается из копии.Каталог лежит вне /var/mobile/Media, поэтому через AFC записать его нельзя. Перенос сделан по методу AirLift: архив с деревом каталога загружается в Media через streaming_zip_conduit, а затем служба синхронизации AirTraffic (протокол iTunes) в ходе поддельной синхронизации книг перемещает его на место по относительному пути. Служебные файлы, которые AirTraffic оставляет в /var/mobile/Media/Books, скрипт удаляет, а исходное состояние Books сверяет с копией. На macOS и Windows используется библиотека Apple AirTrafficHost; на Linux обмен с com.apple.atc реализован через pymobiledevice3 на основе протокола AirCard-Linux и его варианта.
На Linux команда bash "Запуск Linux.sh" --atc-probe проверяет начало сеанса AirTraffic без передачи файлов. Полная установка по USB проверена на iPhone 14, 14 Pro, 15 Pro, 15 Pro Max, 17 и 17 Pro с iOS 18.7.7 и 26.x. На iPhone 14 Pro проверены возврат штатных профилей двух SIM и последующая установка только для SIM 1. На iPhone 15 Pro / iOS 27.0.1 (24A446), МТС, по USB проверены восстановление после сбоя (пункт 5) и последующий возврат штатного профиля (пункт 4): статус подтвердил MTS_ru, служебные файлы Books восстановлены. Wi-Fi на Linux отдельно не проверен.
Проверенные сочетания при установке по USB:
| iPhone | iOS (сборка) | SIM → пакет |
|---|---|---|
| 14 | 26.3 (23D127) | МТС → Vodafone_ro |
| 14 Pro | 26.3.1 (23D8133) | Yota и T2 → Vodafone_hu |
| 15 Pro | 18.7.7 (22H340) | Билайн → Vodafone_hu |
| 15 Pro Max | 26.6.1 (23G83) | Билайн → Vodafone_hu |
| 17 | 26.6.1 (23G83) | МТС → Vodafone_ro |
| 17 Pro | 26.6.2 (23G90) | МТС eSIM → Vodafone_ro |
На iPhone 17 также подтверждён звонок по VoWiFi. Эти проверки выполнены на Linux.
Вызовы Apple и обмен AirTraffic вынесены в airtraffic_apple.py. Модуль работает в отдельном процессе; carrier.py ведёт журнал и подтверждает резервную копию перед финальным переносом. При импорте модуль не загружает библиотеки Apple.
Пункт 4 удаляет из корня каталога все симлинки с именем из 15 цифр. Остальное содержимое каталога, включая симлинки по MCCMNC и пакеты IPCC, не трогается.
runs хранит копии каталога и журналы операций. Пока установка идёт, не удаляйте её. Переносить её в новую версию не нужно: остатки прошлых запусков скрипт убирает с телефона сам. Не публикуйте её: в журналах есть идентификаторы SIM и телефона. Стандартная runs уже исключена в .gitignore. Если указываете свою папку через --runs внутри клона репозитория, исключите её сами, лучше в .git/info/exclude: например, для --runs wifi-runs добавьте строку /wifi-runs/. Скрипт правила git не меняет.session.log, environment.json и блоке диагностики. Суффикс -dev означает версию в разработке. «Сборка скрипта» — первые 12 символов SHA256 файла carrier.py, позволяющие различать изменения внутри одной версии. Без подключения телефона версию можно посмотреть командой python carrier.py --version.macOS пишет «Запуск macOS.command повреждено… Переместите в Корзину». Файл не повреждён: macOS так блокирует неподписанные файлы, скачанные из интернета или Telegram.
bash с пробелом в конце, перетащите в окно файл Запуск macOS.command и нажмите Enter.Можно один раз снять метку карантина с папки, и дальше двойной щелчок будет работать:
/usr/bin/xattr -r -s -d com.apple.quarantine "$HOME/Downloads/CarrierSIM"
Windows не видит iPhone. В «Проводнике» телефон есть (как Apple iPhone, видны фото), а iTunes и скрипт его не находят. Значит, не установлен драйвер Apple Mobile Device USB. Переустановка iTunes не всегда помогает. Скачайте драйвер «Apple Mobile Device USB Driver» из Microsoft Update Catalog, распакуйте .cab и в командной строке от администратора выполните pnputil /add-driver usbaapl64.inf /install из папки с распакованными файлами. Затем перезагрузите компьютер.
«Grappa session could not be established». iPhone отклонил обмен AirTraffic с компьютером. На Windows вызов ATHostConnectionSendSyncRequest мог приводить к этому сбою ещё при сохранении исходного каталога. Скрипт теперь создаёт соединение через ATHostConnectionCreateWithLibrary и отправляет RequestingSync с готовыми данными Grappa. Успешный обмен AirTraffic сам по себе не подтверждает работу VoWiFi, EVS или 5G.
Если ошибка осталась, скрипт пишет «iPhone не принял компоненты Apple на этом компьютере» и не повторяет ту же попытку. Удалите iTunes (и версию из Microsoft Store, если есть), установите iTunes x64 по инструкции на 4PDA, запустите его один раз и повторите. Ставьте полный установщик iTunes, а не только AppleMobileDeviceSupport64.msi из него. В одном случае помогла только версия 12.11.0.26, и перед первым запуском пришлось удалить старую медиатеку iTunes (иначе iTunes выдавал ошибку). Если скачивание на 4PDA выдаёт ошибку 404, нужна регистрация, вход в аккаунт и некоторая активность на форуме.
«iPhone запрещает установку (InstallProhibited)». В «Экранном времени» запрещена установка приложений: «Настройки → Экранное время → Ограничения контента и конфиденциальности → Покупки в iTunes Store и App Store → Установка приложений» — поставьте «Да» на время установки. То же бывает у телефонов с профилем управления (MDM).
«iPhone запрещает изменить Books/Books.plist, а в нём остались записи скрипта». Известный случай — во время этапа началась резервная копия iCloud (#44). Сохраните папку runs с резервными копиями. В одном случае помогла такая последовательность:
--recover). Если ошибка повторится, отправьте автору текст ошибки и журнал сеанса.«Служебные файлы Books постоянно меняются». Закройте приложение «Книги» на iPhone, дождитесь окончания загрузки книг и повторите.
«Скрипт не может работать из этой папки». Скопируйте папку CarrierSIM в «Загрузки» и запустите оттуда.
Пункт 10 в меню или флаг --wifi. Те же службы идут через usbmuxd по сети, как синхронизация Finder по Wi-Fi. Полный цикл установки по Wi-Fi проверен на iPhone 16 Pro Max / iOS 27.0.1: работает, но медленнее, чем по кабелю. Если шаг AirTraffic по Wi-Fi не подключается («AirTraffic не ответил по Wi-Fi за 170 с»), а по кабелю проходит сразу, на macOS проверьте разрешение «Локальная сеть» для терминала («Системные настройки → Конфиденциальность и безопасность → Локальная сеть»): AirTraffic соединяется с iPhone напрямую, и без разрешения macOS молча режет соединение. В tmux, screen и SSH разрешения нет, запускайте Запуск macOS.command (в готовой сборке — CarrierSIM) из Finder или обычное окно терминала. В этом случае скрипт один раз откатывает телефон и не повторяет попытки по Wi-Fi. Дальше подключите кабель, пункт 10 → «кабель» и повторите. Если откат по Wi-Fi не прошёл (сообщение «Автовосстановление не завершено»), сначала выполните пункт 5 по кабелю.
Доверие по Wi-Fi не выдаётся: без готовой пары скрипт остановится и попросит кабель. Сеть должна пропускать Bonjour: гостевые сети и изоляция клиентов на роутере не подойдут.
На macOS терминалу нужно разрешение «Локальная сеть» («Системные настройки → Конфиденциальность и безопасность → Локальная сеть»). Статус и чтение идут через системную службу usbmuxd и работают без него, а шаг AirTraffic соединяется с iPhone напрямую, и без разрешения macOS его молча режет. Скрипт проверяет это перед установкой. При первом запуске macOS может показать окно «Локальная сеть»: нажмите «Разрешить», скрипт ждёт ответа до 20 с. Нет разрешения — останавливается с подсказкой. Откат (пункт 5) проверяет только перед возвратом каталога операторов: если осталось вернуть одни Книги, разрешение не нужно. Из tmux, screen и SSH macOS разрешения не спрашивает и доступ запрещает: запускайте Запуск macOS.command (в готовой сборке — CarrierSIM) из Finder или обычное окно терминала.
Подготовка (с кабелем, один раз)
Проверка связи (ничего не пишет)
Установка
Журналы каждого запуска лежат в runs, host.jsonl — ответы AirTraffic. Их и прикладывайте к отчёту. Журналы iPhone (commcenter.log, device.log) пишутся обезличенными: IMSI и ICCID ваших SIM заменены на <imsi> и <iccid>, другие длинные номера и телефоны — на <num>, имя телефона — на iPhone. Журналы версий до этой правки так не маскировались. Zip-архивы в runs (копии каталога, media-leftovers) не маскируются вообще: в них есть IMSI, не публикуйте их.
python3 carrier.py --status # SIM и план, без записи
python3 carrier.py --wifi --status # то же по Wi-Fi
python3 carrier.py # Vodafone HU на все SIM
python3 carrier.py --bundle O2_Germany --sims 1 # другой профиль, только SIM 1
python3 carrier.py --restore # вернуть штатные профили
python3 carrier.py --restore --sims 2 # только для SIM 2
python3 carrier.py --help # все флаги
На Windows вместо python3 пишите py. Подробное техническое описание есть в README.txt.
Библиотеки iTunes из Microsoft Store. Для нестандартной установки укажите папку библиотек через py carrier.py --check --apple-dir "C:\AppleRuntime"; при установке используйте тот же --apple-dir. Путь к пакету можно узнать командой PowerShell Get-AppxPackage AppleInc.iTunes | Select-Object -ExpandProperty InstallLocation. При загрузке прямо из WindowsApps возможен WinError 5: в этом случае скопируйте DLL из корня пакета, папку CoreFoundation.resources и DLL из его AMDS64 в отдельную папку, например C:\AppleRuntime. Используйте файлы одной версии. Эта настройка выбирает библиотеки AirTraffic; для связи с iPhone нужны также работающая служба и драйвер Apple Mobile Device.
Собственный код CarrierSIM распространяется под MIT. Copyright © 2026 Vladimir B / vlw и участники проекта. При распространении копий или существенных частей кода сохраняйте авторское уведомление и текст лицензии.
Сторонний код сохраняет свои лицензии. Лицензия CarrierSIM не распространяется на файлы Apple, включая IPCC-триггеры в assets.zip, системные пакеты операторов и библиотеки Apple: права на них принадлежат соответствующим правообладателям.
Протокол переноса основан на AirLift (MIT, лицензия в LICENSE-AirLift.txt).
Обмен Grappa на Windows адаптирован из AirCard-Windows; лицензия MIT — в LICENSE-AirCard.txt. Готовые данные Grappa в этом коде взяты из yinyajiang/go-tunes.
Workflow Tests запускается на коммитах в ветках и в pull request. Матрица проверяет Python 3.11–3.14 на Windows, Linux, macOS 15 и 26 (Apple Silicon и Intel) и macOS 27 (Apple Silicon, образ GitHub xcode-27 в режиме public preview): установку зависимостей через тот же код, что использует запускатель, импорты сервисов, компиляцию исходников и регрессионные тесты. Это 28 сочетаний Python и ОС. Фактические версии ОС и Python и архитектура выводятся в журнал задания. Общий статус Python compatibility успешен только после прохождения всей матрицы; его можно назначить обязательной проверкой в правилах ветки.
Тесты проверяют архивы и резервные копии, конфигурацию профилей, выбор и восстановление SIM, обработку ошибок, служебные файлы Books и логи. Они используют временные файлы и имитацию границ подключения, не подключаются к телефону и не заменяют проверку на реальном iPhone.
Локальный запуск без установки зависимостей и подключения телефона:
python -m unittest discover -s tests -v
CarrierSIM - Установка профилей операторов для разблокирования возможностей iPhone и iPad: VoWiFi, 5G и EVS в России и Беларуси
Python
241
134 commits
updated Oct 7, 2026
Скрипт привязывает SIM-карты iPhone по IMSI к системному пакету оператора Vodafone_hu или к любому другому пакету, который есть в iOS телефона. Задуман для включения звонков по Wi-Fi (VoWiFi) в России. Заодно включается кодек EVS и 5G на части диапазонов.
Python-скрипт работает на macOS, Windows и Linux. Готовые сборки без Python выпускаются для macOS, Windows x64 и Linux x64.
Работает на iPhone 12–18, включая модели mini, Pro, Pro Max, Plus, Air и e, с iOS 16 и новее.
| iOS | Работает | Не работает |
|---|---|---|
| 27.2 | ✅ 27.2 beta 2 (24B5089g) | ❌ $\color{red}{\textsf{начиная с 27.2 beta 3 (24B5099f)}}$ |
| 27.0 | ✅ 27.0.1 (24A446) | — |
| 26 | ✅ 26.7.1 (23H30) | — |
| 18 | ✅ 18.7.10 (22H374) | — |
| 17 | ✅ 17.7.2 (21H221) | — |
| 16 | ✅ 16.7.16 (20H392) | — |
| 15 | ❔ не проверялось, 15.8.8 (19H422) | — |
| 14 | ❔ не проверялось, 14.8.1 (18H107) | — |
Указаны самые свежие сборки каждой ветки по AppleDB. На iOS 27.2 beta 3 и новее Apple закрыла способ записи: скрипт предупреждает и останавливается, если iPhone откажет в переносе.
iPad Wi-Fi + Cellular: нужна активная SIM или eSIM; установка пока не проверена на устройстве. Модели Wi-Fi без сотового модема не поддерживают установку профилей.
Экспериментальный инструмент. Работа на будущих версиях iOS не гарантируется.
usbmuxd (например, sudo apt install usbmuxd на Debian/Ubuntu). Проверка --check покажет, найден ли он и есть ли сокет службы.Если устройство не определяется, разблокируйте его, разрешите подключение в «Настройки → Конфиденциальность и безопасность → Проводные аксессуары» и переподключите кабель. На Linux при необходимости: sudo systemctl restart usbmuxd.
Запуск macOS.commandЗапуск Windows.cmdbash "Запуск Linux.sh".До сообщения «Готово» держите iPhone разблокированным. Если включена резервная копия iCloud, а телефон на зарядке (кабель к компьютеру тоже считается) и экран погас, iOS примерно раз в сутки начинает копию и при этом переписывает служебные файлы Books — прямо посреди этапа (#44). Скрипт перед этапами предупреждает об этом и показывает, когда была последняя копия.
При первом запуске скрипт сам скачает нужные библиотеки в папку .venv. Это займёт пару минут.
К релизу прикладываются архивы CarrierSIM-vN-macOS-arm64.zip, CarrierSIM-vN-macOS-x86_64.zip, CarrierSIM-vN-Windows-x64.zip и CarrierSIM-vN-Linux-x64.zip. Python-вариант для всех трёх ОС — CarrierSIM-vN-Python-universal.zip. Python и библиотеки уже внутри. Их собирает GitHub Actions (.github/workflows/standalone.yml) из того же тега, происхождение подтверждено attestation: gh attestation verify CarrierSIM-vN-….zip -R ios-bundles/CarrierSIM.
CarrierSIM (CarrierSIM.exe) лежат bundle.yaml, assets.zip и README. runs появится там же.xattr -dr com.apple.quarantine ~/Downloads/CarrierSIM (путь укажите свой, куда распаковали), потом запустите CarrierSIM двойным щелчком. Без этого macOS не даст открыть файл или его библиотеки.CarrierSIM.exe. Если скачивание на 4PDA выдаёт ошибку 404, нужна регистрация, вход в аккаунт и некоторая активность на форуме.usbmuxd, распакуйте архив через unzip с сохранением символических ссылок и запустите ./CarrierSIM в терминале. Сборка создаётся и проверяется на Ubuntu 22.04 x64; для более старых систем используйте Python-вариант.Меню и флаги те же, что у скрипта: CarrierSIM --status, CarrierSIM --bundle Vodafone_ro --sims 1 и так далее. Сборка для macOS arm64 проверена без телефона (--check, меню). Сборки для Windows и Intel Mac на железе не запускались.
| Пункт | Что делает |
|---|---|
| 1 | Установить профиль по bundle.yaml (МТС России — Vodafone_ro, остальные — Vodafone_hu) |
| 2 | Показать SIM и план установки, ничего не записывая |
| 3 | Проверить компьютер и файлы, телефон не нужен |
| 4 | Вернуть штатный профиль (выбранной SIM или всем) |
| 5 | Восстановить после сбоя |
| 6 | Справка по флагам |
| 7 | Выбрать другой профиль и SIM (1, 2 или обе): сначала план и паспорт профиля, запись после подтверждения |
| 8 | Диагностика связи: IMS, VoLTE/VoWiFi/VoNR, ePDG, сеть, 5G SA (только чтение журнала) |
| 9 | Проверка звонка: канал (Wi-Fi/LTE/5G) и кодек EVS/AMR (только чтение журнала) |
| 10 | Переключить связь с iPhone: кабель или Wi-Fi (эксперимент). В режиме Wi-Fi все действия с телефоном идут без кабеля |
| 11 | Отчёт о профиле для темы или issue: журнал CommCenter и что вы проверили сами (только чтение) |
Файл bundle.yaml рядом со скриптом задаёт пакет для пункта 1:
# Пакет по умолчанию для SIM России (250) и Беларуси (257)
default: Vodafone_hu
# Пакет для конкретного оператора: MCCMNC без пробела (250 01 = МТС RU)
25001: Vodafone_ro
Для каждой SIM сначала ищется строка с её MCCMNC, затем default. Без файла ставится Vodafone_hu. default действует только на SIM операторов России (MCC 250) и Беларуси (MCC 257): зарубежная SIM сохраняет свой профиль, в плане (пункт 2) она помечена «не трогаю». Чтобы сменить профиль зарубежной SIM, добавьте строку с её MCCMNC или выберите её номер в пункте 7 (флаг --sims 1 или 2): явно выбранный слот получает профиль при любом операторе. Имя пакета — как папка в /System/Library/Carrier Bundles/iPhone на телефоне, без .bundle. Пункт 7 и флаг --bundle на время запуска заменяют файл.
Пункты 1, 2 и 7 под планом показывают свойства выбранного пакета из таблицы ios-bundles.github.io: приоритет VoWiFi дома, VoWiFi в роуминге, подпись сети при звонке по Wi-Fi, номер активации iMessage/FaceTime, значок LTE/4G, переключатель VoLTE, 5G, EVS, доп. услуги через IMS (XCAP) и визуальную голосовую почту. Например, у Vodafone_tr номер активации iMessage местный турецкий, 13191: из российской сети он недоступен, и слетевшая активация по номеру может не восстановиться (так пишут в теме на 4pda). У Vodafone_ro VoWiFi в роуминге выключен.
Это содержимое файлов пакета из iOS 27.0 для iPhone 17, не проверка на телефоне: на деле оператор может вести себя иначе. Таблица скачивается раз в неделю в runs/bundles.json. Без интернета паспорт просто не показывается. Если имя пакета отличается от таблицы только регистром (mts_ua вместо MTS_ua), скрипт остановится до записи. Имени, которого нет в таблице, он подскажет похожие и продолжит: в другой iOS пакет может быть.
Для полноценной работы профиля рекомендуется перезагрузить телефон после установки. Затем проверьте связь, звонки и интернет.
Пункт 8 (--diagnose) читает журнал CommCenter до 90 секунд: на это время включите и через 10 секунд выключите авиарежим, Wi-Fi не выключайте. По кабелю журнал при этом может оборваться, скрипт подключится снова. Когда после выключения авиарежима все SIM заново зарегистрировались в IMS, скрипт ждёт ещё 10 секунд и заканчивает сам; в терминале закончить раньше можно клавишей Enter. В отчёте по каждой SIM — IMS, VoWiFi, сеть, 5G SA, а отдельным блоком — VoWiFi-туннель: адрес ePDG, последнее состояние IKE и последняя ошибка IKE, если была. Если вместо адреса ePDG стоит 127.0.0.1 или 0.0.0.0, туннель до оператора не дойдёт ни на каком пакете. Обычно так имя ePDG закрывает DNS — роутер, фильтр рекламы (AdGuard, Pi-hole), VPN или оператор. Полный журнал CommCenter за это время, с подробностями IKE, лежит в runs/ДАТА-diagnose/commcenter.log (номера замаскированы).
Пункт 9 (--watch-call) слушает журнал до 180 секунд, пока вы делаете тестовый звонок, и показывает канал и кодек. После звонка можно нажать Enter.
Какой профиль лучше для какого оператора, решают отзывы, а не таблица свойств пакета. Пункт 11 (флаг --report) собирает их в одном виде:
*3001#12345#*, iMessage с номера, SMS по Wi-Fi, режим модема, объединение вызовов. Отвечайте «д» (да), «н» (нет) или Enter (не проверял). Вопросы задаются только в терминале: если скрипт запущен без него, вопросы пропускаются, а в отчёте появляется строка «Ручные проверки: не заданы».runs/ДАТА-report/report.txt.В отчёте модель, iOS, оператор, загруженный профиль с версией, сводка журнала и ваши ответы. Номера, IMSI и ICCID в нём нет. Блок вставьте в тему или в issue по шаблону «Отчёт о профиле». Телефон не меняется.
Слетит ли профиль после обновления iOS или перезагрузки? По отзывам в теме на 4pda не слетает: после обновления 27.0 на 27.0.1 и после перезагрузок профиль остаётся. В iOS 27.2 beta 3 Apple закрыла сам способ записи (#56): iPhone больше не переносит файлы AirTraffic в каталог операторов. Стоящий профиль после обновления остаётся, но поставить, сменить или удалить его скриптом на такой версии уже нельзя. На 27.2 beta 1 и 2 запись ещё работает. На более новых версиях скрипт предупреждает и всё равно пробует; если iPhone отказывает в переносе, скрипт останавливается до каких-либо изменений и пишет, что Apple закрыла способ. Если профиль ещё придётся менять, не обновляйтесь до 27.2 beta 3 и новее. Снять его там можно полным сбросом iPhone или сменой SIM: профиль привязан к IMSI, и для новой SIM iOS выберет штатный пакет. Сброс настроек сети профиль не снимает.
Поменял SIM, и профиль пропал. Профиль привязан к IMSI. Новая SIM, перевыпуск eSIM или перенос номера с eSIM на пластиковую SIM дают новый IMSI, поэтому профиль нужно поставить заново пунктом 1 или 7.
После смены SIM не активируются iMessage и FaceTime. В теме так бывает и на штатном пакете: откат пунктом 4 не помогает. Несколько человек вылечили это перевыпуском SIM или eSIM у оператора: у новой карты другой ICCID, и активация проходила за 10–60 минут. После перевыпуска профиль нужно поставить заново: IMSI тоже новый. Учтите: после перевыпуска SIM/eSIM оператор может ограничить отправку и получение SMS на первые 24 часа. В этот период активация iMessage и FaceTime по номеру может быть временно недоступна. Дождитесь снятия ограничений и повторите активацию.
Есть значок 5G, а скорость как в LTE. Значок и переключатель 5G ещё не значат, что телефон в сети 5G. Наберите *3001#12345# и нажмите вызов, откроется Field Test. Полосы с буквой n (n1, n7, n40) относятся к 5G NR, полосы с буквой b к LTE. NSA значит 5G поверх LTE: если рядом видны только b-полосы, телефон работает в LTE. n78 и n79 в России недоступны при любом пакете: разрешённые полосы задаёт подписанный файл GRI в Default.bundle, скрипт его не меняет.
Пропал переключатель VoLTE. У многих пакетов, в том числе Vodafone_hu, Vodafone_ro и Vodafone_tr, переключателя нет, а VoLTE включён всегда. Проверить просто: выключите Wi-Fi и позвоните. Если сеть во время звонка не падает в 3G и интернет работает, VoLTE работает.
EVS (HD Voice+) не включается. EVS бывает только когда он есть у обоих абонентов и оба в IMS: VoLTE, VoNR или VoWiFi. Короткие номера и службы поддержки почти всегда отвечают в AMR, поэтому проверять EVS звонком на 611 или 0890 бесполезно — звоните абоненту того же оператора с EVS. Если EVS есть только на исходящих, а входящие идут в AMR-WB, перезагрузите iPhone: по наблюдению автора скрипта настройки EVS из пакета применяются после полной перезагрузки, авиарежим и переустановка не помогали. Кодек звонка показывает пункт 9.
После установки медленнее интернет или не уходят MMS. Вместе с пакетом меняются настройки сотовых данных: в них может оказаться точка доступа (APN) оператора-донора. Откройте «Настройки → Сотовая связь → [номер] → Сотовая сеть передачи данных» и, если там чужой APN, впишите APN и настройки MMS своего оператора с его сайта; затем включите и выключите авиарежим. Если пункта нет или APN уже свой, дело, скорее всего, в покрытии: в теме у одних на том же пакете скорость упала, у других нет, и сравнение в разных местах Москвы показало зависимость от вышек.
VoWiFi включается только в авиарежиме или при слабом сигнале. Когда звонить через Wi-Fi, а когда через сотовую сеть, решают пакет и оператор. У части пакетов в домашней сети приоритет у сотовой связи. Сравнить пакеты по этому признаку можно на ios-bundles.github.io.
В строке оператора «Vodafone TR Wi-Fi» или «4G» вместо «LTE». Название сети при звонке через Wi-Fi и значок задаёт пакет. На связь это не влияет, а поменять их, не меняя пакет, нельзя: пакеты подписаны Apple.
Предлагают «Обновить настройки оператора». В теме один человек нажал «Обновить», и профиль слетел наполовину: 5G пропал. Ставил он версией v3. У другого с Vodafone_tr это предложение приходит каждый день, у третьего с тем же пакетом не приходит ни разу. Проверенных данных пока нет, поэтому обновление лучше не принимать. Если профиль всё же слетел, поставьте его заново пунктом 1 или 7 и опишите случай в issue #16.
МегаФон: SMS через VoWiFi. Звонки через Wi-Fi работают, SMS — не у всех. До 02.10.2026 в теме SMS через VoWiFi на МегаФоне не уходили ни у кого. 02.10 у двух человек с Vodafone_hu SMS в авиарежиме ушли, у третьего с тем же пакетом нет. Проверять лучше на обычном номере: SMS на короткие номера через VoWiFi не уходят и на штатном пакете. На Билайне SMS через VoWiFi ходят.
Билайн: переключатель «Вызовы по Wi-Fi» есть, а VoWiFi не работает. Сперва проверьте, что услуга подключена на номере. По отзывам в теме Билайн выключает её у SIM, которая стояла в телефоне без официальной поддержки VoWiFi. Помогает одно из двух. Позвонить в поддержку и попросить включить VoWiFi на номере (бывает, что отказывают). Или вставить SIM в Android либо в iPhone 13 и старее, включить там VoWiFi и вернуть SIM в iPhone.
T2 и VoWiFi. До 01.10.2026 у T2 VoWiFi на iPhone в теме не работал ни на одном пакете, кроме Nova_is с подменой адреса ePDG в своём DNS, да и так вышло не у всех. В ночь на 02.10 VoWiFi включился сам, без DNS и без переустановки, у многих в разных городах: Москва, Санкт-Петербург, Нижний Новгород, Волгоград, Омск, Брянск, Калужская область. Пакеты — Vodafone_hu, MTS_ua, Telia_az. Из Перми и части Москвы пишут, что пока нет, и смена пакета не помогла. Похоже, T2 включает услугу на своей стороне по регионам: если не работает, подождите и время от времени включайте и выключайте авиарежим. Ещё в теме приводят условие с сайта T2: VoWiFi не работает вместе с услугами «Городской номер», «Второй номер», «Корпоративная АТС», CVPN и CSD. Если одна из них подключена, пакет не поможет.
Профиль оператора для SIM выбирает процесс CommCenter. Пакеты лежат в двух местах:
/System/Library/Carrier Bundles/iPhone/*.bundle — системные пакеты, подписаны Apple, раздел только для чтения;/var/mobile/Library/Carrier Bundles/iPhone — пользовательский каталог: обновления пакетов (IPCC) и симлинки, по которым CommCenter находит пакет для SIM.Скрипт меняет только пользовательский каталог.
Компьютер общается с iPhone по USB или, в режиме Wi-Fi, по локальной сети через службы, которые телефон открывает после «Доверять». Скрипт использует пять из них:
com.apple.afc) — доступ к файлам телефона, но только внутри /var/mobile/Media. Этой службой пользуются приложения для импорта фото и файловые менеджеры для iPhone. К /var/mobile/Library и /System она доступа не даёт.installation_proxy — установка приложений и пакетов оператора IPCC.syslog_relay — системный журнал телефона, из него читаются сообщения CommCenter.streaming_zip_conduit — загрузка ZIP-архива с распаковкой в /var/mobile/Media.com.apple.atc) — синхронизация медиатеки iTunes/Finder.Первые четыре скрипт вызывает через библиотеку pymobiledevice3, AirTraffic — через библиотеку Apple (см. ниже).
Шаги:
installation_proxy ставит подписанный IPCC другого оператора (AVEA_tr, Swisscom_ch или O2_Germany — тот, что не совпадает с вашими SIM). Установка IPCC заставляет CommCenter заново выбрать пакеты. Если каталога на телефоне ещё нет, она его создаёт. Пакет триггера остаётся в каталоге, но к вашим SIM не относится./var/mobile/Media, читает его по AFC и сохраняет в runs/…/original.zip./System/Library/Carrier Bundles/iPhone/Vodafone_hu.bundle (или на пакет, выбранный в пункте 7). Остальное содержимое каталога не меняется.Resolved path, Verification Result) проверяет, какой пакет выбран для каждой SIM и принята ли его подпись. Если в пункте 7 выбранный пакет не выбран ни для одной SIM (такого пакета нет в этой iOS), каталог возвращается из копии.Каталог лежит вне /var/mobile/Media, поэтому через AFC записать его нельзя. Перенос сделан по методу AirLift: архив с деревом каталога загружается в Media через streaming_zip_conduit, а затем служба синхронизации AirTraffic (протокол iTunes) в ходе поддельной синхронизации книг перемещает его на место по относительному пути. Служебные файлы, которые AirTraffic оставляет в /var/mobile/Media/Books, скрипт удаляет, а исходное состояние Books сверяет с копией. На macOS и Windows используется библиотека Apple AirTrafficHost; на Linux обмен с com.apple.atc реализован через pymobiledevice3 на основе протокола AirCard-Linux и его варианта.
На Linux команда bash "Запуск Linux.sh" --atc-probe проверяет начало сеанса AirTraffic без передачи файлов. Полная установка по USB проверена на iPhone 14, 14 Pro, 15 Pro, 15 Pro Max, 17 и 17 Pro с iOS 18.7.7 и 26.x. На iPhone 14 Pro проверены возврат штатных профилей двух SIM и последующая установка только для SIM 1. На iPhone 15 Pro / iOS 27.0.1 (24A446), МТС, по USB проверены восстановление после сбоя (пункт 5) и последующий возврат штатного профиля (пункт 4): статус подтвердил MTS_ru, служебные файлы Books восстановлены. Wi-Fi на Linux отдельно не проверен.
Проверенные сочетания при установке по USB:
| iPhone | iOS (сборка) | SIM → пакет |
|---|---|---|
| 14 | 26.3 (23D127) | МТС → Vodafone_ro |
| 14 Pro | 26.3.1 (23D8133) | Yota и T2 → Vodafone_hu |
| 15 Pro | 18.7.7 (22H340) | Билайн → Vodafone_hu |
| 15 Pro Max | 26.6.1 (23G83) | Билайн → Vodafone_hu |
| 17 | 26.6.1 (23G83) | МТС → Vodafone_ro |
| 17 Pro | 26.6.2 (23G90) | МТС eSIM → Vodafone_ro |
На iPhone 17 также подтверждён звонок по VoWiFi. Эти проверки выполнены на Linux.
Вызовы Apple и обмен AirTraffic вынесены в airtraffic_apple.py. Модуль работает в отдельном процессе; carrier.py ведёт журнал и подтверждает резервную копию перед финальным переносом. При импорте модуль не загружает библиотеки Apple.
Пункт 4 удаляет из корня каталога все симлинки с именем из 15 цифр. Остальное содержимое каталога, включая симлинки по MCCMNC и пакеты IPCC, не трогается.
runs хранит копии каталога и журналы операций. Пока установка идёт, не удаляйте её. Переносить её в новую версию не нужно: остатки прошлых запусков скрипт убирает с телефона сам. Не публикуйте её: в журналах есть идентификаторы SIM и телефона. Стандартная runs уже исключена в .gitignore. Если указываете свою папку через --runs внутри клона репозитория, исключите её сами, лучше в .git/info/exclude: например, для --runs wifi-runs добавьте строку /wifi-runs/. Скрипт правила git не меняет.session.log, environment.json и блоке диагностики. Суффикс -dev означает версию в разработке. «Сборка скрипта» — первые 12 символов SHA256 файла carrier.py, позволяющие различать изменения внутри одной версии. Без подключения телефона версию можно посмотреть командой python carrier.py --version.macOS пишет «Запуск macOS.command повреждено… Переместите в Корзину». Файл не повреждён: macOS так блокирует неподписанные файлы, скачанные из интернета или Telegram.
bash с пробелом в конце, перетащите в окно файл Запуск macOS.command и нажмите Enter.Можно один раз снять метку карантина с папки, и дальше двойной щелчок будет работать:
/usr/bin/xattr -r -s -d com.apple.quarantine "$HOME/Downloads/CarrierSIM"
Windows не видит iPhone. В «Проводнике» телефон есть (как Apple iPhone, видны фото), а iTunes и скрипт его не находят. Значит, не установлен драйвер Apple Mobile Device USB. Переустановка iTunes не всегда помогает. Скачайте драйвер «Apple Mobile Device USB Driver» из Microsoft Update Catalog, распакуйте .cab и в командной строке от администратора выполните pnputil /add-driver usbaapl64.inf /install из папки с распакованными файлами. Затем перезагрузите компьютер.
«Grappa session could not be established». iPhone отклонил обмен AirTraffic с компьютером. На Windows вызов ATHostConnectionSendSyncRequest мог приводить к этому сбою ещё при сохранении исходного каталога. Скрипт теперь создаёт соединение через ATHostConnectionCreateWithLibrary и отправляет RequestingSync с готовыми данными Grappa. Успешный обмен AirTraffic сам по себе не подтверждает работу VoWiFi, EVS или 5G.
Если ошибка осталась, скрипт пишет «iPhone не принял компоненты Apple на этом компьютере» и не повторяет ту же попытку. Удалите iTunes (и версию из Microsoft Store, если есть), установите iTunes x64 по инструкции на 4PDA, запустите его один раз и повторите. Ставьте полный установщик iTunes, а не только AppleMobileDeviceSupport64.msi из него. В одном случае помогла только версия 12.11.0.26, и перед первым запуском пришлось удалить старую медиатеку iTunes (иначе iTunes выдавал ошибку). Если скачивание на 4PDA выдаёт ошибку 404, нужна регистрация, вход в аккаунт и некоторая активность на форуме.
«iPhone запрещает установку (InstallProhibited)». В «Экранном времени» запрещена установка приложений: «Настройки → Экранное время → Ограничения контента и конфиденциальности → Покупки в iTunes Store и App Store → Установка приложений» — поставьте «Да» на время установки. То же бывает у телефонов с профилем управления (MDM).
«iPhone запрещает изменить Books/Books.plist, а в нём остались записи скрипта». Известный случай — во время этапа началась резервная копия iCloud (#44). Сохраните папку runs с резервными копиями. В одном случае помогла такая последовательность:
--recover). Если ошибка повторится, отправьте автору текст ошибки и журнал сеанса.«Служебные файлы Books постоянно меняются». Закройте приложение «Книги» на iPhone, дождитесь окончания загрузки книг и повторите.
«Скрипт не может работать из этой папки». Скопируйте папку CarrierSIM в «Загрузки» и запустите оттуда.
Пункт 10 в меню или флаг --wifi. Те же службы идут через usbmuxd по сети, как синхронизация Finder по Wi-Fi. Полный цикл установки по Wi-Fi проверен на iPhone 16 Pro Max / iOS 27.0.1: работает, но медленнее, чем по кабелю. Если шаг AirTraffic по Wi-Fi не подключается («AirTraffic не ответил по Wi-Fi за 170 с»), а по кабелю проходит сразу, на macOS проверьте разрешение «Локальная сеть» для терминала («Системные настройки → Конфиденциальность и безопасность → Локальная сеть»): AirTraffic соединяется с iPhone напрямую, и без разрешения macOS молча режет соединение. В tmux, screen и SSH разрешения нет, запускайте Запуск macOS.command (в готовой сборке — CarrierSIM) из Finder или обычное окно терминала. В этом случае скрипт один раз откатывает телефон и не повторяет попытки по Wi-Fi. Дальше подключите кабель, пункт 10 → «кабель» и повторите. Если откат по Wi-Fi не прошёл (сообщение «Автовосстановление не завершено»), сначала выполните пункт 5 по кабелю.
Доверие по Wi-Fi не выдаётся: без готовой пары скрипт остановится и попросит кабель. Сеть должна пропускать Bonjour: гостевые сети и изоляция клиентов на роутере не подойдут.
На macOS терминалу нужно разрешение «Локальная сеть» («Системные настройки → Конфиденциальность и безопасность → Локальная сеть»). Статус и чтение идут через системную службу usbmuxd и работают без него, а шаг AirTraffic соединяется с iPhone напрямую, и без разрешения macOS его молча режет. Скрипт проверяет это перед установкой. При первом запуске macOS может показать окно «Локальная сеть»: нажмите «Разрешить», скрипт ждёт ответа до 20 с. Нет разрешения — останавливается с подсказкой. Откат (пункт 5) проверяет только перед возвратом каталога операторов: если осталось вернуть одни Книги, разрешение не нужно. Из tmux, screen и SSH macOS разрешения не спрашивает и доступ запрещает: запускайте Запуск macOS.command (в готовой сборке — CarrierSIM) из Finder или обычное окно терминала.
Подготовка (с кабелем, один раз)
Проверка связи (ничего не пишет)
Установка
Журналы каждого запуска лежат в runs, host.jsonl — ответы AirTraffic. Их и прикладывайте к отчёту. Журналы iPhone (commcenter.log, device.log) пишутся обезличенными: IMSI и ICCID ваших SIM заменены на <imsi> и <iccid>, другие длинные номера и телефоны — на <num>, имя телефона — на iPhone. Журналы версий до этой правки так не маскировались. Zip-архивы в runs (копии каталога, media-leftovers) не маскируются вообще: в них есть IMSI, не публикуйте их.
python3 carrier.py --status # SIM и план, без записи
python3 carrier.py --wifi --status # то же по Wi-Fi
python3 carrier.py # Vodafone HU на все SIM
python3 carrier.py --bundle O2_Germany --sims 1 # другой профиль, только SIM 1
python3 carrier.py --restore # вернуть штатные профили
python3 carrier.py --restore --sims 2 # только для SIM 2
python3 carrier.py --help # все флаги
На Windows вместо python3 пишите py. Подробное техническое описание есть в README.txt.
Библиотеки iTunes из Microsoft Store. Для нестандартной установки укажите папку библиотек через py carrier.py --check --apple-dir "C:\AppleRuntime"; при установке используйте тот же --apple-dir. Путь к пакету можно узнать командой PowerShell Get-AppxPackage AppleInc.iTunes | Select-Object -ExpandProperty InstallLocation. При загрузке прямо из WindowsApps возможен WinError 5: в этом случае скопируйте DLL из корня пакета, папку CoreFoundation.resources и DLL из его AMDS64 в отдельную папку, например C:\AppleRuntime. Используйте файлы одной версии. Эта настройка выбирает библиотеки AirTraffic; для связи с iPhone нужны также работающая служба и драйвер Apple Mobile Device.
Собственный код CarrierSIM распространяется под MIT. Copyright © 2026 Vladimir B / vlw и участники проекта. При распространении копий или существенных частей кода сохраняйте авторское уведомление и текст лицензии.
Сторонний код сохраняет свои лицензии. Лицензия CarrierSIM не распространяется на файлы Apple, включая IPCC-триггеры в assets.zip, системные пакеты операторов и библиотеки Apple: права на них принадлежат соответствующим правообладателям.
Протокол переноса основан на AirLift (MIT, лицензия в LICENSE-AirLift.txt).
Обмен Grappa на Windows адаптирован из AirCard-Windows; лицензия MIT — в LICENSE-AirCard.txt. Готовые данные Grappa в этом коде взяты из yinyajiang/go-tunes.
Workflow Tests запускается на коммитах в ветках и в pull request. Матрица проверяет Python 3.11–3.14 на Windows, Linux, macOS 15 и 26 (Apple Silicon и Intel) и macOS 27 (Apple Silicon, образ GitHub xcode-27 в режиме public preview): установку зависимостей через тот же код, что использует запускатель, импорты сервисов, компиляцию исходников и регрессионные тесты. Это 28 сочетаний Python и ОС. Фактические версии ОС и Python и архитектура выводятся в журнал задания. Общий статус Python compatibility успешен только после прохождения всей матрицы; его можно назначить обязательной проверкой в правилах ветки.
Тесты проверяют архивы и резервные копии, конфигурацию профилей, выбор и восстановление SIM, обработку ошибок, служебные файлы Books и логи. Они используют временные файлы и имитацию границ подключения, не подключаются к телефону и не заменяют проверку на реальном iPhone.
Локальный запуск без установки зависимостей и подключения телефона:
python -m unittest discover -s tests -v