fraune
mobile + web dev

BlueSim (iOS)

Download BlueSim on the App Store

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.

  • Integration testing
    • "Isn't there a better way to test my BLE central's interfaces than with unit tests and fake peripherals?"
  • Edge case testing
    • "How does my app respond if a peripheral transmits data outside of the expected range?"
  • Peripheral simulation
    • "I don't want to carry bulky hardware with me, but I need a way to simulate a Bluetooth peripheral's interfaces"
  • BLE investigation
    • "I'd like a hands-on way to learn how a BLE interface transmits data."

Support the project

This project is not my day job. If you would like to accelerate development of a particular feature (or just buy me a coffee), you can support my work through PayPal.

Support my work

Privacy Policy

Read about the app's privacy policy

Development

Version History

  • v3.0.0 - Research (WIP)
    • Dev Note: This is a major update I am conceptualizing and working through. It may take some time. Reach out if you need something in the meantime!

    • Planned: Refactor app storage
    • Planned: Enhanced read/notify/indicate emission abilities...
  • v2.2.1 - 2024-03-05
    • Changed: Web link updates
  • v2.2.0 - 2024-02-22
    • Added: There is a new keyboard specifically for writing hexadecimal/binary. You can toggle its use in the Preferences tab.
    • Improved: Data input fields can now stretch multiple lines
    • Fixed: When editing a filtered text field, the cursor position could get reset to the end of line
    • Fixed: Text could overlap with the clear button on the hexadecimal/binary data input fields
    • Fixed: A data input field could clip text on some devices
    • Other: Accent color tuning
  • v2.1.0 - 2024-02-15
    • Added: A new toggle in the Preferences tab can be used to prevent the app from sleeping
  • v2.0.3 - 2023-12-25
    • Fixed: App would crash when broadcsting a service with a 4-byte UUID
  • v2.0.2 - 2023-12-18
    • Fixed: Some valid custom service and characteristic UUID inputs were not accepted
    • Fixed: Service and characteristic UUID inputs were not properly formatting
    • Changed: Version changelog moved to the about tab
    • Changed: Contact email template now includes the app version
    • Changed: Back-end tweaks to support more reliable instrumentation
  • v2.0.1 - 2023-10-10 - "New Icon"
    • Changed: App icon (art inspired by the shape of antenna spread patterns)
    • Changed: Data sharing preference text refined to be more specific
  • v2.0.0 - 2023-10-04 - "Low-Profile"
    • Changed: UI migrated to a tabbed view to enable new workflows
    • Added: Profiles feature - to enable quickly switching between sets of services/characteristics
    • Added: Open source attributions
    • Changed: Broadcast is now enabled by default on first launch
    • Other: Major app logic has been rewritten: improving reliability, enhancing flexibility, and supporting future work
  • v1.4.1 - 2023-04-11 - "UI Fixes"
    • Changed: Disabled rotation on iPhone since it can break some views
    • Fixed: Home view text could go into overflow mode on iPhone mini
  • v1.4.0 - Superseded - "Contact Me"
    • Added: Contact form to improve communication between developer and user
    • Added: Realtime feedback when user resets all preferences
  • v1.3.1 - 2023-03-09 - "Don't Suggest Dupes"
    • Fixed: App was suggesting GATT services/characteristics that were already added
    • Fixed: Updates view on iPhone was a half-sheet, which could cut off text
  • v1.3.0 - 2023-03-07 - "Optional Diagnostics"
    • Added: An optional diagnostics/crash reporting module, to help with the detection of breaking bugs
    • Changed: App Settings was renamed to Preferences, to avoid confusion with the iOS Settings app
    • Other: The privacy policy has been updated to reflect the optional diagnostics feature
  • v1.2.0 - 2023-02-12 - "Notify and Indicate"
    • Added: Characteristic properties to send data via notify and indicate
    • Fixed: The app was able to advertise even when the setting was switched off
    • Fixed: If characteristic output data was set while in binary-editing mode, changes might not have been saved
  • v1.1.0 - 2023-01-16 - "GATT Numbers"
    • Added: List of predefined GATT services and characteristics
    • Added: Updates screen to display the most recent app changes
    • Fixed: Local name updates not saved when using back button
  • v1.0.0 - 2023-01-15 - "MVP"
    • Customizable local name
    • Custom services and characteristics can be set and advertised
    • Read and Write properties allowed on characteristics
    • Basic logging system helps users keep track of multiple reads/writes
    • Stored preferences helps the app start up with the last configurations used

Platform targets

  • iOS/iPadOS
    • Current status: available for download
    • iOS app also available for Apple Silicon Macs
  • macOS secondary development (Unbegun)
    • MacOS-specific UIs
    • Intel Mac support
  • No development plan for other systems