Garlic – A drag-n-drop Remote Configuration Framework for iOS (objective-c)


  • Easy 1-line integration
  • ZERO libraries required (not even AFNetworking!)
  • Remote feature flags
  • Local settings fallback
  • Custom remote settings
  • Force updates
  • No collisions with other frameworks


In most cases, you want to load remote settings either in the lifecycle events in your AppDelegate or ViewController, or anywhere else you like:

  1. #import “Garlic.h”
  2. Init and setup Garlic with a remote settings plist URL and a completion block: [[Garlic sharedInstance] setupWithRemoteConfigURL:@”{{}}” completionHandler:^(void){ // code to run when setup was done }

Force update:

Determine if the app should be updated, based on build numbers

if ([[Garlic sharedInstance] shouldForceUpdateApp]) { // ask user to update app }

Feature flags:

Check if a feature should be activated

if ([[Garlic sharedInstance] shouldAllowFeature:@”{{your-feature-name-here}}”]) { // show the button/menu that enables that feature}

Custom values:

Get remote values for your custom purposes

NSString *tipOfTheDay = [[Garlic sharedInstance] getSettingForKey:@”TipOfTheDay-2015-11-27″]

Future features:

  1. Force synchronous url request
  2. Load settings from JSONs and XMLs, in addition to plists
  3. POST remote settings: change remote settings in the server when shaking the device
  4. Web-based remote settings editor
  5. Push updates: engage a remote settings update using a push notification
  6. Targeted Feature Flags: toggle features for specific user IDs, geolocations, device models..

Made with ❤ by Nur Nachman –


Copy to clipboard

While working on the Baking Blogger’s special characters panel, I needed a way to copy the selected character to the clipboard. I used the following technique:
import java.awt.Toolkit;
import java.awt.datatransfer.*;

TextTransfer clipBoard = new TextTransfer();

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, this);

class TextTransfer implements ClipboardOwner {
public void lostOwnership(Clipboard clipboard, Transferable contents) {

public void setClipboardContents(String aString) {
StringSelection stringSelection = new StringSelection(aString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, this);

Start with writing a class that implements the ClipboardOwner interface. This enforces you to implement the method setClipaordContents(String string){}