Да, вам нужен Mac для разработки любых приложений под iOS, но это не значит, что вам нужно писать код на Mac. Фактически вы можете написать свой код в любой комбинации ОС / редактора, которую вы предпочитаете, и использовать свой Mac для запуска симулятора. Я обещаю, что это легко сделать и не требует запутанного, навязчивого рабочего процесса.

Зачем кому-то такое богохульство ?!

Что ж, в моем случае я просто привык к своей настройке Linux и сочетаниям клавиш. Я не хочу подчиняться воле macOS и переписывать свою мышечную память. Я потратил много времени на настройку KDE, чтобы сделать его подходящим для меня, а macOS не предлагает такой гибкости для настройки (к тому же я не хочу делать эту работу снова и снова). Наконец, Linux, кажется, лучше работает с моим сверхшироким монитором, и я определенно не откажусь от этого.

Но какими бы ни были ваши причины, если вы все еще читаете эту статью, вы, вероятно, захотите настроить свою среду разработки аналогичным образом, поэтому хватит объяснения почему. Давайте перейдем к тому, как.

Хорошо, я продана. Какая уловка?

Ваша машина разработчика и ваш Mac должны общаться друг с другом, поэтому перед началом убедитесь, что ваши машины находятся в одной локальной сети и что ваш Mac может отправлять HTTP-запросы к DEV_MACHINE_IP:8585. Вы можете проверить это, запустив любой веб-сервер на своей машине разработчика, привязав его к этому порту и попытавшись связаться с https://DEV_MACHINE_IP:8585 с помощью веб-браузера на вашем Mac. Если вы не можете получить к нему доступ, возможно, вам придется добавить исключение в брандмауэр машины разработчика.

Приложения React Native работают в двух отдельных частях. Один из них - это упаковщик, который перезагружается каждый раз, когда вы сохраняете свой код JavaScript. Другой - симулятор. Когда вы запускаете симулятор с react-native run-ios, инструмент CLI запускает эти две программы, но упаковщик достаточно хорош, чтобы сказать вам, что вы действительно можете заменить его своей собственной. Итак, я сделал: я запустил упаковщик в своем ящике разработчика с react-native start --host 0.0.0.0 --port 8585 (установка хоста на 0.0.0.0 жизненно важна, потому что в противном случае ваш сервер будет привязан только к localhost и не будет доступен с вашего Mac).

Мне не удалось найти настройку, чтобы сообщить React Native опрашивать службу упаковщика в другой паре хост: порт, поэтому я решил, что если я хочу, чтобы он обращался к серверу, работающему на моей машине разработчика, мне нужно было создать туннель TCP, который на самом деле довольно легко настроить. Запустите socat tcp-listen:8081,reuseaddr,fork tcp:DEV_MACHINE_IP:8585 на своем Mac, и все готово. Теперь, когда вы запустите react-native run-ios, упаковщик заметит, что программа прослушивает порт 8081 (инструмент socat, который мы только что запустили), и не запустит собственный упаковщик. Вместо этого он будет разговаривать с localhost:8081, который, в свою очередь, будет передавать запросы DEV_MACHINE_IP:8585.

Все готово!

Внесите некоторые изменения в код React Native на своей машине разработчика, затем нажмите _12 _ + _ 13_ на Mac, чтобы увидеть изменения. Как и было обещано, это не нарушит ваш рабочий процесс и позволит вам использовать собственные инструменты для разработки приложений для iOS.