What I learned making a GitHub Task Bar app for MacOS

20 hours ago 1
I love checking my daily GitHub activity on my profile page. It's a nice way to see how I'm doing while giving me insights on my mental state over the course of a year. To make it easier to view, I came up with the idea of putting it in my macOS taskbar. In this article, I'll explain everything I discovered and learned while doing it. [here is the app link](https://github.com/chamaloriz/contribution-bar).

It’s my first time using cargo test to work on parts of my codebase

#[test] pub fn generate_icon_file() { let testing_vec: Vec<u8> = vec![0, 1, 2, 3, 4, 5, 6]; let img = generate_image(testing_vec); img.save("icon-test.png").expect("Failed to save image"); }

To round of the squares in the generated image I used a function to check the distance between two points. it works but it’s not true corner rounding.

// here is the rust version let distance_to_center = ((pixel_x as f64 - square_center.0 as f64).powi(2) + (pixel_y as f64 - square_center.1 as f64).powi(2)).sqrt();

I used an unofficial source for the data from here its cached hourly but it’s enough for the widget.

// here is an example output from the api at // GET : https://github-contributions-api.jogruber.de/v4/chamaloriz { "total": { "2014": 1, "2015": 0, "2016": 0, "2017": 0, "2018": 3, "2019": 241, "2020": 567, "2021": 84, "2022": 895, "2023": 1018, "2024": 1016, "2025": 762 }, "contributions": [ { "date": "2025-01-01", "count": 0, "level": 0 }, { "date": "2025-01-02", "count": 3, "level": 1 } ... ] }

To create the app for macos it’s basically a folder name app_name.app when you add the .app extension it starts looking for the Info.plist file.

<!-- here is the most minimal version of that file for my purpose --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleExecutable</key> <string>contribution-bar</string> <key>CFBundleIconFile</key> <string>icon.icns</string> <key>CFBundleName</key> <string>ContributionBar</string> <!-- this makes the app disapear from the dock and tab --> <key>LSUIElement</key> <true/> </dict> </plist>

To run the app after downloading it and if the app is not signed you can use this command

# it removes quarantine flags from flag (to bypass security warnings). to remove the “damaged app” error. xattr -cr /Applications/ContributionBar.app

If you try the app don’t hesitate to start it on github.


Read Entire Article