ios 61

[iOS] Core Data를 활용한 Data Migration

Core Data에서는 경량 마이그레이션(Lightweight Migration)과 무거운 마이그레이션(Heavyweight Migration)을 지원하며, 복잡한 마이그레이션을 위해 매핑 모델(Mapping Model)을 활용할 수도 있습니다.1. Core Data 마이그레이션 개요데이터 모델이 변경되면 기존 데이터를 새로운 데이터 모델에 맞게 변환해야 합니다. Core Data는 이를 자동으로 처리할 수 있도록 다양한 마이그레이션 전략을 제공합니다.마이그레이션이 필요한 상황엔터티(Entity) 이름 변경속성(Attribute) 추가/삭제관계(Relationship) 변경데이터 변환이 필요한 경우2. 경량 마이그레이션 (Lightweight Migration)경량 마이그레이션은 Core Data가 자동..

클라이언트 2025.02.18

[iOS] 바이너리 프레임워크(Binary Framework) 생성 및 사용 방법

1. 바이너리 프레임워크란?바이너리 프레임워크(Binary Framework)는 컴파일된 코드와 리소스를 포함하는 프레임워크로, 라이브러리 형태로 제공되어 소스 코드 없이도 사용할 수 있다. 이는 일반적으로 라이브러리의 보안을 강화하고 빌드 시간을 줄이며, 코드 배포를 간편하게 만드는 데 유용하다.2. 바이너리 프레임워크 vs. 소스 코드 프레임워크비교 항목바이너리 프레임워크소스 코드 프레임워크배포 방식컴파일된 바이너리 형태로 배포소스 코드 형태로 배포코드 보호소스 코드가 포함되지 않아 보호됨코드가 포함되어 있음빌드 속도빠름 (컴파일 과정 생략)느림 (빌드 필요)유지보수버전 관리가 필요함코드 변경이 유연함의존성 관리XCFramework 또는 CocoaPods 등을 활용직접 코드 수정 가능3. 바이너리 프..

클라이언트 2025.02.18

[SwiftUI] SwiftUI에서 Kingfisher로 비동기 이미지 불러오기

SwiftUI에서 네트워크 이미지를 로드할 때 기본적으로 제공되는 AsyncImage를 사용할 수도 있지만, 더 강력한 기능을 원한다면 Kingfisher 라이브러리를 사용하는 것이 좋습니다. Kingfisher는 캐싱, 플레이스홀더, 에러 처리 등 다양한 기능을 제공하여 더욱 효율적으로 이미지를 로드할 수 있도록 돕습니다.이번 글에서는 Kingfisher를 활용하여 SwiftUI에서 비동기적으로 이미지를 불러오는 방법을 예제 코드와 함께 살펴보겠습니다.1. Kingfisher 설치하기Kingfisher는 Swift Package Manager(SPM)를 통해 손쉽게 설치할 수 있습니다.Swift Package Manager(SPM) 설치 방법Xcode에서 프로젝트를 엽니다.File > Add Packa..

클라이언트 2025.02.18

[iOS] 언제까지 SnapKit? SwiftLayout은 어때?

1. SwiftLayout이란?SwiftLayout은 Auto Layout의 복잡성을 줄이고, 선언형(Declarative) 방식으로 뷰를 구성할 수 있도록 도와줍니다. SwiftUI의 레이아웃 작성 방식과 유사하게 UIKit에서 사용할 수 있도록 설계된 것이 특징입니다.이 글에서는 SwiftLayout을 활용하여 어떻게 간결하고 효율적인 UI 레이아웃을 구성할 수 있는지 예제 코드와 함께 살펴보겠습니다.2. SwiftLayout의 특징선언형(Declarative) 문법: SwiftUI처럼 직관적으로 UI를 구성할 수 있습니다.간결한 코드: 기존 Auto Layout 코드보다 훨씬 짧고 가독성이 좋습니다.동적 레이아웃 변경 용이: 특정 조건에 따라 레이아웃을 쉽게 변경할 수 있습니다.UIKit과의 완벽한..

클라이언트 2025.02.17

[iOS] SnapKit을 활용한 iOS UI 레이아웃 잡기

iOS 앱을 개발할 때 UI를 배치하는 방법은 여러 가지가 있지만, 최근에는 Auto Layout을 코드로 작성하는 것이 일반적입니다. 하지만 Apple의 기본 API인 NSLayoutConstraint를 사용하면 코드가 길어지고 가독성이 떨어지는 문제가 있습니다. 이를 해결하기 위해 SnapKit이라는 라이브러리를 활용하면 훨씬 간결하고 직관적인 코드로 UI를 구성할 수 있습니다.이번 글에서는 SnapKit을 사용하여 iOS UI를 어떻게 쉽게 배치하는지 설명하고, 여러 가지 예제 코드를 제공하겠습니다.1. SnapKit이란?SnapKit은 Swift 기반의 Auto Layout DSL (Domain Specific Language) 로, 코드로 UI 레이아웃을 설정할 때 더 간결하고 읽기 쉽게 만들어..

