title: What's the difference between the CoreBluetooth and ExternalAccessory frameworks?
body: <p>Apple provides the following two frameworks for communicating with nearby Bluetooth devices with iOS.</p>
  
  <p><a href="https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html" rel="noreferrer"><strong>CoreBluetooth:</strong></a></p>
  
  <blockquote>
    <p>The Core Bluetooth framework provides the classes needed for your iOS and Mac apps to communicate with devices that are equipped with Bluetooth low energy wireless technology.</p>
  </blockquote>
  
  <p><a href="https://developer.apple.com/reference/externalaccessory" rel="noreferrer"><strong>ExternalAccessory:</strong></a></p>
  
  <blockquote>
    <p>The External Accessory framework provides support for communicating with external hardware connected to an iOS-based device through either the Apple Lightning or 30-pin connector, or wirelessly using Bluetooth.</p>
  </blockquote>
  
  <p>I have previously used the CoreBluetooth framework to successfully communicate with Bluetooth devices. However, I am now trying to communicate with a Bluetooth printer and it doesn't show up in the scan for nearby devices. Using the ExternalAccessory framework, it does.</p>
  
  <p>How do these two frameworks differ as far as communicating with Bluetooth devices is concerned? Why do different Bluetooth devices require the use of different frameworks?</p>