Adding icons to main screen and handling html entities on feed detail.

This commit is contained in:
Samuel Clay 2011-08-03 10:00:41 -07:00
parent 437c7ae5a3
commit 979b6bbcca
9 changed files with 206 additions and 26 deletions

15
media/iphone/Base64.h Normal file
View file

@ -0,0 +1,15 @@
//
// Base64.h
// NewsBlur
//
// Created by Samuel Clay on 8/3/11.
// Copyright 2011 NewsBlur. All rights reserved.
//
@interface NSData (MBBase64)
+ (id)dataWithBase64EncodedString:(NSString *)string; // Padding '=' characters are optional. Whitespace is ignored.
- (NSString *)base64Encoding;
@end

106
media/iphone/Base64.m Normal file
View file

@ -0,0 +1,106 @@
#include "Base64.h"
static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@implementation NSData (MBBase64)
+ (id)dataWithBase64EncodedString:(NSString *)string;
{
if (string == nil)
[NSException raise:NSInvalidArgumentException format:nil];
if ([string length] == 0)
return [NSData data];
static char *decodingTable = NULL;
if (decodingTable == NULL)
{
decodingTable = malloc(256);
if (decodingTable == NULL)
return nil;
memset(decodingTable, CHAR_MAX, 256);
NSUInteger i;
for (i = 0; i < 64; i++)
decodingTable[(short)encodingTable[i]] = i;
}
const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];
if (characters == NULL) // Not an ASCII string!
return nil;
char *bytes = malloc((([string length] + 3) / 4) * 3);
if (bytes == NULL)
return nil;
NSUInteger length = 0;
NSUInteger i = 0;
while (YES)
{
char buffer[4];
short bufferLength;
for (bufferLength = 0; bufferLength < 4; i++)
{
if (characters[i] == '\0')
break;
if (isspace(characters[i]) || characters[i] == '=')
continue;
buffer[bufferLength] = decodingTable[(short)characters[i]];
if (buffer[bufferLength++] == CHAR_MAX) // Illegal character!
{
free(bytes);
return nil;
}
}
if (bufferLength == 0)
break;
if (bufferLength == 1) // At least two characters are needed to produce one byte!
{
free(bytes);
return nil;
}
// Decode the characters in the buffer to bytes.
bytes[length++] = (buffer[0] << 2) | (buffer[1] >> 4);
if (bufferLength > 2)
bytes[length++] = (buffer[1] << 4) | (buffer[2] >> 2);
if (bufferLength > 3)
bytes[length++] = (buffer[2] << 6) | buffer[3];
}
realloc(bytes, length);
return [NSData dataWithBytesNoCopy:bytes length:length];
}
- (NSString *)base64Encoding;
{
if ([self length] == 0)
return @"";
char *characters = malloc((([self length] + 2) / 3) * 4);
if (characters == NULL)
return nil;
NSUInteger length = 0;
NSUInteger i = 0;
while (i < [self length])
{
char buffer[3] = {0,0,0};
short bufferLength = 0;
while (bufferLength < 3 && i < [self length])
buffer[bufferLength++] = ((char *)[self bytes])[i++];
// Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.
characters[length++] = encodingTable[(buffer[0] & 0xFC) >> 2];
characters[length++] = encodingTable[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)];
if (bufferLength > 1)
characters[length++] = encodingTable[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)];
else characters[length++] = '=';
if (bufferLength > 2)
characters[length++] = encodingTable[buffer[2] & 0x3F];
else characters[length++] = '=';
}
return [[[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES] autorelease];
}
@end

View file

