🔥 패키지 플러그인 사용하기

278자
4분

패키지 플러그인은 해당 플러그인을 정의한 패키지 내에서 사용할 수 있습니다. 만약 해당 플러그인에 대응하는 플러그인 프로덕트(Product)가 있다면, 플러그인을 정의한 패키지에 직접 의존성을 가진 다른 패키지에서도 사용할 수 있답니다.

다른 패키지에서 정의된 플러그인에 접근하려면, 해당 플러그인을 정의한 패키지에 대한 의존성을 추가하세요. 그러면 해당 패키지에서 빌드 도구 플러그인과 커맨드 플러그인에 접근할 수 있습니다.

빌드 도구 플러그인 사용하기

빌드 도구 플러그인을 사용하려면, 플러그인을 적용할 각 타겟의 plugins 배열에 플러그인 이름을 나열합니다.

// swift-tools-version: 5.6
import PackageDescription
 
let package = Package(
    name: "my-plugin-example",
    dependencies: [
        .package(url: "<https://github.com/example/my-plugin-package.git>", from: "1.0"),
    ],
    targets: [
        .executableTarget(
            name: "MyExample",
            plugins: [
                .plugin(name: "MyBuildToolPlugin", package: "my-plugin-package"),
            ]
        )
    ]
)
swift

이렇게 하면 SwiftPM이 플러그인을 호출하면서, 플러그인이 적용되는 타겟에 대한 단순화된 패키지 모델을 전달합니다. 플러그인이 반환하는 모든 빌드 커맨드는 빌드 그래프에 통합되어 빌드 중 적절한 시점에 실행되요.

커맨드 플러그인 사용하기

빌드 도구 플러그인과 달리 커맨드 플러그인은 SwiftPM이 빌드 작업 그래프를 구성할 때 필요에 따라 호출되는 것이 아니라, 사용자가 직접 호출해야 해요. 이는 swift package 커맨드 라인 인터페이스를 통해 이루어집니다.

❯ swift package my-plugin --my-flag my-parameter
text

플러그인에서 정의한 호출 동사 뒤에 나오는 모든 커맨드 라인 인수는 수정 없이 플러그인에 전달됩니다. 이 예제에서는 --my-flagmy-parameter가 그에 해당하죠. 이는 일반적으로 --target 옵션을 한 번 이상 사용하여 커맨드의 적용 범위를 하나 이상의 타겟으로 좁히는 데 사용됩니다.

패키지 컨텍스트 내에서 사용 가능한 플러그인을 나열하려면, plugin 하위 커맨드의 --list 옵션을 사용하세요.

❯ swift package plugin --list
text

파일 시스템에 쓰기 작업이 필요한 커맨드 플러그인은 swift package가 콘솔에서 호출되면 사용자에게 승인을 요청하고, 그렇지 않으면 요청을 거부합니다. --allow-writing-to-package-directory 플래그를 swift package 호출에 전달하면 질문 없이 요청을 허용할 수 있어요. 이는 특히 CI(지속적 통합) 환경에서 유용하답니다. 마찬가지로 --allow-network-connections 플래그를 사용하여 프롬프트를 표시하지 않고 네트워크 연결을 허용할 수 있습니다.