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

🔔 야곰아카데미 토요 스터디에서 진행한 내용입니다. 최근 앱을 사용하다보면 Google / Naver / Kakao / Facebook을 통한 소셜 로그인 기능을 자주 볼 수 있다. 이런 소셜 로그인이 어떻게 구현되는지 간단하게 살펴보고 직접 카카오를 통한 소셜 로그인 기능을 구현해보자. 일단 직접 구현하는 방법을 살펴보기 전에 OAuth가 어떤 기능인지 살펴보자. 🪢 OAuth 📚 정의 사용자(개발자 및 회사)들이 제 3사의 서비스를 사용하기 위해 사용하는 개념으로 위임 / 인가 / 허가 프로토콜이다. 이는 단순한 인증 프로토콜이 아니기 때문에 단순히 `소셜 로그인 = OAuth`라고 보기에는 무리가 있다. 다만 누군가에게 허가 / 위임 / 인가를 하기 위해선 본인을 증명해야 다른 사람에게 본인의 권한..

어제 직접 실기기를 연결해서 테스트를 하려 했으나 아래와 같은 에러가 발생했다. (캡쳐 이미지에서 보이는 화면은 Xcode에서 cmd + shift + 2를 눌러 나온 화면입니다) Unable to prepare iPad for development !! 아니 분명 잘 되던게 왜 안되는거지.... 그래서 혹시 몰라 아이폰으로도 테스트를 해보았다. 그러자 자꾸 아래와 같은 상황이 발생했다. iPhone is busy: Making ~Apple Watch ready for development 아니 왜 하는 것도 없는데 자꾸 바쁘다고 하는거냐고!!! 후... 😱 Apple Watch에 연동이 되어 있어 계속 Apple Watch에게 승인을 받는다고 하여 일단 블루투스를 끄고 시도를 해봤다. 그랬더니 이런 에..

Delegation 패턴은 delgate란 단어에서 볼 수 있듯 특정 Action을 다른 객체가 하도록 위임 하는 것이다. 즉, 특정 Action에 대한 위임을 받은 객체가 대신 일을 처리해주는 것이다. 이는 iOS에서 TableView를 활용하다보면 UITableViewDelegate, UITableViewDataSource라는 프로토콜을 볼 수 있는데, 이 또한 Delegation 패턴을 사용하고 있는 것이다. 애플이 구현해놓은 TableView를 사용할 때 이를 어떻게 구성할 지는 개발자가 정하게 된다. 따라서, TableView가 UITableViewDelegate, UITableViewDataSource라는 프로토콜을 채택한 ViewController에게 테이블 뷰의 Section과 Row는 어..

만약 다른 사람들이 특정 코드를 사용하지 못하도록 하려면 어떻게 처리를 해줘야 할까? 예를 들어 이런 코드가 있다고 생각을 해보자. required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } 해당 코드는 스토리보드에서 ViewController를 생성할 때 호출되는 생성자이다. 만약 따로 생성자를 정의하면서 required init?을 불가피하게 생성을 했다고 가정한다면 required init?은 다른 곳에선 사용을 하지 못하게 해야 한다. required init을 통해 VC를 생성하지 않고 따로 정의한 생성자로 VC를 생성해야 하기 때문이다. 이때는 available attribute를 사용하면 된다. ..

최근 프로젝트를 진행하며 RxSwift, RxCocoa를 사용하게 됐다. 또한 기존 MVC 패턴을 사용해 주로 개발을 진행했지만 MVVM 디자인 패턴을 새롭게 사용해봤다. 물론 아직은 부족한 점이 많지만 그래도 프로젝트를 진행하면서 알게 된 MVVM은 무엇이고 어떻게 적용을 할 수 있는지 정리해보고자 한다. 🔸 그 전에 MVC 패턴부터... 일단 기존에 사용하던 MVC 패턴의 경우 Model, View, Controller로 나뉘게 된다. 애플에서도 CocoaMVC를 기본적으로 사용했다. View : 사용자가 직접 볼 수 있는 객체로, 스스로 어떻게 그려지는지를 알고 있으며, 사용자의 Action에 응답할 수 있다. ViewController : 하나 이상의 View와 하나 이상의 Model을 중재하는 ..

iOS 14 이후부터 위젯 기능을 사용할 수 있게 되었다. (물론... 안드로이드에선 진작 있긴 했지만... ) 위 아이패드 화면에서 흰 색 테두리로 표시해놓은 부분이 위젯이다. 이를 통해 사용자에게 앱에서 중요한 내용을 홈 화면에서 상시 노출을 할 수 있는 것이다. 일단 위젯도 AppExtension의 한 종류인 만큼 App Extension에 대해 먼저 알아보자. 🛠 App Extension 🔸 App Extension 추가해보기 이를 통해 홈 화면에 위젯으로 앱을 표시하거나, 액션 시트에 새 버튼을 추가하거나, 사진 앱 내 사진 필터 제공 등의 작업을 수행할 수 있다. 이런 App Extension은 Xcode의 File > New > Target을 누르면 추가를 해줄 수 있다. 이렇게 해주면 이렇..

연락처 앱이나 메모 앱을 켜보면 스와이프 기능이 있는 경우가 있다. 스와이프를 통해 해당 셀을 삭제하거나 공유할 수 있도록 하는 것이다. 이는 굳이 버튼을 누르지 않더라도 직관적으로 스와이프 동작을 통해 원하는 액션을 동작할 수 있도록 할 수 있다. 그렇다면 이런 스와이프 기능을 구현하려면 어떻게 해야할까? 🛠 관련 메서드 이는 UITableViewDelegate에 관련된 메서드를 사용하면 된다. func tableView(_ tableView:leadingSwipeActionsConfigurationForRowAt:) -> UISwipeActionsConfiguration? func tableView(_ tableView:trailingSwipeActionsConfigurationForRowAt:) -..

만약 이런 식으로 TextField나 TextView에 테두리 대신 그림자를 주고 싶다면 어떻게 해야 할까? UIView의 layer에는 다음과 같은 속성들이 있다. shadowColor : 그림자의 색을 정해줄 수 있다. (CGColor) shadowOffset : 그림자가 어디로 얼마나 퍼져있을지를 정해줄 수 있다. 기본값은 (width: 0.0, height: -3.0)이다 (CGSize) shadowOpacity : 그림자의 투명도를 정해줄 수 있다. 0.0에서 1.0의 범위에서 정해줄 수 있으며 기본 값은 0.0이다. shadowRadius : 그림자가 얼마나 둥근지(곡률) 정해줄 수 있다. 하지만 여기서 TextField와 TextView의 차이가 존재한다. 기존에는 layer.masksToB..