| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- Swift
- IOS
- xcrun swift-demangle
- WWDC24
- updatecycle
- Xcode
- Architecture
- mainrunloop
- swift6.1
- modulararchitecture
- actor
- swift6
- displayscale
- cgimage
- mangle
- task
- ciimage
- applaucnchprocess
- 뷰를그리는메서드
- swift-demangle
- uicollectionview
- swiftconcurrency
- 뷰의레이아웃을계산하는메서드
- SPM
- XCUITest
- mach-o파일분석
- ios바이너리분석
- UIKit
- 이진삽입정렬
- 다이나믹링크분석
- Today
- Total
목록iOS (27)
꾸준한 기록
Main Run Loop1. 앱이 시작될 때, UIKit이 @main 을 찾아서 실행2. @main이 실행되면, UIApplication 인스턴스와 UIApplicationDelegate 인스턴스를 생성하고, 둘을 연결3. 앱의 Main Run Loop를 시작 Main Run Loop 동작방식UI 이벤트가 들어오면, queue에 쌓인다. Main Run Loop는 queue에서 작업을 꺼내서 처리queue에서 작업을 꺼내서, 애플리케이션의 객체에(Application Object)에 전달.애플리케이션 객체는 UI 이벤트를 해석해서 이것을 처리할 Core Object에게 전달. 이때 CoreObject의 핸들러가 호출되면서 개발자들이 쓴 코드가 호출됨.CoreObject의 처리가 끝나면, 다시 실행권한이 ..
1. 복잡한 레이아웃 지원UITableView - 일반적으로 단일 column 레이아웃에 최적화. 복잡한 레이아웃을 지원하지 않는다.UICollectionView - 여러개의 column 도 지원. UICompositionalLayout을 사용하면 복잡한 레이아웃(그리드, 리스트, 커스텀)을 만들 수 있다. 2. 가로 스크롤 지원UITableView - 가로 스크롤 XUICollectionView - 가로 스크롤 X 3. 재사용 큐UITableView - Cell만 재활용UICollectionView - Cell과 footer, header 모두 큐에 저장해두고 재활용 4. 보조 뷰 (supplementary view)UITableView - 헤더와 푸터만 지원함. 보조뷰 커스터마이징이 가능하지만, 보..
UICollectionView와 UITableView에서 내부 cell을 재활용하는 내부 메커니즘UICollectionView와 UITableView는 내부에 큐를 두고 재사용될 cell을 관리한다.셀을 가져오는 메서드:UICollectionView: dequeueReusableCell(withReuseIdentifier:for:)UITableView: dequeueReusableCell(withIdentifier:for:)셀이 처음 생성될 때 호출되는 메서드 순서dequeueReusableCell(withIdentifier:for:)호출함. init()tableView(_:cellForRowAt:) / collectionView(_:cellForItemAt:)willDisplay()didEndDispl..
성능향상을 위해 사용하면 좋은 것 효율적인 UI 업데이트를 위해선, DiffableDataSource에 item의 id값만 전달하는 것이 좋다.cell resgistartion을 사용하면 다양한 종류의 셀을 구성하는 로직을 한 곳에서 관리할 수 있다. 여러 셀 타입을 구분할 때, 조건문을 사용하지 않아도 된다.iOS 15부터 prefetching을 지원해서, 스크롤이 매끄럽게 일어날 수 있도록 한다.언제 prefteching을 사용하는 것이 좋은가? 이미지를 네트워크 통신으로 다운로드 하는 경우처럼 cell을 그리기 위해 비용이 많이 드는 작업을 처리해야 할 때, prefetching으로 이미지를 미리 받아오면 앱의 반응성을 높일 수 있다.셀의 레이아웃을 유지한채, 데이터만 바꾸는 경우 `reconfig..
모듈은 레이어(Layer, 계층)로 나뉜다. 레이어 구성1. 애플리케이션 레이어 (Application Layer)2. 도메인 레이어(Domain Layer)3. 서비스 레이어(Service Layer)4. 코어 레이어(Core Layer)5. 공유 레이어(Shared Layer) 레이어 특징1. 애플리케이션 레이어Framework에서 필요한 부분을 조립해서 갖는 컨테이너 역할조립? 도메인과 서비스를 연결하고, UI 스택을 인스턴스로 만든다.UI 스택에는 네트워크 서비스, Coorinater 패턴을 사용한다면 domain Coordinator 객체 등을 포함한다.app 환경설정 (config)를 포함한다. : 다양한 앱 버전, 키체인 환경설정 등푸시 알림 / 딥링크 / 권한 요청을 처리하는 로직도 포함예..
모듈러 아키텍처란?앱을 여러개의 독립적인 모듈로 나누어서 개발하는 것 장점 / 단점1. 장점빌드 속도 개선: 변경이 발생한 모듈만 빌드하면 되기 때문이다.유지보수 용이성과 확장성: 각 모듈이 독립적으로 존재하기 때문에, 한 모듈이 업데이트 되어도 다른 모듈에 미치는 영향이 적기 때문이다.코드 재사용: 공통 모듈을 여러 앱에서 사용할 수 있어서 중복을 방지할 수 있다.협업 용이성: 개발 팀이 커질 때, 모듈별로 역할을 나누어서 개발할 수 있어서 효율적이다.2. 단점초기 설정 복잡성: 초기 프로젝트의 구조를 정할 때도 시간이 소요되며, 추후 모듈간의 의존성을 관리하는 것도 복잡할 수 있다.온보딩 시간: 새로운 개발자가 프로젝트 구조를 이해하는데 오래 걸릴 수 있다.과도한 모듈화: 과도한 모듈화는 관리가 복잡..
UICollectionViewDataSourceUICollectionView를 그릴 때 사용할 데이터 제공 UICollectionViewDiffableDataSourceUICollectionView에 보여줄 데이터가 변경되었을 때, 이 변경을 효율적으로 처리UICollectionViewDataSrouce 프로토콜을 준수: 동일한 기능을 제공파라미터로 받는 cell provider에서 cell에 dequeue 한 후, data를 apply. UICollectionViewDelegateUICollectionView와 유저의 인터랙션을 처리하기 위해 사용 cell 클릭 액션 처리, 하이라이트 처리, willDisplay 처리 등
앱이 상태 변화(특히 백그라운드로 전환되거나 종료되기 전)에 수행해야 하는 작업데이터 저장:앱이 종료되기 전에, 처리 중인 데이터나 사용자의 데이터를 저장해야 한다. 예를 들어, 작성중인 문서, 서버와의 동기화 상태 등을 저장해야 한다.네트워크 요청 완료:백그라운드에서 처리되던 네트워크 요청을 안전하게 완료해야 한다.예를 들어, 사용자가 데이터를 서버에 저장하는 중이라면, 앱이 백그라운드로 전환되더라도 해당 작업이 중단되지 않고 완료될 수 있도록 해야 한다.상태 저장 및 복원:앱이 백그라운드에서 포그라운드로 돌아왔을 때, 사용자 경험이 끊기지 않기 위해서는 상태 저장이 중요하다.애를 들어 사용자가 보고 있던 스크롤 위치, 입력한 정보를 복원할 수 있도록 상태를 저장하는 작업을 해야 한다.리소스 정리:백그..
백그라운드 상태에서 가능한 작업음악 재생, 위치 정보 추적, 네트워킹 작업, 파일 다운로드/업로드 등 백그라운드에서 작업을 완료하기 위한 방법 4가지1. 백그라운드 작업 활성화 (Background Modes)2. 백그라운드 작업 종료를 지연하도록 요청한다.`beginBackgroundTask(expirationHandler:)`을 호출하면, 백그라운드에서 짧은 시간 동안 작업을 완료할 수 있게 해준다.만일 제한된 시간 내에 작업을 끝내지 못하면, 시스템은 앱을 종료한다.3. 백그라운드 페치 (Background Fetch)`performFetchWithCompletionHandler(_:)` 를 사용하면, 앱은 백그라운드에서 주기적으로 데이터를 로딩할 수 있다.이 기능은 배터리를 절약하면서, 백그라운드..
상태 5가지1. not running- 앱이 실행되지 않은 상태. 앱이 종료된 상태. 2. inactive- 사용자 인터페이스가 디바이스에 표시됨.- 하지만 이벤트 처리(ex: 터치 이벤트)는 일시적으로 처리 중단된 상태.- 화면 전환시 이 상태를 거친다. 3. active- 사용자 인터페이스가 디바이스에 표시됨. 사용자의 모든 입력을 처리할 수 있는 상태. 4. background- 앱이 사용자에게 보이지 않는 상태이지만 작업이 수행 가능한 상태- 하지만 파일 업로드/다운로드, 위치 정보 추적 등의 작업이 가능하다.- 백그라운드 실행은 제한된 시간동안 가능하다. 5. suspended- 앱이 백그라운드에 있지만, 작업을 수행하지 않는 상태.- 앱이 메모리에 남아있지만, CPU 자원은 사용하지 않는 상태..