Insty is a photo sharing app using Parse as its backend.
Time spent: 14 hours spent in total
The following required functionality is completed:
- User can sign up to create a new account using Parse authentication
- User can log in and log out of his or her account
- The current signed in user is persisted across app restarts
- User can take a photo, add a caption, and post it to "Instagram"
- User can view the last 20 posts submitted to "Instagram"
The following optional features are implemented:
- Show the username and creation time for each post
- After the user submits a new post, show a progress HUD while the post is being uploaded to Parse.
- User Profiles:
- Allow the logged in user to add a profile photo
- Display the profile photo with each post
- Tapping on a post's username or profile photo goes to that user's profile page
The following additional features are implemented:
- Obfuscated my own Parse account credentials by placing them in a seperate plist file that is in my .gitignore. To run this app see instructions below.
- Added a diagonal gradient in the login view (kindof like the actual Instagram app).
- Made the image view circular, similar to the Instagram app.
- Wrote a reusable text field class (outside of the VC) that makes the text fields in the login view look similar to the actual Instagram app text fields.
- Wrote a reusable button class (outside of the VC) that makes the buttons in the login view look similar to the actual Instagram app buttons.
- When the buttons are clicked they are animated and change size using pop.
- Created a rather swell UI with icons and pretty things that looks similar to the Instagram app (with my own touches).
- Accounted for user not typing anything into the form in the login view (the buttons are un-enabled until a password is provided).
- When the password text field is edited the buttons opacity is animated and increased, similar to the Instagram app. And if there is text typed into the password text field the opacity increases otherwise it decreases signifying that the buttons won't work if tapped (UX things I guess?).
- Hiding password entry in the login view.
- Auto layout @_ @.
- Hides navigation bar when swiping on the feed table view while simultaneously allowing the user to tap the status bar and scroll to the top and redisplaying the navigation bar, very similar to the actual Instagram app.
- Upon posting an image to parse the app segues back to the feed view and will display the recently added post and caption.
- Using a tap gesture to exit text field editing view.
- Adding refreshing upon pulling down the table view NOTE: This feature is not pictured in the video walkthrough because I need someone else to compile my code and post a status for me to test this.
Please list two areas of the assignment you'd like to discuss further with your peers during the next class (examples include better ways to implement something, how to extend your app in certain ways, etc):
Here's a walkthrough of implemented user stories:
GIF created with LiceCap.
To run this app you will need to provide your own Parse credentials and create a with these values key.plist
file.
The function that handles the secret values is called retrieveKeys()
and can be found in the AppDelegate.swift
.
A problem that I still have currently is how slowly the images are loading (in general) and how scrolling causes the app to try to fetch images for the cell (whoops)... I think in the future I will try to load all the images (first 20) first somehow and then display the view to the user, instead of having the images being pulled from the server when you scroll on the cell.
- All of the icons IN the app are from Icons8
- The super cute app icon is by Tahsin Tahil from Iconfinder
Copyright [2016] [Lisa Maldonado]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.