#202: Display selected image from the gallery

This commit is contained in:
Patrick Santana 2013-03-28 14:52:54 +01:00
parent 8252c31bbb
commit 6dcd2789df
10 changed files with 822 additions and 8 deletions

View file

@ -26,6 +26,7 @@
#import "TMPhotoQuiltViewCell.h"
#import "Album.h"
#import "Tag.h"
#import "PhotoDetailViewController.h"
@interface GalleryViewController : TMQuiltViewController

View file

@ -155,7 +155,6 @@
cell = [[TMPhotoQuiltViewCell alloc] initWithReuseIdentifier:@"PhotoCell"];
}
// cell.photoView.image = [self imageAtIndexPath:indexPath];
WebPhoto *photo = [self.photos objectAtIndex:indexPath.row];
[cell.photoView setImageWithURL:[NSURL URLWithString:photo.thumbUrl]
placeholderImage:nil
@ -177,6 +176,16 @@
return cell;
}
- (void)quiltView:(TMQuiltView *)quiltView didSelectCellAtIndexPath:(NSIndexPath *)indexPath
{
// get the photo selected
// WebPhoto *photo = [self.photos objectAtIndex:indexPath.row];
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:[[PhotoDetailViewController alloc] initWithPhotos:self.photos]];
nav.view.backgroundColor=UIColorFromRGB(0x0000000);
[self presentModalViewController:nav animated:NO];
}
#pragma mark - TMQuiltViewDelegate
- (NSInteger)quiltViewNumberOfColumns:(TMQuiltView *)quiltView {

View file

@ -0,0 +1,105 @@
//
// Copyright 2011 Jeff Verkoeyen
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "NIToolbarPhotoViewController.h"
/**
* A network-based photo album view controller.
*
* Minimum iOS SDK Version: 4.0
* SDK Requirements: Blocks (4.0)
*
* This controller provides the necessary image caches and queue for loading images from
* the network.
*
* <h2>Caching Architectural Design Considerations</h2>
*
* This controller maintains two image caches, one for high quality images and one for
* thumbnails. The thumbnail cache is unbounded and the high quality cache has a limit of about
* 3 1024x1024 images.
*
* The primary benefit of containing the image caches in this controller instead of using the
* global image cache is that when this controller is no longer being used, all of its memory
* is relinquished. If this controller were to use the global image cache it's also likely that
* we might push out other application-wide images unnecessarily. In a production environment
* we would depend on the network disk cache to load the photos back into memory when we return
* to this controller.
*
* By default the thumbnail cache has no limit to its size, though it may be advantageous to
* cap the cache at something reasonable.
*/
@interface NetworkPhotoAlbumViewController : NIToolbarPhotoViewController {
@private
NSOperationQueue* _queue;
NSMutableSet* _activeRequests;
NIImageMemoryCache* _highQualityImageCache;
NIImageMemoryCache* _thumbnailImageCache;
}
/**
* The high quality image cache.
*
* All original-sized photos are stored in this cache.
*
* By default the cache is unlimited with a max stress size of 1024*1024*3 pixels.
*
* Images are stored with a name that corresponds directly to the photo index in the form "%d".
*
* This is unloaded when the controller's view is unloaded from memory.
*/
@property (nonatomic, readonly, retain) NIImageMemoryCache* highQualityImageCache;
/**
* The thumbnail image cache.
*
* All thumbnail photos are stored in this cache.
*
* By default the cache is unlimited.
*
* Images are stored with a name that corresponds directly to the photo index in the form "%d".
*
* This is unloaded when the controller's view is unloaded from memory.
*/
@property (nonatomic, readonly, retain) NIImageMemoryCache* thumbnailImageCache;
/**
* The operation queue that runs all of the network and processing operations.
*
* This is unloaded when the controller's view is unloaded from memory.
*/
@property (nonatomic, readonly, retain) NSOperationQueue* queue;
/**
* Generate the in-memory cache key for the given index.
*/
- (NSString *)cacheKeyForPhotoIndex:(NSInteger)photoIndex;
/**
* Request an image from a source URL and store the result in the corresponding image cache.
*
* @param source The image's source URL path.
* @param photoSize The size of the photo being requested.
* @param photoIndex The photo index used to store the image in the memory cache.
*/
- (void)requestImageFromSource: (NSString *)source
photoSize: (NIPhotoScrollViewPhotoSize)photoSize
photoIndex: (NSInteger)photoIndex;
@end

View file

@ -0,0 +1,194 @@
//
// Copyright 2011 Jeff Verkoeyen
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import "NetworkPhotoAlbumViewController.h"
#import "NIOverviewMemoryCacheController.h"
#import "NimbusOverview.h"
#import "NIOverviewView.h"
#import "NIOverviewPageView.h"
#import "AFNetworking.h"
#ifdef DEBUG
@interface NetworkPhotoAlbumViewController()
@property (nonatomic, readwrite, retain) NIOverviewMemoryCachePageView* highQualityPage;
@property (nonatomic, readwrite, retain) NIOverviewMemoryCachePageView* thumbnailPage;
@end
#endif
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation NetworkPhotoAlbumViewController
@synthesize highQualityImageCache = _highQualityImageCache;
@synthesize thumbnailImageCache = _thumbnailImageCache;
@synthesize queue = _queue;
#ifdef DEBUG
@synthesize highQualityPage = _highQualityPage;
@synthesize thumbnailPage = _thumbnailPage;
#endif
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)shutdown_NetworkPhotoAlbumViewController {
[_queue cancelAllOperations];
#ifdef DEBUG
[[NIOverview view] removePageView:self.highQualityPage];
[[NIOverview view] removePageView:self.thumbnailPage];
#endif
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)dealloc {
[self shutdown_NetworkPhotoAlbumViewController];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (NSString *)cacheKeyForPhotoIndex:(NSInteger)photoIndex {
return [NSString stringWithFormat:@"%d", photoIndex];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (NSInteger)identifierWithPhotoSize:(NIPhotoScrollViewPhotoSize)photoSize
photoIndex:(NSInteger)photoIndex {
BOOL isThumbnail = (NIPhotoScrollViewPhotoSizeThumbnail == photoSize);
NSInteger identifier = isThumbnail ? -(photoIndex + 1) : photoIndex;
return identifier;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (id)identifierKeyFromIdentifier:(NSInteger)identifier {
return [NSNumber numberWithInt:identifier];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)requestImageFromSource:(NSString *)source
photoSize:(NIPhotoScrollViewPhotoSize)photoSize
photoIndex:(NSInteger)photoIndex {
BOOL isThumbnail = (NIPhotoScrollViewPhotoSizeThumbnail == photoSize);
NSInteger identifier = [self identifierWithPhotoSize:photoSize photoIndex:photoIndex];
id identifierKey = [self identifierKeyFromIdentifier:identifier];
// Avoid duplicating requests.
if ([_activeRequests containsObject:identifierKey]) {
return;
}
NSURL* url = [NSURL URLWithString:source];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
request.timeoutInterval = 30;
NSString* photoIndexKey = [self cacheKeyForPhotoIndex:photoIndex];
AFImageRequestOperation* readOp =
[AFImageRequestOperation imageRequestOperationWithRequest:request
imageProcessingBlock:nil success:
^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
// Store the image in the correct image cache.
if (isThumbnail) {
[_thumbnailImageCache storeObject: image
withName: photoIndexKey];
} else {
[_highQualityImageCache storeObject: image
withName: photoIndexKey];
}
// If you decide to move this code around then ensure that this method is called from
// the main thread. Calling it from any other thread will have undefined results.
[self.photoAlbumView didLoadPhoto: image
atIndex: photoIndex
photoSize: photoSize];
if (isThumbnail) {
[self.photoScrubberView didLoadThumbnail:image atIndex:photoIndex];
}
[_activeRequests removeObject:identifierKey];
} failure:
^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
}];
readOp.imageScale = 1;
// Set the operation priority level.
if (NIPhotoScrollViewPhotoSizeThumbnail == photoSize) {
// Thumbnail images should be lower priority than full-size images.
[readOp setQueuePriority:NSOperationQueuePriorityLow];
} else {
[readOp setQueuePriority:NSOperationQueuePriorityNormal];
}
// Start the operation.
[_activeRequests addObject:identifierKey];
[_queue addOperation:readOp];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark UIViewController
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)loadView {
[super loadView];
_activeRequests = [[NSMutableSet alloc] init];
_highQualityImageCache = [[NIImageMemoryCache alloc] init];
_thumbnailImageCache = [[NIImageMemoryCache alloc] init];
[_highQualityImageCache setMaxNumberOfPixels:1024L*1024L*10L];
[_thumbnailImageCache setMaxNumberOfPixelsUnderStress:1024L*1024L*3L];
_queue = [[NSOperationQueue alloc] init];
[_queue setMaxConcurrentOperationCount:5];
// Set the default loading image.
self.photoAlbumView.loadingImage = [UIImage imageWithContentsOfFile:
NIPathForBundleResource(nil, @"NimbusPhotos.bundle/gfx/default.png")];
#ifdef DEBUG
self.highQualityPage = [NIOverviewMemoryCachePageView pageWithCache:self.highQualityImageCache];
[[NIOverview view] addPageView:self.highQualityPage];
self.thumbnailPage = [NIOverviewMemoryCachePageView pageWithCache:self.thumbnailImageCache];
[[NIOverview view] addPageView:self.thumbnailPage];
#endif
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)viewDidUnload {
[self shutdown_NetworkPhotoAlbumViewController];
[super viewDidUnload];
}
@end

View file

@ -0,0 +1,24 @@
//
// PhotoDetailViewController.h
// Trovebox
//
// Created by Patrick Santana on 27/03/13.
// Copyright (c) 2013 Trovebox. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "NetworkPhotoAlbumViewController.h"
#import "WebPhoto.h"
@interface PhotoDetailViewController : NetworkPhotoAlbumViewController <
NIPhotoAlbumScrollViewDataSource,
NIPhotoScrubberViewDataSource,
NIOperationDelegate
>
- (id)initWithPhotos:(NSArray*) photos;
@property (nonatomic, strong) NSArray *photos;
@end

View file

@ -0,0 +1,186 @@
//
// PhotoDetailViewController.m
// Trovebox
//
// Created by Patrick Santana on 27/03/13.
// Copyright (c) 2013 Trovebox. All rights reserved.
//
#import "PhotoDetailViewController.h"
@implementation PhotoDetailViewController
@synthesize photos=_photos;
- (id)initWithPhotos:(NSArray*) photos
{
if ((self = [self initWithNibName:nil bundle:nil])) {
self.photos = photos;
}
return self;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)loadThumbnails {
for (NSInteger ix = 0; ix < [self.photos count]; ++ix) {
WebPhoto* photo = [self.photos objectAtIndex:ix];
NSString* photoIndexKey = [self cacheKeyForPhotoIndex:ix];
// Don't load the thumbnail if it's already in memory.
if (![self.thumbnailImageCache containsObjectWithName:photoIndexKey]) {
NSString* source = photo.thumbUrl;
[self requestImageFromSource: source
photoSize: NIPhotoScrollViewPhotoSizeThumbnail
photoIndex: ix];
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark UIViewController
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)loadView {
[super loadView];
self.photoAlbumView.dataSource = self;
self.photoScrubberView.dataSource = self;
// Dribbble is for mockups and designs, so we don't want to allow the photos to be zoomed
// in and become blurry.
self.photoAlbumView.zoomingAboveOriginalSizeIsEnabled = YES;
// This title will be displayed until we get the results back for the album information.
self.title = NSLocalizedString(@"Loading...", @"Navigation bar title - Loading a photo album");
[self loadThumbnails];
[self.photoAlbumView reloadData];
[self.photoScrubberView reloadData];
[self refreshChromeState];
}
- (void)viewDidUnload {
[super viewDidUnload];
self.photos = nil;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark NIPhotoScrubberViewDataSource
///////////////////////////////////////////////////////////////////////////////////////////////////
- (NSInteger)numberOfPhotosInScrubberView:(NIPhotoScrubberView *)photoScrubberView {
return [self.photos count];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (UIImage *)photoScrubberView: (NIPhotoScrubberView *)photoScrubberView
thumbnailAtIndex: (NSInteger)thumbnailIndex {
NSString* photoIndexKey = [self cacheKeyForPhotoIndex:thumbnailIndex];
UIImage* image = [self.thumbnailImageCache objectWithName:photoIndexKey];
if (nil == image) {
WebPhoto* photo = [self.photos objectAtIndex:thumbnailIndex];
NSString* thumbnailSource = photo.thumbUrl;
[self requestImageFromSource: thumbnailSource
photoSize: NIPhotoScrollViewPhotoSizeThumbnail
photoIndex: thumbnailIndex];
}
return image;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark NIPhotoAlbumScrollViewDataSource
///////////////////////////////////////////////////////////////////////////////////////////////////
- (NSInteger)numberOfPagesInPagingScrollView:(NIPhotoAlbumScrollView *)photoScrollView {
return [self.photos count];
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (UIImage *)photoAlbumScrollView: (NIPhotoAlbumScrollView *)photoAlbumScrollView
photoAtIndex: (NSInteger)photoIndex
photoSize: (NIPhotoScrollViewPhotoSize *)photoSize
isLoading: (BOOL *)isLoading
originalPhotoDimensions: (CGSize *)originalPhotoDimensions {
UIImage* image = nil;
NSString* photoIndexKey = [self cacheKeyForPhotoIndex:photoIndex];
WebPhoto* photo = [self.photos objectAtIndex:photoIndex];
// Let the photo album view know how large the photo will be once it's fully loaded.
// *originalPhotoDimensions = [[photo objectForKey:@"dimensions"] CGSizeValue];
image = [self.highQualityImageCache objectWithName:photoIndexKey];
if (nil != image) {
*photoSize = NIPhotoScrollViewPhotoSizeOriginal;
} else {
NSString* source = photo.url;
[self requestImageFromSource: source
photoSize: NIPhotoScrollViewPhotoSizeOriginal
photoIndex: photoIndex];
*isLoading = YES;
// Try to return the thumbnail image if we can.
image = [self.thumbnailImageCache objectWithName:photoIndexKey];
if (nil != image) {
*photoSize = NIPhotoScrollViewPhotoSizeThumbnail;
} else {
// Load the thumbnail as well.
NSString* thumbnailSource = photo.thumbUrl;
[self requestImageFromSource: thumbnailSource
photoSize: NIPhotoScrollViewPhotoSizeThumbnail
photoIndex: photoIndex];
}
}
return image;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)photoAlbumScrollView: (NIPhotoAlbumScrollView *)photoAlbumScrollView
stopLoadingPhotoAtIndex: (NSInteger)photoIndex {
// TODO: Figure out how to implement this with AFNetworking.
}
///////////////////////////////////////////////////////////////////////////////////////////////////
- (id<NIPagingScrollViewPage>)pagingScrollView:(NIPagingScrollView *)pagingScrollView pageViewForIndex:(NSInteger)pageIndex {
return [self.photoAlbumView pagingScrollView:pagingScrollView pageViewForIndex:pageIndex];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleDefault
animated: animated];
UINavigationBar* navBar = self.navigationController.navigationBar;
navBar.barStyle = UIBarStyleDefault;
navBar.translucent = NO;
}
@end

View file

@ -0,0 +1,29 @@
//
// TMQuiltView
//
// Created by Bruno Virlet on 7/20/12.
//
// Copyright (c) 2012 1000memories
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//
#import <UIKit/UIKit.h>
// image cache
#import <SDWebImage/UIImageView+WebCache.h>
@interface TMPhotoQuiltViewCell : TMQuiltViewCell
@property (nonatomic, strong) UIImageView *photoView;
@end

View file

@ -0,0 +1,56 @@
//
// TMQuiltView
//
// Created by Bruno Virlet on 7/20/12.
//
// Copyright (c) 2012 1000memories
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//
#import "TMPhotoQuiltViewCell.h"
const CGFloat kTMPhotoQuiltViewMargin = 2;
@implementation TMPhotoQuiltViewCell
@synthesize photoView = _photoView;
- (void)dealloc {
_photoView = nil;
}
- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithReuseIdentifier:reuseIdentifier];
if (self) {
self.backgroundColor = [UIColor whiteColor];
}
return self;
}
- (UIImageView *)photoView {
if (!_photoView) {
_photoView = [[UIImageView alloc] init];
_photoView.contentMode = UIViewContentModeScaleAspectFill;
_photoView.clipsToBounds = YES;
[self addSubview:_photoView];
}
return _photoView;
}
- (void)layoutSubviews {
self.photoView.frame = CGRectInset(self.bounds, kTMPhotoQuiltViewMargin, kTMPhotoQuiltViewMargin);
}
@end

View file

@ -12,14 +12,18 @@
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import <QuartzCore/QuartzCore.h>
#import "AppDelegate.h"
#import "Constants.h"
#import "PrivateConstants.h"
#import "PhotoAlertView.h"
#import <QuartzCore/QuartzCore.h>
////////////////////////////////////////////////////////////////////////////
#import "NimbusCore.h"
#import "NimbusPhotos.h"
#import "NimbusModels.h"
////////////////////////////////////////////////////////////////////////////
#define SharedAppDelegate ((AppDelegate*)[[UIApplication sharedApplication] delegate])
#endif

View file

@ -48,6 +48,18 @@
CD163EB81702E986006CB364 /* NIPhotoScrubberView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD163EB31702E986006CB364 /* NIPhotoScrubberView.m */; };
CD163EB91702E986006CB364 /* NIToolbarPhotoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD163EB51702E986006CB364 /* NIToolbarPhotoViewController.m */; };
CD163EBB1702E9C1006CB364 /* NimbusPhotos.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CD163EBA1702E9C1006CB364 /* NimbusPhotos.bundle */; };
CD1A6CCD17046CA70002763A /* AFHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CBB17046CA70002763A /* AFHTTPClient.m */; };
CD1A6CCE17046CA70002763A /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CBD17046CA70002763A /* AFHTTPRequestOperation.m */; };
CD1A6CCF17046CA70002763A /* AFImageRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CBF17046CA70002763A /* AFImageRequestOperation.m */; };
CD1A6CD017046CA70002763A /* AFJSONRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CC117046CA70002763A /* AFJSONRequestOperation.m */; };
CD1A6CD117046CA70002763A /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CC317046CA70002763A /* AFNetworkActivityIndicatorManager.m */; };
CD1A6CD217046CA70002763A /* AFPropertyListRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CC617046CA70002763A /* AFPropertyListRequestOperation.m */; };
CD1A6CD317046CA70002763A /* AFURLConnectionOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CC817046CA70002763A /* AFURLConnectionOperation.m */; };
CD1A6CD417046CA70002763A /* AFXMLRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CCA17046CA70002763A /* AFXMLRequestOperation.m */; };
CD1A6CD517046CA70002763A /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CCC17046CA70002763A /* UIImageView+AFNetworking.m */; };
CD1A6CD8170478AC0002763A /* PhotoDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CD7170478AC0002763A /* PhotoDetailViewController.m */; };
CD1A6CDB1704811B0002763A /* TMPhotoQuiltViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CDA1704811A0002763A /* TMPhotoQuiltViewCell.m */; };
CD1A6CDE1704825A0002763A /* NetworkPhotoAlbumViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CDD1704825A0002763A /* NetworkPhotoAlbumViewController.m */; };
CD1CDE33162C244200E57F73 /* Synced.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDE32162C244200E57F73 /* Synced.m */; };
CD1CDE36162C244200E57F73 /* Timeline.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDE35162C244200E57F73 /* Timeline.m */; };
CD1CDE39162C275F00E57F73 /* CoreDataTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDE38162C275F00E57F73 /* CoreDataTableViewController.m */; };
@ -129,6 +141,24 @@
CD9115C016243FE90099204B /* AlbumViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD9115BF16243FE90099204B /* AlbumViewController.m */; };
CD927E4716F8712100843FEE /* WebPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = CD927E4616F8712100843FEE /* WebPhoto.m */; };
CD92F16716E5375200E071CB /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = CDF2F10C16E5305800D309B9 /* Reachability.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
CD955CFF17035E0500E80DD3 /* NICellBackgrounds.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CEB17035E0500E80DD3 /* NICellBackgrounds.m */; };
CD955D0017035E0500E80DD3 /* NICellCatalog.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CED17035E0500E80DD3 /* NICellCatalog.m */; };
CD955D0117035E0500E80DD3 /* NICellFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CEF17035E0500E80DD3 /* NICellFactory.m */; };
CD955D0217035E0500E80DD3 /* NIFormCellCatalog.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CF117035E0500E80DD3 /* NIFormCellCatalog.m */; };
CD955D0317035E0500E80DD3 /* NIMutableTableViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CF417035E0500E80DD3 /* NIMutableTableViewModel.m */; };
CD955D0417035E0500E80DD3 /* NIRadioGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CF717035E0500E80DD3 /* NIRadioGroup.m */; };
CD955D0517035E0500E80DD3 /* NIRadioGroupController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CF917035E0500E80DD3 /* NIRadioGroupController.m */; };
CD955D0617035E0500E80DD3 /* NITableViewActions.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CFB17035E0500E80DD3 /* NITableViewActions.m */; };
CD955D0717035E0500E80DD3 /* NITableViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955CFD17035E0500E80DD3 /* NITableViewModel.m */; };
CD955D1917035E1F00E80DD3 /* NIDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955D0917035E1F00E80DD3 /* NIDeviceInfo.m */; };
CD955D1A17035E1F00E80DD3 /* NIOverview.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955D0C17035E1F00E80DD3 /* NIOverview.m */; };
CD955D1B17035E1F00E80DD3 /* NIOverviewGraphView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955D0E17035E1F00E80DD3 /* NIOverviewGraphView.m */; };
CD955D1C17035E1F00E80DD3 /* NIOverviewLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955D1017035E1F00E80DD3 /* NIOverviewLogger.m */; };
CD955D1D17035E1F00E80DD3 /* NIOverviewMemoryCacheController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955D1217035E1F00E80DD3 /* NIOverviewMemoryCacheController.m */; };
CD955D1E17035E1F00E80DD3 /* NIOverviewPageView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955D1417035E1F00E80DD3 /* NIOverviewPageView.m */; };
CD955D1F17035E1F00E80DD3 /* NIOverviewSwizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955D1617035E1F00E80DD3 /* NIOverviewSwizzling.m */; };
CD955D2017035E1F00E80DD3 /* NIOverviewView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD955D1817035E1F00E80DD3 /* NIOverviewView.m */; };
CD955D2417035E4E00E80DD3 /* NimbusOverviewer.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CD955D2317035E4E00E80DD3 /* NimbusOverviewer.bundle */; };
CDA1855A16E601CB00D617CB /* libEmail.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15D016E600DC004D22FD /* libEmail.a */; };
CDA1855B16E601CB00D617CB /* libFacebook.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15E416E600DC004D22FD /* libFacebook.a */; };
CDA1855C16E601CB00D617CB /* libJSONKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15C216E600DC004D22FD /* libJSONKit.a */; };
@ -153,7 +183,6 @@
CDAC02B316EF62EB00D3BB7F /* TMQuiltView.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAC02AE16EF62EB00D3BB7F /* TMQuiltView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
CDAC02B416EF62EB00D3BB7F /* TMQuiltViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAC02B016EF62EB00D3BB7F /* TMQuiltViewCell.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
CDAC02B516EF62EB00D3BB7F /* TMQuiltViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAC02B216EF62EB00D3BB7F /* TMQuiltViewController.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
CDAC02BE16EF6DC000D3BB7F /* TMPhotoQuiltViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAC02BD16EF6DC000D3BB7F /* TMPhotoQuiltViewCell.m */; };
CDAFB9D316122262002D6E86 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDAFB9D216122262002D6E86 /* UIKit.framework */; };
CDAFB9D516122262002D6E86 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDAFB9D416122262002D6E86 /* Foundation.framework */; };
CDAFB9D716122262002D6E86 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDAFB9D616122262002D6E86 /* CoreGraphics.framework */; };
@ -790,6 +819,31 @@
CD163EB41702E986006CB364 /* NIToolbarPhotoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIToolbarPhotoViewController.h; path = Frameworks/nimbus/src/photos/src/NIToolbarPhotoViewController.h; sourceTree = "<group>"; };
CD163EB51702E986006CB364 /* NIToolbarPhotoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIToolbarPhotoViewController.m; path = Frameworks/nimbus/src/photos/src/NIToolbarPhotoViewController.m; sourceTree = "<group>"; };
CD163EBA1702E9C1006CB364 /* NimbusPhotos.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = NimbusPhotos.bundle; path = Frameworks/nimbus/src/photos/resources/NimbusPhotos.bundle; sourceTree = "<group>"; };
CD1A6CBA17046CA70002763A /* AFHTTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFHTTPClient.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFHTTPClient.h; sourceTree = "<group>"; };
CD1A6CBB17046CA70002763A /* AFHTTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPClient.m; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFHTTPClient.m; sourceTree = "<group>"; };
CD1A6CBC17046CA70002763A /* AFHTTPRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFHTTPRequestOperation.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFHTTPRequestOperation.h; sourceTree = "<group>"; };
CD1A6CBD17046CA70002763A /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFHTTPRequestOperation.m; sourceTree = "<group>"; };
CD1A6CBE17046CA70002763A /* AFImageRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFImageRequestOperation.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFImageRequestOperation.h; sourceTree = "<group>"; };
CD1A6CBF17046CA70002763A /* AFImageRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFImageRequestOperation.m; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFImageRequestOperation.m; sourceTree = "<group>"; };
CD1A6CC017046CA70002763A /* AFJSONRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFJSONRequestOperation.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFJSONRequestOperation.h; sourceTree = "<group>"; };
CD1A6CC117046CA70002763A /* AFJSONRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFJSONRequestOperation.m; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFJSONRequestOperation.m; sourceTree = "<group>"; };
CD1A6CC217046CA70002763A /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.h; sourceTree = "<group>"; };
CD1A6CC317046CA70002763A /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.m; sourceTree = "<group>"; };
CD1A6CC417046CA70002763A /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFNetworking.h; sourceTree = "<group>"; };
CD1A6CC517046CA70002763A /* AFPropertyListRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFPropertyListRequestOperation.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFPropertyListRequestOperation.h; sourceTree = "<group>"; };
CD1A6CC617046CA70002763A /* AFPropertyListRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFPropertyListRequestOperation.m; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFPropertyListRequestOperation.m; sourceTree = "<group>"; };
CD1A6CC717046CA70002763A /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFURLConnectionOperation.h; sourceTree = "<group>"; };
CD1A6CC817046CA70002763A /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFURLConnectionOperation.m; sourceTree = "<group>"; };
CD1A6CC917046CA70002763A /* AFXMLRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFXMLRequestOperation.h; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFXMLRequestOperation.h; sourceTree = "<group>"; };
CD1A6CCA17046CA70002763A /* AFXMLRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFXMLRequestOperation.m; path = Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/AFXMLRequestOperation.m; sourceTree = "<group>"; };
CD1A6CCB17046CA70002763A /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/UIImageView+AFNetworking.h"; sourceTree = "<group>"; };
CD1A6CCC17046CA70002763A /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "Frameworks/nimbus/thirdparty/AFNetworking/AFNetworking/UIImageView+AFNetworking.m"; sourceTree = "<group>"; };
CD1A6CD6170478AC0002763A /* PhotoDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoDetailViewController.h; sourceTree = "<group>"; };
CD1A6CD7170478AC0002763A /* PhotoDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoDetailViewController.m; sourceTree = "<group>"; };
CD1A6CD9170481190002763A /* TMPhotoQuiltViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TMPhotoQuiltViewCell.h; sourceTree = "<group>"; };
CD1A6CDA1704811A0002763A /* TMPhotoQuiltViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TMPhotoQuiltViewCell.m; sourceTree = "<group>"; };
CD1A6CDC170482590002763A /* NetworkPhotoAlbumViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkPhotoAlbumViewController.h; sourceTree = "<group>"; };
CD1A6CDD1704825A0002763A /* NetworkPhotoAlbumViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetworkPhotoAlbumViewController.m; sourceTree = "<group>"; };
CD1CDE31162C244200E57F73 /* Synced.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Synced.h; sourceTree = "<group>"; };
CD1CDE32162C244200E57F73 /* Synced.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Synced.m; sourceTree = "<group>"; };
CD1CDE34162C244200E57F73 /* Timeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timeline.h; sourceTree = "<group>"; };
@ -925,6 +979,45 @@
CD9115BF16243FE90099204B /* AlbumViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlbumViewController.m; sourceTree = "<group>"; };
CD927E4516F8712100843FEE /* WebPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPhoto.h; sourceTree = "<group>"; };
CD927E4616F8712100843FEE /* WebPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebPhoto.m; sourceTree = "<group>"; };
CD955CEA17035E0500E80DD3 /* NICellBackgrounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NICellBackgrounds.h; path = Frameworks/nimbus/src/models/src/NICellBackgrounds.h; sourceTree = "<group>"; };
CD955CEB17035E0500E80DD3 /* NICellBackgrounds.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NICellBackgrounds.m; path = Frameworks/nimbus/src/models/src/NICellBackgrounds.m; sourceTree = "<group>"; };
CD955CEC17035E0500E80DD3 /* NICellCatalog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NICellCatalog.h; path = Frameworks/nimbus/src/models/src/NICellCatalog.h; sourceTree = "<group>"; };
CD955CED17035E0500E80DD3 /* NICellCatalog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NICellCatalog.m; path = Frameworks/nimbus/src/models/src/NICellCatalog.m; sourceTree = "<group>"; };
CD955CEE17035E0500E80DD3 /* NICellFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NICellFactory.h; path = Frameworks/nimbus/src/models/src/NICellFactory.h; sourceTree = "<group>"; };
CD955CEF17035E0500E80DD3 /* NICellFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NICellFactory.m; path = Frameworks/nimbus/src/models/src/NICellFactory.m; sourceTree = "<group>"; };
CD955CF017035E0500E80DD3 /* NIFormCellCatalog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIFormCellCatalog.h; path = Frameworks/nimbus/src/models/src/NIFormCellCatalog.h; sourceTree = "<group>"; };
CD955CF117035E0500E80DD3 /* NIFormCellCatalog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIFormCellCatalog.m; path = Frameworks/nimbus/src/models/src/NIFormCellCatalog.m; sourceTree = "<group>"; };
CD955CF217035E0500E80DD3 /* NimbusModels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NimbusModels.h; path = Frameworks/nimbus/src/models/src/NimbusModels.h; sourceTree = "<group>"; };
CD955CF317035E0500E80DD3 /* NIMutableTableViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIMutableTableViewModel.h; path = Frameworks/nimbus/src/models/src/NIMutableTableViewModel.h; sourceTree = "<group>"; };
CD955CF417035E0500E80DD3 /* NIMutableTableViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIMutableTableViewModel.m; path = Frameworks/nimbus/src/models/src/NIMutableTableViewModel.m; sourceTree = "<group>"; };
CD955CF517035E0500E80DD3 /* NIMutableTableViewModel+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NIMutableTableViewModel+Private.h"; path = "Frameworks/nimbus/src/models/src/NIMutableTableViewModel+Private.h"; sourceTree = "<group>"; };
CD955CF617035E0500E80DD3 /* NIRadioGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIRadioGroup.h; path = Frameworks/nimbus/src/models/src/NIRadioGroup.h; sourceTree = "<group>"; };
CD955CF717035E0500E80DD3 /* NIRadioGroup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIRadioGroup.m; path = Frameworks/nimbus/src/models/src/NIRadioGroup.m; sourceTree = "<group>"; };
CD955CF817035E0500E80DD3 /* NIRadioGroupController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIRadioGroupController.h; path = Frameworks/nimbus/src/models/src/NIRadioGroupController.h; sourceTree = "<group>"; };
CD955CF917035E0500E80DD3 /* NIRadioGroupController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIRadioGroupController.m; path = Frameworks/nimbus/src/models/src/NIRadioGroupController.m; sourceTree = "<group>"; };
CD955CFA17035E0500E80DD3 /* NITableViewActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NITableViewActions.h; path = Frameworks/nimbus/src/models/src/NITableViewActions.h; sourceTree = "<group>"; };
CD955CFB17035E0500E80DD3 /* NITableViewActions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NITableViewActions.m; path = Frameworks/nimbus/src/models/src/NITableViewActions.m; sourceTree = "<group>"; };
CD955CFC17035E0500E80DD3 /* NITableViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NITableViewModel.h; path = Frameworks/nimbus/src/models/src/NITableViewModel.h; sourceTree = "<group>"; };
CD955CFD17035E0500E80DD3 /* NITableViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NITableViewModel.m; path = Frameworks/nimbus/src/models/src/NITableViewModel.m; sourceTree = "<group>"; };
CD955CFE17035E0500E80DD3 /* NITableViewModel+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NITableViewModel+Private.h"; path = "Frameworks/nimbus/src/models/src/NITableViewModel+Private.h"; sourceTree = "<group>"; };
CD955D0817035E1F00E80DD3 /* NIDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIDeviceInfo.h; path = Frameworks/nimbus/src/overview/src/NIDeviceInfo.h; sourceTree = "<group>"; };
CD955D0917035E1F00E80DD3 /* NIDeviceInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIDeviceInfo.m; path = Frameworks/nimbus/src/overview/src/NIDeviceInfo.m; sourceTree = "<group>"; };
CD955D0A17035E1F00E80DD3 /* NimbusOverview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NimbusOverview.h; path = Frameworks/nimbus/src/overview/src/NimbusOverview.h; sourceTree = "<group>"; };
CD955D0B17035E1F00E80DD3 /* NIOverview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIOverview.h; path = Frameworks/nimbus/src/overview/src/NIOverview.h; sourceTree = "<group>"; };
CD955D0C17035E1F00E80DD3 /* NIOverview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIOverview.m; path = Frameworks/nimbus/src/overview/src/NIOverview.m; sourceTree = "<group>"; };
CD955D0D17035E1F00E80DD3 /* NIOverviewGraphView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIOverviewGraphView.h; path = Frameworks/nimbus/src/overview/src/NIOverviewGraphView.h; sourceTree = "<group>"; };
CD955D0E17035E1F00E80DD3 /* NIOverviewGraphView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIOverviewGraphView.m; path = Frameworks/nimbus/src/overview/src/NIOverviewGraphView.m; sourceTree = "<group>"; };
CD955D0F17035E1F00E80DD3 /* NIOverviewLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIOverviewLogger.h; path = Frameworks/nimbus/src/overview/src/NIOverviewLogger.h; sourceTree = "<group>"; };
CD955D1017035E1F00E80DD3 /* NIOverviewLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIOverviewLogger.m; path = Frameworks/nimbus/src/overview/src/NIOverviewLogger.m; sourceTree = "<group>"; };
CD955D1117035E1F00E80DD3 /* NIOverviewMemoryCacheController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIOverviewMemoryCacheController.h; path = Frameworks/nimbus/src/overview/src/NIOverviewMemoryCacheController.h; sourceTree = "<group>"; };
CD955D1217035E1F00E80DD3 /* NIOverviewMemoryCacheController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIOverviewMemoryCacheController.m; path = Frameworks/nimbus/src/overview/src/NIOverviewMemoryCacheController.m; sourceTree = "<group>"; };
CD955D1317035E1F00E80DD3 /* NIOverviewPageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIOverviewPageView.h; path = Frameworks/nimbus/src/overview/src/NIOverviewPageView.h; sourceTree = "<group>"; };
CD955D1417035E1F00E80DD3 /* NIOverviewPageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIOverviewPageView.m; path = Frameworks/nimbus/src/overview/src/NIOverviewPageView.m; sourceTree = "<group>"; };
CD955D1517035E1F00E80DD3 /* NIOverviewSwizzling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIOverviewSwizzling.h; path = Frameworks/nimbus/src/overview/src/NIOverviewSwizzling.h; sourceTree = "<group>"; };
CD955D1617035E1F00E80DD3 /* NIOverviewSwizzling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIOverviewSwizzling.m; path = Frameworks/nimbus/src/overview/src/NIOverviewSwizzling.m; sourceTree = "<group>"; };
CD955D1717035E1F00E80DD3 /* NIOverviewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NIOverviewView.h; path = Frameworks/nimbus/src/overview/src/NIOverviewView.h; sourceTree = "<group>"; };
CD955D1817035E1F00E80DD3 /* NIOverviewView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NIOverviewView.m; path = Frameworks/nimbus/src/overview/src/NIOverviewView.m; sourceTree = "<group>"; };
CD955D2317035E4E00E80DD3 /* NimbusOverviewer.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = NimbusOverviewer.bundle; path = Frameworks/nimbus/src/overview/resources/NimbusOverviewer.bundle; sourceTree = "<group>"; };
CDA1856916E61BBC00D617CB /* button-navigation-camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-navigation-camera.png"; path = "images/button-navigation-camera.png"; sourceTree = "<group>"; };
CDA1856A16E61BBE00D617CB /* button-navigation-camera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-navigation-camera@2x.png"; path = "images/button-navigation-camera@2x.png"; sourceTree = "<group>"; };
CDA1856B16E61BBF00D617CB /* button-navigation-menu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-navigation-menu.png"; path = "images/button-navigation-menu.png"; sourceTree = "<group>"; };
@ -945,8 +1038,6 @@
CDAC02B016EF62EB00D3BB7F /* TMQuiltViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TMQuiltViewCell.m; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltViewCell.m; sourceTree = "<group>"; };
CDAC02B116EF62EB00D3BB7F /* TMQuiltViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TMQuiltViewController.h; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltViewController.h; sourceTree = "<group>"; };
CDAC02B216EF62EB00D3BB7F /* TMQuiltViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TMQuiltViewController.m; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltViewController.m; sourceTree = "<group>"; };
CDAC02BC16EF6DC000D3BB7F /* TMPhotoQuiltViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TMPhotoQuiltViewCell.h; path = ../Frameworks/TMQuiltView/TMQuiltViewDemo/TMQuiltViewDemo/TMPhotoQuiltViewCell.h; sourceTree = "<group>"; };
CDAC02BD16EF6DC000D3BB7F /* TMPhotoQuiltViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TMPhotoQuiltViewCell.m; path = ../Frameworks/TMQuiltView/TMQuiltViewDemo/TMQuiltViewDemo/TMPhotoQuiltViewCell.m; sourceTree = "<group>"; };
CDAFB9CE16122262002D6E86 /* Trovebox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Trovebox.app; sourceTree = BUILT_PRODUCTS_DIR; };
CDAFB9D216122262002D6E86 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
CDAFB9D416122262002D6E86 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
@ -1260,6 +1351,9 @@
CD163E521702E884006CB364 /* Nimbus */ = {
isa = PBXGroup;
children = (
CD1A6CB717046C7A0002763A /* AFNetworking */,
CD955CE917035DED00E80DD3 /* models */,
CD955CE817035DE200E80DD3 /* overview */,
CD163E531702E8A7006CB364 /* core */,
CD163E541702E8AF006CB364 /* pagingscrollview */,
CD163EA81702E944006CB364 /* photo */,
@ -1359,6 +1453,32 @@
name = photo;
sourceTree = "<group>";
};
CD1A6CB717046C7A0002763A /* AFNetworking */ = {
isa = PBXGroup;
children = (
CD1A6CBA17046CA70002763A /* AFHTTPClient.h */,
CD1A6CBB17046CA70002763A /* AFHTTPClient.m */,
CD1A6CBC17046CA70002763A /* AFHTTPRequestOperation.h */,
CD1A6CBD17046CA70002763A /* AFHTTPRequestOperation.m */,
CD1A6CBE17046CA70002763A /* AFImageRequestOperation.h */,
CD1A6CBF17046CA70002763A /* AFImageRequestOperation.m */,
CD1A6CC017046CA70002763A /* AFJSONRequestOperation.h */,
CD1A6CC117046CA70002763A /* AFJSONRequestOperation.m */,
CD1A6CC217046CA70002763A /* AFNetworkActivityIndicatorManager.h */,
CD1A6CC317046CA70002763A /* AFNetworkActivityIndicatorManager.m */,
CD1A6CC417046CA70002763A /* AFNetworking.h */,
CD1A6CC517046CA70002763A /* AFPropertyListRequestOperation.h */,
CD1A6CC617046CA70002763A /* AFPropertyListRequestOperation.m */,
CD1A6CC717046CA70002763A /* AFURLConnectionOperation.h */,
CD1A6CC817046CA70002763A /* AFURLConnectionOperation.m */,
CD1A6CC917046CA70002763A /* AFXMLRequestOperation.h */,
CD1A6CCA17046CA70002763A /* AFXMLRequestOperation.m */,
CD1A6CCB17046CA70002763A /* UIImageView+AFNetworking.h */,
CD1A6CCC17046CA70002763A /* UIImageView+AFNetworking.m */,
);
name = AFNetworking;
sourceTree = "<group>";
};
CD1CDE3D162C2B4B00E57F73 /* SDWebImage */ = {
isa = PBXGroup;
children = (
@ -1545,8 +1665,12 @@
CDA4FC6316EF7117003C60FE /* 10.jpeg */,
CDC7AF2B1640156400FC8BC1 /* GalleryViewController.h */,
CDC7AF2C1640156400FC8BC1 /* GalleryViewController.m */,
CDAC02BC16EF6DC000D3BB7F /* TMPhotoQuiltViewCell.h */,
CDAC02BD16EF6DC000D3BB7F /* TMPhotoQuiltViewCell.m */,
CD1A6CD6170478AC0002763A /* PhotoDetailViewController.h */,
CD1A6CD7170478AC0002763A /* PhotoDetailViewController.m */,
CD1A6CD9170481190002763A /* TMPhotoQuiltViewCell.h */,
CD1A6CDA1704811A0002763A /* TMPhotoQuiltViewCell.m */,
CD1A6CDC170482590002763A /* NetworkPhotoAlbumViewController.h */,
CD1A6CDD1704825A0002763A /* NetworkPhotoAlbumViewController.m */,
CD927E4516F8712100843FEE /* WebPhoto.h */,
CD927E4616F8712100843FEE /* WebPhoto.m */,
);
@ -1873,6 +1997,59 @@
name = Album;
sourceTree = "<group>";
};
CD955CE817035DE200E80DD3 /* overview */ = {
isa = PBXGroup;
children = (
CD955D2317035E4E00E80DD3 /* NimbusOverviewer.bundle */,
CD955D0817035E1F00E80DD3 /* NIDeviceInfo.h */,
CD955D0917035E1F00E80DD3 /* NIDeviceInfo.m */,
CD955D0A17035E1F00E80DD3 /* NimbusOverview.h */,
CD955D0B17035E1F00E80DD3 /* NIOverview.h */,
CD955D0C17035E1F00E80DD3 /* NIOverview.m */,
CD955D0D17035E1F00E80DD3 /* NIOverviewGraphView.h */,
CD955D0E17035E1F00E80DD3 /* NIOverviewGraphView.m */,
CD955D0F17035E1F00E80DD3 /* NIOverviewLogger.h */,
CD955D1017035E1F00E80DD3 /* NIOverviewLogger.m */,
CD955D1117035E1F00E80DD3 /* NIOverviewMemoryCacheController.h */,
CD955D1217035E1F00E80DD3 /* NIOverviewMemoryCacheController.m */,
CD955D1317035E1F00E80DD3 /* NIOverviewPageView.h */,
CD955D1417035E1F00E80DD3 /* NIOverviewPageView.m */,
CD955D1517035E1F00E80DD3 /* NIOverviewSwizzling.h */,
CD955D1617035E1F00E80DD3 /* NIOverviewSwizzling.m */,
CD955D1717035E1F00E80DD3 /* NIOverviewView.h */,
CD955D1817035E1F00E80DD3 /* NIOverviewView.m */,
);
name = overview;
sourceTree = "<group>";
};
CD955CE917035DED00E80DD3 /* models */ = {
isa = PBXGroup;
children = (
CD955CEA17035E0500E80DD3 /* NICellBackgrounds.h */,
CD955CEB17035E0500E80DD3 /* NICellBackgrounds.m */,
CD955CEC17035E0500E80DD3 /* NICellCatalog.h */,
CD955CED17035E0500E80DD3 /* NICellCatalog.m */,
CD955CEE17035E0500E80DD3 /* NICellFactory.h */,
CD955CEF17035E0500E80DD3 /* NICellFactory.m */,
CD955CF017035E0500E80DD3 /* NIFormCellCatalog.h */,
CD955CF117035E0500E80DD3 /* NIFormCellCatalog.m */,
CD955CF217035E0500E80DD3 /* NimbusModels.h */,
CD955CF317035E0500E80DD3 /* NIMutableTableViewModel.h */,
CD955CF417035E0500E80DD3 /* NIMutableTableViewModel.m */,
CD955CF517035E0500E80DD3 /* NIMutableTableViewModel+Private.h */,
CD955CF617035E0500E80DD3 /* NIRadioGroup.h */,
CD955CF717035E0500E80DD3 /* NIRadioGroup.m */,
CD955CF817035E0500E80DD3 /* NIRadioGroupController.h */,
CD955CF917035E0500E80DD3 /* NIRadioGroupController.m */,
CD955CFA17035E0500E80DD3 /* NITableViewActions.h */,
CD955CFB17035E0500E80DD3 /* NITableViewActions.m */,
CD955CFC17035E0500E80DD3 /* NITableViewModel.h */,
CD955CFD17035E0500E80DD3 /* NITableViewModel.m */,
CD955CFE17035E0500E80DD3 /* NITableViewModel+Private.h */,
);
name = models;
sourceTree = "<group>";
};
CDAC028A16EF62C700D3BB7F /* TMQuiltView */ = {
isa = PBXGroup;
children = (
@ -2665,6 +2842,7 @@
CDA4FC6C16EF7117003C60FE /* 9.jpeg in Resources */,
CDA4FC6D16EF7117003C60FE /* 10.jpeg in Resources */,
CD163EBB1702E9C1006CB364 /* NimbusPhotos.bundle in Resources */,
CD955D2417035E4E00E80DD3 /* NimbusOverviewer.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2803,7 +2981,6 @@
CDAC02B316EF62EB00D3BB7F /* TMQuiltView.m in Sources */,
CDAC02B416EF62EB00D3BB7F /* TMQuiltViewCell.m in Sources */,
CDAC02B516EF62EB00D3BB7F /* TMQuiltViewController.m in Sources */,
CDAC02BE16EF6DC000D3BB7F /* TMPhotoQuiltViewCell.m in Sources */,
CD5F5E4316F20E050044427E /* Gallery.m in Sources */,
CD5F5E4616F20E490044427E /* Photo+Methods.m in Sources */,
CD5F5E4C16F245270044427E /* Photo.m in Sources */,
@ -2836,6 +3013,35 @@
CD163EB71702E986006CB364 /* NIPhotoScrollView.m in Sources */,
CD163EB81702E986006CB364 /* NIPhotoScrubberView.m in Sources */,
CD163EB91702E986006CB364 /* NIToolbarPhotoViewController.m in Sources */,
CD955CFF17035E0500E80DD3 /* NICellBackgrounds.m in Sources */,
CD955D0017035E0500E80DD3 /* NICellCatalog.m in Sources */,
CD955D0117035E0500E80DD3 /* NICellFactory.m in Sources */,
CD955D0217035E0500E80DD3 /* NIFormCellCatalog.m in Sources */,
CD955D0317035E0500E80DD3 /* NIMutableTableViewModel.m in Sources */,
CD955D0417035E0500E80DD3 /* NIRadioGroup.m in Sources */,
CD955D0517035E0500E80DD3 /* NIRadioGroupController.m in Sources */,
CD955D0617035E0500E80DD3 /* NITableViewActions.m in Sources */,
CD955D0717035E0500E80DD3 /* NITableViewModel.m in Sources */,
CD955D1917035E1F00E80DD3 /* NIDeviceInfo.m in Sources */,
CD955D1A17035E1F00E80DD3 /* NIOverview.m in Sources */,
CD955D1B17035E1F00E80DD3 /* NIOverviewGraphView.m in Sources */,
CD955D1C17035E1F00E80DD3 /* NIOverviewLogger.m in Sources */,
CD955D1D17035E1F00E80DD3 /* NIOverviewMemoryCacheController.m in Sources */,
CD955D1E17035E1F00E80DD3 /* NIOverviewPageView.m in Sources */,
CD955D1F17035E1F00E80DD3 /* NIOverviewSwizzling.m in Sources */,
CD955D2017035E1F00E80DD3 /* NIOverviewView.m in Sources */,
CD1A6CCD17046CA70002763A /* AFHTTPClient.m in Sources */,
CD1A6CCE17046CA70002763A /* AFHTTPRequestOperation.m in Sources */,
CD1A6CCF17046CA70002763A /* AFImageRequestOperation.m in Sources */,
CD1A6CD017046CA70002763A /* AFJSONRequestOperation.m in Sources */,
CD1A6CD117046CA70002763A /* AFNetworkActivityIndicatorManager.m in Sources */,
CD1A6CD217046CA70002763A /* AFPropertyListRequestOperation.m in Sources */,
CD1A6CD317046CA70002763A /* AFURLConnectionOperation.m in Sources */,
CD1A6CD417046CA70002763A /* AFXMLRequestOperation.m in Sources */,
CD1A6CD517046CA70002763A /* UIImageView+AFNetworking.m in Sources */,
CD1A6CD8170478AC0002763A /* PhotoDetailViewController.m in Sources */,
CD1A6CDB1704811B0002763A /* TMPhotoQuiltViewCell.m in Sources */,
CD1A6CDE1704825A0002763A /* NetworkPhotoAlbumViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};