본문 바로가기

iOS

(87)
[burstcamp] 다크모드 Switch 버튼 제공 (+iOS 15 대응) 이전에 다크모드를 구현했을 때는 시스템 설정을 따라가도록 만들었기 때문에 Color Asset만 Darkmode 설정을 해주면 따로 코드 작업을 하지 않아도 다크모드를 구현할 수 있었습니다. 이번에는 Switch 버튼으로 다크모드를 직접 앱에서 설정할 수 있도록 구현해야하기 때문에 코드작업이 필요했습니다. (더불어,, 네비게이션바와 탭바도,,) 앱의 다크모드 설정 Flow는 다운로드시 Light, 후에는 사용자 설정으로 따라갔기 때문에 UserDefaults에 정보를 저장하기로 했습니다. UserDefaults에서 정보를 꺼내와서는 Appearance 라는 객체를 만들어 사용하였습니다. (light, dark) 다크모드 window 설정 스위치가 On/Off 될 때마다 window의 overrideUse..
[burstcamp] XCTemplate 팀에서 코드 템플릿을 만들어 사용하자는 의견이 있어서 Notion에 템플릿을 적어두고 구현할 때마다 복사해서 사용하기로 했었습니다. 템플릿에는 ViewController에서 구현해야하는 required init, loadView, viewDidLoad, configureUI, bind, MARK 주석 등을 적어두었습니다. 그러던 도중 XCTemplate 라는 것을 처음 딜라이트룸의 벨로그 글을 보고 알게되었습니다. https://medium.com/delightroom/xcode-xctemplate-filetemplate-을-통해-팀-생산성을-높여보자-ff2d20f5eaa0 [Xcode] XCTemplate(FileTemplate)을 통해 팀 생산성을 높여보자 딜라이트룸 iOS 그룹의 생산성 높이기 me..
[iOS] Generic 오류 (URLSession과 Decode를 곁들인) URLSession의 요청이 많아지다보니 공통화를 하고싶어서 Generic에 손을 댔는데 생각지도 못한 오류 때문에 시간을 많이 잡아 먹었다. 해결책도 사실 근본적인 해결책이라고 볼 순 없지만.. 적어놓고 나중에 완전히 이해되면 다시 볼 생각으로 글을 적어보려고한다. 오류상황 현재 NetworkManager에 모든 URLSession 작업과 Encode, Decode 함수를 넣어놨는데 Decode 함수를 제네릭으로 만들고 request 함수에서 호출하려고 보니 오류가 발생했다. 처음으로 발생한 오류 : 일반 매개변수 T를 유추할 수 없습니다. Generic parameter 'T' could not be inferred private func decode(data: Data?) -> T? { let de..
[iOS] UITabBarController, UITabBar UITabBarController A container view controller that manages a multiselection interface, where the selection determines which child view controller to display. 다중 선택 인터페이스를 관리하는 container view controller로, 선택에 따라서 보여질 child view controller가 결정됩니다. Declaration @MainActor class UITabBarController : UIViewController 이 클래스는 일반적으로 그대로 사용되지만 서브 클래스로 사용될 수도 있습니다. Tab bar 인터페이스는 화면 아래 쪽에 탭으로 보여집니다. 사용자가 ..
[TUDY] FirebaseAuth(파이어베이스 인증) + 애플, 카카오 로그인, 자동로그인 TUDY 프로젝트에서 소셜로그인 + 파이어베이스 인증으로 로그인, 회원가입 기능을 구현했던 경험을 적어보려고 합니다. (혼자 공부하고 찾으며 작성한 것이라 정보가 정확하지 않을 수 있습니다 ㅠ_ㅠ 지적, 조언 환영합니다) 파이어베이스 인증 - 로그인 제공업체 https://firebase.google.com/docs/auth/ios/start?hl=ko&authuser=0 Apple 플랫폼에서 Firebase 인증 시작하기 | Firebase Documentation 의견 보내기 Apple 플랫폼에서 Firebase 인증 시작하기 Firebase 인증을 사용하면 사용자가 앱에 로그인할 때 이메일 주소와 비밀번호를 통한 로그인 방법이나 Google 로그인, Facebook 로그인과 같은 제휴 firebas..
[TUDY] Coordinator 패턴 적용기 !! 프로젝트가 거의 끝나가면서 TUDY 프로젝트에 담당한 코디네이터 패턴을 적용했던 경험을 적어보려 합니다! TUDY 프로젝트는 MVC 입니다. Coordinator Pattern 접하기 우선 코디네이터 패턴을 처음 접하게 된 것은 부스트캠프 프로젝트를 구경하다가 코디네이터 패턴이라는 것을 쓰고 있길래 어떨때 사용하는 것이지? 하고 찾아보았습니다. https://github.com/boostcampwm-2021 코디네이터 패턴에 대한 자세한 설명은 생략하지만 결론은 화면전환의 부담을 뷰컨트롤러에서 코디네이터로 모두 위임하겠다는 것이 코디네이터 패턴의 주 목적이었습니다. Coordinator Pattern 사용 이유 1 저희 TUDY 프로젝트에서는 로그인 -> 회원가입의 절차에 대략 5개의 뷰가 있었고 여러 ..
[iOS] Static, Dynamic Library, Framework Xcode에서 Cocoapods, Carthage, SPM 같은 도구를 사용하여 외부 프레임워크를 사용합니다. 프레임워크가 어떻게 구성되어 있고, 동작하고, Static Framework와 Dynamic Framework의 차이가 무엇인지 알아보려고 합니다. Framework 프레임워크는 공유 라이브러리와 헤더 및 다른 리소스의 하위 디렉토리를 포함하는 번들입니다. 프레임워크는 Dinaymic shared library, nib 파일, 다국어 문자열, 헤더 파일, 레퍼런스 문서와 같이 공유 리소스를 패키지로 캡슐화하는 계층 구조 파일 디렉토리 입니다. 리소스 사본은 프로세스 수에 상관없이 항상 물리적으로 메모리에 상주하며 리소스 공유로 메모리를 차지하는 공간을 줄이고 성능을 향상 시킵니다. 번들이라면 실..
[iOS] Compositional Layout 에 관하여 CollectionView를 무작정? 쓰다가 레이아웃 잡을 때 감으로 때려 맞추는 일을 그만하기 위해서 정리를 해보려고 합니다.. Layout 우선 레이아웃을 사용하는 이유는 컬렉션 뷰의 컨텐츠를 정렬하기 위해서입니다. 레이아웃이 잘 잡혀있으면 컨텐츠를 그냥 넣기만 하면 레이아웃대로 구성이 되기 때문이죠! 이 레이아웃을 커스텀 하는 방법으로는 두 가지 방법이 있습니다. UICollectionViewFlowLayout UICollectionViewCompositionalLayout 우선 flow 레이아웃은 iOS 6.0+ , compositional 레이아웃은 iOS 13.0 + 에서 사용 가능합니다. flow 레이아웃이 훨씬 오래됐다는 것을 알 수 있죠 두 레이아웃 객체 모두 UICollectionVie..