@ -2,13 +2,13 @@
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1024</int>
<string key="IBDocument.SystemVersion">10K540</string>
<string key="IBDocument.InterfaceBuilderVersion">1306</string>
<string key="IBDocument.AppKitVersion">1038.36</string>
<string key="IBDocument.HIToolboxVersion">461.00</string>
<string key="IBDocument.SystemVersion">11A511</string>
<string key="IBDocument.InterfaceBuilderVersion">1617</string>
<string key="IBDocument.AppKitVersion">1138</string>
<string key="IBDocument.HIToolboxVersion">566.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">301</string>
<string key="NS.object.0">534</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -51,7 +51,7 @@
<object class="IBUILabel" id="750430533">
<reference key="NSNextResponder" ref="994014136"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{172, 39}, {119, 15}}</string>
<string key="NSFrame">{{172, 44}, {119, 15}}</string>
<reference key="NSSuperview" ref="994014136"/>
<reference key="NSWindow"/>
<object class="NSColor" key="IBUIBackgroundColor" id="932003208">
@ -87,7 +87,7 @@
<object class="IBUILabel" id="417683225">
<reference key="NSNextResponder" ref="994014136"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 5}, {271, 31}}</string>
<string key="NSFrame">{{20, 7}, {271, 34}}</string>
<reference key="NSSuperview" ref="994014136"/>
<reference key="NSWindow"/>
<reference key="IBUIBackgroundColor" ref="932003208"/>
@ -98,7 +98,7 @@
<string key="IBUIText">Long label with a story title the size of Texas.</string>
<object class="NSFont" key="IBUIFont">
<string key="NSName">Helvetica-Bold</string>
<double key="NSSize">12</double>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
<object class="NSColor" key="IBUITextColor">
@ -118,7 +118,7 @@
<object class="IBUILabel" id="194816084">
<reference key="NSNextResponder" ref="994014136"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{20, 39}, {150, 15}}</string>
<string key="NSFrame">{{20, 44}, {150, 15}}</string>
<reference key="NSSuperview" ref="994014136"/>
<reference key="NSWindow"/>
<reference key="IBUIBackgroundColor" ref="878586146"/>
@ -141,7 +141,7 @@
<object class="IBUIImageView" id="523799572">
<reference key="NSNextResponder" ref="994014136"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{2, 13}, {16, 16}}</string>
<string key="NSFrame">{{2, 16}, {16, 16}}</string>
<reference key="NSSuperview" ref="994014136"/>
<reference key="NSWindow"/>
<bool key="IBUIAutoresizesSubviews">NO</bool>
@ -149,7 +149,7 @@
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
</object>
<string key="NSFrameSize">{300, 59}</string>
<string key="NSFrameSize">{300, 64}</string>
<reference key="NSSuperview" ref="749780469"/>
<reference key="NSWindow"/>
<object class="NSColor" key="IBUIBackgroundColor">
@ -163,7 +163,7 @@
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
</object>
<string key="NSFrameSize">{320, 59}</string>
<string key="NSFrameSize">{320, 64}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="IBUIBackgroundColor" ref="932003208"/>
@ -271,9 +271,10 @@
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.CustomClassName</string>
<string>-1.IBPluginDependency</string>
<string>-2.CustomClassName</string>
<string>-2.IBPluginDependency</string>
<string>2.CustomClassName</string>
<string>2.IBEditorWindowLastContentRect</string>
<string>2.IBPluginDependency</string>
<string>3.IBPluginDependency</string>
<string>5.IBPluginDependency</string>
@ -283,9 +284,10 @@
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>FeedDetailTableCell</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>UIResponder</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>FeedDetailTableCell</string>
<string>{{579, 440}, {320, 55}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@ -378,6 +380,6 @@
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<string key="IBCocoaTouchPluginVersion">301</string>
<string key="IBCocoaTouchPluginVersion">534</string>
</data>
</archive>

View file

@ -10,9 +10,10 @@
#import "NewsBlurAppDelegate.h"
#import "FeedDetailTableCell.h"
#import "ASIFormDataRequest.h"
#import "GTMNString+HTML.h"
#import "JSON.h"
#define kTableViewRowHeight 60;
#define kTableViewRowHeight 65;
@implementation FeedDetailViewController
@ -250,7 +251,9 @@
} else {
cell.storyAuthor.text = @"";
}
cell.storyTitle.text = [story objectForKey:@"story_title"];
NSString *title = [story objectForKey:@"story_title"];
// cell.storyTitle.text = [title stringByDecodingHTMLEntities];
cell.storyTitle.text = title;
cell.storyDate.text = [story objectForKey:@"short_parsed_date"];
int score = [NewsBlurAppDelegate computeStoryScore:[story objectForKey:@"intelligence"]];
if (score > 0) {
@ -264,7 +267,7 @@
if ([[story objectForKey:@"read_status"] intValue] != 1) {
// Unread story
cell.storyTitle.textColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:1.0];
cell.storyTitle.font = [UIFont fontWithName:@"Helvetica-Bold" size:12];
cell.storyTitle.font = [UIFont fontWithName:@"Helvetica-Bold" size:13];
cell.storyAuthor.textColor = [UIColor colorWithRed:0.58f green:0.58f blue:0.58f alpha:1.0];
cell.storyAuthor.font = [UIFont fontWithName:@"Helvetica-Bold" size:10];
cell.storyDate.textColor = [UIColor colorWithRed:0.14f green:0.18f blue:0.42f alpha:1.0];

View file

@ -27,6 +27,7 @@
IBOutlet UISlider * feedScoreSlider;
IBOutlet UIBarButtonItem * logoutButton;
IBOutlet UISegmentedControl * intelligenceControl;
IBOutlet UIBarButtonItem * sitesButton;
}
- (void)fetchFeedList;
@ -36,12 +37,14 @@
- (void)updateFeedsWithIntelligence:(int)previousLevel newLevel:(int)newLevel;
- (void)calculateFeedLocations;
+ (int)computeMaxScoreForFeed:(NSDictionary *)feed;
- (IBAction)switchSitesUnread;
@property (nonatomic, retain) IBOutlet NewsBlurAppDelegate *appDelegate;
@property (nonatomic, retain) IBOutlet UITableView *feedTitlesTable;
@property (nonatomic, retain) IBOutlet UIToolbar *feedViewToolbar;
@property (nonatomic, retain) IBOutlet UISlider * feedScoreSlider;
@property (nonatomic, retain) IBOutlet UIBarButtonItem * logoutButton;
@property (nonatomic, retain) IBOutlet UIBarButtonItem * sitesButton;
@property (nonatomic, retain) NSMutableArray *dictFoldersArray;
@property (nonatomic, retain) NSMutableDictionary *activeFeedLocations;
@property (nonatomic, retain) NSDictionary *dictFolders;

