• privacy를 지키는 것은 사용자가 신뢰를 유지하여 앱을 계속 쓰게 만드는 이유다.
  • Privacy의 근간
    • Data minimization: 특정 기능을 제공하기 위한 최소한의 데이터만 쓸 것
    • On-Device Processing: 민감한 데이터는 서버로 보내지말고 디바이스에서 처리하고 끝낼 것
    • Transparency and control: 그럼에도 민감 데이터가 디바이스 바깥으로 나가야 된다면, 이를 사용자가 알고, 컨트롤 할 수 있게 할 것.
    • Security protections: 민감 데이터는 안전하게 보관해야 한다.
  • Platform updates
    • Device name entitlement: 디바이스 이름에 접근할 수 있는 권한을 제한한다.

      • 기본적으로 Device name에는 Apple ID에서 이름을 가져와서 붙이고, 유저가 원하면 커스텀도 가능하다.
      • 이전까지는 UIDevice를 통해서 이 커스텀된 이름을 가져오는 것이 가능했다.
      • 이제는 디바이스 모델명을 가져온다.
        • 멀티 디바이스 경험을 위해서 이것을 사용하던 앱들이 영향을 받는 것으로 알고 있다.

        • 멀티 디바이스 경험을 위해서 이게 필요하고, 또 유저에게 이를 노출시키는 앱이라면 entitlement를 신청하라.

        • 다만 권한을 얻어도 이걸 다른 서비스(클라우드 호스팅 서비스 말고)와 공유하는 것은 금지.

          com.apple.developer.device-information.user-assigned-device-name
          
    • location attribution: Control center에서 app attribution을 보여줌

      • 컨트롤 센터에서 어떤 앱이 쓰고 있는지 보여준다
      • 전에는 아이콘만 보여줬는데, 이제는 누가 쓰는지도 알 수 있으니, 필요한 경우에만 써라.
    • GateKeeper improvements: notarized된 앱의 무결성 검증을 더 많은 곳에서 수행

      • GateKeeper는 새로 다운로드 받은 앱의 무결성을 검증한다.
      • 이제는 격리된 앱 뿐 아니라 공증된(notarized) 앱도 무결성 검증을 한다.
        • 앱의 서명이 유효하지 않으면 gatekeeper가 첫 실행을 막는다.
        • 그래서 모든 실행파일과 번들에 서명을 해야하고, 앱을 수정할 때 이 서명들이 유효한 상태여야 한다.
      • 무결성 검사 뿐 아니라 변경도 통제한다.
        • 기존과 같은 개발자 계정이나 팀이 서명해서 내보낸 건 괜찮다.

        • 다른 개발자 팀 서명으로도 업데이트하게 허용하거나, 다른 팀이 업데이트 하는 걸 막으려면, info.plit를 설정하면 된다. (NSUpdateSecurityPolicy)

          "NSUpdateSecurityPolicy" => {
          	"AllowProcesses" => {
          		"ABC123" => 
          			0 => "com.example.pal.about"	
          		]
          	}
          }
          
        • 다른 서명으로 앱이 변경되려고 하면 OS가 이를 막고 유저에게 알려줌 → 사용자가 명시적으로 설정에서 허용해줘야 함

    • Launching mac apps at login: 추가될 때마다 알려줌 + API 단순화

      • 사용자는 의도하지 않은 앱이 열리거나, 민감정보에 접근해도 알 수가 없고
        • 이제는 자동으로 launch at login에 등록되고, 유저는 이를 통보받게 된다.
        • 권한 상승이 필요한 데몬은 관리자 승인이 있어야 한다.
      • 개발자는 API가 파편화되어 있어서(daemons, agents, service management)뭘 써야 할지 모르겠고.
        • 이제는 단일 API로 launch agent나 deamon을 선택한다.(SMAppService)
        • 앱에 daemon과 agent가 번들링되어 있기 때문에, 별도 설치나 제거 과정이 필요없고, 앱스토어에서도 동작한다.
    • legacy Pasteboard 접근: 이제는 허가가 필요하다.

      • 이전 업데이트에서는 접근할 때마다 알려줬다.
      • 이제는 접근할 때마다 유저에게 얼럿이 뜬다.
      • 얼럿 우회법
        • edit options
        • Keyboard shortcut
        • UIKit Paste Control
  • Features to adopt
    • UIKit Paste Control
      • 작년에 나온 Location Button 같은 것
    • Media device discovery
      • 기존에는 주변에 스트리밍하는 기기를 찾는 로직을 앱에서 했다.
      • 그래서 앱이 로컬 네트워크 접근(혹은 블루투스) 허용을 직접 핸들링해야 했다.
        • 다만 이는 과도한 정보 노출과 기기 식별 리스크가 있다.
      • 그래서 이를 보완한 Media device discovery가 나왔다.
        • 앱에서 직접 네트워크나 블루투스 접근을 하지 않고 별도 익스텐션에서 한다.
        • 익스텐션은 스캔 결과를 앱에 직접 보내지 않는다.
        • 디바이스 리스트는 Airplay같은 UI에서 선택할 수 있게 된다. → AVRoutePickerView
    • PHPicker expansion
      • PHPicker를 쓰면 별도 프롬프트 없이 접근 가능하다.
      • macos와 watchOS에만 존재
    • Private Access Tokens
      • CAPTCHA를 대신하는 물건
      • 웹사이트나 API가 디바이스를 추적하지 않고도 정당한 디바이스임을 인지할 수 있게 하는 것
      • 애플은 어떤 사이트에 접근하기 위해 디바이스가 이걸 요청했는지 모르고, 사이트는 식별 정보가 없는 토큰을 받게 된다.
      • 이는 IETF의 Privacy Pass 표준이고, 애플이 Private relay 인증을 검증하기 위해서 쓰는 도구기도 하다.
    • PassKeys
      • 기존 패스워드의 단점을 보완하기 위한 솔루션
      • password autofill과 같은 UI로 더 좋은 보안을 제공한다.
      • 공개키 암호화 기반으로, 서버는 퍼블릭 키만 가지게 된다.
      • 사이트마다 다른 키를 가지게 되므로 피싱에도 강하다.
  • Safety Check
    • 가정 폭력 등의 상황에서 주변인에게 접근권한을 주었던 것을 회수할 수 있게 하는 기능
      • 데이터 공유 중지(위치, 사진, 메모, 일정 등)
      • 서드파티앱이 가지고 있던 모든 개인정보 권한을 회수
      • 현재 가지고 있지 않은 디바이스의 FaceTime과 iMessage에서 로그아웃 할 수 있음
      • 다른 iCloud 장치에서 로그아웃
      • 암호 변경 기능(디바이스와 iCloud 모두)
      • 신뢰하는 전화번호 목록 리뷰
      • 긴급 통화 목록
    • 사용방법
      • 긴급 초기화 - 긴급한 상황에서 전체초기화
      • 공유 및 접근 관리 - 세밀한 컨트롤