여러 프로젝트 관리하기

프로젝트 만들 폴더 생성하기

먼저 Workspce 를 생성할 폴더를 만들어줍니다.

mkdir 폴더명
cd 폴더명

 

tuist init

tuist init --platform ios

 

tuist 를 사용하여 프로젝트를 생성했으면 위와 같이 만들어진 것을 확인할 수 있습니다.

저는 WeatherApp 폴더를 삭제한 후 모듈화를 위한 프로젝트들을 또 만들 예정입니다.

 

만들어졌으면 UI 폴더 내부의 있는 폴더들을 외부로 꺼낸 후 Project.swift 파일을 제외한 Tuist 폴더, 파일을 지워줍니다.

mkdir UI
mkdir NetworkKit

 

지운 다음 Projects 폴더를 만들어준 후 내부에 UI 와 NetworkKit 모듈을 위한 폴더를 만들어줍니다.

Network 는 이미 사용되는 프레임워크이므로 겹치면 안돼서 NetworkKit 으로 진행하니 Network 폴더 이름은 무시합니다.

 

editing

tuist edit

 

이때 수정해야할 내용 중 Network 와 UI 의 차이점은 product 가 framework, app 이 서로 다르다는 점입니다.

 

let project = Project(
    name: "Network",
    targets: [
        .target(
            name: "Network",
            destinations: .iOS,
            product: .framework,
            bundleId: "io.tuist.Network",
            infoPlist: .extendingDefault(with: [:]),
            sources: ["Sources/**"],
            dependencies: []
        )
    ]
)
let project = Project(
    name: "UI",
    targets: [
        .target(
            name: "UI",
            destinations: .iOS,
            product: .app,
            bundleId: "io.tuist.UI",
            infoPlist: .extendingDefault(
                with: [
                    "UILaunchScreen": [
                        "UIColorName": "",
                        "UIImageName": "",
                    ],
                ]
            ),
            sources: ["Sources/**"],
            resources: ["Resources/**"],
            dependencies: []
        )
    ]
)

 

 

가장 외부에 있는 Project.swift 는 다음과 같이 구성해줍니다.

 

Workspace.swift 추가하기

import ProjectDescription

let workspace = Workspace(
    name: "WeatherProject",
    projects: [
        "Projects/UI",
        "Projects/Network"
    ]
)

 

Workspace.swift 파일을 만들어주고 이후 코드를 작성합니다.

Projects 하위 파일들을 모두 하나의 .xcworkspace 에 포함시키겠다는 코드입니다.

 

tuist generate

이제 Project 와 Workspace 를 설정하였으면 만들어줍니다.

tuist generate

 

이제 성공적으로 Projects 상위 폴더 내부의 Network 모듈과 UI 모듈이 만들어져있는 것을 확인할 수 있습니다.

 

다음으로 만들어준 폴더들을 모두 추가해줍니다.

 

다음으로 UI 를 위한 Sources 폴더에 다음과 같이 View 파일들을 생성하여 UI 를 구현할 수 있습니다.

 

외부 SPM 추가하기

Alamofire 를 추가하여 Network 모듈에서 사용할 수 있게끔 만들어보겠습니다.

 

다시 tuist edit 을 통해 Manifests 파일을 실행합니다.

tuist edit

 

다음과 같이 주석되어 있는 코드들을 주석 해제합니다. (미리 제공되는 코드들)

Tuist 내부의 Package.swift 파일로 SPM 를 설치하면 모든 모듈에서 접근이 가능해집니다.

 

tuist install

주석을 해제하였으면 명령어를 입력하여 Alamofire 를 설치합니다.

tuist install

 

설치가 완료되었으면 Network 모듈의 Project.swift 파일에서 다음과 같이 코드를 추가해줍니다.

 

추가가 완료되면 다음과 같이 Network 모듈에서 Alamofire 패키지를 사용할 수 있게 됩니다.

UI 는 dependencies 를 추가하지 않았기에 사용할시 에러가 발생합니다.

 

이제 NetworkManger 클래스를 만들어줍니다. 역할을 이미지를 가져오는 코드입니다.

import Foundation
import Alamofire
import UIKit

public class NetworkManager { // public으로 변경

    public init() {} // 기본 생성자도 public으로 선언

    public func fetchImageFromPlaceIMG(completion: @escaping (UIImage?) -> Void) { // 메서드도 public으로 선언
        let url = "https://picsum.photos/200/300"
        AF.request(url).responseData { response in
            switch response.result {
            case .success(let data):
                let image = UIImage(data: data)
                completion(image)
            case .failure(let error):
                print("Error fetching image: \(error)")
                completion(nil)
            }
        }
    }
}

 

 

이후 NetworkKit 을 import 하여 해당 모듈의 코드를 사용하여 이미지를 불러옵니다.

 

아래가 구상도입니다. 테스트용이므로 아래와 같이 우선 만들어봤습니다. 아래와 같은 구상도가 나오면 안될 것 같습니다.

tuist graph

 

'SwiftUI' 카테고리의 다른 글

Swift - Core Bluetooth 블루투스 통신  (0) 2024.11.19
SwiftUI - 접근제어자  (0) 2024.11.17
SwiftUI - 소켓 통신으로 영상 전송받기  (0) 2024.11.13
SwiftUI - 소켓 통신  (5) 2024.11.12
SwiftUI - 커스텀 카메라  (0) 2024.11.11
ytw_developer