Charter - A Swift mailing list client for iPhone and iPad

Overview

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.



Details

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.

Contributors

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
Comments
  • Localisation

    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

    feature 
    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.

    enhancement 
    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?

    feature 
    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.

    Cheers!

    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?
    feature 
    opened by matthewpalmer 1
Owner
Matthew Palmer
Matthew Palmer
Dash-iOS - Dash gives your iPad and iPhone instant offline access to 200+ API documentation sets

Discontinued Dash for iOS was discontinued. Please check out Dash for macOS instead. Dash for iOS Dash gives your iPad and iPhone instant offline acce

Bogdan Popescu 7.1k Dec 29, 2022
A native Jellyfin client for Apple platforms (iOS, macOS and tvOS)

Jellyfin Swift (working title) is a native Swift app targeting all modern Apple devices (iOS, ipadOS, tvOS and macOS).

Julien Machiels 3 Jun 7, 2021
Bitrise-iOS - Client iOS app for bitrise.io 🚀

?? SwiftUI version is available as beta ?? Bitrise iOS Client app ?? Features ✅ App List GET /me/apps Shows last visited app page on launch ✅ Build Li

Toshihiro Suzuki 142 Dec 19, 2022
BaseConverter-iOS - The fast and easy way to convert numbers with tons of possibilities!

BaseConverter-iOS The fast and easy way to convert numbers with tons of possibilities! With BaseConverter, convert your numbers from and to: Decimal B

Groupe MINASTE 3 Feb 8, 2022
DevTool - A simple UI and powerful Mac OS application, Such as JSON-Formatting tool, JSON-to-model tool, AppIcon generator, Network-Request tool...

?? ?? ?? A simple UI and powerful Mac OS application. It is a collection of tools commonly used in my development work. Such as JSON-Formatting tool, JSON-to-model tool, AppIcon generator, Network-Request tool...

渠晓友 3 Dec 21, 2022
IOS - Unofficial app for Swift Evolution

EVOlution - iOS The goal of this project is for the version 1.0 was: bring to iOS the experience provided by Swift Evolution website. Now we are shift

EVOlution App 235 Dec 19, 2022
A Swift mailing list client for iPhone and iPad

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 se

Matthew Palmer 526 Dec 24, 2022
Swift iPhone and iPad Client for Polls API, using Hyperdrive API client

Polls Client This is a Swift iPhone and iPad client for the Polls API - a simple application allowing users to view polls and vote in them. Polls is a

Apiary 34 Jul 15, 2022
Reading List is an iOS app for iPhone and iPad which helps users track and catalog the books they read

Reading List Reading List is an iOS app for iPhone and iPad which helps users track and catalog the books they read. Reading List v2 As of version 2.0

Andrew Bennet 281 Jan 15, 2022
A simple To-do list app build for iPhone, iPad and Apple Watch in Swift

A simple To-do list app build for iPhone, iPad and Apple Watch in Swift

Radu Ursache 186 Dec 28, 2022
A Modern MUD Client for iPhone and iPad.

MUDRammer — A Modern MUD Client > invoke incantation of build status divination You move a hand through a series of quick gestures, your digits twin

Splinesoft 70 Aug 26, 2022
4channer - Unofficial 4chan read-only client for iPhone and iPad

4channer An unofficial 4chan read-only client for iPhone and iPad, using the 4ch

ArtichautCosmique 12 Nov 15, 2022
Will Powell 1.2k Dec 29, 2022
Twitter-Client - A twitter client that allow users to view tweets on their iphone

Project 3 - Twitter Client Name of your app is a basic twitter app to read your

null 0 Feb 7, 2022
STPopup provides STPopupController, which works just like UINavigationController in popup style, for both iPhone and iPad. It's written in Objective-C and compatible with Swift.

STPopup STPopup provides STPopupController, which works just like UINavigationController in popup style, for both iPhone and iPad. It's written in Obj

Kevin Lin 2.6k Jan 6, 2023
Voice Memos is an audio recorder App for iPhone and iPad that covers some of the new technologies and APIs introduced in iOS 8 written in Swift.

VoiceMemos Voice Memos is a voice recorder App for iPhone and iPad that covers some of the new technologies and APIs introduced in iOS 8 written in Sw

Zhouqi Mo 322 Aug 4, 2022
TypeStyle is a handy app for iPhone and iPad that generates text using different styles and decorations. It is a native Swift iOS app.

TypeStyle TypeStyle is a handy app for iPhone and iPad that generates text using different styles and decorations. It is a native Swift iOS app. Featu

Eugene Belinski 31 Dec 14, 2022
BioViewer - Protein (.pdb, .cif and .fasta) viewer for iPhone, iPad and Mac, using SwiftUI + SceneKit

BioViewer - Protein (.pdb, .cif and .fasta) viewer for iPhone, iPad and Mac, using SwiftUI + SceneKit

Raúl Montón 16 Dec 21, 2022
A fast and extensible gapless AudioPlayer/AudioStreamer for OSX and iOS (iPhone, iPad)

StreamingKit StreamingKit (formally Audjustable) is an audio playback and streaming library for iOS and Mac OSX. StreamingKit uses CoreAudio to decomp

Thong Nguyen 2.3k Dec 21, 2022
CodeBucket is the best way to browse and maintain your Bitbucket repositories on any iPhone, iPod Touch, and iPad device!

CodeBucket Description CodeBucket is the best way to browse and maintain your Bitbucket repositories on any iPhone, iPod Touch, and iPad device! Keep

Dillon Buchanan 196 Dec 22, 2022