BlueSim (iOS)

Download on the App Store

Updated 2025-11-04

Introduction

BlueSim is an iOS app that turns your phone into a customizable Bluetooth LE (BLE) peripheral. This enables you to test or debug a separate "central" or "host" device with any data you choose. If you've ever used a Bluetooth scanner app, you can think of BlueSim as its logical counterpart.

How it works

When you use BlueSim, you can start by adding any valid BLE service: GATT or custom. For example, you may choose to add service 0x1822 and characteristic 0x2A5E. This specific combination typically corresponds with GATT peripherals that measure a person's blood oxygen concentration as a percentage, for health-evaluative purposes. In this case your phone will be set up to simulate the operation of such a device, and it can even be set to respond with values you would expect a pulse oximeter to send.

Use cases

The intended uses for BlueSim revolve around developing and testing other BLE peripherals and centrals.

JSON Schema Documentation

Version 4.0.0 introduced the ability to import and export profiles as JSON. You can use the following schema to better understand how to write your own profiles from a text editor.

Root Object
"version": Int
  • Versions the schema for compatibility. The only acceptable version is 1.
"profiles": Array<Profile>
  • An array of Profile objects, such that no two profiles share the same "displayName".
Profile
"displayName": String
  • Represents the name of the profile, which is only displayed in the BlueSim app to help the user distinguish it from other profiles.
"broadcastName": String
  • The value that shall be advertised as the "Local Name", when the profile is broadcasted.
"services": Array<Service>
  • An array of Service objects, such that no two services share the same "cbuuid".
Service
"cbuuid": String
  • The CoreBluetooth UUID of this service, represented as a hexadecimal String. It can be a normal full-length UUID, or a short form 2-byte UUID.
"isPrimary": Bool
  • Represents whether this is a primary service or not.
  • Note: Secondary services are connectable, but not discoverable unless included as part of a primary service. However, BlueSim does not yet provide a way to specify secondary service relationships. Please reach out if you require this feature.
"characteristics": Array<Characteristic>
  • An array of Characteristic objects, such that no two characteristics share the same "cbuuid".
Characteristic
"cbuuid": String
  • The CoreBluetooth UUID of this service, represented as a hexadecimal String. It can be a normal full-length UUID, a short form 2-byte UUID, or a medium form 4-byte UUID.
"properties": Dictionary<Property, Array<String>>
  • A dictionary where the key is a Property, and the value is an array of hexadecimal strings.
  • If the dictionary is missing one or more keys, the app will not broadcast those properties.
  • Use an empty array to specify that a characteristic can communicate with a given property, but has no data to transmit.
  • If the "write" property has an array set, any given values will be ignored by the app, since the app accepts data to be written on that characteristic, i.e. this is not data that can be sent.
Property

There are currently four acceptable properties:

  • "read"
    • Permits reads of the characteristic value.
  • "write"
    • Permits writes of the characteristic value, with the app giving an acknowledgement-type response.
  • "notify"
    • Permits notifications of the characteristic value, without a response.
  • "indicate"
    • Permits indications of the characteristic value.

You can reach out if you would like to request more properties are supported.

Example

Below is a simple demonstration of how you can import two profiles at once.

{
  "profiles": [
    {
      "services": [],
      "displayName": "Empty profile",
      "broadcastName": "Testing"
    },
    {
      "broadcastName": "THERMO 80215",
      "services": [
        {
          "isPrimary": true,
          "characteristics": [
            {
              "properties": {
                "notify": [
                  "ABCD",
                  "1234"
                ],
                "write": []
              },
              "cbuuid": "2A1C"
            }
          ],
          "cbuuid": "1809"
        }
      ],
      "displayName": "Demo Thermometer"
    }
  ],
  "version": 1
}
Version History
Privacy Policy

Read about the app's privacy policy

Copyright

© 2022-2025 Brandon Fraune