baegteun - iOS

Tuist 사용법 - 4. Script 본문

Tuist

Tuist 사용법 - 4. Script

baegteun 2022. 8. 20. 18:34

이 글은 Tuist 버전 3.9.0 기준으로 작성되었습니다.

Tuist로 프로젝트를 만들 때 Target에 scripts를 추가할 수 있습니다. 이 script는 Build Phase에서 Run Script로 추가됩니다. pre 또는 post로 만들 수 있는데 pre는 빌드 전, post는 빌드 후에 실행되는 script입니다.

Example

예제로 SwiftLint를 Run Script로 만들어보겠습니다.

Run Script를 추가할 프로젝트에서 tuist edit으로 edit을 시작합니다.
Run Script의 실행할 Script는 직접 문자열로 script를 넣어주는 거랑, .sh파일로 스크립트 작성 후 경로를 지정해주는 방법이 있습니다.

if test -d "/opt/homebrew/bin/"; then
    PATH="/opt/homebrew/bin/:${PATH}"
fi

export PATH

if which swiftlint > /dev/null; then
    swiftlint
else
    echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

위는 swiftLint를 실행하는 script입니다. export PATH를 하는 부분같은 경우 m1 이상 맥일경우에 필요한겁니다. 설치가 안될경우 설치를 하라고 echo를 합니다.

Tuist/ProjectDescriptionHelpers Group 아래에 Scripts.swift 파일을 만듭니다.

import ProjectDescription

public extension TargetScript {
    static let SwiftLintString = TargetScript.pre(script: """
if test -d "/opt/homebrew/bin/"; then
    PATH="/opt/homebrew/bin/:${PATH}"
fi

export PATH

if which swiftlint > /dev/null; then
    swiftlint
else
    echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
""", name: "SwiftLintString")

    static let SwiftLintShell = TargetScript.pre(
        path: .relativeToRoot("Scripts/SwiftLintRunScript.sh"),
        name: "SwiftLintShell"
    )
}

문자열로 만드는 방법과 .sh를 실행하는 방법 두 가지고 만들었습니다. .sh파일의 경우 {프로젝트 루트}/Scripts/SwiftLintRunScript.sh 에 script를 넣어놨습니다.

그리고 Target을 만드는 코드로 갑니다.

let appTarget = Target(
    name: name,
    platform: platform,
    product: product,
    bundleId: "\(organizationName).\(name)",
    deploymentTarget: deploymentTarget,
    infoPlist: infoPlist,
    sources: sources,
    resources: resources,
    dependencies: dependencies
)

이렇게 만드는 Target을

let appTarget = Target(
    name: name,
    platform: platform,
    product: product,
    bundleId: "\(organizationName).\(name)",
    deploymentTarget: deploymentTarget,
    infoPlist: infoPlist,
    sources: sources,
    resources: resources,
    scripts: [.SwiftLintShell],
    dependencies: dependencies
)

이렇게 만들고 tuist generate를 해봅시다.

Target의 Build Phase를 보면 SwiftLint가 추가된걸 볼 수 있습니다.

실제로 빌드해보면 정상적으로 swiftLint도 실행된걸 볼 수 있습니다.
혹시 shell 실행 권한 관련 메시지가 나온다면, .sh파일이 있는 곳에 sudo chmod 777 명령어 등을 통해 권한을 부여해주시면 됩니다.

'Tuist' 카테고리의 다른 글

Tuist 사용법 - 6. 버전 고정  (0) 2022.09.19
Tuist 사용법 - 5. Plugin  (0) 2022.08.28
Tuist 사용법 - 3. extension  (2) 2022.08.19
Tuist 사용법 - 2. 외부 의존성  (0) 2022.08.17
Tuist 사용법 - 1. 이론 및 샘플 예제  (9) 2022.08.15
Comments