WWDC 2017 & Fall

System Frameworks

Posted by Den on December 08, 2017 · 16 mins read

System Frameworks

🔍 What’s New in Apple Pay & Wallet

  • The Apple Pay experience 
    (카드 등록, 인증 등의 단계가 Apple Pay에서는 한 번에 해결, Indigogo도 250% conversion rate 증가. 따라서 Apple Pay 적용해야 한다.)
  • What’s new with Apple Pay 
    (카드 등록 안되어 있으면 결제 눌렀을 때, 자동으로 카드등록 화면 띄움. 기존 code는 손댈 필요 없음. Error 가 풍부해져서 좀 더 자세한 error를 표시할 수 있음.(결제 전에 주소 등이 format에 맞는지 안맞는지 확인) )
  • What’s new with Wallet 
    (sharingProhibited key가 추가되서 공유 제한 가능. NFC passes 가 추가됨. NFC로 정보 공유 가능)

🔍 Introducing Core NFC

  • Core NFC (NFC Tag Reading, Type 1 ~ 5, iPhone 7부터 )
  • Requirements 
    (Xcode 에서 NFC Capability On, Certificate 갱신, Plist에 Flag 추가 )
  • Integration details (Session is on demand, Foreground mode only, Maximum 60sec of scanning per session, multi tag read operation)

🔍 Best Practices and What’s New in User Notifications

  • Notifications overview 
    (Silence notification은 바로 System으로 전달되지 않고 App으로 감. 즉 바로 나타나지 않음)
  • Hidden content 
    (Privacy 때문에 When Unlocked 가 새로 생김. 잠김화면 Notification UI도 새롭게 변경)
  • Modifying content 
    (Notification Service Extension을 통해서 Video Push 처리에 대한 설명)
  • Customizing rich notifications 
    (Notification Content Extension 이용. Rich Notification에서 UI Custom 제공. ex.Play button 위치, title, content, etc)
  • User input customization 
    (Action button을 Custom 가능. Touch 영역 Custom 가능)

🔍 What’s New in Location Technologies

  • Basics 
    (CNPotalAddresss from a CLPlacemark, 지역 정보 얻어 올때, Localized string으로 얻어옴. Address dictionary methods are deprecated )
  • Heading vs Course 
    (Navigation 동작을 좀 더 정확하게 함. 실내에서도 정확성 올라감 (건물 내부 지도 상세화에 따른 Update로 보임) )
  • Continous Background Location 
    (Watch에서 위치 정보 동의 바로 가능. Watch background에서도 위치 정보 수집 가능)
  • Authorization Modes 
    (21% Always, 79% WhenInUse. 위치정보 동의 Pop에 WhenInUse, Always, Don’t Allow 3개 동시 노출 가능하나 WhenInUse를 먼저 띄우고 → 필요할 때 Always를 띄워야 User가 수긍한다. 처음부터 Always요구하면 취소할 수 있다)
  • Location Usage Indicator 
    (화면 왼쪽 상단, Location icon 상태 표시 rule이 달라짐. 사용자들에게 위치 정보 수집에 대한 오해를 줄이기 위해)

🔍 Advances in Networking Part 1

  • Explicit Congestion Notification (iOS 11에서 좀더 완벽하게 ECN 지원.)
  • IPv6 (v4 보다 속도도 빠르니 이걸 써라 )
  • Networking stack changes 
    (Transport layer 를 User Space로 옮겨서 성능 향상)
  • New Network Extension facilities 
    (NEHotspotConfiguration 추가. 간편히 PopUp 띄워서 wifi 연결 가능. NEDNSProxyProvider 추가)
  • MultiPath protocols for multi path devices 
    (iOS7 Siri에서 이미 사용 중. AWS에서 지원. Code상으로 설명만 해주면 됨)

🔍 Advances in Networking Part 2

  • URLSession Adaptable Connectivity API 
    (waitsForConnectivity를 통해 더 이상 네트워크 상태 수동으로 확인 불필요 )
  • URLSessionTask Scheduling API 
    (Background task 를 위한 earliestBeginDate가 생김. 불필요한 Background task를 방지)
  • URLSession enhancements 
    (ProgressReporting 적용하여 상태 확인. Brotli 지원(15%압축), Public SuffixList 갱신, URLSessionStreamTask Updated & New proxy)
  • Best practice 
    (BSD sockets 사용금지. Network library 사용금지.(Better, CPU, Memory. 상태에 따라 최적화 불가능 해), 업데이트를 위해 Apple API 사용 권장)
  • Ongoing developments 
    (TLS 1.3 규격이 적용될 예정. QUIC(Quick UDP Internet connection) 에 참여 중. Bonjour 추천)

🔍 iOS Configuration and APIs for Kiosk and Assessment Apps

  • Test App 같은 경우, Cheating 방지가 필요하다. 
    (Home Button, Copy, Share, 등등 모든 기능을 Lock)
  • 오직 App에만 머물 수 있게 기능 제공. 딱 App 만 사용

