Core Bluetooth란 BLE 기기들과 통신을 하기 위한 프레임워크입니다.
Core Bluetooth 프레임워크는 앱와 저전력 블루투스 장비들과 통신할 수 있도록 해줍니다. Core Bluetooth를 사용할 때 Core Bluetooth 프레임워크의 서브 클래스들을 오버라이딩하면 에러가 발생할 수 있으므로 하지 않습니다.
중요
Info.plist에서 설정을 해주지 않는다면 앱은 에러가 발생할 것입니다. Core Bluetooth API를 사용하기 위해서는 iOS 13 이후로는 NSBluetoothAlwaysUsageDescription 키를 iOS 12 이전으로는 NSBluetoothPeripheralUsageDescription 을 설정하여 블루투스의 peripheral 데이터에 접근할 수 있습니다.
알아야할 용어, 클래스 및 프로토콜
Central
Centrals
Centrals는 블루투스(Bluetooth) 통신에서 중앙(Central) 장치를 가리킵니다. 중앙 장치는 데이터를 요청하고 수신하는 기기로, 일반적으로 스마트폰, 태블릿, 노트북 등이 해당됩니다. 중앙 장치는 주변 장치(Peripheral)와 통신하여 데이터를 송수신하거나 제어하는 역할을 담당합니다. 중앙 장치는 주변 장치와 연결하고 데이터를 주고받을 수 있는 능력을 가지며, Bluetooth Low Energy (BLE)와 같은 저전력 Bluetooth 프로필에서는 주로 센서, 웨어러블 장치, 헬스케어 장치 등에서 사용됩니다. 중앙 장치는 다수의 주변 장치와 연결할 수 있으며, 데이터를 수집하거나 제어하기 위해 주변 장치와 지속적으로 통신합니다. Bluetooth 통신에서 중앙 장치를 지칭하는 용어입니다.
CBCentral
class CBCentral: 주변 장치 역할을 하는 로컬 앱에 연결된 peripheral를 다루는 원격 장치(master)입니다.
- 원격 central은 NSUUID 객체로 대표되는 보편적으로 고유한 식별자(UUID)를 사용하여 자신을 식별합니다.
var maximunUpdateValueLenght: Int: 중앙이 단일 알림이나 표시로 받을 수 있는 최대 데이터 양(바이트)
CBCentralManager
class CBCentralManager: 블루투스 기기를 탐색하고 연결 및 관리하는 객체입니다.
- CBCentralManager 메서드를 호출하기 전에 블루투스가 켜진 상태여야합니다.
Central Manager 객체 초기화해서 만들기
init( )
: central manager를 delegate 없이 선언init(delegate: (any CBCentralManagerDelegate)?, queue: dispatch_queue_t?)
: central manager를 명시된 delegate와 dispatch queue와 함께 선언init(delegate: (any CBCentralManagerDelegate)?, queue: dispatch_queue_t?, options: [String : Any]?)
: central manager를 명시된 delegate와 disptach queue와 초기화 options를 사용하여 초기화
central manager를 초기화할 때 사용하는 options 종류 let CBCentralManagerOptionShowPowerAlertKey: String : 블루투스 서비스를 사용할 수 없을 때 앱이 central manager를 인스턴스화하는 경우 시스템이 사용자에게 경고하는지 여부를 지정하는 bool 값. let CBCentralManagerOptionRestoreIdentifierKey: String : central manager가 인스턴스화할 수 있는 고유 식별자(UID)를 포함하는 문자열.
central manager를 초기화할 때 사용하는 상태 복원 options 종류
let CBCentralManagerRestoredStatePeripheralsKey: String
: central manager의 상태를 복구할 때 peripheral들이 포함된 배열
let CBCentralManagerRestoredStateScanServicesKey: String
: 상태를 복구할 때 사용되는 service ID들이 포함된 배열
let CBCentralManagerRestoredStateScanOptionsKey: String
: 상태를 복구할 때 사용할 수 있는 주변 스캔 option인 딕셔너리.
기기와 연결, 연결 헤제
func connect(CBPeripheral, options: [String : Any]?)
: peripheral 기기와 연결
- peripheral: 연결하고자하는 peripheral
- options: 연결할 때 설정하는 옵션
func cancelPeripheralConnection(CBPeripheral)
: 연결된 기기와 연결을 해제
peripheral 연결할 때 사용하는 option 키값 종류
let CBConnectPeripheralOptionEnableAutoReconnect: String
: 시스템이 peripheral과 자동으로 재연결 할 것인지를 결정하는 Bool 값
let CBConnectPeripheralOptionEnableTransportBridgingKey: String
: BLE를 통해 이미 연결된 경우, 고전적인 블루투스 기술 프로필을 연결하는 옵션.
let CBConnectPeripheralOptionNotifyOnConnectionKey: String
: 백그라운드에서 peripheral과 연결하고 있을 때 시스템이 화면에 alert를 표시할 것인지를 결정하는 Bool 값
let CBConnectPeripheralOptionNotifyOnDisconnectionKey: String
: 백그라운드에서 peripheral과 연결이 끊어질 때 시스템이 화면에 alert를 표시할 것인지를 결정하는 Bool 값
let CBConnectPeripheralOptionNotifyOnNotificationKey: String
: peripheral으로부터 알림을 받았을 때 시스템이 화면에 alert를 표시할 것인지를 결정하는 Bool 값
let CBConnectPeripheralOptionRequiresANCS: String
: 기기와 연결할 때 Apple Notification Center Service (ANCS) 옵션이 필요할 때 사용
let CBConnectPeripheralOptionStartDelayKey: String
: 시스템이 연결을 하기 전에 딜레이를 명시하도록 하는 옵션 (해당 값은 지연 기간을 초 단위로 나타내는 NSNumber입니다)
찾은 기기들 확인
func retrieveConnectedPeripherals(withServices: [CBUUID]) -> [CBPeripheral]
: 연결된 peripheral들의 리스트를 제공
func retrievePeripherals(withIdentifiers: [UUID]) -> [CBPeripheral]
: peripheral들의 UUID 리스트를 반환
기기 탐색
func scanForPeripherals(withServices: [CBUUID]?, options: [String : Any]?)
: 서비스를 advertising하고 있는 기기들을 탐색
- withServices: nil로 설정하면 모든 기기를 탐색, 또는 특정 기기를 탐색할 때 사용
- options: 탐색할 때 설정하는 옵션
기기 탐색할 때 사용하는 옵션
let CBCentralManagerScanOptionAllowDuplicatesKey: String
: 중복 필터링 없이 스캔이 수행될 것인지를 결정하는 Bool 값
let CBCentralManagerScanOptionSolicitedServiceUUIDsKey: String
: 스캔으로부터 찾고싶은 service UUID들이 포함된 배열
기기 탐색 중단
func stopScan()
: central manager가 기기 탐색을 중단
var isScanning: Bool
: 현재 기기를 탐색하는지를 나타내는 Bool 값
특성 지원 확인
class func supports(CBCentralManager.Feature) -> Bool
: 기기가 특정 특성의 set을 지원하는지에 대한 Bool 값
struct CBCentralManager.Feature
: 기기의 특정 특성 옵션 종류
프로퍼티 모니터링
var delegate: (any CBCentralManagerDelegate)?
: central manager에 이벤트를 수신받고자 하는 delegate
연결 이벤트 수신
func registerForConnectionEvents(options: [CBConnectionEventMatchingOption : Any]?)
: 설정한 옵션으로 기기와 연결됐을 때 이벤트 알림을 등록
enum CBConnectionEvent
: 피어의 연결 상태에 대한 변화
struct CBConnectionEventMatchingOption
: 연결 이벤트에 등록할 때 사용할 옵션 세트
다음과 같은 키값들이 기기와의 연결에 사용되었을 때 이벤트가 발생하도록 등록
peripheral 연결할 때 사용하는 option 키값 종류
let CBConnectPeripheralOptionEnableAutoReconnect: String
: 시스템이 peripheral과 자동으로 재연결 할 것인지를 결정하는 Bool 값
let CBConnectPeripheralOptionEnableTransportBridgingKey: String
: BLE를 통해 이미 연결된 경우, 고전적인 블루투스 기술 프로필을 연결하는 옵션.
let CBConnectPeripheralOptionNotifyOnConnectionKey: String
: 백그라운드에서 peripheral과 연결하고 있을 때 시스템이 화면에 alert를 표시할 것인지를 결정하는 Bool 값
let CBConnectPeripheralOptionNotifyOnDisconnectionKey: String
: 백그라운드에서 peripheral과 연결이 끊어질 때 시스템이 화면에 alert를 표시할 것인지를 결정하는 Bool 값
let CBConnectPeripheralOptionNotifyOnNotificationKey: String
: peripheral으로부터 알림을 받았을 때 시스템이 화면에 alert를 표시할 것인지를 결정하는 Bool 값
let CBConnectPeripheralOptionRequiresANCS: String
: 기기와 연결할 때 Apple Notification Center Service (ANCS) 옵션이 필요할 때 사용
let CBConnectPeripheralOptionStartDelayKey: String
: 시스템이 연결을 하기 전에 딜레이를 명시하도록 하는 옵션 (해당 값은 지연 기간을 초 단위로 나타내는 NSNumber입니다)
CBCentralManagerDelegate
protocol CBCentralManagerDelegate: 블루투스 기기를 발견, 연결 및 검색에 관한 delegate 함수들을 제공합니다.
- delegate 함수는 이벤트가 발생하면 자동으로 콜백되는 함수입니다.
- CBCentralManagerDelegate를 사용하기 위해서는 centralManagerDidUpdateState(_:)를 완성해야 합니다. centralManagerDidUpdateState는 현재 central manager의 가용 상태를 의미합니다.
기기와의 연결을 모니터링
func centralManager(CBCentralManager, didConnect: CBPeripheral)
: central manager가 기기와 연결되었다고 delegate에 전달
func centralManager(CBCentralManager, didDisconnectPeripheral: CBPeripheral, error: (any Error)?)
: central manager가 기기와 연결해제되었다고 delegate에 전달
func centralManager(CBCentralManager, didFailToConnect: CBPeripheral, error: (any Error)?)
: 기기와 연결이 실패하였다고 delegate에 전달
func centralManager(CBCentralManager, connectionEventDidOccur: CBConnectionEvent, for: CBPeripheral)
: 등록한 옵션과 일치하는 연결 이벤트 발생을 delegate에 전달
기기를 발견, 불러오기
func centralManager(CBCentralManager, didDiscover: CBPeripheral, advertisementData: [String : Any], rssi: NSNumber)
: central manager가 기기를 찾았음을 delegate에 전달
Central Manager의 상태 모니터링
func centralManagerDidUpdateState(CBCentralManager)
: central manager의 상태가 업데이트 되었음을 delegate에 전달
func centralManager(CBCentralManager, willRestoreState: [String : Any])
: 시스템이 앱을 백그라운드로 재실행하여 central manager를 복구할 것이라고 delegate에 전달
Central Manager의 권한 모니터링
func centralManager(CBCentralManager, didUpdateANCSAuthorizationFor: CBPeripheral)
: ANCS가 필요한 연결된 기기에 대한 인증 상태가 변경되었는지 delegate에 전달
Peripherals
Peripherals
Peripherals(페리퍼럴)란 Bluetooth 통신에서 중앙(Central) 장치와 통신하기 위해 대기하고 있는 외부 장치를 의미합니다. 이러한 외부 장치들은 주로 센서, 웨어러블 기기, 헬스케어 장치, 스마트 홈 장치 등 다양한 유형의 무선 기기입니다. 중앙 장치(Central Device)는 페리퍼럴 장치를 탐색하고 연결하며, 데이터를 요청하고 수신하는 역할을 합니다. 페리퍼럴 장치는 일반적으로 광고 패킷(Advertisement Packet)을 통해 자신의 존재를 알리며, 중앙 장치가 해당 광고를 감지하면 연결을 시도합니다. 예를 들어, 스마트폰이 중앙 장치로 동작하여 주변에 있는 페리퍼럴 장치들을 찾고 연결할 수 있습니다. 이후에는 중앙 장치에서 페리퍼럴 장치로 데이터를 요청하고 페리퍼럴 장치가 응답하는 방식으로 통신이 이루어집니다. 페리퍼럴 장치는 중앙 장치와의 연결을 기다리는 동안 저전력 상태로 대기하며, 필요할 때까지 광고를 계속합니다. 이는 페리퍼럴 장치가 배터리 수명을 효율적으로 관리할 수 있도록 합니다. 요약하면, 페리퍼럴은 Bluetooth 통신에서 중앙 장치와 통신하기 위해 대기하고 있는 외부 장치로, 주변에 있는 다양한 무선 기기를 나타냅니다.
CBPeripheral
class CBPeripheral: CBCentralManager 인스턴스로 발견하는 원격 블루투스 장치를 나타냅니다.
- peripheral는 한개 또는 여러개의 서비스들을 포함하여 peripheral에 관한 유용한 정보를 제공하는데 CBPeripheral 클래스는 이런 서비스들을 발견, 탐색, 상호작용할 수 있게 합니다.
- 예를 들어 심박수 모니터 서비스는 심장 관련 데이터를 센서로 받아오는데 여기서 서비스는 한개 또는 여러개의 특성값을 가질 수 있습니다.
peripheral 식별
var name: String?
: peripheral 이름
var delegate: (any CBPeripheralDelegate)?
: peripheral의 이벤트를 받도록 명시된 delegate 객체
서비스 탐색
func discoverServices([CBUUID]?)
: peripheral의 명시된 서비스들을 탐색
func discoverIncludedServices([CBUUID]?, for: CBService)
: 이전에 발견된 서비스의 지정된 포함된 서비스를 발견
var services: [CBService]?
: peripheral들의 서비스들의 리스트
특성들과 서술자 발견
func discoverCharacteristics([CBUUID]?, for: CBService)
: 서비스의 명시된 특성을 발견
func discoverDescriptors(for: CBCharacteristic)
: 특성의 서술자를 발견
특성값과 서술자 읽기
func readValue(for: CBCharacteristic)
: 명시된 특성의 값 가져오기
func readValue(for: CBDescriptor)
: 명시된 특성 서술자가 누구인지 가져오기
특성과 서술자 값 쓰기
func writeValue(Data, for: CBCharacteristic, type: CBCharacteristicWriteType)
: 특성의 값 쓰기
func writeValue(Data, for: CBDescriptor)
: 특성 서술자 값 쓰기
func maximumWriteValueLength(for: CBCharacteristicWriteType) -> Int
: 특성에 전송할 수 있는 싱글 쓰기 타입의 데이터의 최대 크기(바이트로)
enum CBCharacteristicWriteType
: 특성의 값에 대한 가능한 쓰기 유형을 나타내는 값
: withResponse: 특성값을 쓸 때 peripheral으로부터 성공적으로 특성값이 쓰였는지를 알려주는 응답을 받을 것으로 설정
: withoutResponse: 특성값을 쓸 때 peripheral으로부터 성공적으로 특성값이 쓰였는지를 알려주는 응답을 받지 않을 것으로 설정
- 특성의 값을 쓰기 위해 이 메서드를 호출할 때, peripheral는 쓰기 유형을 CBCharacteristicWriteType.withResponse로 지정한 경우에만 delegate 객체의 peripheral(_:didWriteValueFor:error:) 메서드를 호출합니다.
특성의 값을 위한 알림 설정
func setNotifyValue(_ enabled: Bool, for: CBCharacteristic)
: 특성에 명시된 값에 알림 또는 표시를 설정, 구독
: enabled를 true로 설정하면 characteristic 값이 변화할 때 알림 또는 표시, false로 설정하면 값이 변화해도 무시
: 만일 true로 설정하고 값이 변했을 때 peripheral(_:didUpdateNotificationStateFor:error:) 를 delegate 객체를 통해 실행합니다
: 만일 성공적으로 위에 메서드가 실행되었다면 peripheral(_:didUpdateValueFor:error:)를 delegate 객체를 통해 값이 변화할 때마다 콜백합니다.
Peripheral의 연결 상태를 모니터링
var state: CBPeripheralState
: peripheral의 연결 상태
enum CBPeripheralState
: peripheral의 연결 상태를 나타내는 값 (disconnected, connecting, connected, disconnecting)
var canSendWriteWithoutResponse: Bool
: 원격 기기가 쓰기 전송을 응답없이 수행할 수 있는지에 대한 값
Peripheral의 연결 신호에 접근
func readRSSI()
: 연결 신호 강도를 나타내는 RSSI 값을 반환
CBPeripheralDelegate
protocol CBPeripheralDelegate: 연결된 블루투스 장비의 서비스들에 대한 delegate 함수들을 제공하는 프로토콜입니다.
- delegate 함수는 이벤트가 발생하면 자동으로 콜백되는 함수입니다.
- 추가적인 필수 메서드는 존재하지 않습니다.
서비스 찾기
func peripheral(CBPeripheral, didDiscoverServices: (any Error)?)
: peripheral 서비스를 성공적으로 찾았을 때 delegate에 전달
func peripheral(CBPeripheral, didDiscoverIncludedServicesFor: CBService, error: (any Error)?)
: 표시된 서비스 내에서 포함된 서비스를 발견하는 것이 완료되었다고 delegate에 전달
특성과 서술자들 발견
func peripheral(CBPeripheral, didDiscoverCharacteristicsFor: CBService, error: (any Error)?)
: peripheral이 서비스의 특성을 발견했다고 delegate에 전달
func peripheral(CBPeripheral, didDiscoverDescriptorsFor: CBCharacteristic, error: (any Error)?)
: peripheral이 특성과 서술자를 발견했다고 delegate에 전달
특성과 서술자 값을 가져오기
func peripheral(CBPeripheral, didUpdateValueFor: CBCharacteristic, error: (any Error)?)
: 명시한 특성의 값을 성공적으로 가져오거나 특성의 값이 바뀌었을 때 delegate에 전달
func peripheral(CBPeripheral,didUpdateValueFor: CBDescriptor,error: (any Error)?)
: 명시한 특성 기술자의 값을 성공적으로 가져왔을 때 delegate에 전달
특성과 서술자 값 쓰기
func peripheral(CBPeripheral, didWriteValueFor: CBCharacteristic, error: (any Error)?)
: peripheral이 성공적으로 특성의 값을 설정했을 때 delegate에 전달
func peripheral(CBPeripheral, didWriteValueFor: CBDescriptor, error: (any Error)?)
: perpheral이 성공적으로 서술자의 값을 설정했을 때 delegate에 전달
func peripheralIsReady(toSendWriteWithoutResponse: CBPeripheral)
: peripheral이 특성의 값을 업데이트할 수 있을 때 delegate에 전달
특성 값에 대한 알림 관리
func peripheral(CBPeripheral, didUpdateNotificationStateFor: CBCharacteristic, error: (any Error)?)
: peripheral이 지정된 특성의 값에 대한 알림을 시작하거나 중단하라는 요청을 받았다고 delegate에 전달
Peripheral의 RSSI 데이터 가져오기
func peripheral(CBPeripheral, didReadRSSI: NSNumber, error: (any Error)?)
func peripheralDidUpdateRSSI(CBPeripheral, error: (any Error)?)
: peripheral의 현재 수신 신호 강도 표시기(RSSI)의 값을 검색하는 것이 성공했다고 delegate에 전달
Peripheral의 이름 또는 서비스의 변화 모니터링
func peripheralDidUpdateName(CBPeripheral)
: peripheral의 이름이 바뀌었다고 delegate에 전달
func peripheral(CBPeripheral, didModifyServices: [CBService])
: peripheral의 서비스가 바뀌었다고 delegate에 전달
CBPeripheralManager
class CBPeripheralManager: 앱에 의해 노출된 블루투스 기기의 서비스를 관리하고 advertises하는 객체입니다.
- CBPeripheralManager 메서드를 호출하기 전에 블루투스가 켜져있어야 합니다
protocol CBPeripheralManagerDelegate: 연결된 블루투스 기기의 상태와 상호 작용에 대한 정보를 제공하는 프로토콜입니다.
class CBAttribute: 블루투스 기기로부터 제공받은 서비스에 대한 공통적인 속성을 표현하는데 사용됩니다.
struct CBAttributePermissions: 특성의 값을 읽고 쓰는 권한 및 암호화에 대한 값을 나타내는 열거형(Enum)입니다.
Service
Services
Services는 Bluetooth Low Energy (BLE) 통신에서 사용되는 중요한 개념 중 하나입니다. BLE 장치는 서비스(Service)를 제공하여 특정 기능이나 특성을 나타냅니다. 이 서비스는 주로 특정한 데이터나 동작을 캡슐화하고 제공합니다. 여러 서비스가 하나의 BLE 장치에 존재할 수 있으며, 각 서비스는 고유한 서비스 UUID(범용 고유 식별자)를 가지고 있습니다. 이러한 서비스는 다양한 BLE 프로파일(profile)에 따라 정의될 수 있습니다. 예를 들어, 심박수 모니터 장치는 심박수 측정 서비스를 제공하고, 환경 센서 장치는 온도 및 습도 측정 서비스를 제공할 수 있습니다. 각 서비스는 하나 이상의 특성(Characteristic)으로 구성됩니다. 이러한 특성은 해당 서비스의 특정 데이터를 나타냅니다. 서비스의 특성은 읽을 수 있거나 쓸 수 있을 뿐만 아니라 알림(Notification)이나 인디케이션(Indication)을 통해 변경 사항을 알리는 데 사용될 수도 있습니다. 따라서 서비스는 BLE 장치가 제공하는 기능이나 특성을 정의하고, 특성은 해당 서비스의 데이터를 나타냅니다. 서비스와 특성을 통해 BLE 장치 간의 효율적인 통신 및 데이터 교환을 가능하게 합니다.
CBService
class CBService: 클래스는 디바이스의 기능 또는 특성을 수행하는 데이터와 관련된 동작의 모음입니다.
서비스 식별
var peripheral: CBPeripheral?
: 서비스가 존재하는 peripheral
var isPrimary: Bool
: 서비스가 우선순위인지 아닌지 Bool 값
서비스 데이터에 접근
var characteristics: [CBCharacteristic]?
: 서비스에서 발견된 특성들 리스트
var includedServices: [CBService]?
: 서비스에 안에 포함되어 있는 서비스들
CBMutableService
class CBMutableService: 특성 값을 변경 가능한 서비스를 나타냅니다.
새로운 변경 가능한 서비스 만들기
init(type: CBUUID, primary: Bool)
: UUID와 서비스 유형으로 지정된 새로 초기화된 변경 가능한 서비스를 만듭니다.
변경 가능한 서비스 관리
var characteristics: [CBCharacteristic]?
: 서비스의 특성들을 나타내는 리스트
var includedServices: [CBService]?
: 포함되어 있는 서비스들
CBCharacteristic
class CBCharacteristic: 블루투스 기기의 서비스에 속한 특성을 나타냅니다. 특성은 특정한 데이터 값을 나타내며, 해당 데이터의 읽기 및 쓰기 권한 설정을 포함합니다. 예를 들어, 심박수 모니터의 서비스에는 심박수 측정값을 나타내는 특성이 있을 수 있습니다.
- 특성은 하나의 값과 서술자를 나타내는 숫자를 포함하고 있습니다
- CBChrarcteristic 프로퍼티들은 특성의 값을 어떻게 사용하고 서술자 값에 접근하는지 결정합니다.
특성 식별
var service: CBService?
: 특성이 포함되어 있는 서비스
특성 데이터에 접근
var value: Data?
: 특성의 값
var descriptors: [CBDescriptor]?
: 특성에서 발견된 서술자들을 포함한 리스트
var properties: CBCharacteristicProperties
: 특성의 프로퍼티들
struct CBCharacteristicProperties
: 가능한 특성의 프로퍼티들을 나타내는 값
var isNotifying: Bool
: 특성이 현재 구독된 Central에 그 값을 알리고 있는지 여부를 나타내는 Bool 값
var isBroadcasted: Bool
: 특성을 서비스가 홍보하고 있는지를 나타내는 Bool 값
CBMutableCharacteristic
class CBMutableCharacteristic: 블루투스 기기의 변경 가능한 특성을 나타냅니다.
- peripheral 서비스의 특성을 나타냅니다
- 이 클래스를 사용하여 특성을 만들고 원하는 대로 속성과 권한을 설정합니다.
- 로컬 서비스에 특성을 만들고 추가한 후, CBPeripheralManager 클래스의 add(_:) 메서드를 사용하여 peripheral의 로컬 데이터베이스에 게시할 수 있습니다.
- 특성을 게시한 후에는 코어 블루투스는 특성을 캐시하고 변경할 수 없습니다.
변경 가능한 특성 관리
var value: Data?
: 특성의 값
var descriptors: [CBDescriptor]?
: 특성의 서술자들을 포함한 배열
var properties: CBCharacteristicProperties
: 특성의 프로퍼티들
var permissions: CBAttributePermissions
: 특성 값에 허가 (readable, writeable, readEncryptionRequired, writeEncryptionRequired)
struct CBAttrbutePermissions
: 특성의 값에 대한 읽기, 쓰기 및 암호화 권한을 나타내는 값
var subscribedCentrals: [CBCentral]?
: 현재 구독되어 있는 특성의 값의 central들 리스트
CBDescriptor
class CBDescriptor: 블루투스 기기의 특성에 대한 추가 정보를 제공합니다. 이 정보는 특성 값의 형식, 단위, 범위 등과 같은 특성에 대한 세부 정보를 제공합니다.
- CBDescriptor 객체는 perihperal의 특성의 추가적인 정보를 나타냅니다
- CBDescriptor는 CBCharacteristic에 여러개가 배열로 포함되어 있을 수 있습니다.
- CBCharacteristic는 하나의 value와 여러개의 CBDescriptor를 포함할 수 있어 특성의 추가적인 정보를 내포할 수 있습니다.
Descritpor 식별하기
var characteristic: CBCharacteristic?
: descriptor가 포함되어 있는 특성
Descriptor 데이터에 접근하기
var value: Any?
: descriptor의 값
CBMutableDescriptor
class CBMutableDescriptor: 블루투스 기기의 특성에 추가적인 정보를 제공합니다.
지원하는 타입
class CBManager
: central과 peripheral 객체들을 관리하는 추상 기본 클래스
class CBATTRequest
: Attribute Protocol (ATT)를 사용하는 요청
class CBPeer
: 원격 기기를 나타내는 객체
class CBUUID
: 블루투스 표준에 의해 정의된 보편적으로 고유한 식별자.
에러
struct CBError
: 블루투스 통신 중에 코어 블루투스가 반환하는 오류
let CBErrorDomain: String
: Core Bluetooth 에러를 위한 domain
enum CBError.Code
: 블루투스 통신 중에 발생하는 Core Bluetooth 에러 코드
struct CBATTError
: Attribute Protocol (ATT)를 사용하는 도중 생기는 Core Bluetooth 에러
let CBATTErrorDomain: String
: Core Bluetooth ATT 에러를 위한 domain
enum CBATTError.code
: BLE ATT 통신 중 GATT 서버에 의해 반환받는 가능한 에러
'SwiftUI' 카테고리의 다른 글
HealthKit 을 사용하기 전에 세팅 (0) | 2024.03.11 |
---|---|
HealthKit 소개 (0) | 2024.03.11 |
AVPlayer 음악 또는 미디어가 끝났을 때 (0) | 2024.03.06 |
MPRemoteCommandCenter (잠금화면 미디어제어) (0) | 2024.03.03 |
MPNowPlayingInfoCenter (잠금화면 미디어정보) (0) | 2024.03.03 |