I created this as a learning exercise whilst getting to grips with Test-Driven Development (TDD) with Swift in XCode. I wanted to create a simple app from the outside in, starting with feature tests then creating unit tests as and when required.
Current features:
- Add to-do items
- Delete to-do items
- Toggle items completion status
- Reminder alerts
- Persisting of data (saving to a local/remote database)
Features to come:
- Multiple lists of todo items (work, home, school, etc)
Enhancements to come:
- UI will scale to work on all devices (currently only scalesorks on iPhone 8 Plus until I set the constraints/pinning)
Issues are being tracked on GitHub, over here.
For the MVP of this app, it will have the following features:
- Add to-do items
- Delete to-do items
- Toggle items completion status
I've plumbed-in Core Data to store the data locally now, so todo items will persist over app closure and phone restarts.
At this point, all items are kept in memory and not persisted. This is coming in a later version of this app.
I've used TDD to write the code. I've used to MVC design pattern with an idea to possibly move this over to MVVM once I get my head around it.
I wanted to dive-in to getting to know as many features of the iOS SDK, and so far I've managed to encorporate the following into this project:
- Core Data
- UserNofications (UNUserNotificationCenter)
- XCTest
- iOS simulator
- an actual iPhone
- Testing for the UITableCell's accessory (checkmark) has proven impossible upto this point
- Clone this repo:
git clone https://github.com/acodeguy/Dunnit.git
- Open it in Xcode
- Run the tests:
Cmd+U
- Run the project in the simulator:
Cmd+R
This project has both UI and unit tests, found in the usual test folders. I've written this using TDD to drive development of only the absolutely essential code to make it work.
At the moment, this project has no third-party depdencies. This may change if I decide to really pimp it out with some Cocoapods for networking, storage, etc.
Use it, abuse it. But please don't sell it.