개요 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로 프로젝트를 생..
지난 1편에 이은 2편 글이에요! 이어서 써 내려가 볼게요 :) Views 위젯을 만들면서 신경 써야 할 View는 크게 세 가지가 있어요. 첫 번째는 지금까지 이야기했던 Placeholder이에요. 이제 살펴봐야하는 것은 Snapshot과 timeline이고요! Snapshot Snapshot의 정의는 아래와 같아요. Snapshot is where the system needs to quickly display a single entry so the expectation is for your extension to quickly return a view 스냅샷은 시스템이 single entry를 빠르게 보여줄 필요가 있을 때 extension이 빠르게 return 하는 view라고 해요. 이것만 봐서..
- Total
- Today
- Yesterday
- 터틀비치#리콘#xbox#controller
- filter#isalnum#lower
- 배열합치기#분할정복#BOJ#Python
- 텀 프로젝트#백준알고리즘#Python
- API#lazy#
- Distinct#Codility#Python
- 섬의개수#백준알고리즘#Python
- 반복수열#백준알고리즘#Python
- 백준 알고리즘#BackTracking
- django#slicing
- 리모컨#완전탐색#BOJ#Python
- 토마토#백준알고리즘#Python
- 랜선자르기#이분탐색#BOJ#Python
- Swift#Tuples#Range
- 공유기 설치#BOJ#이분탐색#Python
- 파이썬알고리즘인터뷰#4장
- N으로 표현#DP#Programmers#Python
- Triangle#Sorting#Codility#Python
- 병든 나이트#BOJ#탐욕법#Python
- 쿼드트리#BOJ#분할정복#Python
- django
- NumberofDiscIntersections#Codility#Sort#Python
- 암호코드#dp#BOJ#Python
- 순열사이클#BOJ#Python
- 나무자르기#BOJ#이분탐색#Python
- Brackets#Stacks and Queues#Codility#Python
- 미로 탐색#백준알고리즘#Python
- 날짜 계산#BOJ#완전탐색#Python
- PassingCars#Codility#Python
- 종이자르기#분할정복#BOJ#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 |