공부/iOS
-
Swift UI와 Gemini API를 활용한 Chat Bot: 채팅 구현 (2/2)공부/iOS 2024. 3. 19. 18:19
지난 포스트에서 이어서 작성하겠습니다. (코드 전문 포함) 목차 말풍선 모양 만들기 질문을 위한 입력 필드 만들기 채팅 말풍선 생성하기 채팅 메세지 리스트 생성하기 코드 전문 말풍선 모양 만들기 사용자(흰색)가 질문을 하면 gemini(노랑)가 답변하는 형태로 대화가 진행됩니다. 이를 위해 1. 우선, 채팅 말풍선 Shape를 만들어줍니다. 좌측하단, 우측하단, 우측상단을 둥글게 만들어 줍니다. struct ChatBubbleShape: Shape { func path(in rect: CGRect) -> Path { let path = UIBezierPath( roundedRect: rect, byRoundingCorners: [.bottomLeft, .topRight, .bottomRight], cor..
-
Swift UI와 Gemini API를 활용한 Chat Bot: 기능 구현 (1/2)공부/iOS 2024. 3. 13. 00:21
목차 Gemini API? Google API KEY 발급하기 Gemini SDK 설치하기 Gemini API의 4가지 기능 기능 구현하기 Gemini API? 제미나이는 구글과 딥마인드가 개발한 멀티모달 생성형 인공지능 모델입니다. 이 포스트에서는 제미니 API의 주요 기능과 스위프트 앱에서 활용하는 방법에 대해 살펴보겠습니다. 우선, 제미나이 API는 두 가지 형태의 개발 환경을 통해 제공됩니다. 구글 AI 제미나이 API(Google AI Gemini API) 버텍스 AI 제미나이 API(Vertex AI Gemini API) 이 중 구글 AI 제미나이 API는 학습 목적이나 소규모 개발에 적합합니다. 이에 반해 버텍스 AI 제미나이 API는 중규모 이상의 시스템에 적합하며 구글 클라우드 서비스인 ..
-
[SwiftUI] 1. TCA를 왜 도입하는걸까? (MVVM의 운명은?)공부/iOS 2024. 2. 27. 19:14
# TCA? TCA(The Composable Architecture)는 Swift UI에서 떠오르고 있는 아키텍처 중 하나입니다. https://github.com/pointfreeco/swift-composable-architecture 위의 깃허브 레포를 확인해보시면 10.9k의 별(2024.02.27 기준)을 보유하고 있습니다. 어째서 Swift UI의 아키텍처 트랜드가 TCA로 변화하고 있는 것일까요? MVVM 패턴과 TCA 패턴에 대해 알아보며 그 이유를 확인해 봅시다. # MVVM MVVM 간단 소개 MVVM을 설명하기 위해 사용자가 검색창에 특정 키워드를 검색하는 상황을 예로 들겠습니다. 1) 사용자가 입력한 키워드를 ViewModel에 전달합니다. 2) ViewModel은 Model로..
-
[iOS] status code가 200일 때 빈 응답이 들어오는 경우공부/iOS 2024. 2. 17. 15:04
배경 Alamofire로 빈 타입으로 파싱을 시도하던 중에 오류가 발생했다. 응답은 status code는 200으로 들어오고 body가 비어있었는데, responseDecodable에서 "Empty"로 파싱을 시도했지만 inputDataNilOrZeroLength 오류가 발생했다. 해결법 해결법은 간단하게도 emptyResponseCodes 파라미터만 추가하면 됩니다. emptyResponseCodes에 성공시킬 응답코드를 담은 배열을 추가해주면 오류가 해결됩니다. func requestVerificationCode(email: String, completion: @escaping (Result) -> Void) { let urlString = "http://localhost:8080/member/se..
-
[iOS]텍스트필드가 등장할 때 타임아웃 뜨는 버그 해결법공부/iOS 2024. 1. 17. 17:35
짜증나는 버그 iOS17 버전으로 개발을 위해 Xcode를 업데이트 한 이후로 갑자기 위의 버그가 등장했다. 간혹가다 락이 걸려 앱 자체가 동작하지 않을 때도 있어 개발에 어려움이 있었다... [UIKeyboardTaskQueue lockWhenReadyForMainThread] timeout waiting for task on queue Error for queryMetaDataSync: 2 [RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:] perform input operation requires a valid sessionID 도대체 정체가 뭘까? 찾아보는데 나 뿐안 아니라 많은 사람들이 이 버그에 고통받고 있었다 ..
-
키체인을 활용해 jwt Token 안전하게 저장하기공부/iOS 2024. 1. 16. 16:27
Keychain(키체인) 간단 소개: 키체인은 iOS에서 사용할 수 있는 secure 저장소입니다. 흔히 사용하게되는 UserDefaults의 경우 plist 파일에 저장되기 때문에 비밀번호, 신용카드 번호 암호화 키 등의 민감한 데이터를 저장해선 안됩니다. 키체인에 접근하기 위해선 디바이스의 비밀번호를 통해 보호되기에 사용자만 키체인에 저장된 데이터에 접근할 수 있습니다. Keychain에 사용되는 데이터 보호 방식: 키체인은 AES-256-GCM 암호화 알고리즘을 사용하여 데이터를 암호화하며, Secure Enclave와 같은 하드웨어 보안 모듈을 활용하여 데이터를 안전하게 저장합니다. 키체인은 파일 시스템에 저장되어 있는 SQLite 데이터베이스로 구현되어 있습니다. identifier나 group..
-
Xcode15에서 XCTest를 할 때 Testing... 에서 멈추는 현상공부/iOS 2024. 1. 2. 18:38
# 소개 🐮 Xcode에서 Unit Test를 수행할 때 너무 오래 걸리거나 멈추는 현상이 있었습니다. 단순히 테스트를 오래하는 것이 아닌, 빌드 자체는 1초 미만이었으나 테스트에 너무 많은 시간이 소요되는 문제입니다. # 해결 과정 ⛴️ 테스트를 한번 하려고 하면 너무 시간이 오래걸려 이상하다 생각했습니다. 코드를 잘못 작성했는줄 알고 이리저리 수정하며 삽질했는데 야곰 아카데미에 관련 예제가 있더군요. https://yagom.net/courses/unit-test-%ec%9e%91%ec%84%b1%ed%95%98%ea%b8%b0/ Unit Test 작성하기 - 야곰닷넷 Unit Test 작성하기 테스트를 작성하면 좋다는 말을 많이 들어보셨을 것 같습니다. 하지만 막상 테스트를 작성해보려고 […] ya..
-
UIKit에서 Delegate Pattern를 쓰는 이유공부/iOS 2023. 12. 21. 14:38
# 시작하기 전... UIKit을 처음 접했을 때 가장 당황했던 것은 호출하지 않고도 실행되는 함수였습니다. 무슨 소리인가? 싶겠지만 정말 func 로 구현은 되어있는데 어디에도 호출은 하지 않았지만 분명 그 코드는 동작하고 있었던 것이죠. 그 미스테리의 정체는 오늘 알아볼 Delegate입니다. # Delegate란? Delegate를 직역하면 위임자란 뜻입니다. (이걸 처음 봤을 때 나의 심정) 도대체 무슨 소리인가 싶고, 설명도 잘 이해가 되지 않죠... 뭔가 위임자라고 하면 뭔가 대신 일을 처리해주는 종속된 관계가 아닐까 생각했다. 하지만 정 반대로 일종의 Delegate를 채택하는 쪽이 팀장님, 요청하는 쪽이 직원에 가깝습니다. Delegate를 생성하는 과정을 비유를 섞어 설명해볼게요. 1. ..