Awful / Awful.app

Something Awful Forums browser for iOS
https://forums.somethingawful.com/showthread.php?threadid=3837546&perpage=40&noseen=1
136 stars 45 forks source link

Awful

Awful is an iOS 15.0+ app that's Better Than Safari for browsing the Something Awful Forums. Its story is told in its thread (and the thread before that (and the thread before that (and the thread before that))).

Not sure what to work on? There's a list of issues, or just post in the thread and someone will share their pet peeves for your amusement!

Screenshot of Awful as it appears on an iPhone

An unofficial app

This app is not endorsed by Something Awful.

Build

Please drop by the thread if you could use a hand with any of these steps!

You need Xcode 15 to build and run Awful. You can download Xcode for free from Apple. Then:

  1. Clone the repository: git clone --recursive https://github.com/Awful/Awful.app Awful-app
  2. Open the Xcode project and build away: xed Awful-app

You may see build warnings of the form "Unable to find included file '../Local.xcconfig'". You should still be able to build and run, just with a couple of features turned off. If you'd like to enable those features, or just make the warnings go away, please scroll on down to the "Local build settings" section below.

The only required dependencies for building Awful that are not included directly in this repository are those managed by Swift Package Manager. Files generated by other utilities are included in the repository. The only submodule is the thread-tags repository, which is not strictly needed for building; if you don't need it, you can leave off the --recursive part from step one.

If you'd like to build to your device, set the DEVELOPMENT_TEAM build setting as mentioned in the Local build settings section below.

Local build settings

There are some local build settings that can be useful to include but should not be committed to a public repo. Store those in an Xcode configuration file at Local.xcconfig; see Local.sample.xcconfig for an example. You'll get a build warning until you put a file at that location; it can be an empty file if you just want Xcode to be quiet.

Awful uses an App Group to communicate and share data with the Smilie Keyboard. Unfortunately, App Group identifiers must be unique, so we can't simply set it up in this repository and have it work for everybody work. By default, Awful builds without an App Group configured, which means that the Smilie Keyboard won't be able to download new smilies, remember recent smilies, or store favourite smilies. If you like, you can:

  1. Create an App Group in your iOS Developer account.
  2. Copy Local.sample.entitlements to Local.entitlements.
  3. Copy and paste your App Group identifier into Local.entitlements.
  4. Set the CODE_SIGN_ENTITLEMENTS build setting in Local.xcconfig for the targets Awful and SmilieKeyboard (see Local.sample.xcconfig for a suggested setup).
  5. After a build and run, full keyboard functionality should be yours.

Tests

There are unit tests, that don't cover much, running continuously via GitHub Actions.

Build Status

Updating dependencies

Dependencies not managed via Swift Package Manager are placed in the Vendor folder and manually kept up-to-date. They include:

Version scheme

Bump the major version when changing the minimum required iOS version (deployment target). Otherwise, bump the minor version.

Also, when changing the iOS deployment target, please tag the last commit that supports any no-longer-supported deployment target(s) and update the table in the section "iOS deployment targets" below.

Handy utilities

If you peek in the Scripts folder you'll find:

And in the Xcode project itself you'll find:

Loading fixtures into the app and/or working offline

If you've stashed some .html files from the Forums, you can load those into a debug build of the app. And if you forgot to stash some, you're in luck: we've stashed some as test fixtures. See FixtureURLProtocol for more info.

Contribute

You can help! See our contribution guidelines and please come visit the thread to say hi.

Project Structure

Awful is broken down somewhat:

Theming

Awful's posts view is fully customizable using CSS. There's a default theme, as well as themes for specific forums such as YOSPOS and FYAD. We use Less to generate our stylesheets during Awful's build process, so you'll want to edit .less files but you'll see .css files in the build products and in the Web Inspector.

The rest of Awful is themed in a a big plist. If you can't find a theme key you'd like to use, ask and we'll add it!

Thread Tags

Diabolik900 and The Dave have largely fashioned Awful with its own [set of thread tags][thread tags] that look great on the iPhone and the iPad. They're distributed with the app. New thread tags can also appear in Awful without us having to send an update through the App Store. This is done by hosting the icons via GitHub Pages.

To add a new thread tag you just made:

  1. Add it to the thread tags repository and push.
  2. Update the awfulapp.com repository repository per its README.
  3. In this (Awful.app) repository, update the App/Resources/Thread Tags submodule and push:

    cd path/to/awful-app/repo
    cd App/Resources/Thread\ Tags
    git pull origin master
    cd ..
    git commit -am "Updated thread tags."
    git push

Alternate App Icons

To add a new alternative app icon:

  1. Open App/App Icons.xcassets.
  2. Add a new iOS App Icon.
  3. Name your app icon something appropriate, including the _appicon suffix.
  4. Drag your 1024×1024 image file over.
  5. Add a new Image Set with the same name as your icon set plus _preview.
  6. Drag 60pt icons into your preview icon set.
  7. Open App/Settings/SettingsViewController.swift.
  8. Add your new app icon info to the appIcons array.

The bookkeeping and duplicate images are unfortunate, but there's no public API to list app icon sets or to load app icon images for display. Instead of hacking together something that could break later, we'll do it ourselves.

URL schemes

Awful answers to a couple URL schemes:

iOS deployment targets

For iOS Check out tag/branch
17 main
16 main
15 main
14 ios-14
13 ios-13
12 ios-12
11 ios-11
10 ios-10
9 ios-9
8 ios-8
7 ios-7
6 ios-6
5 ios-5

License

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States License

Credit

Awful development is led by pokeyman aka Nolan Waite.

Awful includes contributions from: