GRMustache is a production-ready implementation of Mustache templates for MacOS Cocoa and iOS.
October 30th, 2012: GRMustache 6.0 is out. Release notes
Don't miss a single release: follow @GRMustache on Twitter.
$ git clone https://github.com/groue/GRMustache.git
- For MacOS development, add
include/GRMustache.h
andlib/libGRMustache6-MacOS.a
to your project. - For iOS development, add
include/GRMustache.h
andlib/libGRMustache6-iOS.a
to your project.
Alternatively, you may use CocoaPods: append pod 'GRMustache', '~> 6'
to your Podfile.
GRMustache targets MacOS down to 10.6 Snow Leopard, iOS down to version 4.3, and only depends on the Foundation framework.
armv6 architecture: The last GRMustache static library that embeds the armv6 slice is GRMustache 5.0.1. You now have to compile GRMustache yourself, or to use CocoaPods.
#import "GRMustache.h"
// Renders "Hello Arthur!"
NSString *rendering = [GRMustacheTemplate renderObject:[Person personWithName:@"Arthur"]
fromString:@"Hello {{name}}!"
error:NULL];
// Renders a document from the `Profile.mustache` resource
NSString *rendering = [GRMustacheTemplate renderObject:[Person personWithName:@"Arthur"]
fromResource:@"Profile"
bundle:nil
error:NULL];
Introduction:
- Introduction: a tour of the library features, and most common use cases.
Loading templates:
- Templates: how to load templates from common sources.
- Partials: how to embed templates in other templates.
- Templates Repositories: load templates from less common sources.
Rendering templates:
- Runtime: how to provide data to templates
Advanced Mustache:
- Filters: how to process data before it is rendered with "filters".
- Tag Delegates: how to observe and alter template rendering.
- Rendering Objects: how to provide your custom rendering code.
- Protected Contexts: how to have some keys always evaluate to the same value.
- Layout: how to wrap a template in a "layout" template
- Number Formatting: how to format numbers
- Collection Indexes: how to render array indexes, render sections for the first or the last element, for odd or even elements, etc.
- Localization: how to localize portions of your templates
- Reference: the GRMustache reference, automatically generated from inline documentation, for fun and profit, by appledoc.
- Forking: the forking guide tells you everything about GRMustache organization.
-
Q: How do I render array indexes?
A: Check the Collection Indexes Sample Code
-
Q: How do I format numbers and dates?
A: Check the Number Formatting Sample Code
-
Q: How do I render partial templates whose name is only known at runtime?
A: Check the Rendering Objects Guide
-
Q: Does GRMustache provide any layout or template inheritance facility?
A: Check the Partials Guide, and the Layout Sample Code.
-
Q: How do I localize templates?
A: Check the Localization Sample Code
-
Q: How do I render default values for missing keys?
A: Check the Tag Delegate Guide.
-
Q: What is this NSUndefinedKeyException stuff?
A: When GRMustache has to try several objects until it finds the one that provides a
{{key}}
, several NSUndefinedKeyException are raised and caught. Let us double guess you: it's likely that you wish Xcode would stop breaking on those exceptions. This use case is covered in the Runtime Guide. -
Q: Why does GRMustache need JRSwizzle?
A: GRMustache does not need it. However, you may happy having GRMustache swizzle
valueForUndefinedKey:
in the NSObject and NSManagedObject classes when you invoke[GRMustache preventNSUndefinedKeyExceptionAttack]
. The use case is described in the Runtime Guide.
I'm loving grmustache
Oh man GRMustache saved my ass once again. Awesome lib.
GRMustache filters extension saved us from great escaping PITAs. Thanks @groue.
@orj:
Thank fucking christ for decent iOS developers who ship .lib files in their Github repos. #GRMustache
I wish somebody would review my non-native English, and clean up the guides, if you ask.
Please fork. You'll learn useful information in the Forking Guide.
Released under the MIT License.