Commits on Dec 7, 2015
  1. Add Production support

    committed Dec 6, 2015
Commits on Sep 22, 2015
  1. Create

    committed Sep 22, 2015
  2. Installable error handler

    committed Sep 21, 2015
Commits on Sep 21, 2015
  1. Add support for InstallGUID

    committed Sep 21, 2015
Commits on Aug 25, 2015
  1. Fix a regression in the previous commit

    Use dispatch_time_t instead of absolute time to calculate timeouts for
    committed Aug 25, 2015
  2. Add dispatch_queue_is_empty

    Sometimes we need an easy way to check if a dispatch queue is empty.
    This isn't perfectly threadsafe (since the queue may become full between
    now and the time you enter a value into it) but if you're using a serial
    queue anyway that doesn't so much matter.
    committed Aug 25, 2015
Commits on Aug 24, 2015
  1. Add cassette support

    We backport this from the iOS9 fork
    committed Aug 24, 2015
Commits on Aug 12, 2015
  1. Add guid to dispatch_if

    We need more granular control over when dispatch_if should trigger
    again.  In the motivating application, dispatch_if is used to break out
    of a deadlock (when the time reaches beyond a certain point, we abort
    something) and when you put that in a unit test back to back the unit
    test deadlocks, since the dispatch_if context is hidden state.
    We add a guid as one way around this problem, such that if you provide a
    new guid you get a clean dispatch_if context.
    committed Aug 12, 2015
  2. DontBlockTheMainThread should not assert in tests

    The idea here is that in tests we often run this stuff on the main queue
    as a matter of course.  DontBlockTheMainThread is mostly an assertion
    that intends to hunt out performance problems and is largely invalid in
    the test case.
    committed Aug 12, 2015
Commits on Aug 11, 2015
Commits on Aug 2, 2015
  1. Remove swift wrapper function

    This is no longer needed now that we've moved from AudioToolbox to an
    AVAudioPlayer-based implementation of PlaySound.
    committed Aug 2, 2015
  2. Use AVAudioPlayer for PlaySound

    This works a lot better for apps that record at the same time as they
    play sounds.  Although they must have their sessons properly-configured.
    committed Aug 2, 2015
  3. synx

    committed Aug 2, 2015
Commits on Jul 29, 2015
  1. KVOHelp2

    KVOHelp has many issues that cause test failures in practice, particularly on repeated test runs.
    The idea of trying to nil out expired observers is likely a mistake,
    especially in Swift.  I'm much more likely to be using an [unowned self]
    block or something like that, then relying on "out of scope means stop
    calling me", which is occasionally, but rarely used in my actual
    KVOHelp2 introduces a new model inspired by the Nitrogen observer
    pattern.  You must explicitly kill observers (and when you don't, that
    causes a deterministic abort.)  The idea here is that you do this in
    your deinit or whatever.
    Also, we're no longer passing in a particular `weakSelf` reference like
    we used to.  Swift's block syntax is perfectly acceptable on this
    problem--one of those design holdovers from ObjC that no longer makes
    We're deprecating the old KVOHelp API, which will be removed in a future
    committed Jul 29, 2015
Commits on Jul 27, 2015
  1. Fixing the date/Day API.

    The convention of using "GMT Dates" is confusing, not the least bit
    because it implies that NSDates have timezones, when in point of fact
    they do not.  This API convention was unfortunate and led to several
    bugs in calling applications.
    Instead we introduce a separate datatype called "Day" which models a day
    (which has no time information).  These `Day`s have a
    `dateRepresentation` which is equivalent to the Artist Formerly Known As
    GMTDate, but we don't call it that anymore.
    We have retained "GMT" constructors for dates but they are more what you
    would expect: a constructor for NSDate that works from a GMT month,
    date, year, hour, minute, and second.  Although the arguments to this
    constructor must be in GMT, the resulting NSDate is timezone-independent
    and represents an exact point in time, a fact now mentioned in the
    There no longer is a "GMT" constructor for "time-zeroed" dates; you
    should be using the Day model for this.
    We have also converted these to real constructors, instead of the class
    functions of yesteryear.
    Although they are both timezone-independent, `NSDate`s and `Day`s can
    only be converted in the context of a timezone.  This is because at the
    same moment (NSDate) the Day is different depending on where you are WRT
    the internatonal date line.  So the conversion functions all hang off
    NSCalendar, which has that information.  This message brought to you by:
    date programming is the worst programming.
    Bumping to version 8.0 for this change.
    committed Jul 27, 2015
Commits on Jul 11, 2015
  1. Fixing JM

    * A case issue in the selector caused JM to crash
    * JM now uses a threshold based on the view width
    * We now set the image to blank, rather than nil.  Nil causes the
      intrinsic content size to go to zero, which may cause bugs in AL for
      some view hierarchies.  Blank should be safe.
    committed Jul 11, 2015
  2. Calendar convenience APIs.

    * Constructing calendars from a timezone identifier
    * GMT date constructors
    committed Jul 11, 2015
Commits on Jul 3, 2015
  1. Improving logging

    committed Jul 2, 2015
Commits on Jun 24, 2015
  1. Adding date conversions for GMT 'dates', a common storage format

    for dates.
    Essentially if you want to store a *date* (e.g., a *day*, not including
    hour/minute/second) you generally set the HMS components to zero
    and timezone components to zero.
    However when you then try to use that as an NSDate(), the local
    date might not even be the same day.
    This function converts between GMT 'dates' with zero HMS components
    and the earliest time for that same date in the local timezone.
    committed Jun 24, 2015
  2. supress => suppress

    committed Jun 24, 2015
Commits on Jun 19, 2015
Commits on Jun 16, 2015
  1. Runloop-based sleep

    committed Jun 16, 2015
  2. Support for viewing logs

    committed Jun 16, 2015
Commits on Jun 12, 2015
Commits on May 21, 2015
Commits on May 12, 2015
  1. Whole-module optimization

    committed May 12, 2015
Commits on May 7, 2015
  1. Adding a handler to local notification presenting.

    This is technically a breaking change, but I don't care.  Take that, semver.
    committed May 7, 2015
  2. Fixing documentation

    committed May 6, 2015
Commits on May 6, 2015