일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DevelopmentRegion
- oberve url
- transformation.map
- 스크롤 탭
- ViewBuilder
- 개발자 면접
- Android
- GeometryReader
- UIPresentationController
- swift
- 기존 앱
- Swift Package Manager
- url 관찰
- pod install
- Tuist
- List
- detect url
- DataBinding
- Side Menu
- development language
- url 추적
- convert base64
- notifychanged
- swift #swift keychain #keychain 사용법
- SwiftUI
- 상단 탭바
- base64 변환
- ios
- UIViewControllerTransitioningDelegate
- scrolling tab
- Today
- Total
목록분류 전체보기 (170)
버그 잡이
몇달전에 한번 읽었던 책인데 최근 3장부터 다시 읽기 시작했고 그 중 인상 깊었던 내용 위주로 정리한다. (요약용 글이기 때문에 말투는 편하게 하겠습니다.) 3장. 집중 1. 기록의 고수는 많이 쓰지 않는다. 기록하는 사람은 100개의 기록 중에 가치 있는 10개를 골라내는 사람이라고 할 수 있다. 모래알처럼 수많은 요소들 중에서 빛나는 보석을 발견하는 일. 정말 가치 있는 기록을 뽑아내려면 버리는 것을 두려워해선 안 된다. 이를 위해서 저자는 모든 것을 키워드 2가지로 요약해보는 것을 제시한다. 키워드를 찾아가는 과정에서 자연스럽게 집중하게 되고 버릴 것은 버리게 된다. 2. 자기화한 것만 이해할 수 있다. 이해 못 하는 건 과감하게 버려야 한다. 기록도 내가 이해한 것이라야 나중에 써먹을 수 있다. ..
List는 아래와 같이 기본적으로 여백, 구분선 등의 스타일이 적용되어 있습니다. 그런데 저는 커스텀 하게 스타일링하기 위해서 태초의 상태로 되돌리고 싶었습니다. 어떻게 스타일을 지울 수 있을까요? .listStyle(.plain) 리스트는 여러 스타일이 있는데요. 스타일 속성을 plain으로 줄 수 있습니다. List { Text("item1") Text("item2") Text("item3") } .listStyle(.plain) 이렇게 listStyle을 plain으로 하면 기존의 background 컬러, 여백 등의 속성을 없앨 수 있습니다. 구분선 제거 하지만 아직 구분선이 남아있네요. 구분선을 없애보겠습니다. iOS 15 이상인 경우, listRowSeparator(.hidden) 이라는 속성..
웹뷰를 사용하다보면 네트워크 연결 상태 등의 이유로 최초 페이지가 로드가 되지 않거나 웹뷰 내 페이지 이동중 에러가 발생하는 경우가 있습니다. 이 경우 어떻게 에러를 감지할 수 있는지 알아보겠습니다. 1. 웹 페이지 최초 로딩 에러 감지 WKNavigationDelegate를 활용하여 최초 로딩 에러를 감지할 수 있습니다. import UIKit import WebKit class ViewController: UIViewController, WKNavigationDelegate { var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() let configuration = WKWebViewConfiguration() webView..
최근 다이어리 앱을 만들고 있는데요. 아래와 같이 시간대별로 기록할 수 있는 리스트를 가지고 있습니다. "저는 현재 시간의 Row를 최상단으로 스크롤 하고 싶었습니다." (현재 시간이 14시면 14시 row를 최상단으로 스크롤) scrollTo(_:anchor:) ScrollView에서 해당 ID가 있는 하위 뷰를 찾아서 해당 뷰로 스크롤 합니다. id는 하위 뷰를 판단할 수 있는 고유값이고 anchor는 타겟이 되는 하위 뷰를 스크롤 어디에 위치시킬지 결정하는 옵션입니다. (.top, .center, .bottom, .leading, .trailing 등의 옵션이 있습니다.) 기본 코드 예시 struct ContentView: View { var body: some View { ScrollViewRea..
textEditor 우측에 있는 scrollIndicator가 보기 안 좋습니다. 이를 안 보이게 하고 싶습니다. 구글링을 해봤습니다.. https://stackoverflow.com/questions/73702315/texteditor-scroll-hidden-in-swiftui TextEditor(text: $context) .introspectTextView { textView in textView.showsVerticalScrollIndicator = false } introspect라는 라이브러리가 있다는 것을 알게 되었네요. UIKit의 속성들을 쉽게 가져다 쓸 수 있게 도와주는 라이브러리입니다. (사용하려면 cocoaPod이나 spm으로 해당 라이브러리를 추가하고 import 해줘야 합니다...
onReceive - Publisher가 발행될때 이를 탐지할 수 있는 함수 예제 코드 struct ContentView: View { @State private var message: String = "" var body: some View { VStack { Text(message) } .onReceive(timer) { _ in message = "Timer fired" } } let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() } onChange - 특정 값이 변경되었을때 이를 탐지할 수 있는 함수 - iOS 14부터 사용 가능 - Equatable을 준수하는 값이면 탐지 가능 - oldValue 캡처 가능 예제 코드..
이번에 현업 레거시 프로젝트에 Tuist를 적용해보았는데요. 그 삽질기를 남겨보겠습니다. (아직 Tuist에 대한 이해가 많이 부족하니 틀린 부분이 있다면 댓글로 남겨주시면 감사하겠습니다!) Tuist 적용법 1. Cocoapod 제거 먼저 기존 프로젝트는 Cocoapod으로 라이브러리를 연동했었습니다. Tuist를 쓰면서 SPM을 활용할 것이기 때문에 프로젝트 내에서 CocoaPod 제거하는 작업을 먼저 진행해줍니다. pod deintegrate pod cache clean --all + Podfile, .workspace 파일 지우기 2. Tuist 설치 및 Project.swift 파일 생성 아래 스크립트로 tuist를 설치해주고 curl -Ls https://install.tuist.io | ba..
TCA 란? - '일관적이고 이해할 수 있는 방법으로 앱을 개발할 수 있게 도와주는 라이브러리' - composition, testing, ergonomics(인체 공학)를 염두해두고 만들었다고 합니다. * 구조 1. 사용자의 동작은 View를 통해 Action의 형태로 변환됩니다. 2. Action은 Reducer에서 처리되어 State를 바꿉니다. 3. State를 구독하고 있는 View는 State의 변화에 따라 최신화됩니다. 4. Environment는 외부 의존성이라고 생각하면 됩니다. Environment를 Effect로 변환해서 Action을 실행시킵니다. * Effect - Composable 외부에서 일어난 일을 가져와서 상태를 변경시킬때 사용 - 외부 접근 = API , Disk, Ti..