๐ 2020.6.11 (THU)
๐ WWDC2019 | Session : 901 | Category : System Frameworks
๐ https://developer.apple.com/videos/play/wwdc2019/901/
๐ Learn how to adopt privacy-enhancing changes in Core Bluetooth. Discover new possibilities with LE 2Mbps, advertising extensions, BR/EDR, and dual-mode devices. Understand how to debug your Core Bluetooth communication with the improvements to PacketLogger.
์ด๋ฒ ํด์ Core Bluetooth ๊ฐ BR/EDR ๋๋ฐ์ด์ค๋ฅผ ์ง์ํ๋๋ก ์ถ๊ฐ ๋์๋ค.
Core Bluetooth ๊ฐ ์ด๋ค transport ์์ ์๋ ๋๋์ง์ ์๊ด ์์ด ๋ชจ๋ Bluetooth ๋๋ฐ์ด์ค์ ๋๋ฌํ๊ณ ์ํธ์์ฉ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธ ํ๋ค.
- New feature in Bluetooth 5.0
- Physical layer rate increased from 1 Mbps to 2Mpbs between compatible devices โ Core Bluetooth ๊ฐ ๊ฐ์ airtime ์ ๋๋ฐฐ๋ฅผ ์ ์ก ํ ์ ์๊ฒ ๋์๋ค.
- Faster and more power efficient connection
- Transparent to the application
- Accessories must support LE 2 Mbps
- Available starting with iPhone 8, Apple TV 4K, Apple Watch Series 4
- Bluetooth 5.0 feature
- ์์ payload๋ฅผ ์ ์กํจ์ผ๋ก์จ 3 ๊ฐ์ advertising channel ์ ํผ์ก๋๋ฅผ ์ค์๋ค.
- ๋ ํฐ payload๋ฅผ ์ ์กํ๊ธฐ ์ํด ๋ ๋์ data channel๋ก ๋ณด๋ธ๋ค.
- 31์์ 255byte ๋ก ์์นํ๊ณ , LE์์ ์ ์ก ๋น์จ์ด 2 Mbps ์ด๋ค.
-
Scans for extended advertisements
-
Accessories must support extended advertisements with LE 2 Mbps
-
Support extended advertisement payload up to 124 bytes
-
4 times that advertisement data that an accessory can send today
-
Transparent to application
-
New API to query for platform support
class func supports(_ features: CGCentralManager.Feature) -> Bool static var extendedScanAndConnect: CGCentralManager.Feature { get }
-
Supports connections to connectable extended advertisements
-
Improves existing connection exchange protocol
- Advertiser ๋ ์ฐ๊ฒฐ ๊ฐ๋ฅํ advertisement ๋ฅผ ํต์ง
- Scanner ๊ฐ ์ฐ๊ฒฐ์ ์ํ๋ค๋ฉด connection identification ์ ์ก
- ACK ๋ ์์
- Scanner ๋ connection indication ์ด advertiser์๊ฒ ๋๋ฌํ๋ค๊ณ ๊ฐ์
- host processor ์๊ฒ ์๋ก์ด connection์ด ์๋ค๊ณ ์๋ ค์ค
ํ์ง๋ง RF characteristic ์ด ์๋ก ๋ค๋ฅผ ์ ์๊ณ RF environment ๊ฐ ๋งค์ฐ ๋์ ์ด๊ธฐ ๋๋ฌธ์connection indication ์ด advertiser ์๊ฒ ๋์ฐฉํ์ง ๋ชปํ ์ ๋ ์์
โ ์ด ๊ณผ์ ๋ค์ด ๋ฒ ํฐ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์๋ชจํ๊ฒ ํจ
- Advertiser ๋ ์ฐ๊ฒฐ ๊ฐ๋ฅํ extended advertisement ๋ฅผ ํต์ง
- Scanner ๋ connection request ๋ฅผ ์ ์ก ๊ฐ๋ฅ
- Advertiser ๋ explicit connection response ๋ฅผ ์ ์ก
- Scanner ๊ฐ connection response ๋ฅผ ๋ฐ์์ ๋๋ง ์๋ก์ด connection์ด ์๋ค๊ณ host processor ๋ฅผ ๊นจ์
- connection ์ด link layer negotiation ๋ค์ ์๋ต ํ๊ณ LE 2 Mbps ๋ก ์์ ํ ์ ์์
GATT
- hierach-based ์ธ Bluetooth SIG ํ๋กํ ์ฝ
- service ์ characteristics ๋ก ๊ตฌ์ฑ
- read, write, characteristics ์ ๋ณํ์ ๋ํ ๋ ธํฐ๊ฐ ๋งค์ฐ ์ฌ์
System profile ์ด๋ audio, A2DP, HFP remote-control profile ๋ค์ ์์คํ ์์ ์๋ ์ํจ๋ค.
๋ฐ๋ ์ชฝ์์ Low Energy์ ๊ฒฝ์ฐ Core Bluetooth ๋ฅผ GATT ์์์ ๊ตฌ๋ํ๊ณ , ๊ทธ ํ๋ ์์ํฌ๋ฅผ accessories ์์ interface๋ก ์ฌ์ฉ ํ๋ค.
๋ layer ๋ฅผ ํฉ์ณค๊ณ , ์ด์ BR/EDR ๊ณผ Low Energy ๋ชจ๋ transparent access ๊ฐ๋ฅํ๋ค.
API ์ ๋ง์ ๋ณํ ์์ด classic devices ์ low energy device ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๊ฒ์ด๋ค.
- Use Core Bluetooth with BR/EDR Bluetooth devices
- Bluetooth SIG GATT protocol running over BR/EDR
- Same CBPeripheral APIs
- New API in CBCentralManager
- Available today with latest iOS, watchOS, tvOS
- Add support to your accessory
connection events ๋ฅผ ๋ฑ๋ก ํ๊ธฐ ์ํ API
Initialization
private var central: CBCentralManager!
central = CBCentralManager(delegate: self, queue: nil)
Registration
let matchingOptions = [CGConnectionEventMatchingOption.serviceUUIDs : [myServiceUUID]]
central.registerForConnectionEvents(options: matchingOptions)
Discover
Connect / Pair
Delegate Callback
// Connection Event
func centralManager(_ central: CBCentralManager,
connectionEventDidOccur event: CGConnectionEvent,
for peripheral: CBPeripheral_ {
// Handle connection event
}
Connection Out
private var central: CBCentralManager?
central = CBCentralManager(delegate: self, queue: nil)
central?.connect(myPeripheral, option: nil)
BR/EDR Page
Connected
์ ์ ๊ฐ ๋ธ๋ฃจํฌ์ค ๋ฐ๊ฒฌ๊ณผ ํ์ด๋ง ์ ์ฒด๋ฅผ ์ ์ด๋ฅผ ์ํ ๋, ๋์ ์ฑ ๊ฒฝํ์ ๋ฐฉํดํ๋ ๋ธ๋ฃจํฌ์ค ์ค์ ์ ๊ฐ์ inquiry scan ์ ํ๋ ๋์ ์, ์ก์ธ์๋ฆฌ๋ก ๋ถํฐ low energy scan ์ ์ฐพ์ ์ ์๋ค.
๋ง์ฝ ๋๋ฐ์ด์ค๋ฅผ ์ฐพ์๋ค๋ฉด, LE ๋ฅผ ํตํด ์ฐ๊ฒฐ ํ๊ณ protective characteristic ์ ์ ๊ทผ ํ ์ ์๋ค.
์ผ๋จ ํ์ด๋ง์ด ๋๋ฉด, CTKD ๋ก ์ธํด LE key ๋ฅผ ๊ฐ๊ฒ ๋๊ณ , BR/EDR key ๋ํ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ด๊ฒ์ ์ด์ ๋๊ฐ ์ ์ ๋ฅผ ํผ๋์ค๋ฝ๊ฒ ํ๋ ํ์ด๋ง์ ํธ๋ฆฌ๊ฑฐ ํ ํ์ ์์ด, ์ฑ์์ ์ ์ฒด ๊ฒฝํ์ ํ ์ ์๋๋ก ๋จธ๋ฌผ๋ฉด์ BR/EDR ์ฐ๊ฒฐ์ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
ํ ์ค๋์ค ๋๋ฐ์ด์ค๋ฅผ ์๋ก ์ถ์ ํ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ๋๋ฐ์ด์ค๋ ๋ฎค์ง ์ด๋ ํ์บ์คํธ ๊ฐ์ ๋ฏธ๋์ด๋ฅผ ์ฑ์ ํตํด ์ฐ๊ฒฐ ํ๋ค๋ฉด ์ข์ ๊ฒ์ด๋ค.
iOS ๋ BR/EDR ์ด๋ผ๋ ์ฑ๋์ ๋ง๋ค์ด ์ค ๊ฒ์ด๋ค.
BR/EDR Connection์ ์ ๋ฌ ํ๋ฉด, low energy ๋ฅผ ํตํด ๋๋ฐ์ด์ค์ ์ฐ๊ฒฐํ๊ณ , ๋ง์ฝ ๋ฐ๊ฒฌํ๋ฉด ์ฆ์ BR/EDR ์ ํตํด ๊ฐ๋ฅํ ๋ง์ profile ๊ณผ ์ฐ๊ฒฐ ํ ๊ฒ์ด๋ค.
์ ์ ๋ ๋๊น ์์ด ๋ชจ๋ ๋ฉํฐ๋ฏธ๋์ด profile ์ ์ฌ์ฉ ํ ์ ์๊ฒ ๋๋ค.
- User authorization
- Accessory notifications
- ์ ์ ์๊ฒ ๋์ ์ฑ์ด ์ ๋ธ๋ฃจํฌ์ค์ ์ ๊ทผ์ด ํ์ํ์ง ์ ๋ฌํด์ผ ํ๋ค.
- ๊ทธ๊ฒ์ ์๋ฌด์ ์ธ String ์ด๊ณ ์ ์ฉํ์ง ์๋๋ค๋ฉด ์ฑ์ด ์คํ ํ ๋ ํฌ๋์๊ฐ ๋๋ค.
- ์ฑ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค์์ ๋ชจ๋ description ์ด ๋น์ด์์ง ์๊ณ ์๋ฏธ ์๋์ง ํ์ธ ํ๋ค.
New property
var authorization: CBManagerAuthorization { get }
enum CBManagerAuthorization: Int {
init?(rawValue: Int)
var rawValue: Int { get }
case notDetermined
case restricted
case denied
case allowedAlways
}
Flow
func centralManagerDidUpdateState(_ central: CBCentralManager)
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager)
open var state: CBManagerState { get }
// if ( state == CBManagerState.unauthoized)
open var authorization: CBManagerAuthorization { get }
- Apple Notification Center Service (ANCS)
- GATT server servcie
- Allows accessories to receive notifications from iOS
public let CBConnectPeripheralOptionRequiresANCS: String
optional func centralManager(_central: CGCentralManager, ddidUpdateANCSAuthorizationFor
peripheral: CBPeripheral)
open var ancsAuthorized: Bool { get }
- Bluetooth packet analysis application
- Visualizer for packet logs inside sysdiagnose
- Decode all protocols defined by Bluetooth SIG and Apple
- Rich filtering options
- Search by text or regex
- Comment and flag packets
- Export raw data for analysis
ACI, ATT ํ๋กํ ์ฝ๋ง ํํฐ๋ง ํ ์ ๋ ์๊ณ , ๋๋ฅด๋ฉด ๊ฐ๊ฐ์ ํจํท์ ๋ํด ์ ์ฒด ํ๋กํ ์ฝ ๊ณ์ธต์ ๋ณผ ์๋ ์๋ค.
raw bytes ๊น์ง ๊ฐ๊ฐ์ ํ๋กํ ์ฝ์ ๋ณผ ์ ์๋ค
๋งฅ์ ์ฐ๊ฒฐ ๋ iOS ๋๋ฐ์ด์ค์ login profile ์ ์ค์นํ๊ณ , PacketLogger ์ ์คํ ํ๋ฉด, iOS ๋๋ฐ์ด์ค์์ ์ก์ธ์๋ฆฌ๋ก live Bluetooth traffic ์ capture ํ ์ ์๋ค. ๋ํ ์ฌ๋ฌ๊ฐ์ iOS ๋๋ฐ์ด์ค๋ฅผ ์ฐ๊ฒฐ ํ ์๋ ์๋ค.