클라이언트 2025.02.17

[iOS] 간단한 앱 만들기와 리버스 엔지니어링

이번 포스트에서는 SwiftUI를 이용해 간단한 계산기 앱을 만들고, 이를 리버스 엔지니어링하여 소스 코드를 추출하는 과정을 다뤄보겠습니다. 초보자도 따라 할 수 있도록 최대한 자세하게 설명하겠습니다.SwiftUI로 계산기 앱 개발하기프로젝트 생성Xcode 열기Xcode를 실행하고, "Create a new Xcode project"를 선택합니다.프로젝트 설정"App"을 선택하고, 프로젝트 이름을 SimpleCalculator로 설정합니다.Language는 Swift, Interface는 SwiftUI로 설정합니다.UI 및 코드 작성import SwiftUIstruct ContentView: View { @State private var currentNumber = "" @State priva..

카테고리 없음 2025.02.17

[iOS] Jailbreak (탈옥) 상태에서 Keychain 데이터 가져오기

iOS의 Keychain Services는 애플리케이션이 비밀번호, 암호화 키, 인증 토큰 등을 안전하게 저장할 수 있도록 제공하는 보안 저장소입니다. 키체인 데이터는 앱의 샌드박스(Sandbox) 내에서만 접근 가능하며, 일반적으로 다른 앱에서 접근할 수 없도록 보호됩니다.키체인 항목은 다음과 같은 주요 API를 통해 저장 및 조회됩니다.SecItemAdd → 새로운 항목을 추가SecItemUpdate → 기존 항목을 업데이트SecItemCopyMatching → 특정 항목을 조회SecItemDelete → 항목 삭제이러한 보안 구조 때문에 일반적인 방법으로는 키체인 데이터를 쉽게 추출할 수 없지만, 탈옥 환경이나 동적 분석 도구를 사용하면 특정 조건에서 데이터를 확인할 수 있습니다. iOS 키체인 정..

클라이언트 2025.02.16

[UIKit] UIColor Hex 초기화, 문자열 초기화 유틸 Extension 코드

Swift에서 UIColor를 초기화할 때, 다양한 16진수 형식의 문자열(0x~~, #~~~, FFFFFF)을 지원하는 유틸리티 확장을 구현해보겠습니다. 또한, 이를 검증하기 위한 테스트 코드도 작성합니다.import UIKitextension UIColor { convenience init?(hex: String) { var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines) hexSanitized = hexSanitized.replacingOccurrences(of: "0x", with: "").replacingOccurrences(of: "#", with: "") var rgb: UInt..

클라이언트 2025.02.16

[GameKit] 간단한 가위바위보 멀티게임 만들기

GameKit과 SwiftUI를 활용하여 간단한 가위바위보 멀티플레이 게임을 만들어 보겠습니다. 이 튜토리얼은 단계별로 진행되며, 처음부터 끝까지 따라할 수 있도록 상세하게 설명합니다. 1. 프로젝트 설정하기Xcode 프로젝트 생성Xcode를 실행하고 "Create a new Xcode project"를 선택합니다.App을 선택하고 "Next"를 클릭합니다.프로젝트 이름을 RockPaperScissorsGame으로 설정합니다.Interface는 SwiftUI, Life Cycle은 SwiftUI App을 선택합니다.Language는 Swift로 설정하고 "Next"를 눌러 프로젝트를 생성합니다. 2. GameKit 설정하기GameKit을 사용하려면 Game Center를 활성화해야 합니다.Game Cen..

클라이언트 2025.02.16

[Swift] Actor와 Structured Concurrency

Swift는 동시성 프로그래밍을 보다 안전하고 직관적으로 수행할 수 있도록 Swift Concurrency를 도입했습니다. 그중에서도 actor와 structured concurrency는 동시성을 효과적으로 관리하고 데이터 경쟁 문제를 해결하는 핵심 개념입니다.이 블로그에서는 Swift의 actor 개념과 동시성 문제 해결 방법, 그리고 structured concurrency의 주요 구성 요소인 async let과 TaskGroup을 사용한 프로그래밍 방법을 상세히 설명하고, 이를 활용한 효과적인 비동기 프로그래밍 패턴을 소개하겠습니다.1. ActorActor의 개념Actor는 Swift에서 동시성 환경에서 공유 데이터에 안전하게 접근할 수 있도록 제공되는 객체 유형입니다.Actor는 데이터 경쟁(d..