iOS/학습

    Error) failed to demangle superclass of ‘…’ from mangled name ‘…’

    모듈화를 하고, 하나의 라이브러리를 여러 모듈에서 사용할때 런타임에 이런 오류를 마주칠 수 있다. failed to demangle superclass of ‘…’ from mangled name ‘…’ 결론부터 말하면 문제가 되는 클래스를 포함하는 서드 파티나 프레임워크의 mach-O type이 static framework인 것을 모두 dynamic framework로 고쳐주면 해결된다. Tuist의 경우에는 해당 라이브러리를 .framework로 빌드하면 mach-O type이 dynamic framework로 빌드 된다. 그럼 해당 문제가 왜 일어나는지 고찰해보자. Static framework, Dynamic framework 오류에 대해서 정확히 이해하기 앞서 static framework, ..

    SwiftUI) iOS13 부터 지원하는 간단한 커스텀 Attribute Text 만들기

    SwiftUI에서는 attributeText를 iOS15부터 지원한다. 따라서 그 이전 버젼은 UIViewRepresentable을 사용해서 커스텀 하거나, Text() + Text() 형식으로 AttributeText를 만든다. 그 중 두번째 방법을 사용해서 간단한 커스텀 AttributeText를 만들어보자. UIViewRepresentable를 사용해서 커스텀 하려니 스유 개초보라 만들어진 View가 제대로 크기를 못잡고 지 맘대로 크기를 잡더라.. (비효율적인 코드를 작성했을 수도 있음.) attribute를 사용하는 화면마다 Text() + Text() 하기는 너무 비효율적이니, String의 extension으로 함수를 만들어 전체 String에서 특정 텍스트를 바꿀 수 있도록 해보겠음. 그러..

    TCA) Store vs ViewStore

    최근 TCA와 SwiftUI를 시작하면서 공부할게 너무 많아졌다.. 한번 끄적거려 보자.. TCA를 사용하면 항상 View에 Store, ViewStore를 사용하는데, 이 차이는 뭘까. Store의 구현부를 보면 public final class Store 로 선언되어 있고, ViewStore의 구현부는 public final class ViewStore: ObservableObject 로 선언되어 있다. 일단 이름만으로 예측해보면, View가 prefix로 붙어있고, Combine의 ObservableOject를 채택하고 있다. 따라서 “Store를 관찰하면서 View를 변경하겠다” 라는 생각이 든다. Store, ViewStore를 사용하는 부분을 보면, 1. struct FeatureView: V..

    Storyboard 에서 Generic Type 의존성 주입하기 2

    기존 Storyboard 에서 Generic Type 의존성 주입하기에서 큰 이슈가 있었다. 바로 iOS 13 미만 버젼에서 IBOutlet이 연결되지 않아서 앱이 크래쉬가 나는 이슈가 났음.. import UIKit typealias UIStoryboard = _DependencyInjectionStoryboard final class _DependencyInjectionStoryboard { private let storyBoard: UIKit.UIStoryboard init(name: String, bundle: Bundle?) { self.storyBoard = UIKit.UIStoryboard.init( name: name, bundle: bundle ) } func instantiateView..