본문 바로가기
반응형

개발/iOS5

SwiftData의 1:N Relationship 설정 시 크래시 문제 해결 크래시 발생SwiftData를 이용한 앱을 런칭했는데 iOS 개발자들을 긴장하게 만드는 이메일이 전해집니다.저는 이 메일을 받을 때마다 심장이 두근두근 하더군요. @Model이 Swift의 매크로 기반으로 동작하다보니 에러 발생 시 자동으로 생성된 코드 블럭 내에서 콜 스택이 호출됩니다.그 종착지는 앱 내에서 Post와 유사한 역할을 하는 History 모델의 author 필드를 세팅하는 로직이었습니다.그러나, History 생성 로직 구성 후 메서드 실행 시 문제가 없었기 때문에 정말 의아한 상황이었습니다.var author: Author?{ @storageRestrictions(accesses: _$backingData, initializes: _author) init(initialVal.. 2024. 7. 22.
UIViewController의 view는 왜 UIView! 타입일까? UIViewController를 기반으로 UI를 구성할 때 기본적으로 자주 사용하는 속성은 바로 view입니다.이 view를 조금 살펴보면 UIView! 타입인 것을 확인할 수 있습니다. 이에 대한 이유를 명확히 알아보고자 view에 대해 좀 더 살펴보았습니다.view의 구성 방식view의 구성 과정을 알아보기 위해서는UIViewController 내 loadView() 메서드와 연결 지어 생각하면 되는데 view 속성의 경우 기본 값이 nil이며, nil인 상태에서 self.view 따위를 통해 접근 시(force-loading이라고 표현하기도 하네요)loadView() 메서드를 통해 view를 새로 할당하는 구조입니다.만약 직접 접근하지 않는다면 UIKit이 실제로 필요하다고 여겨지는 시점에 자동으로.. 2024. 7. 7.
SwiftUI에서 Custom navigation 설정 시 Swipe back 활성화하기 배경SwiftUI에서 커스텀 네비게이션 바를 만들고 사용할 때, .toolbar(.hidden)을 사용하여 iOS에서 일반적으로 표시되는 기본 네비게이션 바를 비활성화하면 iOS에서 흔히 사용되는 스와이프 백 제스처도 비활성화됩니다.이 제스처를 다시 활성화하려면 UIKit의 UINavigationController에 아래와 같은 코드를 추가해야 합니다.extension UINavigationController: UIGestureRecognizerDelegate { open override func viewDidLoad() { super.viewDidLoad() interactivePopGestureRecognizer?.delegate = self } pub.. 2024. 7. 7.
iOS Simulator 사용 시 macOS 사운드 깨짐 현상 해결하기 평소 개발할 때 맥북 스피커를 통해 음악을 많이 듣곤 하는데 어느 시점부터 맥북 스피커에서 엄청나게 찢어지는 듯한 사운드가 음악과 함께 나왔습니다.기기를 구매한지도 오래되지 않았고 어떤 위해를 가하지도 않았기 때문에 조금 의심쩍긴 했지만 맥북 스피커가 고장 났으리라 판단하고 별도 스피커를 구매해서 연결해보았지만 그 스피커에서도 여전히 동일한 현상이 발생되었습니다.그때 불현듯 iOS 시뮬레이터와 연관이 있을 수 있다는 생각이 들었고 iOS Simulator Macbook Sound 따위의 키워드로 찾아보니 아니나 다를까 아래와 같이 같은 현상을 겪고 있는 사용자를 찾을 수 있었습니다.https://discussions.apple.com/thread/251814420?source=post_page-----e.. 2024. 7. 5.
Swift에서 좀 더 안전한 방법으로 배열에 접근하기 일반적으로 배열에 index를 통해 접근하는 상황을 최소화해야 하는 것이 옳지만 어쩔 수 없이 관련된 상황이 발생하기 마련입니다.Swift에서는 좀 더 안전한 처리를 위해 함수 단에서 guard를 지원하는데 Array의 경우 index를 통해 접근해서 가져오는 값이 Optional 타입이 아니기 때문에 접근하는 index가 유효하지 않은 경우 꼼짝없이 Fatal error: Index out of range 메세지가 우리를 맞이해주게 됩니다.let arr = [1, 2, 3, 4]arr[4] // fatal error : index out of range이는 소중한 앱이 Crash(!!)되어 머리를 지끈하게 만드는 아주 빈번한 상황 중 하나이기 때문에 좀 더 안전하게 처리해줄 수 있는 방안을 찾아야합니다.. 2024. 7. 5.
반응형