🔍 Privacy and Your Apps

  • UUID, VenderID 설명
  • Info.plist: NSLocationUsageDescription 관련 설명 
    (Location 사용 alert에 안내 문구)
  • iOS 11에서 Location, Photos, NFC (Purpose String Required로 변경)
  • When In User를 Location alert에 같이 띄울 수 있음.
  • Photos, CoreNFC, Microphone-WatchOS, MusicKit 관련 변경
  • SafariViewController Cookie 관련 기능 추가
  • DeviceCheck 
    (각 상태값을 Apple 이 알려줌. VenderID등 여러 가지 조합으로 많은 개발자 들이 Device Check를 하려고 하니 아예 Apple 제공하기로 함. 아직 부족해 보이긴 하나 Google Analytics 같은 곳에서는 눈여겨 볼만한 기능)

🔍 What’s new in Apple File System

  • APFS 로 변환 과정 설명 (File Data는 건들지 않고 Meta Data만 변경)
  • Unicode and APFS (Unicode를 예로 저장 원리 설명)
  • Mac에서 Clone, Sharing, Snapshot, Sparse Files 원리 설명

🔍 Accelerate and Sparse Solvers

  • Accelerate 👍
    - vDSP_vsmul() 이 For 문으로 Float 곱하는 것 보다 훨씬 빠름
    - vDSP_vclip() 이 For 문으로 min(max()) Clip 하는 것 보다 훨씬 빠름
    - cblas_sgemm() 이 For 문으로 Matrix 연산하는 것 보다 훨씬 빠름
  • Compression (LZ4, LZMA, ZLIB, LZFSE 간단 설명 및 Tips)
  • Basic Neural Network Subroutines 
    (High-performance kernels for Machine Learning, BNNS 관련 설명)
  • The sims Module
    - Vector, Matrix 계산을 빠르게 하기 위한 것. Graphics 관련 작업할 때 많이 사용할 듯.
    - Small(fixed-size) vectors and matrices
    - Simplified vector programming
    - Lingua franca for vectors and matrices in the SDK
  • Sparse Matrices (관련 예제 및 사용법)

🔍 Modernizing Grand Central Dispatch Usage

  • Parallelism and concurrency 
    - DispatchQueue.concurrentPerform(100) { i in } 으로 동시에 실행. ObjC 용 DISPATCH_APPLY_AUTO 이용. 사용할 때 bubble 생기지 않게 count 수 잘 정해라 👍
     
    - Lock Contention 설명, Instruments 를 이용한 Multi thread 비효율 구간 잡는 방법 소개
     
    - Lock Ownership 소개 
    (Ownership helps resolve priority inversion), High priority waiter, Low priority owner
  • Using GCD for concurrency 
    - Sync Queue 동작 원리 설명
     
    - Dispatch Source 소개 
    (Event handler executes on target queue, Invalidation pattern with explicit cancellation, initial setup followed by activate)
     
    - Target Queue Hierarchy 
    (Queue를 Tree 구조로 만들고 동작은 Serial queue 처럼 사용함. Context Switch가 일어나지 않아 성능 향상) 👍
     
    - Qos 와 Target Queue Hierarchy를 이용한 예
    - Network multi request 에서 Target Queue Hierarchy 를 이용한 예 👍
  • Unified Queue Identity (작업을 묶을 수 있음. Kernel 에 정보 셋팅이 가능함. 기존에는 cycle이 중간에 끊어질 수 있으나 끊어짐 없이 하나의 Cycle씩 처리 가능)
  • Finding problem spots (mySource.activate() 는 맨 나중에 하기. Instrument 를 통해서 원인 파악 가능)

🔍 Your Apps Evolving Network Security Standards

🔍 Introducing Core ML

  • Image 관련 (Vision), Text 관련(NLP) 사용
  • Music Tagging, Image Captioning 은 Core ML 사용
  • Custom Model 사용할 경우 Accelerate, MPS 이용
  • Core ML Tools을 이용하여 기존 model들 Convert 가능 (Open source)
  • Model은 자동으로 Bundle, Code로 변환
  • Demo 확인. (기존 Model 가져와서 꽃 구분)

🔍 Core ML in Depth

  • Development Flow (Model만 추가하면 알아서 Code, Bundle 로 추가해 줌.)
  • Data type 들 설명. (Text, Image, Video, etc)
  • Demo (실시간 Text 판단하여 감정 측정. Predictive Keyboard 예.)
  • developer.apple.com/machine-learning 에서 Example model 구할 수 있음.
  • Core ML Tool 사용법 및 Demo

