목록분류 전체보기 (364)
iOS 개발 공부
rxSwift와 combine의 비동기 흐름은 아래와 같다 Observable → 이벤트 생성 → 전달 → Observer RxSwift의 경우Observable → 이벤트 생성 → 전달 → Observer subscribe(on:) observe(on:) 이벤트가 생성되는 쪽의 실행 스레드를 지정해주는 것이 subscribe(on:)생성된 이벤트를 전달받아 처리하는 쪽의 실행 스레드를 지정해주는 것이 observe(on:)이다.Observable .create { observer in // Subscription 영역 } ..
combine에서 @Published는 값이 바뀔때마다 방출을 하는데 이때 방출되는 시점은 언제일까 ??당연히 didSet이 호출되어 값이 바뀌고 난 뒤라고 생각했는데 실제 값과 receive된 값이 다르다는 걸 알게 되었다.//// ContentView.swift// Test//// Created by 이준복 on 6/20/25.//import SwiftUIimport Combinestruct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text("Count: \(viewModel.count)") ..
일급 객체일급객체, 일급함수란 객체나 함수가 값으로 취급될 수 있다는 것이다.값으로 취급 할 수 있다는 것의 의미는 변수를 할당받거나, 파라미터로 전달되거나 리턴 값으로 취급 될 수 있다는 것이다.설명으로만 보면 이해하기 힘든데 코드를 보면 쉽게 이해가 가능하다// 반환 값func getName() -> String { "Name"}// 파라미터로 전달func add(_ a: Int, _ b: Int) -> Int { a + b}// 변수에 저장struct Person { let name: String let age: Int}let person = Person(name: "준", age: 20)위와 같이 처럼 정수형, 배열, 객체, 클래스 등 변수에 할당받을 수 있는 타입을 일급객체..
서비스 하고 있는 App 하나의 리팩토링을 끝낸후 나머지 앱을 리팩토링 하던 중 아래와 같은 오류 발생 Thread 1: Swift runtime failure: Unexpectedly found nil while implicitly unwrapping an Optional value Crash 발생시 함수 스택에도 표기되지 않고 storyboard나 xib파일이 아예없기에 아주 당황 ;;;혹시몰라 다시 체크해보았는데 당연히 코드레벨에서 옵셔널을 강제 언래핑하는곳이 아무곳도 없었음 크래시가 발생하는 화면 처음부터 디버깅 시작아래 함수 호출 시 크래시 발생func getSectionPositions() async 기존에 리팩토링이 끝난 앱에서 공통코드로 뺀 부분이고 정상적으로 동작하는 것까지 검증이 끝난 ..
App Crash Report에서 Concurrency 오류 발생KakaoLogin시 간혈적으로 App Crash가 발생을 확인 다양한 ThirdPartyLogin을 위해 async/await을 사용하고 있었기때문에 withCheckedThrowingContinuation로 감싼 형태였고특정 기기나 OS, 혹은 특정 유저마다 발생하는게 아니였고 같은 조건이여도 정상적으로 동작하는 경우가 있었고CheckedContinuation.resume(returning:)CheckedContinuation.resume(throwing:) 둘 모두에서 Crash가 발생하여 SDK에서 발생하는 문제임이라 생각하여 개발자 포럼에 확인 요청- iOS SDK에서 Concurrency 사용시 app crash iOS SDK에..
Dynamic App Icon특정기간이나 특정 조건에서 앱 아이콘을 바꾸고 싶을 때 앱 배포를 하지 않고 앱 아이콘을 바꾸는 방법Assets 에 원하는 AppIcon(BIcon, CIcon, DIcon) 들을 추가 Targets → Build Setting(All) → Alternate App Icon Sets 에서 Assets에 추가한 AppIcon(BIcon, CIcon, DIcon) 들을 입력UIApplication.shared.setAlternateIconName(String?:) 호출https://github.com/user-attachments/assets/345e9eda-495d-4ce7-a5f1-4d2f496ffb33 import UIKitclass ViewController: UIV..
모듈화시 각 모듈에서 사용하는 ThirdParty Library들의 효율적인 관리를 위해 ThirdPartyKit이라는 모듈로 분리하여 사용하였다.App 테스트를 위해 Configurations를 각각 다르게 줘고 Scheme를 각각 설정하였다.Dev, QA, Release Scheme이다App-Release 스키마와 App-Dev 스키마는 정상적으로 실행되는데 App-QA 스키마는 아래와 같은 에러가 발생한다.Framework 'ThirdPartyKit' not foundLinker command failed with exit code 1 (use -v to see invocation)~/DerivedData/프로젝트이름/Build/Products의 폴더를 들어가 각각의 폴더를 확인해보면QA에만 Thi..
What is Observation ?기본 데이터가 변경될 때 프레젠테이션을 업데이트하는 반응형 앱을 만듭니다.@Obserable 은 normal type의 property를 observable type으로 마킹하여 UI가 data의 변화에 대응할 수 있게 해주는 매크로@Obserable 은 Swift 컴파일러에게 명령을 내려서 코드를 확장형 Observable type으로 바꿔 SwiftUI가 뷰를 동작하게 만듬reference type, value type을 모두 지원 @Published @State @Binding @ObservedObject 등 다른 프로퍼티 래퍼가 없어도 작동함각 property마다 @Published @State @Binding @ObservedObject 등을 붙인것을 dat..
[WWDC - 2021] Demystify SwiftUI ‐ Identity (1/3)[WWDC - 2021] Demystify SwiftUI ‐ Lifetime (2/3)[WWDC - 2021] Demystify SwiftUI ‐ Dependency (3/3)🤔 SwiftUI는 우리의 코드에서 어떤걸 볼까 ?IdentitySwiftUI가 여러번의 업데이트 동안 요소(element) 가 동일한것인지 다른것인지 인식(recognize) 하는 방법LifetimeSwiftUI가 뷰와 데이터의 존재(existence) 를 시간에 따라 추적하는 방법DependencySwiftUI가 인터페이스를 업데이트해야하는 시기(when) 와 이유 (why) 를 이해하는 방법이 세 가지 개념을 통해 SwiftUI는 변경해야할..