This is a running commentary for a development session where I attempt to quickly build a Bluetooth app on an iOS iPhone using an example from Github (the Zero to BLE example.)
I already have Xcode installed on an iMac and know and like Swift language.
My goal is a simple app that scans for a BLE advertiser (a peripheral providing a service), connects to it, and writes one BT characteristic of the service. The app has a simple GUI: one button that means: do the aforementioned.
I choose iOS because it is prevalent, and I have already developed other apps for it. I can worry about cross-platform to Android later.
Here, I just want to establish the processes and validate the example project. Later, I will modify the example to suit my app needs.
Getting an open source project
First I searched for open source. I decided that a Cloud City example on GitHub is a likely candidate.
Clone the project into say ~/git/ using a terminal and command line.
Building and testing the project
Choose the button “Open another project” in the lower right corner of the “Xcode welcome” screen, which you can always get to by choosing “Window>Welcome to Xcode.” Expect a file browser to open. Navigate to the …xcodeproj file in your repository clone, select that file, and choose OK. Expect for the project to open in Xcode.
Build and run it by choosing the Right-arrow icon in the upper left. Expect the project to build and for an iPhone simulator window to open. (There already exists a “scheme” of the project to build for the simulator.)
Unfortunately, the iPhone simulator does not support BLE, so expect a dialog box in the simulator saying to that effect. IOW, you really won’t be able to test the app using the simulator. Instead you need to download the app to real iPhone hardware.
Downloading to a real device
Choose the Square icon in the upper left (meaning “stop the running app”). Expect the simulator window to remain, but to quit the simulated app and show you the iOS home screen.
Now plug in a real BLE capable (4s or later) iPhone or iPad (some early iPads are not BLE capable.) Use a USB cable. Expect more “schemes” to appear in the combo box for “Set the active scheme” in the upper left of Xcode. Click on the combobox and choose “Device><foo’s>iPhone. Expect the current scheme to change to that.
Now click the “Build and Run” icon. Expect the app to download and run on your device.
Distraction: I get: "Could not find Developer Disk Image." This is a mismatch between Xcode and iOS on the device. Each version of Xcode requires a minimum version of OS X and supports a maximum version of iOS. See the section below: Upgrading various tools
Another distraction: I get error messages about the provisioning profile which Xcode offers to fix, and apparently does by using my Apple ID. Then I get "An App ID with identifier io.cloudcity.BLETemperatureReader is not available...". See the section below: Fixing the bundle identifier
Finally, the app downloaded to my phone and began working, displaying debug messages in Xcode.
My next post might be about modifying the example project.
Upgrading various tools
A quick search shows this SO post suggesting a mismatch between Xcode version and iOS version on my phone. Skip this section if you don’t have that problem.
Choose “Xcode>About Xcode” to see your current version. Mine is 7.2.
Choose “Apple>About this Mac” to see your current OS X version. Mine is 10.11.6 El Capitan.
Start the “App Store” app and choose the “Updates” tab. Expect it to show you whether there are any updates available. For me, none were.
On your iPhone, choose “Settings>General>About>Version”. My installed iOS is version 9.3.5.
Searching showed that the latest Xcode is 9.2. I don’t know why the App Store did not suggest it exists. A quick search shows that in App Store you must search for “Xcode” and then click the “update” button from that result. That didn’t seem to work, I got a spinning wheel but nothing seemed to happen.
The Xcode page on App Store says it is compatible with OS X 10.12.6 or later. So I need to upgrade OS X first? I think I have missed some updates so can’t updated directly from 10.11.6 to 10.12.6? Anyway I went to this Apple page and downloaded a 10.12.6 update directly. It takes several minutes. When I clicked on the .dmg, etc. I eventually got the message “… not supported on your system.”
Now a search reveals that 10.12 is “High Sierra” and that I need to “upgrade” not update. But the upgrade page says I need an iMac later than 2009, while mine is circa 2007 as shown by “About this Mac.” So I can’t upgrade to the latest Xcode.
But I can upgrade to a version that supports iOS 9.3.5 Wikipedia shows that Xcode 7.3.1 might support iOS 9.3.5 and run on my OS X.
So I downloaded and installed it (replacing my old installation) which took say an hour.
Fixing the bundle identifier
After Xcode complained about the provisioning profile and fixed it, Xcode did not like the original bundle identifier. So I changed it by clicking on the project, choosing the “General” tab, and changing the field “Identity:Bundle Identifier” to <my apple id email address>.BLETemperatureReader. The first part identities the developer or company building the app, the second part is the name of the app.
This post explains you can develop and provision to real devices without becoming a paid member of Apple Developer Program. You do need to have an Apple ID (but everyone does who uses an Apple product) but you don’t need to pay the annual fee to the ADP.