일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- delegation
- contentInset
- 독서후기
- 스위프트
- Failed to register bundle identifier
- mvvm
- Codegen
- SWIFTUI
- View Life Cycle
- human interface guidelines
- viewcontroller
- NumberFormatter
- 스타트업주니어로살아남기
- 부트캠프
- Mock
- UIResponder
- roundingMode
- 독후감
- 아이폰
- IOS
- SWIFT
- 책후기
- Info.plist
- Structures and Classes
- 야곰아카데미
- Navigation
- NotificationCenter
- Modality
- xcode
- @available
- Today
- Total
목록분류 전체보기 (144)
호댕의 iOS 개발

객체 지향 언어를 사용하다보면 반드시 듣게 되는 원칙 중 하나가 바로 SOLID이다. (Swift도 객체 지향 언어 중 하나인 만큼 SOLID는 공부하면 만나게 되는 것 중 하나이다) 제르시 님이 정리해주신 iOS 면접 질문 리스트 중에서도 SOLID는 등장한다. https://github.com/JeaSungLEE/iOSInterviewquestions GitHub - JeaSungLEE/iOSInterviewquestions: 👨🏻💻👩🏻💻iOS 면접에 나올 질문들 총 정리 👨🏻💻👩🏻💻iOS 면접에 나올 질문들 총 정리 . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub. gith..
Ruby의 버전은 아래 명령어를 통해 확인할 수 있다. ruby -v 만약 설치가 되어 있지 않은 경우 Xcode Command Line Tool을 설치하게 되면 Ruby가 설치되게 된다. xcode-select --install 이런 Ruby의 버전 관리를 손쉽게 해주기 위해 있는 도구가 바로 rbenv이다. 다양한 Ruby 버전 관리 전역 및 local Ruby 버전 설정 간편하게 버전 전환 그래서 rbenv가 현재 관리하고 있는 버전 리스트를 보여주는 명령어는 다음과 같다. rbenv versions 여기서 현재 선택된 Ruby의 버전을 확인할 수 있는데 이게 ruby -v 명령어로 확인한 버전과 다른 경우가 있을 수 있다. (요 상황이 왜 발생하는지는 아직 파악을 하지 못했다) 이때 사용할 수 있..

앱 개발을 하다보면 웹뷰로 구현이 되어 있는 부분을 종종 마주하게 된다. 특히 커머스 앱처럼 콘텐츠의 업데이트가 빠르게 되는 경우 앱의 업데이트 없이도 콘텐츠를 변경할 수 있기 때문에 웹뷰는 유용하게 사용된다. 하지만 이전에는 특정 URL을 웹뷰로 띄워보는 정도의 간단한 사용만 해보았고, 회사에서도 이미 커스텀되어 있는 웹뷰 관련 객체를 단순히 이용만 하여 웹뷰에 대한 구체적인 사용방법 등은 알지 못했다. 그러다 이번에 웹뷰 관련 작업을 하면서 웹뷰에 대해 좀 더 공부를 해보게 되었고 이를 정리하게 됐다. 일단 웹뷰를 사용하고 있다면 현재는 WKWebView 혹은 SFSafariViewController를 사용할 것이다. 이전에 사용하던 UIWebView는 iOS 12.0 이후로는 Deprecated 됐..

왜 DiffableDataSource를 알아보게 되었을까? 기존에는 TableView나 CollectionView를 사용할 때 IndexPath를 통해 Cell을 가져오고 이에 해당하는 데이터를 Cell에 주입시켜주는 식으로 사용을 하게 된다. 하지만 이렇게 사용하게 되면 비동기로 동작을 할 때 데이터를 업데이트하는 시점이 꼬이는 문제를 마주하게 된다. 이렇게 되면 강제종료가 발생하게 되고, 이로 인해 사용자 경험이 저하된다는 문제가 있다. 이런 문제는 사용하면서 항상 발생하는 문제가 아니라 간혹 데이터가 CollectionView / TableView가 업데이트되는 도중에 변경이 되면서 데이터의 수와 그려야 할 셀의 수가 차이가 나면서 발생하기 때문에 정확히 어떤 상황에서 발생하는 것인지 디버깅이 쉽지..

