Mobile application for tracking infections of COVID-19 -FAILURE STORY [DEVLOG pt.1]
Tags: android, ios, coronavirus, devjournal
Published: 2020-04-04 19:37:35

On begging of this post, I would like to send my best regards to everyone who is doing their part and staying home in these hard times.

Week ago, I was wondering what new project I can start. So, I have decided to build Bluetooth coronavirus tracker. In this post I'm writing about everything from getting contributors to making app that is not working. I believe that failing and retrying is most important on road to **success**.
These posts will be divided to parts. I have never written this kind of post and please have in mind that English is my second language. 

### Day 1 
Today I have posted my idea on [r/iosprogramming](https://www.reddit.com/r/iOSProgramming/) and I have received contributor request. I talked to this developer and we have agreed on steps that we are going to take in building this project. Also, this was day where I put placeholder name 'TrackIT'. 

Our initial development plan was to build:
- iOS app
- server 
- android app

So we started working on this project. First few commits were on private git, and these were just playing around with BluetoothCore framework and going through documentation, building test apps and just bunch 'try & error' (if you are interested about BluetoothCore I'll be happy to share my view on that).

By playing with BluetoothCore I have noticed strange UUID for first time, but being noob in Bluetooth world I just ignored it. App was scanning for all devices in the area. 
Next step was to create artificial advertisement device inside iPhone that will be in charge of advertising that iPhone UUID for other devices to scan.
That part went without any problem, pretty straigh forward process.

In this moment we have decided to proceed in building this project fully with clean architecture (MVC). We setup organization on Github called 'TechAvangers' and have created first repo. 

We had few rules that were going to follow. Because important thing for this tracker was to work without flaws. That alone was hard to achieve but we agreed on how many external libs (3) we will implement in the project, and most important rule was to use **Swift Package Manger** instead of CocoaPods.


### Day 2 
Whole day was building core of an app, and testing (a lot of testing). There is specific way you can test with Bluetooth peripherals. You have to have some BLE device or simulate BLE device somehow. I decided on simulating BLE device trough an android app called 'BLE simulator', and that worked .

Till this day we have developed:
- core of an app scanning and peripheral emitting service (I will write detailed write up about how this was achieved)
- ui of pulsing animation 

<img src="https://i.ibb.co/NjSxYN0/trackit-1.gif" width="200" height="400" />


### Day 3 
We figured we have to add some database to save data till it can get synced with server. Our choice was Realm database, so we started implementation of this library in to project (here I fell in love with Realm :heart:). This was pretty easy to implement, altough there were some tricks that had to be done for testing realm on real device to get real path for 'default.realm'.
If you are having that issue [Follow this Stack Overflow solution](https://stackoverflow.com/a/28465803).

<img src="https://i.ibb.co/tzZWpWP/trackit-2.gif" width="200" height="400" />

I'm going to end this part right here, in next part coming (cringe alert): 

- building API with Node and Mongoose maps 
- craziness with developing android app 
- founding shocking security rule that makes this app FAILURE

If you want to read about scenario of using this app you can check it [here](https://github.com/TechAvangers/TrackIT-iOS#scenario)

If you have enjoyed this type of post leave a like.
  
Till the next post, stay home. Take care.
Nedim