A Swift mailing list client for iPhone and iPad

Related tags

Content App Charter

Due to costs and lack of interest, I’ve had to take down the Charter service.

If you’re interested in running your own copy, get in touch and I can send you the database backups.

An iOS client for the Swift mailing lists by @_matthewpalmer.


How do I run the iOS app?

You can download it from the App Store or run it yourself:

  1. git clone https://github.com/matthewpalmer/Charter
  2. cd iOS/Charter
  3. pod install
  4. open Charter.xcworkspace
  5. Run the app! Everything should be good to go.

How do I run the backend?

Running the backend is a little more tedious because it involves importing a bunch of archival data from the lists.swift.org website. Check out the README in the /Backend directory.

Can I contribute?

Of course! We’d love to see contributions from everyone, especially people trying to scratch an itch they’ve found after using the app. If you come across anything you want to work on, open an issue and get started.

If you’re keen to contribute but don’t feel like coding, there’s a bunch of stuff that needs to be done. We’re always trying to

  • improve the visual design of the app
  • improve the app icon
  • improve App Store marketing—think copy writing for the description, gorgeous screenshots, and maybe even a product video preview
  • translation and localisation (!!!)
  • improve the speed of the server or make the database more efficient
  • make suggestions, report bugs, ask questions, help people who ask questions

If you do any of the above, remember to open a PR to add yourself to the CONTRIBUTORS file! After a few contributions, we’ll give you push access so you can review and merge pull requests.


