Bluetooth Logo

Writing an SDK With Core Bluetooth – 00 – Prerequisites

This entry is part 2 of 24 in the series Writing an SDK With Core Bluetooth


In order to proceed, we have to assume that we are all on the same page.

This is actually a fairly advanced-level tutorial, aimed at Apple-platform developers with some experience writing release-level applications.

There is no requirement to be an expert, or for particular expertise on any Apple platform (the tutorial is “platform-agnostic.” We can have experience writing iOS, MacOS, WatchOS or TVOS native apps, in Swift).

With this in mind, I will make some assumptions about the folks that want to use the tutorial:


  1. Everyone knows the basics of the Swift Programming Language
    I don’t plan to go too far down the “idiomatic Swift” rabbit-hole, but we need to understand the fundamentals of the language (like using higher-order functions instead of traditional loops).
  2. Everyone is familiar with using Xcode to run on a device
    I will provide a complete Xcode project, with multiple “template” targets, so we won’t need to be experts at developing for each of the target platforms. Additionally, we need to be able to run the applications on actual devices (not just the simulators). I won’t go into detail about how to do that, so we should all be familiar with the process.
    If we use a development IDE different from Xcode (like AppCode), it is assumed that we are adept at “casting” Xcode instructions to our IDE of choice.
  3. Everyone owns (or has developer access to) at least one device, other than their development Mac
    The lessons will include two-way communication between two devices that are each programmed with Swift. It can be two Macs. The more devices, the merrier. I will include targets for Apple Watch, iPhone, iPad, iPod, AppleTV, and Mac OS X.
    That said, it would be best if the targets were iOS and MacOS, as we cannot run Peripheral Mode on Watch or TV.
  4. All devices can run the current major revision of its operating system (at the time of this writing)
    That means:
    1. Mac OS X: Catalina (10.15)
    2. iPhone/iPod: iOS 13
    3. iPad: iPadOS 13
    4. Watch: WatchOS 6
    5. TV: TVOS 13
  5. Knowing the basics of using Git and GitHub
    I will be supplying a GitHub repo to accompany this lesson, and will use Git Tags to mark sections. It’s important to be familiar with cloning a repo, and checking out tags. This is a somewhat different workflow from what we might be used to (a zip file, with “before” and “after” snapshots of each section). I think it’s a lot cleaner and more practical, as you will have a blow-by-blow “story” of the development process.
  6. Familiarity with Bluetooth (as a user)
    I’ll cover the bare basics of Bluetooth, but this will, by no means, be a comprehensive treatise on the topic. The nice thing about Core Bluetooth, is that you don’t need to be a Bluetooth expert to use it.
  7. Ability to Manage Device Provisioning Profiles
    The Apple Application Provisioning System is a fairly involved process that is required for all developers that want to run apps on devices –even if they don’t plan to release via the App Stores. We need to be able to create provisioning profiles for our applications.


  1. A working understanding of developing and releasing applications via Apple’s App Store (iOS, TVOS and WatchOS)
    I’ll be providing templates that can be modified to be fully-qualified “releasable” apps. You could, theoretically (and practically) turn them into “shippable” apps.
  2. A Good Understanding of Bluetooth
    Bluetooth is a huge topic. The spec itself, clocks in at a couple of thousand pages. The better you understand it, the easier it will be for you to understand where we are going in the lesson.
  3. Experience writing SDKs
    The lesson will actually be a sort of “SDK” development exercise. If you have experience writing SDKs, you will have an easier time understanding the lesson.

Now that we’re all on the same page, let’s get started…