🔍 What’s New in Core Bluetooth

  • Introduction 
    - Health care, Fitness, Toy with playground
     
    - Build-in Profiles (Apple Notification Center Service, Apple Media Service, MIDI over Bluetooth Low Energy, iBeacon, Current Time Service, HID Over GATT)
     
    - GATT DataBase 
    ( CBService [CBCharacteristic, CBCharacteristic, CBCharacteristic] )
  • Enhanced reliability 
    - Backgrounded App 
    (Background Modes에서 Uses Bluetooth LE accessories, Acts as a Bluetooth LE accessory 활성화)
     

    - CBCentralManager restoration
     
    - Reading Characteristics as a Central
     Central operations can continue when your app is not running (Scan for new devices with services, Connect to an already known device)
     Peripheral operations can continue when your app is not running (Publish local services, Advertise service UUID)
     
    - State Preservation and Restoration [ NEW ! ]
    Try to ask for as few system resources as possible
     Background activities will be stopped if User force quits the app or User disables Bluetooth
     Write With out response (canSendWriteWithoutResponse, peripheralIsReady 참고)
  • Platform support 
    - macOS 10.7, iOS 5, tvOS 9, watchOS 4
     

    - iOS + macOS 
    (Fore / Back ground apps, Central and Peripheral, 15ms minimum connection interval, State Preservation and Restoration on iOS)
     
    - tvOS (Foreground Only, Central role only, Limited to 2 simultaneous connections, 30ms minimum connection interval, Peripherals disconnected when app is moved to the background)
     
    - watchOS (Access dictated by system runtime policies, Central role only, Limited to 2 simultaneous connections, 30ms minimum connection interval, Peripherals disconnected when app is suspended, Supported on Apple Watch Series 2)
     
    - L2CAP Channels (Firmware update 같은 많은 Data 전송에 적합. Socket 통신 비슷, Sample code 필수 참조 )👍
     Bluetooth SIG Protocol underlying all communication
     Logical Link Control and Adaptation Protocol
     Stream between two devices
     Introduced for LE in Bluetooth Core Spec 4.1
  • Best Practice 
    - Follow the Bluetooth Accessory Design Guidelines for Apple Products (수년간 시행착오를 잘 정리해놨다.)
     
    - Use Existing Profiles and Services (웬만하면 자체 구현하지말아라 )
     
    - Service Discovery Speed ( 속도 올리는데 필수 참고 팁)
     Use as few services/ characteristics as possible
     Group services by UUID size
     Support GATT Caching
     Use “Service Changed” 
     
    - New Accessory Recommendations
     Use the newest chipset / Bluetooth standard available
     4.2, 5.0 are backward compatible
     Follow these best practices

⭐️ Creating Immersive Apps with Core Motion

  • Overview
     ( Accelerometer, Gyroscope, Magnetometer, Altimeter의 모든 정보를 조합해서 CoreMotion framework이 처리 )
  • Authorization 
    - Altimeter, Pedometer, MotionActivityManager, SensorRecoder는 Sensitive, Sensitive 정보들은 한 번 팝업 뜰것임. 
    - CMAuthorizationStatus (notDetermined, restricted, denied, authorized)
  • Historical Accelerometer 
    (50Hz로 3일 까지 기록 가능, 요청은 36시간 까지, iPhone 7, 7+ 추가됨, 딱 필요한 기간만 최소한으로 가져와라! 배터리를 위해)
  • DeviceMotion 
    - 하나의 Sensor 만으로는 Tilt 인지 아닌지 판단이 어려워서 여러 Sensor 정보를 바탕으로 현재 상태를 판별 
    - Reference Frames 
    - xArbitraryZVertical(tip, tilt, gesture) 
    - xArbitraryCorrectedZVertical (aming)
    - xMagneticNorthZVertical & xTrueNorthZVertical (Star gazing, Augmented Reality)
    - Best practice (Check for availability, Reference frame choice is key)
  • Badger with Attitude (Demo 확인)

🔍 Developing Wireless CarPlay Systems

  • Car play 와 통신하는 Flow, 구조, Tip 등 전반적으로 설명 (자동차 개발사 중심으로 설명하나 Bluetooth pairing 관련은 다른 곳에도 적용할 수 있을 듯)

🔍 Enabling Your App for CarPlay

  • Siri, Message, Music, App Delegate, 원리, Best Practice 설명.
  • 기존 iOS 와 구조적으로 다른 점이 있음.

🔍 What’s New in HomeKit

  • Framework updates 
    (Event Triggers 개선, Sunrise, Sunset, Calendar, Range threshold, 사용자가 집에 있는지 없는지, 그룹으로도 추적. WeedDay, WeekEnd 구분, UpdateEvents 추가)
  • Accessory updates 
    (QR Code, NFC 추가, Notification Latency를 줄임, Splinklers, Faucets 추가)
  • 개발자 권한있는 사람에게 HomeKit 개방 (접근 권한 확대)

← Previous Post Next Post