Inspiration
Currently we're all stuck inside waiting for this quarantine to be over. Everyone is bored and wants to get out of their house. I believe this is a good time to look back on all the exciting moments in our lives to forget about the fact that we can't leave the house. So my app idea was to allow people to create their own map that displays all the cities they've visited in their life. Every city in the world has something special about it and everyone has a memory of all the cities they've traveled to. Creating a collection of visited cities would be a really nice way for someone to keep track of where they've been and attach a memory to it. Users can continuously add cities to their list and create a customization screen, where they can add the date they visited, a picture, and comments. The end result is a world map with a bunch of markers everywhere. Everyone's map will be different and heavily personalized. Users will come back to the app whenever they want to re-visit a memory.
What it does
Users are initially greeted with a world map, where they can easily move around and zoom in on. If they tap the "plus" button in the top right, they are able to search for a city. Once they type in a city, the map zooms in on that city and they are given the option to add it to their list. If they say yes, they are brought to a new screen for their specific city. Here they can view the exact location, add the date they visited it, add a picture, and add comments. This screen is meant for the user to customize to their liking, as it gets saved and they can always come back to it and view their memory.
The user can add as many cities as they want to their list. The app supports every single city in the world and displays all of the added cities as markers on the map. Once they populate their map, they can come back to it any time and keep adding more. They can also view it on any apple device as it backs up to iCloud.
How I built it
I built the app entirely using Xcode/Swift. The UI is built with UIKit, and the MapKit framework is used to display the map. To get the city data, I parsed a large JSON file from the internet. I also saved all user data to iCloud so that nothing gets deleted when they close the app or use a different Apple Device.
Challenges I ran into
The biggest challenge I ran into was saving all the user data so that it wouldn't get deleted when they close the app. I needed to save all the cities the user adds to their list, and then all the data associated with them. The user is able to edit this data whenever they want so that makes it even more difficult to save data efficiently. I ended up having to refactor a lot of code to get it working but in the end it was worth it. Not only does the data save to the user's device, it also saves to their iCloud account so that they can easily view their map on another apple device.
I also had problems with the search functionality. Apple's built in search returns anything it can find, from countries, to pizza shops. I only wanted it to return cities so I needed to come up with a good solution. I decided to find a city dataset and then only allow the user to search for items within that dataset. I did it in such a way that the search query still goes through Apple's API and then goes through the dataset filter I made. This meant that people could have typos in their query and it would still return the correct result. I was very satisfied with this result.
Accomplishments that I'm proud of
I am proud of the fact that the app works really well and has no bugs (that I know of). I got stuck many times trying to fix bugs or implement features and I'm glad I pushed through and managed to get everything working to my liking.
What I learned
I learned quite a bit while developing this app. I learned how to use the MapKit framework, how to parse JSON with Swift, how to save user data to iCloud, how to build a complex TableView, and how to add search functionality in apps. Overall it was an amazing experience and I feel like a much better iOS Developer now.
What's next for Land Mark
A feature that I wanted to add but didn't have time for, would be sharing capabilities. I want users to be able to share their maps full of their experiences/memories with their friends/family so that they can view it on their device. This would be a great addition to the app and would definitely be a challenge to implement. I would also like to add an On-boarding screen to inform the user what the app is all about and how to use it. I will be submitting this to the App Store very soon.
Log in or sign up for Devpost to join the conversation.