개요 SwiftUI를 활용해 앱을 개발하면서, 데이터 저장 도구에 대한 선택지를 고민했습니다. iOS 앱을 개발할 때 데이터 저장 솔루션을 선택하는 것은 중요한 결정입니다. 데이터를 어떻게 저장하고 관리할지를 결정하는 것은 앱의 성능, 확장성 및 개발 경험에 큰 영향을 미칩니다. 이 글에서는 Core Data와 Realm의 장단점을 비교하고 어떤 상황에서 어떤 것을 선택해야 하는지 알아보겠습니다. Core Data 장점: 공식적인 Apple 지원: Core Data는 Apple에서 제공하는 공식 데이터 저장 및 관리 프레임워크로서 iOS 개발 생태계와 밀접한 통합을 제공합니다. SwiftUI와의 호환성이 뛰어나며, Apple의 업데이트에 즉시 대응할 수 있습니다. 간편한 통합: SwiftUI에서 @Fet..
개요 자주 쓰는 단축키는 초록색 으로 표시하고, 개인적으로 잘 외워지지 않는 단축키는 핑크색 으로 표시했어요(나중에 보려고 정리한 거라..) 참고의 Apple 공식 문서에 들어가면 더 많은 단축키를 볼 수 있어요! 필요에 따라 지속적으로 업데이트될 예정이에요. 아래 정보는 Xcode 14.1을 기준으로 해요. 혹시 잘못된 정보가 있다면 피드백 부탁드려요 🙏 🛠 XCode 단축키 Command(⌘) + Shift(⇧) + K : 프로젝트 클린 Command(⌘) + B : 프로젝트 빌드 Command(⌘) + R : 프로젝트 실행 Command(⌘) + I : 프로젝트 프로파일링 빌드 Command(⌘) + T : 새로운 탭 열기 Command(⌘) + [ : 해당 코드 왼쪽으로 indent 한 탭(4 s..
개요 앱의 크래쉬를 분석하다 보면 네트워크 이슈를 의심하는 경우가 있어요. 그런 상황을 재현하기 위해 맥에서 네트워크 속도를 조절할 수 있는 툴을 소개합니다 :) Mac에서 네트워크 속도 조절하기 Network Link Conditioner는 애플에서 공식적으로 제공해주는 도구예요. 그래서 안심하고 사용할 수 있어요. 설치하기 2022년 10월 기준 Network Link Conditioner는 Apple Developer 사이트에서 다운로드할 수 있어요. Apple Developer Downloads 로그인 - Apple idmsa.apple.com Additional Tools 혹은 Network Link Conditioner로 검색하면 아래와 같이 나와요. Network Link Conditione..
개요 이번 글은 공유의 목적이라기보다 XCTest를 사용하며 개인적으로 놓쳤던 세세한 부분을 기록하는데 목적이 있어요. 가볍게 작성하는 내용이라 가볍게 읽으시면 좋을 것 같아요 :) 이 글은 Raywenderlich의 Testing in iOS를 기반으로 합니다! 위의 강의를 보면서 놓쳤던 부분을 기록한 연습장 정도로 보셔도 좋을 것 같아요! XCTest INFO I missed 1. Test를 진행할 때 Scheme 설정 Test를 구현할 때(특히 TDD)를 할 때 중요한 것이 테스트의 속도예요. 테스트를 구현할 때 모든 구현이 끝난 후 마지막에만 실행시켜보는 것이 아니라 실패 테스트를 먼저 작성하고, 테스트를 구현하는 과정 중간중간에 지속적인 테스트가 필요해서 빠른 테스트 속도는 정말 중요해요. 기본..
개요 이번 글에서는 iOS File System에 대해서 이야기해보겠습니다! 어떤 앱에서 다른 앱(또는 위젯)에 원하는 데이터를 전달하는 데에 저장소에 대한 이해가 필요해서 이 글을 쓰게 되었어요 :] 우선, 공식 문서를 기준으로(iOS를 초점으로) 저장 시스템의 기본을 이해해볼게요! File System이란? Apple 생태계의 기본 파일 시스템은 APFS로 macOS, iOS, watchOS, tvOS 파일 시스템의 기본이 돼요(iOS 10.3 이상, macOS HighSierra 이상). 여기서 파일 시스템이란 데이터 파일, 앱 및 운영체제와 관련된 파일의 저장소를 처리하는 시스템을 의미해요. 특정 데이터를 저장, 삭제, 수정하는 것처럼 파일 시스템과 상호 작용하는 코드를 작성하기 위해서는 이 시스..
1편 글에 이어서 2편 글을 이어나갈게요! SwiftUI에서 UI 업데이트하기 SwiftUI의 View에서 프로퍼티 값을 변경할 경우, @State를 마킹해서 "변경이 필요한 상태 값"이라는 것을 표시해요. UIKit의 경우 특정 객체의 상태를 변경해주기 위해 그 객체에 접근해서 메서드를 통하거나 직접 그 프로퍼티의 값을 변경했었어요. 이 과정에서 타이밍에 따라 의도하지 않은 결과가 나오거나 버그가 발생하는 등의 문제가 발생하기 쉬워서 고려해야 할 게 많아요. SwiftUI의 경우 @State로 마킹된 프로퍼티의 값이 변경될 경우, 그 뷰를 무효화(invalidate)하여 숨겼다가 body를 다시 계산해서 보여줘요. UIKit의 경우 어떤 값을 보여주다가 그 값을 갱신할 경우 기존의 UI에서 reload..
시작하기 항상 해야 하는 숙제 느낌이 있지만 막상 공부는 안 했던 SwiftUI에 대한 이야기를 해보려고 해요... 애플은 "Better Apps, Less Code"라는 말을 표방하여 SwiftUI를 설명하고 있어요. 더 적은 코드로 더 나은 앱을 개발할 수 있기 때문에 장점으로는 1. 가독성 향상 2. 앱 개발 속도 향상 3. 디버깅 유리 4. 선언형 을 꼽을 수 있어요. 하지만 최소 버전이 iOS 13이라는 점과 다양한 버그 때문에 많은 현업에서 사용은 꺼려지고 있는 것으로 알고 있어요. 그래도 언젠가 해봐야 하기 때문에 이 글을 시작으로 천천히 공부해나가려고 해요! 참고 자료는 Raywenderlich의 SwiftUI by Tutorials 입니다 :) Xcode에서 SwiftUI로 프로젝트를 생..
개요 MVVM을 학습하며 GitHub에서 여러 Repository를 참고했어요. 그 과정에서, 같은 MVVM이지만 개발자의 설계에 따라 구현 구조가 크게 다른 것을 확인했어요. MVVM은 정의하기에 따라 다양한 형태를 가질 수 있기 때문에 이런 문제를 해결하기 위해 여러 회사들에서 ReactorKit을 활용한다고 들었어요. 저 역시 두 가지 프로젝트를 MVVM으로 설계하며 위의 문제를 경험했었기 때문에 ReactorKit 공식 GitHub의 README를 해석하며 전체적인 구조를 이해해보려고 해요 :) 글이 길어져서 우선 이 글에서는 기본적인 내용만 다루고, Advanced 이후 내용은 다른 글에서 추가해볼게요! Basic Concept (기본 콘셉트) ReactorKit은 Flux와 Reactive P..
- Total
- Today
- Yesterday
- django
- 반복수열#백준알고리즘#Python
- 배열합치기#분할정복#BOJ#Python
- Swift#Tuples#Range
- 암호코드#dp#BOJ#Python
- Triangle#Sorting#Codility#Python
- API#lazy#
- 텀 프로젝트#백준알고리즘#Python
- 병든 나이트#BOJ#탐욕법#Python
- 백준 알고리즘#BackTracking
- 날짜 계산#BOJ#완전탐색#Python
- 리모컨#완전탐색#BOJ#Python
- 공유기 설치#BOJ#이분탐색#Python
- Distinct#Codility#Python
- NumberofDiscIntersections#Codility#Sort#Python
- 토마토#백준알고리즘#Python
- 순열사이클#BOJ#Python
- 나무자르기#BOJ#이분탐색#Python
- 쿼드트리#BOJ#분할정복#Python
- 파이썬알고리즘인터뷰#4장
- N으로 표현#DP#Programmers#Python
- django#slicing
- 랜선자르기#이분탐색#BOJ#Python
- filter#isalnum#lower
- 종이자르기#분할정복#BOJ#Python
- 터틀비치#리콘#xbox#controller
- Brackets#Stacks and Queues#Codility#Python
- 미로 탐색#백준알고리즘#Python
- PassingCars#Codility#Python
- 섬의개수#백준알고리즘#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |