removed old code

This commit is contained in:
Patrick Santana 2014-04-29 20:25:12 -03:00
parent 1f68ac14a2
commit 5ef55824fa
546 changed files with 0 additions and 37082 deletions

View file

@ -1 +0,0 @@
Versions/Current/Crashlytics

View file

@ -1 +0,0 @@
Versions/Current/Headers

View file

@ -1 +0,0 @@
Versions/Current/Resources

Binary file not shown.

View file

@ -1,217 +0,0 @@
//
// Crashlytics.h
// Crashlytics
//
// Copyright 2013 Crashlytics, Inc. All rights reserved.
//
#import <Foundation/Foundation.h>
/**
*
* The CLS_LOG macro provides as easy way to gather more information in your log messages that are
* sent with your crash data. CLS_LOG prepends your custom log message with the function name and
* line number where the macro was used. If your app was built with the DEBUG preprocessor macro
* defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog.
* If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only.
*
* Example output:
* -[AppDelegate login:] line 134 $ login start
*
* If you would like to change this macro, create a new header file, unset our define and then define
* your own version. Make sure this new header file is imported after the Crashlytics header file.
*
* #undef CLS_LOG
* #define CLS_LOG(__FORMAT__, ...) CLSNSLog...
*
**/
#ifdef DEBUG
#define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#endif
/**
*
* Add logging that will be sent with your crash data. This logging will not show up in the system.log
* and will only be visible in your Crashlytics dashboard.
*
**/
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
/**
*
* Add logging that will be sent with your crash data. This logging will show up in the system.log
* and your Crashlytics dashboard. It is not recommended for Release builds.
*
**/
OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
@protocol CrashlyticsDelegate;
@interface Crashlytics : NSObject
@property (nonatomic, readonly, copy) NSString *apiKey;
@property (nonatomic, readonly, copy) NSString *version;
@property (nonatomic, assign) BOOL debugMode;
@property (nonatomic, assign) NSObject <CrashlyticsDelegate> *delegate;
/**
*
* The recommended way to install Crashlytics into your application is to place a call
* to +startWithAPIKey: in your -application:didFinishLaunchingWithOptions: method.
*
* This delay defaults to 1 second in order to generally give the application time to
* fully finish launching.
*
**/
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey;
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey afterDelay:(NSTimeInterval)delay;
/**
*
* If you need the functionality provided by the CrashlyticsDelegate protocol, you can use
* these convenience methods to activate the framework and set the delegate in one call.
*
**/
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject <CrashlyticsDelegate> *)delegate;
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject <CrashlyticsDelegate> *)delegate afterDelay:(NSTimeInterval)delay;
/**
*
* Access the singleton Crashlytics instance.
*
**/
+ (Crashlytics *)sharedInstance;
/**
*
* The easiest way to cause a crash - great for testing!
*
**/
- (void)crash;
/**
*
* Many of our customers have requested the ability to tie crashes to specific end-users of their
* application in order to facilitate responses to support requests or permit the ability to reach
* out for more information. We allow you to specify up to three separate values for display within
* the Crashlytics UI - but please be mindful of your end-user's privacy.
*
* We recommend specifying a user identifier - an arbitrary string that ties an end-user to a record
* in your system. This could be a database id, hash, or other value that is meaningless to a
* third-party observer but can be indexed and queried by you.
*
* Optionally, you may also specify the end-user's name or username, as well as email address if you
* do not have a system that works well with obscured identifiers.
*
* Pursuant to our EULA, this data is transferred securely throughout our system and we will not
* disseminate end-user data unless required to by law. That said, if you choose to provide end-user
* contact information, we strongly recommend that you disclose this in your application's privacy
* policy. Data privacy is of our utmost concern.
*
**/
- (void)setUserIdentifier:(NSString *)identifier;
- (void)setUserName:(NSString *)name;
- (void)setUserEmail:(NSString *)email;
+ (void)setUserIdentifier:(NSString *)identifier;
+ (void)setUserName:(NSString *)name;
+ (void)setUserEmail:(NSString *)email;
/**
*
* Set a value for a key to be associated with your crash data.
*
**/
- (void)setObjectValue:(id)value forKey:(NSString *)key;
- (void)setIntValue:(int)value forKey:(NSString *)key;
- (void)setBoolValue:(BOOL)value forKey:(NSString *)key;
- (void)setFloatValue:(float)value forKey:(NSString *)key;
+ (void)setObjectValue:(id)value forKey:(NSString *)key;
+ (void)setIntValue:(int)value forKey:(NSString *)key;
+ (void)setBoolValue:(BOOL)value forKey:(NSString *)key;
+ (void)setFloatValue:(float)value forKey:(NSString *)key;
@end
/**
* The CLSCrashReport protocol exposes methods that you can call on crash report objects passed
* to delegate methods. If you want these values or the entire object to stay in memory retain
* them or copy them.
**/
@protocol CLSCrashReport <NSObject>
@required
/**
* Returns the session identifier for the crash report.
**/
@property (nonatomic, readonly) NSString *identifier;
/**
* Returns the custom key value data for the crash report.
**/
@property (nonatomic, readonly) NSDictionary *customKeys;
/**
* Returns the CFBundleVersion of the application that crashed.
**/
@property (nonatomic, readonly) NSString *bundleVersion;
/**
* Returns the CFBundleShortVersionString of the application that crashed.
**/
@property (nonatomic, readonly) NSString *bundleShortVersionString;
/**
* Returns the date that the application crashed at.
**/
@property (nonatomic, readonly) NSDate *crashedOnDate;
/**
* Returns the os version that the application crashed on.
**/
@property (nonatomic, readonly) NSString *OSVersion;
/**
* Returns the os build version that the application crashed on.
**/
@property (nonatomic, readonly) NSString *OSBuildVersion;
@end
/**
*
* The CrashlyticsDelegate protocol provides a mechanism for your application to take
* action on events that occur in the Crashlytics crash reporting system. You can make
* use of these calls by assigning an object to the Crashlytics' delegate property directly,
* or through the convenience startWithAPIKey:delegate:... methods.
*
**/
@protocol CrashlyticsDelegate <NSObject>
@optional
/**
*
* Called once a Crashlytics instance has determined that the last execution of the
* application ended in a crash. This is called some time after the crash reporting
* process has begun. If you have specified a delay in one of the
* startWithAPIKey:... calls, this will take at least that long to be invoked.
*
**/
- (void)crashlyticsDidDetectCrashDuringPreviousExecution:(Crashlytics *)crashlytics;
/**
*
* Just like crashlyticsDidDetectCrashDuringPreviousExecution this delegate method is
* called once a Crashlytics instance has determined that the last execution of the
* application ended in a crash. A CLSCrashReport is passed back that contains data about
* the last crash report that was generated. See the CLSCrashReport protocol for method details.
* This method is called after crashlyticsDidDetectCrashDuringPreviousExecution.
*
**/
- (void)crashlytics:(Crashlytics *)crashlytics didDetectCrashDuringPreviousExecution:(id <CLSCrashReport>)crash;
@end

View file

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Crashlytics</string>
<key>CFBundleIdentifier</key>
<string>com.crashlytics.ios</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Crashlytics</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>2.1.1</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundleVersion</key>
<string>7</string>
<key>DTPlatformName</key>
<string>iphoneos</string>
<key>MinimumOSVersion</key>
<string>4.0</string>
</dict>
</plist>

View file

@ -1 +0,0 @@
A

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View file

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>get-task-allow</key>
<false/>
</dict>
</plist>

@ -1 +0,0 @@
Subproject commit 3ed0b3c945937bb8e4b96c08bd3382d7839fb86e

View file

@ -1 +0,0 @@
Versions/Current/Crashlytics

View file

@ -1 +0,0 @@
Versions/Current/Headers

View file

@ -1 +0,0 @@
Versions/Current/Resources

View file

@ -1,217 +0,0 @@
//
// Crashlytics.h
// Crashlytics
//
// Copyright 2013 Crashlytics, Inc. All rights reserved.
//
#import <Foundation/Foundation.h>
/**
*
* The CLS_LOG macro provides as easy way to gather more information in your log messages that are
* sent with your crash data. CLS_LOG prepends your custom log message with the function name and
* line number where the macro was used. If your app was built with the DEBUG preprocessor macro
* defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog.
* If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only.
*
* Example output:
* -[AppDelegate login:] line 134 $ login start
*
* If you would like to change this macro, create a new header file, unset our define and then define
* your own version. Make sure this new header file is imported after the Crashlytics header file.
*
* #undef CLS_LOG
* #define CLS_LOG(__FORMAT__, ...) CLSNSLog...
*
**/
#ifdef DEBUG
#define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#endif
/**
*
* Add logging that will be sent with your crash data. This logging will not show up in the system.log
* and will only be visible in your Crashlytics dashboard.
*
**/
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
/**
*
* Add logging that will be sent with your crash data. This logging will show up in the system.log
* and your Crashlytics dashboard. It is not recommended for Release builds.
*
**/
OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
@protocol CrashlyticsDelegate;
@interface Crashlytics : NSObject
@property (nonatomic, readonly, copy) NSString *apiKey;
@property (nonatomic, readonly, copy) NSString *version;
@property (nonatomic, assign) BOOL debugMode;
@property (nonatomic, assign) NSObject <CrashlyticsDelegate> *delegate;
/**
*
* The recommended way to install Crashlytics into your application is to place a call
* to +startWithAPIKey: in your -application:didFinishLaunchingWithOptions: method.
*
* This delay defaults to 1 second in order to generally give the application time to
* fully finish launching.
*
**/
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey;
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey afterDelay:(NSTimeInterval)delay;
/**
*
* If you need the functionality provided by the CrashlyticsDelegate protocol, you can use
* these convenience methods to activate the framework and set the delegate in one call.
*
**/
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject <CrashlyticsDelegate> *)delegate;
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject <CrashlyticsDelegate> *)delegate afterDelay:(NSTimeInterval)delay;
/**
*
* Access the singleton Crashlytics instance.
*
**/
+ (Crashlytics *)sharedInstance;
/**
*
* The easiest way to cause a crash - great for testing!
*
**/
- (void)crash;
/**
*
* Many of our customers have requested the ability to tie crashes to specific end-users of their
* application in order to facilitate responses to support requests or permit the ability to reach
* out for more information. We allow you to specify up to three separate values for display within
* the Crashlytics UI - but please be mindful of your end-user's privacy.
*
* We recommend specifying a user identifier - an arbitrary string that ties an end-user to a record
* in your system. This could be a database id, hash, or other value that is meaningless to a
* third-party observer but can be indexed and queried by you.
*
* Optionally, you may also specify the end-user's name or username, as well as email address if you
* do not have a system that works well with obscured identifiers.
*
* Pursuant to our EULA, this data is transferred securely throughout our system and we will not
* disseminate end-user data unless required to by law. That said, if you choose to provide end-user
* contact information, we strongly recommend that you disclose this in your application's privacy
* policy. Data privacy is of our utmost concern.
*
**/
- (void)setUserIdentifier:(NSString *)identifier;
- (void)setUserName:(NSString *)name;
- (void)setUserEmail:(NSString *)email;
+ (void)setUserIdentifier:(NSString *)identifier;
+ (void)setUserName:(NSString *)name;
+ (void)setUserEmail:(NSString *)email;
/**
*
* Set a value for a key to be associated with your crash data.
*
**/
- (void)setObjectValue:(id)value forKey:(NSString *)key;
- (void)setIntValue:(int)value forKey:(NSString *)key;
- (void)setBoolValue:(BOOL)value forKey:(NSString *)key;
- (void)setFloatValue:(float)value forKey:(NSString *)key;
+ (void)setObjectValue:(id)value forKey:(NSString *)key;
+ (void)setIntValue:(int)value forKey:(NSString *)key;
+ (void)setBoolValue:(BOOL)value forKey:(NSString *)key;
+ (void)setFloatValue:(float)value forKey:(NSString *)key;
@end
/**
* The CLSCrashReport protocol exposes methods that you can call on crash report objects passed
* to delegate methods. If you want these values or the entire object to stay in memory retain
* them or copy them.
**/
@protocol CLSCrashReport <NSObject>
@required
/**
* Returns the session identifier for the crash report.
**/
@property (nonatomic, readonly) NSString *identifier;
/**
* Returns the custom key value data for the crash report.
**/
@property (nonatomic, readonly) NSDictionary *customKeys;
/**
* Returns the CFBundleVersion of the application that crashed.
**/
@property (nonatomic, readonly) NSString *bundleVersion;
/**
* Returns the CFBundleShortVersionString of the application that crashed.
**/
@property (nonatomic, readonly) NSString *bundleShortVersionString;
/**
* Returns the date that the application crashed at.
**/
@property (nonatomic, readonly) NSDate *crashedOnDate;
/**
* Returns the os version that the application crashed on.
**/
@property (nonatomic, readonly) NSString *OSVersion;
/**
* Returns the os build version that the application crashed on.
**/
@property (nonatomic, readonly) NSString *OSBuildVersion;
@end
/**
*
* The CrashlyticsDelegate protocol provides a mechanism for your application to take
* action on events that occur in the Crashlytics crash reporting system. You can make
* use of these calls by assigning an object to the Crashlytics' delegate property directly,
* or through the convenience startWithAPIKey:delegate:... methods.
*
**/
@protocol CrashlyticsDelegate <NSObject>
@optional
/**
*
* Called once a Crashlytics instance has determined that the last execution of the
* application ended in a crash. This is called some time after the crash reporting
* process has begun. If you have specified a delay in one of the
* startWithAPIKey:... calls, this will take at least that long to be invoked.
*
**/
- (void)crashlyticsDidDetectCrashDuringPreviousExecution:(Crashlytics *)crashlytics;
/**
*
* Just like crashlyticsDidDetectCrashDuringPreviousExecution this delegate method is
* called once a Crashlytics instance has determined that the last execution of the
* application ended in a crash. A CLSCrashReport is passed back that contains data about
* the last crash report that was generated. See the CLSCrashReport protocol for method details.
* This method is called after crashlyticsDidDetectCrashDuringPreviousExecution.
*
**/
- (void)crashlytics:(Crashlytics *)crashlytics didDetectCrashDuringPreviousExecution:(id <CLSCrashReport>)crash;
@end

View file

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Crashlytics</string>
<key>CFBundleIdentifier</key>
<string>com.crashlytics.ios</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Crashlytics</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>2.1.3</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundleVersion</key>
<string>13</string>
<key>DTPlatformName</key>
<string>iphoneos</string>
<key>MinimumOSVersion</key>
<string>4.0</string>
</dict>
</plist>

View file

@ -1 +0,0 @@
A

Binary file not shown.

@ -1 +0,0 @@
Subproject commit 525240f6ed44b79e1d7ae8cd473ac6523aca9630

View file

@ -1,94 +0,0 @@
Google Analytics SDK for iOS Changelog
--------------------------------------------
Version: 3.01 (September 2013)
-------------------------------------------
* Fixed link error when targeting iOS 7.0.
--------------------------------------------
Version: 3.00 (August 2013)
-------------------------------------------
* SDK API change to align with analytics.js. The track<hittype> and
send<hittype> methods have been removed. Use send and the
GAIDictionaryBuilder construct methods instead.
* Most properties on the GAITracker protocol have been removed. Use
set on the various fields instead.
* All parameters set using the set method will be persisted. Previously,
several parameters would only be set for the next send/track call.
* GAILogger protocol is available for those wanting to implement their
own custom logging for the SDK.
* Minimium system requirements have changed. See Readme.txt for details.
* All SDK activity (database and network access) is now done on a separate
thread.
* Clientid can now be read. Call [tracker get:kGAIClientId]. Note that
this call will block until the client id can be read from the database.
* SDK no longer uses POST unless the hit is larger than 2000 bytes. It
will use GET instead.
* SDK will no longer retry sending hits based off the HTTP response code.
--------------------------------------------
Version: 2.0beta4 Update (Jan 2013)
--------------------------------------------
* Change default appVersion to the value in CFBundleShortVersionString
instead of CFBundleVersionKey.
* Use HTTPS as the default protocol instead of HTTP.
* Track methods changed to Send (e.g. trackView now called sendView).
* Some minor bug fixes.
--------------------------------------------
Version: 2.0beta3 iOS6 Update (Sep 2012)
--------------------------------------------
* Add armv7s architecture to libGoogleAnalytics.a.
* Remove armv6 architecture from libGoogleAnalytics.a.
--------------------------------------------
Version: 2.0beta3 (Aug 2012)
--------------------------------------------
* Third beta release.
* Added social tracking method to GAITracker:
trackSocial:withAction:withTarget:
* Timing method signature changed to:
trackTiming:withValue:withName:withLabel:
* Manual construction and dispatch methods added to GAITracker:
set:value:
get:
send:params:
* Custom dimension setter methods added to GAITracker:
setCustom:dimension:
setCustom:metric:
* Architecture of data store refactored to prevent reported CoreData issues.
--------------------------------------------
Version: 2.0beta2 (Jun 2012)
--------------------------------------------
* Second beta release.
* Updated to latest wire format.
* sampleRate changed to double-precision float.
* Excessive tracking is throttled.
* Undispatched tracking information is deleted when opt-out is enabled.
* Undispatched tracking information older than 30 days will be deleted.
* Enhancements to hit dispatcher.
* Rather than periodically retry, the dispatcher will use the Reachability API
when connectivity is lost to get notified when connectivity is reestablished.
* Updated example app.
* Other bugfixes and enhancements.
--------------------------------------------
Version: 2.0beta1 (May 2012)
--------------------------------------------
* Initial internal beta release.
* Added uncaught exception handling facility.
* Removed 'dispatchEnabled' property from GAI.
* Added 'defaultTracker' property to GAI.
* Added 'close' method to GAITracker.
* Added timing tracking method to GAITracker.
* Added trackView method to GAITracker which takes no argument.
* Transaction item field names updated.
* Updated to latest wire format.
* Event value is interpreted as a 64-bit integer.
* ARMV6 code generation switched from THUMB to ARM.
--------------------------------------------
Version: 2.0alpha1 (April 2012)
--------------------------------------------
* Initial internal alpha release.

View file

@ -1,23 +0,0 @@
//
// AppDelegate.h
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "GAI.h"
@class RootViewController;
@class NavController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property(nonatomic, strong) UIWindow *window;
@property(nonatomic, strong) NavController *navController;
@property(nonatomic, strong) RootViewController *viewController;
@property(nonatomic, strong) id<GAITracker> tracker;
@property(nonatomic, strong) NSDictionary *images;
@end

View file

@ -1,95 +0,0 @@
//
// AppDelegate.m
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import "AppDelegate.h"
#import "NavController.h"
#import "RootViewController.h"
/******* Set your tracking ID here *******/
static NSString *const kTrackingId = @"UA-TRACKING-ID";
static NSString *const kAllowTracking = @"allowTracking";
@interface AppDelegate ()
- (NSDictionary *)loadImages;
@end
@implementation AppDelegate
- (void)applicationDidBecomeActive:(UIApplication *)application {
[GAI sharedInstance].optOut =
![[NSUserDefaults standardUserDefaults] boolForKey:kAllowTracking];
}
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.images = [self loadImages];
NSDictionary *appDefaults = @{kAllowTracking: @(YES)};
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
// User must be able to opt out of tracking
[GAI sharedInstance].optOut =
![[NSUserDefaults standardUserDefaults] boolForKey:kAllowTracking];
// Initialize Google Analytics with a 120-second dispatch interval. There is a
// tradeoff between battery usage and timely dispatch.
[GAI sharedInstance].dispatchInterval = 120;
[GAI sharedInstance].trackUncaughtExceptions = YES;
self.tracker = [[GAI sharedInstance] trackerWithName:@"CuteAnimals"
trackingId:kTrackingId];
self.window =
[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController =
[[RootViewController alloc] initWithNibName:@"RootViewController"
bundle:nil];
self.navController =
[[NavController alloc] initWithRootViewController:self.viewController];
self.navController.delegate = self.navController;
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];
return YES;
}
- (NSDictionary *)loadImages {
NSArray *contents = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg"
inDirectory:nil];
if (!contents) {
NSLog(@"Failed to load directory contents");
return nil;
}
NSMutableDictionary *images = [NSMutableDictionary dictionary];
for (NSString *file in contents) {
NSArray *components = [[file lastPathComponent]
componentsSeparatedByString:@"-"];
if (components.count == 0) {
NSLog(@"Filename doesn't contain dash: %@", file);
continue;
}
UIImage *image = [UIImage imageWithContentsOfFile:file];
if (!image) {
NSLog(@"Failed to load file: %@", file);
continue;
}
NSString *prefix = components[0];
NSMutableArray *categoryImages = images[prefix];
if (!categoryImages) {
categoryImages = [NSMutableArray array];
images[prefix] = categoryImages;
}
[categoryImages addObject:image];
}
for (NSString *cat in [images allKeys]) {
NSArray *array = images[cat];
NSLog(@"Category %@: %u image(s).", cat, array.count);
}
return images;
}
@end

View file

@ -1,22 +0,0 @@
//
// ViewController.h
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "NavController.h"
@interface CategoryViewController :
GAITrackedViewController<UITableViewDelegate, UITableViewDataSource>
@property(nonatomic, strong) NSString *category;
@property(nonatomic, strong) IBOutlet UITableView *tableView;
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle
category:(NSString *)category;
@end

View file

@ -1,105 +0,0 @@
//
// ViewController.m
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import "AppDelegate.h"
#import "CategoryViewController.h"
#import "ImageViewController.h"
#import "GAI.h"
@interface CategoryViewController ()
@property(nonatomic, strong) NSMutableArray *items;
@property(nonatomic, weak) AppDelegate *delegate;
@end
@implementation CategoryViewController
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle
category:(NSString *)category {
self = [super initWithNibName:nibName
bundle:nibBundle];
if (self) {
_category = category;
_delegate = [UIApplication sharedApplication].delegate;
self.title = [NSString stringWithFormat:@"Cute %@s", category];
self.screenName = category;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.items = (self.delegate.images)[self.category];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
if ([[UIDevice currentDevice] userInterfaceIdiom] ==
UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
#pragma mark UITableViewDelegate methods
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
if (indexPath.row < 0 || indexPath.row >= self.items.count) {
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
return;
}
NSString *title =
[NSString stringWithFormat:@"%@ %d", self.category, indexPath.row];
UIImage *image = (self.items)[indexPath.row];
ImageViewController *imageViewController =
[[ImageViewController alloc] initWithNibName:nil
bundle:nil
title:title
image:image];
[self.delegate.navController pushViewController:imageViewController
animated:YES];
}
#pragma mark UITableViewDataSource methods
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return self.items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row < 0 || indexPath.row >= self.items.count) {
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
return nil;
}
static NSString *CellId = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellId];
cell.textLabel.font = [UIFont systemFontOfSize:14];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
}
cell.textLabel.text = [NSString stringWithFormat:@"%@ %d",
self.category, indexPath.row];
UIImage *image = (self.items)[indexPath.row];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d x %d",
(int)image.size.width, (int)image.size.height];
return cell;
}
@end

View file

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1296</int>
<string key="IBDocument.SystemVersion">11D50b</string>
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
<string key="IBDocument.AppKitVersion">1138.32</string>
<string key="IBDocument.HIToolboxVersion">568.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">1181</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUIView</string>
<string>IBUITableView</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="IBProxyObject" id="841351856">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBProxyObject" id="606714003">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBUIView" id="766721923">
<nil key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="IBUITableView" id="481613891">
<reference key="NSNextResponder" ref="766721923"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{768, 1004}</string>
<reference key="NSSuperview" ref="766721923"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<bool key="IBUIClipsSubviews">YES</bool>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
<bool key="IBUIAlwaysBounceVertical">YES</bool>
<int key="IBUISeparatorStyle">1</int>
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
<float key="IBUIRowHeight">44</float>
<float key="IBUISectionHeaderHeight">22</float>
<float key="IBUISectionFooterHeight">22</float>
</object>
</array>
<string key="NSFrame">{{0, 20}, {768, 1004}}</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
<int key="IBUIStatusBarStyle">2</int>
</object>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="766721923"/>
</object>
<int key="connectionID">3</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">tableView</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="481613891"/>
</object>
<int key="connectionID">8</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="481613891"/>
<reference key="destination" ref="841351856"/>
</object>
<int key="connectionID">9</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="481613891"/>
<reference key="destination" ref="841351856"/>
</object>
<int key="connectionID">10</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="841351856"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="606714003"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="766721923"/>
<array class="NSMutableArray" key="children">
<reference ref="481613891"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">4</int>
<reference key="object" ref="481613891"/>
<reference key="parent" ref="766721923"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.CustomClassName">CategoryViewController</string>
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="-2.CustomClassName">UIResponder</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">10</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
<real value="1296" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<string key="IBCocoaTouchPluginVersion">1181</string>
</data>
</archive>

View file

@ -1,168 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1296</int>
<string key="IBDocument.SystemVersion">11D50b</string>
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
<string key="IBDocument.AppKitVersion">1138.32</string>
<string key="IBDocument.HIToolboxVersion">568.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">1181</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUIView</string>
<string>IBUITableView</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="IBProxyObject" id="372490531">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBProxyObject" id="843779117">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUIView" id="774585933">
<reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="IBUITableView" id="183585393">
<reference key="NSNextResponder" ref="774585933"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 460}</string>
<reference key="NSSuperview" ref="774585933"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<bool key="IBUIClipsSubviews">YES</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<bool key="IBUIAlwaysBounceVertical">YES</bool>
<int key="IBUISeparatorStyle">1</int>
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
<float key="IBUIRowHeight">44</float>
<float key="IBUISectionHeaderHeight">22</float>
<float key="IBUISectionFooterHeight">22</float>
</object>
</array>
<string key="NSFrame">{{0, 20}, {320, 460}}</string>
<reference key="NSSuperview"/>
<reference key="NSNextKeyView" ref="183585393"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC43NQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="774585933"/>
</object>
<int key="connectionID">7</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">tableView</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="183585393"/>
</object>
<int key="connectionID">11</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="183585393"/>
<reference key="destination" ref="372490531"/>
</object>
<int key="connectionID">12</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="183585393"/>
<reference key="destination" ref="372490531"/>
</object>
<int key="connectionID">13</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="372490531"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="843779117"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">6</int>
<reference key="object" ref="774585933"/>
<array class="NSMutableArray" key="children">
<reference ref="183585393"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">8</int>
<reference key="object" ref="183585393"/>
<reference key="parent" ref="774585933"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.CustomClassName">CategoryViewController</string>
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="-2.CustomClassName">UIResponder</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">29</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
<real value="1296" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<string key="IBCocoaTouchPluginVersion">1181</string>
</data>
</archive>

View file

@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.google.analytics.example.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

View file

@ -1,10 +0,0 @@
#import <Availability.h>
#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif

View file

@ -1,420 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6EE7153E1F0B003CAC38 /* UIKit.framework */; };
113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6EE9153E1F0B003CAC38 /* Foundation.framework */; };
113B6F10153E1F99003CAC38 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F03153E1F99003CAC38 /* AppDelegate.m */; };
113B6F11153E1F99003CAC38 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F04153E1F99003CAC38 /* main.m */; };
113B6F12153E1F99003CAC38 /* NavController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F06153E1F99003CAC38 /* NavController.m */; };
113B6F13153E1F99003CAC38 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F08153E1F99003CAC38 /* RootViewController.m */; };
113B6F14153E1F99003CAC38 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F09153E1F99003CAC38 /* RootViewController.xib */; };
113B6F15153E1F99003CAC38 /* CategoryViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */; };
113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */; };
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6F2A153E208D003CAC38 /* CoreData.framework */; };
115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115686551593CE6A00A5D031 /* SystemConfiguration.framework */; };
11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1C1561834700949704 /* CategoryViewController.m */; };
11FCCC201561834700949704 /* ImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1E1561834700949704 /* ImageViewController.m */; };
11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC22156189A600949704 /* Bunny-1.jpg */; };
11FCCC35156189A600949704 /* Bunny-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC23156189A600949704 /* Bunny-2.jpg */; };
11FCCC36156189A600949704 /* Bunny-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC24156189A600949704 /* Bunny-3.jpg */; };
11FCCC37156189A600949704 /* Cat-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC25156189A600949704 /* Cat-1.jpg */; };
11FCCC38156189A600949704 /* Cat-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC26156189A600949704 /* Cat-2.jpg */; };
11FCCC39156189A600949704 /* Cat-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC27156189A600949704 /* Cat-3.jpg */; };
11FCCC3A156189A600949704 /* Cat-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC28156189A600949704 /* Cat-4.jpg */; };
11FCCC3B156189A600949704 /* Lion-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC29156189A600949704 /* Lion-1.jpg */; };
11FCCC3C156189A600949704 /* Lion-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2A156189A600949704 /* Lion-2.jpg */; };
11FCCC3D156189A600949704 /* Lion-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2B156189A600949704 /* Lion-3.jpg */; };
11FCCC3E156189A600949704 /* Lion-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2C156189A600949704 /* Lion-4.jpg */; };
11FCCC3F156189A600949704 /* Monkey-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2D156189A600949704 /* Monkey-1.jpg */; };
11FCCC40156189A600949704 /* Monkey-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2E156189A600949704 /* Monkey-2.jpg */; };
11FCCC41156189A600949704 /* Monkey-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2F156189A600949704 /* Monkey-3.jpg */; };
11FCCC42156189A600949704 /* Monkey-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC30156189A600949704 /* Monkey-4.jpg */; };
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC31156189A600949704 /* Monkey-5.jpg */; };
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC32156189A600949704 /* Tiger-1.jpg */; };
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC33156189A600949704 /* Tiger-2.jpg */; };
88679A8E17A184FA00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */; };
F7C47F21178B5B56003A7D0F /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F7C47F20178B5B55003A7D0F /* Settings.bundle */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CuteAnimals.app; sourceTree = BUILT_PRODUCTS_DIR; };
113B6EE7153E1F0B003CAC38 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
113B6EE9153E1F0B003CAC38 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CuteAnimals-Info.plist"; sourceTree = "<group>"; };
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CuteAnimals-Prefix.pch"; sourceTree = "<group>"; };
113B6F02153E1F99003CAC38 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
113B6F03153E1F99003CAC38 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
113B6F04153E1F99003CAC38 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };
113B6F05153E1F99003CAC38 /* NavController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavController.h; sourceTree = SOURCE_ROOT; };
113B6F06153E1F99003CAC38 /* NavController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NavController.m; sourceTree = SOURCE_ROOT; };
113B6F07153E1F99003CAC38 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = SOURCE_ROOT; };
113B6F08153E1F99003CAC38 /* RootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = SOURCE_ROOT; };
113B6F09153E1F99003CAC38 /* RootViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RootViewController.xib; sourceTree = SOURCE_ROOT; };
113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPad.xib; sourceTree = SOURCE_ROOT; };
113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPhone.xib; sourceTree = SOURCE_ROOT; };
113B6F2A153E208D003CAC38 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
115686551593CE6A00A5D031 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
11BC54021577E24400E7D657 /* GAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAI.h; path = ../../Library/GAI.h; sourceTree = "<group>"; };
11BC54031577E24500E7D657 /* GAITrackedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = ../../Library/GAITrackedViewController.h; sourceTree = "<group>"; };
11BC54041577E24500E7D657 /* GAITracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = ../../Library/GAITracker.h; sourceTree = "<group>"; };
11FCCC1B1561834700949704 /* CategoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CategoryViewController.h; sourceTree = SOURCE_ROOT; };
11FCCC1C1561834700949704 /* CategoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CategoryViewController.m; sourceTree = SOURCE_ROOT; };
11FCCC1D1561834700949704 /* ImageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageViewController.h; sourceTree = SOURCE_ROOT; };
11FCCC1E1561834700949704 /* ImageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageViewController.m; sourceTree = SOURCE_ROOT; };
11FCCC22156189A600949704 /* Bunny-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-1.jpg"; path = "Images/Bunny-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC23156189A600949704 /* Bunny-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-2.jpg"; path = "Images/Bunny-2.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC24156189A600949704 /* Bunny-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-3.jpg"; path = "Images/Bunny-3.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC25156189A600949704 /* Cat-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-1.jpg"; path = "Images/Cat-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC26156189A600949704 /* Cat-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-2.jpg"; path = "Images/Cat-2.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC27156189A600949704 /* Cat-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-3.jpg"; path = "Images/Cat-3.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC28156189A600949704 /* Cat-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-4.jpg"; path = "Images/Cat-4.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC29156189A600949704 /* Lion-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-1.jpg"; path = "Images/Lion-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2A156189A600949704 /* Lion-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-2.jpg"; path = "Images/Lion-2.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2B156189A600949704 /* Lion-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-3.jpg"; path = "Images/Lion-3.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2C156189A600949704 /* Lion-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-4.jpg"; path = "Images/Lion-4.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2D156189A600949704 /* Monkey-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-1.jpg"; path = "Images/Monkey-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2E156189A600949704 /* Monkey-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-2.jpg"; path = "Images/Monkey-2.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2F156189A600949704 /* Monkey-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-3.jpg"; path = "Images/Monkey-3.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC30156189A600949704 /* Monkey-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-4.jpg"; path = "Images/Monkey-4.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC31156189A600949704 /* Monkey-5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-5.jpg"; path = "Images/Monkey-5.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC32156189A600949704 /* Tiger-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-1.jpg"; path = "Images/Tiger-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC33156189A600949704 /* Tiger-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-2.jpg"; path = "Images/Tiger-2.jpg"; sourceTree = SOURCE_ROOT; };
88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = ../../../../libGoogleAnalyticsServices.a; sourceTree = "<group>"; };
F707E732174D7550008123BF /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAIDictionaryBuilder.h; path = ../../Library/GAIDictionaryBuilder.h; sourceTree = "<group>"; };
F707E733174D7550008123BF /* GAIFields.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAIFields.h; path = ../../Library/GAIFields.h; sourceTree = "<group>"; };
F707E734174D7550008123BF /* GAILogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAILogger.h; path = ../../Library/GAILogger.h; sourceTree = "<group>"; };
F7C47F20178B5B55003A7D0F /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
113B6EE0153E1F0B003CAC38 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */,
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */,
113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */,
113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */,
88679A8E17A184FA00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
113B6ED8153E1F0B003CAC38 = {
isa = PBXGroup;
children = (
113B6EED153E1F0B003CAC38 /* CuteAnimals */,
113B6EE6153E1F0B003CAC38 /* Frameworks */,
113B6EE4153E1F0B003CAC38 /* Products */,
);
sourceTree = "<group>";
};
113B6EE4153E1F0B003CAC38 /* Products */ = {
isa = PBXGroup;
children = (
113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */,
);
name = Products;
sourceTree = "<group>";
};
113B6EE6153E1F0B003CAC38 /* Frameworks */ = {
isa = PBXGroup;
children = (
115686551593CE6A00A5D031 /* SystemConfiguration.framework */,
113B6F2A153E208D003CAC38 /* CoreData.framework */,
113B6EE7153E1F0B003CAC38 /* UIKit.framework */,
113B6EE9153E1F0B003CAC38 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
113B6EED153E1F0B003CAC38 /* CuteAnimals */ = {
isa = PBXGroup;
children = (
113B6F1E153E1FAD003CAC38 /* Google Analytics Library */,
113B6F02153E1F99003CAC38 /* AppDelegate.h */,
113B6F03153E1F99003CAC38 /* AppDelegate.m */,
11FCCC1B1561834700949704 /* CategoryViewController.h */,
11FCCC1C1561834700949704 /* CategoryViewController.m */,
11FCCC1D1561834700949704 /* ImageViewController.h */,
11FCCC1E1561834700949704 /* ImageViewController.m */,
113B6F04153E1F99003CAC38 /* main.m */,
113B6F05153E1F99003CAC38 /* NavController.h */,
113B6F06153E1F99003CAC38 /* NavController.m */,
113B6F07153E1F99003CAC38 /* RootViewController.h */,
113B6F08153E1F99003CAC38 /* RootViewController.m */,
113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */,
113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */,
113B6F09153E1F99003CAC38 /* RootViewController.xib */,
113B6EEE153E1F0B003CAC38 /* Supporting Files */,
);
name = CuteAnimals;
path = .;
sourceTree = "<group>";
};
113B6EEE153E1F0B003CAC38 /* Supporting Files */ = {
isa = PBXGroup;
children = (
F7C47F20178B5B55003A7D0F /* Settings.bundle */,
11FCCC211561899800949704 /* Images */,
113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */,
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
113B6F1E153E1FAD003CAC38 /* Google Analytics Library */ = {
isa = PBXGroup;
children = (
88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */,
F707E732174D7550008123BF /* GAIDictionaryBuilder.h */,
F707E733174D7550008123BF /* GAIFields.h */,
F707E734174D7550008123BF /* GAILogger.h */,
11BC54021577E24400E7D657 /* GAI.h */,
11BC54031577E24500E7D657 /* GAITrackedViewController.h */,
11BC54041577E24500E7D657 /* GAITracker.h */,
);
name = "Google Analytics Library";
sourceTree = "<group>";
};
11FCCC211561899800949704 /* Images */ = {
isa = PBXGroup;
children = (
11FCCC22156189A600949704 /* Bunny-1.jpg */,
11FCCC23156189A600949704 /* Bunny-2.jpg */,
11FCCC24156189A600949704 /* Bunny-3.jpg */,
11FCCC25156189A600949704 /* Cat-1.jpg */,
11FCCC26156189A600949704 /* Cat-2.jpg */,
11FCCC27156189A600949704 /* Cat-3.jpg */,
11FCCC28156189A600949704 /* Cat-4.jpg */,
11FCCC29156189A600949704 /* Lion-1.jpg */,
11FCCC2A156189A600949704 /* Lion-2.jpg */,
11FCCC2B156189A600949704 /* Lion-3.jpg */,
11FCCC2C156189A600949704 /* Lion-4.jpg */,
11FCCC2D156189A600949704 /* Monkey-1.jpg */,
11FCCC2E156189A600949704 /* Monkey-2.jpg */,
11FCCC2F156189A600949704 /* Monkey-3.jpg */,
11FCCC30156189A600949704 /* Monkey-4.jpg */,
11FCCC31156189A600949704 /* Monkey-5.jpg */,
11FCCC32156189A600949704 /* Tiger-1.jpg */,
11FCCC33156189A600949704 /* Tiger-2.jpg */,
);
name = Images;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
113B6EE2153E1F0B003CAC38 /* CuteAnimals */ = {
isa = PBXNativeTarget;
buildConfigurationList = 113B6EFB153E1F0B003CAC38 /* Build configuration list for PBXNativeTarget "CuteAnimals" */;
buildPhases = (
113B6EDF153E1F0B003CAC38 /* Sources */,
113B6EE0153E1F0B003CAC38 /* Frameworks */,
113B6EE1153E1F0B003CAC38 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = CuteAnimals;
productName = CuteAnimals;
productReference = 113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
113B6EDA153E1F0B003CAC38 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0460;
};
buildConfigurationList = 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 113B6ED8153E1F0B003CAC38;
productRefGroup = 113B6EE4153E1F0B003CAC38 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
113B6EE2153E1F0B003CAC38 /* CuteAnimals */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
113B6EE1153E1F0B003CAC38 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
113B6F14153E1F99003CAC38 /* RootViewController.xib in Resources */,
113B6F15153E1F99003CAC38 /* CategoryViewController_iPad.xib in Resources */,
113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */,
11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */,
11FCCC35156189A600949704 /* Bunny-2.jpg in Resources */,
11FCCC36156189A600949704 /* Bunny-3.jpg in Resources */,
11FCCC37156189A600949704 /* Cat-1.jpg in Resources */,
11FCCC38156189A600949704 /* Cat-2.jpg in Resources */,
11FCCC39156189A600949704 /* Cat-3.jpg in Resources */,
11FCCC3A156189A600949704 /* Cat-4.jpg in Resources */,
11FCCC3B156189A600949704 /* Lion-1.jpg in Resources */,
11FCCC3C156189A600949704 /* Lion-2.jpg in Resources */,
11FCCC3D156189A600949704 /* Lion-3.jpg in Resources */,
11FCCC3E156189A600949704 /* Lion-4.jpg in Resources */,
11FCCC3F156189A600949704 /* Monkey-1.jpg in Resources */,
11FCCC40156189A600949704 /* Monkey-2.jpg in Resources */,
11FCCC41156189A600949704 /* Monkey-3.jpg in Resources */,
11FCCC42156189A600949704 /* Monkey-4.jpg in Resources */,
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */,
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */,
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */,
F7C47F21178B5B56003A7D0F /* Settings.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
113B6EDF153E1F0B003CAC38 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
113B6F10153E1F99003CAC38 /* AppDelegate.m in Sources */,
113B6F11153E1F99003CAC38 /* main.m in Sources */,
113B6F12153E1F99003CAC38 /* NavController.m in Sources */,
113B6F13153E1F99003CAC38 /* RootViewController.m in Sources */,
11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */,
11FCCC201561834700949704 /* ImageViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
113B6EF9153E1F0B003CAC38 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
113B6EFA153E1F0B003CAC38 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
113B6EFC153E1F0B003CAC38 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
INFOPLIST_FILE = "CuteAnimals-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 5.0;
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../Library\"",
"\"$(SRCROOT)/../../..\"",
);
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Debug;
};
113B6EFD153E1F0B003CAC38 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
INFOPLIST_FILE = "CuteAnimals-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 5.0;
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../Library\"",
"\"$(SRCROOT)/../../..\"",
);
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */ = {
isa = XCConfigurationList;
buildConfigurations = (
113B6EF9153E1F0B003CAC38 /* Debug */,
113B6EFA153E1F0B003CAC38 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
113B6EFB153E1F0B003CAC38 /* Build configuration list for PBXNativeTarget "CuteAnimals" */ = {
isa = XCConfigurationList;
buildConfigurations = (
113B6EFC153E1F0B003CAC38 /* Debug */,
113B6EFD153E1F0B003CAC38 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 113B6EDA153E1F0B003CAC38 /* Project object */;
}

View file

@ -1,20 +0,0 @@
//
// ImageViewController.h
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "GAI.h"
#import "NavController.h"
@interface ImageViewController : GAITrackedViewController
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
title:(NSString *)title
image:(UIImage *)image;
@end

View file

@ -1,46 +0,0 @@
//
// ImageViewController.m
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import "ImageViewController.h"
#import "AppDelegate.h"
@interface ImageViewController ()
@property(nonatomic, strong) UIImage *image;
@end
@implementation ImageViewController
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
title:(NSString *)title
image:(UIImage *)image {
self = [super initWithNibName:nibNameOrNil
bundle:nibBundleOrNil];
if (self) {
_image = image;
self.title = self.screenName = title;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
UIImageView *imageView = [[UIImageView alloc] initWithImage:self.image];
imageView.userInteractionEnabled = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:imageView];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
@end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

View file

@ -1,13 +0,0 @@
//
// NavController.h
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface NavController :
UINavigationController<UINavigationControllerDelegate>
@end

View file

@ -1,31 +0,0 @@
//
// NavController.m
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import "NavController.h"
@implementation NavController
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
#pragma mark UINavigationControllerDelegate methods
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated {
// NSLog(@"navigationController:willShowViewController:animated:");
}
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated {
// NSLog(@"navigationController:didShowViewController:animated:");
}
@end

View file

@ -1,13 +0,0 @@
IMPORTANT: For this app to work, edit AppDelegate.m and supply your tracking ID.
This example app illustrates how to easily add Google Analytics tracking to a
simple iOS application. The app delegate initializes the Google Analytics SDK,
sets the dispatch interval, enables uncaught exception tracking and the logging
of debug messages, and instantiates a tracker using the tracking ID given. Each
view controller that needs to be tracked inherits from GAITrackedViewController
and sets the 'trackedViewName' property to enable automatic view tracking with
the view name given. The app also tracks the toggling of dispatching using HTTP
and HTTPS as events by directly calling the GAITracker event tracking method.
All images are from the public domain. They were downloaded from
http://public-domain-image.com

View file

@ -1,15 +0,0 @@
//
// RootViewController.h
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface RootViewController :
GAITrackedViewController<UITableViewDelegate, UITableViewDataSource>
@property(nonatomic, strong) IBOutlet UITableView *tableView;
@end

View file

@ -1,130 +0,0 @@
//
// RootViewController.m
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import "AppDelegate.h"
#import "RootViewController.h"
#import "CategoryViewController.h"
#import "ImageViewController.h"
#import "GAI.h"
#import "GAIDictionaryBuilder.h"
@interface RootViewController ()
@property(nonatomic, strong) NSArray *items;
@property(nonatomic, weak) AppDelegate *delegate;
@end
@implementation RootViewController
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle {
self = [super initWithNibName:nibName
bundle:nibBundle];
if (self) {
_delegate = [UIApplication sharedApplication].delegate;
self.title = @"Cute Animals";
self.screenName = @"root";
}
return self;
}
- (void)dispatch {
NSMutableDictionary *event =
[[GAIDictionaryBuilder createEventWithCategory:@"UI"
action:@"buttonPress"
label:@"dispatch"
value:nil] build];
[[GAI sharedInstance].defaultTracker send:event];
[[GAI sharedInstance] dispatch];
}
- (void)crash {
[NSException raise:@"There is no spoon."
format:@"Abort, retry, fail?"];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.leftBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Dispatch"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(dispatch)];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Crash"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(crash)];
self.items =
[[self.delegate.images allKeys]
sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
[self.tableView reloadData];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
return NO;
}
#pragma mark UITableViewDelegate methods
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
if (indexPath.row < 0 || indexPath.row >= self.items.count) {
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
return;
}
NSString *category = (self.items)[indexPath.row];
NSString *nib = ([[UIDevice currentDevice] userInterfaceIdiom] ==
UIUserInterfaceIdiomPhone) ? @"CategoryViewController_iPhone" :
@"CategoryViewController_iPad";
CategoryViewController *categoryController =
[[CategoryViewController alloc] initWithNibName:nib
bundle:nil
category:category];
[self.delegate.navController pushViewController:categoryController
animated:YES];
}
#pragma mark UITableViewDataSource methods
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return self.items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row < 0 || indexPath.row >= self.items.count) {
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
return nil;
}
NSString *category = (self.items)[indexPath.row];
static NSString *CellId = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellId];
cell.textLabel.font = [UIFont systemFontOfSize:14];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
}
NSString *label = [NSString stringWithFormat:@"Cute %@ Pictures!", category];
cell.textLabel.text = label;
NSUInteger imageCount = [(self.delegate.images)[category] count];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%u image(s).",
imageCount];
return cell;
}
@end

View file

@ -1,193 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1296</int>
<string key="IBDocument.SystemVersion">11D50b</string>
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
<string key="IBDocument.AppKitVersion">1138.32</string>
<string key="IBDocument.HIToolboxVersion">568.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">1181</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUIView</string>
<string>IBUITableView</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="IBProxyObject" id="841351856">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBProxyObject" id="606714003">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBUIView" id="766721923">
<reference key="NSNextResponder"/>
<int key="NSvFlags">292</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="IBUITableView" id="302742316">
<reference key="NSNextResponder" ref="766721923"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{768, 1004}</string>
<reference key="NSSuperview" ref="766721923"/>
<reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<bool key="IBUIClipsSubviews">YES</bool>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
<bool key="IBUIAlwaysBounceVertical">YES</bool>
<int key="IBUISeparatorStyle">1</int>
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
<float key="IBUIRowHeight">44</float>
<float key="IBUISectionHeaderHeight">22</float>
<float key="IBUISectionFooterHeight">22</float>
</object>
</array>
<string key="NSFrame">{{0, 20}, {768, 1004}}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
<int key="IBUIStatusBarStyle">2</int>
</object>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="766721923"/>
</object>
<int key="connectionID">3</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">tableView</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="302742316"/>
</object>
<int key="connectionID">7</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="302742316"/>
<reference key="destination" ref="841351856"/>
</object>
<int key="connectionID">5</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="302742316"/>
<reference key="destination" ref="841351856"/>
</object>
<int key="connectionID">6</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="841351856"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="606714003"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="766721923"/>
<array class="NSMutableArray" key="children">
<reference ref="302742316"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">4</int>
<reference key="object" ref="302742316"/>
<reference key="parent" ref="766721923"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.CustomClassName">RootViewController</string>
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="-2.CustomClassName">UIResponder</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">7</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">RootViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">tableView</string>
<string key="NS.object.0">UITableView</string>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<string key="NS.key.0">tableView</string>
<object class="IBToOneOutletInfo" key="NS.object.0">
<string key="name">tableView</string>
<string key="candidateClassName">UITableView</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/RootViewController.h</string>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
<real value="1296" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<string key="IBCocoaTouchPluginVersion">1181</string>
</data>
</archive>

View file

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>DefaultValue</key>
<true/>
<key>Key</key>
<string>allowTracking</string>
<key>Title</key>
<string>Allow analytics</string>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
</dict>
</array>
<key>StringsTable</key>
<string>Root</string>
</dict>
</plist>

View file

@ -1,17 +0,0 @@
//
// main.m
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil,
NSStringFromClass([AppDelegate class]));
}
}

View file

@ -1,166 +0,0 @@
/*!
@header GAI.h
@abstract Google Analytics iOS SDK Header
@version 3.0
@copyright Copyright 2013 Google Inc. All rights reserved.
*/
#import <Foundation/Foundation.h>
#import "GAILogger.h"
#import "GAITracker.h"
#import "GAITrackedViewController.h"
/*! Google Analytics product string. */
extern NSString *const kGAIProduct;
/*! Google Analytics version string. */
extern NSString *const kGAIVersion;
/*!
NSError objects returned by the Google Analytics SDK may have this error domain
to indicate that the error originated in the Google Analytics SDK.
*/
extern NSString *const kGAIErrorDomain;
/*! Google Analytics error codes. */
typedef enum {
// This error code indicates that there was no error. Never used.
kGAINoError = 0,
// This error code indicates that there was a database-related error.
kGAIDatabaseError,
// This error code indicates that there was a network-related error.
kGAINetworkError,
} GAIErrorCode;
/*!
Google Analytics iOS top-level class. Provides facilities to create trackers
and set behaviorial flags.
*/
@interface GAI : NSObject
/*!
For convenience, this class exposes a default tracker instance.
This is initialized to `nil` and will be set to the first tracker that is
instantiated in trackerWithTrackingId:. It may be overridden as desired.
The GAITrackedViewController class will, by default, use this tracker instance.
*/
@property(nonatomic, assign) id<GAITracker> defaultTracker;
/*!
The GAILogger to use.
*/
@property(nonatomic, retain) id<GAILogger> logger;
/*!
When this is true, no tracking information will be gathered; tracking calls
will effectively become no-ops. When set to true, all tracking information that
has not yet been submitted. The value of this flag will be persisted
automatically by the SDK. Developers can optionally use this flag to implement
an opt-out setting in the app to allows users to opt out of Google Analytics
tracking.
This is set to `NO` the first time the Google Analytics SDK is used on a
device, and is persisted thereafter.
*/
@property(nonatomic, assign) BOOL optOut;
/*!
If this value is positive, tracking information will be automatically
dispatched every dispatchInterval seconds. Otherwise, tracking information must
be sent manually by calling dispatch.
By default, this is set to `120`, which indicates tracking information should
be dispatched automatically every 120 seconds.
*/
@property(nonatomic, assign) NSTimeInterval dispatchInterval;
/*!
When set to true, the SDK will record the currently registered uncaught
exception handler, and then register an uncaught exception handler which tracks
the exceptions that occurred using defaultTracker. If defaultTracker is not
`nil`, this function will track the exception on the tracker and attempt to
dispatch any outstanding tracking information for 5 seconds. It will then call
the previously registered exception handler, if any. When set back to false,
the previously registered uncaught exception handler will be restored.
*/
@property(nonatomic, assign) BOOL trackUncaughtExceptions;
/*!
When this is 'YES', no tracking information will be sent. Defaults to 'NO'.
*/
@property(nonatomic, assign) BOOL dryRun;
/*! Get the shared instance of the Google Analytics for iOS class. */
+ (GAI *)sharedInstance;
/*!
Creates or retrieves a GAITracker implementation with the specified name and
tracking ID. If the tracker for the specified name does not already exist, then
it will be created and returned; otherwise, the existing tracker will be
returned. If the existing tracker for the respective name has a different
tracking ID, that tracking ID is not changed by this method. If defaultTracker
is not set, it will be set to the tracker instance returned here.
@param name The name of this tracker. Must not be `nil` or empty.
@param trackingID The tracking ID to use for this tracker. It should be of
the form `UA-xxxxx-y`.
@return A GAITracker associated with the specified name. The tracker
can be used to send tracking data to Google Analytics. The first time this
method is called with a particular name, the tracker for that name will be
returned, and subsequent calls with the same name will return the same
instance. It is not necessary to retain the tracker because the tracker will be
retained internally by the library.
If an error occurs or the name is not valid, this method will return
`nil`.
*/
- (id<GAITracker>)trackerWithName:(NSString *)name
trackingId:(NSString *)trackingId;
/*!
Creates or retrieves a GAITracker implementation with name equal to
the specified tracking ID. If the tracker for the respective name does not
already exist, it is created, has it's tracking ID set to |trackingId|,
and is returned; otherwise, the existing tracker is returned. If the existing
tracker for the respective name has a different tracking ID, that tracking ID
is not changed by this method. If defaultTracker is not set, it is set to the
tracker instance returned here.
@param trackingID The tracking ID to use for this tracker. It should be of
the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID.
@return A GAITracker associated with the specified trackingID. The tracker
can be used to send tracking data to Google Analytics. The first time this
method is called with a particular trackingID, the tracker for the respective
name will be returned, and subsequent calls with the same trackingID
will return the same instance. It is not necessary to retain the tracker
because the tracker will be retained internally by the library.
If an error occurs or the trackingId is not valid, this method will return
`nil`.
*/
- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId;
/*!
Remove a tracker from the trackers dictionary. If it is the default tracker,
clears the default tracker as well.
@param name The name of the tracker.
*/
- (void)removeTrackerByName:(NSString *)name;
/*!
Dispatches any pending tracking information.
It would be wise to call this when application is exiting to initiate the
submission of any unsubmitted tracking information. Note that this does not
have any effect on dispatchInterval, and can be used in conjuntion with
periodic dispatch. */
- (void)dispatch;
@end

View file

@ -1,178 +0,0 @@
/*!
@header GAIDictionaryBuilder.h
@abstract Google Analytics iOS SDK Hit Format Header
@copyright Copyright 2013 Google Inc. All rights reserved.
*/
#import <Foundation/Foundation.h>
/*!
* Helper class to build a dictionary of hit parameters and values.
* <br>
* Examples:
* <code>
* id<GAITracker> t = // get a tracker.
* [t send:[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory"
* action:@"EventAction"
* label:nil
* value:nil]
* set:@"dimension1" forKey:[GAIFields CustomDimension:1] build]];
* </code>
* This will send an event hit type with the specified parameters
* and a custom dimension parameter.
* <br>
* If you want to send a parameter with all hits, set it on GAITracker directly.
* <code>
* [t set:kGAIScreenName value:@"Home"];
* [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
* action:@"PlusOne"
* target:@"SOME_URL"] build]];
* [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
* action:@"Share"
* target:@"SOME_POST"] build]];
* [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
* action:@"HangOut"
* target:@"SOME_CIRCLE"]
* build]];
* </code>
* You can override a value set on the tracker by adding it to the dictionary.
* <code>
* [t set:kGAIScreenName value:@"Home"];
* [t send:...];
* [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click"
* action:@"popup"
* label:nil
* value:nil]
* set:@"popup title" forKey:kGAIScreenName] build]];
* </code>
* The values set via [GAIDictionaryBuilder set] or
* [GAIDictionaryBuilder setAll] will override any existing values in the
* GAIDictionaryBuilder object (i.e. initialized by
* [GAIDictionaryBuilder createXYZ]). e.g.
* <code>
* GAIDictionaryBuilder *m =
* GAIDictionaryBuilder createTimingWithCategory:@"category"
* interval:@0
* name:@"name"
* label:nil];
* [t send:[m.set:@"10" forKey:kGAITimingVar] build];
* [t send:[m.set:@"20" forKey:kGAITimingVar] build];
* </code>
*/
@interface GAIDictionaryBuilder : NSObject
- (GAIDictionaryBuilder *)set:(NSString *)value
forKey:(NSString *)key;
/*!
* Copies all the name-value pairs from params into this object, ignoring any
* keys that are not NSString and any values that are neither NSString or
* NSNull.
*/
- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params;
/*!
* Returns the value for the input parameter paramName, or nil if paramName
* is not present.
*/
- (NSString *)get:(NSString *)paramName;
/*!
* Return an NSMutableDictionary object with all the parameters set in this
*/
- (NSMutableDictionary *)build;
/*!
* Parses and translates utm campaign parameters to analytics campaign param
* and returns them as a map.
*
* @param params url containing utm campaign parameters.
*
* Valid campaign parameters are:
* <ul>
* <li>utm_id</li>
* <li>utm_campaign</li>
* <li>utm_content</li>
* <li>utm_medium</li>
* <li>utm_source</li>
* <li>utm_term</li>
* <li>dclid</li>
* <li>gclid</li>
* <li>gmob_t</li>
* </ul>
* <p>
* Example:
* http://my.site.com/index.html?utm_campaign=wow&utm_source=source
* utm_campaign=wow&utm_source=source.
* <p>
* For more information on auto-tagging, see
* http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590
* <p>
* For more information on manual tagging, see
* http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518
*/
- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString;
/*!
Returns a GAIDictionaryBuilder object with parameters specific to an appview
hit.
Note that using this method will not set the screen name for followon hits. To
do that you need to call set:kGAIDescription value:<screenName> on the
GAITracker instance.
*/
+ (GAIDictionaryBuilder *)createAppView;
/*!
Returns a GAIDictionaryBuilder object with parameters specific to an event hit.
*/
+ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category
action:(NSString *)action
label:(NSString *)label
value:(NSNumber *)value;
/*!
Returns a GAIDictionaryBuilder object with parameters specific to an exception
hit.
*/
+ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description
withFatal:(NSNumber *)fatal;
/*!
Returns a GAIDictionaryBuilder object with parameters specific to an item hit.
*/
+ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId
name:(NSString *)name
sku:(NSString *)sku
category:(NSString *)category
price:(NSNumber *)price
quantity:(NSNumber *)quantity
currencyCode:(NSString *)currencyCode;
/*!
Returns a GAIDictionaryBuilder object with parameters specific to a social hit.
*/
+ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network
action:(NSString *)action
target:(NSString *)target;
/*!
Returns a GAIDictionaryBuilder object with parameters specific to a timing hit.
*/
+ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category
interval:(NSNumber *)intervalMillis
name:(NSString *)name
label:(NSString *)label;
/*!
Returns a GAIDictionaryBuilder object with parameters specific to a transaction
hit.
*/
+ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId
affiliation:(NSString *)affiliation
revenue:(NSNumber *)revenue
tax:(NSNumber *)tax
shipping:(NSNumber *)shipping
currencyCode:(NSString *)currencyCode;
@end

View file

@ -1,123 +0,0 @@
/*!
@header GAIFields.h
@abstract Google Analytics iOS SDK Hit Format Header
@copyright Copyright 2013 Google Inc. All rights reserved.
*/
#import <Foundation/Foundation.h>
/*!
These fields can be used for the wire format parameter names required by
the |GAITracker| get, set and send methods as well as the set methods in the
|GAIDictionaryBuilder| class.
*/
extern NSString *const kGAIUseSecure;
extern NSString *const kGAIHitType;
extern NSString *const kGAITrackingId;
extern NSString *const kGAIClientId;
extern NSString *const kGAIAnonymizeIp;
extern NSString *const kGAISessionControl;
extern NSString *const kGAIScreenResolution;
extern NSString *const kGAIViewportSize;
extern NSString *const kGAIEncoding;
extern NSString *const kGAIScreenColors;
extern NSString *const kGAILanguage;
extern NSString *const kGAIJavaEnabled;
extern NSString *const kGAIFlashVersion;
extern NSString *const kGAINonInteraction;
extern NSString *const kGAIReferrer;
extern NSString *const kGAILocation;
extern NSString *const kGAIHostname;
extern NSString *const kGAIPage;
extern NSString *const kGAIDescription; // synonym for kGAIScreenName
extern NSString *const kGAIScreenName; // synonym for kGAIDescription
extern NSString *const kGAITitle;
extern NSString *const kGAIAppName;
extern NSString *const kGAIAppVersion;
extern NSString *const kGAIAppId;
extern NSString *const kGAIAppInstallerId;
extern NSString *const kGAIEventCategory;
extern NSString *const kGAIEventAction;
extern NSString *const kGAIEventLabel;
extern NSString *const kGAIEventValue;
extern NSString *const kGAISocialNetwork;
extern NSString *const kGAISocialAction;
extern NSString *const kGAISocialTarget;
extern NSString *const kGAITransactionId;
extern NSString *const kGAITransactionAffiliation;
extern NSString *const kGAITransactionRevenue;
extern NSString *const kGAITransactionShipping;
extern NSString *const kGAITransactionTax;
extern NSString *const kGAICurrencyCode;
extern NSString *const kGAIItemPrice;
extern NSString *const kGAIItemQuantity;
extern NSString *const kGAIItemSku;
extern NSString *const kGAIItemName;
extern NSString *const kGAIItemCategory;
extern NSString *const kGAICampaignSource;
extern NSString *const kGAICampaignMedium;
extern NSString *const kGAICampaignName;
extern NSString *const kGAICampaignKeyword;
extern NSString *const kGAICampaignContent;
extern NSString *const kGAICampaignId;
extern NSString *const kGAITimingCategory;
extern NSString *const kGAITimingVar;
extern NSString *const kGAITimingValue;
extern NSString *const kGAITimingLabel;
extern NSString *const kGAIExDescription;
extern NSString *const kGAIExFatal;
extern NSString *const kGAISampleRate;
// hit types
extern NSString *const kGAIAppView;
extern NSString *const kGAIEvent;
extern NSString *const kGAISocial;
extern NSString *const kGAITransaction;
extern NSString *const kGAIItem;
extern NSString *const kGAIException;
extern NSString *const kGAITiming;
/*!
This class provides several fields and methods useful as wire format parameter
names. The methods are used for wire format parameter names that are indexed.
*/
@interface GAIFields : NSObject
/*!
Generates the correct parameter name for a content group with an index.
@param index the index of the content group.
@return an NSString representing the content group parameter for the index.
*/
+ (NSString *)contentGroupForIndex:(NSUInteger)index;
/*!
Generates the correct parameter name for a custon dimension with an index.
@param index the index of the custom dimension.
@return an NSString representing the custom dimension parameter for the index.
*/
+ (NSString *)customDimensionForIndex:(NSUInteger)index;
/*!
Generates the correct parameter name for a custom metric with an index.
@param index the index of the custom metric.
@return an NSString representing the custom metric parameter for the index.
*/
+ (NSString *)customMetricForIndex:(NSUInteger)index;
@end

View file

@ -1,49 +0,0 @@
/*!
@header GAILogger.h
@abstract Google Analytics iOS SDK Source
@copyright Copyright 2011 Google Inc. All rights reserved.
*/
#import <Foundation/Foundation.h>
typedef NS_ENUM(NSUInteger, GAILogLevel) {
kGAILogLevelNone = 0,
kGAILogLevelError = 1,
kGAILogLevelWarning = 2,
kGAILogLevelInfo = 3,
kGAILogLevelVerbose = 4
};
/*!
Protocol to be used for logging debug and informational messages from the SDK.
Implementations of this protocol can be provided to the |GAI| class,
to be used as the logger by the SDK. See the |logger| property in GAI.h.
*/
@protocol GAILogger<NSObject>
@required
/*!
Only messages of |logLevel| and below are logged.
*/
@property (nonatomic, assign) GAILogLevel logLevel;
/*!
Logs message with log level |kGAILogLevelVerbose|.
*/
- (void)verbose:(NSString *)message;
/*!
Logs message with log level |kGAILogLevelInfo|.
*/
- (void)info:(NSString *)message;
/*!
Logs message with log level |kGAILogLevelWarning|.
*/
- (void)warning:(NSString *)message;
/*!
Logs message with log level |kGAILogLevelError|.
*/
- (void)error:(NSString *)message;
@end

View file

@ -1,34 +0,0 @@
/*!
@header GAITrackedViewController.h
@abstract Google Analytics for iOS Tracked View Controller Header
@version 2.0
@copyright Copyright 2012 Google Inc. All rights reserved.
*/
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@protocol GAITracker;
/*!
Extends UIViewController to generate Google Analytics appview calls
whenever the view appears; this is done by overriding the `viewDidAppear:`
method. The screen name must be set for any tracking calls to be made.
By default, this will use [GAI defaultTracker] for tracking calls, but one can
override this by setting the tracker property.
*/
@interface GAITrackedViewController : UIViewController
/*!
The tracker on which view tracking calls are be made, or `nil`, in which case
[GAI defaultTracker] will be used.
*/
@property(nonatomic, assign) id<GAITracker> tracker;
/*!
The screen name, for purposes of Google Analytics tracking. If this is `nil`,
no tracking calls will be made.
*/
@property(nonatomic, copy) NSString *screenName;
@end

View file

@ -1,53 +0,0 @@
/*!
@header GAITracker.h
@abstract Google Analytics iOS SDK Tracker Header
@version 3.0
@copyright Copyright 2013 Google Inc. All rights reserved.
*/
#import <Foundation/Foundation.h>
/*!
Google Analytics tracking interface. Obtain instances of this interface from
[GAI trackerWithTrackingId:] to track screens, events, transactions, timing,
and exceptions. The implementation of this interface is thread-safe, and no
calls are expected to block or take a long time. All network and disk activity
will take place in the background.
*/
@protocol GAITracker<NSObject>
/*!
Name of this tracker.
*/
@property(nonatomic, readonly) NSString *name;
/*!
Set a tracking parameter.
@param parameterName The parameter name.
@param value The value to set for the parameter. If this is nil, the
value for the parameter will be cleared.
*/
- (void)set:(NSString *)parameterName
value:(NSString *)value;
/*!
Get a tracking parameter.
@param parameterName The parameter name.
@returns The parameter value, or nil if no value for the given parameter is
set.
*/
- (NSString *)get:(NSString *)parameterName;
/*!
Queue tracking information with the given parameter values.
@param parameters A map from parameter names to parameter values which will be
set just for this piece of tracking information, or nil for none.
*/
- (void)send:(NSDictionary *)parameters;
@end

View file

@ -1,75 +0,0 @@
Google Analytics iOS SDK version 3.01
Copyright 2009 - 2013 Google, Inc. All rights reserved.
================================================================================
DESCRIPTION:
This SDK provides developers with the capability to use Google Analytics
to track iOS application usage.
The SDK is packaged as a set of header files and a static library. Get started
by adding the header files from the Library subdirectory (GAI.h,
GAIDictionaryBuilder.h, GAIFields.h, GAILogger.h, GAITrackedViewController.h
and GAITracker.h) and libGoogleAnalyticsV3(?).a to your XCode project. You must
also include the CoreData framework in your project.
To use a version of the library with debug symbols intact, link against
libGoogleAnalytics_debug.a instead of libGoogleAnalyticsServices.a. This may be
useful if you experience exceptions or crashes originating in the SDK.
See the Examples/CuteAnimals application for an illustration of how to use
automatic screen tracking, event tracking, and uncaught exception tracking.
You will need a Google Analytics tracking ID to track application usage with the
SDK. It is recommended to create an account for each set of applications that
are to be tracked together, and to use that account's tracking ID in each
application. To create a new tracking ID, go to your admin panel in Google
Analytics and select "New Account". Under "What would you like to track?",
choose "App" and complete the remainder of the form. When you are finished,
click "Get Tracking ID". The tracking ID will be of the form "UA-" followed by a
sequence of numbers and dashes.
You must indicate to your users, either in the app itself or in your terms of
service, that you reserve the right to anonymously track and report a user's
activity inside of your app.
Implementation Details:
Tracking information is stored in an SQLite database and dispatched to the
Google Analytics servers in a manner set by the developer: periodically at an
interval determined by the developer, immediately when tracking calls are made,
or manually. A battery efficient strategy may be to initiate a dispatch when the
application needs to access the network. Tracking information is dispatched
using HTTP or HTTPS requests to a Google Analytics server.
================================================================================
BUILD REQUIREMENTS:
Mac OS X 10.6 or later.
XCode with iOS SDK 5.0 or later.
================================================================================
RUNTIME REQUIREMENTS:
iOS 5.0 or later.
Your app must link the following frameworks:
CoreData.framework
SystemConfiguration.framework
================================================================================
PACKAGING LIST:
Library/ (contains header and library files to compile and link with)
GAI.h
GAIDictionaryBuilder.h
GAIFields.h
GAILogger.h
GAITrackedViewController.h
GAITracker.h
libGoogleAnalytics.a
libGoogleAnalytics_debug.a
Examples/ (contains an example tracked application)
Documentation/ (contains documentation)
================================================================================

View file

@ -1,90 +0,0 @@
Google Tag Manager SDK for iOS Change Log
--------------------------------------------
Version: 3.01 (September, 2013)
--------------------------------------------
* Fixed link error when targeting iOS 7.0
--------------------------------------------
Version: 3.0 (August 16, 2013)
--------------------------------------------
* Added support for AdWords Conversion Tracking Tag, AdWords Remarketing Tag,
and Custom Image Tag.
* Added Advertising Enabled Macro, Application ID Macro, and ID for
Advertising Macro.
* Pushing a link to the data layer as "gtm.url" will now cache the
Click Referrer for AdWords Tags.
* Updated cuteAnimals sample app to demonstrate how to use Function Call Macro
and Function Call Tag.
--------------------------------------------
Version: 3.0b1 (July 26, 2013)
--------------------------------------------
* libGoogleAnalyticsServices.a replaces libTagManager.a in the
downloaded SDK. libGoogleAnalyticsServices.a includes all functions
in libTagManager.a plus version 3 of the Google Analytics SDK.
Note that an application can't include both libGoogleAnalyticsServices.a
and the old libGoogleAnalytics.a or libTagManager.a file.
An application that wants to use GTM and also do analytics tracking should
either update their GA calls to use version 3 of the SDK, or replace GA
calls with data layer push calls and add appropriate rules to their
container to fire Universal Analytics hits.
* Added Tag support in SDK. There are 2 types of tags currently supported:
Universal Analytics (beta) tag and Custom Function Tag.
* Added DataLayer support to hold generic information about the application.
An app can obtain the DataLayer object by calling TagManager::dataLayer.
* Added 2 new macros: data layer variable macro and custom event macro.
* Added LogLevel support into Logger. This allows adjusting the threshold of
what gets logged without having to write a new logger.
* Added preview exit link support to allow exiting preview mode of a container
without killing the app.
* Fixed a bug that prevented developers from using both GTM and open-sourced
proto buffer library.
* Modified the cuteAnimals example to show how to instrument an application
by pushing events to the data layer. A sample container is provided that
uses the pushed events to fire Google Universal Analytics tag.
--------------------------------------------
Version: 1.0b3 (June 26, 2013)
--------------------------------------------
* TagManager::openContainer no longer allows opening multiple containers with
the same container ID.
* ContainerOpener no longer has the two methods
openNonDefaultContainerWithId:tagManager:timeout:notifier and
openFreshContainerWithId:tagManager:timeout:notifier:.
Instead, there are now two openContainer methods:
openContainerWithId:tagManager:openType:timeout: and
openContainerWithId:tagManager:openType:timeout:notifier.
The first returns a TAGContainerFuture, while the other takes a notifier.
Both of these methods take a parameter specifying how the container should
be opened (kTAGPreferNonDefault or kTAGPreferFresh). This should reduce
confusion as to how TAGContainerFutures and notifiers interact.
These two new methods can be called more than once with the same
container ID; if the container is already open, it'll be returned (via the
future or notifier).
* In container preview mode, containers that are already open will be
auto-updated (was just updating the container on the next open).
--------------------------------------------
Version: 1.0b2 (June 3, 2013)
--------------------------------------------
* Initial beta release.
--------------------------------------------
Version: 1.0b1
--------------------------------------------
* Unreleased internal version.

View file

@ -1,24 +0,0 @@
//
// AppDelegate.h
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
@class RootViewController;
@class NavController;
@class TAGManager;
@class TAGContainer;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property(nonatomic, retain) UIWindow *window;
@property(nonatomic, retain) NavController *navController;
@property(nonatomic, retain) RootViewController *viewController;
@property(nonatomic, retain) NSDictionary *images;
@property(nonatomic, retain) TAGManager *tagManager;
@property(nonatomic, retain) TAGContainer *container;
@end

View file

@ -1,135 +0,0 @@
//
// AppDelegate.m
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "AppDelegate.h"
#import "CustomMacroHandler.h"
#import "CustomTagHandler.h"
#import "NavController.h"
#import "RootViewController.h"
#import "TAGContainer.h"
#import "TAGContainerOpener.h"
#import "TAGLogger.h"
#import "TAGManager.h"
@interface AppDelegate ()
- (NSDictionary *)loadImages;
@end
@implementation AppDelegate
@synthesize window = _window;
@synthesize navController = _navController;
@synthesize viewController = _viewController;
@synthesize images = _images;
@synthesize tagManager = _tagManager;
@synthesize container = _container;
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.tagManager = [TAGManager instance];
// Modify the log level of the logger to print out not only
// warning and error messages, but also verbose, debug, info messages.
[self.tagManager.logger setLogLevel:kTAGLoggerLogLevelVerbose];
// Following provides ability to support preview from Tag Manager.
// You need to make these calls before opening a container to make
// preview works.
NSURL *url = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
if (url != nil) {
[self.tagManager previewWithUrl:url];
}
// Open a container.
id<TAGContainerFuture> future =
[TAGContainerOpener openContainerWithId:@"GTM-XXXX"
tagManager:self.tagManager
openType:kTAGOpenTypePreferNonDefault
timeout:nil];
self.images = [self loadImages];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.container = [future get];
// Register two custom function call macros to the container.
[self.container registerFunctionCallMacroHandler:[[CustomMacroHandler alloc] init]
forMacro:@"increment"];
[self.container registerFunctionCallMacroHandler:[[CustomMacroHandler alloc] init]
forMacro:@"mod"];
// Register a custom function call tag to the container.
[self.container registerFunctionCallTagHandler:[[CustomTagHandler alloc] init]
forTag:@"custom_tag"];
self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController"
bundle:nil];
self.navController = [[NavController alloc] initWithRootViewController:self.viewController];
self.navController.delegate = self.navController;
self.viewController.navController = self.navController;
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if ([self.tagManager previewWithUrl:url]) {
return YES;
}
// Code to handle other urls.
return NO;
}
- (NSDictionary *)loadImages {
NSArray *contents = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg"
inDirectory:nil];
if (!contents) {
NSLog(@"Failed to load directory contents");
return nil;
}
NSMutableDictionary *images = [NSMutableDictionary dictionaryWithCapacity:0];
for (NSString *file in contents) {
NSArray *components = [[file lastPathComponent] componentsSeparatedByString:@"-"];
if (components.count == 0) {
NSLog(@"Filename doesn't contain dash: %@", file);
continue;
}
UIImage *image = [UIImage imageWithContentsOfFile:file];
if (!image) {
NSLog(@"Failed to load file: %@", file);
continue;
}
NSString *prefix = [components objectAtIndex:0];
NSMutableArray *categoryImages = [images objectForKey:prefix];
if (!categoryImages) {
categoryImages = [NSMutableArray arrayWithCapacity:0];
[images setObject:categoryImages
forKey:prefix];
}
[categoryImages addObject:image];
}
for (NSString *cat in [images allKeys]) {
NSArray *array = [images objectForKey:cat];
NSLog(@"Category %@: %u image(s).", cat, array.count);
}
return images;
}
@end

View file

@ -1,22 +0,0 @@
//
// CategoryViewController.h
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "NavController.h"
@interface CategoryViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>
@property(nonatomic, retain) NSString *category;
@property(nonatomic, retain) NavController *navController;
@property(nonatomic, retain) IBOutlet UITableView *tableView;
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle
category:(NSString *)category;
@end

View file

@ -1,130 +0,0 @@
//
// CategoryViewController.m
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
//
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "AppDelegate.h"
#import "CategoryViewController.h"
#import "ImageViewController.h"
#import "TAGContainer.h"
#import "TAGDataLayer.h"
#import "TAGManager.h"
#import "Utils.h"
@interface CategoryViewController ()
@property(nonatomic, retain) NSMutableArray *items;
@property(nonatomic, assign) AppDelegate *delegate;
@end
@implementation CategoryViewController
@synthesize category = _category;
@synthesize navController = _navController;
@synthesize tableView = _tableView;
@synthesize items = _items;
@synthesize delegate = _delegate;
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle
category:(NSString *)category {
self = [super initWithNibName:nibName
bundle:nibBundle];
if (self) {
self.category = category;
self.delegate = [UIApplication sharedApplication].delegate;
NSString *adjective = [self.delegate.container stringForKey:@"Adjective"];
self.title = [NSString stringWithFormat:@"%@ %@s", adjective, category];
}
return self;
}
// Override
- (void)viewDidLoad {
[super viewDidLoad];
self.items = [self.delegate.images objectForKey:self.category];
// Put the category_name into the data layer for future use.
[self.delegate.tagManager.dataLayer pushValue:self.category
forKey:@"category_name"];
}
// Override
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[Utils pushOpenScreenEventWithScreenName:@"CategoryViewScreen"];
}
// Override
- (void)viewWillDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[Utils pushCloseScreenEventWithScreenName:@"CategoryViewScreen"];
}
// Override
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
if ([[UIDevice currentDevice] userInterfaceIdiom] ==
UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
#pragma mark UITableViewDelegate methods
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
if (indexPath.row < 0 || indexPath.row >= self.items.count) {
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
return;
}
NSString *title = [NSString stringWithFormat:@"%@ %d", self.category, indexPath.row];
UIImage *image = [self.items objectAtIndex:indexPath.row];
ImageViewController *imageViewController =
[[ImageViewController alloc] initWithNibName:nil
bundle:nil
title:title
image:image];
[imageViewController.view addSubview:imageViewController.imageView];
[self.navController pushViewController:imageViewController animated:YES];
}
#pragma mark UITableViewDataSource methods
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return self.items.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row < 0 || indexPath.row >= self.items.count) {
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
return nil;
}
static NSString *CellId = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellId];
}
cell.textLabel.text = [NSString stringWithFormat:@"%@ %d", self.category, indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:14];
UIImage *image = [self.items objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d x %d",
(int)image.size.width, (int)image.size.height];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
return cell;
}
@end

View file

@ -1,167 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1296</int>
<string key="IBDocument.SystemVersion">11D50b</string>
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
<string key="IBDocument.AppKitVersion">1138.32</string>
<string key="IBDocument.HIToolboxVersion">568.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">1181</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUIView</string>
<string>IBUITableView</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="IBProxyObject" id="841351856">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBProxyObject" id="606714003">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
<object class="IBUIView" id="766721923">
<nil key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="IBUITableView" id="481613891">
<reference key="NSNextResponder" ref="766721923"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{768, 1004}</string>
<reference key="NSSuperview" ref="766721923"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<bool key="IBUIClipsSubviews">YES</bool>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
<bool key="IBUIAlwaysBounceVertical">YES</bool>
<int key="IBUISeparatorStyle">1</int>
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
<float key="IBUIRowHeight">44</float>
<float key="IBUISectionHeaderHeight">22</float>
<float key="IBUISectionFooterHeight">22</float>
</object>
</array>
<string key="NSFrame">{{0, 20}, {768, 1004}}</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
<int key="IBUIStatusBarStyle">2</int>
</object>
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="766721923"/>
</object>
<int key="connectionID">3</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">tableView</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="481613891"/>
</object>
<int key="connectionID">8</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="481613891"/>
<reference key="destination" ref="841351856"/>
</object>
<int key="connectionID">9</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="481613891"/>
<reference key="destination" ref="841351856"/>
</object>
<int key="connectionID">10</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="841351856"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="606714003"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="766721923"/>
<array class="NSMutableArray" key="children">
<reference ref="481613891"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">4</int>
<reference key="object" ref="481613891"/>
<reference key="parent" ref="766721923"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.CustomClassName">CategoryViewController</string>
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="-2.CustomClassName">UIResponder</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">10</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
<real value="1296" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<string key="IBCocoaTouchPluginVersion">1181</string>
</data>
</archive>

View file

@ -1,193 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1536</int>
<string key="IBDocument.SystemVersion">12C2034</string>
<string key="IBDocument.InterfaceBuilderVersion">2844</string>
<string key="IBDocument.AppKitVersion">1187.34</string>
<string key="IBDocument.HIToolboxVersion">625.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="NS.object.0">1930</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBProxyObject</string>
<string>IBUITableView</string>
<string>IBUIView</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="IBProxyObject" id="372490531">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBProxyObject" id="843779117">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
<object class="IBUIView" id="774585933">
<reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="IBUITableView" id="183585393">
<reference key="NSNextResponder" ref="774585933"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{320, 460}</string>
<reference key="NSSuperview" ref="774585933"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
<bool key="IBUIClipsSubviews">YES</bool>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
<bool key="IBUIAlwaysBounceVertical">YES</bool>
<int key="IBUISeparatorStyle">1</int>
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
<float key="IBUIRowHeight">44</float>
<float key="IBUISectionHeaderHeight">22</float>
<float key="IBUISectionFooterHeight">22</float>
</object>
</array>
<string key="NSFrame">{{0, 20}, {320, 460}}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="183585393"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC43NQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="774585933"/>
</object>
<int key="connectionID">7</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">tableView</string>
<reference key="source" ref="372490531"/>
<reference key="destination" ref="183585393"/>
</object>
<int key="connectionID">11</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="183585393"/>
<reference key="destination" ref="372490531"/>
</object>
<int key="connectionID">12</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="183585393"/>
<reference key="destination" ref="372490531"/>
</object>
<int key="connectionID">13</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="372490531"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="843779117"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">6</int>
<reference key="object" ref="774585933"/>
<array class="NSMutableArray" key="children">
<reference ref="183585393"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">8</int>
<reference key="object" ref="183585393"/>
<reference key="parent" ref="774585933"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.CustomClassName">CategoryViewController</string>
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="-2.CustomClassName">UIResponder</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">29</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">CategoryViewController</string>
<string key="superclassName">UIViewController</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">tableView</string>
<string key="NS.object.0">UITableView</string>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<string key="NS.key.0">tableView</string>
<object class="IBToOneOutletInfo" key="NS.object.0">
<string key="name">tableView</string>
<string key="candidateClassName">UITableView</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/CategoryViewController.h</string>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
<real value="1536" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<string key="IBCocoaTouchPluginVersion">1930</string>
</data>
</archive>

View file

@ -1,14 +0,0 @@
//
// CustomMacroHandler.h
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#import "TAGContainer.h"
@interface CustomMacroHandler : NSObject <TAGFunctionCallMacroHandler>
@property(nonatomic) NSUInteger numOfCalls;
@end

View file

@ -1,34 +0,0 @@
//
// CustomMacroHandler.m
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "CustomMacroHandler.h"
@implementation CustomMacroHandler
- (id)valueForMacro:(NSString *)macroName
parameters:(NSDictionary *)parameters {
if ([macroName isEqual:@"increment"]) {
self.numOfCalls++;
return [NSString stringWithFormat:@"%d", self.numOfCalls];
} else if ([macroName isEqual:@"mod"]) {
NSString *value1 = parameters[@"key1"];
NSString *value2 = parameters[@"key2"];
return [NSNumber numberWithInt:([value1 intValue] % [value2 intValue])];
} else {
NSString *message =
[NSString stringWithFormat:@"Custom macro name: %@ is not supported", macroName];
@throw [NSException exceptionWithName:@"IllegalArgumentException"
reason:message
userInfo:nil];
}
}
@end

View file

@ -1,12 +0,0 @@
//
// CustomTagHandler.h
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#import "TAGContainer.h"
@interface CustomTagHandler : NSObject <TAGFunctionCallTagHandler>
@end

View file

@ -1,21 +0,0 @@
//
// CustomTagHandler.m
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "CustomTagHandler.h"
@implementation CustomTagHandler
- (void)execute:(NSString *)tagName parameters:(NSDictionary *)parameters {
NSLog(@"Custom function call tag :%@ is fired", tagName);
// Other code firing this custom tag.
}
@end

View file

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>com.google.tagmanager.example.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.companyname.appname</string>
<key>CFBundleURLSchemes</key>
<array>
<string>tagmanager.c.com.google.tagmanager.example.cuteAnimals</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

View file

@ -1,10 +0,0 @@
#import <Availability.h>
#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif

View file

