Apple’s official tool to slow down the network connections on you Mac for testing purposes is Network Link Conditioner. Additional Tools for Xcode version. Additionally, iOS has similar function accessible from within Xcode and iOS 6 or later. Older versions of Xcode before version 4.3.2 embedded a copy of this tool. Sometimes the iOS simulator doesn't respond to commands to open. If it seems to be stuck on this prompt, you can open the iOS simulator manually (open -a Simulator) and then in the macOS toolbar choose Hardware → Device and select an iOS version and device that you'd like to open.
- Mac Os Simulator For Windows
- Ios Simulator Macbook
- Ios Simulator Mac Os
- Iphone Simulator Mac
- Ios Simulator Macos Catalina
When developing mobile apps, it's important to recognize your mobile users will likely have a much slower network connection than you use while developing. So, it's good to run your app in a simulated poort network condition.
When I was primarily developing Cordova based apps (Ionic Framework), this was easy to do in Chrome, as it comes with built-in throttling. Now, that I'm developing React Native apps, I had no idea how to do this.
Today, I discovered the 'Network Link Conditioner' Sytem Preferences pane. It lets you throttle your Mac's entire network connection which of course limits the network speed of any iOS simulators or Android emulators on the same machine.
You'll need to install the conditioner from the Apple Developer's website. Search for the verion of 'Additional Tools Xcode ???' that matches your version of Xcode. Once the download is complete, open the '.dmg' file and double tap the 'Hardware' folder.
Next, double tap the 'Network Link Conditioner Pref Pane' icon to install it.
Now, just adjust the settings to whatever limits you want to apply. When you're done, be sure to turn this off or you'll be hating life living in a 3G world (how did we survive???)! It sure would be nice if this tool showed up in the menu bar to remind you it's enabled.
Hat tip to Spencer Carli for introducing this tool in his excellent Production Ready React Native course.
Libraries and Frameworks
The SDK requires the following frameworks for a successful compilation:
| Platform | Connection | BBDevice API | Framework |
|---|---|---|---|
| iOS | Bluetooth Classic, Bluetooth LE |
|
|
| iOS | Audio, Bluetooth Classic, Bluetooth LE |
|
|
| macOS | Bluetooth LE, USB |
|
|

BBDeviceSPoC.framework
To support Software-Based PIN Entry (SPoC), add the BBDeviceSPoC.framework under the project's Embedded Binaries section:

Build Settings
The SDK contains C and C++ files, to let Xcode compiler recognize all the library files, your app need tomake a few change in the project's Build Settings:
Objective-C
Mac Os Simulator For Windows

- Set the
C++ Standard LibrarytoLLVM C++. - Renaming the filename extension of the files that use the SDK from
.mto.mm.
Swift
- Set the
C++ Standard LibrarytoLLVM C++. - Create a file
YourProjectName-Bridging-Header.hthat imported all the required SDK.hfiles and set theObjective-C Bridging Headerto$(SRCROOT)/YourProjectName/YourProjectName-Bridging-Header.h. - Add
-lstdc++toOther Linker Flags.

Info.plist
Ios Simulator Macbook
The following key-value pairs are required in your app's Info.plist:
| Key | Value | Description |
|---|---|---|
NSMicrophoneUsageDescription | When the system prompts the user to allow access, this string is displayed as part of the alert. | Privacy - Microphone Usage Description. |
NSBluetoothPeripheralUsageDescription | When the system prompts the user to allow usage, the value that you provide for this key is displayed as part of the alert. | Privacy - Bluetooth Peripheral Usage Description. |
NSLocationWhenInUseUsageDescription and NSLocationAlwaysAndWhenInUseUsageDescriptionSPoC (If your app supports iOS 10 and earlier, the NSLocationAlwaysUsageDescription key is also required.) | When the system prompts the user to allow access, this string is displayed as part of the alert panel. | Privacy - Location Usage Description. |
UIBackgroundModes | audio, bluetooth-central (Bluetooth LE), external-accessory (Bluetooth Classic) | Required background modes. |
UISupportedExternalAccessoryProtocolsMPOS-PCI | com.bbpos.bt.wisepad (Bluetooth Classic) | Supported external accessory protocols. |
UIBackgroundModes
For better user experience, the app can enable background modes to allow the Audio/Bluetooth to continue to work when the app goes into the background. This prevents interruption on the data when the phone Home button is hit accidentally.
For Audio communication, a red warning bar will appear when the app enters background mode while the audio is still in use. When the app enters background mode, the SDK will stop the audio after a certain period of time (normally within 10 seconds). If the SDK detected the device is still plugged, it will try to restore the volume to previous value and a system volume pop up may appear during the restore process. When the red warning bar disappeared and the transaction is not yet completed, the error AudioBackgroundTimeout will be triggered.
UISupportedExternalAccessoryProtocols
Before submitting your iOS app for distribution, Apple requires all iOS apps that communicate with Apple approved MFi devices via Bluetooth Classic be registered with Apple. This whitelist process can take 3-5 business days. To request whitelisting, submit your app information to BBPOS through https://developer.bbpos.com.
Ios Simulator Mac Os
iOS Simulator
Iphone Simulator Mac
The iOS simulator is designed to assist you in designing and testing your app. To run the app in simulator, include all the -simulator.a libraries in the SDK zip to the app's project folder. However, depending on the Mac hardware differences and the simulated iOS device/version differences, the audio communication may not perform the same as testing on a real device. Additionally, simulator doesn’t support the Bluetooth frameworks and should not use for SPoC.
Ios Simulator Macos Catalina
Required for BBDeviceSPoC API. ↩
Required for WisePad devices with
Bluetooth Classicconnection. ↩