Главный вопрос жизни, Вселенной и вообще. И sing-box на Apple.

Вот не так давно рассказывал про то как мирил sing-box и Apple API, но не рассказал главное: чтобы это найти, я пересобрал расширение 42 раза. Не образно — буквально, номер сборки дошёл до 42, а в процессе сидел как Великий Думатель Дугласа Адамса.

Каждая пересборка была нетривиальной: это не «поменял строчку и запустил». Архив, экспорт, ручная переподпись (экспорт Apple почему-то портит подпись вложенных файлов сам, отдельная история), отправка на нотаризацию к Apple и ожидание ответа, деплой, тест. Десятки минут на цикл, не секунды. Умножай на 42. Получишь ответ на главный вопрос жизни, Вселенной и... ну ты понимаешь.

Самое неприятное — не то, что было сложно, а то, что каждая версия реально что-то чинила. По ходу этих сборок находились самые настоящие баги: расширение не перестейджилось при неизменном номере версии - старый бинарь крутился, пока я думал, что тестирую новый. Логи молчали, потому что система их редактирует. Дальше нашёлся пропущенный вызов, без которого сервис не мог поднять внутреннюю корутину. Каждый фикс двигал зависание на шаг глубже — но соединение всё равно не устанавливалось. Это то, что реально сводит с ума в какой-то момент: ты не гадаешь наугад, ты чинишь настоящие проблемы одну за одной — а результата всё нет.

В какой-то момент я себе установил правило: если три подряд гипотезы не дали результата - делаю стоп, говорю себе "стоп, не упирайся, отдай нейронке, пусть найдёт и накажет виновных.".

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

Итог: 42 версии ушло не потому что я тупил, а потому что System Extension на macOS — это слой, где ошибки прячутся глубоко, диагностика через логи не работает, и единственный надёжный способ — снимать живой стек процесса прямо в момент зависания. Теперь так и делаю, если что-то похожее повторится. За одно еще и научился пользоваться Console приложением, которое до этого никогда не запускал в профессиональных нуждах.

А теперь и стабильный коннект и туннелирование и порт на айфон с мака за один заход корректно встал. Ну крутота. Правда в процессе пришлось сидеть вот так и думать, почему именно 42.

Главный вопрос жизни, Вселенной и вообще. И sing-box на Apple | Сетка — социальная сеть от hh.ru