일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ios
- ViewBuilder
- transformation.map
- SwiftUI
- oberve url
- 기존 앱
- 상단 탭바
- 스크롤 탭
- convert base64
- Swift Package Manager
- detect url
- DataBinding
- scrolling tab
- base64 변환
- UIViewControllerTransitioningDelegate
- notifychanged
- Android
- DevelopmentRegion
- pod install
- swift
- url 추적
- List
- url 관찰
- Side Menu
- UIPresentationController
- development language
- GeometryReader
- Tuist
- swift #swift keychain #keychain 사용법
- 개발자 면접
- Today
- Total
목록전체 글 (169)
버그 잡이
문제의 발단오늘 하루 동안 다시 보지 않기를 위해서현재 시간에 1일을 더한 날짜를 저장하고그 시간을 현재 시간과 비교하는 로직을 구현해야 했는데요.관련해서 print문을 찍어보니 Date()가 9시간 전의 시간으로 출력되는 것을 확인했습니다. // 현재 시간 (한국 시간 7월 28일 15시)let currentDate = Date()print("\(currentDate)") // 2024-07-28 06:04:34 +0000 왜 그럴까요? 원인은 TimeZone 때문입니다.Date()는 기본적으로 UTC 기준으로 생성됩니다.UTC는 한국 시간 보다 9시간 전의 시간입니다. 사실 UTC 기준으로 Date를 저장하고 UTC 기준으로 Date를 비교하면 문제 없습니다.24시간 기준으로 한다면 말이죠.둘 ..
지난번 포스팅: https://jinsangjin.tistory.com/186 Swift Pakcage Manager로 프로젝트 기능 모듈화 하기왜 SPM으로 모듈화를 하는가?- 모듈화를 해보고 싶었습니다.- Tuist를 활용해서 하는 방법도 있었지만 Tuist까지 같이 도입하기에는 시간이 부족했고- Tuist를 도입하기 전에 SPM으로 간단하게(?) 레거jinsangjin.tistory.com 지난번 포스팅에서 Swift Package Manager로 기능을 모듈화 하고 데모 앱까지 만드는 방법을 알아봤습니다.오늘은 모듈화 과정에서 삽질했던 부분을 모아서 적어보겠습니다. 모듈을 어떻게 import 할것인가?모듈들은 프로젝트 루트 -> Modules 폴더 안에 위치했습니다.처음에는 모듈을 project..
왜 SPM으로 모듈화를 하는가?- 모듈화를 해보고 싶었습니다.- Tuist를 활용해서 하는 방법도 있었지만 Tuist까지 같이 도입하기에는 시간이 부족했고- Tuist를 도입하기 전에 SPM으로 간단하게(?) 레거시 프로젝트에서 모듈화가 가능할지 테스트 해보고 싶었습니다.- 그리고 SPM으로도 충분하지 않을까? 라는 생각도 있었습니다. 이번 목표- Invest라는 새로운 feature를 Package로 분리하고 Demo Project까지 만드는 것 Invest 패키지 추가1. 프로젝트 생성 후 프로젝트 루트 경로에 Modules 라는 폴더를 추가합니다. 2. Modules 폴더 안에 Invest 패키지를 추가합니다. - Library를 선택해주고- 생성시 경로를 Modules 폴더 안으로 설정 후 cre..
SwiftUI는 선언형 프레임워크로서, 상태 관리를 효율적으로 할 수 있도록 다양한 도구를 제공합니다.그 중에서도 ObservableObject와 StateObject는 데이터 모델 관리에 중요한 역할을 합니다.이번 글에서는 ObservableObject와 StateObject의 정의와 사용법, 두 객체의 공통점과 차이점, 그리고 언제 어떻게 사용해야 할지에 대해 알아보겠습니다. ObservableObject란?ObservableObject는 SwiftUI에서 데이터의 변화를 감지하고, 뷰에 이를 반영할 수 있도록 도와주는 프로토콜입니다. 주로 뷰 모델(ViewModel)로 사용되어 데이터의 변경을 뷰에 전달합니다. 주요 특징:클래스 기반 객체에서 사용됩니다.@Published 어노테이션을 사용하여 프로..
AnyView란 무엇인가? SwiftUI에서 개발하다 보면 함수에서 서로 다른 타입의 뷰를 리턴해야 하는 경우가 생깁니다.이러한 상황에서 사용할 수 있는 것이 바로 'AnyView'입니다. 즉, 모든 종류의 뷰를 래핑할 수 있는 타입으로, 다양한 타입의 뷰를 하나의 타입으로 취급할 수 있게 해줍니다. 또한, 'AnyView'는 파라미터로 전달할 때도 유용하게 사용할 수 있습니다.함수에 여러 종류의 뷰를 파라미터로 전달해야 할 때, 다양한 타입의 뷰를 하나의 파라미터 타입으로 처리할 수 있게 해줍니다. struct CustomViewContainer: View { let content: AnyView var body: some View { VStack { Text..
SwiftUI를 쓰다보면 기존 AutoLayout 보다 성능이 떨어짐을 느낄 수 있습니다.실제로 AutoLayout보다 메모리를 평균 20% 정도 더 차지하고(물론 어떤 뷰를 그리느냐에 따라 달라지겠지만)이에 따라 성능상으로도 다소 떨어진다는 연구 결과도 있습니다.이해 없이 SwiftUI를 쓰면 성능상 저하를 가져올 수 있기 때문에 SwiftUI는 어떤 식으로 비교 연산을 하고 어떻게 최적화 할 수 있을지 알아봅시다. https://medium.com/@vladislavshkodich/mastering-swiftui-are-you-really-as-good-as-you-think-40a4953f7e88위 글(Mastering SwiftUI: Are you really as good as you think..
Keychain이란? Keychain은 iOS에서 제공하는 보안 저장소로, 사용자의 민감한 정보를 암호화하여 안전하게 저장할 수 있게 해줍니다. 이는 UserDefault나 파일 시스템 저장과 같은 다른 저장 방식보다 안전한 옵션을 제공합니다. Keychain Item keychain item 단위로 write / read / delete / update 합니다. keychain item는 attribute를 통해서 key-value 값 뿐만 아니라 부가적인 데이터 저장 및 추가 옵션 설정이 가능합니다. SecItemAdd(), SecItemDelete() 와 같은 함수을 통해서 keychain item을 저장할 수 있습니다. (뒤에 나오는 코드를 보시면 보다 이해가 쉬울겁니다.) Attributes k..
몇달전에 한번 읽었던 책인데 최근 3장부터 다시 읽기 시작했고 그 중 인상 깊었던 내용 위주로 정리한다. (요약용 글이기 때문에 말투는 편하게 하겠습니다.) 3장. 집중 1. 기록의 고수는 많이 쓰지 않는다. 기록하는 사람은 100개의 기록 중에 가치 있는 10개를 골라내는 사람이라고 할 수 있다. 모래알처럼 수많은 요소들 중에서 빛나는 보석을 발견하는 일. 정말 가치 있는 기록을 뽑아내려면 버리는 것을 두려워해선 안 된다. 이를 위해서 저자는 모든 것을 키워드 2가지로 요약해보는 것을 제시한다. 키워드를 찾아가는 과정에서 자연스럽게 집중하게 되고 버릴 것은 버리게 된다. 2. 자기화한 것만 이해할 수 있다. 이해 못 하는 건 과감하게 버려야 한다. 기록도 내가 이해한 것이라야 나중에 써먹을 수 있다. ..