Mobile App Semester Project
Objective
The objective of this project is to give students an opportunity to demonstrate their ability to acquire in-depth technical proficiency on a native mobile platform in an area that is not directly addressed in lecture / homework, and the ability to creatively apply the knowledge gained in a fully functional demonstration app and communicate what they’ve learned via a written coding tutorial / presentation.
Overview
Students will optionally self-organize into groups of at most 3 students for the semester project. Each group of students must identify which platform their project will work on (Android or iOS), and which focus area they wish to study.
WARNING
Students who prefer to work solo on the project may do so. Project requirements remain the same whether you complete a solo project or a group project.
Group Formation Instructions
Students are free to self-organize into project groups of three or fewer students. If you would like to work in a group but do not know who else might be willing to work with you, feel free to start a conversation thread in the #semester-project channel on Slack created for this purpose. To recruit other students it might be helpful to mention your platform preference and topic interest if you have any.
Once you’ve formed a group, have one person in your group create a private channel that consists of the last names of each team member of the group separated by hyphens. For example, if Jane Doe, Juan Perez and Zhang San choose to work together, their group name would be group-doe-perez-san. Add each member of the group to the channel along with the instructor. Then post which platform focus area your group has chosen to work on.
If you choose to work solo, indicate your intent to work solo in a direct message to the instructor on Slack. Include in the direct message which focus area you have chosen to work on. Either way, create a private channel for you "solo group".
Platform Focus Area
Each group of students or solo students will pick one of the focus areas below for their project, and only one group or solo student will be allowed to study each given focus area. Focus areas will be allocated on a first-come-first-serve basis. Once you’ve become part of a group or decided to work solo you can post your focus area selection as described in the previous section. I will cross out topics as they are selected below.
Select topics from the lists below.
Android Topics
- ML Kit / TensorFlow (leong-farrey)
- Data Storage (on device options) (carpenter)
- Wear OS
- Game Development (turnbull)
- OpenGL ES
- Maps SDK (applegate-shanley-paquette)
- Location and Context APIs (barber)
- Motion sensors
- Camera/CameraX
- Media3 (Audio/Video)
- Google Mobile Ads SDK
- Broadcast Receivers/Services (mealing)
iOS Topics
- Core ML
- Core Data (pathuis-oly)
- Watch Kit (foster)
- GameKit
- SpriteKit/Metal
- MapKit
- Core Location (foster)
- Core Motion (thang)
- Camera and Media Capture
- Google Ads SDK
WARNING
Class lectures will not cover specific platform focus areas, each group will acquire in-depth proficiency in the focus area, by reading platform documentation, relevant books, online tutorials, etc.
Project Proposal (Due on Bb)
Write a (no more than) one-page project proposal which includes:
- Your team members
- Platform Focus Area(s)
- The app idea, what app are you creating?
- Describe the features provided by the app, how are the platform area(s) used to implement these features. Since this is a semester project, be sure to have and app idea that clearly generates the functionality of their focus area in a creative and realistic use cases. An implementation which demonstrates a "hello world" sample of the chosen platform area is not acceptable to be considered a semester project.
- Submit the proposal to Bb by the due date. The proposal is worth 5% of the project grade.
Demonstration App Idea
As you start to become technically proficient in your chosen focus area, start to think of a creative and realistic app scenario that you will implement to demonstrate the in-depth area of the platform you are studying. It is acceptable to use other platform features as well (e.g. if you are demoing Core Location, you might want to use MapKit as well) but keep the focus of your demo app on the area you have chosen. Avoid creating a “Swiss army knife” demonstration app!
Important
Please note that simply finding an existing tutorial on the Web and repurposing it as your own with minor tweaks to the source code is not acceptable. You must research your topic thoroughly and then write a demo app and tutorial of your own.
Midterm Progress
Before the Fall Break or Spring Break of the semester, each group will be evaluated for a midterm progress of the semester project. At this time, the following elements should be in place and in working order:
- All the UI screens are fully implemented, and the user is able to interact with the UI: data can be entered in textfields, buttons are working, etc.
- The UI show random/fake data (instead of real data)
- App navigation is functional the user can navigate from one screen to another
- UI logic shall be implemented (without the actual application/business logic)
- The midterm project progress is worth 20% of the class grade
TIP
Essentially, at the midterm progress due date your group should have implemented the scaffolding of the app, except for the specific code related to the platform focus area. After this due date, the remaining weeks of the semester will be used for your group to focus on the details of the platform focus area.
Writing Your Tutorial
As you develop proficiency in your focus area, author a coding tutorial that will help peer developers quickly come up to speed. You should assume the target audience is proficient in general on the platform you are working on, but has no experience in the focus area you have studied. Your tutorial should consist of the following sections:
- Overview: Description of the platform focus area you studied as well as the demo app your reader will be implementing as they follow your tutorial. Use screenshots and/or video clips liberally to help your reader understand the proposed functionality of the demo app.
- Getting started: Describe the software development environment, the reader will need on his/her machine to complete your tutorial, including things like IDE version, dependencies, and jump off links on where to download, install tutorials, etc.
- Step-by-step coding instructions. This could be subdivided into multiple sections as you see fit, but basically this will be the “meat” of your tutorial. It will consist of code snippets, text discussing the code, figures / videos of perhaps concepts that are hard to describe in text / code. Make sure any code snippets are formatted well and readable. Readers should also be able to copy/paste code snippets in your tutorial if they are attempting to follow along in their code editor as they read.
- Further Discussion/Conclusions. Summary of your tutorial, including any other alternative approaches developers might pursue to implement the same functionality (e.g. third party components that can be used in lieu of the native features you have studied) related platform features the reader might want to refer to for further study, as well as a link to a github repo of your complete source code.
- See Also Section: In this final section of your tutorial, provide a list of references (with hyperlinks) to similar or related tutorials, particularly those tutorials that you found helpful in learning about your topic and preparing your own demo and code tutorial.
Each project group will post their complete tutorial publicly on GitHub Pages, Medium or similar publishing platform when complete. It is also acceptable to use the wiki on your GitHub repo to publish your tutorial as long as you make it publicly viewable.
Your tutorial will be graded based on the following criteria:
- Overall organization
- Sufficient level of details for intended audience
- Use and quality of code snippets and visuals (figures, video)
- Formatting / general readability and correctness of tutorial
** Example Final Presentation / Demos
Here are a few final presentations/demos produced by students in recent semesters to give you an idea of the scope of the project.
Motion Sensors (Android)
Mobile Gaming with Unity (Android)
Health Kit (iOS)
Final Project Submission Requirements
Include the following deliverables:
A link to the GitHub repo of your project must be submitted via Blackboard by the project due date. Your project MUST be self-contained and build without further manual intervention by the instructor. 10 points will be automatically deducted from any project that does not build “out of the box”. Groups are free to use whatever workflow paradigm they wish in managing their code as the project progresses, but do make sure your final commits are all reflected on the main branch, so the Insights -> Contributors graphs accurately represent individual effort.
Important
It is important that every member of the team makes meaningful code commits to the repo. If you are pair programming, make sure each team member has a chance to “drive” and commit code under his/her identity. It is not acceptable for one person in the group to do all the work on the project!
A link to your final tutorial published on GitHub Pages.
A link to your final presentation Google Slides.
An embedded YouTube video recording of your presentation followed by a brief demo.
Final Due Date
The final project is due at 11:59p on the last Friday before the final exam week. Individual viewing/rating of peer projects due on Blackboard discussion board by the following Thursday.
Grading Rubric (Tentative)
Your work will be graded on the overall quality/creativity of your work and whether it meets the documented requirements. Grading will follow the rubric given below.
| Requirement | Point |
|---|---|
| Demo app | |
| (a) Proposal | 5 |
| (a) Creativity / breadth of coverage in focus area | 15 |
| (b) Authenticity | 15 |
| (c) Implementation | 20 |
| Tutorial | |
| (a) Overall organization | 5 |
| (b) Sufficient level of details for intended audience | 10 |
| (c) Use and quality of code snippets and visuals (figures, video) | 10 |
| (d) Formatting / general readability and correctness of tutorial | 10 |
| Final presentation to the class | 5 |
| Viewing and rating peers | 5 |