728x90 SMALL Project126 앱스토어 출시 전, 버전(Version)과 빌드(Build) 올바르게 설정하는 방법 안녕하세요! 앱 개발자 여러분, 앱스토어에 앱을 출시하기 전 꼭 거쳐야 하는 중요한 단계가 있습니다. 바로 버전(Version)과 빌드(Build) 번호 설정입니다. 특히 앱에 큰 변화가 있을 때 이 두 가지를 어떻게 관리해야 할지 헷갈리셨다면, 오늘 포스팅이 도움이 될 거예요. 이번 글에서는 앱의 대규모 업데이트를 앞두고 버전 번호를 1.1.1에서 2.0.0으로 올릴 때의 올바른 규칙에 대해 알아보겠습니다.🤔 버전(Version)과 빌드(Build)는 무엇일까요?App Store Connect에서 앱을 등록하고 관리할 때, 우리는 두 가지 번호를 사용합니다.Version (버전): 1.1.1, 2.0.0사용자에게 표시되는 앱의 공식적인 버전 번호입니다.앱에 큰 변화가 있을 때 (예: 새로운 기능 추가.. 2025. 8. 23. 📝 Swift 계산기 앱: 숫자 자릿수 제한과 현지화 적용하기 오늘은 계산기 기능을 구현하면서 자주 맞닥뜨리는 문제 중 하나인 '숫자 입력 자릿수 제한'을 어떻게 깔끔하게 구현하는지에 대해 알아보겠습니다. 무한정 숫자를 입력하면 UI가 깨지거나 예상치 못한 버그가 발생할 수 있기 때문에, 이 기능은 사용자 경험을 위해서라도 꼭 필요하죠. 본 가이드에서는 최대 9자리까지 숫자를 입력하도록 제한하고, 10번째 숫자를 누르면 사용자에게 알림창을 띄워주는 방법을 코드를 통해 자세히 설명해 드릴게요.문제의 핵심: 어디서 로직을 처리해야 할까?많은 분들이 기존에 구현된 ViewModel의 유효성 검사 메서드에 이 로직을 추가해야 할지 고민하곤 합니다. 하지만 이 기능은 AddAmountViewController 내에서 직접 처리하는 것이 가장 효율적입니다. 이유는 다음과 같습.. 2025. 8. 13. 📱 iOS 언어 현지화(Localization) 기본 구현 방법 iOS 앱을 개발하다 보면, 사용자 기기의 언어 설정에 따라 텍스트를 자동으로 변경해야 할 때가 있습니다.예를 들어, 한국어 환경에서는 "오늘", 그 외 언어 환경에서는 "Today"로 보이도록 하고 싶다면 현지화(Localization) 기능을 사용하면 됩니다.1️⃣ Localizable.strings 파일 생성Xcode → File → New → File…Strings File 선택 → 파일 이름을 Localizable.strings 로 입력저장 후, File Inspector에서 Localize… 버튼 클릭지원할 언어(예: English, Korean) 추가2️⃣ 언어별 파일 내용 작성⚠️ 문자열 키("today")는 동일해야 하고, 값만 언어별로 다르게 작성합니다.3️⃣ 코드에서 사용하기let t.. 2025. 8. 11. 🇰🇷 한국에서는 한국어, 그 외 국가에서는 영어로 앱 이름 설정하기iOS 앱 현지화: InfoPlist.strings 활용법 앱을 현지화(Localization)하는 과정에서 종종 다음과 같은 요구사항이 생깁니다.“한국에서는 앱 이름을 한국어로,다른 국가에서는 영어로 표시하고 싶다.” 저 역시 이런 요구사항을 해결하기 위해 iOS의 InfoPlist.strings 현지화 기능을 활용하였습니다.이번 글에서는 그 구현 과정을 간단히 소개드리고자 합니다.🎯 목표 정리지역 또는 국가 앱 이름 표시 언어🇰🇷 한국 (한국어 사용 시)한국어🌍 기타 국가 및 지역영어 1. InfoPlist.strings 파일 생성하기Xcode에서 아래 순서로 파일을 추가합니다.File > New > File > Strings File파일 이름: InfoPlist.strings해당 파일은 앱 이름, 권한 안내 문구 등 Info.plist에 정의된 항목.. 2025. 8. 7. 🧩 추가하면 좋은 기능 요약 1. 반복 지출 등록 기능월세, 구독료, 통신비 등은 매월 자동 등록되게알림 연동도 고려 가능2. 영수증 OCR 인식 기능사진 찍거나 앨범에서 불러와서 자동으로 금액, 날짜, 상호 추출 (Vision + CoreML)3. 예산 설정 및 알림카테고리별 예산 설정초과 시 알림 또는 시각적 강조4. 지출 습관 분석 리포트“이달은 커피에 20% 썼어요 ☕”전월 대비 증가/감소 요약 등5. 검색 & 필터 기능날짜별, 카테고리별, 키워드 검색6. 앱 잠금 기능Face ID / Touch ID / 비밀번호 잠금 (개인정보 보호용)7. 다크모드 지원사용자 환경 맞춤8. iCloud 백업 & 동기화기기 간 데이터 연동9. 수입/지출 외의 ‘이체’ 처리예: 카드 계좌 → 현금 이동, 정산 등실제 은행 흐름처럼 계좌 구분 .. 2025. 8. 4. 💰 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 }}🧭 이 함.. 2025. 8. 3. 💡 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 .. 2025. 8. 3. 🧾 iOS MVVM 가계부 앱 - 거래 내역 조회(Read), 수정(Update), 삭제(Delete) 기능 완벽 구현 이전 글에서는 MVVM 구조에서의 TransactionViewModel 전반 구조와 초기화 방식에 대해 정리했습니다.이번 글에서는 그 ViewModel 내부에서 수행되는 데이터 읽기, 수정, 삭제 기능을 소개합니다.✳️ 전체 흐름 요약모든 데이터 처리는 TransactionCoreDataManager를 통해 Core Data와 통신하며, Combine을 통해 비동기 스트림을 처리합니다. 📌 관련 구조:TransactionViewModel → View에서 호출TransactionCoreDataManager → Core Data와 실제 상호작용@Published → UI 바인딩을 위한 데이터 상태 반영📖 Read - 거래 내역 불러오기✅ 모든 거래 내역 불러오기 (readAllTransactions()).. 2025. 8. 3. 💸 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.. 2025. 8. 3. 📦 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.. 2025. 8. 2. 📚 iOS MVVM 가계부 앱 - Core Data 수정(Update) + 이미지까지 깔끔히 반영하는 법 가계부 앱을 만들면서 생기는 대표적인 고민 중 하나는 "기존에 등록된 내역을 수정할 때 이미지나 메모를 어떻게 반영하지?" 입니다.이번 글에서는 Core Data에서 기존 내역을 업데이트하고, 선택적으로 이미지까지 덮어쓸 수 있는 구조를 소개합니다.💡 목표 기능사용자가 등록한 기존 내역(지출/수입)을 수정메모, 금액, 카테고리 등 변경 사항 반영기존 이미지가 있을 경우:이미지 삭제이미지 교체기존에 이미지가 없더라도 새로 추가 가능📦 업데이트 함수 코드func updateTransaction(_ updatedTransaction: ExpenseModel) -> AnyPublisher { return Future { [weak self] promise in guard let self =.. 2025. 8. 2. 📚Core Data로 지출 내역 불러오기(Read) 정리 ✨ 목표이번 글에서는 가계부 앱에서 Core Data로 저장된 지출 내역을 전체 조회하거나 특정 ID로 조회하는 방법과, Core Data Entity(ExpenseEntity)를 우리가 ViewModel/화면에서 사용하기 위한 데이터 모델(ExpenseModel)로 변환하는 방법을 함께 정리합니다.✅ 전체 흐름 요약역할함수 이름설명CoreData → Model 변환toModel()Entity 데이터를 앱에서 사용할 수 있는 형태로 변환전체 데이터 읽기readAllTransaction()모든 지출 내역을 최신순으로 읽기특정 데이터 읽기readTransactionByID(by:)특정 ID 기반으로 하나의 내역 읽기 1️⃣ ExpenseEntity → ExpenseModel 변환: toModel()exten.. 2025. 8. 2. 💾 Core Data와 FileManager로 지출 내역 저장하기 Core Data + FileManager + Combine 조합으로 데이터와 이미지까지 한 번에 저장하기✨ 목표지출 내역을 저장할 때,기본 정보(날짜, 금액, 메모 등)는 Core Data에선택 이미지가 있다면 FileManager에 저장하고 → 저장된 이미지 경로를 Core Data에 함께 저장해 관리하는 방식.✅ 핵심 클래스: TransactionCoreDataManagerfinal class TransactionCoreDataManager { // MARK: - Variable static let shared = TransactionCoreDataManager() private let context = (UIApplication.shared.delegate as! AppDe.. 2025. 8. 1. 📦 Swift에서 FileManager로 이미지 저장하기 – 이미지 저장, 경로 관리, 불러오기까지의 전체 흐름 정리 Swift의 FileManager를 사용해 이미지를 저장하고, 저장된 경로를 활용해 불러오거나 삭제하는 기능을 구현할 수 있습니다. 이번 글에서는 단순히 코드만 보여주는 것이 아니라 이미지를 저장하고 관리하는 전체 과정을 어떤 흐름으로 설계하고 구현해나가는지에 대해 설명합니다. ✅ 최종 목표사용자가 입력한 지출 내역에 이미지가 있을 경우, 해당 이미지를 FileManager로 저장하고 저장 경로를 String으로 저장저장된 경로를 이용하여 이미지 불러오기수정 또는 삭제 시 해당 폴더의 이미지 제거🧱 전체 구조 설계: 어떤 흐름으로 진행할까?💡 목표: 이미지를 저장하고, 그에 대한 경로를 기억하기1. 이미지를 저장할 디렉토리 위치 지정 (예: Documents 폴더)2. 거래(transaction) 단.. 2025. 7. 31. 📱 iOS 가계부 앱 데이터 모델 설계하기 enum + class를 활용한 깔끔하고 확장성 높은 데이터 구조 설계💡 어떤 앱인가요?제가 만들고 있는 이 앱은 지출이나 수입을 이미지(카메라/앨범)와 함께 기록할 수 있는 iOS 가계부 앱입니다.예를 들어:영수증을 찍어서 저장하거나감성적인 쇼핑 사진을 남기거나어떤 항목에 얼마를 썼는지를 사진과 함께 기록하는 목적이에요.그래서 금액, 카테고리, 메모 외에도 사진(image) 필드가 꼭 필요했고, 수입/지출을 명확하게 분리하면서도 관리하기 쉽도록 데이터 모델을 설계했습니다.🧱 데이터 구조 설계1. enum TransactionType: 수입 / 지출 타입수입(income)과 지출(expense)을 구분각각에 따른 카테고리 목록과 아이콘 맵핑 제공2. class ExpenseModel: 실제 기록되는 .. 2025. 7. 30. 이전 1 2 3 4 ··· 9 다음 728x90 LIST