- Inspirio
- Intuitive and effective way to capture your inspirations
Background
In 10-weeks of timeframe, I was tasked to develop a native
mobile application using XCode and Swift. The application I
developed is called, “inspirio”. It is a mobile application to
manage your inspirations for your projects. You can save and
organize any photos and thoughts related to your project. There are
many existing applications, in which you can manage your photos
and thoughts with, but not specifically for your project. Hence, I
came up with the idea for “inspirio”, in which you can simply organize
photos and add your thoughts for different project to help you
stay inspired and productive.
Challenges
The major challenges for the project were the limited timeframe
and knowledges in XCode and Swift as I was learning new tools at
the same time I was building the actual application. I had to
constantly research to build any parts of the application, such as
custom button, dynamic text view height, etc.
Hence, there were lots of adjustments in the scope of the
project throughout the development. I needed to be wise with how
much time I can allocate to each feature in the application as
well as which features have priorities over others.
Development
Since the structure of the application was very much based on how
I want to use this for myself, I had clear ideas of how it should
look like and function. Hence, I began by building mockups in
Sketch; I added color schemes and custom UI components. And then,
I transferred these static mockups into interactive
prototype using XCode getting used to the concept of its constraints
and interfaces.
Once I transferred over to XCode, the process was the
iteration of addition and adjustments. I gradually built upon what
we learned in the class as well as what I taught myself from
online resources. Because I was building the application as I was
learning, my initial design went through several changes in its
features. For example, there was a tag system throughout the
application in the initial design that allows users to filter
posts (photo and note) with specific categories; however, this was
removed as I wanted to spend more time on how to import photos
from user’s album on device, which requires additional plugin from XCode.
Besides removing the initially designed feature, I also added few new features as I was building in XCode. And I also needed to be wise how to fit those newly added features without pushing my current timeline. For removing existing projects and posting, I decided to implement simple long press interaction along with alert system as it will be simple enhancement from button events we learned in the class without adding complexity to current design and code. Alert system was also implemented to prevent errors from insufficient inputs when adding projects and posts.
Once I figured out how to collect all the necessary inputs, such
as image and project name, from users, the next big step was to
store these inputs in XCode’s CoreData. Storing string input to
CoreData was easy but, storing color and image object was a bit
tricky task. Since CoreData does not support attributes/fields
with the specific type for color and image, I had to find a way to
convert them into acceptable type of data and convert back for the
use. Fortunately, for color object, which is necessary for
creating new project, I found the extension that allows to convert
color object to hex string and to use that hex string for color
object. And for image, I was able to convert it to binary data and
then, use that data for storing and retrieving to display an
image.
As CoreData isn’t meant to store large data, this approach
wasn’t the best approach to store images; however, it was the best
approach to establish the working feature of storing images on
time with some caveats in optimization.
Final outcome
Although the final deliverable went through lots of adjustments
from its initial features and design, the application fulfills the
very intention I had when ideating it, which is to provide the
place to store and organize user’s inspirational media for
different projects.
The main takeaway from this project is not
only to learn how to build an application from XCode, but also to
expand upon what you learn in the class. And through that process,
I improved my skills in reading and understanding somebody else’s
code and making those lines of code to work with my code.