GithubHelp home page GithubHelp logo

mbird-ios's Introduction

mbird-iOS

This is a project to create an iOS reader app for Mockingbird.

Design Decisions

This project introduces coordinators that manage view controller transitions.

Setup

We are going with SwiftLint to enforce a consistent coding style. The setup is outlined in the readme on the swiftlint website. Once you install the SwiftLint pod locally, you will need to add $PODS_ROOT environment variable to your .bash_profile so that the build phases script "${PODS_ROOT}/SwiftLint/swiftlint" actually works.

Github Usage

To make changes to master, you must create a new branch and submit a pull request with your proposed changes. Once a reviewer signs off on the changes, then you will be allowed to merge them in. This policy is enforced on everyone.

Helpful Links

  1. SwiftLint Repo
  2. Coordinator Pattern
  3. Coordinator Example

mbird-ios's People

Contributors

alexramey avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

thepowerofswift

mbird-ios's Issues

Article Paging

Right now, the backend exposes a syncAllData and getArticles method.

syncAllData just grabs the 25 most recent articles from the API and saves them to the device.
getArticles reads them from the device.

We need some way for the user to scroll and get more articles. The backend should expose a syncLatestArticlesForCategoryWithOffset(num, category, offset, completion) function that tries to download the next batch of num articles at the given offset. On completion, it can invoke a completion closure.

Then the articleController could call this method and load more articles when it's done. Each table view cell can manage loading more articles for its specific category.

A maximum of 50 articles per category should be allowed.

Related: Investigate NSFetchedResultsController

Bookmarks

Take care not to let these get deleted by the delete job (should just need to add a predicate to the fetch requests in that function to ignore bookmarked articles)

Investigate: Only store article objectIDs in the state

This is the simplest way to keep things immutable in the state. There will be ramifications in the articles view controller, which now needs to actually get the articles from core data.

Note: bookmarks can be stored as a list of object ids in state as well. investigate using a middleware to persist bookmarking and to initially read articles from disk and or fetch them . . .

User Settings

Users should be able to adjust:

Max Number of Articles Saved on Device

Accessibility

Make sure our app honors bigger font sizes

Articles: - TODO
Bookmarks: - TODO
Devotions: - TODO
Podcasts: - TODO

Investigate Cancelling Notifications and Devotions Update Process

Suppose we want to do an app update and change our data source for devotions. (Realistically, this will probably be us dropping a new file into the app bundle and pushing an update to the App Store)

We need some facility to recognize the change (consider adding a version number in the data source somehow), and then we need to cancel outstanding notifications and reschedule new ones.

Think through this and come up with a way to do this

Data Cleanup Task

After we sync data, do some smart cleanup.

Example: If there are now over 200 articles saved to device, delete the oldest ones that aren't bookmarked to get the number back to 200.

Category Sections

Our articles home screen needs to be split into sections. Maybe the 10 latest can go in latest up top. Then there needs to be categories.

https://www.mbird.com/wp-json/wp/v2/categories?parent=0&per_page=20

will return all the base level categories. We can discover what base category an article belongs to by grabbing its categories and working up the tree until we find a base category.

obviously, if a category has 0 posts, just dynamically omit it from the table. This can get us closer to the Apple News look

Solve Startup Crash that starts after having the app installed for a while

This is really bad, b/c, once it starts crashing, it always crashes . . . And I have no idea why

Guesses: 1) Core Data or ReSwift Threading issues ?

Ideally we could reproduce this on the simulator. Think of what might happen after a long period of time? Is it related to the article sync after a week in viewDidLoad of ArticlesController? Is there some data inconsistency that happens after a new sync?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.