ios 68

[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..

[Swift] Distributed Actor

1. Distributed Actor 개념Swift의 Distributed Actor는 분산 시스템에서 안전하게 상태를 공유하고, 원격 간 통신을 가능하게 하는 기능을 제공하는 새로운 개념입니다. Swift Concurrency Model의 일부로 도입되었으며, 네트워크를 통해 여러 개의 독립적인 노드(서버 혹은 프로세스) 간에 데이터를 주고받을 수 있도록 설계되었습니다.Distributed Actor의 주요 특징분산된 환경에서 동작: 네트워크를 통해 여러 시스템이 협력하는 환경에서 동작합니다.안전한 상태 관리: 서로 다른 노드 간 상태 공유를 위한 자동 동기화 기능을 제공합니다.비동기 통신: Swift의 async/await를 활용하여 비동기적으로 메시지를 주고받을 수 있습니다.네트워크 투명성: 네트워..

[iOS] iOS 앱 리버싱 간단한 예제

리버싱(리버스 엔지니어링, Reverse Engineering)은 소프트웨어의 내부 동작을 분석하고 이해하는 과정입니다. iOS 앱 리버싱을 통해 보안 취약점을 탐색하거나 앱의 동작을 변경할 수 있습니다. 본 글에서는 간단한 iOS 예제 앱을 만든 후 이를 리버싱하고, 일부 기능을 조작하는 방법을 다룹니다.주의: 타인의 앱을 무단으로 리버싱하거나 조작하는 것은 불법이며 윤리적으로도 문제가 될 수 있습니다.1. 환경 구축리버싱을 위해 다음과 같은 도구가 필요합니다:macOS (iOS 개발 및 리버싱 환경 필수)Xcode (Swift 기반 예제 앱 개발)lldb (디버깅 및 런타임 메모리 조작)Hopper Disassembler (바이너리 분석)Frida (런타임 코드 주입 및 분석)class-dump (클..

클라이언트 2025.02.16

[Swift] Swift의 유연한 문법 기능을 활용한 코드 설계

Swift는 강력한 문법적 유연성을 제공하는 언어로, 오퍼레이터 오버로딩(operator overloading)과 첨자 표기법(subscript) 외에도 여러 기능을 활용하면 더욱 직관적이고 읽기 쉬운 코드를 작성할 수 있습니다. 이 글에서는 이러한 기능을 활용하여 사용자 정의 타입을 설계하는 방법을 자세히 설명하겠습니다.1. 오퍼레이터 오버로딩오퍼레이터 오버로딩Swift에서는 기존의 연산자(+, -, *, /, == 등)를 사용자 정의 타입에서 재정의할 수 있습니다. 이를 오퍼레이터 오버로딩이라고 하며, 이를 활용하면 연산을 더욱 직관적으로 표현할 수 있습니다.오퍼레이터 오버로딩의 장점코드 가독성 향상: 수학적인 개념을 코드에 직접 적용할 수 있음유지보수성 증가: 별도의 메서드를 정의하지 않고 연산자만..