@ -1,449 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6EE7153E1F0B003CAC38 /* UIKit.framework */; };
113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6EE9153E1F0B003CAC38 /* Foundation.framework */; };
113B6F10153E1F99003CAC38 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F03153E1F99003CAC38 /* AppDelegate.m */; };
113B6F11153E1F99003CAC38 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F04153E1F99003CAC38 /* main.m */; };
113B6F12153E1F99003CAC38 /* NavController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F06153E1F99003CAC38 /* NavController.m */; };
113B6F13153E1F99003CAC38 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F08153E1F99003CAC38 /* RootViewController.m */; };
113B6F14153E1F99003CAC38 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F09153E1F99003CAC38 /* RootViewController.xib */; };
113B6F15153E1F99003CAC38 /* CategoryViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */; };
113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */; };
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6F2A153E208D003CAC38 /* CoreData.framework */; };
115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115686551593CE6A00A5D031 /* SystemConfiguration.framework */; };
11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1C1561834700949704 /* CategoryViewController.m */; };
11FCCC201561834700949704 /* ImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1E1561834700949704 /* ImageViewController.m */; };
11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC22156189A600949704 /* Bunny-1.jpg */; };
11FCCC35156189A600949704 /* Bunny-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC23156189A600949704 /* Bunny-2.jpg */; };
11FCCC36156189A600949704 /* Bunny-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC24156189A600949704 /* Bunny-3.jpg */; };
11FCCC37156189A600949704 /* Cat-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC25156189A600949704 /* Cat-1.jpg */; };
11FCCC38156189A600949704 /* Cat-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC26156189A600949704 /* Cat-2.jpg */; };
11FCCC39156189A600949704 /* Cat-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC27156189A600949704 /* Cat-3.jpg */; };
11FCCC3A156189A600949704 /* Cat-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC28156189A600949704 /* Cat-4.jpg */; };
11FCCC3B156189A600949704 /* Lion-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC29156189A600949704 /* Lion-1.jpg */; };
11FCCC3C156189A600949704 /* Lion-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2A156189A600949704 /* Lion-2.jpg */; };
11FCCC3D156189A600949704 /* Lion-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2B156189A600949704 /* Lion-3.jpg */; };
11FCCC3E156189A600949704 /* Lion-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2C156189A600949704 /* Lion-4.jpg */; };
11FCCC3F156189A600949704 /* Monkey-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2D156189A600949704 /* Monkey-1.jpg */; };
11FCCC40156189A600949704 /* Monkey-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2E156189A600949704 /* Monkey-2.jpg */; };
11FCCC41156189A600949704 /* Monkey-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2F156189A600949704 /* Monkey-3.jpg */; };
11FCCC42156189A600949704 /* Monkey-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC30156189A600949704 /* Monkey-4.jpg */; };
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC31156189A600949704 /* Monkey-5.jpg */; };
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC32156189A600949704 /* Tiger-1.jpg */; };
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC33156189A600949704 /* Tiger-2.jpg */; };
47CD7CE717BAA2B1008840A0 /* CustomTagHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CD7CE617BAA2B1008840A0 /* CustomTagHandler.m */; };
47CD7CED17BAA447008840A0 /* CustomMacroHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CD7CEC17BAA447008840A0 /* CustomMacroHandler.m */; };
47CD7CF117BACB30008840A0 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47CD7CF017BACB30008840A0 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
47EC965217A19FDD00D685C9 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 47EC965117A19FDD00D685C9 /* Utils.m */; };
47EC965417A1C9EB00D685C9 /* GTM-XXXX in Resources */ = {isa = PBXBuildFile; fileRef = 47EC965317A1C9EB00D685C9 /* GTM-XXXX */; };
47EC965A17A1CCDE00D685C9 /* Container.png in Resources */ = {isa = PBXBuildFile; fileRef = 47EC965917A1CCDE00D685C9 /* Container.png */; };
88679A8C17A1841C00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88679A8B17A1841C00F476D5 /* libGoogleAnalyticsServices.a */; };
F4FE3F5617555573000A691A /* GTM-XXXX.plist in Resources */ = {isa = PBXBuildFile; fileRef = F4FE3F5517555573000A691A /* GTM-XXXX.plist */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CuteAnimals.app; sourceTree = BUILT_PRODUCTS_DIR; };
113B6EE7153E1F0B003CAC38 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
113B6EE9153E1F0B003CAC38 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CuteAnimals-Info.plist"; sourceTree = "<group>"; };
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CuteAnimals-Prefix.pch"; sourceTree = "<group>"; };
113B6F02153E1F99003CAC38 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
113B6F03153E1F99003CAC38 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
113B6F04153E1F99003CAC38 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };
113B6F05153E1F99003CAC38 /* NavController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavController.h; sourceTree = SOURCE_ROOT; };
113B6F06153E1F99003CAC38 /* NavController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NavController.m; sourceTree = SOURCE_ROOT; };
113B6F07153E1F99003CAC38 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = SOURCE_ROOT; };
113B6F08153E1F99003CAC38 /* RootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = SOURCE_ROOT; };
113B6F09153E1F99003CAC38 /* RootViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RootViewController.xib; sourceTree = SOURCE_ROOT; };
113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPad.xib; sourceTree = SOURCE_ROOT; };
113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPhone.xib; sourceTree = SOURCE_ROOT; };
113B6F2A153E208D003CAC38 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
115686551593CE6A00A5D031 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
11FCCC1B1561834700949704 /* CategoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CategoryViewController.h; sourceTree = SOURCE_ROOT; };
11FCCC1C1561834700949704 /* CategoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CategoryViewController.m; sourceTree = SOURCE_ROOT; };
11FCCC1D1561834700949704 /* ImageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageViewController.h; sourceTree = SOURCE_ROOT; };
11FCCC1E1561834700949704 /* ImageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageViewController.m; sourceTree = SOURCE_ROOT; };
11FCCC22156189A600949704 /* Bunny-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-1.jpg"; path = "Images/Bunny-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC23156189A600949704 /* Bunny-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-2.jpg"; path = "Images/Bunny-2.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC24156189A600949704 /* Bunny-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-3.jpg"; path = "Images/Bunny-3.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC25156189A600949704 /* Cat-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-1.jpg"; path = "Images/Cat-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC26156189A600949704 /* Cat-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-2.jpg"; path = "Images/Cat-2.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC27156189A600949704 /* Cat-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-3.jpg"; path = "Images/Cat-3.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC28156189A600949704 /* Cat-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-4.jpg"; path = "Images/Cat-4.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC29156189A600949704 /* Lion-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-1.jpg"; path = "Images/Lion-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2A156189A600949704 /* Lion-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-2.jpg"; path = "Images/Lion-2.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2B156189A600949704 /* Lion-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-3.jpg"; path = "Images/Lion-3.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2C156189A600949704 /* Lion-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-4.jpg"; path = "Images/Lion-4.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2D156189A600949704 /* Monkey-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-1.jpg"; path = "Images/Monkey-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2E156189A600949704 /* Monkey-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-2.jpg"; path = "Images/Monkey-2.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC2F156189A600949704 /* Monkey-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-3.jpg"; path = "Images/Monkey-3.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC30156189A600949704 /* Monkey-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-4.jpg"; path = "Images/Monkey-4.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC31156189A600949704 /* Monkey-5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-5.jpg"; path = "Images/Monkey-5.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC32156189A600949704 /* Tiger-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-1.jpg"; path = "Images/Tiger-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC33156189A600949704 /* Tiger-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-2.jpg"; path = "Images/Tiger-2.jpg"; sourceTree = SOURCE_ROOT; };
47CD7CE517BAA2B1008840A0 /* CustomTagHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTagHandler.h; sourceTree = SOURCE_ROOT; };
47CD7CE617BAA2B1008840A0 /* CustomTagHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTagHandler.m; sourceTree = SOURCE_ROOT; };
47CD7CEB17BAA447008840A0 /* CustomMacroHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomMacroHandler.h; sourceTree = SOURCE_ROOT; };
47CD7CEC17BAA447008840A0 /* CustomMacroHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomMacroHandler.m; sourceTree = SOURCE_ROOT; };
47CD7CF017BACB30008840A0 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
47EC964F17A19FC900D685C9 /* TAGDataLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGDataLayer.h; sourceTree = "<group>"; };
47EC965017A19FDD00D685C9 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utils.h; sourceTree = SOURCE_ROOT; };
47EC965117A19FDD00D685C9 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utils.m; sourceTree = SOURCE_ROOT; };
47EC965317A1C9EB00D685C9 /* GTM-XXXX */ = {isa = PBXFileReference; lastKnownFileType = file; path = "GTM-XXXX"; sourceTree = SOURCE_ROOT; };
47EC965917A1CCDE00D685C9 /* Container.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Container.png; path = Images/Container.png; sourceTree = SOURCE_ROOT; };
88679A8B17A1841C00F476D5 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = ../../libGoogleAnalyticsServices.a; sourceTree = "<group>"; };
F41DE61E171DB8A500960CB7 /* TAGContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGContainer.h; sourceTree = "<group>"; };
F41DE620171DB8A500960CB7 /* TAGManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGManager.h; sourceTree = "<group>"; };
F431344E174E8F96003C1079 /* TAGContainerOpener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGContainerOpener.h; sourceTree = "<group>"; };
F431344F174E8F96003C1079 /* TAGLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGLogger.h; sourceTree = "<group>"; };
F4FE3F5517555573000A691A /* GTM-XXXX.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GTM-XXXX.plist"; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
113B6EE0153E1F0B003CAC38 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
47CD7CF117BACB30008840A0 /* AdSupport.framework in Frameworks */,
115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */,
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */,
113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */,
113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */,
88679A8C17A1841C00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
113B6ED8153E1F0B003CAC38 = {
isa = PBXGroup;
children = (
113B6EED153E1F0B003CAC38 /* CuteAnimals */,
F41DE61B171DB8A500960CB7 /* TagManager SDK */,
113B6EE6153E1F0B003CAC38 /* Frameworks */,
113B6EE4153E1F0B003CAC38 /* Products */,
);
sourceTree = "<group>";
};
113B6EE4153E1F0B003CAC38 /* Products */ = {
isa = PBXGroup;
children = (
113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */,
);
name = Products;
sourceTree = "<group>";
};
113B6EE6153E1F0B003CAC38 /* Frameworks */ = {
isa = PBXGroup;
children = (
47CD7CF017BACB30008840A0 /* AdSupport.framework */,
115686551593CE6A00A5D031 /* SystemConfiguration.framework */,
113B6F2A153E208D003CAC38 /* CoreData.framework */,
113B6EE7153E1F0B003CAC38 /* UIKit.framework */,
113B6EE9153E1F0B003CAC38 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
113B6EED153E1F0B003CAC38 /* CuteAnimals */ = {
isa = PBXGroup;
children = (
113B6F02153E1F99003CAC38 /* AppDelegate.h */,
113B6F03153E1F99003CAC38 /* AppDelegate.m */,
11FCCC1B1561834700949704 /* CategoryViewController.h */,
11FCCC1C1561834700949704 /* CategoryViewController.m */,
113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */,
113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */,
47CD7CEB17BAA447008840A0 /* CustomMacroHandler.h */,
47CD7CEC17BAA447008840A0 /* CustomMacroHandler.m */,
47CD7CE517BAA2B1008840A0 /* CustomTagHandler.h */,
47CD7CE617BAA2B1008840A0 /* CustomTagHandler.m */,
11FCCC1D1561834700949704 /* ImageViewController.h */,
11FCCC1E1561834700949704 /* ImageViewController.m */,
113B6F04153E1F99003CAC38 /* main.m */,
113B6F05153E1F99003CAC38 /* NavController.h */,
113B6F06153E1F99003CAC38 /* NavController.m */,
113B6F07153E1F99003CAC38 /* RootViewController.h */,
113B6F08153E1F99003CAC38 /* RootViewController.m */,
113B6F09153E1F99003CAC38 /* RootViewController.xib */,
113B6EEE153E1F0B003CAC38 /* Supporting Files */,
47EC965017A19FDD00D685C9 /* Utils.h */,
47EC965117A19FDD00D685C9 /* Utils.m */,
);
name = CuteAnimals;
path = .;
sourceTree = "<group>";
};
113B6EEE153E1F0B003CAC38 /* Supporting Files */ = {
isa = PBXGroup;
children = (
11FCCC211561899800949704 /* Images */,
113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */,
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */,
47EC965317A1C9EB00D685C9 /* GTM-XXXX */,
F4FE3F5517555573000A691A /* GTM-XXXX.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
11FCCC211561899800949704 /* Images */ = {
isa = PBXGroup;
children = (
47EC965917A1CCDE00D685C9 /* Container.png */,
11FCCC22156189A600949704 /* Bunny-1.jpg */,
11FCCC23156189A600949704 /* Bunny-2.jpg */,
11FCCC24156189A600949704 /* Bunny-3.jpg */,
11FCCC25156189A600949704 /* Cat-1.jpg */,
11FCCC26156189A600949704 /* Cat-2.jpg */,
11FCCC27156189A600949704 /* Cat-3.jpg */,
11FCCC28156189A600949704 /* Cat-4.jpg */,
11FCCC29156189A600949704 /* Lion-1.jpg */,
11FCCC2A156189A600949704 /* Lion-2.jpg */,
11FCCC2B156189A600949704 /* Lion-3.jpg */,
11FCCC2C156189A600949704 /* Lion-4.jpg */,
11FCCC2D156189A600949704 /* Monkey-1.jpg */,
11FCCC2E156189A600949704 /* Monkey-2.jpg */,
11FCCC2F156189A600949704 /* Monkey-3.jpg */,
11FCCC30156189A600949704 /* Monkey-4.jpg */,
11FCCC31156189A600949704 /* Monkey-5.jpg */,
11FCCC32156189A600949704 /* Tiger-1.jpg */,
11FCCC33156189A600949704 /* Tiger-2.jpg */,
);
name = Images;
sourceTree = "<group>";
};
F41DE61B171DB8A500960CB7 /* TagManager SDK */ = {
isa = PBXGroup;
children = (
88679A8B17A1841C00F476D5 /* libGoogleAnalyticsServices.a */,
47EC964F17A19FC900D685C9 /* TAGDataLayer.h */,
F41DE61E171DB8A500960CB7 /* TAGContainer.h */,
F431344E174E8F96003C1079 /* TAGContainerOpener.h */,
F431344F174E8F96003C1079 /* TAGLogger.h */,
F41DE620171DB8A500960CB7 /* TAGManager.h */,
);
name = "TagManager SDK";
path = ../../Library;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
113B6EE2153E1F0B003CAC38 /* CuteAnimals */ = {
isa = PBXNativeTarget;
buildConfigurationList = 113B6EFB153E1F0B003CAC38 /* Build configuration list for PBXNativeTarget "CuteAnimals" */;
buildPhases = (
113B6EDF153E1F0B003CAC38 /* Sources */,
113B6EE0153E1F0B003CAC38 /* Frameworks */,
113B6EE1153E1F0B003CAC38 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = CuteAnimals;
productName = CuteAnimals;
productReference = 113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
113B6EDA153E1F0B003CAC38 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0460;
};
buildConfigurationList = 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 113B6ED8153E1F0B003CAC38;
productRefGroup = 113B6EE4153E1F0B003CAC38 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
113B6EE2153E1F0B003CAC38 /* CuteAnimals */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
113B6EE1153E1F0B003CAC38 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
113B6F14153E1F99003CAC38 /* RootViewController.xib in Resources */,
113B6F15153E1F99003CAC38 /* CategoryViewController_iPad.xib in Resources */,
113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */,
11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */,
11FCCC35156189A600949704 /* Bunny-2.jpg in Resources */,
11FCCC36156189A600949704 /* Bunny-3.jpg in Resources */,
11FCCC37156189A600949704 /* Cat-1.jpg in Resources */,
11FCCC38156189A600949704 /* Cat-2.jpg in Resources */,
11FCCC39156189A600949704 /* Cat-3.jpg in Resources */,
11FCCC3A156189A600949704 /* Cat-4.jpg in Resources */,
11FCCC3B156189A600949704 /* Lion-1.jpg in Resources */,
11FCCC3C156189A600949704 /* Lion-2.jpg in Resources */,
11FCCC3D156189A600949704 /* Lion-3.jpg in Resources */,
11FCCC3E156189A600949704 /* Lion-4.jpg in Resources */,
11FCCC3F156189A600949704 /* Monkey-1.jpg in Resources */,
11FCCC40156189A600949704 /* Monkey-2.jpg in Resources */,
11FCCC41156189A600949704 /* Monkey-3.jpg in Resources */,
11FCCC42156189A600949704 /* Monkey-4.jpg in Resources */,
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */,
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */,
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */,
F4FE3F5617555573000A691A /* GTM-XXXX.plist in Resources */,
47EC965417A1C9EB00D685C9 /* GTM-XXXX in Resources */,
47EC965A17A1CCDE00D685C9 /* Container.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
113B6EDF153E1F0B003CAC38 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
113B6F10153E1F99003CAC38 /* AppDelegate.m in Sources */,
113B6F11153E1F99003CAC38 /* main.m in Sources */,
113B6F12153E1F99003CAC38 /* NavController.m in Sources */,
113B6F13153E1F99003CAC38 /* RootViewController.m in Sources */,
11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */,
11FCCC201561834700949704 /* ImageViewController.m in Sources */,
47EC965217A19FDD00D685C9 /* Utils.m in Sources */,
47CD7CE717BAA2B1008840A0 /* CustomTagHandler.m in Sources */,
47CD7CED17BAA447008840A0 /* CustomMacroHandler.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
113B6EF9153E1F0B003CAC38 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
113B6EFA153E1F0B003CAC38 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
113B6EFC153E1F0B003CAC38 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
INFOPLIST_FILE = "CuteAnimals-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 5.0;
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../Library\"",
"\"$(SRCROOT)/../../..\"",
);
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Debug;
};
113B6EFD153E1F0B003CAC38 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
INFOPLIST_FILE = "CuteAnimals-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 5.0;
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../Library\"",
"\"$(SRCROOT)/../../..\"",
);
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */ = {
isa = XCConfigurationList;
buildConfigurations = (
113B6EF9153E1F0B003CAC38 /* Debug */,
113B6EFA153E1F0B003CAC38 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
113B6EFB153E1F0B003CAC38 /* Build configuration list for PBXNativeTarget "CuteAnimals" */ = {
isa = XCConfigurationList;
buildConfigurations = (
113B6EFC153E1F0B003CAC38 /* Debug */,
113B6EFD153E1F0B003CAC38 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 113B6EDA153E1F0B003CAC38 /* Project object */;
}

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Adjective</key>
<string>Cute</string>
<key>Title</key>
<string>Cute Animals</string>
</dict>
</plist>

View file

@ -1,22 +0,0 @@
//
// ImageViewController.h
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "NavController.h"
@interface ImageViewController : UIViewController
@property(nonatomic, retain) NavController *navController;
@property(nonatomic, retain) UIImageView *imageView;
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
title:(NSString *)title
image:(UIImage *)image;
@end

View file

@ -1,71 +0,0 @@
//
// ImageViewController.m
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "ImageViewController.h"
#import "AppDelegate.h"
#import "TAGDataLayer.h"
#import "TAGManager.h"
#import "Utils.h"
@interface ImageViewController ()
@property(nonatomic, assign) AppDelegate *delegate;
@end
@implementation ImageViewController
@synthesize imageView = _imageView;
@synthesize navController = _navController;
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
title:(NSString *)title
image:(UIImage *)image {
self = [super initWithNibName:nibNameOrNil
bundle:nibBundleOrNil];
if (self) {
self.title = title;
self.imageView = [[UIImageView alloc] initWithImage:image];
self.imageView.userInteractionEnabled = YES;
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
}
return self;
}
// Override
- (void)viewDidLoad {
[super viewDidLoad];
// Put the image_name into the data layer for future use.
[self.delegate.tagManager.dataLayer pushValue:self.title
forKey:@"category_name"];
}
// Override
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[Utils pushOpenScreenEventWithScreenName:@"ImageViewScreen"];
}
// Override
- (void)viewWillDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[Utils pushCloseScreenEventWithScreenName:@"ImageViewScreen"];
}
// Override
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
@end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Some files were not shown because too many files have changed in this diff Show more