A SwiftUI Mastodon client
Find a file
Chris Kolbu 9e347c75b9
Timeline & Timeline detail accessibility uplift (#1323)
* Improve accessibility of StatusPollView

Previously, this view did not provide the proper context to indicate that it represented a poll.

Now, we’ve added
- A container that will stay “Active poll” or “Poll results” when the cursor first hits one of the options;
- A prefix to say “Option X of Y” before each option;
- A Selected trait on the selected option(s), if present
- Consolidating and adding an `.updatesFrequently` trait to the footer view with the countdown.

* Add poll description in StatusRowView combinedAccessibilityLabel

This largely duplicates the logic in `StatusPollView`.

* Improve accessibility of media attachments

Previously, the media attachments without alt text would not show up in the consolidated `StatusRowView`, nor would they be meaningfully explained on the status detail screen.

Now, they are presented with their attachment type.

* Change accessibilityRepresentation of AppAcountsSelectorView

* Change Notifications tab title view accessibility representation to Menu

Previously it would present as a button

* Hide layout `Rectangle`s from accessibility

* Consolidate `StatusRowDetailView` accessibility representation

* Improve readability of Poll accessibility label

* Ensure poll options don’t present as interactive when the poll is finished

* Improve accessibility of StatusRowCardView

Previously, it would present as four separate elements, including an image without a description, all interactive, none with an interactive trait.

Now, it presents as a single element with the `.link` trait

* Improve accessibility of StatusRowHeaderView

Previously, it had no traits and no actions except inherited ones.

Now it presents as a button, triggering its primary action.

It also has custom actions corresponding to its context menu

* Avoid applying the StatusRowView custom actions to every view when contained

* Provide context for the application name

* Add pauses to StatusRowView combinedAccessibilityLabel

* Hide `TimelineView.scrollToTopView` from accessibility

* Set appropriate font style on Notification header

After the change the Text needed a `.headline` style to match the prior appearance.

* Fix bug in accessibilityRepresentation of TimelineView nav bar title

Previously, it would not display the proper label for .remoteLocal filter options.

* Ensure that pop-up button nav bar titles are interactive

* Ensure TextView responds to Environment.sizeCategory

This resolves #1309

* Fix button

---------

Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
2023-03-28 18:48:58 +02:00
.github Templated detailed bug filing (#731) 2023-02-09 06:22:41 +01:00
ci_scripts Translate Toot using DeepL close #153 2023-01-21 09:58:38 +01:00
IceCubesActionExtension Traditional Chinese (zh-Hant) localization (#1170) 2023-03-05 07:25:34 +01:00
IceCubesApp Timeline & Timeline detail accessibility uplift (#1323) 2023-03-28 18:48:58 +02:00
IceCubesApp.xcodeproj Bump to 1.6.11 2023-03-26 18:33:08 +02:00
IceCubesNotifications Updated to resolve all possible Sendability warnings from Swift 6 compatibility mode. (#1072) 2023-02-27 06:39:07 +01:00
IceCubesShareExtension SwiftFormat 2023-03-13 13:38:28 +01:00
Images Improved readability of readme (#628) 2023-02-03 07:18:19 +01:00
Packages Timeline & Timeline detail accessibility uplift (#1323) 2023-03-28 18:48:58 +02:00
.gitignore xcconfig Support (#342) 2023-01-24 17:29:20 +01:00
.swiftformat Swiftformat 2023-01-17 11:36:01 +01:00
IceCubesApp-release.xcconfig xcconfig Support (#342) 2023-01-24 17:29:20 +01:00
IceCubesApp.xcconfig.template xcconfig Support (#342) 2023-01-24 17:29:20 +01:00
LICENSE Initial commit 2022-11-20 15:10:58 +01:00
PRIVACY.MD Switch to new Chat completion API + Add Tags completion 2023-03-09 13:46:04 +01:00
README.md Improved readability of readme (#628) 2023-02-03 07:18:19 +01:00
TERMS.MD Add supporter subscription + supporter badge 2023-03-01 20:07:40 +01:00

IceCubesApp

Download on the App Store

IceCubesApp is an open source application for accessing the decentralized social network Mastodon! It's built entirely in SwiftUI, making it fast, lightweight, and easy to use.

You can connect to any Mastodon instance and browse your timeline, interact with other users, and post updates and media.

The project is split into different Swift Packages to make it easier to manage and maintain the codebase. Each package is focused on a specific aspect of the application, such as the UI, network communication, or data models. This modular approach allows for easier collaboration and ensures that the code is organized and easy to understand.

It's a great starting point for learning SwiftUI. The app covers many of the basic concepts of SwiftUI, such as building layouts, working with data, and handling user interaction. By exploring the code, you can gain a solid understanding of how to use SwiftUI in your daily life. Plus, the open source nature of IceCubesApp means that you can see how real-world applications are built and get a sense of best practices for using SwiftUI.

The architecture is straightforward MVVM for most parts, no redux on this one ;)

Please note that IceCubesApp is currently in an early stage of development and as such, there are many features that are still missing. While the app is functional and can be used to browse and interact with Mastodon, there are still many features that are planned for the future.

Thanks!

Icon

Building the project

To build the project, you need to clone the repo and create a copy of the included .xcconfig file to create your config before you can compile the project. Otherwise, you will get an error.

Here are the steps:

  1. Clone the repo
  2. In the same folder that contains the IceCubesApp.xcconfig.template, run this command:
cp IceCubesApp.xcconfig.template IceCubesApp.xcconfig
  1. Fill in the DEVELOPMENT_TEAM and BUNDLE_ID_PREFIX values. The first should have your Apple Team ID (which you can find by logging into the Apple Developer Portal). The latter is your domain in reverse notation or whatever you use as the prefix for your projects.
  2. Save your changes, and then you should be able to compile the project without any issues.