DySi Open

DySi Open uses Dynamic Signal's one public api to get data.

Time Spent: Friday May 4 to Tuesday May 8

Majority of time taken by:

  • Learning about MVVM framework
  • Learning about unit testing in iOS
  • Getting started with Texture

Tasks

  • Create a new empty project in Xcode.
  • Setup Git for this project and link it to your personal account, make a first commit.
  • Using a framework of your choosing (native or 3rd party), make a call to Dynamic Signals public api. The response will be a JSON array of post objects. You can see what these objects look like here.
  • Using Texture framework, render the following for each post:
    • author (including profile image if it exists)
    • title
    • description
    • creation date
    • post’s image (if exists in the “media” array)
  • Clicking on each post should open the post’s "permalink” in a webView.
  • Neat UI that should look decent and work on different screen sizes + landscape mode: Thanks to Texture

Bonus (Nice to have features):-

  • Implement pull-to-refresh.
  • Implement caching mechanism for the server response: Default with Alamofire
  • Implement caching mechanism for images: Defaults with PINCache

Extra features I've added

  • User sees an alert when there's a networking error.
  • User sees a loading state while waiting for posts to load.
  • User sees images being rendered progressively as it gets downloaded.
  • User sees Launch Image when they open the app
  • User sees a view with a message when the table does not have any posts to show. User will not see empty table cells.
  • User sees alert when no internet while loading webpage of the permalink
  • User sees progress indicator at either below the navigation bar or at the bottom of the screen signifying a loading page when the web page of the permalink is being loaded
  • Not a feature (actually a discouraged action): overrode SSL requirements so users can view resources from links that use HTTP (since there were images that used http)

Unit testing started for

  • Utils/ErrorHandler
  • Models/DySiPost
  • Models/DySiPostAuthor
  • ViewControllers/ViewModels/AllPostsTableViewModel
  • ViewControllers/ViewModels/PostTableNodeCellViewModel These above mentioned unit tests are not comprehensive, but are there to show that the code is testable

Things that could be improved upon in future (when not in time constraint)

  • Testing for Managers/DySiDataManager
  • Higher test coverage
  • UI testing

Final App (with full internet access):

Video Walkthrough

Final App (without internet in beginning and end):

No internet video walkthrough