[SwiftUI] TCA(The Composable Architecture)이란?
·
Swift/정리
안녕하세요 불망입니다, 이번에 사이드 프로젝트를 진행하게 되었는데 iOS 부분을 모두 혼자 담당하게 되었습니다 이번 프로젝트에서 TCA + Tuist + Combine을 활용하려고 합니다. 직접 사용해보면서 어떤 장점이 있고 어떤 단점이 있는지 알아보려고 합니다. 오늘은 TCA 패턴에 대해 간단하게 서치해봤습니다. 디자인 패턴 코드가 특정 문제를 해결할 때, 정형화된 하나의 규칙을 제안하는 것 아키텍처 패턴 정리된 코드들을 더 추상화된 비즈니스적 문제 해결 관점으로 정리하는 규칙 TCA 패턴 The Composable Architecture을 활용한 아키텍처 패턴에 대해 설명 SwiftUI는 선언형 UI로 구현하는 환경에서 MVVM 패턴이 자주 사용되었습니다. 그 외 비즈니스 로직, 기업의 개발 환경 및..
[SwiftUI] UI 최적화 문제
·
Swift/개발
안녕하세요 불망입니다 현재 사이드 프로젝트인 iWaver를 진행중에 있는데 문제가 생겼습니다. iWaver는 Apple Developer Academy@Postech에서 진행한 마지막 프로젝트입니다. 오늘은 최적화를 진행하면서 어떤 문제가 있었는지 어떻게 해결했는지 글을 작성해봤습니다. 문제 상황 현재 프로젝트를 진행하면서 발견된 문제점이 있습니다. 저희 프로그램 주요 기능 중 하나인 PDF파일을 Image로 변경하여 사용자가 원하는 이미지들을 골라서 원하는 배치공간에 이미지 파일들을 넣을 수 있는 기능이 있습니다. 사용자가 원하는 배치공간에 이미지를 넣고 확인을 하면 자동으로 Numbers 프로그램에 사용자가 정해둔 공간에 이미지가 자동으로 들어가게 됩니다. PDF파일을 Image로 변경된 구간을 Ma..
[SwiftUI] 아키텍처 고민
·
Swift/정리
아키텍처 Toucher 개발을 리펙토링 하면서 제일 먼저 한 고민은 "어떤 아키텍처를 해야하는 것인가,,?" 이었습니다. 일단 저희한테 맞는 아키텍처를 찾으려면 어떠한 아키텍처가 SwiftUI 에서 사용이 되는지 알아봤어야 했기에 간단하게 서치를 해봤습니다. MVC Model-View-Controller 주로 UIkit에서 이용을 합니다. SwiftUI에서는 아래와 같은 이유로 사용을 지양하고 있습니다. SwiftUI는 선언적인 구문을 사용하여 UI를 정의합니다. 원하는 결과를 선언하고 프레임워크가 알아서 상태 및 레이아웃을 관리합니다. SwiftUI는 바인딩(Binding) 및 상태 속성(State Property)과 같은 반응형 프로그래밍 개념을 도입하여 UI 요소를 데이터에 쉽게 바인딩할 수 있습니..
[SwiftUI] View가 멈추는 현상
·
Swift/개발
서론 안녕하세요 불망입니다! 이번에 ADA 마지막 프로젝트 개발 작업을 하면서 제가 뷰가 멈추는 현상에 직면했습니다. 그 문제를 해결하는 내용을 작성해봤습니다! 보시고 틀린 점이나 피드백 주실 부분 댓글로 남겨주시면 감사하겠습니다~! 문제 현상 ImageLoadingView 에서 유저가 선택한 PDF 파일을 Image로 변경할 때 뷰가 얼어버리는 현상이 생겼습니다. 눈으로 확인하시면 더 쉬우실 것 같아서 gif 파일을 보면 좋을 것 같아요 저희 코드에는 convertPDFToImages함수가 있는데 Pdf를 Image로 변경시켜주는 함수 입니다. 이 함수가 실행이 시작 되는 코드는 LoadingView가 나타나면(.onAppear) 실행이 됩니다. LoadingView가 나타나는 조건은 파일이 선택되었을..
[SwiftUI] 프로그램 차단 기능
·
Swift/개발
작업 내용 프로그램 사용성 검증을 하기 위해서 우리의 Target인 선생님들에게 MVP(Minimum Viable Product)를 UT(User Test)를 해야하는 작업이 생겼습니다. UT를 진행하면서 UT동안만 프로그램을 사용할 수 있게 프로그램을 승인 및 차단하는 기능을 만들어야 합니다. 절차 TimeFetcher클래스안에 있는 fetchTime함수를 이용하여 서버에서 Json파일을 디코딩 하여 시간(date)을 가져옵니다. formatterDate를 통하여 Date Type을 String Type으로 변경하여 currentTime 변수에 넣어줍니다. checkTimeFormat함수를 이용하여 currentTime시간을 settingHour시간안에 속해 있을때만isAbled를 true로 값을 주어..
[SwiftUI] Combine - 기본
·
Swift/정리
Combine을 쓰면 좋은 이유 아래 코드 예시는 로그인을 할때 userId와 userName을 가져올때 사용할 수 있는 코드이다. switch case를 사용하며 값이 두개 밖에 처리 할 것이 없을때는 사용 가능하겠지만 값이 점점 많아지고 복잡해지면 switch case를 이용해서 하기 어려워질 것이다. func fetchUserId(_ completionHandler: @escaping (Result ) -> Void){ DispatchQueue.main.asyncAfter(deadline: .now() + 2) { let result = 24 completionHandler(.success(result)) } } func fetchName(for userId: Int,_ completionHandl..
[SwiftUI] NavigationStack
·
Swift/정리
기존 네비게이션 NavigationLink("Details", isActive: $item.showDetail) { DetailView() } 새로운 네비게이션 API Navigation의 새로운 종류 NavigationStack 새로운 시스템 설정 앱, 애플워치 앱 등 (푸시 팝 인터페이스) NavigationStack(path: $path) { NavigationLink("Details", value: value) } NavigationSplitView Mail 또는 Notes와 같은 다중열 애플리케이션에 적합 iPhone, iPad의 SlideOver, AppleWatch와 Apple TV의 단일 열 스택에 자동으로 적응 NavigationSplitView { RecipeCategories() } ..
[SwiftUI] 애플스토어 앱 클론코딩(스크롤)
·
Swift/개발
애플스토어 스크롤 피그마로 받은 UI 디자인 개발 부분 Scroll 길이 계산 (애플스토어 앱 참고) UIScreen.main.bounds.height 사용 (GeometryReader도 가능) PreferenceKey 프로토콜 사용 기능 : SwiftUI의 레이아웃 시스템에서 뷰의 크기, 위치 또는 다른 사용자 정의 정보와 같은 데이터를 수집하고 공유하기 위해 사용 디바이스의 높이를 측정 enum, switch 사용하여 색상마다 View를 다르게 그려줌 Scroll Animation .onPreferenceChange(OffsetPreferenceKey.self) { value in currentHeight = value print("currentHeight: \\(value)") // 현재 디바이스 ..
[SwiftUI] 알람 앱 클론코딩
·
Swift/개발
아이폰 기본 알람 앱 피그마로 받은 UI 디자인 개발 부분 ObservableObject, @StateObject, @ObservedObject 사용하여 데이터 전달 MainView는 List를 사용하여 Scroll했을때 navigationTitle이 Header 가운데에 올라감 알람을 List에 append하는 방식 알람 모델 클래스 class AlarmModel: Identifiable,ObservableObject { let id : UUID = UUID() var time: String var amPm: String var date: Date @Published var alarmActive: Bool // MARK: CREATE ALARM LIST init(date: Date) { self.dat..
[SwiftUI] 출쓱 앱 클론코딩
·
Swift/개발
출쓱 앱 소개(애플 디벨로퍼 아카데미에 출석 관리 어플) 피그마로 받은 UI 디자인 잘 몰랐던 문법 () -> Front**는 클로저 타입을 나타냄 제네릭 func count(numbers: [Number]) { } 매개 변수화된 타입(Parameterized Type)을 만들기 위해 사용되는 기능 함수나 클래스에서 사용할 데이터 타입을 미리 지정하지 않고, 함수 또는 클래스를 호출할 때 전달되는 인자에 따라 동적으로 타입을 결정 코드의 재사용성과 유연성,타입의 안정성 보장 Flashcard(front: {CardFrontView()}, back: {CardBackView()}) Flashcard 구조체를 생성하는 방법 중 하나 front와 back 프로퍼티에 앞면(CardFrontView)과 뒷..
WWDC2023-Swift Student Challenge 후기
·
기타/후기
Swift Student Challene란? "Swift Student Challenge"는 애플의 WWDC (Worldwide Developers Conference)의 일환으로 매년 학생들을 대상으로하는 이벤트입니다. 이 챌린지는 학생들이 자신의 창의성을 발휘하여 Swift 언어로 iOS, macOS, watchOS 등의 애플 플랫폼에서 실행 가능한 앱 또는 playground를 개발하도록 장려합니다.👍 기획 의도 전 세계에 멸종위기동물을 알아보자 -> 경각심(멸종위기동물이 왜 멸종이 되는지)을 주자! 전달하고자 하는 메세지 멸종되는 원인이 무엇인지 생각하게 하자 멸종되지 않게 하기 위해서 해야하는 행동을 전달해보자 SSC를 하면서 내가 얻으려고 하였던 것 기획 🔵 / 디자인 🔵 🔵 / 개발 🔵 🔵 ..
[Swift] 첫 iOS 앱 개발자를 위한 가이드 from Lingo
·
Swift/정리
Intro 안녕하세요 bulmang입니다~! 오늘은 Lingo가 설명해주신 내용을 따로 정리하여 공유하고자 합니다! 내용은 iOS 개발이 처음이신 분들을 위한 내용으로 한번 참고 하시면 좋을 것 같습니다. apple은 생각보다 다양한 사이트를 가지고 있습니다. https://www.apple.com/education/ Education Apple technology and resources empower every kind of educator and student to learn, create, and define their own success. www.apple.com https://www.apple.com/swift/ Swift - Apple Swift is everywhere. And now i..
[SwiftUI] Geometry
·
Swift/정리
안녕하세요 불망입니다. 이번 글에서는 Geometry에 대해서 소개하겠습니다. SwiftUI에서 Geometry는 뷰가 화면에 배치되는 방법을 제어하는 데 사용되는 객체입니다. 이것은 뷰의 위치, 크기 및 방향을 결정하는 데 유용합니다. 이번 글에서는 SwiftUI에서 Geometry 객체를 사용하는 방법에 대해 설명하겠습니다. GeometryReader GeometryReader는 SwiftUI에서 제공하는 뷰 중 하나로, 부모 뷰가 자식 뷰에 대한 크기와 위치를 결정하는 방법을 제어할 수 있습니다. 즉, 자식 뷰의 위치, 크기 및 방향을 결정하는 데 사용됩니다. GeometryReader는 다음과 같이 작성될 수 있습니다. GeometryReader { geometry in // Geometry 객체..
[SwiftUI]Tab Animation
·
Swift/개발
안녕하세요 bulmang입니다!! 😄 오늘은 아카데미에 가기전에 다시 Swift 개발 공부를 어느정도 해야 될 것 같아서 인강을 듣고 공부하여 블로그에 정리를 하려고 합니다. 앱 설명 SwiftUI로 개발한 코드이며 Tab Animation에 대한 앱입니다. 앱 기능 선형 보간 공식을 이용하여 두 지점 사이의 값을 추정할 때 그 값을 두 지점과의 직선 거리에 따라 선형적으로 결정하는 방법이다. 이미지를 넘길때 Rectangle을 사용하여 indicator 넓이와 위치를 정하여 움직여준다. 문법 TabView: 탭을 구성하고 각 탭에 대한 콘텐츠를 추가 할 수 있음 GeometryReader: 화면에 보여지는 뷰(View)의 크기 및 위치 정보를 제공하는 뷰 자식 뷰에 대한 레이아웃 정보를 제공하므로, 자..
info.plist 사라지는 문제
·
Swift/정리
문제 플러터로 개발하다가 환경변수문제에 너무 힘들어서 초기화 하던 시절이 있었다. 현재는 거의 문제 해결 가능하지만 한달전에는 환경 설정이 너무 어려워서 초기화를 몇번 했을 때가 있었다. 프로젝트들을 깃에다가 올려 저장하여서 걱정없이 초기화를 하였지만 SwiftUI를 다시 공부하려고 git에서 내 TAICO프로젝트를 가져와서 실행하려는 순간 이러한 문구가 나왔다. Build input file cannot be found: '/Users/ha/Developer/SwiftUI/Taico/Taico/Info.plist'. Did you forget to declare this file as an output of a script phase or custom build rule which produces it..