문제 상황프로젝트중 메모리 사용량이 계속 증가하는 현상을 보게 되었습니다.제가 만들고 있던 것은 사용자 앨범에서 이미지를 선택하는 기능으로, 이미지를 다루기 때문에 메모리 소모가 큰 작업입니다.따라서 이런 메모리릭은 치명적입니다.만약 계속 인스턴스가 해제되지 않고 쌓인다면 언젠가 메모리 오버플로우로 앱이 강제종료 될 것입니다.화면을 Dismiss해서 picker뷰를 해제했음에도 불구하고 메모리에서 사라지지 않아 새 picker를 열때마다 메모리가 증가하고 있습니다. 계속 반복한 결과 사용량이 2GB가 넘어가니 앱이 종료되었습니다. (아이폰 미니) 디버그툴로 릭 찾기이제 어디서 메모리릭이 발생했는지 찾아보도록 하겠습니다.앱을 실행시킨 후 Xcode 하단에 보시면 Debug Memory Graph 버튼이 ..
기존 프로젝트를 Tuist로 모듈화한 후 마주쳤던 문제에 대해서 간단하게 포스팅해보려고 합니다. 프로젝트 스펙: UIKit, SnapKit, Tuist, RxCocoa, RxSwift 문제상황 빌드시 SnapKit 라이브러리에서 오류가 발생했습니다. Thread 1: EXC_BAD_ACCESS(code=1, address=0x0) 해당 오류가 발생한 지점은 이렇게 단순히 Cell 내부에서 Contraints를 설정하는 부분이었습니다. ⬇️ 전체 코드 더보기 class RegisteredPetCell: BaseCollectionViewCell { // MARK: Constant private let IMAGE_SIZE: CGFloat = 70 // MARK: UI Component private let p..
외부 요인에 맞게 빌드 환경이 필요할 때 이를 보통 dev, staging, prod 등으로 나누는데요, flutter에서는 flavor란 기능으로 이를 지원하고 있습니다. 저는 프로젝트 중 서버가 불안정할때도 원활하게 UI개발을 하고 싶어 flavor를 이용해 환경을 분리하게 되었습니다. 빌드 환경을 나누고 프로젝트 내부에서 환경에 따라 DI하는 법까지 소개해보겠습니다. 1. iOS 세팅 조금 번거롭지만, flutter에서 빌드 환경을 나누려면 각 플랫폼 별에서 별도로 작업을 미리 해주어야합니다. iOS는 빌드 환경을 'Scheme'라고 하는데 이를 먼저 세팅해주겠습니다. 1. 먼저, ios > Runner.xcworkspace 파일을 통해 Xcode를 열어줍니다. 2. Project > Info 에서..
헬스킷을 프로젝트에 적용하게 되면서 고민했던 점들을 한번 작성해볼까 합니다. 헬스킷 자체만으로도 많은 API를 가지고 있는데다가 비즈니스 로직까지 합쳐지며 코드 부담이 꽤나 커졌는데요, 이를 풀어갔던 과정을 공유해보겠습니다. 요구사항 제가 기획했던 서비스에서 필요했던 요구사항을 간단히 정리해보자면 다음과 같습니다. 사용자의 수면, 심박, 활동 데이터를 하루 단위로 정리해서 (서버에) 저장한다. 이때, 애플워치 데이터를 우선시한다. 세부적으로 필요한 데이터(분당심박평균, 총수면시간 등등 ..)들을 수집할 수 있는지는 문서와 실기기 테스트로 어느정도 검증한 상태였기 때문에 어려울게 없어보였는데요, 막상 작업을 시작해보니 난관이 있었습니다. 먼저 건강데이터들은 헬스킷 데이터베이스에 저장이 됩니다. 그래서 단순..
UI 살짝 바꾼 것 뿐인데 매번 새로 빌드에서 확인하기 귀찮지 않으신가요? iOS에서 Hot Reloading 기능을 이용해 변경사항을 바로 시뮬레이터에서 확인할 수 있는 라이브러리가 있어 소개해드리려고 합니다. InjectIII라는 라이브러리로 사용법도 엄청 간단해요! UIKit에서도 SwiftUI에서도 사용 가능합니다. GitHub - johnno1962/InjectionIII: Re-write of Injection for Xcode in (mostly) Swift Re-write of Injection for Xcode in (mostly) Swift. Contribute to johnno1962/InjectionIII development by creating an account on GitHu..
우연히 GraphQL을 써볼 기회가 생겼는데요, Apollo라는 라이브러리를 이용해 GraphQL을 적용해보려고 합니다! https://www.apollographql.com/docs/ios/get-started Getting Started with Apollo iOS The Apollo iOS SPM package includes the Codegen CLI as an executable target. This ensures you always have a valid CLI version for your Apollo iOS version. To simplify accessing the Codegen CLI, you can run the included apollo-cli-install SPM plugi..
의존성 주입하는게 귀찮아질 쯤 DI라이브러리를 알아보기 시작했는데요, 종류가 정말 많더라구요... 그래서 뭘 쓸지 고민하다가 각 라이브러리의 Overview를 읽어보며 특징을 정리해보게 되었습니다! Factory (0.9K) https://github.com/hmlongco/Factory GitHub - hmlongco/Factory: A new approach to Container-Based Dependency Injection for Swift and SwiftUI. A new approach to Container-Based Dependency Injection for Swift and SwiftUI. - GitHub - hmlongco/Factory: A new approach to Contai..
앱에 표시하는 컨텐츠를 서버 등에서 받아오는 것이 아니라 앱 내에서 직접 관리해야하는 경우, 일명 하드코딩 해야하는 경우가 있죠. 이럴때 어떻게 하면 좋을까요? 가장 쉽게 생각할 수 있는 방법은 static let이 있습니다. enum TestQuestions { static let questions: [TestQuestion] = [TestQuestion(title: "첫번째", content: "첫번째 컨텐츠 입니다."), TestQuestion(title: "두번째", content: "두번째 컨텐츠 입니다."), TestQuestion(title: "세번째", content: "세번째 컨텐츠 입니다."), TestQuestion(title: "네번째", content: "네번째 컨텐츠 입니다.")..
- Total
- Today
- Yesterday
- coordinator pattern
- programmers
- 노션
- swift
- TestCode
- notion
- ios
- design pattern
- Architecture Pattern
- GetX
- 아키텍쳐 패턴
- healthkit
- SwiftUI
- DocC
- MVC
- MVI
- Flutter
- 비동기/동기
- MVVM
- 코디네이터 패턴
- 프로그래머스
- SWM
- combine
- Bloking/Non-bloking
- Swift Concurrency
- 소프트웨어마에스트로
- 리액티브 프로그래밍
- Flux
- reactive programming
- RX
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |