contents
Swift
UUID(Universally Unique Identifier)
네트워크 상에서 고유성이 보장되는 id를 만들기 위한 표준 규약
•
중앙에서 관리되지 않는 분산 환경이라면 개별 시스템이 id를 발급하더라도 유일성이 보장되어야만 하기 때문에 범용고유식별자 UUID가 탄생했다.
•
128비트의 숫자, 32자리의 16진수로 표현된다. → 340,282,366,920,938,463,463,374,607,431,768,211,456개의 사용 가능한 UUID 값
•
8자리 - 4자리 - 4자리 - 4자리 - 12자리 패턴
이름 | 길이(바이트) | 길이(16진수 숫자) | 내용 |
time_low | 4 | 8 | 시간의 low 32비트를 부여하는 정수 |
time_mid | 2 | 4 | 시간의 middle 비트를 부여하는 정수 |
time_hi_and_version | 2 | 4 | 최상위 비트에서 4비트 “version”, 그리고 시간의 high 12비트 |
clock_seq_hi_and_resclock_seq_low | 2 | 4 | 최상위 비트에서 1-3비트, 그리고 13-15비트 클럭 시퀀스 |
node | 6 | 12 | 48비트 노드 id |
2345678–1234–1234–1234–1234567890ab
•
UUID버전은 1, 3, 4, 5가 있다. 이중 가장 많이 사용되는 건 1, 4버전이다.
◦
1버전 : 타임스탬프를 기준으로 생성 → 호스트 Id, 시퀀스 번호 및 현재 시각으로 UUID 발급
◦
4버전 : 랜덤 생성 → 무작위 UUID 생성
◦
3버전 : MD5 해쉬를 이용해 생성하는 방식
◦
5버전 : SHA-1 해쉬를 이용해 생성하는 방식
•
고유성을 완벽하게 보장할 수는 없지만 실제 사용 상에서 중복될 가능성이 거의 없다고 인정되기 때문에 많이 사용되고 있습니다.
Apple에서 사용하는 UUID는 RFC 4122의 버전4 방식으로 생성됩니다.
UIDevice.current.identifierForVendor!.uuidString
Swift
복사
UUID().uuidString
Swift
복사
UUID의 성질
1.
앱을 껐다가 켜도 그대로입니다.
2.
앱의 공급업체가 같은 경우 UUID가 동일합니다.
3.
앱을 삭제해도, 공급업체가 같은 앱이 남아 있을 경우 UUID는 그대로입니다.
4.
같은 공급업체의 앱을 모두 삭제 후 재설치시 UUID는 달라집니다.
Accessibility
접근성
산업 디자인, 사용자 인터페이스 디자인, 건축, 시스템 공학, 인간공학 등의 분야에서 쓰이는 용어로, 사용자의 신체적 특성이나, 지역, 성별, 나이, 지식 수준, 기술, 체험과 같은 제한 사항을 고려하여 가능한 많은 사용자가 불편없이 이용할 수 있도록 제품, 서비스를 만들어 제공하고 이를 평가할 때 쓰이는 말이다. 접근성이 높다는 것은 이러한 제한 사항을 가진 사용자도 불편없이 사용할 수 있다는 것을 뜻하며 접근성이 낮다는 것은 어떠한 제한 때문에 사용하기 불편하거나 사용할 수 없을 때를 말한다.
우리에게 손쉬운 사용으로 알려져 있는 기능들이 접근성을 높이기 위한 기능들입니다. 비장애인에게는 화면이 보이므로 원하는 정보를 받을 수 있지만, 장애인에게는 정보를 제공하기가 어렵습니다. 따라서 VoiceOver를 이용해서 접근성을 제공합니다.
VoiceOver
isAccessibilityElement | 접근성 요소 여부이며, UIKit Control은 기본 값이 true입니다. 값을 true로 설정하면 해당 요소에 초점이 이동 가능합니다. |
accessibilityLabel | 레이블을 설정하면 설정한 텍스트를 읽어줍니다. 만약 해당 요소가 버튼인 경우, 설정한 이름 뒤에 버튼이라고 읽어줍니다. |
accessibilityHint | 요소를 동작시키기 위한 방법을 안내합니다. 해당 인터페이스를 사용해본적이 없어서 어떻게 사용하는게 좋은지에 대한 설명 부여.
** 사용자가 끌 수 있기 때문에 중요한 정보는 담으면 안됨. |
accessibilityValue | 값이 달라지는 경우에 사용하며, 슬라이더의 값이나 텍스트 필드의 값에 사용할 수 있습니다. 예를 들어, Label은 “볼륨”으로 설정하고, “60%”로 value를 설정합니다. |
accessibilityTraits | 모든 접근성 특성의 조합을 반환합니다. 아무런 특성을 가지지 않는 UIAccessibilityTraitNone을 설정하거나 버튼으로 다루는 요소라면 UIAccessibilityTraitButton로 설정할 수 있습니다. |
accessibilityFrame | 스크린 내의 초점의 frame을 설정할 수 있습니다. |
shouldGroupAccessibilityChildren | 그룹화된 뷰의 요소에 초점을 이동하도록 합니다. 이 속성은 초점이 왼쪽 상단에서 오른쪽 하단으로 이동하므로, 정보가 수직으로 나열되어 있을 때 유용합니다. 디자인에 따라 sholdGroupAccessibilityChildren을 설정하여 접근성을 좀 더 쉽게 설정할 수 있습니다. |
accessibilityElementHidden | 모든 접근성 요소를 숨겨 초점이 해당 요소로 이동하지 못하게 합니다. |
accessibilityViewIsModal | 해당 접근성 요소가 Modal 뷰인지 설정하여, 해당 요소로 초점이 이동되면 해당 뷰 내에 접근성 요소로만 이동이 가능하며, 다른 요소로 이동할 수 없습니다. |
accessibilityElementDidBecomeFocused() | 해당 접근성 요소에 초점을 설정하도록 합니다. |
accessibilityElementDidLoseFocus() | 해당 접근성 요소에서 가상의 초점을 제거하도록 합니다. |
accessibilityElementIsFocused() | 해당 접근성 요소에 초점이 걸려있는지 반환합니다. |
accessibilityActivate | 해당 접근성 요소가 활성화되었었는지 반환합니다. |
UIAccessibilityPostNotification | 변경사항 등이 있을 때, Notification을 통해 알립니다. |
isVoiceOverRunning | VoiceOver가 켜져있는지 여부를 반환합니다. |
Color
•
색맹의 경우 Color로 의미를 구분하기 어려울 수 있으므로 모양까지 다르게 하는 것을 고려
Transparency and Contrast
•
시력에 문제 있는 사람에게 투명도 줄이기 / 대비 증가 설정은 훨씬 더 가독성을 높게 만듦
투명도 줄이기
•
UIAccessibility.isReduceTransparencyEnabled로 설정 여부 체크 가능
대비 증가
•
UIAccessibility.isDarkerSystemColorsEnabled로 설정 여부 체크 가능
Motion
•
전정기관에 문제 있는 사람들은 화면에 나타나는 motion이 클 경우에 문제가 될 수 있음
•
UIAccessibility.isReduceMotionEnabled로 설정 여부 확인 후에 부드럽게 전환하는 처리
Dynamic Type
•
시력 문제로 큰 글씨를 선호하는 사람들이 있음
•
label.font = UIFont.preferredFont(forTextStyle: .body) 이런식으로 preferredFont 함수 사용
•
label에 adjustsFontForContentSizeCategory = true로 설정해줘야 유저가 설정을 바꿀때마다 폰트 사이즈가 자동으로 변경된다.
•
preferredContentSizeCategory 속성 접근해서 사용자가 선호하는 글꼴 사이즈 옵션을 가져올 수도 있다고 합니다.
•
유동적 글자크기를 위해서 커스텀 폰트를 조정하는 일을 쉽게 하기 위해서 Apple은 iOS 11에서 UIFontMetrics를 제공