embedded Photos picker
앱에서 직접 피커를 띄우지 않고 별개로 띄운 다음에 선택한 사진만 앱으로 들어오게 한다.
iOS 17 및 macOS sonoma부터는 앱에 피커를 완전히 내장시킬 수 있게 되었다.
앱의 일부처럼 보이지만, 여전히 시스템에 의해 렌더링되고 선택된 사진만 공유된다.
가능한 photoPicker를 사용할 것
iOS 17에서는 전체 사진 권한을 요청할 경우에 뜨는 dialog가 바뀌었다.
공유되는 사진 및 비디오 수, 샘플링 된 이미지들을 보여준다.
사용자의 선호는 계속 변하기 때문에, 시스템이 주기적으로 앱이 전체 권한을 가지고 있음을 리마인드 한다.
Screen capture picker
ScreenCaptureKit의 신규 API
SCContentSharingPicker API를 사용하면 window Picker가 뜨면서 공유를 원하는 Window를 선택하게 된다.
메뉴바 아이콘을 통해서 화면 공유가 이뤄지고 있다는 것을 계속 알려준다.
누르면 프리뷰가 뜬다.
몇가지 커스텀 옵션도 제공한다.
write-only calendar access
캘린더에는 사람들의 디테일한 삶이 들어가 있다.
근데 이 권한이 없으면 일정 추가만 필요한 경우에도 접근이 안되는 문제가 있다.
그래서 두가지 변화가 추가됐다.
커스텀UI로 이벤트 추가를 하려는 경우에 사용
이벤트를 읽지 않고 쓰기만 가능
나중에 전체 접근이 필요해지면 그 때 요청하면 된다.
이것도 사용자 의도에 맞춰서 해주는 게 좋다.
기존 전체 접근을 허용했던 앱의 권한은 write-only로 자동 조정된다.
이전 버전 SDK로 빌드된 앱이 캘린더 EventKit을 통해서 캘린더 접근을 요청하면 write-only 프롬프트만 띄울 수 있다.
Oblivious HTTP(OHTTP)
Communication Safety
가족끼리 사용할 때, 자식들이 민감한 정보를 받는 것을 미리 경고하고 적절한 리소스를 제공하는 기능
메시지, 에어드롭, facetime, 연락처 포스터, Photo Picker 등에 적용된다.
더 나아가서 나이에 상관없이 모든 곳에 민감한 컨텐츠를 경고할 수 있게 된다.
Sensitive Content Analysis 프레임워크 추가
// Analyzing photos
let analyzer = SCSensitivityAnalyzer()
let policy = analyzer.analysisPolicy
let result = try await analyzer.analyzeImage(at: url)
let result = try await analyzer.analyzeImage(image.cgImage!)
// Analyzing videos
let handler = analyzer.videoAnalysis(forFileAt: url)
let result = try await handler.hasSensitiveContent()
if result.isSensitive {
intervene(policy) // 자제적으로 구현 한다.
}
민감 정보로 판단되면 할 수 있는 옵셕
Map app data protection
이 부분은 앱의 Info.plist에 NSDataAccessSecurityPolicy 옵션으로 AllowList 방식으로 조정해줄 수 있다.
Advanced data protection
CloudKit의 모든 스키마가 encrypted 버전으로 되어 있는지
encryptedValues API를 사용해서 데이터를 가져오고 저장해야 한다.
myRecord.encryptedValues["encryptedStringField"] = "Sensitive value"
let decryptedString = myRecord.encryptedValues["encryptedStringField"] as? String
Safari Private Browsing: advanced tracking and fingerprinting 보호 추가