
지하철 혼잡도를 알려주는 앱을 구현하던 중, 사용자가 앱을 실행하지 않아도 현재 혼잡도를 바로 확인할 수 있는 방법이 없을까 생각했다! 그 방법으로 바로 위젯을 떠올렸다!위젯에서 현재 혼잡도를 바로 보여주면, 앱을 굳이 실행하지 않아도 근황을 바로 확인할 수 있으니 사용자가 좀 더 편할 것이라고 생각했다. 📝 목차1. Widget 앱에 적용하기2. Widget 핵심 로직 3. 동작 방식 이해4. Widget 구현 1. Widget 앱에 적용하기 Creating a widget extension | Apple Developer DocumentationDisplay your app’s content in a convenient, informative widget on various devices.dev..
앱을 개발하다 보면 여러 플로우에서 동일한 화면을 사용하는 상황이 자주 발생한다. NavigationStack을 활용해, 공통된 화면은 재사용하면서도 각자의 플로우에 맞게 루트로 돌아갈 수 있도록 구현해보자.1. 상황 다음 두 플로우가 존재한다:비행기 직접 작성 후 날리기 플로우비행기 이어서 날리기(릴레이) 플로우 [1. 비행기 날리기 플로우와 2. 비행기 이어서 날리기 플로우]에서 같은 화면인 비행기 작성하는 화면을 플로우에서 공유하고 있다.최종적으로 "홈 화면으로" 버튼을 누르면 각 플로우에 해당하는 루트 뷰로 돌아가게 하고 싶다. 이걸 어떻게 Navigaion Stack으로 구현할 수 있을까? 위의 상황을 뷰 이름으로 정리해 보자. FlyAnimationView에서 "홈 화면으로" 버튼을 누..

async & await을 알아보면서 콜백지옥을 어떻게 해결하는지 이해해 보자.콜백 지옥을 알아보기 전 클로저를 잘 모른다면 참고해도 좋다. [Swift] - 클로저(Closure)iOS 면접 준비를 위한 3탄이다. Swift에서 중요한 개념인 클로저에 대해 알아보자. - 아래 링크 참고 더보기https://github.com/JeaSungLEE/iOSInterviewquestions질문 리스트1. Swift에서 클로저(Closure)란 무엇이며steelbeartaeng2.tistory.com 1. 콜백 지옥 completion handler를 사용한 예시를 하나 생각해 보자. 이렇게 completion handler를 사용한 함수가 두 개일 때 doubleNumber를 실행하고 값이 있는 경우에만 ..

NavigationStack에서 화면 전환을 구현할 때 일반적으로 NavigationLink를 많이 사용하는데, 이 컴포넌트는 전환 대상인 뷰를 미리 생성하는 방식이다. 아직 화면 전환을 하지 않았더라도 다음 뷰가 이미 메모리에 로드된 상태가 된다. 내가 구현한 화면에서는 전환 대상 뷰 내부에 무거운 연산과 네트워크 요청이 포함되어 있었고, 이로 인해 초기 진입 시 뷰 빌드에 시간이 오래 걸리며 성능 저하가 발생하는 문제가 있었다. 실제로 화면 전환을 하지 않아도 해당 뷰가 생성되기 때문에 불필요한 자원 낭비가 발생했던 것이다. 이러한 문제를 해결하기 위해, 해당 뷰가 실제로 필요할 때에만 생성되도록 LazyView를 적용하게 되었다.NavigationLink의 동작 방식에 대해 이해하고 LazyView..

프로젝트를 진행하면서 깃헙에서 충돌이 자주 발생했었다. 만약 팀원 A가 파일 추가하고, 팀원 B가 설정을 변경했을 때 둘 다 .xcodeproj 파일에 영향을 주어 충돌이 발생했다.또한 팀원이 프로젝트 설정을 변경했을 때 .pbxproj 파일은 XML 형식으로 나타나서 PR 리뷰를 하기 어려운 문제가 있었다. 추가적으로, 프로젝트에서 CocoaPods로 의존성 관리를 했지만, 팀원이 CocoaPods 사용 중인 것을 깜빡하고 SPM을 사용하면 두 의존성 관리 도구가 충돌해서 오류가 발생하는 상황도 있었다. 정리하자면 다음과 같은 문제가 있었다. xcodeproj 충돌 발생.pbxproj 파일의 코드 확인 어려움spm과 cocoapods 충돌 발생이 문제들을 해결하기 위한 방법으로 Tuist라는 툴을 알게..

팀 프로젝트로 앱을 만들어서 앱스토어 심사를 받았는데 다음과 같은 문제로 심사를 통과하지 못했다. 원인을 찾아보니 Google Analytics로 사용자의 행동을 추적하고 있었는데 사용자의 동의 없이 사용자의 행동을 추적하는 것이 문제라고 한다. 그래서 한번쯤 다들 봤을 앱 추적 권한 요청을 사용자로부터 받아야한다. 바로 이거다. ㅎㅎ 1. 권한 설정 1️⃣ info.plist 파일에 권한 설정 info.plist의 key 값에 Privacy - Tracking Usage Description을 추가하고, value에는 권한을 요청할 때 사용자에게 보여줄 하단 문구를 입력한다. (~이(가) 다른 회사의 앱 및 웹사이트에 걸친 사용자의 활동을 추적하도록 허용하겠습니까?) 상단의 이 문구는 고정이라서 ..

WebView를 구현해보려고 한다. 📖 목차1. WebView를 왜 사용해야하는가?2. WebView 구현 종류 및 사용법3. WebView에 대한 고찰1. WebView를 왜 사용해야하는가? WebView를 사용하는 이유? 네이티브 앱이 있는데 왜 굳이 WebView를 사용해야하는가에 대한 생각이 있었다.WebView를 사용하는가장 큰 이유는 두 가지라고 생각한다. 1️⃣ 크로스 플랫폼 지원 웹뷰는 한 번 작성된 웹 콘텐츠를 iOS, Android에서 동일하게 사용할 수 있도록 지원한다.그래서 플랫폼별로 별도의 네이티브 코드를 작성하지 않아도 되는 장점이 있다. 2️⃣ 배포 및 업데이트 용이성 iOS 네이티브 코드로 작성하면 앱 스토어의 심사 과정을 계속 거쳐서 통과받아야하는 단점이 있다.근데 ..

swiftUI에서 텍스트에 따라 너비와 높이가 동적으로 조절되어야 하는 경우가 많다.그래서 이번엔 텍스트에 따라 동적으로 너비와 높이가 조절되는 UI를 구현해보고자 한다. 1. 간단한 UI 구현 동적 UI를 적용하기 전에 간단하게 UI를 구현해 보자. struct ContentView: View { let content: String = "안녕하세요" let maxWidth: CGFloat = 151 var body: some View { ZStack{ Rectangle() .fill(.blue) .border(.black) .cornerRadius(6) ..