View file

@ -9,6 +9,7 @@
#import "NewsBlurViewController.h"
#import "NewsBlurAppDelegate.h"
#import "FeedTableCell.h"
#import "Base64.h"
#import "JSON.h"
#define kTableViewRowHeight 40;
@ -24,6 +25,7 @@
@synthesize logoutButton;
@synthesize intelligenceControl;
@synthesize activeFeedLocations;
@synthesize sitesButton;
@synthesize dictFolders;
@synthesize dictFeeds;
@ -111,6 +113,7 @@
[logoutButton release];
[intelligenceControl release];
[activeFeedLocations release];
[sitesButton release];
[dictFolders release];
[dictFeeds release];
@ -123,7 +126,7 @@
- (void)fetchFeedList {
NSURL *urlFeedList = [NSURL URLWithString:[NSString
stringWithFormat:@"http://www.newsblur.com/reader/feeds?flat=true&favicons=true"]];
stringWithFormat:@"http://www.newsblur.com/reader/feeds?flat=true&include_favicons=true"]];
responseData = [[NSMutableData data] retain];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL: urlFeedList];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
@ -206,6 +209,10 @@
[ld release];
}
- (IBAction)switchSitesUnread {
}
#pragma mark -
#pragma mark Table View - Feed List
@ -247,11 +254,16 @@
NSString *feedIdStr = [NSString stringWithFormat:@"%@",feedId];
NSDictionary *feed = [self.dictFeeds objectForKey:feedIdStr];
cell.feedTitle.text = [feed objectForKey:@"feed_title"];
NSURL *url = [NSURL URLWithString:[feed objectForKey:@"favicon"]];
if (url) {
NSData *imageData = [NSData dataWithContentsOfURL:url];
NSString *favicon = [feed objectForKey:@"favicon"];
NSLog(@"Favicon for %@: %d", [feed objectForKey:@"feed_title"], [favicon length]);
if ([favicon length] > 0) {
NSData *imageData = [NSData dataWithBase64EncodedString:favicon];
cell.feedFavicon.image = [UIImage imageWithData:imageData];
} else {
cell.feedFavicon.image = [UIImage imageNamed:@"world.png"];
}
[cell.feedUnreadView loadHTMLString:[self showUnreadCount:feed] baseURL:nil];
return cell;
@ -371,7 +383,7 @@
} else if (previousLevel == 1) {
if (newLevel == 0 && maxScore == 0) {
[insertIndexPaths addObject:indexPath];
} else if (newLevel == -1 && maxScore > -1) {
} else if (newLevel == -1 && (maxScore == -1 || maxScore == 0)) {
[insertIndexPaths addObject:indexPath];
}
}

View file

