일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Git
- String
- 웹뷰
- Code
- Python
- Xcode
- github
- mac
- error
- Archive
- Swift
- stack
- MacOS
- 한글
- Firebase
- 개발자
- view
- iOS16
- rxswift
- appstore
- darkmode
- FLUTTER
- Realm
- JPA
- Notification
- IOS
- SwiftUI
- UIButton
- Apple
- Session
- Today
- Total
목록IOS (164)
EEYatHo 앱 깎는 이야기
applicationWillTerminate UIKit > UIApplication.h > applicationWillTerminate 을 가지고 앱 종료 직전을 컨트롤할 수 있음. 해당 메소드가 return 되면, 시스템이 앱을 종료한다. 앱 종료 지연 및 async 작업 applicationWillTerminate 메소드에 sync 코드를 넣으면 다 실행하고 종료되지만, NotificationCenter, API 호출 등의 async 작업은, 미처 실행되기 전에 함수가 종료되서, 동작하지 않는 경우가 발생한다. 이를 방지하기 위해서는 return 을 지연(sleep) 시키면 된다. 문서에 따르면 최대 약 5초까지 지연시킬 수 있다. 코드 /// 해당 함수가 반환되면 시스템이 앱을 즉시 종료. /// ..
권한 작업 Info.plist 에 추가 Privacy - Motion Usage Description 걸음수 데이터 측정을 위해 데이터 접근 권한이 필요합니다. 안하면 crash남 코드 CoreMotion.CMPedometer.queryPedometerData 활용 3초마다 오늘 00시 ~ 현재시간까지의 걸음수를 query import CoreMotion final class CoreMotionService { static let shared = CoreMotionService() private var pedoMeter = CMPedometer() private init() { Timer.scheduledTimer(timeInterval: 3.0, target: self, selector: #select..
점진적 배포 ( Release a version update in phases ) 1. 7일 동안, 자동 업데이트를 켜둔 유저에게 점진적으로 업데이트 한다 2. 점진적 배포를 일시중지 할 수 있다. (최대 30일. 일시중지 횟수는 무제한) => 만약 최신 버전에 문제가 발견되었다면, 일시중지 후 핫픽스한 버전을 배포하는 식으로 운용한다. 3. 등차적으로 업데이트하는 게 아니라, 날마다 비율이 정해져있다. 4. Apple ID 를 기준으로 임의로 선정한다. => 복수 기기를 가진 한명의 유저는, 복수 기기에서 같은 결과를 가진다. 5. 신규 유저와 자동 업데이트를 꺼둔 유저는 그냥 최신버전으로 배포된다. Reference Release a version update in phases - Update you..
lazy 단어 뜻 그대로 게으른 변수, 실제로 사용되기 전까지, 메모리에 적재되지 않는다. 생성하는데 비교적 큰 비용이 들고, 잘 사용되지 않는 저장프로퍼티를 선언할 때 사용. 불필요한 메모리 사용을 줄일 수 있다. 초기화시 빈 값을 가지고, 이후 사용될 때 실제 값으로 변경되기 때문에, let 이 아닌 var 만 사용할 수 있다. lazy 저장 프로퍼티는, 같은 스코프 안에 있는 저장 프로퍼티를 사용하여 초기화 할 수 있다. class SomeClass { var storedProperty = "adsadas" lazy var lazyProperty: String = { // ok return storedProperty }() var property: String = { // error return s..
RxSwift 의 Scheduling RxSwift 에서 제공하는 스케쥴러(쓰레드) 관리 API 는 2가지 subscribe(on: Scheduler) subscribeOn is deprecated and renamed observe(on: Scheduler) observeOn is deprecated and renamed subscribe(on:) operator chain 의 어디에서 호출하든 모든 closure 의 Scheduler 설정. 여러개를 호출할 경우, 맨 처음(맨 위)의 subscribe(on:) 만 적용됨. subscribe(on:)이 없으면, create {} 는 관찰하는 곳(subscribe()이 호출된 곳)에서 호출된다. 여기서 정해진 Scheduler는, observe(on:)이..
Frame Super View 의 좌표계에서, 자신의 위치와 크기 View 회전시, 회전한 뷰를 감싸는 새로운 Rect 로 표시 // testView 회전 전 // frame = (50.0, 70.0, 150.0, 100.0) let pie = 3.141592 testView.transform = .init(rotationAngle: pie / 4) // 2pie 가 1바퀴 // 45도 회전 // frame = (36.6, 61.6, 176.8, 176.8) Bounds 자신의 좌표계에서, viewport (내 subview들을 보여주는 영역) 의 위치와 크기 기본값 : origin은 (0,0), size는 자신의 size 그대로 View 회전시, 그대로 유지됨 bounds 조정시, subview 들이 ..
if let 약식 구문 등장 let foo: String? = "hello world" // if let foo = foo { if let foo { print(foo) } any 확장 any 키워드를 사용한 모듈을 만들 때, type erase 로 type relationship 이 제거되어 associatedType 을 디스패치하지 못하던 상황을 개선 => any 타입을 unboxing 하여 some 타입으로 컨버팅 할 수 있는 기능을 컴파일러에 추가 func feed(_ animal: some Animal) { let food = type(of: animal).Feed.make() // associatedType 접근 animal.eat(food) } func feedAll(_ animals: [a..
async/await Thread 와 GCD 이후, Swift 5.5 에서 나온 최신식 동시성 지원 API 정확히는 키워드(async)와 피연산자(await) 코루틴 모델을 도입 ( 실행을 일시정지 할 수 있는 함수 ) async/await-propasal 링크 탄생 배경 들여쓰기가 가득한 콜백 지옥의 비동기 코드들이 존재할 수 있음 특히나, 분기를 거처서 한쪽에만 비동기 코드가 필요한 경우, 더더욱 들여쓰기와 콜백 지옥이 발생하기 쉬움 콜백은 오류 처리와 함께 사용할 때, 구현부를 장황하게 만듬 콜백 호출이나 return문을 까먹는 경우도 자주 발생 func processImageData(completionBlock: (_ result: Image?, _ error: Error?) -> Void) { ..