My personal thanks to everyone who has contributed to Charter!

  • haawa799 — improved access to the App Store listing from the README
  • FranciscoAmado — added localizations for Portugese and Spanish
  • denissezavala — added refreshing threads when the view loads and improved the threads list’s design
  • fortinmike — added the previous and next buttons to the conversation view
  • Localisation


    • Localisation files for Portuguese and Spanish
    • Localized possible xibs
    • String localisation with constants through Localizable.swift % Corrected NoThreadsTableViewCell xib to support bigger strings: constraining labels to leading and trailing instead of centring X and giving it max width @matthewpalmer Issue #36
    opened by franciscoamado 5
  • Add labels in table view

    Add labels in table view

    People often put [Idea] and [Review] and stuff in the subject line for their messages. It'd be cool to turn these into coloured labels (c/f github issue labels) on the message, and maybe eventually search for them

    opened by matthewpalmer 5
  • QR code in Readme

    QR code in Readme

    In case someone opened this repository not on mobile, Apple's download banner doesn't help much. Added QR code and moved CI build status to the top of the Readme.

    opened by haawa799 4
  • added support for Swift Package Manager mailing list

    added support for Swift Package Manager mailing list

    Hi. swift-build-dev is quite useful to track especially when you're interested in Swift Package Manager development. This pull requests adds support for this mailing list both in client and backend code. Cheers.

    opened by MaxDesiatov 3
  • Localisation branch

    Localisation branch

    Hi, I'm sorry to bother but I took the liberty to localize your app to Portuguese and Spanish. My problem is that I created a branch for it, directly from your repository instead of forking first. Only noticed it when was pushing the commit.

    Are you interested in localizing it as you say in the Readme? If so, any advice on how to handle it now or should I just create the PR?

    opened by franciscoamado 3
  • Changes to the way newlines are handled (needs investigation)

    Changes to the way newlines are handled (needs investigation)

    Often when reading you come across an awkward newline... I wonder if we can do something like if char == '\n' and column == 80 (I think they get wrapped at 80?) then strip the newline otherwise use the newline.

    opened by matthewpalmer 3
  • Miscellaneous smaller tasks

    Miscellaneous smaller tasks

    • [x] think about whether the data sources to the various view controllers should be turned into protocols and injected (at this stage, I'm thinking yes, but it's maybe a little tricky because of the view lifecycle)
    • [x] unit tests for thread detail data source
    • [x] add tests for formatContent on the EmailFormatter class
    • [x] remove various retain cycles that I've introduced
    • [x] go through TODOs littered throughout the codebase and open issues or fix
    opened by matthewpalmer 3
  • Add backend

    Add backend

    Add a backend for faster list refresh

    • [x] add mail listener
    • [x] parse emails
    • [x] present emails as REST API
    • [x] auth for REST API
    • [x] ~~partition emails into threads if they have no references or in-reply-to. also handle the Dave Abrahams case where he doesn't set in-reply-to~~. Hmm... not sure what to do here yet, but definitely need to be better at handling this so that we get proper threading all the time. Also, provide a /threads endpoint for a list that just has the root emails for each thread

    New feature

    • [x] add archive URL so we can link to the posts on the swift lists website

    Current thinking for the archive URL approach:

    Compute a new message's archive URL from the previous message in the db. Every x minutes check that the most recent document's archive URL matches the page it points to. If it matches, we're ok, and continue. If it does not match, find the message that the page references, set the archive URL for that page, and then recompute all archive URLs for messages that come after that message (by date).

    This won't ensure 100% accuracy, but bounds inaccuracy within hour-long periods and minimises the number of requests we have to make against the server

    • [x] Add tests for backend
    • [x] Clean up logging
    • [x] ~~Clean up db instantiation~~
    • [x] Open source the backend (open sourcing might take a little while to get all the config stuff set up... also, #7 ?)
    opened by matthewpalmer 3
  • Switch to Storyboards

    Switch to Storyboards

    One of the things I noticed when watching @orta’s tvOS app code review video was how helpful it was to have a storyboard to look at when first seeing the codebase. I want new contributors to this app to be able to get a quick overview of the app flow, and a storyboard is the best way to do that. While it might not be 100% the best technical choice, the value it'll add to the community is too much to ignore.

    opened by matthewpalmer 3
  • Add previous/next message arrows in ThreadDetailViewController

    Add previous/next message arrows in ThreadDetailViewController

    I use Charter quite often these days to stay informed about Swift's evolution (thanks for making the app, by the way!)

    One thing I find tedious is navigating within a thread. I often want to get a feel for the general opinion on a specific subject instead of reading everyone's whole argument in detail.

    This pull request adds previous/next arrows to the ThreadDetailViewController navigation bar to jump instantly between replies instead of having to scroll manually through long messages and threads.

    opened by fortinmike 2
  • Load threads on viewDidLoad and minor style fixes

    Load threads on viewDidLoad and minor style fixes

    • Load thread items automatically the first time a thread is loaded. I'd figure it be nice to not have to pull to refresh as soon as you open up a thread.
    • On the mailing lists table view, don't show cell separators for empty cells.
    • On threads table views, show cell separators when datasource is not empty.

    Let me know what you think.


    opened by denissezavala 2
  • Stopped updating?

    Stopped updating?

    It seems the app doesn't display any message that was sent after June 8th.

    I tried uninstalling the reinstalling the app but the issue didn't go away. Maybe there's something wrong with the app's backend?

    opened by fortinmike 3
  • Add the ability to star a conversation

    Add the ability to star a conversation

    This won't be ready for a while.

    Need to figure out precisely what a star means:

    • appears at the top of the threads list?
    • receive push notifications?
    • adds visual identifier next to message?
    • more like a "read later" thing? can you view a list of all starred convos? do we need user accounts?
    • do we have star counts for all convos? can people order threads by number of stars?
    opened by matthewpalmer 1
Matthew Palmer
Matthew Palmer
TriangleDraw is a pixel editor for iPad and iPhone.

TriangleDraw TriangleDraw is brilliant for sketching logos. You can quickly create designs that can be used for branding on letterheads or on your web

TriangleDraw 46 Sep 26, 2022
PHPHub for iOS is the universal iPhone and iPad application for PHPHub

PHPHub is a Forum project written in Laravel 4.2, and it is also the project build up PHP & Laravel China community. PHPHub for iOS is the universal i

Aufree 1.2k Nov 18, 2022
Learn Swift interactively on your iPhone.

Unwrap is an app that helps you learn Swift faster and more effectively. At its core lies almost 100 video lessons that teach all the fundamentals of

Paul Hudson 2.1k Dec 29, 2022
TweedleDumb - Mock (dumb) Twitter client

TweetleDumb Mock (dumb) Twitter client Thought Process Even though this is a mock client I wanted to approach it with the mindset that the mock compon

Ian Keen 28 Nov 7, 2022
iOS client for newsapi.org

DailyFeed iOS client for NewsAPI.org. Now access latest ?? from Best News Agencies and ?? from around the ?? ?? at your fingertips ?? . Features Daily

Sumit Paul 128 Nov 22, 2022
Firefox for iOS, branch works with Xcode 12.5.1, Swift 5.4.2 and supports iOS 11.4 and above.

Firefox for iOS Download on the App Store. This branch (main) This branch works with Xcode 12.5.1, Swift 5.4.2 and supports iOS 11.4 and above. Please

Mozilla Mobile 11.2k Jan 7, 2023
Basic app to show how to login with Facebook, Google, Twitter. Created for learning purpose :) using Xcode 9 and Swift 4.0

