Использование Makefiles для проектов Swift

—

от автора

В этом туториале я покажу вам, как использовать Makefiles для серверных проектов Swift, чтобы помочь упростить выполнение служебных задач.

Make — это программное обеспечение для автоматизации сборки, которое можно использовать для автоматического выполнения различных команд. Если вы хотите что-то запустить, вам нужно указать свои команды (точнее: цели сборки) через Makefiles. В этом кратком туториале я покажу вам некоторые из моих лучших приемов для проектов на Swift. ?

Как правило я создаю Makefile для своих серверных проектов на Swift и указываю в нем одни из наиболее часто используемых команд из Swift Package Manager.

build:     swift build  update:      swift package update  release:     swift build -c release      test:     swift test --parallel  clean:     rm -rf .build

Например , таким образом я могу легко запустить команду make release, чтобы создать релизную версию моего пакета Swift. Обычно я заканчиваю тем, что добавляю в Makefile еще более сложные команды, другой типичный сценарий — когда у пакета есть исполняемая цель. Как правило, я создаю команды install и uninstall, чтобы в определенном месте быстро установить или удалить двоичный продукт. ?

install: release     install ./.build/release/my-app /usr/local/bin/my-app  uninstall:     rm /usr/local/bin/my-app

Как вы, возможно, знаете, в настоящее время я в основном создаю приложения на основе Vapor (или Hummingbird, — заслуживает отдельного поста), поэтому очень удобно иметь внутри моего Makefile набор команд, предназначенный для управления состоянием серверного приложения. ?

start:     my-app serve --port 8080 &      stop:     @lsof -i :8080 -sTCP:LISTEN | awk 'NR > 1 {print $$2}' | xargs kill -15  restart: stop start  reset: stop     rm -f ./Resources/db.sqlite

При использовании & в конце команды start, сервер будет работать в фоновом режиме, а использование символа @ перед командой lsof “заглушит” вывод команды make (по умолчанию команда make также будет отображать ваши команды) .

Поскольку все должно работать и под Linux тоже, я часто использую Docker для запуска приложения в контейнере. У меня есть шпаргалка по Docker, но я тоже ленивый разработчик, поэтому я сделал несколько вспомогательных команд в Makefile.

# # Dockerfile: # ---------------------------------------- # # FROM swift:5.7-amazonlinux2 #  # WORKDIR /my-app # # ---------------------------------------- #  docker-build-image:     docker build -t my-app-image .  docker-run:     docker run --name my-app-instance \         -v $(PWD):/my-app \         -w /my-app \         -e "PS1=\u@\w: " \         -it my-app-image \         --rm

Сначала вам нужно смонтировать образ для приложения Swift, для этого рядом с Makefile вам также нужно создать Dockerfile, только потом вы сможете создать из него одно(-*разовый) экземпляр docker с помощью команды make docker-run. ?

Есть еще два тематических раздела, о которых я хотел бы поговорить. Первый связан с формированием зоны покрытия кода для приложений на основе Swift package manager. Чтобы поддерживать это, в моем Makefile есть:

test-with-coverage:     swift test --parallel --enable-code-coverage  #  # Install dependencies (on macOS): # ---------------------------------------- # brew install llvm # echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc # ---------------------------------------- #  code-coverage: test-with-coverage     llvm-cov report \         .build/x86_64-apple-macosx/debug/myAppPackageTests.xctest/Contents/MacOS/myAppPackageTests \         -instr-profile=.build/x86_64-apple-macosx/debug/codecov/default.profdata \         -ignore-filename-regex=".build|Tests" \         -use-color

Вы можете легко сформировать данные о зоне покрытия кода, запустив команду make code-coverage. Если есть желание узнать больше о деталях, лежащих в основе, пожалуйста, обращайтесь к прикрепленной статье.

Последней затронем документацию. Apple выпустила DocC для Swift довольно давно, и, кажется, что теперь многие используют его. Поначалу я не был большим фанатом DocC, но теперь — да. Можно упростить процесс формирования doc-файла с помощью Makefiles, и я довольно часто прибегаю к команде make docs-preview, чтобы подглядеть в API. ?

docs-preview:     swift package --disable-sandbox preview-documentation --target MyLibrary  docs-generate:     swift package generate-documentation \         --target MyLibrary  docs-generate-static:     swift package --disable-sandbox \         generate-documentation \         --transform-for-static-hosting \         --hosting-base-path "MyLibrary" \         --target MyLibrary \         --output-path ./docs

Конечно, вы можете добавить больше целей в свой Makefile, чтобы автоматизировать рабочий процесс по мере необходимости. Здесь всего лишь несколько распространенных приемов, которые я сейчас использую для своих серверных проектов Swift. Разработчики iOS также могут воспользоваться преимуществами Makefiles, есть несколько довольно длинных команд, связанных с xcodebuild, которые можно значительно упростить с помощью Makefile. ?


ссылка на оригинал статьи https://habr.com/ru/articles/713074/