본문 바로가기

전체 글

(37)
Share Extension 개요https://medium.com/@henribredtprivat/create-an-ios-share-extension-with-custom-ui-in-swift-and-swiftui-2023-6cf069dc1209이 글은 Share Extension을 통해 외부에서 앱으로 데이터를 공유하는 방법에 대해 알아본다몇 가지 과정들을 나눠서 진행되는데, 위의 블로그를 참고했다과정Share Extension 추가Activation Rule 설정ShareViewController에서 extensionContext를 통해 데이터 처리UIHostingController을 통해 SwiftUI View 사용공유 데이터 설정 후, 앱과 데이터 공유 Share Extension 추가Share Extension을 프로젝트..
EnvironmentValues 개요이 글은 SwiftUI의 EnvironmentValues를 중심으로 다룬다 프로젝트를 리팩토링하며 SwiftUI의 기능을 적극 활용하고자 고민하던 중, Reusable View 영상을 통해 재사용 가능한 뷰 설계를 하는 법에 대해 배울 수 있었다해당 영상에서는 SwiftUI에서 뷰에 대해 리팩토링하는 여러가지 기법들을 설명하는데, 유독 EnvironmentValues가 눈에 들어왔다왜냐하면 굳이 왜 사용하는지 잘 이해가 안갔었기 때문이다 그렇기 때문에 좀 더 사용의 필요성을 확 느낄 수 있는 예시들이 글의 대부분을 차지한다그 글에서는 예시를 크게 두 가지로 분류했는데, 하나는 단순 값으로 이용이고, 나머지 하나는 상태를 통한 이용이다 전체적인 글은 다음 순서로 진행된다:Environment와 Envi..
TodoMate 회고록 - 클린 아키텍쳐 적용하기 개요전에 클린 아키텍쳐에 대해 공부하고 나름 이해하고 앞으로 프로젝트를 만들 때, 잘 적용할 수 있다는 자신감이 있었는데, 실제로 프로젝트를 진행하면서 테스트 코드를 작성하는데 어려움을 느꼈다 아마도 이는 프로젝트가 진행되면서 클린하지 못하게 확장되고 있었기 때문이지 않을까?.. 이 글에선 내가 어떤 부분에서 잘못 코드를 작성하고 있었는가에 대해 원인을 생각해 본다우선 이에 앞서 클린 아키텍쳐에 대해 간략하게 정리하고, 현재 프로젝트를 어떤식으로 개선해 나갈지를 마무리로 정리한다  클린 아키텍쳐문제점 분석과 개선 방향 클린 아키텍쳐밥 아저씨의 블로그를 가보면 아래와 같이 클린 아키텍쳐 이미지를 볼 수 있다각 구성요소들에 대해선 다음 글에 자세히 정리했다   각 레이어는 기능적 역할과 책임에 따라 논리적으..
주간 오류 해결 모음집(25.02.10-15) 개요이 글은 한 주 동안 프로젝트 코드를 작성하면서 발생했던 문제들을 기록하는 글이다 에러 로그 분석앱 버전 동적 기록 방법컴파일 에러(Multiple commands produce...)TabView ScrollView 버그  에러 로그 분석Console.app코드를 작성하고 빌드 후, 실행해 보니 Console.app을 통해 로그를 확인하라고 한다Console.app은 macOS에 내장된 로그 뷰어 애플리케이션으로, 시스템 로그와 앱 로그를 실시간으로 모니터링하고 분석할 수 있는 도구다아래의 이미지처럼, 로그 캡쳐 시작 및 정지/중지가 가능하며 이때 특정 키워드 관련 로그만 필터링도 가능하다이렇게 실행해보니 'Failed to get FirebaseApp instance...'라는 로그를 확인할 수 ..
On-Device AI with CoreML(feat. DeepSeek-R1) 개요 최근 유행하는 Deepseek-R1 모델(Distill)을 iPad에서 온디바이스로 실행시켜 보기 위해 관련 내용들을 공부하게 되었다 iOS 기기에서 PyTorch 기반의 모델을 실행하려면 CoreML이 지원하는 형식으로 변환해야 한다이때 coremltools를 활용하여 모델을 변환시킬 수 있고, 변환된 모델의 최적화를 위해 경량화 기법을 적용할 수도 있다 이렇게 변환시킨 모델은 CoreML을 사용하여 iOS에서 온디바이스로 추론을 수행시킬 수 있다 이 글은 위의 사진처럼 학습시킨 모델을 coremltools로 변환시키고, CoreML에서 이용하는 과정에서 알아야 할 것들을 중점적으로 정리했다  배경지식CoreMLcoremltools 배경지식모델 경량화Quantization: 모델 가중치를 더 적은..
인증서와 프로파일 개요일반적으로 프로젝트에서 Automatically manage signing(자동 서명 관리)을 이용한다면, 서명 및 프로파일에 큰 신경을 안 써도 된다 하지만 Github action 같은 CI/CD 파이프라인을 직접 작성하는 경우, 작업이 돌아가는 머신에서 프로젝트를 빌드하다 보면 자동 서명 관리는 올바르게 동작하지 않는 경우가 있었다 자동 서명 관리를 안하고 직접 관리하는 방식으로 스크립트를 작성하다 보니, 서명 및 프로파일에 대해 좀 더 자세히 알아야겠단 생각을 하게 되었고, 이 글을 통해 이를 정리하고자 한다 해당 내용들에 대해 정리 이후, 서명은 Keychain에 등록하고, 프로파일은 Xcode가 기본적으로 참고하는 위치에 추가하는 스크립트를 마지막으로 글을 마무리한다 CSR(Certific..
Swift Concurrency 개요Swift Concurrency는 Apple이 Swift 5.5에서 도입한 현대적인 동시성 모델로, 동시성 코드를 작성하는 데 있어 더욱 간결하고 안전하며 가독성을 높이는 방식을 제공한다이를 통해 개발자는 복잡한 비동기 작업을 보다 쉽게 관리하고, 동시성 문제(예: 데이터 경쟁 및 데드락)를 줄일 수 있다 이전까지는 GCD(Grand Central Dispatch)를 이용하여 애플 플랫폼에서 동시성 프로그래밍을 진행했으나 여러 단점들이 있었는데, Swift Conccurency를 통해 이러한 문제들을 해결하였다 이 글에서는 우선 GCD 방식에 대해 간략하게 알아보고, Swift Concurrecny로 동시성 프로그래밍 코드를 작성하는 방법에 대해 정리한다 GCD(이전 방식)Swift Concurrec..
Codable Protocol 개요Codable 프로토콜은 Swift에서 데이터 타입을 JSON이나 다른 외부 표현으로 인코딩하거나 디코딩할 수 있도록 도와주는 프로토콜이다 이 글에서는 Codable 프로토콜의 기본 개념을 간단하게 알아보고 직렬화(Serialization)와 역직렬화(Deserialization)의 개념을 살펴본다그리고 JSON 역직렬화 과정에서 프로퍼티 값이 다른 경우, CodingKeys를 통해 커스텀한 디코딩 과정을 구현하는 방법에 대해 정리한다 Codable 프로토콜데이터 변환의 기본 개념(직렬화/역직렬화)CodingKeys와 중첩 키 처리 Codable 프로토콜Codable는 Swift에서 데이터를 직렬화와 역직렬화할 수 있도록 제공되는 프로토콜이다이는 아래에서 볼 수 있듯이, Encodable과 Decod..