iOS

    [Mastering SwiftUI] 단축키 정리

    안녕하세요 개발자 홍성호 입니다. SwiftUI 기초를 배우기 시작했습니다. 일단 전체적으로 훑는게 좋을 것 같아서 강의를 수강하겠습니다. 깔금하게 잘 설명해주시는데 나중에 영상을 만들 때 참고해야겠습니다. https://www.youtube.com/watch?v=rv3iJSGlRp0 용어 정리 Modifier: .foregorundColor 같은 것들 단축키 정리 맨날 까먹어서 나중에 다시 보려고 정리해둡니다ㅋㅋ Preview 에서 cmd 를 누른채로 View를 터치: Action Menu가 나옴 shift + cmd + L: show library Cmd 누른 채로 View 클릭: Action Menu가 뜸 View에 커서를 둔 채로 shift + cmd + A: Action Menu가 뜸 optio..

    커스텀 UIInputView height에 SafeArea 반영하기

    안녕하세요! 오늘은 커스텀 UIInputView를 다루다가 SafeArea bottom inset을 높이에 반영하는게 잘 되지 않아서 이슈를 파헤쳐 봤습니다. 🐞 버그가 있는 코드 버그가 있는 코드 부분은 복기를 위해서 남겨둡니다. 바쁘신 분들은 무시하셔도 좋습니다. 기존에 작업해둔 코드에서는 init 시점에 UIInputView를 사용하는 UIViewController를 주입받았습니다. init(viewController: UIViewController) { self.viewController = viewController } 그리고 나서 intrinsicContentSize를 계산해줬습니다. 기존에 주입 받았던 viewController를 활용해서 safeAreaInsets.bottom을 가져옵니다...

    Swift 객체 외부에서 객체가 해제되는 것 감지하기

    깃헙 블로그 내용 옮겨왔습니다. cozzin.github.io/2021/03/30/DeallocWatcher.html iOS 앱 개발하면서 NotificationCenter를 많이 사용하게 되는데요. 특정 객체의 행동을 추척할 때 유용하게 쓸 수 있습니다. addObserver(_:selector:name:object:)를 사용해서 옵저버를 등록해 둔 경우에는, 해당 객체가 메모리에서 해제될 때 옵저버도 자동으로 함께 삭제됩니다. removeObserver(_:)를 호출할 필요가 없는 것이죠. 이슈 여기에 예외가 있습니다. addObserver(forName:object:queue:using:)를 사용하는 경우에는 직접 removeObserver(_:)를 호출해줘야 합니다. 클로저를 넘겨주기 때문에 OS..

    RIBs 스터디 2: 공식 레포 Wiki 살펴보기

    이번에는 RIBs/wiki 보면서 RIBs에 대해 배워보겠습니다. RIBs 개념 정리 RIBs는 크로스 플랫폼 아키텍처 프레임워크 프레임워크는 정해진 틀에 코드를 넣으면 시스템이 약속된 기능을 작동시켜주는건데, 이 개념에 맞는지는 좀 더 살펴봐야겠습니다. RIB을 작성하는 템플릿이 있지만 프로그래머가 직접 관계를 지정해줘야하는 면에서 라이브러리라고 볼 수 있는건 아닐까? 하는 생각은 들었습니다. 우버를 위해 이 프레임워크를 디자인 했을때, 다음 원칙을 고수함: 크로스 플랫폼 협력을 독려함 iOS와 Android 앱에서 대부분의 복잡한 부분은 비슷함 RIB는 iOS와 Android에 비슷한 개발 패턴을 제공함 의문점 아키텍처가 통일된다고 해서 서로의 코드를 공유하는 일이 있을까? 하는 의문이 들기는 합니다..

    RIBs 스터디 1: Let'Swift 발표들로 RIBs 맛보기

    깃헙 블로그에 써뒀던 내용 옮겨왔습니다. 많은 팀에서 도입하고 있는 RIBs 아키텍처에 대해 스터디 해보겠습니다. RIBs 레포의 설명도 좋지만, 먼저 안정민님이 정리해주신 자료들로 필기해보며 공부를 시작해보겠습니다. MVC, MVVM, ReactorKit, Viper를 거쳐 RIB 정착기 (1) https://www.youtube.com/watch?v=3XS6xLzKRjc 세미나 내용 정리 입니다. 기존 아키텍처에 왜 만족 못했는가? 화면 단위가 아닌 프로세스 단위로 유연한 개발 필요 자체 제작 아키텍처의 유지 보수 어려움 더 확실한 안정화 필요 테스트 코드 템플릿 또는 가이드가 있는 아키텍처가 거의 없음 체계화된 테스트 코드 작성이 필요 아키텍처 여정 MV(C) 장점: 기존에 익숙한 구조. 단순환 화..

    @testable import로 연결한 모듈에서 Undefined symbol이 발생하는 이슈 대응

    안녕하세요 코찐입니다. 최근에 리팩토링 책을 읽기 시작헀는데 챕터 4 테스트 구축하기 편을 스위프트로 포팅해보고 싶어서 작업 중 입니다. 그런데 테스트를 위해서 @testable import 로 모듈을 가져오는데 빌드가 되지 않았습니다... 다시 보니 Host Application을 None으로 설정해둔 것도 이슈가 되고 있었습니다. Host Application을 다시 지정해줍니다ㅜㅜ 중요한 건 저 아래에 Allow testing Host Application APIs 가 체크 되어 있어야 합니다. 그래야 testable 기능을 정상적으로 사용할 수 있는 것 같습니다.

    Could not insert new outlet connection 이슈 대응

    안녕하세요. 코찐입니다. 오늘 이런 이슈를 가지고 왔습니다. xib 파일 -> code로 IBOutlet을 연결시킬 때 발생하는 에러인데요. Xcode 업데이트 이후 오류가 생겼는지 이런 이슈가 자꾸 등장하네요 🤯 얼마전에 똑같은 이슈가 발생했을 때는 xib 파일을 지우고 다시 만들었었어요;;; 그런데 이번에는 xib 파일에 많이 작업이 되어 있는 상태라 지우고 다시 만들 수는 없었습니다. Xcode 껐다켜고 캐시 지우고 실행시켜도 동일합니다... 연결하는 방향을 반대로 해보면 어떨까 싶어서 해봤는데 되네요?ㅋㅋ 이런식으로 코드를 직접 입력하면 xib에 연결되지 않은 상태로 만들어집니다. 왼쪽에 동그란 버튼을 드래그 해서 xib의 view로 연결시켜줍니다. 이번엔 버그 없이 작동됩니다! 👻

    [Combine] Chapter 17: Schedulers

    Operators for scheduling 2가지 기본 operator가 있음 subscribe(on:) subscribe(on:options:) create 특정 스케줄러 위에서 subscription을 만들어줌. subscription에 대한 설명이 좋은데 start the work 이라 되어 있음. receive(on:) receive(on:options) delivers 특정 스케줄러 위에서 value를 전달해줌. 챕터6 Time Manipulation Operators에서도 배운 것들 debounce(for:scheduler:options:) delay(fortolerance:scheduler:options:) measureInterval(using:options:) throttle(for:s..