[Swift] Memory Leaks 해결
·
SwiftUI/개발
iOS 앱 개발 중 앱이 예상치 않게 멈추거나 강제 종료되는 문제는 종종 발생할 수 있습니다.이러한 문제의 원인은 메모리 부족, 메모리 누수, 교착 상태, 경쟁 상태 등 다양합니다.이런 상황에서는 프로파일링과 디버깅이 필요합니다. 에러가 로그를 통해 나타나면 로그 분석으로 문제를 해결할 수 있지만, 로그 없이 문제가 발생하는 경우 프로파일링을 통해 메모리 사용량, 성능 이슈, 실행 흐름 등을 분석하여 문제의 원인을 정확히 파악하는 것이 가장 효과적입니다.1. XCODE 프로파일링 XCODE 프로파일링이란 앱 성능 및 리소스 사용을 분석하고 최적화하는 과정을 뜻합니다. 앱이 실행하는 중에 발생하는 이슈에 대해서 모니터링 할 수 있고 메모리누수, 에너지효율성, 메모리할당 과정 등을 전반적으로 훓어볼 수 있습..
[SwiftUI] UI 최적화 문제
·
SwiftUI/개발
안녕하세요 불망입니다 현재 사이드 프로젝트인 iWaver를 진행중에 있는데 문제가 생겼습니다. iWaver는 Apple Developer Academy@Postech에서 진행한 마지막 프로젝트입니다. 오늘은 최적화를 진행하면서 어떤 문제가 있었는지 어떻게 해결했는지 글을 작성해봤습니다. 문제 상황 현재 프로젝트를 진행하면서 발견된 문제점이 있습니다. 저희 프로그램 주요 기능 중 하나인 PDF파일을 Image로 변경하여 사용자가 원하는 이미지들을 골라서 원하는 배치공간에 이미지 파일들을 넣을 수 있는 기능이 있습니다. 사용자가 원하는 배치공간에 이미지를 넣고 확인을 하면 자동으로 Numbers 프로그램에 사용자가 정해둔 공간에 이미지가 자동으로 들어가게 됩니다. PDF파일을 Image로 변경된 구간을 Ma..
[SwiftUI] 코드 중복 실행 문제
·
SwiftUI/개발
이슈 iWaver 프로그램을 개발하는데 이슈가 있었습니다. 저희 프로그램에 있는 기능 중에 유저가 선택한 파일 경로를 보여주는 기능이 있습니다. 아래 GIF를 보시면 선택된 폴더로 저장위치가 바뀌는 것을 볼 수 있습니다. 여기서 이슈가 발생했습니다..! 아래 GIF를 보시면 코드가 한 번만 실행이 되어도 되는 코드인데 계속 여러번 반복 되어서 실행이 되었어요 😲 이 문제의 원인은 바로 View안에 함수가 들어가 있기 때문입니다! View안에 함수가 들어가게 된다면 아래 같은 문제가 발생하게 됩니다. 해당 함수가 호출될 때마다 View가 변경되었다고 판단하여 다시 렌더링을 수행하게 됩니다. 이것이 필요한 동작이 아니라면 불필요한 리렌더링으로 성능에 영향을 줄 수 있습니다. 저희 같은 경우 아래 코드가 Vi..
[Swift] 이미지 저장 기능
·
SwiftUI/개발
프로젝트를 진행하면서 고민해야 할 부분이 생겼습니다. 저희 프로그램은 Pdf→ Image → Numbers 로 변환을 해주는 프로그램입니다. 이때 여러 PDF 파일에서 Numbers로 변환할 Image들만 맥북에 저장을 하고 저장한 Image들을 Numbers 파일에 삽입 후 Image를 삭제합니다. 어떻게 개발을 해야할지 고민을 해봤습니다. 이미지 저장 Flow (개발) PDF에서 선택된 이미지만 유저가 지정한 경로에 iWaverTemp폴더(🗂️)에 저장이 됩니다. 이 폴더는 Numbers 파일 생성이 완료되면 자동으로 삭제됩니다. 예시) 유저가 3개의 Numbers 파일을 생성한 경우 🗂️ iWaverTemp ├──🗂️ 유저가 정한 numbers1 파일 이름 │ ├── Image0 ~ Image30 ..
[Swift] 폴더 이름 중복 검사
·
SwiftUI/개발
서론 Apple Developer Academy에서 마지막 프로젝트를 진행하면서 만든 기능에 대해서 적었습니다. 유저가 지정해둔 경로에 유저가 정해둔 파일 이름이 있다면 다른 이름으로 저장을 해줘야 하는 기능을 만들어야 했습니다. 첫 번째로 해줘야 할 작업은 유저가 지정해둔 경로에 어떤 이름들이 있는지 알아야 했습니다. 저희 프로그램은 PDF → Image → Numbers로 변환해주는 프로그램인데 PDF에서 이미지로 변환해준 것들을 새로운 폴더에 지정해서 저장해주고 Numbers로 변환 후 삭제 하였습니다. 그렇다면 제가 어떻게 중복검사를 했는지 설명하겠습니다. 유저가 지정한 경로에 파일 및 폴더 이름 확인 첫번째로, 해야할 일은 유저가 지정한 경로에 어떠한 이름들이 있는지 확인해야 했습니다. sear..
[SwiftUI] View가 멈추는 현상
·
SwiftUI/개발
서론 안녕하세요 불망입니다! 이번에 ADA 마지막 프로젝트 개발 작업을 하면서 제가 뷰가 멈추는 현상에 직면했습니다. 그 문제를 해결하는 내용을 작성해봤습니다! 보시고 틀린 점이나 피드백 주실 부분 댓글로 남겨주시면 감사하겠습니다~! 문제 현상 ImageLoadingView 에서 유저가 선택한 PDF 파일을 Image로 변경할 때 뷰가 얼어버리는 현상이 생겼습니다. 눈으로 확인하시면 더 쉬우실 것 같아서 gif 파일을 보면 좋을 것 같아요 저희 코드에는 convertPDFToImages함수가 있는데 Pdf를 Image로 변경시켜주는 함수 입니다. 이 함수가 실행이 시작 되는 코드는 LoadingView가 나타나면(.onAppear) 실행이 됩니다. LoadingView가 나타나는 조건은 파일이 선택되었을..
[SwiftUI] 프로그램 차단 기능
·
SwiftUI/개발
작업 내용 프로그램 사용성 검증을 하기 위해서 우리의 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] 애플스토어 앱 클론코딩(스크롤)
·
SwiftUI/개발
애플스토어 스크롤 피그마로 받은 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] 알람 앱 클론코딩
·
SwiftUI/개발
아이폰 기본 알람 앱 피그마로 받은 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] 애플스토어 앱 클론코딩
·
SwiftUI/개발
애플스토어 앱 소개(애플 상품 소개및 구매 어플) 피그마로 받은 UI 디자인 개발 부분 Swipe Promotion Interaction 구현 (애플스토어 앱 참고) TapView중 page style를 사용하여 구현 Indiactor 구현 Swipe Product Interaction 구현 (애플스토어 앱 참고) Geometry Reader와 offset을 이용하여 구현 Model을 만들어서 컴포넌트화 Swipe Animation GeometryReader { geo in // 전체넓이에서 공백 넓이만 뺀 값 let width = geo.size.width - (trailingSpace - spacing) // 두번째 카드 일 때 양 옆 카드의 끝을 똑같이 보여주는 넓이 값 let adjustMentW..
[SwiftUI] 출쓱 앱 클론코딩
·
SwiftUI/개발
출쓱 앱 소개(애플 디벨로퍼 아카데미에 출석 관리 어플) 피그마로 받은 UI 디자인 잘 몰랐던 문법 () -> Front**는 클로저 타입을 나타냄 제네릭 func count(numbers: [Number]) { } 매개 변수화된 타입(Parameterized Type)을 만들기 위해 사용되는 기능 함수나 클래스에서 사용할 데이터 타입을 미리 지정하지 않고, 함수 또는 클래스를 호출할 때 전달되는 인자에 따라 동적으로 타입을 결정 코드의 재사용성과 유연성,타입의 안정성 보장 Flashcard(front: {CardFrontView()}, back: {CardBackView()}) Flashcard 구조체를 생성하는 방법 중 하나 front와 back 프로퍼티에 앞면(CardFrontView)과 뒷..
[SwiftUI]Tab Animation
·
SwiftUI/개발
안녕하세요 bulmang입니다!! 😄 오늘은 아카데미에 가기전에 다시 Swift 개발 공부를 어느정도 해야 될 것 같아서 인강을 듣고 공부하여 블로그에 정리를 하려고 합니다. 앱 설명 SwiftUI로 개발한 코드이며 Tab Animation에 대한 앱입니다. 앱 기능 선형 보간 공식을 이용하여 두 지점 사이의 값을 추정할 때 그 값을 두 지점과의 직선 거리에 따라 선형적으로 결정하는 방법이다. 이미지를 넘길때 Rectangle을 사용하여 indicator 넓이와 위치를 정하여 움직여준다. 문법 TabView: 탭을 구성하고 각 탭에 대한 콘텐츠를 추가 할 수 있음 GeometryReader: 화면에 보여지는 뷰(View)의 크기 및 위치 정보를 제공하는 뷰 자식 뷰에 대한 레이아웃 정보를 제공하므로, 자..
[NIKE clone] 3D 신발 에니메이션
·
SwiftUI/개발
앱 설명 나이키 신발 쇼핑 어플로서 신발 사이즈와 3D 모델링이 된 신발 이미지를 가져와서 신발을 3D로 볼 수 있게합니다. 앱 기능 신발 이미지 시점 X축 이동 , Y축 이동 신발 사이즈 조정 장바구니 버튼 문법 SceneKit : 3D 이미지들을 사용하기 위해 가져오는 API SCNScene : 표시 가능한 3D장면을 구성하는 노드 계층 및 전역속성을 위한 컨테이너(애플 문서) / 내생각 String이나 Bool처럼 3D를 담당하는 문법 CGFloat : 비트수의 차이 32bit에서는 float으로 64bit에서는 Double로 처리 $변수 : 먼저 @Binding 또는 @State로 선언해준 변수들을 양방향으로 연결되도록 해줘야해서 ‘$’을 사용하여 바인디 시켜 값을 변경 zIndex : 겹치는 뷰..
애플 지도 클론코딩
·
SwiftUI/개발
앱 설명 아이폰 내부 지도 api를 이용하여 지도를 구현 해봤습니다. 앱 기능 유저 위치 권한 허락 설정 검색 후 검색 리스트 누르면 위치 이동 현재 내 위치 표시 버튼 위성 , 그림 지도 전환 버튼 검색 한 곳 마커 찍기 문법 Identifiable : 객체 안에 id를 지정해주어 사용할 때 정확히 불러올 수 있게해줌 CLPlacemark : 종종 장소의 이름, 주소 및 기타 관련 정보를 포함하는 지리적 좌표를 가져옴 Mapkit : Apple Map을 사용 지도나 위성이미지, 좌표등 지도를 사용할 수 있음. CoreLocation : 장치의 지리적위치와 방향을 확인, 고도, 방향등 위치를 결정하는 서비스를 제공 사용자의 현재 위치에서의 크고 작은 변경을 정확하게 추적합니다 MapViewModel : ..
아이폰 키패드 클론코딩
·
SwiftUI/개발
GitHub - bulmang/Iphone_Keypad: 아이폰 전화 키패드 앱 아이폰 전화 키패드 앱. Contribute to bulmang/Iphone_Keypad development by creating an account on GitHub. github.com 앱 설명 아이폰의 기본 전화 애플리케이션 중 키패드 부분입니다. 앱 기능 배열을 사용하여 번호버튼을 누르면 번호 입력 번호가 입력 되었을 때 번호추가 버튼과 삭제버튼 활성화 0번버튼을 길게 눌렀을 때 + 입력, 나머지 버튼은 입력 되지 않음. Tab 바를 만들어서 화면 전환 코드 MainView // // ContentView.swift // Iphone_Keypad // // Created by 하명관 on 2022/11/25. // ..