Social Logins iOS Basic app to show how to login with Facebook, Google, Twitter. Created for learning purpose :) using Xcode 9 and Swift 4.0 Note: Bef

Jogendra 12 Nov 4, 2022
Swift audio synthesis, processing, & analysis platform for iOS, macOS and tvOS

AudioKit AudioKit is an audio synthesis, processing, and analysis platform for iOS, macOS (including Catalyst), and tvOS. Installation To add AudioKit

AudioKit 9.5k Jan 5, 2023
▶️ video player in Swift, simple way to play and stream media on iOS/tvOS

Player Player is a simple iOS video player library written in Swift. Looking for an obj-c video player? Check out PBJVideoPlayer (obj-c). Looking for

patrick piemonte 2k Dec 24, 2022
This app shows the current percentage of the vaccination campaign in Brazil and its states

This app shows the current percentage of the vaccination campaign in Brazil and its states. The data is obtained thanks to covid19br.

Anderson Kloss Maia 8 Jul 22, 2022
Sample app to demonstrate data sharing between a WatchKit app and its main app using Realm

#Done! A sample app demonstrating how to share data between an app an its Watch extension using Realm. You can read more about it here. ##Screenshot #

Fancy Pixel 147 Dec 8, 2022
Development of the TUM Campus App for iOS devices - for and from students at Technical University of Munich.

Tum Campus App - An Unofficial Guide Through University Life The TUM Campus App (TCA) is an open source project, developed by volunteers and available

TUM Developers 93 Dec 16, 2022
Alfresco iOS App - Alfresco is the open platform for business-critical content management and collaboration.

Welcome to the Alfresco iOS App Alfresco is the open platform for business-critical content management and collaboration. Alfresco Mobile was designed

Alfresco Software 42 Sep 26, 2022
A simple and beautiful barcode scanner.

Description BarcodeScanner is a simple and beautiful wrapper around the camera with barcode capturing functionality and a great user experience. Barco

HyperRedink 1.6k Dec 28, 2022
VLC for iOS and tvOS official mirror

This is the official mirror repository of VLC for iOS and tvOS application. You can find the official repository here. It's currently written in Objec

VideoLAN 798 Dec 28, 2022
Swift Library based on AVFoundation that allow to easily add camera feature with custom UI into your project.

Would you like to create your camera same as Snapchat or Instagram? I think this library could help you. Basicly it is a wrapper above AVFoundation th

Taras Chernyshenko 14 Sep 21, 2022
Fully open source text editor for iOS written in Swift.

Edhita Fully open source text editor for iOS written in Swift. http://edhita.bornneet.com/ What Edhita means? Edhita (Romaji) == エディタ (Katakana) == Ed

Tatsuya Tobioka 1.2k Jan 7, 2023
30 mini Swift Apps for self-study

Swift 30 Projects Contents This repo is updated with Swift 5 and compatible with iPhone X: Simple UIKit components UIScrollView, UITableView, UICollec

Soap 7.5k Jan 3, 2023
A Hacker News reader in Swift

SwiftHN A Hacker News reader in Swift using the best features of both the language and iOS 8 latest API (well, that's the end goal) SwiftHN is now ava

Thomas Ricouard 1.7k Dec 24, 2022