project 54

[SwiftUI] List accessory (feat. disclosure indicator)

List accessory (feat. disclosure indicator) ✅ 이번에도 제목이 다소 UIKit스럽다. 저번 포스팅에서도 언급했지만, UIKit을 먼저 공부하고 SwiftUI를 하다보니까, 검색도 UIKit스럽게 하기 때문에! StackOverflow에서는 ZStack을 이용해서 해결하던데, 맘에 들지 않았다. 그래서 처음 생각! init() { UITableViewCell ... } 이렇게 해서 해결해 보려고 했는데, 근데 적용할 만한 메소드가 보이지가 않았다. 결국 StackOverflow처럼 해결해야 했는데 한번 같이 알아보자! ✅ 올바른 case import SwiftUI struct didSelectRow: View { var body: some View { Navigation..

[SwiftUI] List Row 선택하기(TableView didSelectRow)

List Row 선택하기(TableView didSelectRow) ✅ 오랜만이다! 제목이 참 UIKit스러움 제목을 이렇게 작성하게 된 이유로는 내가 1년 정도 UIKit을 사용하면서 이미 사고가 여기에 익숙해진 상태인데, SwiftUI로 List의 Row(UIKit에서 cell)을 선택하는 로직을 작성하는게 잘 아직까지는 어려운 느낌.그래서 내가 구글에 저 키워드로 검색했는데, 딱히 맘에 드는게 안나타나서 직접 정리하려고 포스팅 함. 생각보다 간단한데, 이게 참 어려웠음.우선 UIKit을 사용하다보니 tableView에서는 UITableViewDelegate를 상속받아서 didSelectRow를 구현하면 되었다.그러니까 이와 비슷하게 List의 Row에 onTapGesture를 사용하면 될거라고 생각..

[iOS] Thread 1: "Attempt to insert non-property list object () for key ~

Thread 1: "Attempt to insert non-property list object () for key ~ ✅ 이슈 리포트 오랜만이다. UserDefault를 사용하여 값을 저장할 때 발생하였다. UserDefault의 경우에는 기본적인 타입만 저장 가능한데, 나의 경우에는 struct를 통해서 내가 정의한 타입을 저장하면서 이 문제가 발생했다. 이를 해결하는 방법으로는! UserDefault를 사용할때 encode 및 decode를 이용하여 수행하면 된다! 그렇게 하면 bit로 저장되어서 문제 없이 저장되고 나중에 이것을 꺼내와서 decode하면 원하는 값을 얻을 수 있따.

[iOS] tableViewCell Swipe Action 구현하기

tableViewCell Swipe Action 구현하기 ✅ 이번 시간에는 tableViewCell Swipe Action을 구현해보자 직접 애플 문서를 읽어보는 것을 추천하지만, 이 포스팅에서는 정말 간략하게 어떻게 사용하는 지만 알아보자. 이번 포스팅에서는 1. tableView에서 leading과 trailing swipe를 지원해주는 메소드를 사용하여 구현하는 것 2. editStyle을 메소드를 활용하여 구현하는 것 을 볼 예정이다. ✅ 1. tableView에서 leading과 trailing swipe를 지원해주는 메소드를 사용하여 구현하는 것 func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt i..

[iOS] Indicator customizing (feat. Lottie)

Indicator customizing ✅ 기본 Indicator를 변경해보자. 우선 UIRefreshControl에서도 사용되고, ActivityIndicator에서도 사용된다. 나는 더 예쁜 UI구성을 위해 Lottie를 활용했다. ✅ 위와 같이 코드를 작성하면 된다. let loadingView: AnimationView = .init(name: StringSet.Lottie.loading) let indicatorView: AnimationView = .init(name: StringSet.Lottie.loading) let refreshControl = UIRefreshControl() private func setupAnimationViews() { // main loading view.add..

[iOS] Haptic Feedback에 대해서 알아보자🐣

Haptic Feedback에 대해서 알아보자 이 글을 벌써 두번째 쓰고 있다 ㅎㅎ 다 썼는데 뒤로가기 스와이프해서 글 다 날아가ㅁ ✅ 개요    ✅ Essentials 안에 더 내용이 있는데 쭉 읽어보면 쉽게 이해할 수 있다.장치 상태 확인하라던가, 햅틱 엔진은 싱글톤이 아니라던가 등등  ✅ 코드class HapticManager { static let shared = HapticManager() private var generator: UIImpactFeedbackGenerator? func setupGenerator() { generator = UIImpactFeedbackGenerator() generator?.prepare() } ..

[iOS] 프로그래머스 FLO 과제

[iOS] 프로그래머스 FLO 과제✅  과제 기간 - 2022-02-25 14:55~ 2022-03-03 14:54(7일) ✅ 개발 환경 - 언어 Swift 5 - iOS Deployment Target: 10.0 ✅ 써드파티 - RxSwift 6.5 - SnapKit - Then - Alamofire 5.5.0 - Kingfisher 5.0.0 - RxGesture 4.0.0 ✅ 내장 프레임워크 - AVFoundation ✅ 기능 요구 사항   이분탐색 알고리즘 사용해서 가사 찾는거 최적화하기.     ✅ 과제코드 위치https://github.com/lgvv/FLO ✅ Demo 영상" data-ke-type="html">HTML 삽입미리보기할 수 없는 소스

project 2022.03.06

[iOS] inAppReview(StoreKit)✨

inAppReview(StoreKit)✨ ✅ StoreKit을 활용해보기 애플 공식문서 https://developer.apple.com/documentation/storekit Apple Developer Documentation developer.apple.com ✅ StoreKit 인 앱 구매나 애플 뮤직 등 다른 것들도 지원하지만, 내가 사용할 것은 리뷰 작성하는 부분이다! 🟠 코드 import UIKit import StoreKit class AppStoreReviewManager { /// action count 값이 3일 때 `true` 입니다. static var isReviewable: Bool { UserDefaultManager.inAppReviewCount == 3 } static ..

iOS RxDelegateProxy 만들어보기 #2 (StarScream + RxProxy)

iOS RxDelegateProxy 만들어보기 #2iOS 인턴을 수행하고 있는데, RxStarscream이 관리가 안되어서 Starscream 기반으로 RxStarscream을 사내에서 직접 만들어서 사용하기로 함.문제 RxStarscream의 RxSwift 버전이 4점대에 멈춰있고, 현재는 6점대로 수정한 PR도 받아주지 않는 상황이라서 오픈소스를 사용할 때는 이런 점들도 잘 고려해야겠다 싶음!  연관포스팅[iOS RxStarScream 총정리](https://rldd.tistory.com/271)[iOS Starscream 총정리](https://rldd.tistory.com/272)[iOS RxDelegateProxy 만들어보기 #1](https://rldd.tistory.com/273)[iOS ..

[iOS] Xcode Storyboard(스토리보드) 없이 코드로 대체하는 방법

스토리보드 없이 코드로 대체하는 방법 (init) 2022.01.07: iOS 13.0 이상만 적용 가능한코드 (update) 2022.02.25: iOS 13.0 미만 버전에서도 사용 가능하게끔 추가 - 13.0을 기준으로 SceneDelegate가 생김. (update) 2022.11.03: Xcode 14 대응 ✅ 이번 시간에는 스토리보드 없이 코드로 대체하는 방법에 대해서 알아볼 예정이야. ⚙️ Xcode 13.0 기준 👉 Target iOS 13.0 이상 👉 Target iOS 13.0 미만 ✅ iOS 13.0이상 1. 처음 단계로는 프로젝트 파일에서 Main.storyboard 파일을 없애 줍니다. 2. Info.plist파일로가서 storyboard Name을 지워줍니다. 3. 프로젝트 타..