• Privacy Pillar
    • 늘 나오는 거지만, 한번 더 강조
    • Data minimization: 최소한의 데이터만 수집, 전송, 공유해야 한다.
    • On-device processing: 디바이스 자체적으로 처리하고, 서버로 공유하지 말 것
    • Transparency and control: 어떤 데이터를 왜, 언제, 어디서 접근하고 처리하는지를 명확히하고 사용자가 이를 조절할 수 있게 할 것
      • 사용자가 나중에 이를 바꿀 수도 있어야 한다.
    • Security protections: 다른 기둥들을 뒷받침 할 강력한 기술적인 조치가 있어야 한다.
      • e2e 등
  • New tools
    • embedded Photos picker

      • 앱에서 직접 피커를 띄우지 않고 별개로 띄운 다음에 선택한 사진만 앱으로 들어오게 한다.

        • 때문에 추가로 권한을 받을 필요가 없다.
      • iOS 17 및 macOS sonoma부터는 앱에 피커를 완전히 내장시킬 수 있게 되었다.

        • 앱의 일부처럼 보이지만, 여전히 시스템에 의해 렌더링되고 선택된 사진만 공유된다.

          스크린샷 2023-06-20 오후 3.16.47.png

      • 가능한 photoPicker를 사용할 것

        • 라이브러리에 대한 전체 권한을 얻을 필요가 없다
        • 사진 선택 플로우를 디자인하고 구현할 필요도 없다.
      • iOS 17에서는 전체 사진 권한을 요청할 경우에 뜨는 dialog가 바뀌었다.

        • 공유되는 사진 및 비디오 수, 샘플링 된 이미지들을 보여준다.

          스크린샷 2023-06-20 오후 3.26.20.png

        • 사용자의 선호는 계속 변하기 때문에, 시스템이 주기적으로 앱이 전체 권한을 가지고 있음을 리마인드 한다.

          스크린샷 2023-06-20 오후 3.54.25.png

    • Screen capture picker

      • ScreenCaptureKit의 신규 API

        • 원하는 Window나 화면만 앱을 통해 공유하게 만들어주는 프레임워크
      • SCContentSharingPicker API를 사용하면 window Picker가 뜨면서 공유를 원하는 Window를 선택하게 된다.

        • 개별 화면 캡쳐 권한을 얻거나 자체적인 Screen picker를 구현할 필요가 없다.
      • 메뉴바 아이콘을 통해서 화면 공유가 이뤄지고 있다는 것을 계속 알려준다.

        스크린샷 2023-06-20 오후 4.30.51.png

      • 누르면 프리뷰가 뜬다.

        스크린샷 2023-06-20 오후 4.31.27.png

      • 몇가지 커스텀 옵션도 제공한다.

    • write-only calendar access

      • 캘린더에는 사람들의 디테일한 삶이 들어가 있다.

        • 그래서 사람들이 캘린더 권한을 요구하면 놀라거나, 심지어 거절해버릴 가능성이 높다.
      • 근데 이 권한이 없으면 일정 추가만 필요한 경우에도 접근이 안되는 문제가 있다.

      • 그래서 두가지 변화가 추가됐다.

        • EventKitUI
          • 별도 권한 요청없이 앱 바깥에서 이벤트를 작성할 수 있게 해준다.
        • add-only permission
          • 커스텀UI로 이벤트 추가를 하려는 경우에 사용

          • 이벤트를 읽지 않고 쓰기만 가능

            스크린샷 2023-06-20 오후 4.38.08.png

          • 나중에 전체 접근이 필요해지면 그 때 요청하면 된다.

            • 이것도 사용자 의도에 맞춰서 해주는 게 좋다.

              스크린샷 2023-06-20 오후 4.39.18.png

      • 기존 전체 접근을 허용했던 앱의 권한은 write-only로 자동 조정된다.

      • 이전 버전 SDK로 빌드된 앱이 캘린더 EventKit을 통해서 캘린더 접근을 요청하면 write-only 프롬프트만 띄울 수 있다.

        • 전체 접근 권한은 캘린더 이벤트를 가져오려고 할 때 암시적으로 요청된다.
    • Oblivious HTTP(OHTTP)

      스크린샷 2023-06-20 오후 4.47.59.png

      • 애플리케이션의 암호화된 메시지를 중개하는 표준 프로토콜
      • 애플리케이션과 서버는 릴레이를 통해서 통신하게 되고, 릴레이는 주소값만 알고 컨텐츠 내용은 볼 수 없다.
      • 네트워크 사이의 그 어떤 참여자도 통신의 전체 정보를 알 수 없는 구조
        • SourceIP, destination IP, content
      • 네트워크를 통한 사용자 패턴 분석을 막아준다.
      • iCloud Private Relay가 이 OHTTP를 사용하는 서비스
        • DNS 쿼리를 보호하는데 사용한다.
      • OHTTP를 쓰기 위해서는 기존에 IP주소를 사용하던 아키텍쳐에 변경이 필요하다는 뜻이기도 하다.(ex. 실제 유저를 탐지하는 등)
        • Private Access Token
      • DNS 쿼리 보호도 염두에 둬야 한다.
    • Communication Safety

      • Sensitive Content Analysis
        • 가족끼리 사용할 때, 자식들이 민감한 정보를 받는 것을 미리 경고하고 적절한 리소스를 제공하는 기능

        • 메시지, 에어드롭, facetime, 연락처 포스터, Photo Picker 등에 적용된다.

        • 더 나아가서 나이에 상관없이 모든 곳에 민감한 컨텐츠를 경고할 수 있게 된다.

        • Sensitive Content Analysis 프레임워크 추가

          • 온디바이스로 동작
          • ML 모델은 시스템이 제공하고, 컨텐츠를 다른 곳으로 공유하지는 않는다.
          // 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) // 자제적으로 구현 한다.
          }
          
        • 민감 정보로 판단되면 할 수 있는 옵셕

          • 블러처리 혹은 난독화
          • 선택적으로 볼 수 있는 옵션 제공
          • 해당 기능이 켜져있을 때만 가리기 등
  • Platform changes
    • Map app data protection
      • 다른 앱 컨테이너의 데이터에 접근하려고 하면 권한 얼럿이 뜬다.
        • 이를 위해서 앱 컨테이너(샌드박스) 안에 데이터를 넣어놓는 것이 권장된다.
        • 이 권한은 앱이 종료될 때 까지만 유효하고 앱이 재시작되면 리셋된다.
      • NSOpenPanel을 쓰면 권한 요청 얼럿이 뜨지 않는다.
        • OS 파일 피커 UI가 뜨고, 사용자가 직접 골라서 첨부하게 된다.
        • 피커가 뜰 때 기본적으로 보여주는 경로 설정을 해놓으면 원하는 데이터를 고르기 편하다.
      • Full Disk Access권한이 있는 경우는 권한 얼럿이 뜨지 않는다.
      • 같은 Team ID로 서명된 앱의 컨테이너에 접근하는 것도 권한 얼럿이 뜨지 않는다.
        • 이 부분은 앱의 Info.plist에 NSDataAccessSecurityPolicy 옵션으로 AllowList 방식으로 조정해줄 수 있다.
    • Advanced data protection
    • Safari Private Browsing: advanced tracking and fingerprinting 보호 추가
    • Safari app extensions
  • Spatial input model