BetterContent 
for a developer’s well being 
Benny Weingarten-Gabbay 
@gardenofwine
Once upon a time, 
there was an app 
Home Screen 
Title: 
“RECENT ACTIVITY”
One day, the PM said, 
“Lets change the title” 
Home Screen 
Title: 
“ALL YOUR RECENT ITEMS”
Inefficiency 
Product Manager 
Developer 
Marketing Manager 
Legal Advisor 
UX specialist Designer
Better Efficiency 
Product Manager 
Developer 
Marketing Manager 
Legal Advisor 
UX specialist Designer
Side note: Content Management 
Desirable features: 
● Central document for all 
content 
● Easy localization 
● Change app content on 
the fly 
Reality: 
● Not easy 
● Mostly obtrusive 
● Incomplete
Side note: Content Management
Reveal App
Spark Inspector
Optimizely
Enter: BetterContent 
Buy 
now! 
Buy 
Immediately, now! 
at runtime
Requirements 
● Publicly accessible 
● Easy development 
● Easy installation 
● Easy configuration
Enter: BetterContent 
Buy 
now! 
Buy 
now!
Enter: BetterContent 
Buy 
now! 
Buy 
now!
Free Hosting Services 
heroku labs:enable websockets
Native packaging 
VS
Websocket Implementation 
VS
Tool Architecture 
Buy 
now! 
Buy 
or 
rent! 
Native app 
Server 
web client
Native Architecture 
● Hook for app start 
● A repeating NSTimer scanner
Native Architecture 
NSDictionary 
“0x7cea4590” 
“0x7a0b9cf0” 
“0x79e7bd70” 
“0x79ea0d90”
Native Architecture 
@implementation UILabel (BTCLabel) 
- (void)btcIsSerializable{} 
- (NSString *)btcClass{ 
return @"label"; 
} 
- (NSDictionary *)btcAttributes{ 
return @{@"text": self.btcSafeText, 
@"font" : @{@"pointSize" : @(self.font.pointSize) 
@"color" : [self btcHexColor]}}; 
} 
- (void)updateWithComponent:(BTCComponent *)newComponent{ 
self.text = [newComponent.attributes objectForKey:@"text"]; 
}
Server Architecture 
● Node.js, gulp 
● based on heroku-examples/node-ws-test 
● Simple, fragile websocket protocol 
● Mostly a data pipe between Native App 
and web app.
Web Client Architecture 
● Still work in progress 
● One big js file 
● Separate component for each native class 
● Currently only supports label editing
The Future 
● Heroku templates 
● iOS Framework in addition to pod 
● Android support 
● Additional components support 
● Additional attributes support 
● Multiple user support 
● Native API for app control over 
functionality
The Holy Grail 
Automatic content management 
support 
1. Use BetterContent to scrape content 
2. Build a document with all apps content 
3. Native app uses said document for content 
4. Said document is editable from the server
BetterContent 
https://github.com/gardenofwine/better-content-server 
Benny Weingarten-Gabbay 
@gardenofwine

Better Content Presentation

Editor's Notes

  • #4 Demo content change: Find all “RECENt ACTIVITY”. Now the text doesn’t fit in one line.
  • #6 Show how easy it is in web - show Chrome devtools on (http://www.theonion.com/)
  • #7 Its not easy. All solutions are obtrusive; either (1) use special UI classes, (2) don’t use text in xibs, (3) only NSLocalizedString, (4) Not easy to edit, (5) No common solution for permanent on-the-fly changes
  • #8 Reveal app. $90 personal, $180 corporate (per developer). (1) only works on same wifi network (2) requires a mac (3) complicated to modify content with
  • #9 Reveal app. $90 personal, $180 corporate (per developer). (1) only works on same wifi network (2) requires a mac (3) complicated to modify content with
  • #12 Show demo
  • #14 google spreadsheet. (1) Difficult API (2) no immediate notifications when content changes.
  • #15 Why Websockets? Well known, many code samples, works on rails/node.js
  • #16 Very simple. I just forked it and kept working on the branch.
  • #19 UIView (category) class - VS - web client js class handling.
  • #21 weakReferences https://github.com/mikeash/MAZeroingWeakRef
  • #25 Allow more control over BetterContent within the hosting application.