🔥 플러그인 소개

215자
4분

Swift 패키지 매니저(이하 SwiftPM)의 일부 기능은 플러그인 을 통해 확장할 수 있습니다. 패키지 플러그인은 SwiftPM이 제공하는 PackagePlugin API를 사용해 Swift로 작성합니다. 이는 Swift 패키지 매니페스트 자체를 Swift 스크립트로 구현한다는 점과 비슷합니다. 이 스크립트는 SwiftPM에 필요한 정보를 제공하기 위해 필요할 때 실행됩니다.

플러그인은 SwiftPM 패키지 매니페스트에서 pluginTarget 타입의 타겟으로 표현됩니다. 만약 플러그인을 다른 패키지에서도 사용할 수 있게 하려면, 해당하는 pluginProduct 타겟도 있어야 해요. 플러그인의 소스 코드는 보통 패키지 아래 Plugins 디렉토리에 위치하지만, 이는 커스터마이징할 수 있습니다.

SwiftPM은 현재 플러그인을 위한 두 가지 확장 포인트를 정의하고 있어요:

  • 빌드 전이나 빌드 중에 실행할 명령을 제공하는 커스텀 빌드 도구 작업
  • swift package 명령줄 인터페이스를 사용해 실행되는 커스텀 명령

플러그인은 플러그인의 기능 을 정의함으로써 어떤 확장 포인트를 구현하는지 선언합니다. 이는 SwiftPM이 플러그인을 호출하는 진입점을 결정하고, 플러그인이 수행할 수 있는 동작을 결정해요.

플러그인은 패키지 모델의 표현에 접근할 수 있고, 커스텀 명령을 정의하는 플러그인은 플러그인이 적용되는 패키지에 정의된 제품과 타겟을 빌드하고 테스트하기 위해 SwiftPM이 제공하는 서비스를 호출할 수도 있습니다.

모든 플러그인은 별도의 프로세스로 실행되며, 샌드박싱을 지원하는 플랫폼에서는 네트워크 접근과 파일 시스템의 임의 위치에 쓰기를 시도하는 것을 방지하는 샌드박스에 래핑됩니다. 패키지 소스 코드를 수정해야 하는 커스텀 명령 플러그인은 이 요구사항을 지정할 수 있고, 사용자가 승인하면 패키지 디렉토리에 쓰기 접근 권한을 갖게 됩니다. 빌드 도구 플러그인은 패키지 소스 코드를 수정할 수 없어요. 모든 플러그인은 임시 디렉토리에 쓸 수 있습니다.

lecture image