일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Archive
- JPA
- Notification
- Xcode
- iOS16
- appstore
- FLUTTER
- stack
- MacOS
- Firebase
- UIButton
- Session
- Realm
- Git
- 웹뷰
- darkmode
- view
- 개발자
- github
- error
- Swift
- Code
- 한글
- window
- SwiftUI
- rxswift
- Apple
- IOS
- mac
- geofencing
- Today
- Total
목록IOS (175)
EEYatHo 앱 깎는 이야기
IDFV ( Identifier For Vendor ) IDFV 는, 벤더 식별자로, 한 디바이스 안에서 앱의 공급업체를 식별한다. IDFV 애플 문서 링크 IDFV 특징, 성질 앱을 재실행해도 같은 값으로 유지된다. 한 디바이스 안에서, 앱의 공급업체가 같은 경우, IDFV는 동일하다. ( A업체의 a앱, b앱의 IDFV는 동일 ) 다른 디바이스에 설치된 앱은, 공급업체가 같아도 IDFV 가 같지 않다. ( 1디바이스의 A업체의 앱, 2디바이스의 A업체의 앱은 IDFV가 다르다 ) 앱을 삭제 후 재설치해도, 공급업체가 같은 앱이 남아 있을 경우, IDFV는 유지된다. ( A업체의 a앱, b앱이 있을 떄, a앱만 재설치시 IDFV는 그대로 ) 같은 공급업체의 앱을 모두 삭제 후 재설치시 IDFV는 달라진..
iOS에서의 View가 업데이트되는 과정 iOS에서는 앱이 구동될 때, UIApplication의 싱글톤 인스턴스가 메인 쓰레드에서 Main Run Loop라는 이벤트 처리 루프를 실행시키고, 이 Main Run Loop중, Update Cycle에서 View들을 배치하고(layout), 보여주고(display) 제약합니다(constraints). ( UI관련 업데이트가 메인 쓰레드에서만 이루어 져야 하는 이유이기도 합니다. ) ( layout이란, 해당 뷰의 크기와 부모뷰에 대해 어느 위치에 있는지를 뜻합니다. ) ( display에는 뷰의 색, 텍스트, 이미지, Core Graphics 그리기 등이 있습니다. ) 그런데 메모리에 존재하는 모든 View들을, 매 Update Cycle마다 체크하는 것은..
테이블 리로드 후, 스크롤 하는 기능을 만들어야해서... reload completion 관련으로 엄청 삽질했는데...... 그냥 테이블 그리는 이벤트 발생, 스크롤 하는 이벤트 발생으로 단순하게 하면 잘.. 됩..니..다...ㅇㄴㅁㄴㅁㅇㄴㅁㄹㅁㄴ 충격에 휩싸여서 쓰는 글 ㅠ tableRelay.acceopt(list) tablaScrollRelay.accept(scrollIndex) 이런식으로 말이죠 ㅜㅡ..
Swift의 UIButton에 Label과 Image를 모두 넣을 경우, 아래와같이, image - Label 순서로 그려집니다. 이 구조가 맘에 안들경우, myButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 0) myButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 20) 이런식으로 titleEdgeInsets 와 imageEdgeInsets를 일일히 조절하는 방법도 있지만, Label과 Image의 순서만 바꿔야 한다면, myButton.semanticContentAttribute = .forceRightToLeft 이렇게 간단하게 할 수..
Then에서 설정이 되는 것이 있고, 안되는 것이 있길래, 안되는 것을 적어놓는 용도의 글입니다. 알게 되는게 있으면 계속 추가할 것 입니다 1. tableView backgroundColor separatorColor
iOS 14.0 부터, 뒤로가기 버튼을 꾹 누르면, 모든 이전 화면들에 한번에 이동할 수 있는 메뉴가 나옵니다. (Back Button Menu) 하지만 이 기능이 시스템상 불필요 한 경우가 있기 때문에, 이 메뉴를 비활성화 해야 하는 법이 필요한데요. class UIBarButtonItemNoMenu: UIBarButtonItem { @available(iOS 14.0, *) override var menu: UIMenu? { set { /* Don't set the menu here */ /* super.menu = menu */ } get { return super.menu } } } 이 서브 클래싱으로 해결하였고, Back Button Menu를 비활성화 하고 싶은 곳에 해당 서브 클래스로 만든 ..
Realm에는 Swift의 Array를 사용할 수 없습니다. Swift의 Array는 Realm의 Object를 상속하지 않기 때문입니다. 해결 방법으로, Realm에서 제공하는 List라는 데이터형을 활용하면 됩니다. Realm List 활용한 예시 코드 Swift에서 사용할 때는 Array이고, Realm 내부적으로는 List인 인터페이스 입니다. class MyModel: Object { .... // 원하는 데이터가 String 이라고 가정했을 때, let dataList: List = List() var dataArray: [String] { get { return dataList.map{$0} } set { dataList.removeAll() dataList.append(objectsIn: ..
개발을 하다보면 Label 의 줄 수에 따라서 조건이 변하는 경우가 생기는데, 대부분의 경우 AutoLayout으로 해결하지만, 줄 수에 따라 분기해야하는 경우도 발생합니다. text와 font를 가지고 , 미리 줄의 수를 알 수 있는 방법이 있습니다. class Utilities { ... /* UILabel의 줄 수를 return 합니다. label : .text와 .font를 설정해준 채로 보내줘야합니다. labelWidth : 한 줄의 넓이입니다. */ class func lineNumber(label: UILabel, labelWidth: CGFloat) -> Int { let boundingRect = label.text!.boundingRect(with: .zero, options: [.us..