Open JD-man opened 2 years ago
Target( // ... sources: [ "Manager/**", "Model/**", "Util/**", "App/**", "Builder/**", "View/**", "ViewModel/**", "Generated/**" ], resources: ["Resources/**"], / ... )
<key>UILaunchStoryboardName</key> <string>LaunchScreen</string> <key>UIMainStoryboardFile</key> <string></string>
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)
// makefile project: chmod +x ShellScript/RswiftScript.sh && tuist generate && arch -x86_64 pod install
// Target의 기본세팅 let targetSetting = Settings.settings(base: [ "CODE_SIGN_STYLE": "Automatic", "DEVELOPMENT_TEAM": "" // 개발자 계정 팀코드 ])
// 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" ]), ] )
let scheme = [ Scheme(name: "FindPersona", shared: true, buildAction: .buildAction(targets: ["FindPersona"]), testAction: nil, runAction: .runAction(configuration: "Debug"), archiveAction: .archiveAction(configuration: "Release")) ]
let project = Project(name: "FindPersona", settings: projectSetting, targets: [ appTarget ], schemes: scheme)
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)
리소스 파일을 관리하는 도구로 R.swift를 해줍니다. 그러나 R.swift는 변동이 매번 발생하는 파일이므로 .gitignore처리가 되어있습니다. 그러므로 최초 빌드시 tuist project에는 존재하지 않습니다. 매번 tuist generate 전 touch R.generated.swift 파일을 추가해주어야합니다.
R.Swift 관련 문제를 해결하는 방법입니다.
1. Tuist 설치
2. 기존 프로젝트 폴더를 비워놓는다
3. tuist edit
4. infoPlist는 tuist default로 생성하고 기존에 있는 plist에 없는 부분을 찾아서 복붙한다.
5. Build Phase
6. Target의 기본세팅
7. 프로젝트 configuration 세팅
8. Scheme 설정
9. Project 작성
전체 Project.swift 코드