Application Overview
Clarissa (CraigsList RSS app) is a mobile app that allows you to prepare CraigsList keyword searches and easily execute them at any time to see if items you are interested in are available on the site. In addition to performing manual searches, you can set each search to execute in the background at specified intervals and notify you if it finds a new listing.
Clarissa let's you search in any combination of cities. You specify keywords for the initial RSS search. Then you can add a combination of inclusive and exclusive filters to reduce the false positives that often occur on CraigsList.
Clarissa keeps track of which items you have seen so it doesn't repeatedly notify you of the same listings. You can also specify a blackout period during which all searches are disabled so that you are not waken in the middle of the night.
Features
implemented
  • create named keyword searches that search list title or title/description
  • create inclusive/exclusive filters that operate on title/description/both using plain text or regular expressions
  • displays all matching listings
  • displays actual listings in application web view
  • keeps track of which listings have been viewed
  • settings stored locally in application sandbox
in progress
  • timer-based background searches
upcoming
  • blackout period to block timed searches
  • notification when new matching listings are found (notification center, badging)
  • add all cities supported by CraigsList
  • improve look-and-feel (more color, better formatting)
  • in-app help
  • email listing URL's
  • iPad support
  • mapping support
possible future directions
  • support for other auction sites (Oodle, Backpage)
Visuals
Screenshots
Clarissa display 1
Initial display screen showing user-created searches.
Clarissa display 2
Listings returned for the MacBook search.
Clarissa display 3
Listing in an iOS web view.
Clarissa edit 1
Initial screen in edit mode.
Clarissa edit 2
Editing a search.
Clarissa edit 3
Editing a search filter.
Movie
Design
Storyboard
Storyboard
The full Clarissa storyboard. There are several views that collect a single
Functional Areas
Application Data
SearchManager  The majority of application data is managed by the SearchManager. The SearchManager is a singleton that owns a collection of Searches. The SearchManager uses a customized, re-entrant read-write lock to allow any number of reader threads but only a single writer thread to make modifications to the Searches collection.
The SearchManager supports client registration so that client views may register for notification of changes to the collection of Searches or to any individual Search. Clients interested in receiving update events implement an Objective-C protocol to receive the events. Events are dispatched to clients using dispatch_async() to the UI thread.
The SearchManager serves as the host of the NSTimer that is used to launch background searches. The background search intervals are all multiples of each other so the timer is set to fire on the shortest set interval and any Searches that are due for an update are executed.
The SearchManager also serves as the root for data coding (serialization). The SearchManager's settings are serialized (using keyed encoding) followed by the Searches collection.
Search  The Search object maintains data related to each individual Search: name, keywords, type of search, search interval, etc. Searches must all have unique names.
Searches also maintain a collection of Listings and Filters. The Listings represent CraigsList listings that were returned by the RSS feed. The Filters are created by the user and applied to the Listings to allow additional search specificity beyond that afforded by the RSS keywords.
Searches implement NSCoding to serialize themselves.
Listing  The Listing object represents a single listing returned by the RSS feed. A Listing contains a URL, a posting date, a title, a description, and an indicator to remember whether or not a Listing has been read by the user. Listings are keyed by their URL. Listings implement NSCoding to serialize themselves.
Filter  Filters provide users with an additional layer of screening to reduce the number of false hits in their Searches. For example, a user may set up a Search for Aeron chairs, but then add a Filter to display only Aeron listings that have "titanium" in their description. A Filter can be applied to Listing titles, descriptions, or both.
Filters can be inclusive or exclusive. By default, all Listings in a Search are displayed. If an inclusive Filter is applied to the Search, only Listings that pass one or more of the inclusive Filters are displayed. If a Listing matches any exclusive Filters, it is not displayed.
Filters can be plain text or regular expression (using NSRegularExpression).
Filters implement NSCoding to serialize themselves.
ClRssEngine
ClRssEngine  The ClRssEngine forms the RSS URL, executes the HTTP request, and initiates parsing of the response into application objects. The results are then returned to the initiating Search.
ClRssXmlDelegate  The ClRssXmlDelegate implements the NSXMLParserDelegate to parse the RSS response into Listing objects.
Storage
All objects that need to persist data implement NSCoding. Data is serialized using keyed encoding. All objects serialize a version number so that future enhancements can load legacy objects and serialize updated versions.
Object Diagram