Skip to content

iOS app build uising Swift (UIKit) and CoreData to take attendances of a small group of people.

License

Notifications You must be signed in to change notification settings

leobartowski/Bdc

Repository files navigation


BdC

Bdc is an app created to take the attendance of a group of friends who meet on daily basis in a common place.


Why

This app was created as a solution to replace traditional methods like Excel files, time sheets, or similar tools for managing attendance. It is designed for a single administrator to track attendance for all users and share the data via PDF, with options to filter by time frame.
The app features a dedicated section for detailed attendance statistics, offering insights on both individual and group data.
Over time, many specific features have been added, such as attendance difficulties, confetti to celebrate 100% attendance in a given period, automatic dark mode, the inability to register attendance on holidays, and many more.
I created this project for personal use and not for commercial distribution so many features have not been created in the best way possible but only with the purpose of being functional to my needs.



Detail

The app is divided in four main section:

Calendar

It's the view displayed when the app starts and it's used to take attendances or to view the attendees of a past day.


The calendar is displayed weekly by default but with a scroll it can become monthly. Clicking on a specific person's card makes them present for that day in that specific slot (morning or afternoon) while the long press gives them a warning (system created to avoid unfulfilled reservations). At the bottom of the collection view, a counter displays the number of people present and those admonished.


Ranking

The primary purpose of this section is to display the number of appearances made during a specific period. By default, the display shows weekly data, which can be navigated using horizontal scrolling to move between weeks. Clicking on a person's name opens a modal with their individual statistics (Statistics for details), while clicking elsewhere on the cell expands it to reveal detailed information about the specific days of the week when attendance or warnings were recorded.


The user, using the two button on the top left, can change the time period (week, month, year or all-time) and the slot (morning, evening or both) used to calculate the number of attendances.

After the user has chosen the time frame and the slot he is interested in, he can share attendance in pdf. The app will automatically generate a file indicating the filters chosen and the number of appearances and warnings for each user.

Statistics

The Statistics section of the app provides detailed insights into attendance data, catering to both group-level and individual-level analysis. While both modes share the same view controller for a consistent user experience, each mode includes sections tailored to its specific focus.

  • Group Statistics: Accessible via an item in the tab bar, this mode provides an overview of attendance data for the entire group. It offers aggregated insights and trends that help identify patterns across all users.
  • Individual Statistics: To view the statistics of a specific person, navigate to the Ranking tab and click on their name. This action opens the individual statistics view, which highlights the attendance history and trends of the selected person.


Group Statistics

The group statistics view provides an overview of attendance trends for all participants. At the top of the screen, you’ll find key information, including the total number of recorded attendances and the day with the highest attendance.

Below this summary, data is organized by specific time periods:

  • Weekly
  • Monthly
  • Yearly This categorization allows you to explore a series of charts and statistics tailored to the selected time frame. Specifically, the section includes three distinct charts:

Dynamic Line Chart:

This chart displays attendance trends over the chosen period. With a light press on any part of the chart, you can drill down into attendance data for the selected time-frame, enabling a deeper analysis of trends and patterns.



Below this chart, there is an animated label that highlights how attendance in the recently completed period has changed compared to the immediately preceding one. This calculation is dynamic and adjusts based on the time frame currently being viewed, providing real-time insights into attendance trends.

Dynamic Dual-Line Chart:

This chart provides the same information as the previous one but separates the data into two lines: one representing morning attendances and the other representing afternoon attendances. This distinction allows for a clearer comparison of attendance trends across different times of the day.
This section also includes a label that indicates how much higher the attendance for a specific time slot (morning or afternoon) is compared to the other.

Bar Chart:

Lastly, the bar chart is available exclusively in the weekly and monthly views, but not in the annual view.

  • Weekly View: The chart displays the number of attendances for each day of the week (Monday, Tuesday, etc.).
  • Monthly View: The chart shows the number of attendances for each month (January, February, etc.).


Individual Statistics

In the individual statistics view, the three previously explained charts are customized to display data for a specific person rather than the group.
Unlike the group charts, line individual charts have a fixed y-axis scale based on the maximum possible attendance within the selected period. For example:

  • Weekly View: Capped at 10 (5 working days, with morning and afternoon sessions).
  • Monthly View: Capped at 46 (23 working days, with morning and afternoon sessions).
  • Annual View: Capped at 510 (255 working days, with morning and afternoon sessions).

In addition to the customized charts, the individual statistics include the following additional information:

  • First Attendance Date: displays the date of the first recorded attendance for the selected person.
  • Total Attendances (Morning and Afternoon): provides a breakdown of the total attendances into morning and afternoon sessions, offering a clearer view of their participation pattern.
  • Longest Consecutive Attendance Streak: highlights the longest streak of consecutive days in which the person recorded at least one attendance. The start and end dates of this streak are also displayed.
  • Best Friends Podium: a fun visualization that shows the top three people with whom the individual has shared the most attendances. The podium displays:
    • The picture of the friends on top of the podium
    • The number of shared attendances
    • The percentage of times these people attended together with the individual in question


Settings

The settings allow the user to customize different things around all the app such as: avoid modification old days, show percentage of attendance in chosen time frame, show/hidden confetti it a person complete a perfect period (100 % attendance) and the possibility of multiplying the all-time attendance by a difficulty coefficient based on the distance between the chosen location and the person's residence.


As you can see, the people list is dynamic and people can be added / removed at any time.
In the settings it's possible to see all the amazing open-source projects (❤️) that helped the creation of this app.



Development

How

The app is fully developed in Swift (UIKit), it doesn't have any networking and all the attendance are saved using CoreData. All the design is made entirely by me using Figma.

I use this Trello board to keep track of bugs and nice things to implement, take a look if you want. Suggestions and constructive criticisms are always welcome so feel to leave a comment!

Requirements

iOS Deployment Target Xcode Version Swift Language Version
17.0 16.0 Swift 5

Installation

  1. Install CocoaPods.
  2. Go to the project directory in terminal and execute pod install.

Configure Signing

  1. Open Bdc.xcworkspace with Xcode.
  2. In Xcode navigate to the Signing & Capabilities panel of the project editor.
  3. Change Team to your team.
  4. Change Bundle identifier to something unique.

Run

  1. In Xcode use the Scheme menu to select the Bdc scheme.
  2. Run the app.

License

This project is licensed under the terms of the MIT license.

About

iOS app build uising Swift (UIKit) and CoreData to take attendances of a small group of people.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages