Connect with us

Разработка

Почему xcodebuild работает медленнее, чем Xcode?

Если вы, как и я, заметили, что xcodebuild работает медленно, не волнуйтесь. Вы не один такой.

Опубликовано

/

     
     

С тех пор как я перешел на Cursor для большей части своего рабочего процесса iOS-разработки, я стал меньше работать с графическим интерфейсом Xcode и больше — с его инструментом командной строки, xcodebuild.

Если вы не знакомы с ним, то он используется для сборки проекта без запуска самого приложения Xcode. Если вы запускаете свой проект в CI и/или используете Fastlane, вы определенно использовали эту утилиту, может даже не зная об этом.

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

А затем подключается xcrun для запуска.

Если вы не используете кастомный набор инструментов для сборки, например Bazel, вы привязаны к Xcode или xcodebuild для сборки вашего проекта.

Если вы, как и я, заметили, что xcodebuild работает медленно, не волнуйтесь. Вы не один такой. В настоящее время в xcodebuild есть ошибка. Он выполняет встроенные сетевые запросы при сборке проекта, чтобы проверить наличие provisioning профайлов, даже при инкрементных сборках.

Почему xcodebuild работает медленнее, чем Xcode?

Шаг сразу после Resolving Package GraphGatherProvisioningInputs, и время, которое xcodebuild тратит на него, кажется, растет вместе с количеством целей в вашем проекте.

Есть способ обойти это, как отмечено в этой проблеме xcodebuild vim extension на GitHub.

Вы можете запретить xcodebuild пинговать сайт, заблокировав доступ к developerservices2.apple.com в вашем /etc/hosts:

А затем, когда сборка будет завершена, восстановите доступ:

Обратите внимание, что пока developerservices2.apple.com заблокирован, Xcode не сможет получить доступ к вашим provisioning-профилям, и IDE удалит ваши учетные записи разработчиков, если вы его запустите. Поэтому не забудьте удалить запись из /etc/hosts.

Эта ошибка присутствует с первой бета-версии Xcode 16.0 и до сих пор присутствует в Xcode 16.1 RC. Будем надеяться, что Apple скоро исправит ее…

Рудранк также написал скрипт, который я вставлю сюда:

По сути, это обертка для xcodebuild, которая блокирует/разблокирует домен Apple во время сборки.

Использование:

Но, кроме того, он так устроен

Ну, Xcode устроен именно так. По сути, xcodebuild является одноразовым; сервер убивается, как только сборка завершена. Само приложение Xcode работает по-другому. Оно не использует xcodebuild напрямую, а использует множество (приватных) API, которые поддерживают службу сборки в рабочем состоянии, поэтому инкрементные сборки быстрее при сборке из Xcode. Нажатие кнопки build & run всегда будет быстрее, чем выполнение еще одной команды xcodebuid.

Почему xcodebuild работает медленнее, чем Xcode?

Как отмечается на странице Tuist с описанием кэша, они оптимизируют работу с xcodebuild, но не могут сделать многое, пока Apple не предоставит им инструменты, которые они сами используют в Xcode.

Я пошутил, что, возможно, решение заключается в создании расширения для VSCode, которое на самом деле нажимает кнопку сборки и запуска в Xcode, когда вы хотите запустить свое приложение. Может быть…

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: