Core Bluetooth: iOS پر BLE فن تعمیر اور ترقی

مصنف: IT Sectr اشاعت: 2026-07-16 مطالعے کا وقت: 10 منٹ

Core Bluetooth iOS، iPadOS اور macOS پر Bluetooth Low Energy کے ساتھ تعامل کے لیے Apple کا فریم ورک ہے۔ فریم ورک BLE کے دونوں کرداروں میں کام کرنے کے لیے API کا مکمل سیٹ فراہم کرتا ہے: مرکزی آلہ (CBCentralManager) اسکیننگ اور پیری فیرلز سے جڑنے کے لیے، اور پیری فیرل آلہ (CBPeripheralManager) BLE سرور کی نقل کرنے کے لیے۔ Core Bluetooth BLE پروٹوکول اسٹیک کو فزیکل ریڈیو سے ایپلیکیشن لیول GATT پروفائل تک تجرید کرتا ہے۔ Apple Developer، 2026 کے مطابق، Core Bluetooth BLE ترقی کے لیے واحد سرکاری Apple API ہے، جو BLE 4.0–5.4 کو extended advertising، 2M PHY اور LE Audio کے ساتھ سپورٹ کرتا ہے۔

اہم نکات

  • Core Bluetooth — iOS، iPadOS اور macOS پر BLE ترقی کے لیے Apple کا نظام فریم ورک
  • CBCentralManager — مرکزی آلہ کی طرف سے BLE پیری فیرلز کو اسکین اور جڑنے کے لیے کلاس
  • CBPeripheralManager — BLE سرور بنانے کے لیے کلاس جو خدمات اور خصوصیات شائع کرتا ہے
  • GATT پروفائل — ڈیٹا کے تبادلے کے لیے خدمات، خصوصیات اور وضاحت کنندگان کا درجہ بندی ماڈل
  • پس منظر کے طریقے — Core Bluetooth نظام کے مندوبین اور حالت کی بحالی کے ذریعے پس منظر میں BLE مواصلات کو سپورٹ کرتا ہے

Core Bluetooth کیا ہے: فن تعمیر اور اجزاء

Core Bluetooth BLE اسٹیک کو Bluetooth SIG تصریح کے ذریعہ بیان کردہ دو منطقی کرداروں میں تقسیم کرتا ہے۔ مرکزی آلہ کا کردار (Central) CBCentralManager کلاس کے ذریعے پیش کیا جاتا ہے — یہ اسکیننگ شروع کرتا ہے، کنکشن قائم کرتا ہے اور منسلک CBPeripheral کی فہرست کا انتظام کرتا ہے۔ پیری فیرل آلہ کا کردار (Peripheral) CBPeripheralManager کے ذریعے پیش کیا جاتا ہے — یہ خدمات اور خصوصیات شائع کرتا ہے، مرکزی درخواستوں کا جواب دیتا ہے اور اطلاعیں بھیجتا ہے۔ ایک iOS سیشن مختلف BLE ریڈیوز پر ایک ساتھ دونوں کرداروں میں کام کر سکتا ہے، لیکن عام ایپلیکیشن ایک کردار استعمال کرتی ہے۔

Core Bluetooth فن تعمیر میں پانچ اہم تجرید شامل ہیں۔ CBCentralManager آلہ کے Bluetooth اڈاپٹر کی حالت کا انتظام کرتا ہے: poweredOn (کام کے لیے تیار)، poweredOff (Bluetooth غیر فعال)، unauthorized (اجازت نہیں)، unsupported (BLE دستیاب نہیں)۔ CBPeripheral اپنے UUID، نام، RSSI اور GATT درجہ بندی کے ساتھ ایک دور دراز BLE آلہ کی نمائندگی کرتا ہے۔ CBService — خصوصیات کا ایک منطقی گروپ۔ CBCharacteristic — پڑھنے/لکھنے/اطلاعیات کے لیے ڈیٹا پوائنٹ۔ CBPeripheralManager پیری فیرل کی نقل کرنے کے لیے ایک مقامی GATT سرور بناتا ہے۔

کلاسکرداراہم طریقے
CBCentralManagerمرکزی آلہscanForPeripherals, connect, cancelPeripheralConnection, retrievePeripherals
CBPeripheralدور دراز پیری فیرلdiscoverServices, discoverCharacteristics, readValue, writeValue, setNotifyValue
CBPeripheralManagerمقامی پیری فیرلaddService, removeService, startAdvertising, respondToRequest, updateValue
CBCentralدور دراز مرکزیmaximumUpdateValueLength, identifier, ancsAuthorized

CBCentralManager کی حالتیں تمام BLE کارروائیوں کو کنٹرول کرتی ہیں۔ جب ایپ شروع ہوتی ہے، centralManagerDidUpdateState موجودہ Bluetooth حالت کے ساتھ بلایا جاتا ہے۔ اگر حالت .poweredOn نہیں ہے، تو نظام BLE کالز کو نظر انداز کرتا ہے۔ ڈویلپر کو ہر اسکین اور کنکشن سے پہلے حالت چیک کرنی چاہیے۔ .poweredOff سے .poweredOn میں منتقلی اس وقت ہوتی ہے جب iOS ترتیبات میں Bluetooth فعال کیا جاتا ہے — مندوب کو بار بار کال ملتی ہے اور ایپ اسکیننگ دوبارہ شروع کر سکتی ہے۔

CBCentralManager: BLE آلات کی اسکیننگ اور کنکشن

CBCentralManager مرکزی آلہ کی طرف سے تمام BLE کارروائیوں کے لیے داخلہ نقطہ ہے۔ ابتداء ایک مندوب (CBCentralManagerDelegate) اور ایک DispatchQueue لیتی ہے — Apple سادگی کے لیے مرکزی قطار یا کارکردگی کے لیے سیریل قطار استعمال کرنے کی سفارش کرتا ہے۔ ابتداء کے بعد، فریم ورک خود بخود Bluetooth حالت چیک کرتا ہے اور centralManagerDidUpdateState: کو کال کرتا ہے — سنبھالنے کے لیے پہلا لازمی مندوب۔

اسکیننگ scanForPeripheralsWithServices:options: طریقہ سے شروع ہوتی ہے۔ پہلا پیرامیٹر فلٹر کرنے کے لیے CBUUID خدمات کی ایک صف ہے: اگر مطلوبہ خدمات کے UUID معلوم ہیں، تو انہیں منتقل کرنے سے بجلی کی کھپت اور تلاش کا وقت کم ہو جاتا ہے۔ اگر nil ہے، تو حدود میں تمام BLE آلات دریافت ہوتے ہیں۔ اختیارات میں .allowDuplicatesKey (ایک ہی آلہ کی بار بار دریافت) اور .solicitedServiceUUIDsKey (مرکزی پر شائع کردہ خدمات کے لیے) شامل ہیں۔

swift
import CoreBluetooth

class BLECentral: NSObject {

    private var centralManager: CBCentralManager!
    private var discoveredPeripherals: [CBPeripheral] = []

    override init() {
        super.init()
        centralManager = CBCentralManager(delegate: self, queue: .main)
    }

    // BLE اسکیننگ شروع کریں
    func startScan() {
        guard centralManager.state == .poweredOn else {
            print("Bluetooth دستیاب نہیں")
            return
        }
        // تمام آلات اسکین کریں (nil = کوئی فلٹر نہیں)
        centralManager.scanForPeripherals(withServices: nil,
                                            options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])
    }

    // اسکیننگ بند کریں
    func stopScan() {
        centralManager.stopScan()
    }

    // منتخب آلہ سے جڑیں
    func connect(to peripheral: CBPeripheral) {
        centralManager.connect(peripheral, options: nil)
    }
}

// MARK: - CBCentralManagerDelegate
extension BLECentral: CBCentralManagerDelegate {

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            startScan()
        }
    }

    func centralManager(_ central: CBCentralManager,
                        didDiscover peripheral: CBPeripheral,
                        advertisementData: [String : Any],
                        rssi: NSNumber) {
        if !discoveredPeripherals.contains(where: { $0.identifier == peripheral.identifier }) {
            discoveredPeripherals.append(peripheral)
            print("Found devices: \(peripheral.name ?? "Unknown"), RSSI: \(rssi)")
        }
    }

    func centralManager(_ central: CBCentralManager,
                        didConnect peripheral: CBPeripheral) {
        print("Connected: \(peripheral.identifier)")
        peripheral.delegate = self
        peripheral.discoverServices(nil)
    }

    func centralManager(_ central: CBCentralManager,
                        didDisconnectPeripheral peripheral: CBPeripheral,
                        error: Error?) {
        print("Disconnected: \(peripheral.identifier)")
    }
}

BLECentral کلاس BLE آلہ اسکیننگ اور کنکشن کے مکمل چکر کو ظاہر کرتی ہے۔ centralManagerDidUpdateState Bluetooth فعال ہونے پر اسکیننگ شروع کرتا ہے۔ didDiscoverPeripheral identifier کے ذریعے ڈیڈپلیکیشن کے ساتھ ملے آلات کو discoveredPeripherals صف میں جمع کرتا ہے۔ کنکشن (didConnect) کے بعد، خدمت کی دریافت فوری طور پر شروع ہوتی ہے — یہ کسی بھی GATT کارروائی سے پہلے ایک لازمی قدم ہے۔

CBPeripheralManager: iOS پر BLE سرور بنانا

CBPeripheralManager iOS پر BLE پیری فیرل آلہ کی نقل کرنے کے لیے کلاس ہے۔ پیری فیرل کردار میں ایک ایپ اپنی خدمات اور خصوصیات شائع کر سکتی ہے، مرکزی آلہ سے آنے والی پڑھنے/لکھنے کی درخواستوں کو قبول کر سکتی ہے اور اطلاعیں بھیج سکتی ہے۔ CBPeripheralManager iPhone کے ذریعے نقل کیے جانے والے BLE لوازمات کے لیے استعمال ہوتا ہے: ریموٹ، کی بورڈ، ٹریکر، IoT گیٹ وے۔

CBPeripheralManager کی زندگی کا چکر ابتداء اور CBPeripheralManagerDelegate کے ساتھ شروع ہوتا ہے۔ peripheralManagerDidUpdateState: کے ذریعے poweredOn کی تصدیق ملنے کے بعد، خدمات شائع کی جاتی ہیں (addService:) اور تشہیر شروع کی جاتی ہے (startAdvertising:)۔ تشہیر کا ڈیٹا CBAdvertisementData میں مقامی نام (CBAdvertisementDataLocalNameKey)، خدمت UUID (CBAdvertisementDataServiceUUIDsKey) اور ترسیل کی طاقت کی سطح (CBAdvertisementDataTxPowerLevelKey) شامل ہوتا ہے۔ زیادہ سے زیادہ تشہیر پیکٹ کا سائز BLE 4.0 کے لیے 31 بائٹس، extended advertising BLE 5.0+ کے لیے 251 بائٹس ہے۔

swift
// CBPeripheralManager کے ذریعے iOS پر BLE پیری فیرل
class BLEPeripheral: NSObject {

    private var peripheralManager: CBPeripheralManager!

    let serviceUUID = CBUUID(string: "1234")
    let characteristicUUID = CBUUID(string: "5678")

    override init() {
        super.init()
        peripheralManager = CBPeripheralManager(delegate: self, queue: .main)
    }

    // خصوصیت کے ساتھ خدمت شائع کریں
    func setupService() {
        let characteristic = CBMutableCharacteristic(
            type: characteristicUUID,
            properties: [.read, .write, .notify],
            value: nil,
            permissions: [.readable, .writeable]
        )
        let service = CBMutableService(type: serviceUUID, primary: true)
        service.characteristics = [characteristic]
        peripheralManager.add(service)
    }

    // تشہیر شروع کریں
    func startAdvertising() {
        let advertisementData: [String: Any] = [
            CBAdvertisementDataLocalNameKey: "My BLE Device",
            CBAdvertisementDataServiceUUIDsKey: [serviceUUID]
        ]
        peripheralManager.startAdvertising(advertisementData)
    }
}

// MARK: - CBPeripheralManagerDelegate
extension BLEPeripheral: CBPeripheralManagerDelegate {

    func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
        if peripheral.state == .poweredOn {
            setupService()
        }
    }

    func peripheralManager(_ peripheral: CBPeripheralManager,
                        didAdd service: CBService,
                        error: Error?) {
        if error == nil {
            startAdvertising()
        }
    }

    // پڑھنے کی درخواست سنبھالیں
    func peripheralManager(_ peripheral: CBPeripheralManager,
                        didReceiveRead request: CBATTRequest) {
        let data = "CurrentValue".data(using: .utf8)!
        request.value = data
        peripheralManager.respond(to: request, withResult: .success)
    }

    // لکھنے کی درخواست سنبھالیں
    func peripheralManager(_ peripheral: CBPeripheralManager,
                        didReceiveWrite requests: [CBATTRequest]) {
        for request in requests {
            if let value = request.value {
                print("Write: \(value)")
            }
        }
        peripheralManager.respond(to: requests.first!, withResult: .success)
    }
}

BLEPeripheral کلاس ایک خصوصیت کے ساتھ BLE سرور بناتی ہے جو پڑھنے، لکھنے اور اطلاعیات کو سپورٹ کرتی ہے۔ ابتداء کے بعد، peripheralManagerDidUpdateState addService: کے ذریعے خدمت شائع کرتا ہے، پھر startAdvertising: کے ذریعے تشہیر شروع کرتا ہے۔ didReceiveRead اور didReceiveWrite ہینڈلر مرکزی آلہ سے آنے والی GART درخواستوں کا جواب دیتے ہیں۔ اطلاعیات بھیجنے کے لیے updateValue:forCharacteristic:onSubscribedCentrals: طریقہ استعمال کیا جاتا ہے۔

GATT کارروائیاں: پڑھنا، لکھنا اور اطلاعیں

GATT کارروائیاں (Generic Attribute Profile) Core Bluetooth میں ڈیٹا کے تبادلے کی بنیاد ہیں۔ خدمات اور خصوصیات کی دریافت کے بعد، مرکزی آلہ تین قسم کی کارروائیاں کر سکتا ہے: خصوصیت کی قدر پڑھنا، قدر لکھنا اور اطلاعیات/اشاروں کو سبسکرائب کرنا۔ ہر کارروائی غیر متزامن ہے اور متعلقہ CBPeripheralDelegate کال بیک کے ذریعے نتیجہ واپس کرتی ہے۔

پڑھنا: readValueForCharacteristic: کو کال کرکے انجام دیا جاتا ہے۔ قدر peripheral:didUpdateValueForCharacteristic:error: میں آتی ہے۔ اہم: پڑھنا آلہ سے موجودہ قدر واپس کرتا ہے، کیش شدہ نہیں۔ اگر آلہ پڑھنے کو سپورٹ نہیں کرتا (.read خاصیت)، کال خرابی واپس کرے گی۔ بڑی قدروں (MTU سے بڑی) کے لیے، BLE خود بخود GATT سطح پر ڈیٹا کو ٹکڑوں میں تقسیم اور دوبارہ جمع کرتا ہے۔

لکھنا: writeValue:forCharacteristic:type: کو کال کرکے انجام دیا جاتا ہے۔ BLE دو لکھنے کے ماڈل کو سپورٹ کرتا ہے: withResponse (قابل اعتماد، تصدیق کے ساتھ) اور withoutResponse (تیز، بغیر تصدیق کے)۔ CBCharacteristic.properties خاصیت دستیاب لکھنے کی اقسام کی وضاحت کرتی ہے۔ ایک لکھنے کے پیکٹ کا زیادہ سے زیادہ سائز MTU کے ذریعے محدود ہے: BLE 4.0 کے لیے 23 بائٹس (20 بائٹس پے لوڈ + 3 بائٹس ہیڈر)، توسیع شدہ MTU (MTU 251) کے ساتھ BLE 5.0+ کے لیے 247 بائٹس تک۔

اطلاعیں: setNotifyValue:true forCharacteristic: کو کال کرکے فعال کی جاتی ہیں۔ سبسکرپشن کے بعد، پیری فیرل خود بخود peripheral:didUpdateValueForCharacteristic: کے ذریعے اپ ڈیٹ بھیجتا ہے جب بھی خصوصیت کی قدر تبدیل ہوتی ہے۔ اطلاعیں غیر فعال کرنے کے لیے، setNotifyValue:false forCharacteristic: کو کال کریں۔ Core Bluetooth خود بخود پیری فیرل پر CCCD وضاحت کنندہ کا انتظام کرتا ہے۔

کارروائیطریقہمندوبمنتقلی کی قسم
پڑھناreadValueForCharacteristic:didUpdateValueForCharacteristicپولنگ (درخواست-جواب)
withResponse لکھناwriteValue:forCharacteristic:type:withResponsedidWriteValueForCharacteristicتصدیق کے ساتھ
withoutResponse لکھناwriteValue:forCharacteristic:type:withoutResponseکوئی مندوب نہیںبغیر تصدیق کے
اطلاعsetNotifyValue:true forCharacteristic:didUpdateNotificationStateForCharacteristic + didUpdateValueForCharacteristicپیری فیرل سے پش

Core Bluetooth پس منظر موڈ اور State Restoration

پس منظر موڈ Core Bluetooth میں BLE ایپس کو پس منظر میں رہتے ہوئے اسکیننگ جاری رکھنے، کنکشن برقرار رکھنے اور اطلاعیں حاصل کرنے کی اجازت دیتا ہے۔ اسے فعال کرنے کے لیے، Xcode میں «Uses Bluetooth LE accessories» کی صلاحیت کو فعال کریں (Info.plist → Required background modes → App communicates using Core Bluetooth) اور UIBackgroundModes میں «bluetooth-central» کلید شامل کریں۔ پیری فیرل کردار کے لیے — «bluetooth-peripheral»۔

State Restoration iOS کی طرف سے ایپ کے دوبارہ شروع ہونے کے بعد BLE کنکشن کی حالت بحال کرنے کے لیے Core Bluetooth کا ایک طریقہ کار ہے۔ جب پس منظر موڈ فعال ہوتا ہے اور CBCentralManager یا CBPeripheralManager کی ابتداء میں restoreIdentifier مخصوص کیا جاتا ہے، iOS ایپ کے ختم ہونے پر BLE اسٹیک حالت محفوظ کرتا ہے اور اگلے لانچ پر اسے بحال کرتا ہے۔ مندوب centralManager:willRestoreState: محفوظ کردہ CBPeripheral اور زیر التواء کنکشن کے ساتھ ایک ڈکشنری وصول کرتا ہے۔

swift
// State Restoration کے ساتھ Core Bluetooth ترتیب
class BLECentralWithRestoration: NSObject {

    let restoreIdentifier = "com.app.blecentral"
    private var centralManager: CBCentralManager!

    override init() {
        super.init()
        let options: [String: Any] = [
            CBCentralManagerOptionRestoreIdentifierKey: restoreIdentifier,
            CBCentralManagerOptionShowPowerAlertKey: true
        ]
        centralManager = CBCentralManager(delegate: self,
                                          queue: nil,
                                          options: options)
    }
}

extension BLECentralWithRestoration: CBCentralManagerDelegate {

    // دوبارہ شروع کرنے کے بعد حالت بحال کریں
    func centralManager(_ central: CBCentralManager,
                        willRestoreState dict: [String : Any]) {
        if let peripherals = dict[CBCentralManagerRestoredStatePeripheralsKey]
            as? [CBPeripheral] {
            for peripheral in peripherals {
                peripheral.delegate = self
                // GATT دریافت بحال کریں
                peripheral.discoverServices(nil)
            }
        }
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            print("بحالی کے بعد Bluetooth تیار")
        }
    }
}

BLECentralWithRestoration ترتیب میں، CBCentralManagerOptionRestoreIdentifierKey کلید حالت کے تحفظ کو فعال کرتی ہے۔ اگر ایپ iOS کے ذریعے ختم کر دی گئی تھی (مثال کے طور پر، میموری دباؤ کی وجہ سے)، اگلے لانچ پر centralManager:willRestoreState: پہلے منسلک CBPeripheral کی ایک فہرست وصول کرتا ہے۔ ایپ مندوبین کو بحال کرتی ہے اور خدمات کی دوبارہ دریافت کرتی ہے — صارف کنکشن میں رکاوٹ محسوس نہیں کرتا۔ State Restoration کے بغیر، ایپ کے ختم ہونے پر تمام BLE سیشن ضائع ہو جاتے ہیں۔

Swift میں BLE ایپ کی مثال: مرکزی اور پیری فیرل

ایک مکمل مثال Swift میں BLE ایپ کی جو ایک پروجیکٹ میں مرکزی اور پیری فیرل دونوں آلات کو یکجا کرتی ہے۔ ایپ دو طریقوں میں کام کر سکتی ہے: BLE آلات دریافت کرنا اور ان سے جڑنا (مرکزی) یا BLE لوازمات کی نقل کرنا (پیری فیرل)۔ نیچے ایک عام BLE مینیجر کے ساتھ ایک فن تعمیر دیا گیا ہے جو شروع ہونے پر کردار منتخب کرتا ہے۔

swift
// مرکزی اور پیری فیرل کے لیے یونیورسل BLE مینیجر
class BLEManager {

    enum Role {
        case central
        case peripheral
    }

    private let role: Role
    private var centralManager: CBCentralManager?
    private var peripheralManager: CBPeripheralManager?
    let advertisedServiceUUID = CBUUID(string: "A001")

    init(role: Role) {
        self.role = role
        switch role {
        case .central:
            centralManager = CBCentralManager(delegate: nil, queue: .main)
        case .peripheral:
            peripheralManager = CBPeripheralManager(delegate: nil, queue: .main)
        }
    }

    // مرکزی آلہ: اسکیننگ
    func scanForDevices() {
        centralManager?.scanForPeripherals(withServices: nil, options: nil)
    }

    // پیری فیرل آلہ: تشہیر
    func advertiseService() {
        let data: [String: Any] = [
            CBAdvertisementDataServiceUUIDsKey: [advertisedServiceUUID]
        ]
        peripheralManager?.startAdvertising(data)
    }
}

// شروع ہونے پر استعمال
let isCentral = UserDefaults.standard.bool(forKey: "isCentral")
let manager = BLEManager(role: isCentral ? .central : .peripheral)

if isCentral {
    manager.scanForDevices()
} else {
    manager.advertiseService()
}

BLEManager ابتداء پر کردار منتخب کرتا ہے اور متعلقہ مینیجر (CBCentralManager یا CBPeripheralManager) بناتا ہے۔ کردار کا جھنڈا UserDefaults میں محفوظ یا تشکیل سرور کے ذریعے منتقل کیا جا سکتا ہے۔ یہ طریقہ BLE ایپ کو استعمال کے معاملے کے مطابق ڈھالنے کی اجازت دیتا ہے: فروخت کے مقام پر، iPhone مرکزی کے طور پر ادائیگی کے ٹرمینلز کو اسکین کرنے کے لیے کام کرتا ہے؛ IoT گیٹ وے پر — سینسرز سے ڈیٹا جمع کرنے کے لیے پیری فیرل کے طور پر۔

اکثر پوچھے گئے سوالات

Core Bluetooth کیا ہے؟

Core Bluetooth iOS، iPadOS اور macOS پر BLE ترقی کے لیے Apple کا فریم ورک ہے۔ یہ مرکزی (CBCentralManager) اور پیری فیرل (CBPeripheralManager) دونوں آلات کے لیے API فراہم کرتا ہے۔ یہ BLE 4.0–5.4، extended advertising، 2M PHY اور LE Audio کو سپورٹ کرتا ہے۔ Core Bluetooth BLE مواصلات کے لیے واحد سرکاری Apple API ہے، جو Bluetooth Low Energy کے ساتھ کام کرنے والی تمام iOS ایپس کے لیے ضروری ہے۔

CBCentralManager اور CBPeripheralManager میں کیا فرق ہے؟

CBCentralManager مرکزی آلہ کے کردار میں کام کرنے کے لیے ایک کلاس ہے: یہ BLE پیری فیرلز کو اسکین کرتا ہے، کنکشن قائم کرتا ہے، خصوصیات پڑھتا اور لکھتا ہے۔ CBPeripheralManager پیری فیرل کردار میں کام کرنے کے لیے ایک کلاس ہے: یہ خدمات شائع کرتا ہے، پڑھنے/لکھنے کی درخواستوں کا جواب دیتا ہے اور اطلاعیں بھیجتا ہے۔ ایک iPhone مختلف مینیجر مثالوں کے ذریعے ایک ساتھ دونوں کرداروں میں کام کر سکتا ہے۔

پس منظر میں کام کرنے کے لیے Core Bluetooth کو کیسے ترتیب دیا جائے؟

پس منظر BLE کام کے لیے، Xcode میں «Uses Bluetooth LE accessories» کی صلاحیت کو فعال کریں اور UIBackgroundModes میں «bluetooth-central» کلید شامل کریں۔ پیری فیرل کردار کے لیے — «bluetooth-peripheral»۔ State Restoration کے لیے مینیجر کو شروع کرتے وقت restoreIdentifier مخصوص کریں۔ ان ترتیبات کے بغیر، پس منظر میں ایپ BLE واقعات حاصل نہیں کرے گی اور کنکشن کھو دے گی۔

Core Bluetooth آلات کیوں نہیں ڈھونڈ پاتا؟

عام وجوہات: CBCentralManager.state != .poweredOn (Bluetooth غیر فعال یا مجاز نہیں)، مندوب مقرر نہیں، آلہ حدود سے باہر یا تشہیر کے پیکٹ نہیں بھیج رہا۔ Info.plist میں NSBluetoothAlwaysUsageDescription کی اجازت، centralManagerDidUpdateState میں Bluetooth کی حالت چیک کریں، اور یقینی بنائیں کہ scanForPeripherals صرف .poweredOn پر بلایا گیا ہے۔

کیا ایک ساتھ متعدد CBPeripheral منسلک کیے جا سکتے ہیں؟

ہاں، Core Bluetooth ایک ساتھ متعدد BLE آلات سے کنکشن کو سپورٹ کرتا ہے۔ ہر CBPeripheral اپنے مندوب کے ذریعے آزادانہ طور پر منظم کیا جاتا ہے۔ iOS نظام کی سطح پر بیک وقت BLE کنکشن کی تعداد کو محدود کرتا ہے (عام طور پر iPhone کے لیے 5–7)۔ 1:N منظرناموں کے لیے (مثال کے طور پر، 10 ٹریکرز والا فٹنس سینٹر)، پیری فیرلز کو قطار میں لگانا اور چکراتی طور پر خدمت کرنا ضروری ہے۔

خلاصہ

  • Core Bluetooth — CBCentralManager اور CBPeripheralManager کلاسز کے ساتھ BLE ترقی کے لیے Apple کا نظام فریم ورک
  • CBCentralManager دور دراز BLE آلات کے ساتھ اسکیننگ، کنکشن اور GATT کارروائیوں کا انتظام کرتا ہے
  • CBPeripheralManager خدمت کی اشاعت اور آنے والی درخواستوں کی پروسیسنگ کے ساتھ BLE پیری فیرلز کی نقل کرتا ہے
  • GATT پروفائل میں پڑھنے، لکھنے اور اطلاعی کارروائیوں کے ساتھ خدمات، خصوصیات اور وضاحت کنندگان شامل ہیں
  • پس منظر موڈ کو State Restoration کے لیے UIBackgroundModes اور restoreIdentifier کی ضرورت ہے
  • MTU BLE پیکٹ کے سائز کو محدود کرتا ہے: BLE 4.0 کے لیے 23 بائٹس، توسیع شدہ MTU کے ساتھ BLE 5.0+ کے لیے 251 بائٹس تک
  • Swift async/await CheckedContinuation کے ذریعے مندوبین کے ساتھ غیر متزامن BLE کوڈ کو آسان بناتا ہے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں