버그 잡이

Tuist 삽질기 (2) - 기존 프로젝트에 tuist 적용해보기 본문

IOS

Tuist 삽질기 (2) - 기존 프로젝트에 tuist 적용해보기

버그잡이 2023. 5. 3. 08:57

지난 시간에 tuist로 프로젝트를 생성하고 모듈을 추가해봤습니다.

https://jinsangjin.tistory.com/169

 

Tuist 삽질기 (1) - tuist란 무엇이고 어떻게 쓰는건가?

Tuist Tuist는 Xcode 프로젝트를 관리할 수 있는 툴입니다. 기존에 Xcode에서 target, SPM, info, buid-setting 을 관리하던 것을 tuist라는 툴을 활용해서 할 수 있는 것입니다. Tuist의 장점 1. 모듈화를 할 수 있

jinsangjin.tistory.com

 

오늘은 기존 프로젝트에 tuist를 적용해보겠습니다.

 

1. 루트 경로에 Project.swift 파일 생성

터미널로 루트 경로에 접근하고 Project.swift 파일을 생성해보겠습니다.

nano Project.swift

 

아래 프로젝트 파일을 넣어주시면 됩니다.

import ProjectDescription

// MARK: Constants
let projectName = "ray-chess"
let organizationName = "ray"
let bundleID = "com.ray.chess"
let targetVersion = "14.0"

// MARK: Struct
let project = Project(
  name: projectName,
  organizationName: organizationName,
  packages: [],
  settings: nil,
  targets: [
    Target(name: projectName,
           platform: .iOS,
           product: .app,
           bundleId: bundleID,
           deploymentTarget: .iOS(targetVersion: targetVersion, devices: [.iphone]),
           infoPlist: makeInfoPlist(),
           sources: ["\(projectName)/Sources/**"],
           resources: ["\(projectName)/Resources/**"],
           dependencies: []
          )
  ],
  schemes: [
    Scheme(name: "\(projectName)-Debug"),
    Scheme(name: "\(projectName)-Release")
  ],
  fileHeaderTemplate: nil,
  additionalFiles: [],
  resourceSynthesizers: []
)

private func makeInfoPlist(merging other: [String: InfoPlist.Value] = [:]) -> InfoPlist {
    var extendedPlist: [String: InfoPlist.Value] = [
        "UIApplicationSceneManifest": [
            "UIAppliactionSupportsMultipleScenes": true,
            "UISceneConfigurations": [
                "UIWindowSceneSessionRoleApplication": [
                    [
                        "UISceneConfigurationName": "Default Configuration",
                        "UISceneDelegateClassName": "$(PRODUCT_MODULE_NAME).SceneDelegate"
                    ],
                ]
            ]
        ],
        "UILaunchScreen": [],
        "UISupportedInterfaceOrientations":
            [
                "UIInterfaceOrientationPortrait",
            ],
        "CFBundleShortVersionString": "1.0.0",
        "CFBundleVersion": "1",
        "CFBundleDisplayName": "raychess",
    ]
    
    other.forEach { (key: String, value: InfoPlist.Value) in
        extendedPlist[key] = value
    }
    
    return InfoPlist.extendingDefault(with: extendedPlist)
}

특이사항
1. 파일 관리를 위해서 Sources, Resources 폴더는 프로젝트 내부에 새로 추가해주었습니다.

2. 다른 글을 보면 infoPlist: .default 로 하시는 경우도 많은데 저는 그렇게 하면 SceneDelegate가 실행이 안 되더라구요ㅜ
그래서 info.plist 관련 SceneManifest 설정 및 기타 기본 설정을 해주었습니다.

 

 

초기 스토리보드를 설정해주는 방식이라면?

초기 화면을 설정하는 방법은 두 가지가 있는데요.

 

1) SceneDelegate에서 초기 ViewController를 생성해서 makeKeyAndVisible() 해주는 방법

2) info.plist의 Scene Configuration에서 Storyboard Name을 설정하여 초기 Storyboard를 설정해주는 방법

 

첫번째 방법은 위에서 설정한 Project.swift 파일 셋팅으로 충분합니다.

 

두번째 방법 한 가지 옵션을 더 추가해줘야합니다.

"UISceneStoryboardFile": "(스토리보드 이름)"

"UISceneConfigurationName": "Default Configuration",
"UISceneDelegateClassName": "$(PRODUCT_MODULE_NAME).SceneDelegate",
"UISceneStoryboardFile": "Main"

(물론 이 경우에는 SceneDelegate에서 ViewController를 호출하던 코드를 지워줘야 합니다.)

 

 

2. tuist generate 으로 프로젝트 생성

 

터미널에서 tuist generate 명령어로 프로젝트를 생성하면 정상 동작하는 것을 확인할 수 있습니다.

 

 

 

 

 

 

* 참고

https://ios-development.tistory.com/1210

 

 

반응형
Comments