이번에 글또(글쓰는 또라이가 세상을 바꾼다) 9기로 활동을 하게 되었다. 글 쓰는 또라이가 세상을 바꾼다 - 글또 페이지 👋 안녕하세요 :) www.notion.so 위 링크에서 보면, 글또의 비전은 다음과 같다. - 글을 작성하는 개발 직군분들이 모여서, 좋은 영향을 주고 서로 같이 자랄 수 있는 커뮤니티 - 개발자들의 성장을 지원하는 커뮤니티 - 각자의 직군에서 얻을 수 있는 내용을 토대로 글쓰기 진행 즉, 개발 직군과 관련된 글을 작성하며 서로 좋은 영향을 주고 받고 이를 통해 성장할 수 있는 커뮤니티인 것이다. 왜 글또를 하게 된 것일까? 1. 다시 꾸준히 개발 관련 글을 작성하기 위함 물론 혼자서 꾸준히 좋은 글을 작성할 수 있다면 더할나위없이 좋을 것이다. 하지만... 무언가를 꾸준하게 지속하..

String 배열에서 초성이 동일한 문자열끼리 묶어서 2차원 배열로 만드는 방식이 필요했다. 이 작업을 하면서 실제로 자료구조 / 알고리즘이 직접적으로 사용이 되는구나 싶었다. 사실 뷰를 그리거나 데이터를 파싱하거나 할 때에는 직접적으로 자료구조 / 알고리즘을 사용할 일은 없었으나, 이번에 필요성을 몸소 느끼게 되었다. 어찌됐든 한글 / 영어 / 숫자로 시작하는 문자열들을 같은 문자(한글의 경우 초성)로 시작하는 문자열로 변경하기 위해선 일단 초성을 가지고 오는 방식이 필요했다. 단순히 영문으로만 되어 있었다면 아래처럼 해도 시작 글자가 동일한지 알 수 있었을 것이다. func getFirstCharacter(word: String) -> String { return word.first?.uppercas..

SwiftUI를 사용하다보면 꼭 보게 되는 것이 존재한다. import SwiftUI struct ContentView: View { var body: some View { Text("Hello World") } } View 프로토콜을 채택하게 되면 반드시 var body를 선언해야 하고 이는 연산 프로퍼티이며 some View 타입이다. 흠... 그런데 View면 View지 여기서 some View를 사용한다. 이유가 뭘까? 일단 some View로 선언한 타입 내에선 다양한 뷰를 나열하게 되면 뷰가 잘 그려진다. import SwiftUI struct ContentView: View { var body: some View { ZStack { Color(.black) Text("Hello World")..

앱에서 예상하지 못했던 비정상 강제 종료되는 상황을 트래킹하기 위해 Firebase의 Crashlytics를 많이 사용하게 된다. 사용자들에게 앱을 사용하다가 갑자기 앱이 종료되게 된다면 앱에 대한 신뢰도가 매우 떨어질 수 있기 때문에 이를 지속적으로 트래킹하고 문제의 원인이 된 부분을 해결해줘야 한다. Crashlytics는 Xcode의 dSYM 파일의 디버깅 정보를 이용해 어떤 코드에서 문제가 생겼는지에 대해 알려주게 된다. 구체적으로 보자면, dSYM 파일에는 앱의 바이너리 코드에서 사용하는 함수 / 변수 이름과 이에 대한 주소 정보가 포함한 Symbol Table이 존재하게 된다. 이를 매핑하여 어떤 함수에서 문제가 발생했는지 식별 가능 소스 코드에서 라인 번호와 바이너리 코드의 주소 간의 매핑 ..