@ -54,6 +54,8 @@
FF1C46C213E6003300E7609E /* logo_114.png in Resources */ = {isa = PBXBuildFile; fileRef = FF1C46C113E6003300E7609E /* logo_114.png */; };
FF38679B13D88EEC00F8AB3A /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = FF38679A13D88EEC00F8AB3A /* NSString+HTML.m */; };
FF38679E13D8914A00F8AB3A /* GTMNString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = FF38679D13D8914A00F8AB3A /* GTMNString+HTML.m */; };
FF435EDB13E9AF4A0083043F /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = FF435EDA13E9AF4A0083043F /* Base64.m */; };
FF435EDE13E9B04E0083043F /* world.png in Resources */ = {isa = PBXBuildFile; fileRef = FF435EDD13E9B04E0083043F /* world.png */; };
FFCE7AE813D49165009A98F6 /* FeedTableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FFCE7AE613D49165009A98F6 /* FeedTableCell.m */; };
FFCE7AE913D49165009A98F6 /* FeedTableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = FFCE7AE713D49165009A98F6 /* FeedTableCell.xib */; };
/* End PBXBuildFile section */
@ -137,6 +139,9 @@
FF38679C13D8914A00F8AB3A /* GTMNString+HTML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNString+HTML.h"; sourceTree = "<group>"; };
FF38679D13D8914A00F8AB3A /* GTMNString+HTML.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNString+HTML.m"; sourceTree = "<group>"; };
FF38679F13D8916E00F8AB3A /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = "<group>"; };
FF435ED913E9AF4A0083043F /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = "<group>"; };
FF435EDA13E9AF4A0083043F /* Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Base64.m; sourceTree = "<group>"; };
FF435EDD13E9B04E0083043F /* world.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = world.png; sourceTree = "<group>"; };
FFCE7AE513D49165009A98F6 /* FeedTableCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FeedTableCell.h; path = ../NewsBlur.xcodeproj/FeedTableCell.h; sourceTree = "<group>"; };
FFCE7AE613D49165009A98F6 /* FeedTableCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FeedTableCell.m; path = ../NewsBlur.xcodeproj/FeedTableCell.m; sourceTree = "<group>"; };
FFCE7AE713D49165009A98F6 /* FeedTableCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = FeedTableCell.xib; path = ../NewsBlur.xcodeproj/FeedTableCell.xib; sourceTree = "<group>"; };
@ -222,6 +227,8 @@
FF38679F13D8916E00F8AB3A /* GTMDefines.h */,
FF38679D13D8914A00F8AB3A /* GTMNString+HTML.m */,
FF38679A13D88EEC00F8AB3A /* NSString+HTML.m */,
FF435ED913E9AF4A0083043F /* Base64.h */,
FF435EDA13E9AF4A0083043F /* Base64.m */,
);
name = "Other Sources";
sourceTree = "<group>";
@ -229,6 +236,7 @@
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
FF435EDD13E9B04E0083043F /* world.png */,
FF1C46C113E6003300E7609E /* logo_114.png */,
FF1C46BF13E6002300E7609E /* logo_57.png */,
FF1C46BD13E5E9BD00E7609E /* Default@2x.png */,
@ -384,6 +392,7 @@
FF1C46BE13E5E9BD00E7609E /* Default@2x.png in Resources */,
FF1C46C013E6002300E7609E /* logo_57.png in Resources */,
FF1C46C213E6003300E7609E /* logo_114.png in Resources */,
FF435EDE13E9B04E0083043F /* world.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -418,6 +427,7 @@
FFCE7AE813D49165009A98F6 /* FeedTableCell.m in Sources */,
FF38679B13D88EEC00F8AB3A /* NSString+HTML.m in Sources */,
FF38679E13D8914A00F8AB3A /* GTMNString+HTML.m in Sources */,
FF435EDB13E9AF4A0083043F /* Base64.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View file

@ -107,7 +107,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<string key="NSFrame">{{153, 8}, {161, 30}}</string>
<reference key="NSSuperview" ref="895374018"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<int key="IBSegmentControlStyle">2</int>
<int key="IBNumberOfSegments">3</int>
@ -259,6 +258,22 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</object>
<int key="connectionID">66</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchEventConnection" key="connection">
<string key="label">switchSitesUnread</string>
<reference key="source" ref="240724681"/>
<reference key="destination" ref="372490531"/>
</object>
<int key="connectionID">67</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">sitesButton</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="240724681"/>
</object>
<int key="connectionID">68</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@ -285,8 +300,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<reference key="object" ref="774585933"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="895374018"/>
<reference ref="224086083"/>
<reference ref="895374018"/>
</object>
<reference key="parent" ref="0"/>
</object>
@ -378,7 +393,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
<int key="maxID">66</int>
<int key="maxID">68</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -640,11 +655,13 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<string>doLogoutButton</string>
<string>selectIntelligence</string>
<string>switchSitesUnread</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>id</string>
<string>id</string>
<string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
@ -653,6 +670,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<string>doLogoutButton</string>
<string>selectIntelligence</string>
<string>switchSitesUnread</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -664,6 +682,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<string key="name">selectIntelligence</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo">
<string key="name">switchSitesUnread</string>
<string key="candidateClassName">id</string>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@ -676,6 +698,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<string>feedViewToolbar</string>
<string>intelligenceControl</string>
<string>logoutButton</string>
<string>sitesButton</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -685,6 +708,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<string>UIToolbar</string>
<string>UISegmentedControl</string>
<string>UIBarButtonItem</string>
<string>UIBarButtonItem</string>
</object>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
@ -697,6 +721,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<string>feedViewToolbar</string>
<string>intelligenceControl</string>
<string>logoutButton</string>
<string>sitesButton</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -724,6 +749,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
<string key="name">logoutButton</string>
<string key="candidateClassName">UIBarButtonItem</string>
</object>
<object class="IBToOneOutletInfo">
<string key="name">sitesButton</string>
<string key="candidateClassName">UIBarButtonItem</string>
</object>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">

BIN
media/iphone/world.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B