JD-man / TIL

0 stars 0 forks source link

기존 프로젝트에 Tuist 적용하기 #3

Open JD-man opened 2 years ago

JD-man commented 2 years ago

1. Tuist 설치

4. infoPlist는 tuist default로 생성하고 기존에 있는 plist에 없는 부분을 찾아서 복붙한다.

5. Build Phase

6. Target의 기본세팅

7. 프로젝트 configuration 세팅

8. Scheme 설정

9. Project 작성

let project = Project(name: "FindPersona",
                      settings: projectSetting,
                      targets: [
                        appTarget
                      ],
                      schemes: scheme)

전체 Project.swift 코드

import ProjectDescription
import ProjectDescriptionHelpers
import MyPlugin

// MARK: - Project

// Local plugin loaded
let localHelper = LocalHelper(name: "MyPlugin")

// Rswift Build Phase 스크립트
let RswiftPreTargetScript = TargetScript.pre(path: "ShellScript/RswiftScript.sh",
                                             arguments: [],
                                             name: "Rswift Generate",
                                             inputPaths: [
                                              Path(stringLiteral: "$TEMP_DIR/rswift-lastrun")
                                             ],
                                             outputPaths: [
                                              Path(stringLiteral: "$SRCROOT/Resources/R.generated.swift")
                                             ],
                                             basedOnDependencyAnalysis: false,
                                             runForInstallBuildsOnly: false)

// 기본제공 plist 생성후 기존 가지고 있던 plist에 없는 부분 복붙필요
let infoPlist = InfoPlist.file(path: "plist/Info.plist")

// Target의 기본세팅
let targetSetting = Settings.settings(base: [
  "CODE_SIGN_STYLE": "Automatic",
  "DEVELOPMENT_TEAM": "" // 개발자 계정 팀코드
])

let appTarget = Target(name: "FindPersona",
                       platform: .iOS,
                       product: .app,
                       productName: nil,
                       bundleId: "$(PRODUCT_BUNDLE_IDENTIFIER)",
                       deploymentTarget: .iOS(targetVersion: "14.0", devices: .iphone),
                       infoPlist: infoPlist,
                       sources:  [
                        "Manager/**",
                        "Model/**",
                        "Util/**",
                        "App/**",
                        "Builder/**",
                        "View/**",
                        "ViewModel/**",
                        "Generated/**"
                       ],
                       resources: ["Resources/**"],
                       copyFiles: nil,
                       headers: nil,
                       entitlements: nil,
                       scripts: [
                        RswiftPreTargetScript
                       ],
                       dependencies: [],
                       settings: targetSetting,
                       coreDataModels: [],
                       environment: [:],
                       launchArguments: [],
                       additionalFiles: [])

// MARK: - 프로젝트 세팅

// configuration, xcconfig 설정 부분
let projectSetting = Settings.settings(
  configurations: [
    .debug(name: "Debug", settings: [
      "USERDEFINED": "Debug",
      "PRODUCT_BUNDLE_IDENTIFIER": "com.JDman.FindPersona"
    ]),
    .release(name: "Release", settings: [
      "USERDEFINED": "Release",
      "PRODUCT_BUNDLE_IDENTIFIER": "com.JDJDJDJDJD.FindPersona"
    ]),
  ]
)

// scheme 설정
let scheme = [
  Scheme(name: "FindPersona",
         shared: true,
         buildAction: .buildAction(targets: ["FindPersona"]),
         testAction: nil,
         runAction: .runAction(configuration: "Debug"),
         archiveAction: .archiveAction(configuration: "Release"))
]

// project 생성
let project = Project(name: "FindPersona",
                      settings: projectSetting,
                      targets: [
                        appTarget
                      ],
                      schemes: scheme)
AnnaBaeTofuMom commented 2 years ago

리소스 파일을 관리하는 도구로 R.swift를 해줍니다. 그러나 R.swift는 변동이 매번 발생하는 파일이므로 .gitignore처리가 되어있습니다. 그러므로 최초 빌드시 tuist project에는 존재하지 않습니다. 매번 tuist generate 전 touch R.generated.swift 파일을 추가해주어야합니다.

R.Swift 관련 문제를 해결하는 방법입니다.