Okay, additional rules here:

1. A `nil` dictionary should raise an `NSInvalidArgumentException`.
1. A dictionary can be empty is the template contains no dynamic segments (i.e. no variables)
1. If the input dictionary does not contain one entry for each variable then an `NSInvalidArgumentException` should be raised.
1. `[NSNull null]` should expand the same as an empty string (`@“”`)

I would enumerate these rules in the documentation as well as backing them with unit tests.