전체 글 (430) 썸네일형 리스트형 🇰🇷 한국에서는 한국어, 그 외 국가에서는 영어로 앱 이름 설정하기iOS 앱 현지화: InfoPlist.strings 활용법 앱을 현지화(Localization)하는 과정에서 종종 다음과 같은 요구사항이 생깁니다.“한국에서는 앱 이름을 한국어로,다른 국가에서는 영어로 표시하고 싶다.” 저 역시 이런 요구사항을 해결하기 위해 iOS의 InfoPlist.strings 현지화 기능을 활용하였습니다.이번 글에서는 그 구현 과정을 간단히 소개드리고자 합니다.🎯 목표 정리지역 또는 국가 앱 이름 표시 언어🇰🇷 한국 (한국어 사용 시)한국어🌍 기타 국가 및 지역영어 1. InfoPlist.strings 파일 생성하기Xcode에서 아래 순서로 파일을 추가합니다.File > New > File > Strings File파일 이름: InfoPlist.strings해당 파일은 앱 이름, 권한 안내 문구 등 Info.plist에 정의된 항목.. 🧩 추가하면 좋은 기능 요약 1. 반복 지출 등록 기능월세, 구독료, 통신비 등은 매월 자동 등록되게알림 연동도 고려 가능2. 영수증 OCR 인식 기능사진 찍거나 앨범에서 불러와서 자동으로 금액, 날짜, 상호 추출 (Vision + CoreML)3. 예산 설정 및 알림카테고리별 예산 설정초과 시 알림 또는 시각적 강조4. 지출 습관 분석 리포트“이달은 커피에 20% 썼어요 ☕”전월 대비 증가/감소 요약 등5. 검색 & 필터 기능날짜별, 카테고리별, 키워드 검색6. 앱 잠금 기능Face ID / Touch ID / 비밀번호 잠금 (개인정보 보호용)7. 다크모드 지원사용자 환경 맞춤8. iCloud 백업 & 동기화기기 간 데이터 연동9. 수입/지출 외의 ‘이체’ 처리예: 카드 계좌 → 현금 이동, 정산 등실제 은행 흐름처럼 계좌 구분 .. 💰 Swift reduce 완전 정복: totalAmount() 메서드로 배우는 누적 합계 계산 앞서 살펴본 filteredTransactions 함수는 특정 타입과 날짜에 해당하는 거래 내역만 골라내는 데 사용되었습니다.이번에는 그 필터링된 거래들을 합산해서 누적 금액을 계산하는 totalAmount() 메서드를 소개하려고 합니다.📦 함수 선언func totalAmount( type: TransactionType, in date: Date, granularity: Calendar.Component = .month) -> Int { let filtered = filteredTransactions(type: type, in: date, granularity: granularity) return filtered.reduce(0) { $0 + $1.amount }}🧭 이 함.. 💡 Swift에서 배열 필터링하기: filteredTransactions 메서드 완전 해부 가계부 앱을 개발하면서 특정 조건에 맞는 거래 내역을 추려야 할 때가 많습니다.예를 들어, 이번 달에 발생한 지출만 보고 싶다거나, 7월 한 달 동안의 수입을 계산하고 싶다는 식이죠.이를 위해 만든 함수가 바로 아래의 filteredTransactions입니다.🧩 함수 선언func filteredTransactions( type: TransactionType? = nil, in date: Date, granularity: Calendar.Component = .month) -> [ExpenseModel] { let calendar = Calendar.current let filtered = transactions.filter { transaction in .. 🧾 iOS MVVM 가계부 앱 - 거래 내역 조회(Read), 수정(Update), 삭제(Delete) 기능 완벽 구현 이전 글에서는 MVVM 구조에서의 TransactionViewModel 전반 구조와 초기화 방식에 대해 정리했습니다.이번 글에서는 그 ViewModel 내부에서 수행되는 데이터 읽기, 수정, 삭제 기능을 소개합니다.✳️ 전체 흐름 요약모든 데이터 처리는 TransactionCoreDataManager를 통해 Core Data와 통신하며, Combine을 통해 비동기 스트림을 처리합니다. 📌 관련 구조:TransactionViewModel → View에서 호출TransactionCoreDataManager → Core Data와 실제 상호작용@Published → UI 바인딩을 위한 데이터 상태 반영📖 Read - 거래 내역 불러오기✅ 모든 거래 내역 불러오기 (readAllTransactions()).. 💸 iOS MVVM 가계부 앱 - ViewModel(TransactionViewModel) 구조 완벽 정리 가계부 앱을 MVVM 구조로 개발하면서 핵심 역할을 하는 TransactionViewModel에 대해 소개합니다.이 글에서는 ViewModel의 역할, 내부 구조, init 설계 이유, 그리고 View와의 데이터 흐름까지 모두 짚어볼게요.🎯 ViewModel이란?MVVM에서 ViewModel은 View와 Model 사이의 중간 매개체로 작동합니다.사용자의 입력을 받아 Model에 반영하고, Model의 데이터를 가공해 View에 제공합니다.💡 이 글에서는 실제 프로젝트에 사용한 TransactionViewModel을 기준으로 설명합니다.📦 전체 구조 살펴보기final class TransactionViewModel { // MARK: - Published Properties @Pu.. 📦 iOS MVVM 가계부 앱 - Core Data 삭제(Delete) + 이미지 제거까지 정리 가계부 앱에서 한 번 입력한 지출/수입 데이터를 삭제하는 기능은 반드시 필요합니다. 특히 사용자가 실수로 입력했거나, 잘못된 이미지를 포함한 경우 Core Data + 이미지 파일까지 함께 삭제하는 구조가 되어야 합니다. 이번 글에서는 deleteTransaction(id:) 함수를 중심으로 Core Data에서의 삭제 처리 흐름과 이미지 정리 방식까지 상세히 정리합니다.🧩 1. 삭제 함수 코드func deleteTransaction(id: UUID) -> AnyPublisher { return Future { [weak self] promise in guard let self = self else { print("❌ deleteTransaction: self가 n.. 📚 iOS MVVM 가계부 앱 - Core Data 수정(Update) + 이미지까지 깔끔히 반영하는 법 가계부 앱을 만들면서 생기는 대표적인 고민 중 하나는 "기존에 등록된 내역을 수정할 때 이미지나 메모를 어떻게 반영하지?" 입니다.이번 글에서는 Core Data에서 기존 내역을 업데이트하고, 선택적으로 이미지까지 덮어쓸 수 있는 구조를 소개합니다.💡 목표 기능사용자가 등록한 기존 내역(지출/수입)을 수정메모, 금액, 카테고리 등 변경 사항 반영기존 이미지가 있을 경우:이미지 삭제이미지 교체기존에 이미지가 없더라도 새로 추가 가능📦 업데이트 함수 코드func updateTransaction(_ updatedTransaction: ExpenseModel) -> AnyPublisher { return Future { [weak self] promise in guard let self =.. 이전 1 2 3 4 ··· 54 다음 목록 더보기