diff --git a/Crashlytics.framework/Crashlytics b/Crashlytics.framework/Crashlytics deleted file mode 120000 index 7074275..0000000 --- a/Crashlytics.framework/Crashlytics +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Crashlytics \ No newline at end of file diff --git a/Crashlytics.framework/Headers b/Crashlytics.framework/Headers deleted file mode 120000 index a177d2a..0000000 --- a/Crashlytics.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/Crashlytics.framework/Resources b/Crashlytics.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/Crashlytics.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/Crashlytics.framework/Versions/A/Crashlytics b/Crashlytics.framework/Versions/A/Crashlytics deleted file mode 100644 index 42dd403..0000000 Binary files a/Crashlytics.framework/Versions/A/Crashlytics and /dev/null differ diff --git a/Crashlytics.framework/Versions/A/Headers/Crashlytics.h b/Crashlytics.framework/Versions/A/Headers/Crashlytics.h deleted file mode 100644 index 59addef..0000000 --- a/Crashlytics.framework/Versions/A/Headers/Crashlytics.h +++ /dev/null @@ -1,217 +0,0 @@ -// -// Crashlytics.h -// Crashlytics -// -// Copyright 2013 Crashlytics, Inc. All rights reserved. -// - -#import - -/** - * - * 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 *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 *)delegate; -+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject *)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 -@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 -@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 )crash; - -@end diff --git a/Crashlytics.framework/Versions/A/Resources/Info.plist b/Crashlytics.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 29e5e3b..0000000 --- a/Crashlytics.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - Crashlytics - CFBundleIdentifier - com.crashlytics.ios - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Crashlytics - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.1.1 - CFBundleSupportedPlatforms - - iPhoneOS - - CFBundleVersion - 7 - DTPlatformName - iphoneos - MinimumOSVersion - 4.0 - - diff --git a/Crashlytics.framework/Versions/Current b/Crashlytics.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/Crashlytics.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/Crashlytics.framework/run b/Crashlytics.framework/run deleted file mode 100755 index 72089fa..0000000 Binary files a/Crashlytics.framework/run and /dev/null differ diff --git a/Default-568h@2x.png b/Default-568h@2x.png deleted file mode 100644 index 58a9043..0000000 Binary files a/Default-568h@2x.png and /dev/null differ diff --git a/Default-Landscape@2x~ipad.png b/Default-Landscape@2x~ipad.png deleted file mode 100644 index c083c1d..0000000 Binary files a/Default-Landscape@2x~ipad.png and /dev/null differ diff --git a/Default-Landscape~ipad.png b/Default-Landscape~ipad.png deleted file mode 100644 index a08c1f1..0000000 Binary files a/Default-Landscape~ipad.png and /dev/null differ diff --git a/Default-Portrait@2x~ipad.png b/Default-Portrait@2x~ipad.png deleted file mode 100644 index a896fb4..0000000 Binary files a/Default-Portrait@2x~ipad.png and /dev/null differ diff --git a/Default-Portrait~ipad.png b/Default-Portrait~ipad.png deleted file mode 100644 index d7a1df4..0000000 Binary files a/Default-Portrait~ipad.png and /dev/null differ diff --git a/Default.png b/Default.png deleted file mode 100644 index 10115fd..0000000 Binary files a/Default.png and /dev/null differ diff --git a/Default@2x.png b/Default@2x.png deleted file mode 100644 index 4306b22..0000000 Binary files a/Default@2x.png and /dev/null differ diff --git a/Entitlements.entitlements b/Entitlements.entitlements deleted file mode 100644 index ce373e1..0000000 --- a/Entitlements.entitlements +++ /dev/null @@ -1,8 +0,0 @@ - - - - - get-task-allow - - - diff --git a/Frameworks/ASIHTTPRequest b/Frameworks/ASIHTTPRequest deleted file mode 160000 index 3ed0b3c..0000000 --- a/Frameworks/ASIHTTPRequest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3ed0b3c945937bb8e4b96c08bd3382d7839fb86e diff --git a/Frameworks/Crashlytics.framework/Crashlytics b/Frameworks/Crashlytics.framework/Crashlytics deleted file mode 120000 index 7074275..0000000 --- a/Frameworks/Crashlytics.framework/Crashlytics +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Crashlytics \ No newline at end of file diff --git a/Frameworks/Crashlytics.framework/Headers b/Frameworks/Crashlytics.framework/Headers deleted file mode 120000 index a177d2a..0000000 --- a/Frameworks/Crashlytics.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/Frameworks/Crashlytics.framework/Resources b/Frameworks/Crashlytics.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/Frameworks/Crashlytics.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/Frameworks/Crashlytics.framework/Versions/A/Crashlytics b/Frameworks/Crashlytics.framework/Versions/A/Crashlytics deleted file mode 100644 index b59b18d..0000000 Binary files a/Frameworks/Crashlytics.framework/Versions/A/Crashlytics and /dev/null differ diff --git a/Frameworks/Crashlytics.framework/Versions/A/Headers/Crashlytics.h b/Frameworks/Crashlytics.framework/Versions/A/Headers/Crashlytics.h deleted file mode 100644 index 59addef..0000000 --- a/Frameworks/Crashlytics.framework/Versions/A/Headers/Crashlytics.h +++ /dev/null @@ -1,217 +0,0 @@ -// -// Crashlytics.h -// Crashlytics -// -// Copyright 2013 Crashlytics, Inc. All rights reserved. -// - -#import - -/** - * - * 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 *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 *)delegate; -+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject *)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 -@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 -@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 )crash; - -@end diff --git a/Frameworks/Crashlytics.framework/Versions/A/Resources/Info.plist b/Frameworks/Crashlytics.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 4f309f1..0000000 --- a/Frameworks/Crashlytics.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - Crashlytics - CFBundleIdentifier - com.crashlytics.ios - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Crashlytics - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.1.3 - CFBundleSupportedPlatforms - - iPhoneOS - - CFBundleVersion - 13 - DTPlatformName - iphoneos - MinimumOSVersion - 4.0 - - diff --git a/Frameworks/Crashlytics.framework/Versions/Current b/Frameworks/Crashlytics.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/Frameworks/Crashlytics.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/Frameworks/Crashlytics.framework/run b/Frameworks/Crashlytics.framework/run deleted file mode 100755 index bf7d3a2..0000000 Binary files a/Frameworks/Crashlytics.framework/run and /dev/null differ diff --git a/Frameworks/DLCImagePickerController b/Frameworks/DLCImagePickerController deleted file mode 160000 index 525240f..0000000 --- a/Frameworks/DLCImagePickerController +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 525240f6ed44b79e1d7ae8cd473ac6523aca9630 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Changelog.txt b/Frameworks/Google Analytics SDK/GoogleAnalytics/Changelog.txt deleted file mode 100644 index bb5924f..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Changelog.txt +++ /dev/null @@ -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 and - send 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. diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.h deleted file mode 100644 index 88d3cda..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// AppDelegate.h -// CuteAnimals -// -// Copyright 2012 Google, Inc. All rights reserved. -// - -#import - -#import "GAI.h" - -@class RootViewController; -@class NavController; - -@interface AppDelegate : UIResponder - -@property(nonatomic, strong) UIWindow *window; -@property(nonatomic, strong) NavController *navController; -@property(nonatomic, strong) RootViewController *viewController; -@property(nonatomic, strong) id tracker; -@property(nonatomic, strong) NSDictionary *images; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.m deleted file mode 100644 index 43741de..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.h deleted file mode 100644 index 7e76b63..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// ViewController.h -// CuteAnimals -// -// Copyright 2012 Google, Inc. All rights reserved. -// - -#import - -#import "NavController.h" - -@interface CategoryViewController : - GAITrackedViewController - -@property(nonatomic, strong) NSString *category; -@property(nonatomic, strong) IBOutlet UITableView *tableView; - -- (id)initWithNibName:(NSString *)nibName - bundle:(NSBundle *)nibBundle - category:(NSString *)category; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.m deleted file mode 100644 index 608cd97..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPad.xib b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPad.xib deleted file mode 100644 index f5f5876..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPad.xib +++ /dev/null @@ -1,167 +0,0 @@ - - - - 1296 - 11D50b - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBProxyObject - IBUIView - IBUITableView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - - 274 - - - - 274 - {768, 1004} - - _NS:9 - - 3 - MQA - - YES - IBIPadFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - {{0, 20}, {768, 1004}} - - 3 - MQA - - 2 - - - - 2 - - IBIPadFramework - - - - - - - view - - - - 3 - - - - tableView - - - - 8 - - - - dataSource - - - - 9 - - - - delegate - - - - 10 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - - - - - - 4 - - - - - - - CategoryViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 10 - - - 0 - IBIPadFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1181 - - diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPhone.xib b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPhone.xib deleted file mode 100644 index 7ac2420..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPhone.xib +++ /dev/null @@ -1,168 +0,0 @@ - - - - 1296 - 11D50b - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBProxyObject - IBUIView - IBUITableView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 274 - {320, 460} - - _NS:9 - - 3 - MQA - - YES - IBCocoaTouchFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - {{0, 20}, {320, 460}} - - - - 3 - MC43NQA - - 2 - - - NO - - IBCocoaTouchFramework - - - - - - - view - - - - 7 - - - - tableView - - - - 11 - - - - dataSource - - - - 12 - - - - delegate - - - - 13 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 6 - - - - - - - - 8 - - - - - - - CategoryViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 29 - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1181 - - diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Info.plist b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Info.plist deleted file mode 100644 index 75c0d14..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.google.analytics.example.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Prefix.pch b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Prefix.pch deleted file mode 100644 index 1c20531..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Prefix.pch +++ /dev/null @@ -1,10 +0,0 @@ -#import - -#ifndef __IPHONE_4_0 -#warning "This project uses features only available in iOS SDK 4.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj deleted file mode 100644 index 1973d24..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj +++ /dev/null @@ -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 = ""; }; - 113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CuteAnimals-Prefix.pch"; sourceTree = ""; }; - 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 = ""; }; - 11BC54031577E24500E7D657 /* GAITrackedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = ../../Library/GAITrackedViewController.h; sourceTree = ""; }; - 11BC54041577E24500E7D657 /* GAITracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = ../../Library/GAITracker.h; sourceTree = ""; }; - 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 = ""; }; - F707E732174D7550008123BF /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAIDictionaryBuilder.h; path = ../../Library/GAIDictionaryBuilder.h; sourceTree = ""; }; - F707E733174D7550008123BF /* GAIFields.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAIFields.h; path = ../../Library/GAIFields.h; sourceTree = ""; }; - F707E734174D7550008123BF /* GAILogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAILogger.h; path = ../../Library/GAILogger.h; sourceTree = ""; }; - 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 = ""; - }; - 113B6EE4153E1F0B003CAC38 /* Products */ = { - isa = PBXGroup; - children = ( - 113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */, - ); - name = Products; - sourceTree = ""; - }; - 113B6EE6153E1F0B003CAC38 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 115686551593CE6A00A5D031 /* SystemConfiguration.framework */, - 113B6F2A153E208D003CAC38 /* CoreData.framework */, - 113B6EE7153E1F0B003CAC38 /* UIKit.framework */, - 113B6EE9153E1F0B003CAC38 /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 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 = ""; - }; - 113B6EEE153E1F0B003CAC38 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - F7C47F20178B5B55003A7D0F /* Settings.bundle */, - 11FCCC211561899800949704 /* Images */, - 113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */, - 113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 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 = ""; - }; - 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 = ""; - }; -/* 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 */; -} diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.h deleted file mode 100644 index fe7d6f8..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// ImageViewController.h -// CuteAnimals -// -// Copyright 2012 Google, Inc. All rights reserved. -// - -#import - -#import "GAI.h" -#import "NavController.h" - -@interface ImageViewController : GAITrackedViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil - bundle:(NSBundle *)nibBundleOrNil - title:(NSString *)title - image:(UIImage *)image; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.m deleted file mode 100644 index b6d8e9a..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-1.jpg deleted file mode 100644 index bc737ba..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-2.jpg deleted file mode 100644 index 1f51132..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-3.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-3.jpg deleted file mode 100644 index 0bc89dd..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-3.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-1.jpg deleted file mode 100644 index a30d8ba..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-2.jpg deleted file mode 100644 index 8bbe219..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-3.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-3.jpg deleted file mode 100644 index eb6ffa6..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-3.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-4.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-4.jpg deleted file mode 100644 index 8bc2496..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-4.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-1.jpg deleted file mode 100644 index be042e4..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-2.jpg deleted file mode 100644 index 4f75994..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-3.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-3.jpg deleted file mode 100644 index 01d68c2..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-3.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-4.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-4.jpg deleted file mode 100644 index 4ccc3c0..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-4.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-1.jpg deleted file mode 100644 index bdb40ee..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-2.jpg deleted file mode 100644 index 169c000..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-3.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-3.jpg deleted file mode 100644 index 6435ba0..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-3.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-4.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-4.jpg deleted file mode 100644 index 8fb9ad6..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-4.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-5.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-5.jpg deleted file mode 100644 index 44e3ae0..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-5.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-1.jpg deleted file mode 100644 index 9d5e12e..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-2.jpg deleted file mode 100644 index 8469e10..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.h deleted file mode 100644 index 7011044..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// NavController.h -// CuteAnimals -// -// Copyright 2012 Google, Inc. All rights reserved. -// - -#import - -@interface NavController : - UINavigationController - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.m deleted file mode 100644 index 43c8d3a..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Readme.txt b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Readme.txt deleted file mode 100644 index c558408..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Readme.txt +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.h deleted file mode 100644 index 5b772a0..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// RootViewController.h -// CuteAnimals -// -// Copyright 2012 Google, Inc. All rights reserved. -// - -#import - -@interface RootViewController : - GAITrackedViewController - -@property(nonatomic, strong) IBOutlet UITableView *tableView; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.m deleted file mode 100644 index 255da5d..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.xib b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.xib deleted file mode 100644 index e9debf9..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.xib +++ /dev/null @@ -1,193 +0,0 @@ - - - - 1296 - 11D50b - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBProxyObject - IBUIView - IBUITableView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - - 292 - - - - 274 - {768, 1004} - - - _NS:9 - - 3 - MQA - - YES - IBIPadFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - {{0, 20}, {768, 1004}} - - - - 3 - MQA - - 2 - - - NO - - 2 - - IBIPadFramework - - - - - - - view - - - - 3 - - - - tableView - - - - 7 - - - - dataSource - - - - 5 - - - - delegate - - - - 6 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - - - - - - 4 - - - - - - - RootViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 7 - - - - - RootViewController - UIViewController - - tableView - UITableView - - - tableView - - tableView - UITableView - - - - IBProjectSource - ./Classes/RootViewController.h - - - - - 0 - IBIPadFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1181 - - diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/Root.plist b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/Root.plist deleted file mode 100644 index d845463..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/Root.plist +++ /dev/null @@ -1,21 +0,0 @@ - - - - - PreferenceSpecifiers - - - DefaultValue - - Key - allowTracking - Title - Allow analytics - Type - PSToggleSwitchSpecifier - - - StringsTable - Root - - diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/en.lproj/Root.strings b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/en.lproj/Root.strings deleted file mode 100644 index 8cd87b9..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/en.lproj/Root.strings and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/main.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/main.m deleted file mode 100644 index 400eab8..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/main.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// main.m -// CuteAnimals -// -// Copyright 2012 Google, Inc. All rights reserved. -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, - NSStringFromClass([AppDelegate class])); - } -} diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAI.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAI.h deleted file mode 100644 index d9e60e4..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAI.h +++ /dev/null @@ -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 -#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 defaultTracker; - -/*! - The GAILogger to use. - */ -@property(nonatomic, retain) id 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)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)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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIDictionaryBuilder.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIDictionaryBuilder.h deleted file mode 100644 index 24c5a95..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIDictionaryBuilder.h +++ /dev/null @@ -1,178 +0,0 @@ -/*! - @header GAIDictionaryBuilder.h - @abstract Google Analytics iOS SDK Hit Format Header - @copyright Copyright 2013 Google Inc. All rights reserved. - */ - -#import - -/*! - * Helper class to build a dictionary of hit parameters and values. - *
- * Examples: - * - * id t = // get a tracker. - * [t send:[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory" - * action:@"EventAction" - * label:nil - * value:nil] - * set:@"dimension1" forKey:[GAIFields CustomDimension:1] build]]; - * - * This will send an event hit type with the specified parameters - * and a custom dimension parameter. - *
- * If you want to send a parameter with all hits, set it on GAITracker directly. - * - * [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]]; - * - * You can override a value set on the tracker by adding it to the dictionary. - * - * [t set:kGAIScreenName value:@"Home"]; - * [t send:...]; - * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click" - * action:@"popup" - * label:nil - * value:nil] - * set:@"popup title" forKey:kGAIScreenName] build]]; - * - * 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. - * - * 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]; - * - */ -@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: - *
    - *
  • utm_id
  • - *
  • utm_campaign
  • - *
  • utm_content
  • - *
  • utm_medium
  • - *
  • utm_source
  • - *
  • utm_term
  • - *
  • dclid
  • - *
  • gclid
  • - *
  • gmob_t
  • - *
- *

- * Example: - * http://my.site.com/index.html?utm_campaign=wow&utm_source=source - * utm_campaign=wow&utm_source=source. - *

- * For more information on auto-tagging, see - * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590 - *

- * 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: 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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIFields.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIFields.h deleted file mode 100644 index 868baae..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIFields.h +++ /dev/null @@ -1,123 +0,0 @@ -/*! - @header GAIFields.h - @abstract Google Analytics iOS SDK Hit Format Header - @copyright Copyright 2013 Google Inc. All rights reserved. - */ - -#import - -/*! - 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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAILogger.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAILogger.h deleted file mode 100644 index 06291f2..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAILogger.h +++ /dev/null @@ -1,49 +0,0 @@ -/*! - @header GAILogger.h - @abstract Google Analytics iOS SDK Source - @copyright Copyright 2011 Google Inc. All rights reserved. - */ - -#import - -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 -@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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITrackedViewController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITrackedViewController.h deleted file mode 100644 index 5cbabdd..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITrackedViewController.h +++ /dev/null @@ -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 -#import - -@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 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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITracker.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITracker.h deleted file mode 100644 index 43b5e20..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITracker.h +++ /dev/null @@ -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 - -/*! - 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 - -/*! - 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 diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/libGoogleAnalytics_debug.a b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/libGoogleAnalytics_debug.a deleted file mode 100644 index 36773f2..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/libGoogleAnalytics_debug.a and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Readme.txt b/Frameworks/Google Analytics SDK/GoogleAnalytics/Readme.txt deleted file mode 100644 index bf1a825..0000000 --- a/Frameworks/Google Analytics SDK/GoogleAnalytics/Readme.txt +++ /dev/null @@ -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) - -================================================================================ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Changelog.txt b/Frameworks/Google Analytics SDK/GoogleTagManager/Changelog.txt deleted file mode 100644 index e4b4529..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Changelog.txt +++ /dev/null @@ -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. - diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.h deleted file mode 100644 index 909e219..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// AppDelegate.h -// CuteAnimals -// -// Copyright 2013 Google, Inc. All rights reserved. -// - -#import - -@class RootViewController; -@class NavController; -@class TAGManager; -@class TAGContainer; - -@interface AppDelegate : UIResponder - -@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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.m deleted file mode 100644 index 1efcbeb..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.m +++ /dev/null @@ -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 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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.h deleted file mode 100644 index 1b90fcc..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// CategoryViewController.h -// CuteAnimals -// -// Copyright 2013 Google, Inc. All rights reserved. -// - -#import - -#import "NavController.h" - -@interface CategoryViewController : UIViewController - -@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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.m deleted file mode 100644 index 3c1b839..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPad.xib b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPad.xib deleted file mode 100644 index f5f5876..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPad.xib +++ /dev/null @@ -1,167 +0,0 @@ - - - - 1296 - 11D50b - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBProxyObject - IBUIView - IBUITableView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - - 274 - - - - 274 - {768, 1004} - - _NS:9 - - 3 - MQA - - YES - IBIPadFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - {{0, 20}, {768, 1004}} - - 3 - MQA - - 2 - - - - 2 - - IBIPadFramework - - - - - - - view - - - - 3 - - - - tableView - - - - 8 - - - - dataSource - - - - 9 - - - - delegate - - - - 10 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - - - - - - 4 - - - - - - - CategoryViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 10 - - - 0 - IBIPadFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1181 - - diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPhone.xib b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPhone.xib deleted file mode 100644 index d9c51c6..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPhone.xib +++ /dev/null @@ -1,193 +0,0 @@ - - - - 1536 - 12C2034 - 2844 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1930 - - - IBProxyObject - IBUITableView - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 274 - {320, 460} - - - - _NS:9 - - 3 - MQA - - YES - IBCocoaTouchFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - {{0, 20}, {320, 460}} - - - - - 3 - MC43NQA - - 2 - - - NO - - IBCocoaTouchFramework - - - - - - - view - - - - 7 - - - - tableView - - - - 11 - - - - dataSource - - - - 12 - - - - delegate - - - - 13 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 6 - - - - - - - - 8 - - - - - - - CategoryViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 29 - - - - - CategoryViewController - UIViewController - - tableView - UITableView - - - tableView - - tableView - UITableView - - - - IBProjectSource - ./Classes/CategoryViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1930 - - diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.h deleted file mode 100644 index 7f45f8c..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// CustomMacroHandler.h -// CuteAnimals -// -// Copyright 2013 Google, Inc. All rights reserved. -// - -#import "TAGContainer.h" - -@interface CustomMacroHandler : NSObject - -@property(nonatomic) NSUInteger numOfCalls; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.m deleted file mode 100644 index e967430..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.h deleted file mode 100644 index 1ba3f67..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// CustomTagHandler.h -// CuteAnimals -// -// Copyright 2013 Google, Inc. All rights reserved. -// - -#import "TAGContainer.h" - -@interface CustomTagHandler : NSObject - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.m deleted file mode 100644 index 481ade2..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Info.plist b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Info.plist deleted file mode 100644 index 0cae901..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Info.plist +++ /dev/null @@ -1,56 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.google.tagmanager.example.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleURLTypes - - - CFBundleURLName - com.companyname.appname - CFBundleURLSchemes - - tagmanager.c.com.google.tagmanager.example.cuteAnimals - - - - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Prefix.pch b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Prefix.pch deleted file mode 100644 index 1c20531..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Prefix.pch +++ /dev/null @@ -1,10 +0,0 @@ -#import - -#ifndef __IPHONE_4_0 -#warning "This project uses features only available in iOS SDK 4.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj deleted file mode 100644 index f5745f6..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj +++ /dev/null @@ -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 = ""; }; - 113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CuteAnimals-Prefix.pch"; sourceTree = ""; }; - 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 = ""; }; - 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 = ""; }; - F41DE61E171DB8A500960CB7 /* TAGContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGContainer.h; sourceTree = ""; }; - F41DE620171DB8A500960CB7 /* TAGManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGManager.h; sourceTree = ""; }; - F431344E174E8F96003C1079 /* TAGContainerOpener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGContainerOpener.h; sourceTree = ""; }; - F431344F174E8F96003C1079 /* TAGLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGLogger.h; sourceTree = ""; }; - 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 = ""; - }; - 113B6EE4153E1F0B003CAC38 /* Products */ = { - isa = PBXGroup; - children = ( - 113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */, - ); - name = Products; - sourceTree = ""; - }; - 113B6EE6153E1F0B003CAC38 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 47CD7CF017BACB30008840A0 /* AdSupport.framework */, - 115686551593CE6A00A5D031 /* SystemConfiguration.framework */, - 113B6F2A153E208D003CAC38 /* CoreData.framework */, - 113B6EE7153E1F0B003CAC38 /* UIKit.framework */, - 113B6EE9153E1F0B003CAC38 /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 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 = ""; - }; - 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 = ""; - }; - 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 = ""; - }; - 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 = ""; - }; -/* 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 */; -} diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX deleted file mode 100644 index f236b3a..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX.plist b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX.plist deleted file mode 100644 index b450d8c..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Adjective - Cute - Title - Cute Animals - - diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.h deleted file mode 100644 index cee7fe6..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// ImageViewController.h -// CuteAnimals -// -// Copyright 2013 Google, Inc. All rights reserved. -// - -#import - -#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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.m deleted file mode 100644 index e34af30..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.m +++ /dev/null @@ -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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-1.jpg deleted file mode 100644 index bc737ba..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-2.jpg deleted file mode 100644 index 1f51132..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-3.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-3.jpg deleted file mode 100644 index 0bc89dd..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-3.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-1.jpg deleted file mode 100644 index a30d8ba..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-2.jpg deleted file mode 100644 index 8bbe219..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-3.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-3.jpg deleted file mode 100644 index eb6ffa6..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-3.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-4.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-4.jpg deleted file mode 100644 index 8bc2496..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-4.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Container.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Container.png deleted file mode 100644 index 77624f3..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Container.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/CustomTag.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/CustomTag.png deleted file mode 100644 index ac42856..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/CustomTag.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-1.jpg deleted file mode 100644 index be042e4..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-2.jpg deleted file mode 100644 index 4f75994..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-3.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-3.jpg deleted file mode 100644 index 01d68c2..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-3.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-4.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-4.jpg deleted file mode 100644 index 4ccc3c0..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-4.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-1.jpg deleted file mode 100644 index bdb40ee..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-2.jpg deleted file mode 100644 index 169c000..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-3.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-3.jpg deleted file mode 100644 index 6435ba0..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-3.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-4.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-4.jpg deleted file mode 100644 index 8fb9ad6..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-4.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-5.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-5.jpg deleted file mode 100644 index 44e3ae0..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-5.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/NumRefreshesMod5.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/NumRefreshesMod5.png deleted file mode 100644 index 0bf79e4..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/NumRefreshesMod5.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEvent.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEvent.png deleted file mode 100644 index a2f43bf..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEvent.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEventTag.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEventTag.png deleted file mode 100644 index abd1519..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEventTag.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenClosedTag.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenClosedTag.png deleted file mode 100644 index 8fc2a34..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenClosedTag.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenOpenTag.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenOpenTag.png deleted file mode 100644 index 1da15c0..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenOpenTag.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-1.jpg deleted file mode 100644 index 9d5e12e..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-1.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-2.jpg deleted file mode 100644 index 8469e10..0000000 Binary files a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-2.jpg and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.h deleted file mode 100644 index d3f1d06..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// NavController.h -// CuteAnimals -// -// Copyright 2013 Google, Inc. All rights reserved. -// - -#import - -@interface NavController : - UINavigationController - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.m deleted file mode 100644 index 3e09d1e..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// NavController.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 "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 diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/README b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/README deleted file mode 100644 index 0e222ac..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/README +++ /dev/null @@ -1,72 +0,0 @@ -To build this example: - - 1. Open CuteAnimals.xcodeproj in XCode. - 2. Select the desired platform from the scheme in the toolbar (or from the - menu "Product->Destination"). - 3. Run the sample by clicking "Run" in the toolbar (or selecting "Product/Run" - from the menu). - -This sample uses a container ID for a non-existent container: "GTM-XXXX". -There are two corresponding files: "GTM-XXXX" and "GTM-XXXX.plist" which -are used as default containers. - -GTM-XXXX.plist contains default key-value pairs. It is limited to representing -the key-value pairs representable in value collection macros and is ignored if -a GTM-XXXX container is present. - -GTM-XXXX is a full-featured default container. It contains the same default -key-value pairs as GTM-XXXX.plist plus the configuration of how to trigger -Universal Analytics tags and a custom function call tag. Here is a summary of -the container (more details can be seen in the snapshot at Images/Container.png) - 8 Macros: - * "app name": the pre-populated application name macro. - * "app version": the pre-populated app version macro. - * "Cute Animals IOS": a value collection macro containing key/value pairs - as GTM-XXXX.plist. - * "event": an event macro. - * "numRefreshes": a custom function call macro which records how many - times the "Refresh" button is clicked. - * "numRefreshesMod5": a custom function call macro whose value is equal - to "numRefreshes" mod 5. See images/NumRefreshesMod5.png for more - details. - * "screen name": a data layer macro whose data layer variable name - is "screenName". - * "true": the pre-populated constant string macro whose value is equal to - "true". - 5 Rules: - * "CustomTagFires": the value of the event macro is equal to 'custom_tag'. - * "CloseScreenEvent": the value of the event macro is equal to - 'closeScreen'. - * "OpenScreenEvent": the value of the event macro is equal to - 'openScreen'. - * "RefreshEvent": the value of the event macro is equal to 'refresh' and - the value of the numRefreshesMod5 macro is equal to 1. See - images/RefreshEvent.png for more details. - * "Always": the pre-populated rule which is always evaluated to true. - 4 Tags: - * "CustomTag": a custom function call tag with the firing rule: - CustomTagFires is true. See images/CustomTag.png for more details. - * "RefreshEvent": a Universal Analytics tag with the firing rule: - RefreshEvent is true. See Images/RefreshEventTag.png for more details. - * "ScreenClosed": a Universal Analytics tag with the firing rule: - CloseScreenEvent is true. See Images/ScreenClosedTag.png for more - details. - * "ScreenOpen": a Universal Analytics tag with the firing rule: - OpenScreenEvent is true. See Images/ScreenOpenTag.png for more - details. - -Although the app will run and use the values specified in the GTM-XXXX (or -GTM-XXXX.plist if you delete GTM-XXXX from your local machine), there's -no way to dynamically update those values, since this is a non-existent -container. - -To use real values, create a container in the Tag Manager UI and note the -resulting container ID: - - 1. Download the container from the Tag Manager UI and rename it to - GTM-1234 (where GTM-1234 is the container ID for the new container). - Put GTM-1234 into the same directory with GTM-XXXX.plist file. - 2. In AppDelegate.m, update the parameter for openContainerById with the - new container ID. - 3. Optional: delete GTM-XXXX and GTM-XXXX.plist files. - diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.h deleted file mode 100644 index 4453d49..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// RootViewController.h -// CuteAnimals -// -// Copyright 2013 Google, Inc. All rights reserved. -// - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -#import - -@interface RootViewController : - UIViewController - -@property(nonatomic, retain) NavController *navController; -@property(nonatomic, retain) IBOutlet UITableView *tableView; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.m deleted file mode 100644 index f8ae396..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.m +++ /dev/null @@ -1,140 +0,0 @@ -// -// RootViewController.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 "RootViewController.h" -#import "CategoryViewController.h" -#import "ImageViewController.h" -#import "TAGContainer.h" -#import "TAGDataLayer.h" -#import "TAGManager.h" -#import "Utils.h" - -@interface RootViewController () - -@property(nonatomic, retain) NSArray *items; -@property(nonatomic, assign) AppDelegate *delegate; - -@end - -@implementation RootViewController - -@synthesize tableView = _tableView; -@synthesize navController = _navController; -@synthesize items = _items; -@synthesize delegate = _delegate; - -- (id)initWithNibName:(NSString *)nibName - bundle:(NSBundle *)nibBundle { - self = [super initWithNibName:nibName - bundle:nibBundle]; - if (self) { - self.delegate = [UIApplication sharedApplication].delegate; - self.title = [self.delegate.container stringForKey:@"Title"]; - } - return self; -} - -- (void)refresh { - [self.delegate.container refresh]; - // Push a "refresh" event. Tags that match that event will fire. - [self.delegate.tagManager.dataLayer pushValue:@"refresh" forKey:@"event"]; - // Push the "custom tag" event to trigger firing a custom function call tag. - [self.delegate.tagManager.dataLayer pushValue:@"custom_tag" forKey:@"event"]; -} - -// Override -- (void)viewDidLoad { - [super viewDidLoad]; - self.navigationItem.rightBarButtonItem = - [[UIBarButtonItem alloc] initWithTitle:@"Refresh" - style:UIBarButtonItemStyleBordered - target:self - action:@selector(refresh)]; - self.items = - [[self.delegate.images allKeys] - sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; - [self.tableView reloadData]; -} - -// Override -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - [Utils pushOpenScreenEventWithScreenName:@"MainScreen"]; -} - -// Override -- (void)viewWillDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - [Utils pushCloseScreenEventWithScreenName:@"MainScreen"]; -} - -// Override -- (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 objectAtIndex:indexPath.row]; - NSString *nib = - ([[UIDevice currentDevice] userInterfaceIdiom] == - UIUserInterfaceIdiomPhone) ? - @"CategoryViewController_iPhone" : @"CategoryViewController_iPad"; - CategoryViewController *categoryController = - [[CategoryViewController alloc] initWithNibName:nib - bundle:nil - category:category]; - categoryController.navController = self.navController; - [self.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 objectAtIndex:indexPath.row]; - - static NSString *CellId = @"Cell"; - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId]; - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle - reuseIdentifier:CellId]; - } - - NSString *adjective = [self.delegate.container stringForKey:@"Adjective"]; - NSString *label = [NSString stringWithFormat:@"%@ %@ Pictures!", adjective, category]; - cell.textLabel.text = label; - cell.textLabel.font = [UIFont systemFontOfSize:14]; - NSUInteger imageCount = [(NSArray *)[self.delegate.images objectForKey:category] count]; - cell.detailTextLabel.text = [NSString stringWithFormat:@"%u image(s).", imageCount]; - cell.detailTextLabel.font = [UIFont systemFontOfSize:12]; - return cell; -} - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.xib b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.xib deleted file mode 100644 index e9debf9..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.xib +++ /dev/null @@ -1,193 +0,0 @@ - - - - 1296 - 11D50b - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1181 - - - IBProxyObject - IBUIView - IBUITableView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBIPadFramework - - - IBFirstResponder - IBIPadFramework - - - - 292 - - - - 274 - {768, 1004} - - - _NS:9 - - 3 - MQA - - YES - IBIPadFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - {{0, 20}, {768, 1004}} - - - - 3 - MQA - - 2 - - - NO - - 2 - - IBIPadFramework - - - - - - - view - - - - 3 - - - - tableView - - - - 7 - - - - dataSource - - - - 5 - - - - delegate - - - - 6 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - - - - - - 4 - - - - - - - RootViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 7 - - - - - RootViewController - UIViewController - - tableView - UITableView - - - tableView - - tableView - UITableView - - - - IBProjectSource - ./Classes/RootViewController.h - - - - - 0 - IBIPadFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - 1181 - - diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.h deleted file mode 100644 index d45e23a..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// Utils.h -// CuteAnimals -// -// Copyright 2013 Google, Inc. All rights reserved. -// - -#import - -@interface Utils : NSObject - -/** - * Push an "openScreen" event with the given screen name. Tags that - * match that event will fire. - */ -+ (void)pushOpenScreenEventWithScreenName:(NSString *)screenName; - -/** - * Push a "closeScreen" event with the given screen name. Tags that - * match that event will fire. - */ -+ (void)pushCloseScreenEventWithScreenName:(NSString *)screenName; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.m deleted file mode 100644 index f1b2306..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// Utils.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 "TAGDataLayer.h" -#import "TAGManager.h" -#import "Utils.h" - -@implementation Utils - -+ (void)pushOpenScreenEventWithScreenName:(NSString *)screenName { - AppDelegate *delegate = [UIApplication sharedApplication].delegate; - [delegate.tagManager.dataLayer push:@{@"event": @"openScreen", - @"screenName": screenName}]; -} - -+ (void)pushCloseScreenEventWithScreenName:(NSString *)screenName { - AppDelegate *delegate = [UIApplication sharedApplication].delegate; - [delegate.tagManager.dataLayer push:@{@"event": @"closeScreen", - @"screenName": screenName}]; -} - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/main.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/main.m deleted file mode 100644 index 6c23d78..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/main.m +++ /dev/null @@ -1,21 +0,0 @@ -// -// main.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 - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, - NSStringFromClass([AppDelegate class])); - } -} diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainer.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainer.h deleted file mode 100644 index d123389..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainer.h +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -/** @file */ - -#import - -@class TAGContainer; - -/** - * Refresh types for container callback. - */ -typedef enum { - /** Refresh from a saved container. */ - kTAGContainerCallbackRefreshTypeSaved, - - /** Refresh from the network. */ - kTAGContainerCallbackRefreshTypeNetwork, -} TAGContainerCallbackRefreshType; - -/** - * Ways in which a refresh can fail. - */ -typedef enum { - /** There is no saved container. */ - kTAGContainerCallbackRefreshFailureNoSavedContainer, - - /** An I/O error prevented refreshing the container. */ - kTAGContainerCallbackRefreshFailureIoError, - - /** No network is available. */ - kTAGContainerCallbackRefreshFailureNoNetwork, - - /** A network error has occurred. */ - kTAGContainerCallbackRefreshFailureNetworkError, - - /** An error on the server. */ - kTAGContainerCallbackRefreshFailureServerError, - - /** An error that cannot be categorized. */ - kTAGContainerCallbackRefreshFailureUnknownError -} TAGContainerCallbackRefreshFailure; - -/** - * A protocol implemented by the application to execute a custom tag. - */ -@protocol TAGFunctionCallTagHandler - /** - * Handler is given the tag name and a dictionary of named parameters. - * - * @param tagName The same name by which the handler was registered. It - * is provided as a convenience to allow a single handler to be registered - * for multiple function call tags. - * @param parameters The named parameters for the function call. The - * dictionary may contain NSString, NSNumber - * (double, int, or boolean), NSDictionary, or - * NSArray. - * @return The evaluated result, which can be an NSString or - * NSNumber. - */ -- (void)execute:(NSString *)tagName parameters:(NSDictionary *)parameters; - -@end - -/** - * A protocol implemented by the application to calculate the value of a - * function call macro. - */ -@protocol TAGFunctionCallMacroHandler -/** - * Returns an object which is the calculated value of the macro. - * Handler is given the macro name and a dictionary of named parameters. - * - * @param macroName The same name by which the handler was registered. It - * is provided as a convenience to allow a single handler to be registered - * for multiple function call macros. - * @param parameters The named parameters for the function call. The - * dictionary may contain NSString, NSNumber - * (double, int, or boolean), NSDictionary, or - * NSArray. - * @return The evaluated result, which can be an NSString or - * NSNumber. - */ -- (id)valueForMacro:(NSString *)macroName parameters:(NSDictionary *)parameters; - -@end - -/** - * A protocol that a client may implement to receive - * information when the contents of the container has been successfully - * loaded or failed to load. - * - * You may rely on the fact that - * TAGContainerCallback::containerRefreshBegin:refreshType: - * will be called for a given @ref TAGContainerCallbackRefreshType before its - * associated TAGContainerCallback::containerRefreshSuccess:refreshType: or - * TAGContainerCallback::containerRefreshFailure:failure:refreshType:, but - * shouldn't make any other assumptions about ordering. In particular, there - * may be two refreshes outstanding at once - * (both @ref kTAGContainerCallbackRefreshTypeSaved and - * @ref kTAGContainerCallbackRefreshTypeNetwork), or a - * @ref kTAGContainerCallbackRefreshTypeSaved refresh - * may occur before a @ref kTAGContainerCallbackRefreshTypeNetwork refresh. - */ -@protocol TAGContainerCallback - -/** - * Called before the refresh is about to begin. - * - * @param container The container being refreshed. - * @param refreshType The type of refresh which is starting. - */ -- (void)containerRefreshBegin:(TAGContainer *)container - refreshType:(TAGContainerCallbackRefreshType)refreshType; - -/** - * Called when a refresh has successfully completed for the given refresh type. - * - * @param container The container being refreshed. - * @param refreshType The type of refresh which completed successfully. - */ -- (void)containerRefreshSuccess:(TAGContainer *)container - refreshType:(TAGContainerCallbackRefreshType)refreshType; - -/** - * Called when a refresh has failed to complete for the given refresh type. - * - * @param container The container being refreshed. - * @param failure The reason for the refresh failure. - * @param refreshType The type of refresh which failed. - */ -- (void)containerRefreshFailure:(TAGContainer *)container - failure:(TAGContainerCallbackRefreshFailure)failure - refreshType:(TAGContainerCallbackRefreshType)refreshType; - -@end - -/** - * A class that provides access to container values. - * Container objects must be created via @ref TAGManager. - * Once a container is created, it can be queried for key values which - * may depend on rules established for the container. - * A container is automatically refreshed periodically (every 12 hours), but - * can also be manually refreshed with TAGContainer::refresh. - */ -@interface TAGContainer : NSObject - -/** - * The ID for this container. - */ -@property(readonly, nonatomic, copy) NSString *containerId; - -/** - * The last time (in milliseconds since midnight Jan 1, 1970 UTC) that this - * container was refreshed from the network. - */ -@property(atomic, readonly) double lastRefreshTime; - -// @cond -/** - * Containers should be instantiated through TAGManager or TAGContainerOpener. - */ -- (id)init __attribute__((unavailable)); -// @endcond - -/** - * Returns a BOOL representing the configuration value for the - * given key. If the container has no value for this key, NO will be returned. - * - * @param key The key to lookup for the configuration value. - */ -- (BOOL)booleanForKey:(NSString *)key; - -/** - * Returns a double representing the configuration value for the - * given key. If the container has no value for this key, 0.0 will be returned. - * - * @param key The key to lookup for the configuration value. - */ -- (double)doubleForKey:(NSString *)key; - -/** - * Returns an int64_t representing the configuration value for the - * given key. If the container has no value for this key, 0 will be returned. - * - * @param key The key to lookup for the configuration value. - */ -- (int64_t)int64ForKey:(NSString *)key; - -/** - * Returns an NSString to represent the configuration value for the - * given key. If the container has no value for this key, an empty string - * will be returned. - * - * @param key The key to lookup for the configuration value. - */ -- (NSString *)stringForKey:(NSString *)key; - -/** - * Requests that this container be refreshed from the network. - * This call is asynchronous, so the refresh may take place on another thread. - */ -- (void)refresh; - -/** - * Closes this container so that it will no longer be refreshed. - * After closing, don't make any other calls to the container. - */ -- (void)close; - -/** - * Returns whether this is a default container, or one refreshed from the - * server. - */ -- (BOOL)isDefault; - -/** - * Registers the given macro handler to handle a given function call macro. - * - * @param handler The handler for the macro. If the parameter is - * nil, the method unregisters any existing handler for that macro. - * @param macroName The name of the macro which is being registered. - */ -- (void)registerFunctionCallMacroHandler:(id)handler - forMacro:(NSString *)macroName; - -/** - * Given the name of a function call macro, returns the handler registered for - * the macro. - * - * @return The handler registered for the macro. - */ -- (id) - functionCallMacroHandlerForMacro:(NSString *)functionCallMacroName; - -/** - * Registers the given tag handler to handle a given function call tag. - * - * @param handler The handler for the tag. If the parameter is - * nil, the method unregisters any existing handler for that tag. - * @param tagName The name of the tag which is being registered. - */ -- (void)registerFunctionCallTagHandler:(id)handler - forTag:(NSString *)tagName; - -/** - * Given the name of a function call tag, returns the handler registered for - * the tag. - * - * @return The handler registered for the tag. - */ -- (id)functionCallTagHandlerForTag:(NSString *)functionCallTagName; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainerOpener.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainerOpener.h deleted file mode 100644 index 113efbe..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainerOpener.h +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -/** @file */ - -#import - -@class TAGContainer; -@class TAGManager; - -/** The choices of how to open a container. */ -typedef enum { - /** - * Specifies that opening a non-default container (saved or retreived from - * the network) is preferred, including stale containers (ones that - * haven't been recently refreshed from the server). - */ - kTAGOpenTypePreferNonDefault, - /** - * Specifies that opening a fresh version of the container (one that has been - * recently refreshed from the server) is preferred. - */ - kTAGOpenTypePreferFresh -} TAGOpenType; - -/** - * A class that implements this protocol waits for the container to be available and - * provides access to the container. - */ -@protocol TAGContainerFuture - -/** - * Waits for the container to be available and returns the requested container. - * This method will block until the container is available. The dispatch queue - * will continue to run while the call is blocked. - * - * @return The requested container. - * @see TAGContainerOpener::openContainerWithId:tagManager:openType:timeout: - */ -- (TAGContainer *)get; - -/** - * Returns whether the container is available. This container could be the - * default container. To check if it is the default container, use - * TAGContainer::isDefault. - * - * @return YES if the container is available. NO if TAGContainerFuture::get: - * will block and wait for the container to be available. - */ -- (BOOL)isDone; - -@end - -/** - * A class that implements this protocol will receive a notification when a - * container is available for use. Developers can pass an instance of a class that implements - * this protocol to - * TAGContainerOpener::openContainerWithId:tagManager:openType:timeout:notifier: - */ -@protocol TAGContainerOpenerNotifier - -/** - * Called when the container is available. - * - * @param container The requested container. - */ -- (void)containerAvailable:(TAGContainer *)container; - -@end - -/** - * A helper class for opening containers. - * - * This is a wrapper around TAGManager::openContainerById:callback: method for - * callers that provides support for timeouts. - * - * The following is a sample showing waiting up to 0.1 seconds for the container - * to be loaded before reverting to the default container: - * -
- *     NSTimeInterval timeout = 0.1;
- *     TagManager *tagManager = [TagManager instance];
- *     TAGContainerFuture *future =
- *         [TAGContainerOpener openContainerWithId:@"GTM-XXXX"
- *                                      tagManager:tagManager
- *                                        openType:kTAGOpenTypePreferNonDefault
- *                                         timeout:&timeout];
- *     TAGContainer *container = [future get];
- 
- * - * If the caller wants to be asynchronously notified when the container is - * available but wants to manually specify the timeout to 0.5 seconds, then the - * caller should subclass TAGContainerOpenerNotifier, make the call to - * TAGContainerOpener::openContainerWithId:tagManager:openType:timeout:notifier: - * with timeout set to 0.5, and add the implementation to - * TAGContainerOpenerNotifier::containerAvailable: for handling the container - * available notification. - */ -@interface TAGContainerOpener : NSObject - -// @cond -/** - * TAGContainerOpener should not be instantiated directly. Use - * openContainerWithId:tagManager:timeout:openType: - * or openContainerWithId:tagManager::timeout:openType:notifier:. - */ -- (id)init __attribute__((unavailable)); -// @endcond - -/** - * Waits up to timeout seconds for a container to be loaded - * (non default or fresh depending on the specified openType) - * and returns a TAGContainerFuture. - * - *

If the open type is kTAGOpenTypePreferNonDefault, a - * non-default (saved or retrieved from network) container is loaded and the - * TAGContainerFuture is unblocked as soon as one of the - * following happens: - *

    - *
  • a saved container is loaded. - *
  • if there is no saved container, a network container is loaded - * or a network error occurs. - *
  • the timer expires. - *
- * If a network error occurs or the timer expires, TAGContainerFuture::get - * may return a default container. - * - *

If the open type is kTAGOpenTypePreferFresh, a fresh (saved - * or retrieved from network) container is loaded and the TAGContainerFuture is - * unblocked as soon as one of the following happens: - *

    - *
  • a saved fresh container is loaded. - *
  • if there is no saved container or saved container is stale, a network - * container is loaded or a network error occurs. - *
  • the timer expires. - *
- * If a network error occurs or the timer expires, TAGContainerFuture::get - * may contain defaults or a stale saved container. - * - *

If you call one of the openContainer methods a second time with a - * given containerId, a TAGContainerFuture will be - * returned whose TAGContainerFuture::get will return the same container as - * the first call did. - * - * @param containerId The ID of the container to load. - * @param tagManager The TAGManager for getting the container. - * @param timeout The maximum number of seconds to wait to load the container - * from the saved store. If nil, TAGContainerOpener::defaultTimeout will be - * used. - * @param openType The choice of how to open the container. - * @return A TAGContainerFuture that will wait for up to timeout - * and return the container when it is available. - */ -+ (id) - openContainerWithId:(NSString *)containerId - tagManager:(TAGManager *)tagManager - openType:(TAGOpenType)openType - timeout:(NSTimeInterval *)timeout; - -/** - * Waits up to timeout seconds for a container to be loaded - * (non default or fresh depending on the specified openType) - * and calls a notifier when the container is available. - * - *

If the open type is kTAGOpenTypePreferNonDefault, a - * non-default (saved or retrieved from network) container is loaded and passed - * into the notifier. The notifier is called as soon as one of the following - * happens: - *

    - *
  • a saved container is loaded. - *
  • if there is no saved container, a network container is loaded - * or a network error occurs. - *
  • the timer expires. - *
- * If a network error occurs or the timer expires, the container passed into - * the notifier is a default container. - * - *

If the open type is kTAGOpenTypePreferFresh, a fresh (saved - * or retrieved from network) container is loaded and passed into the notifier. - * The notifier is called as soon as one of the following happens: - *

    - *
  • a saved fresh container is loaded. - *
  • if there is no saved container or saved container is stale, a network - * container is loaded or a network error occurs. - *
  • the timer expires. - *
- * If a network error occurs or the timer expires, the container passed into - * the notifier may contain defaults or a stale saved container. - * - *

If you call one of the openContainer methods a second time with a - * given containerId, the same container returned from the - * previous call will be passed into the notifier as soon as - * it's available. - * - * @param containerId The ID of the container to load. - * @param tagManager The TAGManager used for getting the container. - * @param openType The choice of how to open the container. - * @param timeout The maximum number of seconds to wait to load the container - * from the saved store. If nil, TAGContainerOpener::defaultTimeout will be - * used. - * @param notifier An optional notifier which will be called when the - * container is available. It will be called with the fresh container, if - * available and loaded before the timeout; otherwise it'll be called with - * a non-fresh container. Note that the notifier may be called from a - * different thread. - */ -+ (void) openContainerWithId:(NSString *)containerId - tagManager:(TAGManager *)tagManager - openType:(TAGOpenType)openType - timeout:(NSTimeInterval *)timeout - notifier:(id)notifier; - -/** - * Returns the default timeout for requesting the container. - * - * @return The default timeout in seconds. - */ -+ (NSTimeInterval)defaultTimeout; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGDataLayer.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGDataLayer.h deleted file mode 100644 index 50e8d30..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGDataLayer.h +++ /dev/null @@ -1,136 +0,0 @@ -#import - -/** - * Represents an object missing in an NSArray. If the data layer currently - * contains: -

- *   {
- *     myArray: [1, 2, 3]
- *   }
-
- * and you want to update the third element to 5, while leaving other elements - * alone, you'd use kTAGDataLayerNotPresent as the 1st and 2nd - * elements (if you were to use a NSNull object, - * the 1st and 2nd elements would be replaced). - *

- * So, after executing: -

- *  [dataLayer push:@{@"myArray",
- *      @[kTAGDataLayerObjectNotPresent, kTAGDataLayerObjectNotPresent, @5}];
-
- * then, the data layer will contain: -
- *   {
- *     myArray: [1, 2, 5]
- *   }
-
- */ -extern NSObject *kTAGDataLayerObjectNotPresent; - -/** - * The data layer is a dictionary holding generic information about the - * application. It uses a standard set of keys so it can be read by any party - * that understands the specification. The data layer state is updated - * through its API. For example, an app might start with the following - * dataLayer: -
- *   {
- *     title: "Original screen title"
- *   }
-
- * - * As the state/data of an app can change, the app can update the dataLayer with a call such as: -
- *   [dataLayer push:@{@"title": @"New screen title"}];
-
- * Now the data layer contains: -
- *   {
- *     title: "New screen title"
- *   }
-
- * After another push happens: -
- *   [dataLayer push:@{@"xyz": @3}];
-
- * The dataLayer contains: -
- *   {
- *     "title": "New screen title",
- *     "xyz": 3
- *   }
-
- * The following example demonstrates how array and map merging works. If the - * original dataLayer contains: -
- *   {
- *     "items": @[@"item1", [NSNull null], @"item2", @{@"a": @"aValue", @"b": @"bValue"}]
- *   }
-
- * After this push happens: -
- *   [dataLayer push:@{@"items":
- *       @[[NSNull null], @"item6", kTAGDataLayerObjectNotPresent, @{@"a": [NSNull null]}]}
-
- * The dataLayer contains: -
- *   {
- *     "items": @[[NSNull null], @"item6", @"item2", @{@"a": [NSNull null], @"b": @"bValue"}]}
- *   }
-
- *

Pushes happen synchronously; after the push, changes have been reflected - * in the model. - *

When an event key is pushed to the data layer, rules for tags - * are evaluated and any tags matching this event will fire. - * For example, given a container with a tag whose firing rules is that "event" - * is equal to "openScreen", after this push: -

- *   [dataLayer push:@{@"event", @"openScreen"}];
-
- * that tag will fire. - */ -@interface TAGDataLayer : NSObject - -@property(readonly, nonatomic) NSDictionary *dataLayer; - -/** - * Pushes a key/value pair to the data layer. This is just a convenience - * method that calls push:@{key: value}. - */ -- (void)pushValue:(NSObject*)value forKey:(NSObject*)key; - -/** - * Merges the given update object into the existing data model, - * calling any listeners with the update (after the merge occurs). - * - *

It's valid for values in the dictionary (or embedded Arrays) to be - * of type NSNull. - * If you want to represent a missing value (like an empty index in a List), - * use the kTAGDataLayerObjectNotPresent object. - * - *

This is normally a synchronous call. - * However, if, while the thread is executing the push, another push happens - * from the same thread, then that second push is asynchronous (the second push - * will return before changes have been made to the data layer). This second - * push from the same thread can occur, for example, if a data layer push is - * made in response to a tag firing. However, all updates will be processed - * before the outermost push returns. - *

If the update contains the key event, rules - * will be evaluated and matching tags will fire. - * - * @param update The update object to process - */- (void)push:(NSDictionary*)update; - -/** - * Returns the object in the model associated with the given key. - * If key isn't present, returns nil. If - * key is present, but NSNull, returns - * NSNull. - * - *

The key can can have embedded periods. For example: - * a key of "a.b.c" returns the value of the "c" key in - * the dictionary with key "b" in the dictionary with key "a" in the model. - */ -- (NSObject*)get:(NSString*)key; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGLogger.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGLogger.h deleted file mode 100644 index ead415f..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGLogger.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -/** @file */ - -#import - -/** - * Log Level setting. - */ -typedef enum { - /** Log level of Verbose. */ - kTAGLoggerLogLevelVerbose, - - /** Log level of Debug. */ - kTAGLoggerLogLevelDebug, - - /** Log level of Info. */ - kTAGLoggerLogLevelInfo, - - /** Log level of Warning. */ - kTAGLoggerLogLevelWarning, - - /** Log level of Error. */ - kTAGLoggerLogLevelError, - - /** Log level of None. */ - kTAGLoggerLogLevelNone -} TAGLoggerLogLevelType; - -/** - * A protocol for error/warning/info/debug/verbose logging. - * - * By default, Google Tag Manager logs error/warning messages and - * ignores info/debug/verbose messages. You can install your own logger - * by setting the TAGManager::logger property. - */ -@protocol TAGLogger - -/** - * Logs an error message. - * - * @param message The error message to be logged. - */ -- (void)error:(NSString *)message; - -/** - * Logs a warning message. - * - * @param message The warning message to be logged. - */ -- (void)warning:(NSString *)message; - -/** - * Logs an info message. - * - * @param message The info message to be logged. - */ -- (void)info:(NSString *)message; - -/** - * Logs a debug message. - * - * @param message The debug message to be logged. - */ -- (void)debug:(NSString *)message; - -/** - * Logs a verbose message. - * - * @param message The verbose message to be logged. - */ -- (void)verbose:(NSString *)message; - -/** - * Sets the log level. It is up to the implementation how the log level is used, - * but log messages outside the log level should not be output. - */ -- (void)setLogLevel:(TAGLoggerLogLevelType)logLevel; - -/** - * Returns the current log level. - */ -- (TAGLoggerLogLevelType)logLevel; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGManager.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGManager.h deleted file mode 100644 index 464d6c3..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGManager.h +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -/** @file */ - -#import -#import "TAGContainer.h" -#import "TAGLogger.h" - -@class TAGDataLayer; - -/** - * Mode for refreshing the container. - */ -typedef enum { - /** - * In this mode, containers are automatically refreshed from network every 12 - * hours. Developers can also call TAGContainer::refresh to manually - * refresh containers. - * - * This is the default mode. - */ - kTAGRefreshModeStandard, - /** - * In this mode, the default container is always used (the container will not load a version - * from network, or from disk). - * - * This mode allows developers to add new key/value pairs locally and - * then to use the Plist or JSON default container to test them quickly - * without having to add those key/value pairs to the container using - * the GTM UI. - * - * This mode is intended for development only and not for shipping code. - */ - kTAGRefreshModeDefaultContainer, -} TAGRefreshMode; - -/** - * A class that is the mobile implementation of Google Tag Manager (GTM). - * - * Sample usage: -

- *      TAGContainer *container =
- *          [[TAGManager instance] openContainerById:myContainerId];
- *      NSString *value = [container stringForKey:@"myKey"];
- *
- *      TAGDataLayer *dataLayer =
- *          [[TAGManager instance] dataLayer];
- *      [dataLayer push:@{@"event": @"openScreen",
- *                        @"screenName": @"Main Page"}];
-
- * - * A container is a collection of macros, rules, and tags. It is created within - * the GTM application (http://www.google.com/tagmanager), and is assigned - * a container ID. This container ID is the one used within this API. - * - * The TAGContainer class provides methods for retrieving - * macro values given the macro name. The routines - * TAGContainer::booleanForKey:, TAGContainer::doubleForKey:, - * TAGContainer::int64ForKey:, TAGContainer::stringForKey: return the current - * value for the value collection macro name, depending on the rules associated with that macro - * in the container. - * - * As an example, if your container has a value collection macro with a key "speed" whose - * value is 32, and the enabling rule is Language is "en"; and another value collection macro - * with a key "speed" whose value is 45, and the enabling rule is Language is not "en", - * then making the following call: - * -
- *     [container longForKey:\@"speed"]
- 
- * - * will return either 32 if the current language of the device is English, or - * 45 otherwise. - - * The data layer is a map holding generic information about the application. - * The TAGDataLayer class provides methods to push and retrieve data from - * the data layer. Pushing an event key to the data layer will - * cause tags that match this event to fire. - * - * An initial version of the container is bundled with the application. It - * should be placed as a resource in the bundle with name - * containerId where containerId is the same container - * ID you will use within this API. When you call - * TAGManager::openContainerById:callback:, the container will be - * returned with those bundled rules/tags/macros. You will create the container - * in the UI and use the Download button to download it. - * - * You can modify the container in the UI and publish a new version. In that - * case, the next time the mobile app refreshes the container from the network - * (currently every 12 hours), - * it will get that new version. When you call one of the get... routines, the - * value will be computed using the most recent rules. - * - * The downloaded container is saved locally. When you call - * TAGManager::openContainerById:callback:, it will first load the default - * container, and will then asynchronously load any saved container. If none is - * found or if it is older than 12 hours, it will try to retrieve a newer version - * from the network. You can find the status of those asynchronous loads by - * passing a TAGContainerCallback to TAGManager::openContainerById:callback:. - * - * Sometimes you may want to block until either a non-default container is - * available, or until a recent fresh container is available. You can do that - * by using the callbacks in TAGManager::openContainerById:callback: or use - * TAGContainerOpener. - * - * When you are finished with a container, call TAGContainer::close. - */ -@interface TAGManager : NSObject - -/** - * The logger to use for Google Tag Manager SDK. By default, Google Tag Manager - * logs error/warning messages and ignores info/debug/verbose messages. - * You can use your own customized logger by setting this property. - */ -@property(nonatomic, strong) id logger; - -/** - * The refresh mode used for Google Tag Manager SDK. Setting this to - * @ref kTAGRefreshModeDefaultContainer allows the refresh - * method to use only the default container for development purposes. Default is - * @ref kTAGRefreshModeStandard. - */ -@property(nonatomic) TAGRefreshMode refreshMode; - -/** - * Call TAGDataLayer::push: method to push events and other data. - */ -@property(nonatomic, readonly, strong) TAGDataLayer *dataLayer; - -/** - * Returns a container. - * Usually the returned container will be empty, but the loading will happen - * asynchronously, so the returned container may be refreshed before it - * is returned, after it is returned, or may never be refreshed if, for example, - * there is no network connection during the lifetime of the container. - * - * Callback will be called as various things happen for - * the container. At a minimum, TAGManager::openContainerById:callback: will - * attempt to load a saved version of the container. If there is no saved - * version, or if the saved version is out of date, attempt will be made to - * load from the network. - * - * If TAGManager::openContainerById:callback: is called a second time for a - * given containerId, nil will be returned unless - * the previous opened container has already been closed. - * - * @param containerId The ID of the container to open. - * @param callback An object whose various methods will be called during the - * loading process. Note that the methods may be called from different - * threads. In addition, they may be called before - * TAGManager::openContainerById:callback: returns. - * @return The opened container. - */ -- (TAGContainer *)openContainerById:(NSString *)containerId - callback:(id )callback; - -/** - * Returns the container associated with the given containerId; - * returns nil if the container is not already open. - */ -- (TAGContainer *)getContainerById:(NSString *)containerId; - -/** - * Previews the app with the input url. - * - * The valid url must start with the following: -
- * tagmanager.c.\://preview/p?id=
-
- * where <app_name> is the application name. - * - * @param url The preview url. - * @return YES if the url is a valid tagmanager preview url. - */ -- (BOOL)previewWithUrl:(NSURL *)url; - -/** - * Gets the singleton instance of the TAGManager class, creating it if - * necessary. - * - * @return The singleton instance of TAGManager. - */ -+ (TAGManager *)instance; - -@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Readme.txt b/Frameworks/Google Analytics SDK/GoogleTagManager/Readme.txt deleted file mode 100644 index d756446..0000000 --- a/Frameworks/Google Analytics SDK/GoogleTagManager/Readme.txt +++ /dev/null @@ -1,34 +0,0 @@ -Google Tag Manager iOS SDK - -Copyright 2013 Google, Inc. All rights reserved. - -================================================================================ -DESCRIPTION: - -This SDK provides developers with the capability to use Google Tag Manager -to do server-side rule-based customization of configuration variables. - -The SDK is packaged as a zip file with a directory (Examples) containing -examples, a directory (Library) containing the headers and the static library, -the change history (CHANGELOG) and this file (README). - -Details on how to use this SDK are available at: - http://developers.google.com/tag-manager/ios - -================================================================================ -BUILD REQUIREMENTS: - -Mac OS X 10.6 or later. -XCode with iOS SDK 6.0 or later. - -================================================================================ -RUNTIME REQUIREMENTS: - -iOS 5.0 or later - -Your application must link to the following frameworks: - AdSupport.framework - CoreData.framework - Foundation.framework - SystemConfiguration.framework - UIKit.framework diff --git a/Frameworks/Google Analytics SDK/ReadMe.txt b/Frameworks/Google Analytics SDK/ReadMe.txt deleted file mode 100644 index 7c87c05..0000000 --- a/Frameworks/Google Analytics SDK/ReadMe.txt +++ /dev/null @@ -1,6 +0,0 @@ -This is a combined SDK that includes both the Google Analytics SDK -and the Google Tag Manager SDK. - -The libGoogleAnalyticsServices.a library contains code for both. -Within the subdirectories, you can find header files and documentation -for each. diff --git a/Frameworks/Google Analytics SDK/libGoogleAnalyticsServices.a b/Frameworks/Google Analytics SDK/libGoogleAnalyticsServices.a deleted file mode 100644 index 7b25f1d..0000000 Binary files a/Frameworks/Google Analytics SDK/libGoogleAnalyticsServices.a and /dev/null differ diff --git a/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h b/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h deleted file mode 100644 index 303d442..0000000 --- a/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// IASKAppSettingsViewController.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import -#import - -#import "IASKSettingsStore.h" - -@class IASKSettingsReader; -@class IASKAppSettingsViewController; -@class IASKSpecifier; - -@protocol IASKSettingsDelegate -- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController*)sender; -@optional -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderForKey:(NSString*)key; -- (UIView *)tableView:(UITableView *)tableView viewForHeaderForKey:(NSString*)key; - -- (CGFloat)tableView:(UITableView*)tableView heightForSpecifier:(IASKSpecifier*)specifier; -- (UITableViewCell*)tableView:(UITableView*)tableView cellForSpecifier:(IASKSpecifier*)specifier; - -- (NSString*)mailComposeBody; -- (UIViewController*)viewControllerForMailComposeView; -- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error; - -- (void)settingsViewController:(IASKAppSettingsViewController*)sender buttonTappedForKey:(NSString*)key; -@end - - -@interface IASKAppSettingsViewController : UITableViewController { - id _delegate; - - NSMutableArray *_viewList; - NSIndexPath *_currentIndexPath; - - IASKSettingsReader *_settingsReader; - id _settingsStore; - NSString *_file; - - id _currentFirstResponder; - - BOOL _showCreditsFooter; - BOOL _showDoneButton; -} - -@property (nonatomic, assign) IBOutlet id delegate; -@property (nonatomic, retain) IASKSettingsReader *settingsReader; -@property (nonatomic, retain) id settingsStore; -@property (nonatomic, copy) NSString *file; -@property (nonatomic, assign) BOOL showCreditsFooter; -@property (nonatomic, assign) BOOL showDoneButton; - -- (void)synchronizeSettings; -- (IBAction)dismiss:(id)sender; - -@end diff --git a/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m b/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m deleted file mode 100644 index eac6038..0000000 --- a/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m +++ /dev/null @@ -1,787 +0,0 @@ -// -// IASKAppSettingsViewController.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009-2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - - -#import "IASKAppSettingsViewController.h" -#import "IASKSettingsReader.h" -#import "IASKSettingsStoreUserDefaults.h" -#import "IASKPSToggleSwitchSpecifierViewCell.h" -#import "IASKPSSliderSpecifierViewCell.h" -#import "IASKPSTextFieldSpecifierViewCell.h" -#import "IASKPSTitleValueSpecifierViewCell.h" -#import "IASKSwitch.h" -#import "IASKSlider.h" -#import "IASKSpecifier.h" -#import "IASKSpecifierValuesViewController.h" -#import "IASKTextField.h" - -static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; -static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; -static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8; - -static NSString *kIASKCredits = @"Powered by InAppSettingsKit"; // Leave this as-is!!! - -#define kIASKSpecifierValuesViewControllerIndex 0 -#define kIASKSpecifierChildViewControllerIndex 1 - -#define kIASKCreditsViewWidth 285 - -CGRect IASKCGRectSwap(CGRect rect); - -@interface IASKAppSettingsViewController () -@property (nonatomic, retain) NSMutableArray *viewList; -@property (nonatomic, retain) NSIndexPath *currentIndexPath; -@property (nonatomic, retain) id currentFirstResponder; - -- (void)_textChanged:(id)sender; -- (void)synchronizeSettings; -- (void)reload; -@end - -@implementation IASKAppSettingsViewController - -@synthesize delegate = _delegate; -@synthesize viewList = _viewList; -@synthesize currentIndexPath = _currentIndexPath; -@synthesize settingsReader = _settingsReader; -@synthesize file = _file; -@synthesize currentFirstResponder = _currentFirstResponder; -@synthesize showCreditsFooter = _showCreditsFooter; -@synthesize showDoneButton = _showDoneButton; -@synthesize settingsStore = _settingsStore; - -#pragma mark accessors -- (IASKSettingsReader*)settingsReader { - if (!_settingsReader) { - _settingsReader = [[IASKSettingsReader alloc] initWithFile:self.file]; - } - return _settingsReader; -} - -- (id)settingsStore { - if (!_settingsStore) { - _settingsStore = [[IASKSettingsStoreUserDefaults alloc] init]; - } - return _settingsStore; -} - -- (NSString*)file { - if (!_file) { - return @"Root"; - } - return [[_file retain] autorelease]; -} - -- (void)setFile:(NSString *)file { - if (file != _file) { - - [_file release]; - _file = [file copy]; - } - - self.tableView.contentOffset = CGPointMake(0, 0); - self.settingsReader = nil; // automatically initializes itself -} - -- (BOOL)isPad { - BOOL isPad = NO; -#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200) - isPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; -#endif - return isPad; -} - -#pragma mark standard view controller methods -- (id)init { - return [self initWithNibName:@"IASKAppSettingsView" bundle:nil]; -} - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { - // If set to YES, will display credits for InAppSettingsKit creators - _showCreditsFooter = YES; - - // If set to YES, will add a DONE button at the right of the navigation bar - _showDoneButton = YES; - - if ([self isPad]) { - self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLineEtched; - } - } - return self; -} - -- (void)awakeFromNib { - // If set to YES, will display credits for InAppSettingsKit creators - _showCreditsFooter = YES; - - // If set to YES, will add a DONE button at the right of the navigation bar - // if loaded via NIB, it's likely we sit in a TabBar- or NavigationController - // and thus don't need the Done button - _showDoneButton = NO; - - if ([self isPad]) { - self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLineEtched; - } -} - -- (NSMutableArray *)viewList { - if (!_viewList) { - _viewList = [[NSMutableArray alloc] init]; - [_viewList addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"IASKSpecifierValuesView", @"ViewName",nil]]; - [_viewList addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"IASKAppSettingsView", @"ViewName",nil]]; - } - return _viewList; -} - -- (void)viewDidUnload { - // Release any retained subviews of the main view. - // e.g. self.myOutlet = nil; - self.view = nil; - self.viewList = nil; -} - -- (void)viewWillAppear:(BOOL)animated { - [self.tableView reloadData]; - - self.navigationItem.rightBarButtonItem = nil; - self.navigationController.delegate = self; - if (_showDoneButton) { - UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone - target:self - action:@selector(dismiss:)]; - self.navigationItem.rightBarButtonItem = buttonItem; - [buttonItem release]; - } - if (!self.title) { - self.title = NSLocalizedString(@"Settings", @""); - } - - if (self.currentIndexPath) { - if (animated) { - // animate deselection of previously selected row - [self.tableView selectRowAtIndexPath:self.currentIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; - [self.tableView deselectRowAtIndexPath:self.currentIndexPath animated:YES]; - } - self.currentIndexPath = nil; - } - - [super viewWillAppear:animated]; -} - -- (CGSize)contentSizeForViewInPopover { - return [[self view] sizeThatFits:CGSizeMake(320, 2000)]; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - NSNotificationCenter *dc = [NSNotificationCenter defaultCenter]; - IASK_IF_IOS4_OR_GREATER([dc addObserver:self selector:@selector(synchronizeSettings) name:UIApplicationDidEnterBackgroundNotification object:[UIApplication sharedApplication]];); - IASK_IF_IOS4_OR_GREATER([dc addObserver:self selector:@selector(reload) name:UIApplicationWillEnterForegroundNotification object:[UIApplication sharedApplication]];); - [dc addObserver:self selector:@selector(synchronizeSettings) name:UIApplicationWillTerminateNotification object:[UIApplication sharedApplication]]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [NSObject cancelPreviousPerformRequestsWithTarget:self]; - [super viewWillDisappear:animated]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - if (!self.navigationController.delegate) { - // hide the keyboard when we're popping from the navigation controller - [self.currentFirstResponder resignFirstResponder]; - } - - [super viewDidDisappear:animated]; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - return YES; -} - -- (void)didReceiveMemoryWarning { - // Releases the view if it doesn't have a superview. - [super didReceiveMemoryWarning]; - - // Release any cached data, images, etc that aren't in use. -} - -- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { - if (![viewController isKindOfClass:[IASKAppSettingsViewController class]] && ![viewController isKindOfClass:[IASKSpecifierValuesViewController class]]) { - [self dismiss:nil]; - } -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [_viewList release], _viewList = nil; - [_currentIndexPath release], _currentIndexPath = nil; - [_file release], _file = nil; - [_currentFirstResponder release], _currentFirstResponder = nil; - [_settingsReader release], _settingsReader = nil; - [_settingsStore release], _settingsStore = nil; - - _delegate = nil; - - [super dealloc]; -} - - -#pragma mark - -#pragma mark Actions - -- (IBAction)dismiss:(id)sender { - [self.settingsStore synchronize]; - self.navigationController.delegate = nil; - - if (self.delegate && [self.delegate conformsToProtocol:@protocol(IASKSettingsDelegate)]) { - [self.delegate settingsViewControllerDidEnd:self]; - } -} - -- (void)toggledValue:(id)sender { - IASKSwitch *toggle = (IASKSwitch*)sender; - IASKSpecifier *spec = [_settingsReader specifierForKey:[toggle key]]; - - if ([toggle isOn]) { - if ([spec trueValue] != nil) { - [self.settingsStore setObject:[spec trueValue] forKey:[toggle key]]; - } - else { - [self.settingsStore setBool:YES forKey:[toggle key]]; - } - } - else { - if ([spec falseValue] != nil) { - [self.settingsStore setObject:[spec falseValue] forKey:[toggle key]]; - } - else { - [self.settingsStore setBool:NO forKey:[toggle key]]; - } - } - [[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged - object:[toggle key] - userInfo:[NSDictionary dictionaryWithObject:[self.settingsStore objectForKey:[toggle key]] - forKey:[toggle key]]]; -} - -- (void)sliderChangedValue:(id)sender { - IASKSlider *slider = (IASKSlider*)sender; - [self.settingsStore setFloat:[slider value] forKey:[slider key]]; - [[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged - object:[slider key] - userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:[slider value]] - forKey:[slider key]]]; -} - - -#pragma mark - -#pragma mark UITableView Functions - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return [self.settingsReader numberOfSections]; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return [self.settingsReader numberOfRowsForSection:section]; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath]; - if ([[specifier type] isEqualToString:kIASKCustomViewSpecifier]) { - if ([self.delegate respondsToSelector:@selector(tableView:heightForSpecifier:)]) { - return [self.delegate tableView:tableView heightForSpecifier:specifier]; - } else { - return 0; - } - } - return tableView.rowHeight; -} - -- (NSString *)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section { - NSString *header = [self.settingsReader titleForSection:section]; - if (0 == header.length) { - return nil; - } - return header; -} - -- (UIView *)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section { - NSString *key = [self.settingsReader keyForSection:section]; - if ([self.delegate respondsToSelector:@selector(tableView:viewForHeaderForKey:)]) { - return [self.delegate tableView:tableView viewForHeaderForKey:key]; - } else { - return nil; - } -} - -- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section { - NSString *key = [self.settingsReader keyForSection:section]; - if ([self tableView:tableView viewForHeaderInSection:section] && [self.delegate respondsToSelector:@selector(tableView:heightForHeaderForKey:)]) { - CGFloat result; - if ((result = [self.delegate tableView:tableView heightForHeaderForKey:key])) { - return result; - } - - } - NSString *title; - if ((title = [self tableView:tableView titleForHeaderInSection:section])) { - CGSize size = [title sizeWithFont:[UIFont boldSystemFontOfSize:[UIFont labelFontSize]] - constrainedToSize:CGSizeMake(tableView.frame.size.width - 2*kIASKHorizontalPaddingGroupTitles, INFINITY) - lineBreakMode:UILineBreakModeWordWrap]; - return size.height+kIASKVerticalPaddingGroupTitles; - } - return 0; -} - -- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section -{ - NSString *footerText = [self.settingsReader footerTextForSection:section]; - if (_showCreditsFooter && (section == [self.settingsReader numberOfSections]-1)) { - // show credits since this is the last section - if ((footerText == nil) || ([footerText length] == 0)) { - // show the credits on their own - return kIASKCredits; - } else { - // show the credits below the app's FooterText - return [NSString stringWithFormat:@"%@\n\n%@", footerText, kIASKCredits]; - } - } else { - if ([footerText length] == 0) { - return nil; - } - return [self.settingsReader footerTextForSection:section]; - } -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath]; - NSString *key = [specifier key]; - - if ([[specifier type] isEqualToString:kIASKCustomViewSpecifier] && [self.delegate respondsToSelector:@selector(tableView:cellForSpecifier:)]) { - return [self.delegate tableView:tableView cellForSpecifier:specifier]; - } - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[specifier type]]; - - if ([[specifier type] isEqualToString:kIASKPSToggleSwitchSpecifier]) { - if (!cell) { - cell = (IASKPSToggleSwitchSpecifierViewCell*) [[[NSBundle mainBundle] loadNibNamed:@"IASKPSToggleSwitchSpecifierViewCell" - owner:self - options:nil] objectAtIndex:0]; - } - ((IASKPSToggleSwitchSpecifierViewCell*)cell).label.text = [specifier title]; - - id currentValue = [self.settingsStore objectForKey:key]; - BOOL toggleState; - if (currentValue) { - if ([currentValue isEqual:[specifier trueValue]]) { - toggleState = YES; - } else if ([currentValue isEqual:[specifier falseValue]]) { - toggleState = NO; - } else { - toggleState = [currentValue boolValue]; - } - } else { - toggleState = [specifier defaultBoolValue]; - } - ((IASKPSToggleSwitchSpecifierViewCell*)cell).toggle.on = toggleState; - - [((IASKPSToggleSwitchSpecifierViewCell*)cell).toggle addTarget:self action:@selector(toggledValue:) forControlEvents:UIControlEventValueChanged]; - [((IASKPSToggleSwitchSpecifierViewCell*)cell).toggle setKey:key]; - return cell; - } - else if ([[specifier type] isEqualToString:kIASKPSMultiValueSpecifier]) { - if (!cell) { - cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:[specifier type]] autorelease]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - cell.backgroundColor = [UIColor whiteColor]; - } - [[cell textLabel] setText:[specifier title]]; - [[cell detailTextLabel] setText:[[specifier titleForCurrentValue:[self.settingsStore objectForKey:key] != nil ? - [self.settingsStore objectForKey:key] : [specifier defaultValue]] description]]; - return cell; - } - else if ([[specifier type] isEqualToString:kIASKPSTitleValueSpecifier]) { - if (!cell) { - cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:[specifier type]] autorelease]; - cell.accessoryType = UITableViewCellAccessoryNone; - cell.backgroundColor = [UIColor whiteColor]; - } - - cell.textLabel.text = [specifier title]; - id value = [self.settingsStore objectForKey:key] ? : [specifier defaultValue]; - - NSString *stringValue; - if ([specifier multipleValues] || [specifier multipleTitles]) { - stringValue = [specifier titleForCurrentValue:value]; - } else { - stringValue = [value description]; - } - - cell.detailTextLabel.text = stringValue; - [cell setUserInteractionEnabled:NO]; - - return cell; - } - else if ([[specifier type] isEqualToString:kIASKPSTextFieldSpecifier]) { - if (!cell) { - cell = (IASKPSTextFieldSpecifierViewCell*) [[[NSBundle mainBundle] loadNibNamed:@"IASKPSTextFieldSpecifierViewCell" - owner:self - options:nil] objectAtIndex:0]; - - ((IASKPSTextFieldSpecifierViewCell*)cell).textField.textAlignment = UITextAlignmentLeft; - ((IASKPSTextFieldSpecifierViewCell*)cell).textField.returnKeyType = UIReturnKeyDone; - cell.accessoryType = UITableViewCellAccessoryNone; - } - - ((IASKPSTextFieldSpecifierViewCell*)cell).label.text = [specifier title]; - - NSString *textValue = [self.settingsStore objectForKey:key] != nil ? [self.settingsStore objectForKey:key] : [specifier defaultStringValue]; - if (textValue && ![textValue isMemberOfClass:[NSString class]]) { - textValue = [NSString stringWithFormat:@"%@", textValue]; - } - IASKTextField *textField = ((IASKPSTextFieldSpecifierViewCell*)cell).textField; - textField. text = textValue; - textField.key = key; - textField.delegate = self; - textField.secureTextEntry = [specifier isSecure]; - textField.keyboardType = [specifier keyboardType]; - textField.autocapitalizationType = [specifier autocapitalizationType]; - [textField addTarget:self action:@selector(_textChanged:) forControlEvents:UIControlEventEditingChanged]; - if([specifier isSecure]){ - textField.autocorrectionType = UITextAutocorrectionTypeNo; - } else { - textField.autocorrectionType = [specifier autoCorrectionType]; - } - [cell setNeedsLayout]; - return cell; - } - else if ([[specifier type] isEqualToString:kIASKPSSliderSpecifier]) { - if (!cell) { - cell = (IASKPSSliderSpecifierViewCell*) [[[NSBundle mainBundle] loadNibNamed:@"IASKPSSliderSpecifierViewCell" - owner:self - options:nil] objectAtIndex:0]; - } - - if ([[specifier minimumValueImage] length] > 0) { - ((IASKPSSliderSpecifierViewCell*)cell).minImage.image = [UIImage imageWithContentsOfFile:[_settingsReader pathForImageNamed:[specifier minimumValueImage]]]; - } - - if ([[specifier maximumValueImage] length] > 0) { - ((IASKPSSliderSpecifierViewCell*)cell).maxImage.image = [UIImage imageWithContentsOfFile:[_settingsReader pathForImageNamed:[specifier minimumValueImage]]]; - } - - IASKSlider *slider = ((IASKPSSliderSpecifierViewCell*)cell).slider; - slider.minimumValue = [specifier minimumValue]; - slider.maximumValue = [specifier maximumValue]; - slider.value = [self.settingsStore objectForKey:key] != nil ? [[self.settingsStore objectForKey:key] floatValue] : [[specifier defaultValue] floatValue]; - [slider addTarget:self action:@selector(sliderChangedValue:) forControlEvents:UIControlEventValueChanged]; - slider.key = key; - [cell setNeedsLayout]; - return cell; - } - else if ([[specifier type] isEqualToString:kIASKPSChildPaneSpecifier]) { - if (!cell) { - cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:[specifier type]] autorelease]; - [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; - cell.backgroundColor = [UIColor whiteColor]; - } - - [[cell textLabel] setText:[specifier title]]; - return cell; - } else if ([[specifier type] isEqualToString:kIASKOpenURLSpecifier]) { - if (!cell) { - cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:[specifier type]] autorelease]; - [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; - cell.backgroundColor = [UIColor whiteColor]; - } - - cell.textLabel.text = [specifier title]; - cell.detailTextLabel.text = [[specifier defaultValue] description]; - return cell; - } else if ([[specifier type] isEqualToString:kIASKButtonSpecifier]) { - if (!cell) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[specifier type]] autorelease]; - cell.backgroundColor = [UIColor whiteColor]; - } - cell.textLabel.text = [specifier title]; - cell.textLabel.textAlignment = UITextAlignmentCenter; - return cell; - } else if ([[specifier type] isEqualToString:kIASKMailComposeSpecifier]) { - if (!cell) { - cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:[specifier type]] autorelease]; - [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; - cell.backgroundColor = [UIColor whiteColor]; - } - - cell.textLabel.text = [specifier title]; - cell.detailTextLabel.text = [[specifier defaultValue] description]; - return cell; - } else { - if (!cell) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[specifier type]] autorelease]; - cell.backgroundColor = [UIColor whiteColor]; - } - [[cell textLabel] setText:[specifier title]]; - return cell; - } -} - -- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { - IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath]; - - if ([[specifier type] isEqualToString:kIASKPSToggleSwitchSpecifier]) { - return nil; - } else { - return indexPath; - } -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath]; - - if ([[specifier type] isEqualToString:kIASKPSToggleSwitchSpecifier]) { - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - } - else if ([[specifier type] isEqualToString:kIASKPSMultiValueSpecifier]) { - IASKSpecifierValuesViewController *targetViewController = [[self.viewList objectAtIndex:kIASKSpecifierValuesViewControllerIndex] objectForKey:@"viewController"]; - - if (targetViewController == nil) { - // the view controller has not been created yet, create it and set it to our viewList array - // create a new dictionary with the new view controller - NSMutableDictionary *newItemDict = [NSMutableDictionary dictionaryWithCapacity:3]; - [newItemDict addEntriesFromDictionary: [self.viewList objectAtIndex:kIASKSpecifierValuesViewControllerIndex]]; // copy the title and explain strings - - targetViewController = [[IASKSpecifierValuesViewController alloc] initWithNibName:@"IASKSpecifierValuesView" bundle:nil]; - // add the new view controller to the dictionary and then to the 'viewList' array - [newItemDict setObject:targetViewController forKey:@"viewController"]; - [self.viewList replaceObjectAtIndex:kIASKSpecifierValuesViewControllerIndex withObject:newItemDict]; - [targetViewController release]; - - // load the view controll back in to push it - targetViewController = [[self.viewList objectAtIndex:kIASKSpecifierValuesViewControllerIndex] objectForKey:@"viewController"]; - } - self.currentIndexPath = indexPath; - [targetViewController setCurrentSpecifier:specifier]; - targetViewController.settingsReader = self.settingsReader; - targetViewController.settingsStore = self.settingsStore; - [[self navigationController] pushViewController:targetViewController animated:YES]; - } - else if ([[specifier type] isEqualToString:kIASKPSSliderSpecifier]) { - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - } - else if ([[specifier type] isEqualToString:kIASKPSTextFieldSpecifier]) { - IASKPSTextFieldSpecifierViewCell *textFieldCell = (id)[tableView cellForRowAtIndexPath:indexPath]; - [textFieldCell.textField becomeFirstResponder]; - } - else if ([[specifier type] isEqualToString:kIASKPSChildPaneSpecifier]) { - - - Class vcClass = [specifier viewControllerClass]; - if (vcClass) { - SEL initSelector = [specifier viewControllerSelector]; - if (!initSelector) { - initSelector = @selector(init); - } - UIViewController * vc = [vcClass performSelector:@selector(alloc)]; - [vc performSelector:initSelector withObject:[specifier file] withObject:[specifier key]]; - if ([vc respondsToSelector:@selector(setDelegate:)]) { - [vc performSelector:@selector(setDelegate:) withObject:self.delegate]; - } - if ([vc respondsToSelector:@selector(setSettingsStore:)]) { - [vc performSelector:@selector(setSettingsStore:) withObject:self.settingsStore]; - } - self.navigationController.delegate = nil; - [self.navigationController pushViewController:vc animated:YES]; - [vc performSelector:@selector(release)]; - return; - } - - if (nil == [specifier file]) { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - return; - } - - IASKAppSettingsViewController *targetViewController = [[self.viewList objectAtIndex:kIASKSpecifierChildViewControllerIndex] objectForKey:@"viewController"]; - - if (targetViewController == nil) { - // the view controller has not been created yet, create it and set it to our viewList array - // create a new dictionary with the new view controller - NSMutableDictionary *newItemDict = [NSMutableDictionary dictionaryWithCapacity:3]; - [newItemDict addEntriesFromDictionary: [self.viewList objectAtIndex:kIASKSpecifierChildViewControllerIndex]]; // copy the title and explain strings - - targetViewController = [[[self class] alloc] initWithNibName:@"IASKAppSettingsView" bundle:nil]; - targetViewController.showDoneButton = NO; - targetViewController.settingsStore = self.settingsStore; - targetViewController.delegate = self.delegate; - - // add the new view controller to the dictionary and then to the 'viewList' array - [newItemDict setObject:targetViewController forKey:@"viewController"]; - [self.viewList replaceObjectAtIndex:kIASKSpecifierChildViewControllerIndex withObject:newItemDict]; - [targetViewController release]; - - // load the view controll back in to push it - targetViewController = [[self.viewList objectAtIndex:kIASKSpecifierChildViewControllerIndex] objectForKey:@"viewController"]; - } - self.currentIndexPath = indexPath; - targetViewController.file = specifier.file; - targetViewController.title = specifier.title; - targetViewController.showCreditsFooter = NO; - [[self navigationController] pushViewController:targetViewController animated:YES]; - } else if ([[specifier type] isEqualToString:kIASKOpenURLSpecifier]) { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - [[UIApplication sharedApplication] openURL:[NSURL URLWithString:specifier.file]]; - } else if ([[specifier type] isEqualToString:kIASKButtonSpecifier]) { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if ([self.delegate respondsToSelector:@selector(settingsViewController:buttonTappedForKey:)]) { - [self.delegate settingsViewController:self buttonTappedForKey:[specifier key]]; - } else { - // legacy code, provided for backward compatibility - // the delegate mechanism above is much cleaner and doesn't leak - Class buttonClass = [specifier buttonClass]; - SEL buttonAction = [specifier buttonAction]; - if ([buttonClass respondsToSelector:buttonAction]) { - [buttonClass performSelector:buttonAction withObject:self withObject:[specifier key]]; - NSLog(@"InAppSettingsKit Warning: Using IASKButtonSpecifier without implementing the delegate method is deprecated"); - } - } - } else if ([[specifier type] isEqualToString:kIASKMailComposeSpecifier]) { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if ([MFMailComposeViewController canSendMail]) { - MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init]; - mailViewController.navigationBar.barStyle = self.navigationController.navigationBar.barStyle; - mailViewController.navigationBar.tintColor = self.navigationController.navigationBar.tintColor; - - if ([specifier localizedObjectForKey:kIASKMailComposeSubject]) { - [mailViewController setSubject:[specifier localizedObjectForKey:kIASKMailComposeSubject]]; - } - if ([[specifier specifierDict] objectForKey:kIASKMailComposeToRecipents]) { - [mailViewController setToRecipients:[[specifier specifierDict] objectForKey:kIASKMailComposeToRecipents]]; - } - if ([[specifier specifierDict] objectForKey:kIASKMailComposeCcRecipents]) { - [mailViewController setCcRecipients:[[specifier specifierDict] objectForKey:kIASKMailComposeCcRecipents]]; - } - if ([[specifier specifierDict] objectForKey:kIASKMailComposeBccRecipents]) { - [mailViewController setBccRecipients:[[specifier specifierDict] objectForKey:kIASKMailComposeBccRecipents]]; - } - if ([specifier localizedObjectForKey:kIASKMailComposeBody]) { - BOOL isHTML = NO; - if ([[specifier specifierDict] objectForKey:kIASKMailComposeBodyIsHTML]) { - isHTML = [[[specifier specifierDict] objectForKey:kIASKMailComposeBodyIsHTML] boolValue]; - } - - if ([self.delegate respondsToSelector:@selector(mailComposeBody)]) { - [mailViewController setMessageBody:[self.delegate mailComposeBody] isHTML:isHTML]; - } - else { - [mailViewController setMessageBody:[specifier localizedObjectForKey:kIASKMailComposeBody] isHTML:isHTML]; - } - } - - UIViewController *vc = nil; - - if ([self.delegate respondsToSelector:@selector(viewControllerForMailComposeView)]) { - vc = [self.delegate viewControllerForMailComposeView]; - } - - if (vc == nil) { - vc = self; - } - - mailViewController.mailComposeDelegate = vc; - [vc presentModalViewController:mailViewController animated:YES]; - [mailViewController release]; - } else { - UIAlertView *alert = [[UIAlertView alloc] - initWithTitle:NSLocalizedString(@"Mail not configured", @"InAppSettingsKit") - message:NSLocalizedString(@"This device is not configured for sending Email. Please configure the Mail settings in the Settings app.", @"InAppSettingsKit") - delegate: nil - cancelButtonTitle:NSLocalizedString(@"OK", @"InAppSettingsKit") - otherButtonTitles:nil]; - [alert show]; - [alert release]; - } - - } else { - [tableView deselectRowAtIndexPath:indexPath animated:NO]; - } -} - - -#pragma mark - -#pragma mark MFMailComposeViewControllerDelegate Function - --(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { - - // Forward the mail compose delegate - if ([self.delegate respondsToSelector:@selector(mailComposeController: didFinishWithResult: error:)]) { - [self.delegate mailComposeController:controller didFinishWithResult:result error:error]; - } - - // NOTE: No error handling is done here - [self dismissModalViewControllerAnimated:YES]; -} - -#pragma mark - -#pragma mark UITextFieldDelegate Functions - -- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { - self.currentFirstResponder = textField; - return YES; -} - -- (void)_textChanged:(id)sender { - IASKTextField *text = (IASKTextField*)sender; - [_settingsStore setObject:[text text] forKey:[text key]]; - [[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged - object:[text key] - userInfo:[NSDictionary dictionaryWithObject:[text text] - forKey:[text key]]]; -} - -- (BOOL)textFieldShouldReturn:(UITextField *)textField{ - [textField resignFirstResponder]; - self.currentFirstResponder = nil; - return YES; -} - - -#pragma mark Notifications - -- (void)synchronizeSettings { - [_settingsStore synchronize]; -} - -- (void)reload { - // wait 0.5 sec until UI is available after applicationWillEnterForeground - [self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.5]; -} - -#pragma mark CGRect Utility function -CGRect IASKCGRectSwap(CGRect rect) { - CGRect newRect; - newRect.origin.x = rect.origin.y; - newRect.origin.y = rect.origin.x; - newRect.size.width = rect.size.height; - newRect.size.height = rect.size.width; - return newRect; -} -@end diff --git a/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h b/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h deleted file mode 100644 index 08b6ceb..0000000 --- a/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// IASKAppSettingsWebViewController.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import -#import - -@interface IASKAppSettingsWebViewController : UIViewController { - UIWebView *webView; - NSURL *url; -} - -- (id)initWithFile:(NSString*)htmlFileName key:(NSString*)key; - -@property (nonatomic, retain) IBOutlet UIWebView *webView; -@property (nonatomic, retain) NSURL *url; - -@end diff --git a/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m b/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m deleted file mode 100644 index 46429b3..0000000 --- a/Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// IASKAppSettingsWebViewController.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKAppSettingsWebViewController.h" - -@implementation IASKAppSettingsWebViewController - -@synthesize url; -@synthesize webView; - -- (id)initWithFile:(NSString*)urlString key:(NSString*)key { - if (!(self = [super initWithNibName:nil bundle:nil])) { - return nil; - } - - self.url = [NSURL URLWithString:urlString]; - if (!self.url || ![self.url scheme]) { - NSString *path = [[NSBundle mainBundle] pathForResource:[urlString stringByDeletingPathExtension] ofType:[urlString pathExtension]]; - if(path) - self.url = [NSURL fileURLWithPath:path]; - else - self.url = nil; - } - return self; -} - - -- (void)dealloc { - [webView release], webView = nil; - [url release], url = nil; - - [super dealloc]; -} - -- (void)viewWillAppear:(BOOL)animated { - [webView loadRequest:[NSURLRequest requestWithURL:self.url]]; -} - -- (void)viewDidUnload { - [super viewDidUnload]; - self.webView = nil; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - return YES; -} - -- (void)webViewDidFinishLoad:(UIWebView *)webView { - self.navigationItem.title = [self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]; -} - -- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { - NSURL *newURL = [request URL]; - - // intercept mailto URL and send it to an in-app Mail compose view instead - if ([[newURL scheme] isEqualToString:@"mailto"]) { - - NSArray *rawURLparts = [[newURL resourceSpecifier] componentsSeparatedByString:@"?"]; - if (rawURLparts.count > 2) { - return NO; // invalid URL - } - - MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init]; - mailViewController.mailComposeDelegate = self; - - NSMutableArray *toRecipients = [NSMutableArray array]; - NSString *defaultRecipient = [rawURLparts objectAtIndex:0]; - if (defaultRecipient.length) { - [toRecipients addObject:defaultRecipient]; - } - - if (rawURLparts.count == 2) { - NSString *queryString = [rawURLparts objectAtIndex:1]; - - NSArray *params = [queryString componentsSeparatedByString:@"&"]; - for (NSString *param in params) { - NSArray *keyValue = [param componentsSeparatedByString:@"="]; - if (keyValue.count != 2) { - continue; - } - NSString *key = [[keyValue objectAtIndex:0] lowercaseString]; - NSString *value = [keyValue objectAtIndex:1]; - - value = (NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, - (CFStringRef)value, - CFSTR(""), - kCFStringEncodingUTF8); - [value autorelease]; - - if ([key isEqualToString:@"subject"]) { - [mailViewController setSubject:value]; - } - - if ([key isEqualToString:@"body"]) { - [mailViewController setMessageBody:value isHTML:NO]; - } - - if ([key isEqualToString:@"to"]) { - [toRecipients addObjectsFromArray:[value componentsSeparatedByString:@","]]; - } - - if ([key isEqualToString:@"cc"]) { - NSArray *recipients = [value componentsSeparatedByString:@","]; - [mailViewController setCcRecipients:recipients]; - } - - if ([key isEqualToString:@"bcc"]) { - NSArray *recipients = [value componentsSeparatedByString:@","]; - [mailViewController setBccRecipients:recipients]; - } - } - } - - [mailViewController setToRecipients:toRecipients]; - - [self presentModalViewController:mailViewController animated:YES]; - [mailViewController release]; - return NO; - } - - // open inline if host is the same, otherwise, pass to the system - if (![newURL host] || [[newURL host] isEqualToString:[self.url host]]) { - return YES; - } - [[UIApplication sharedApplication] openURL:newURL]; - return NO; -} - -- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { - [self dismissModalViewControllerAnimated:YES]; -} - - - -@end diff --git a/Frameworks/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h b/Frameworks/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h deleted file mode 100644 index 2df1db6..0000000 --- a/Frameworks/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// IASKSpecifierValuesViewController.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import -#import "IASKSettingsStore.h" - -@class IASKSpecifier; -@class IASKSettingsReader; - -@interface IASKSpecifierValuesViewController : UIViewController { - UITableView *_tableView; - - IASKSpecifier *_currentSpecifier; - NSIndexPath *_checkedItem; - IASKSettingsReader *_settingsReader; - id _settingsStore; -} - -@property (nonatomic, retain) IBOutlet UITableView *tableView; -@property (nonatomic, retain) NSIndexPath *checkedItem; -@property (nonatomic, retain) IASKSpecifier *currentSpecifier; -@property (nonatomic, retain) IASKSettingsReader *settingsReader; -@property (nonatomic, retain) id settingsStore; - -@end diff --git a/Frameworks/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m b/Frameworks/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m deleted file mode 100644 index c56e9ad..0000000 --- a/Frameworks/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m +++ /dev/null @@ -1,196 +0,0 @@ -// -// IASKSpecifierValuesViewController.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKSpecifierValuesViewController.h" -#import "IASKSpecifier.h" -#import "IASKSettingsReader.h" -#import "IASKSettingsStoreUserDefaults.h" - -#define kCellValue @"kCellValue" - -@interface IASKSpecifierValuesViewController() -- (void)userDefaultsDidChange; -@end - -@implementation IASKSpecifierValuesViewController - -@synthesize tableView=_tableView; -@synthesize currentSpecifier=_currentSpecifier; -@synthesize checkedItem=_checkedItem; -@synthesize settingsReader = _settingsReader; -@synthesize settingsStore = _settingsStore; - -- (void) updateCheckedItem { - NSInteger index; - - // Find the currently checked item - if([self.settingsStore objectForKey:[_currentSpecifier key]]) { - index = [[_currentSpecifier multipleValues] indexOfObject:[self.settingsStore objectForKey:[_currentSpecifier key]]]; - } else { - index = [[_currentSpecifier multipleValues] indexOfObject:[_currentSpecifier defaultValue]]; - } - [self setCheckedItem:[NSIndexPath indexPathForRow:index inSection:0]]; -} - -- (id)settingsStore { - if(_settingsStore == nil) { - _settingsStore = [[IASKSettingsStoreUserDefaults alloc] init]; - } - return _settingsStore; -} - -- (void)viewWillAppear:(BOOL)animated { - if (_currentSpecifier) { - [self setTitle:[_currentSpecifier title]]; - [self updateCheckedItem]; - } - - if (_tableView) { - [_tableView reloadData]; - - // Make sure the currently checked item is visible - [_tableView scrollToRowAtIndexPath:[self checkedItem] atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; - } - [super viewWillAppear:animated]; -} - -- (void)viewDidAppear:(BOOL)animated { - [_tableView flashScrollIndicators]; - [super viewDidAppear:animated]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(userDefaultsDidChange) - name:NSUserDefaultsDidChangeNotification - object:[NSUserDefaults standardUserDefaults]]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [[NSNotificationCenter defaultCenter] removeObserver:self name:NSUserDefaultsDidChangeNotification object:nil]; - [super viewDidDisappear:animated]; -} - - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - return YES; -} - -- (void)didReceiveMemoryWarning { - // Releases the view if it doesn't have a superview. - [super didReceiveMemoryWarning]; - - // Release any cached data, images, etc that aren't in use. -} - -- (void)viewDidUnload { - // Release any retained subviews of the main view. - // e.g. self.myOutlet = nil; - self.tableView = nil; -} - - -- (void)dealloc { - [_currentSpecifier release], _currentSpecifier = nil; - [_checkedItem release], _checkedItem = nil; - [_settingsReader release], _settingsReader = nil; - [_settingsStore release], _settingsStore = nil; - [_tableView release], _tableView = nil; - [super dealloc]; -} - - -#pragma mark - -#pragma mark UITableView delegates - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return [_currentSpecifier multipleValuesCount]; -} - -- (void)selectCell:(UITableViewCell *)cell { - [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; - [[cell textLabel] setTextColor:kIASKgrayBlueColor]; -} - -- (void)deselectCell:(UITableViewCell *)cell { - [cell setAccessoryType:UITableViewCellAccessoryNone]; - [[cell textLabel] setTextColor:[UIColor darkTextColor]]; -} - -- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { - return [_currentSpecifier footerText]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellValue]; - NSArray *titles = [_currentSpecifier multipleTitles]; - - if (!cell) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellValue] autorelease]; - cell.backgroundColor = [UIColor whiteColor]; - } - - if ([indexPath isEqual:[self checkedItem]]) { - [self selectCell:cell]; - } else { - [self deselectCell:cell]; - } - - @try { - [[cell textLabel] setText:[self.settingsReader titleForStringId:[titles objectAtIndex:indexPath.row]]]; - } - @catch (NSException * e) {} - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - - if (indexPath == [self checkedItem]) { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - return; - } - - NSArray *values = [_currentSpecifier multipleValues]; - - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - [self deselectCell:[tableView cellForRowAtIndexPath:[self checkedItem]]]; - [self selectCell:[tableView cellForRowAtIndexPath:indexPath]]; - [self setCheckedItem:indexPath]; - - [self.settingsStore setObject:[values objectAtIndex:indexPath.row] forKey:[_currentSpecifier key]]; - [self.settingsStore synchronize]; - [[NSNotificationCenter defaultCenter] postNotificationName:kIASKAppSettingChanged - object:[_currentSpecifier key] - userInfo:[NSDictionary dictionaryWithObject:[values objectAtIndex:indexPath.row] - forKey:[_currentSpecifier key]]]; -} - -#pragma mark Notifications - -- (void)userDefaultsDidChange { - NSIndexPath *oldCheckedItem = self.checkedItem; - if(_currentSpecifier) { - [self updateCheckedItem]; - } - - // only reload the table if it had changed; prevents animation cancellation - if (self.checkedItem != oldCheckedItem) { - [_tableView reloadData]; - } -} - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSettingsReader.h b/Frameworks/InAppSettingsKit/Models/IASKSettingsReader.h deleted file mode 100644 index 29eea4f..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSettingsReader.h +++ /dev/null @@ -1,143 +0,0 @@ -// -// IASKSettingsReader.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - -#define kIASKPreferenceSpecifiers @"PreferenceSpecifiers" -#define kIASKType @"Type" -#define kIASKTitle @"Title" -#define kIASKFooterText @"FooterText" -#define kIASKKey @"Key" -#define kIASKFile @"File" -#define kIASKDefaultValue @"DefaultValue" -#define kIASKMinimumValue @"MinimumValue" -#define kIASKMaximumValue @"MaximumValue" -#define kIASKTrueValue @"TrueValue" -#define kIASKFalseValue @"FalseValue" -#define kIASKIsSecure @"IsSecure" -#define KIASKKeyboardType @"KeyboardType" -#define kIASKAutocapitalizationType @"AutocapitalizationType" -#define kIASKAutoCorrectionType @"AutocorrectionType" -#define kIASKValues @"Values" -#define kIASKTitles @"Titles" -#define kIASKViewControllerClass @"IASKViewControllerClass" -#define kIASKViewControllerSelector @"IASKViewControllerSelector" -#define kIASKButtonClass @"IASKButtonClass" -#define kIASKButtonAction @"IASKButtonAction" -#define kIASKMailComposeToRecipents @"IASKMailComposeToRecipents" -#define kIASKMailComposeCcRecipents @"IASKMailComposeCcRecipents" -#define kIASKMailComposeBccRecipents @"IASKMailComposeBccRecipents" -#define kIASKMailComposeSubject @"IASKMailComposeSubject" -#define kIASKMailComposeBody @"IASKMailComposeBody" -#define kIASKMailComposeBodyIsHTML @"IASKMailComposeBodyIsHTML" -#define kIASKKeyboardAlphabet @"Alphabet" -#define kIASKKeyboardNumbersAndPunctuation @"NumbersAndPunctuation" -#define kIASKKeyboardNumberPad @"NumberPad" -#define kIASKKeyboardDecimalPad @"DecimalPad" - -#define KIASKKeyboardURL @"URL" -#define kIASKKeyboardEmailAddress @"EmailAddress" -#define kIASKAutoCapNone @"None" -#define kIASKAutoCapSentences @"Sentences" -#define kIASKAutoCapWords @"Words" -#define kIASKAutoCapAllCharacters @"AllCharacters" -#define kIASKAutoCorrDefault @"Default" -#define kIASKAutoCorrNo @"No" -#define kIASKAutoCorrYes @"Yes" -#define kIASKMinimumValueImage @"MinimumValueImage" -#define kIASKMaximumValueImage @"MaximumValueImage" - -#define kIASKPSGroupSpecifier @"PSGroupSpecifier" -#define kIASKPSToggleSwitchSpecifier @"PSToggleSwitchSpecifier" -#define kIASKPSMultiValueSpecifier @"PSMultiValueSpecifier" -#define kIASKPSSliderSpecifier @"PSSliderSpecifier" -#define kIASKPSTitleValueSpecifier @"PSTitleValueSpecifier" -#define kIASKPSTextFieldSpecifier @"PSTextFieldSpecifier" -#define kIASKPSChildPaneSpecifier @"PSChildPaneSpecifier" -#define kIASKOpenURLSpecifier @"IASKOpenURLSpecifier" -#define kIASKButtonSpecifier @"IASKButtonSpecifier" -#define kIASKMailComposeSpecifier @"IASKMailComposeSpecifier" -#define kIASKCustomViewSpecifier @"IASKCustomViewSpecifier" - -#define kIASKBundleFolder @"Settings.bundle" -#define kIASKBundleFolderAlt @"InAppSettings.bundle" -#define kIASKBundleFilename @"Root.plist" -#define KIASKBundleLocaleFolderExtension @".lproj" - -#define kIASKAppSettingChanged @"kAppSettingChanged" - -#define kIASKSectionHeaderIndex 0 - -#define kIASKSliderNoImagesPadding 11 -#define kIASKSliderImagesPadding 43 - - -#define kIASKTableWidth 320 -#define kIASKSpacing 5 -#define kIASKMinLabelWidth 97 -#define kIASKMinValueWidth 35 -#define kIASKPaddingLeft 9 -#define kIASKPaddingRight 10 -#define kIASKHorizontalPaddingGroupTitles 19 -#define kIASKVerticalPaddingGroupTitles 15 - -#define kIASKLabelFontSize 17 -#define kIASKgrayBlueColor [UIColor colorWithRed:0.318 green:0.4 blue:0.569 alpha:1.0] - -#ifndef kCFCoreFoundationVersionNumber_iPhoneOS_4_0 -#define kCFCoreFoundationVersionNumber_iPhoneOS_4_0 550.32 -#endif - -#ifndef kCFCoreFoundationVersionNumber_iPhoneOS_4_1 -#define kCFCoreFoundationVersionNumber_iPhoneOS_4_1 550.38 -#endif - - -#define IASK_IF_IOS4_OR_GREATER(...) \ -if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_4_0) \ -{ \ -__VA_ARGS__ \ -} - -@class IASKSpecifier; - -@interface IASKSettingsReader : NSObject { - NSString *_path; - NSString *_localizationTable; - NSString *_bundlePath; - NSDictionary *_settingsBundle; - NSArray *_dataSource; - NSBundle *_bundle; -} - -- (id)initWithFile:(NSString*)file; -- (NSInteger)numberOfSections; -- (NSInteger)numberOfRowsForSection:(NSInteger)section; -- (IASKSpecifier*)specifierForIndexPath:(NSIndexPath*)indexPath; -- (IASKSpecifier*)specifierForKey:(NSString*)key; -- (NSString*)titleForSection:(NSInteger)section; -- (NSString*)keyForSection:(NSInteger)section; -- (NSString*)footerTextForSection:(NSInteger)section; -- (NSString*)titleForStringId:(NSString*)stringId; -- (NSString*)pathForImageNamed:(NSString*)image; - -@property (nonatomic, retain) NSString *path; -@property (nonatomic, retain) NSString *localizationTable; -@property (nonatomic, retain) NSString *bundlePath; -@property (nonatomic, retain) NSDictionary *settingsBundle; -@property (nonatomic, retain) NSArray *dataSource; - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSettingsReader.m b/Frameworks/InAppSettingsKit/Models/IASKSettingsReader.m deleted file mode 100644 index 3d1e5f9..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSettingsReader.m +++ /dev/null @@ -1,256 +0,0 @@ -// -// IASKSettingsReader.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKSettingsReader.h" -#import "IASKSpecifier.h" - -@interface IASKSettingsReader (private) -- (void)_reinterpretBundle:(NSDictionary*)settingsBundle; -- (BOOL)_sectionHasHeading:(NSInteger)section; -- (NSString *)platformSuffix; -- (NSString *)locateSettingsFile:(NSString *)file; - -@end - -@implementation IASKSettingsReader - -@synthesize path=_path, -localizationTable=_localizationTable, -bundlePath=_bundlePath, -settingsBundle=_settingsBundle, -dataSource=_dataSource; - -- (id)init { - return [self initWithFile:@"Root"]; -} - -- (id)initWithFile:(NSString*)file { - if ((self=[super init])) { - - - self.path = [self locateSettingsFile: file]; - [self setSettingsBundle:[NSDictionary dictionaryWithContentsOfFile:self.path]]; - self.bundlePath = [self.path stringByDeletingLastPathComponent]; - _bundle = [[NSBundle bundleWithPath:[self bundlePath]] retain]; - - // Look for localization file - self.localizationTable = [self.settingsBundle objectForKey:@"StringsTable"]; - if (!self.localizationTable) - { - // Look for localization file using filename - self.localizationTable = [[[[self.path stringByDeletingPathExtension] // removes '.plist' - stringByDeletingPathExtension] // removes potential '.inApp' - lastPathComponent] // strip absolute path - stringByReplacingOccurrencesOfString:[self platformSuffix] withString:@""]; // removes potential '~device' (~ipad, ~iphone) - if([_bundle pathForResource:self.localizationTable ofType:@"strings"] == nil){ - // Could not find the specified localization: use default - self.localizationTable = @"Root"; - } - } - - if (_settingsBundle) { - [self _reinterpretBundle:_settingsBundle]; - } - } - return self; -} - -- (void)dealloc { - [_path release], _path = nil; - [_localizationTable release], _localizationTable = nil; - [_bundlePath release], _bundlePath = nil; - [_settingsBundle release], _settingsBundle = nil; - [_dataSource release], _dataSource = nil; - [_bundle release], _bundle = nil; - - [super dealloc]; -} - -- (void)_reinterpretBundle:(NSDictionary*)settingsBundle { - NSArray *preferenceSpecifiers = [settingsBundle objectForKey:kIASKPreferenceSpecifiers]; - NSInteger sectionCount = -1; - NSMutableArray *dataSource = [[[NSMutableArray alloc] init] autorelease]; - - for (NSDictionary *specifier in preferenceSpecifiers) { - if ([(NSString*)[specifier objectForKey:kIASKType] isEqualToString:kIASKPSGroupSpecifier]) { - NSMutableArray *newArray = [[NSMutableArray alloc] init]; - - [newArray addObject:specifier]; - [dataSource addObject:newArray]; - [newArray release]; - sectionCount++; - } - else { - if (sectionCount == -1) { - NSMutableArray *newArray = [[NSMutableArray alloc] init]; - [dataSource addObject:newArray]; - [newArray release]; - sectionCount++; - } - - IASKSpecifier *newSpecifier = [[IASKSpecifier alloc] initWithSpecifier:specifier]; - [(NSMutableArray*)[dataSource objectAtIndex:sectionCount] addObject:newSpecifier]; - [newSpecifier release]; - } - } - [self setDataSource:dataSource]; -} - -- (BOOL)_sectionHasHeading:(NSInteger)section { - return [[[[self dataSource] objectAtIndex:section] objectAtIndex:0] isKindOfClass:[NSDictionary class]]; -} - -- (NSInteger)numberOfSections { - return [[self dataSource] count]; -} - -- (NSInteger)numberOfRowsForSection:(NSInteger)section { - int headingCorrection = [self _sectionHasHeading:section] ? 1 : 0; - return [(NSArray*)[[self dataSource] objectAtIndex:section] count] - headingCorrection; -} - -- (IASKSpecifier*)specifierForIndexPath:(NSIndexPath*)indexPath { - int headingCorrection = [self _sectionHasHeading:indexPath.section] ? 1 : 0; - - IASKSpecifier *specifier = [[[self dataSource] objectAtIndex:indexPath.section] objectAtIndex:(indexPath.row+headingCorrection)]; - specifier.settingsReader = self; - return specifier; -} - -- (IASKSpecifier*)specifierForKey:(NSString*)key { - for (NSArray *specifiers in _dataSource) { - for (id sp in specifiers) { - if ([sp isKindOfClass:[IASKSpecifier class]]) { - if ([[sp key] isEqualToString:key]) { - return sp; - } - } - } - } - return nil; -} - -- (NSString*)titleForSection:(NSInteger)section { - if ([self _sectionHasHeading:section]) { - NSDictionary *dict = [[[self dataSource] objectAtIndex:section] objectAtIndex:kIASKSectionHeaderIndex]; - return [_bundle localizedStringForKey:[dict objectForKey:kIASKTitle] value:[dict objectForKey:kIASKTitle] table:self.localizationTable]; - } - return nil; -} - -- (NSString*)keyForSection:(NSInteger)section { - if ([self _sectionHasHeading:section]) { - return [[[[self dataSource] objectAtIndex:section] objectAtIndex:kIASKSectionHeaderIndex] objectForKey:kIASKKey]; - } - return nil; -} - -- (NSString*)footerTextForSection:(NSInteger)section { - if ([self _sectionHasHeading:section]) { - NSDictionary *dict = [[[self dataSource] objectAtIndex:section] objectAtIndex:kIASKSectionHeaderIndex]; - return [_bundle localizedStringForKey:[dict objectForKey:kIASKFooterText] value:[dict objectForKey:kIASKFooterText] table:self.localizationTable]; - } - return nil; -} - -- (NSString*)titleForStringId:(NSString*)stringId { - return [_bundle localizedStringForKey:stringId value:stringId table:self.localizationTable]; -} - -- (NSString*)pathForImageNamed:(NSString*)image { - return [[self bundlePath] stringByAppendingPathComponent:image]; -} - -- (NSString *)platformSuffix { - BOOL isPad = NO; -#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 30200) - isPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; -#endif - return isPad ? @"~ipad" : @"~iphone"; -} - -- (NSString *)file:(NSString *)file - withBundle:(NSString *)bundle - suffix:(NSString *)suffix - extension:(NSString *)extension { - - NSString *appBundle = [[NSBundle mainBundle] bundlePath]; - bundle = [appBundle stringByAppendingPathComponent:bundle]; - file = [file stringByAppendingFormat:@"%@%@", suffix, extension]; - return [bundle stringByAppendingPathComponent:file]; - -} - -- (NSString *)locateSettingsFile: (NSString *)file { - - // The file is searched in the following order: - // - // InAppSettings.bundle/FILE~DEVICE.inApp.plist - // InAppSettings.bundle/FILE.inApp.plist - // InAppSettings.bundle/FILE~DEVICE.plist - // InAppSettings.bundle/FILE.plist - // Settings.bundle/FILE~DEVICE.inApp.plist - // Settings.bundle/FILE.inApp.plist - // Settings.bundle/FILE~DEVICE.plist - // Settings.bundle/FILE.plist - // - // where DEVICE is either "iphone" or "ipad" depending on the current - // interface idiom. - // - // Settings.app uses the ~DEVICE suffixes since iOS 4.0. There are some - // differences from this implementation: - // - For an iPhone-only app running on iPad, Settings.app will not use the - // ~iphone suffix. There is no point in using these suffixes outside - // of universal apps anyway. - // - This implementation uses the device suffixes on iOS 3.x as well. - // - also check current locale (short only) - - NSArray *bundles = - [NSArray arrayWithObjects:kIASKBundleFolderAlt, kIASKBundleFolder, nil]; - - NSArray *extensions = - [NSArray arrayWithObjects:@".inApp.plist", @".plist", nil]; - - NSArray *suffixes = - [NSArray arrayWithObjects:[self platformSuffix], @"", nil]; - - NSArray *languages = - [NSArray arrayWithObjects:[[[NSLocale preferredLanguages] objectAtIndex:0] stringByAppendingString:KIASKBundleLocaleFolderExtension], @"", nil]; - - NSString *path = nil; - NSFileManager *fileManager = [NSFileManager defaultManager]; - - for (NSString *bundle in bundles) { - for (NSString *extension in extensions) { - for (NSString *suffix in suffixes) { - for (NSString *language in languages) { - path = [self file:file - withBundle:[bundle stringByAppendingPathComponent:language] - suffix:suffix - extension:extension]; - if ([fileManager fileExistsAtPath:path]) { - goto exitFromNestedLoop; - } - } - } - } - } - -exitFromNestedLoop: - return path; -} - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSettingsStore.h b/Frameworks/InAppSettingsKit/Models/IASKSettingsStore.h deleted file mode 100644 index c1b53ba..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSettingsStore.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// IASKSettingsStore.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - -@protocol IASKSettingsStore -@required -- (void)setBool:(BOOL)value forKey:(NSString*)key; -- (void)setFloat:(float)value forKey:(NSString*)key; -- (void)setDouble:(double)value forKey:(NSString*)key; -- (void)setInteger:(int)value forKey:(NSString*)key; -- (void)setObject:(id)value forKey:(NSString*)key; -- (BOOL)boolForKey:(NSString*)key; -- (float)floatForKey:(NSString*)key; -- (double)doubleForKey:(NSString*)key; -- (int)integerForKey:(NSString*)key; -- (id)objectForKey:(NSString*)key; -- (BOOL)synchronize; // Write settings to a permanant storage. Returns YES on success, NO otherwise -@end - - -@interface IASKAbstractSettingsStore : NSObject { -} - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSettingsStore.m b/Frameworks/InAppSettingsKit/Models/IASKSettingsStore.m deleted file mode 100644 index 8efbe7d..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSettingsStore.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// IASKSettingsStore.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKSettingsStore.h" - -@implementation IASKAbstractSettingsStore - -- (void)setObject:(id)value forKey:(NSString*)key { - [NSException raise:@"Unimplemented" - format:@"setObject:forKey: must be implemented in subclasses of IASKAbstractSettingsStore"]; -} - -- (id)objectForKey:(NSString*)key { - [NSException raise:@"Unimplemented" - format:@"objectForKey: must be implemented in subclasses of IASKAbstractSettingsStore"]; - return nil; -} - -- (void)setBool:(BOOL)value forKey:(NSString*)key { - [self setObject:[NSNumber numberWithBool:value] forKey:key]; -} - -- (void)setFloat:(float)value forKey:(NSString*)key { - [self setObject:[NSNumber numberWithFloat:value] forKey:key]; -} - -- (void)setInteger:(int)value forKey:(NSString*)key { - [self setObject:[NSNumber numberWithInt:value] forKey:key]; -} - -- (void)setDouble:(double)value forKey:(NSString*)key { - [self setObject:[NSNumber numberWithDouble:value] forKey:key]; -} - -- (BOOL)boolForKey:(NSString*)key { - return [[self objectForKey:key] boolValue]; -} - -- (float)floatForKey:(NSString*)key { - return [[self objectForKey:key] floatValue]; -} -- (int)integerForKey:(NSString*)key { - return [[self objectForKey:key] intValue]; -} - -- (double)doubleForKey:(NSString*)key { - return [[self objectForKey:key] doubleValue]; -} - -- (BOOL)synchronize { - return NO; -} - -@end \ No newline at end of file diff --git a/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreFile.h b/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreFile.h deleted file mode 100644 index 6d4fe29..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreFile.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// IASKSettingsStoreFile.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import -#import "IASKSettingsStore.h" - -@interface IASKSettingsStoreFile : IASKAbstractSettingsStore { - NSString * _filePath; - NSMutableDictionary * _dict; -} - -- (id)initWithPath:(NSString*)path; - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreFile.m b/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreFile.m deleted file mode 100644 index 104642d..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreFile.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// IASKSettingsStoreFile.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKSettingsStoreFile.h" - - -@implementation IASKSettingsStoreFile - -- (id)initWithPath:(NSString*)path { - if((self = [super init])) { - _filePath = [path retain]; - _dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; - if(_dict == nil) { - _dict = [[NSMutableDictionary alloc] init]; - } - } - return self; -} - -- (void)dealloc { - [_dict release], _dict = nil; - [_filePath release], _filePath = nil; - - [super dealloc]; -} - - -- (void)setObject:(id)value forKey:(NSString *)key { - [_dict setObject:value forKey:key]; -} - -- (id)objectForKey:(NSString *)key { - return [_dict objectForKey:key]; -} - -- (BOOL)synchronize { - return [_dict writeToFile:_filePath atomically:YES]; -} - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h b/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h deleted file mode 100644 index 3731f5e..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// IASKSettingsStoreUserDefaults.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import -#import "IASKSettingsStore.h" - -@interface IASKSettingsStoreUserDefaults : IASKAbstractSettingsStore { - -} - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m b/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m deleted file mode 100644 index fd24bf0..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m +++ /dev/null @@ -1,67 +0,0 @@ -// -// IASKSettingsStoreUserDefaults.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// Marc-Etienne M.Léveillé, Edovia Inc., http://www.edovia.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKSettingsStoreUserDefaults.h" - - -@implementation IASKSettingsStoreUserDefaults - -- (void)setBool:(BOOL)value forKey:(NSString*)key { - [[NSUserDefaults standardUserDefaults] setBool:value forKey:key]; -} - -- (void)setFloat:(float)value forKey:(NSString*)key { - [[NSUserDefaults standardUserDefaults] setFloat:value forKey:key]; -} - -- (void)setDouble:(double)value forKey:(NSString*)key { - [[NSUserDefaults standardUserDefaults] setDouble:value forKey:key]; -} - -- (void)setInteger:(int)value forKey:(NSString*)key { - [[NSUserDefaults standardUserDefaults] setInteger:value forKey:key]; -} - -- (void)setObject:(id)value forKey:(NSString*)key { - [[NSUserDefaults standardUserDefaults] setObject:value forKey:key]; -} - -- (BOOL)boolForKey:(NSString*)key { - return [[NSUserDefaults standardUserDefaults] boolForKey:key]; -} - -- (float)floatForKey:(NSString*)key { - return [[NSUserDefaults standardUserDefaults] floatForKey:key]; -} - -- (double)doubleForKey:(NSString*)key { - return [[NSUserDefaults standardUserDefaults] doubleForKey:key]; -} - -- (int)integerForKey:(NSString*)key { - return [[NSUserDefaults standardUserDefaults] integerForKey:key]; -} - -- (id)objectForKey:(NSString*)key { - return [[NSUserDefaults standardUserDefaults] objectForKey:key]; -} - -- (BOOL)synchronize { - return [[NSUserDefaults standardUserDefaults] synchronize]; -} - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSpecifier.h b/Frameworks/InAppSettingsKit/Models/IASKSpecifier.h deleted file mode 100644 index 1e47d1e..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSpecifier.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// IASKSpecifier.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import -#import - -@class IASKSettingsReader; - -@interface IASKSpecifier : NSObject { - NSDictionary *_specifierDict; - NSDictionary *_multipleValuesDict; - IASKSettingsReader *_settingsReader; -} -@property (nonatomic, retain) NSDictionary *specifierDict; -@property (nonatomic, assign) IASKSettingsReader *settingsReader; - -- (id)initWithSpecifier:(NSDictionary*)specifier; -- (NSString*)localizedObjectForKey:(NSString*)key; -- (NSString*)title; -- (NSString*)key; -- (NSString*)type; -- (NSString*)titleForCurrentValue:(id)currentValue; -- (NSInteger)multipleValuesCount; -- (NSArray*)multipleValues; -- (NSArray*)multipleTitles; -- (NSString*)file; -- (id)defaultValue; -- (id)defaultStringValue; -- (BOOL)defaultBoolValue; -- (id)trueValue; -- (id)falseValue; -- (float)minimumValue; -- (float)maximumValue; -- (NSString*)minimumValueImage; -- (NSString*)maximumValueImage; -- (BOOL)isSecure; -- (UIKeyboardType)keyboardType; -- (UITextAutocapitalizationType)autocapitalizationType; -- (UITextAutocorrectionType)autoCorrectionType; -- (NSString*)footerText; -- (Class)viewControllerClass; -- (SEL)viewControllerSelector; --(Class)buttonClass; --(SEL)buttonAction; - -@end diff --git a/Frameworks/InAppSettingsKit/Models/IASKSpecifier.m b/Frameworks/InAppSettingsKit/Models/IASKSpecifier.m deleted file mode 100644 index ebb38ac..0000000 --- a/Frameworks/InAppSettingsKit/Models/IASKSpecifier.m +++ /dev/null @@ -1,240 +0,0 @@ -// -// IASKSpecifier.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKSpecifier.h" -#import "IASKSettingsReader.h" - -@interface IASKSpecifier () -@property (nonatomic, retain) NSDictionary *multipleValuesDict; -- (void)_reinterpretValues:(NSDictionary*)specifierDict; -@end - -@implementation IASKSpecifier - -@synthesize specifierDict=_specifierDict; -@synthesize multipleValuesDict=_multipleValuesDict; -@synthesize settingsReader = _settingsReader; - -- (id)initWithSpecifier:(NSDictionary*)specifier { - if ((self = [super init])) { - [self setSpecifierDict:specifier]; - - if ([[self type] isEqualToString:kIASKPSMultiValueSpecifier] || - [[self type] isEqualToString:kIASKPSTitleValueSpecifier]) { - [self _reinterpretValues:[self specifierDict]]; - } - } - return self; -} - -- (void)dealloc { - [_specifierDict release], _specifierDict = nil; - [_multipleValuesDict release], _multipleValuesDict = nil; - - _settingsReader = nil; - - [super dealloc]; -} - -- (void)_reinterpretValues:(NSDictionary*)specifierDict { - NSArray *values = [_specifierDict objectForKey:kIASKValues]; - NSArray *titles = [_specifierDict objectForKey:kIASKTitles]; - - NSMutableDictionary *multipleValuesDict = [[[NSMutableDictionary alloc] init] autorelease]; - - if (values) { - [multipleValuesDict setObject:values forKey:kIASKValues]; - } - - if (titles) { - [multipleValuesDict setObject:titles forKey:kIASKTitles]; - } - - [self setMultipleValuesDict:multipleValuesDict]; -} -- (NSString*)localizedObjectForKey:(NSString*)key { - return [self.settingsReader titleForStringId:[_specifierDict objectForKey:key]]; -} - -- (NSString*)title { - return [self localizedObjectForKey:kIASKTitle]; -} - -- (NSString*)footerText { - return [self localizedObjectForKey:kIASKFooterText]; -} - --(Class) viewControllerClass { - return NSClassFromString([_specifierDict objectForKey:kIASKViewControllerClass]); -} - --(SEL) viewControllerSelector { - return NSSelectorFromString([_specifierDict objectForKey:kIASKViewControllerSelector]); -} - --(Class)buttonClass { - return NSClassFromString([_specifierDict objectForKey:kIASKButtonClass]); -} - --(SEL)buttonAction { - return NSSelectorFromString([_specifierDict objectForKey:kIASKButtonAction]); -} - -- (NSString*)key { - return [_specifierDict objectForKey:kIASKKey]; -} - -- (NSString*)type { - return [_specifierDict objectForKey:kIASKType]; -} - -- (NSString*)titleForCurrentValue:(id)currentValue { - NSArray *values = [self multipleValues]; - NSArray *titles = [self multipleTitles]; - if (values.count != titles.count) { - return nil; - } - NSInteger keyIndex = [values indexOfObject:currentValue]; - if (keyIndex == NSNotFound) { - return nil; - } - @try { - return [self.settingsReader titleForStringId:[titles objectAtIndex:keyIndex]]; - } - @catch (NSException * e) {} - return nil; -} - -- (NSInteger)multipleValuesCount { - return [[_multipleValuesDict objectForKey:kIASKValues] count]; -} - -- (NSArray*)multipleValues { - return [_multipleValuesDict objectForKey:kIASKValues]; -} - -- (NSArray*)multipleTitles { - return [_multipleValuesDict objectForKey:kIASKTitles]; -} - -- (NSString*)file { - return [_specifierDict objectForKey:kIASKFile]; -} - -- (id)defaultValue { - return [_specifierDict objectForKey:kIASKDefaultValue]; -} - -- (id)defaultStringValue { - return [[_specifierDict objectForKey:kIASKDefaultValue] description]; -} - -- (BOOL)defaultBoolValue { - id defaultValue = [self defaultValue]; - if ([defaultValue isEqual:[self trueValue]]) { - return YES; - } - if ([defaultValue isEqual:[self falseValue]]) { - return NO; - } - return [defaultValue boolValue]; -} - -- (id)trueValue { - return [_specifierDict objectForKey:kIASKTrueValue]; -} - -- (id)falseValue { - return [_specifierDict objectForKey:kIASKFalseValue]; -} - -- (float)minimumValue { - return [[_specifierDict objectForKey:kIASKMinimumValue] floatValue]; -} - -- (float)maximumValue { - return [[_specifierDict objectForKey:kIASKMaximumValue] floatValue]; -} - -- (NSString*)minimumValueImage { - return [_specifierDict objectForKey:kIASKMinimumValueImage]; -} - -- (NSString*)maximumValueImage { - return [_specifierDict objectForKey:kIASKMaximumValueImage]; -} - -- (BOOL)isSecure { - return [[_specifierDict objectForKey:kIASKIsSecure] boolValue]; -} - -- (UIKeyboardType)keyboardType { - if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardAlphabet]) { - return UIKeyboardTypeDefault; - } - else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardNumbersAndPunctuation]) { - return UIKeyboardTypeNumbersAndPunctuation; - } - else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardNumberPad]) { - return UIKeyboardTypeNumberPad; - } - else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardDecimalPad]) { - if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_4_1) { - return UIKeyboardTypeDecimalPad; - } - else { - return UIKeyboardTypeNumbersAndPunctuation; - } - } - else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:KIASKKeyboardURL]) { - return UIKeyboardTypeURL; - } - else if ([[_specifierDict objectForKey:KIASKKeyboardType] isEqualToString:kIASKKeyboardEmailAddress]) { - return UIKeyboardTypeEmailAddress; - } - return UIKeyboardTypeDefault; -} - -- (UITextAutocapitalizationType)autocapitalizationType { - if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapNone]) { - return UITextAutocapitalizationTypeNone; - } - else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapSentences]) { - return UITextAutocapitalizationTypeSentences; - } - else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapWords]) { - return UITextAutocapitalizationTypeWords; - } - else if ([[_specifierDict objectForKey:kIASKAutocapitalizationType] isEqualToString:kIASKAutoCapAllCharacters]) { - return UITextAutocapitalizationTypeAllCharacters; - } - return UITextAutocapitalizationTypeNone; -} - -- (UITextAutocorrectionType)autoCorrectionType { - if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrDefault]) { - return UITextAutocorrectionTypeDefault; - } - else if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrNo]) { - return UITextAutocorrectionTypeNo; - } - else if ([[_specifierDict objectForKey:kIASKAutoCorrectionType] isEqualToString:kIASKAutoCorrYes]) { - return UITextAutocorrectionTypeYes; - } - return UITextAutocorrectionTypeDefault; -} - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h b/Frameworks/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h deleted file mode 100644 index 7cc943b..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// IASKPSSliderSpecifierViewCell.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - -@class IASKSlider; - -@interface IASKPSSliderSpecifierViewCell : UITableViewCell { - IASKSlider *_slider; - UIImageView *_minImage; - UIImageView *_maxImage; -} - -@property (nonatomic, assign) IBOutlet IASKSlider *slider; -@property (nonatomic, assign) IBOutlet UIImageView *minImage; -@property (nonatomic, assign) IBOutlet UIImageView *maxImage; - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m b/Frameworks/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m deleted file mode 100644 index cbdca02..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// IASKPSSliderSpecifierViewCell.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009-2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKPSSliderSpecifierViewCell.h" -#import "IASKSlider.h" -#import "IASKSettingsReader.h" - -@implementation IASKPSSliderSpecifierViewCell - -@synthesize slider=_slider, - minImage=_minImage, - maxImage=_maxImage; - -- (void)layoutSubviews { - [super layoutSubviews]; - CGRect sliderBounds = _slider.bounds; - CGPoint sliderCenter = _slider.center; - const double superViewWidth = _slider.superview.frame.size.width; - - sliderCenter.x = superViewWidth / 2; - sliderBounds.size.width = superViewWidth - kIASKSliderNoImagesPadding * 2; - _minImage.hidden = YES; - _maxImage.hidden = YES; - - // Check if there are min and max images. If so, change the layout accordingly. - if (_minImage.image && _maxImage.image) { - // Both images - _minImage.hidden = NO; - _maxImage.hidden = NO; - sliderBounds.size.width = superViewWidth - kIASKSliderImagesPadding * 2; - } - else if (_minImage.image) { - // Min image - _minImage.hidden = NO; - sliderCenter.x += (kIASKSliderImagesPadding - kIASKSliderNoImagesPadding) / 2; - sliderBounds.size.width = superViewWidth - kIASKSliderNoImagesPadding - kIASKSliderImagesPadding; - } - else if (_maxImage.image) { - // Max image - _maxImage.hidden = NO; - sliderCenter.x -= (kIASKSliderImagesPadding - kIASKSliderNoImagesPadding) / 2; - sliderBounds.size.width = superViewWidth - kIASKSliderNoImagesPadding - kIASKSliderImagesPadding; - } - - _slider.bounds = sliderBounds; - _slider.center = sliderCenter; -} - -- (void)dealloc { - _minImage.image = nil; - _maxImage.image = nil; - [super dealloc]; -} - -- (void)prepareForReuse { - _minImage.image = nil; - _maxImage.image = nil; -} -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h b/Frameworks/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h deleted file mode 100644 index b4d70c8..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// IASKPSTextFieldSpecifierViewCell.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - -@class IASKTextField; - -@interface IASKPSTextFieldSpecifierViewCell : UITableViewCell { - UILabel *_label; - IASKTextField *_textField; -} - -@property (nonatomic, assign) IBOutlet UILabel *label; -@property (nonatomic, assign) IBOutlet IASKTextField *textField; - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m b/Frameworks/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m deleted file mode 100644 index cf7486e..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// IASKPSTextFieldSpecifierViewCell.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009-2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKPSTextFieldSpecifierViewCell.h" -#import "IASKTextField.h" -#import "IASKSettingsReader.h" - -@implementation IASKPSTextFieldSpecifierViewCell - -@synthesize label=_label, - textField=_textField; - -- (void)layoutSubviews { - [super layoutSubviews]; - CGSize labelSize = [_label sizeThatFits:CGSizeZero]; - labelSize.width = MIN(labelSize.width, _label.bounds.size.width); - - CGRect textFieldFrame = _textField.frame; - textFieldFrame.origin.x = _label.frame.origin.x + MAX(kIASKMinLabelWidth, labelSize.width) + kIASKSpacing; - if (!_label.text.length) - textFieldFrame.origin.x = _label.frame.origin.x; - textFieldFrame.size.width = _textField.superview.frame.size.width - textFieldFrame.origin.x - _label.frame.origin.x; - _textField.frame = textFieldFrame; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - - -- (void)dealloc { - [super dealloc]; -} - - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h b/Frameworks/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h deleted file mode 100644 index b3185b4..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// IASKPSTitleValueSpecifierViewCell.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - - -@interface IASKPSTitleValueSpecifierViewCell : UITableViewCell - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m b/Frameworks/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m deleted file mode 100644 index cd6ba97..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// IASKPSTitleValueSpecifierViewCell.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2010: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKPSTitleValueSpecifierViewCell.h" -#import "IASKSettingsReader.h" - - -@implementation IASKPSTitleValueSpecifierViewCell - -- (void)layoutSubviews { - // left align the value if the title is empty - if (!self.textLabel.text.length) { - self.textLabel.text = self.detailTextLabel.text; - self.detailTextLabel.text = nil; - if ([self.reuseIdentifier isEqualToString:kIASKPSMultiValueSpecifier]) { - self.textLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]]; - self.textLabel.textColor = self.detailTextLabel.textColor; - } - } - [super layoutSubviews]; - - CGSize viewSize = [self.textLabel superview].frame.size; - - // set the left title label frame - CGFloat labelWidth = [self.textLabel sizeThatFits:CGSizeZero].width; - CGFloat minValueWidth = (self.detailTextLabel.text.length) ? kIASKMinValueWidth + kIASKSpacing : 0; - labelWidth = MIN(labelWidth, viewSize.width - minValueWidth - kIASKPaddingLeft -kIASKPaddingRight); - CGRect labelFrame = CGRectMake(kIASKPaddingLeft, 0, labelWidth, viewSize.height -2); - self.textLabel.frame = labelFrame; - - // set the right value label frame - if (self.detailTextLabel.text.length) { - CGRect valueFrame = CGRectMake(kIASKPaddingLeft + labelWidth + kIASKSpacing, - 0, - viewSize.width - (kIASKPaddingLeft + labelWidth + kIASKSpacing) - kIASKPaddingRight, - viewSize.height -2); - self.detailTextLabel.frame = valueFrame; - } -} - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.h b/Frameworks/InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.h deleted file mode 100644 index a6d2864..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// IASKPSToggleSwitchSpecifierViewCell.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - -@class IASKSwitch; - -@interface IASKPSToggleSwitchSpecifierViewCell : UITableViewCell { - UILabel *_label; - IASKSwitch *_toggle; -} - -@property (nonatomic, assign) IBOutlet UILabel *label; -@property (nonatomic, assign) IBOutlet IASKSwitch *toggle; - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.m b/Frameworks/InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.m deleted file mode 100644 index a4a5c0d..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// IASKPSToggleSwitchSpecifierViewCell.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKPSToggleSwitchSpecifierViewCell.h" -#import "IASKSwitch.h" - -@implementation IASKPSToggleSwitchSpecifierViewCell - -@synthesize label=_label, - toggle=_toggle; - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { - if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) { - // Initialization code - } - return self; -} - - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated { - - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - - -- (void)dealloc { - [super dealloc]; -} - - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKSlider.h b/Frameworks/InAppSettingsKit/Views/IASKSlider.h deleted file mode 100644 index 34c5ecb..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKSlider.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// IASKSlider.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - - -@interface IASKSlider : UISlider { - NSString *_key; -} - -@property (nonatomic, retain) NSString *key; - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKSlider.m b/Frameworks/InAppSettingsKit/Views/IASKSlider.m deleted file mode 100644 index d591ff2..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKSlider.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// IASKSlider.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKSlider.h" - - -@implementation IASKSlider - -@synthesize key=_key; - -- (void)dealloc { - [_key release], _key = nil; - - [super dealloc]; -} - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKSwitch.h b/Frameworks/InAppSettingsKit/Views/IASKSwitch.h deleted file mode 100644 index b1439bd..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKSwitch.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// IASKSwitch.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - - -@interface IASKSwitch : UISwitch { - NSString *_key; -} - -@property (nonatomic, retain) NSString *key; - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKSwitch.m b/Frameworks/InAppSettingsKit/Views/IASKSwitch.m deleted file mode 100644 index f32aba4..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKSwitch.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// IASKSwitch.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKSwitch.h" - - -@implementation IASKSwitch - -@synthesize key=_key; - -- (void)dealloc { - [_key release], _key = nil; - - [super dealloc]; -} - - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKTextField.h b/Frameworks/InAppSettingsKit/Views/IASKTextField.h deleted file mode 100644 index 47c9be3..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKTextField.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// IASKTextField.h -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import - - -@interface IASKTextField : UITextField { - NSString *_key; -} - -@property (nonatomic, retain) NSString *key; - -@end diff --git a/Frameworks/InAppSettingsKit/Views/IASKTextField.m b/Frameworks/InAppSettingsKit/Views/IASKTextField.m deleted file mode 100644 index 9056896..0000000 --- a/Frameworks/InAppSettingsKit/Views/IASKTextField.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// IASKTextField.m -// http://www.inappsettingskit.com -// -// Copyright (c) 2009: -// Luc Vandal, Edovia Inc., http://www.edovia.com -// Ortwin Gentz, FutureTap GmbH, http://www.futuretap.com -// All rights reserved. -// -// It is appreciated but not required that you give credit to Luc Vandal and Ortwin Gentz, -// as the original authors of this code. You can give credit in a blog post, a tweet or on -// a info page of your app. Also, the original authors appreciate letting them know if you use this code. -// -// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php -// - -#import "IASKTextField.h" - - -@implementation IASKTextField - -@synthesize key=_key; - -- (void)dealloc { - [_key release], _key = nil; - - [super dealloc]; -} - -@end diff --git a/Frameworks/InAppSettingsKit/Xibs/IASKAppSettingsView.xib b/Frameworks/InAppSettingsKit/Xibs/IASKAppSettingsView.xib deleted file mode 100644 index 74720fa..0000000 --- a/Frameworks/InAppSettingsKit/Xibs/IASKAppSettingsView.xib +++ /dev/null @@ -1,222 +0,0 @@ - - - - 1280 - 11B26 - 1934 - 1138 - 566.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 931 - - - YES - IBProxyObject - IBUITableView - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - {320, 460} - - - - 10 - - 549453824 - {512, 1} - - YES - - YES - - - - TU0AKgAACAjFzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ -y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ -y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ -y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/ -y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/ -xczS/8vS2P/L0tj/xczU/wANAQAAAwAAAAECAAAAAQEAAwAAAAEAAQAAAQIAAwAAAAQAAAiqAQMAAwAA -AAEAAQAAAQYAAwAAAAEAAgAAAREABAAAAAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEABAAAARYAAwAA -AAEAAQAAARcABAAAAAEAAAgAARwAAwAAAAEAAQAAAVIAAwAAAAEAAQAAAVMAAwAAAAQAAAiyAAAAAAAI -AAgACAAIAAEAAQABAAE - - - - - - 3 - MCAwAA - - - groupTableViewBackgroundColor - - NO - YES - NO - IBCocoaTouchFramework - NO - 1 - 1 - 0 - YES - 44 - 10 - 10 - - - - - YES - - - view - - - - 10 - - - - dataSource - - - - 6 - - - - delegate - - - - 7 - - - - - YES - - 0 - - YES - - - - - - -1 - - - File's Owner - - - -2 - - - - - 4 - - - - - - - YES - - YES - -1.CustomClassName - -1.IBPluginDependency - -2.CustomClassName - -2.IBPluginDependency - 4.IBPluginDependency - - - YES - IASKAppSettingsViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 10 - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 931 - - diff --git a/Frameworks/InAppSettingsKit/Xibs/IASKAppSettingsWebView.xib b/Frameworks/InAppSettingsKit/Xibs/IASKAppSettingsWebView.xib deleted file mode 100644 index b814f05..0000000 --- a/Frameworks/InAppSettingsKit/Xibs/IASKAppSettingsWebView.xib +++ /dev/null @@ -1,378 +0,0 @@ - - - - 1024 - 10F569 - 804 - 1038.29 - 461.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 123 - - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - YES - - - 274 - {320, 460} - - - 3 - MQA - - IBCocoaTouchFramework - - - {320, 460} - - - - IBCocoaTouchFramework - - - - - YES - - - view - - - - 3 - - - - webView - - - - 5 - - - - delegate - - - - 6 - - - - - YES - - 0 - - - - - - 1 - - - YES - - - - - - -1 - - - File's Owner - - - -2 - - - - - 4 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 1.IBEditorWindowLastContentRect - 1.IBPluginDependency - 4.IBPluginDependency - - - YES - IASKAppSettingsWebViewController - UIResponder - {{354, 412}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - YES - - - - - YES - - - YES - - - - 6 - - - - YES - - IASKAppSettingsWebViewController - UIViewController - - webView - UIWebView - - - webView - - webView - UIWebView - - - - IBProjectSource - ../InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIResponder - NSObject - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - UIWebView - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIWebView.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - ../InAppSettingsKitSampleApp.xcodeproj - 3 - 123 - - diff --git a/Frameworks/InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib b/Frameworks/InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib deleted file mode 100644 index f7df5a3..0000000 --- a/Frameworks/InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib +++ /dev/null @@ -1,313 +0,0 @@ - - - - 1024 - 10J869 - 1306 - 1038.35 - 461.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 301 - - - YES - IBUISlider - IBUITableViewCell - IBUIImageView - IBProxyObject - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 290 - - YES - - - 256 - - YES - - - 290 - {{52, 12}, {216, 23}} - - - - NO - YES - YES - IBCocoaTouchFramework - 0 - 0 - 0.5 - - - - 289 - {{289, 13}, {21, 21}} - - - NO - NO - 8 - NO - IBCocoaTouchFramework - - - - 292 - {{10, 13}, {21, 21}} - - - - NO - NO - 7 - NO - IBCocoaTouchFramework - - - {320, 44} - - - - - 3 - MCAwAA - - NO - YES - 4 - YES - IBCocoaTouchFramework - - - {320, 44} - - - - - 1 - MSAxIDEAA - - YES - NO - IBCocoaTouchFramework - 1 - 0 - - PSSliderSpecifier - - - - - YES - - - slider - - - - 12 - - - - maxImage - - - - 13 - - - - minImage - - - - 14 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - YES - - - - - - - - 3 - - - - - 6 - - - - - 9 - - - - - - - YES - - YES - -2.CustomClassName - 2.CustomClassName - 2.IBEditorWindowLastContentRect - 2.IBPluginDependency - 3.CustomClassName - 3.IBPluginDependency - 6.IBPluginDependency - 9.IBPluginDependency - - - YES - UIResponder - IASKPSSliderSpecifierViewCell - {{171, 925}, {320, 44}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - IASKSlider - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 14 - - - - YES - - IASKPSSliderSpecifierViewCell - UITableViewCell - - YES - - YES - maxImage - minImage - slider - - - YES - UIImageView - UIImageView - IASKSlider - - - - YES - - YES - maxImage - minImage - slider - - - YES - - maxImage - UIImageView - - - minImage - UIImageView - - - slider - IASKSlider - - - - - IBProjectSource - ./Classes/IASKPSSliderSpecifierViewCell.h - - - - IASKSlider - UISlider - - IBProjectSource - ./Classes/IASKSlider.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 301 - - diff --git a/Frameworks/InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib b/Frameworks/InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib deleted file mode 100644 index 0b143c7..0000000 --- a/Frameworks/InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib +++ /dev/null @@ -1,302 +0,0 @@ - - - - 1024 - 10J869 - 1306 - 1038.35 - 461.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 301 - - - YES - IBUITableViewCell - IBUILabel - IBUITextField - IBProxyObject - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 290 - - YES - - - 256 - - YES - - - 294 - {{9, 11}, {240, 21}} - - - NO - YES - NO - IBCocoaTouchFramework - Label - - Helvetica-Bold - 17 - 16 - - - 1 - MCAwIDAAA - - - 1 - 10 - - - - 291 - {{100, 11}, {201, 21}} - - - NO - NO - IBCocoaTouchFramework - hello - - 1 - MC4yNzQ1MDk4MiAwLjM3NjQ3MDYgMC41MjE1Njg2NgA - - - Helvetica - 17 - 16 - - 2 - YES - 10 - - IBCocoaTouchFramework - - - - {320, 44} - - - - 3 - MCAwAA - - NO - YES - 4 - YES - IBCocoaTouchFramework - - - {320, 44} - - - - 1 - MSAxIDEAA - - YES - NO - IBCocoaTouchFramework - 1 - 0 - - PSTextFieldSpecifier - - - - - YES - - - label - - - - 8 - - - - textField - - - - 9 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - YES - - - - - - - 3 - - - - - 4 - - - - - - - YES - - YES - -2.CustomClassName - 2.CustomClassName - 2.IBEditorWindowLastContentRect - 2.IBPluginDependency - 3.IBPluginDependency - 3.IBViewBoundsToFrameTransform - 4.CustomClassName - 4.IBPluginDependency - - - YES - UIResponder - IASKPSTextFieldSpecifierViewCell - {{107, 562}, {320, 44}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - P4AAAL+AAABBmAAAwfAAAA - - IASKTextField - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 9 - - - - YES - - IASKPSTextFieldSpecifierViewCell - UITableViewCell - - YES - - YES - label - textField - - - YES - UILabel - IASKTextField - - - - YES - - YES - label - textField - - - YES - - label - UILabel - - - textField - IASKTextField - - - - - IBProjectSource - ./Classes/IASKPSTextFieldSpecifierViewCell.h - - - - IASKTextField - UITextField - - IBProjectSource - ./Classes/IASKTextField.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 301 - - diff --git a/Frameworks/InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib b/Frameworks/InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib deleted file mode 100644 index 885c95a..0000000 --- a/Frameworks/InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib +++ /dev/null @@ -1,287 +0,0 @@ - - - - 768 - 10J869 - 1306 - 1038.35 - 461.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 301 - - - YES - IBUITableViewCell - IBUISwitch - IBUILabel - IBProxyObject - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 290 - - YES - - - 256 - - YES - - - 294 - {{9, 10}, {200, 21}} - - - NO - YES - NO - IBCocoaTouchFramework - Label - - Helvetica-Bold - 17 - 16 - - - 1 - MCAwIDAAA - - - 1 - 10 - - - - 289 - {{218, 8}, {94, 27}} - - - NO - YES - YES - IBCocoaTouchFramework - 0 - 0 - YES - - - {320, 44} - - - - 3 - MCAwAA - - NO - YES - 4 - YES - IBCocoaTouchFramework - - - {320, 44} - - - - 1 - MSAxIDEAA - - YES - NO - IBCocoaTouchFramework - 1 - 0 - - PSToggleSwitchSpecifier - - - - - YES - - - toggle - - - - 8 - - - - label - - - - 9 - - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - YES - - - - - Toggle Switch Specifier View Cell - PSToggleSwitchSpecifier - - - 3 - - - - - 4 - - - - - - - YES - - YES - -2.CustomClassName - 2.CustomClassName - 2.IBEditorWindowLastContentRect - 2.IBPluginDependency - 3.IBPluginDependency - 4.CustomClassName - 4.IBPluginDependency - - - YES - UIResponder - IASKPSToggleSwitchSpecifierViewCell - {{1676, 1200}, {320, 44}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - IASKSwitch - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 9 - - - - YES - - IASKPSToggleSwitchSpecifierViewCell - UITableViewCell - - YES - - YES - label - toggle - - - YES - UILabel - IASKSwitch - - - - YES - - YES - label - toggle - - - YES - - label - UILabel - - - toggle - IASKSwitch - - - - - IBProjectSource - ./Classes/IASKPSToggleSwitchSpecifierViewCell.h - - - - IASKSwitch - UISwitch - - IBProjectSource - ./Classes/IASKSwitch.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 301 - - diff --git a/Frameworks/InAppSettingsKit/Xibs/IASKSpecifierValuesView.xib b/Frameworks/InAppSettingsKit/Xibs/IASKSpecifierValuesView.xib deleted file mode 100644 index 9c7ff86..0000000 --- a/Frameworks/InAppSettingsKit/Xibs/IASKSpecifierValuesView.xib +++ /dev/null @@ -1,255 +0,0 @@ - - - - 768 - 10J567 - 1294 - 1038.35 - 462.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 294 - - - YES - IBProxyObject - IBUIView - IBUITableView - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 292 - - YES - - - 274 - {320, 460} - - - - - 10 - - 549453824 - {84, 1} - - YES - - YES - - - - TU0AKgAAAVjFzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/ -y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/ -xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/ -xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/ -xczU/8XM1P/FzNL/y9LY/8vS2P/FzNT/xczU/8XM1P/FzNT/xczS/8vS2P/L0tj/xczU/8XM1P/FzNT/ -xczU/8XM0v/L0tj/y9LY/8XM1P/FzNT/xczU/8XM1P/FzNL/y9LY/8vS2P8ADQEAAAMAAAABAFQAAAEB -AAMAAAABAAEAAAECAAMAAAAEAAAB+gEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABAAEAAAEXAAQAAAABAAABUAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAACAgAAAAAACAAIAAgACAABAAEAAQABA - - - - - - 3 - MCAwAA - - - groupTableViewBackgroundColor - - NO - YES - NO - IBCocoaTouchFramework - NO - 1 - 1 - 0 - YES - 44 - 10 - 10 - - - {320, 460} - - - - - 3 - MQA - - 2 - - - IBCocoaTouchFramework - - - - - YES - - - view - - - - 3 - - - - dataSource - - - - 5 - - - - delegate - - - - 6 - - - - _tableView - - - - 7 - - - - - YES - - 0 - - - - - - 1 - - - YES - - - - - - -1 - - - File's Owner - - - -2 - - - - - 4 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 1.IBEditorWindowLastContentRect - 1.IBPluginDependency - 4.IBPluginDependency - - - YES - IASKSpecifierValuesViewController - UIResponder - {{556, 432}, {320, 460}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 7 - - - - YES - - IASKSpecifierValuesViewController - UIViewController - - _tableView - UITableView - - - _tableView - - _tableView - UITableView - - - - IBProjectSource - ./Classes/IASKSpecifierValuesViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 294 - - diff --git a/Frameworks/MBProgressHUD b/Frameworks/MBProgressHUD deleted file mode 160000 index 09284ec..0000000 --- a/Frameworks/MBProgressHUD +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 09284ec788276d2127fb077d7385d04468d34bb3 diff --git a/Frameworks/Reachability/Airport.png b/Frameworks/Reachability/Airport.png deleted file mode 100644 index 76e1256..0000000 Binary files a/Frameworks/Reachability/Airport.png and /dev/null differ diff --git a/Frameworks/Reachability/Classes/Reachability.h b/Frameworks/Reachability/Classes/Reachability.h deleted file mode 100644 index 317982f..0000000 --- a/Frameworks/Reachability/Classes/Reachability.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - - File: Reachability.h - Abstract: Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - - Version: 2.2 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. - ("Apple") in consideration of your agreement to the following terms, and your - use, installation, modification or redistribution of this Apple software - constitutes acceptance of these terms. If you do not agree with these terms, - please do not use, install, modify or redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and subject - to these terms, Apple grants you a personal, non-exclusive license, under - Apple's copyrights in this original Apple software (the "Apple Software"), to - use, reproduce, modify and redistribute the Apple Software, with or without - modifications, in source and/or binary forms; provided that if you redistribute - the Apple Software in its entirety and without modifications, you must retain - this notice and the following text and disclaimers in all such redistributions - of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may be used - to endorse or promote products derived from the Apple Software without specific - prior written permission from Apple. Except as expressly stated in this notice, - no other rights or licenses, express or implied, are granted by Apple herein, - including but not limited to any patent rights that may be infringed by your - derivative works or by other works in which the Apple Software may be - incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO - WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED - WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN - COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR - DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF - CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF - APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2010 Apple Inc. All Rights Reserved. - -*/ - - -#import -#import - -typedef enum { - NotReachable = 0, - ReachableViaWiFi, - ReachableViaWWAN -} NetworkStatus; -#define kReachabilityChangedNotification @"kNetworkReachabilityChangedNotification" - -@interface Reachability: NSObject -{ - BOOL localWiFiRef; - SCNetworkReachabilityRef reachabilityRef; -} - -//reachabilityWithHostName- Use to check the reachability of a particular host name. -+ (Reachability*) reachabilityWithHostName: (NSString*) hostName; - -//reachabilityWithAddress- Use to check the reachability of a particular IP address. -+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) hostAddress; - -//reachabilityForInternetConnection- checks whether the default route is available. -// Should be used by applications that do not connect to a particular host -+ (Reachability*) reachabilityForInternetConnection; - -//reachabilityForLocalWiFi- checks whether a local wifi connection is available. -+ (Reachability*) reachabilityForLocalWiFi; - -//Start listening for reachability notifications on the current run loop -- (BOOL) startNotifier; -- (void) stopNotifier; - -- (NetworkStatus) currentReachabilityStatus; -//WWAN may be available, but not active until a connection has been established. -//WiFi may require a connection for VPN on Demand. -- (BOOL) connectionRequired; -@end - - diff --git a/Frameworks/Reachability/Classes/Reachability.m b/Frameworks/Reachability/Classes/Reachability.m deleted file mode 100644 index 5ecdcf4..0000000 --- a/Frameworks/Reachability/Classes/Reachability.m +++ /dev/null @@ -1,273 +0,0 @@ -/* - - File: Reachability.m - Abstract: Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - - Version: 2.2 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. - ("Apple") in consideration of your agreement to the following terms, and your - use, installation, modification or redistribution of this Apple software - constitutes acceptance of these terms. If you do not agree with these terms, - please do not use, install, modify or redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and subject - to these terms, Apple grants you a personal, non-exclusive license, under - Apple's copyrights in this original Apple software (the "Apple Software"), to - use, reproduce, modify and redistribute the Apple Software, with or without - modifications, in source and/or binary forms; provided that if you redistribute - the Apple Software in its entirety and without modifications, you must retain - this notice and the following text and disclaimers in all such redistributions - of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may be used - to endorse or promote products derived from the Apple Software without specific - prior written permission from Apple. Except as expressly stated in this notice, - no other rights or licenses, express or implied, are granted by Apple herein, - including but not limited to any patent rights that may be infringed by your - derivative works or by other works in which the Apple Software may be - incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO - WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED - WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN - COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR - DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF - CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF - APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2010 Apple Inc. All Rights Reserved. - -*/ - -#import -#import -#import -#import -#import -#import - -#import - -#import "Reachability.h" - -#define kShouldPrintReachabilityFlags 1 - -static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, const char* comment) -{ -#if kShouldPrintReachabilityFlags - - NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n", - (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', - (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', - - (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', - (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', - (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', - (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-', - comment - ); -#endif -} - - -@implementation Reachability -static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) -{ - #pragma unused (target, flags) - NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback"); - NSCAssert([(NSObject*) info isKindOfClass: [Reachability class]], @"info was wrong class in ReachabilityCallback"); - - //We're on the main RunLoop, so an NSAutoreleasePool is not necessary, but is added defensively - // in case someon uses the Reachablity object in a different thread. - NSAutoreleasePool* myPool = [[NSAutoreleasePool alloc] init]; - - Reachability* noteObject = (Reachability*) info; - // Post a notification to notify the client that the network reachability changed. - [[NSNotificationCenter defaultCenter] postNotificationName: kReachabilityChangedNotification object: noteObject]; - - [myPool release]; -} - -- (BOOL) startNotifier -{ - BOOL retVal = NO; - SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL}; - if(SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context)) - { - if(SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) - { - retVal = YES; - } - } - return retVal; -} - -- (void) stopNotifier -{ - if(reachabilityRef!= NULL) - { - SCNetworkReachabilityUnscheduleFromRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - } -} - -- (void) dealloc -{ - [self stopNotifier]; - if(reachabilityRef!= NULL) - { - CFRelease(reachabilityRef); - } - [super dealloc]; -} - -+ (Reachability*) reachabilityWithHostName: (NSString*) hostName; -{ - Reachability* retVal = NULL; - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, [hostName UTF8String]); - if(reachability!= NULL) - { - retVal= [[[self alloc] init] autorelease]; - if(retVal!= NULL) - { - retVal->reachabilityRef = reachability; - retVal->localWiFiRef = NO; - } - } - return retVal; -} - -+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) hostAddress; -{ - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)hostAddress); - Reachability* retVal = NULL; - if(reachability!= NULL) - { - retVal= [[[self alloc] init] autorelease]; - if(retVal!= NULL) - { - retVal->reachabilityRef = reachability; - retVal->localWiFiRef = NO; - } - } - return retVal; -} - -+ (Reachability*) reachabilityForInternetConnection; -{ - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - return [self reachabilityWithAddress: &zeroAddress]; -} - -+ (Reachability*) reachabilityForLocalWiFi; -{ - struct sockaddr_in localWifiAddress; - bzero(&localWifiAddress, sizeof(localWifiAddress)); - localWifiAddress.sin_len = sizeof(localWifiAddress); - localWifiAddress.sin_family = AF_INET; - // IN_LINKLOCALNETNUM is defined in as 169.254.0.0 - localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM); - Reachability* retVal = [self reachabilityWithAddress: &localWifiAddress]; - if(retVal!= NULL) - { - retVal->localWiFiRef = YES; - } - return retVal; -} - -#pragma mark Network Flag Handling - -- (NetworkStatus) localWiFiStatusForFlags: (SCNetworkReachabilityFlags) flags -{ - PrintReachabilityFlags(flags, "localWiFiStatusForFlags"); - - BOOL retVal = NotReachable; - if((flags & kSCNetworkReachabilityFlagsReachable) && (flags & kSCNetworkReachabilityFlagsIsDirect)) - { - retVal = ReachableViaWiFi; - } - return retVal; -} - -- (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags -{ - PrintReachabilityFlags(flags, "networkStatusForFlags"); - if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) - { - // if target host is not reachable - return NotReachable; - } - - BOOL retVal = NotReachable; - - if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) - { - // if target host is reachable and no connection is required - // then we'll assume (for now) that your on Wi-Fi - retVal = ReachableViaWiFi; - } - - - if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) - { - // ... and the connection is on-demand (or on-traffic) if the - // calling application is using the CFSocketStream or higher APIs - - if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) - { - // ... and no [user] intervention is needed - retVal = ReachableViaWiFi; - } - } - - if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) - { - // ... but WWAN connections are OK if the calling application - // is using the CFNetwork (CFSocketStream?) APIs. - retVal = ReachableViaWWAN; - } - return retVal; -} - -- (BOOL) connectionRequired; -{ - NSAssert(reachabilityRef != NULL, @"connectionRequired called with NULL reachabilityRef"); - SCNetworkReachabilityFlags flags; - if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) - { - return (flags & kSCNetworkReachabilityFlagsConnectionRequired); - } - return NO; -} - -- (NetworkStatus) currentReachabilityStatus -{ - NSAssert(reachabilityRef != NULL, @"currentNetworkStatus called with NULL reachabilityRef"); - NetworkStatus retVal = NotReachable; - SCNetworkReachabilityFlags flags; - if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags)) - { - if(localWiFiRef) - { - retVal = [self localWiFiStatusForFlags: flags]; - } - else - { - retVal = [self networkStatusForFlags: flags]; - } - } - return retVal; -} -@end diff --git a/Frameworks/Reachability/Classes/ReachabilityAppDelegate.h b/Frameworks/Reachability/Classes/ReachabilityAppDelegate.h deleted file mode 100644 index f0669d0..0000000 --- a/Frameworks/Reachability/Classes/ReachabilityAppDelegate.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - -File: ReachabilityAppDelegate.h -Abstract: The application's controller. - -Version: 2.2 - -Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. -("Apple") in consideration of your agreement to the following terms, and your -use, installation, modification or redistribution of this Apple software -constitutes acceptance of these terms. If you do not agree with these terms, -please do not use, install, modify or redistribute this Apple software. - -In consideration of your agreement to abide by the following terms, and subject -to these terms, Apple grants you a personal, non-exclusive license, under -Apple's copyrights in this original Apple software (the "Apple Software"), to -use, reproduce, modify and redistribute the Apple Software, with or without -modifications, in source and/or binary forms; provided that if you redistribute -the Apple Software in its entirety and without modifications, you must retain -this notice and the following text and disclaimers in all such redistributions -of the Apple Software. -Neither the name, trademarks, service marks or logos of Apple Inc. may be used -to endorse or promote products derived from the Apple Software without specific -prior written permission from Apple. Except as expressly stated in this notice, -no other rights or licenses, express or implied, are granted by Apple herein, -including but not limited to any patent rights that may be infringed by your -derivative works or by other works in which the Apple Software may be -incorporated. - -The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO -WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED -WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN -COMBINATION WITH YOUR PRODUCTS. - -IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR -DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF -CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF -APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Copyright (C) 2010 Apple Inc. All Rights Reserved. - -*/ - -#import - -@class Reachability; -@interface ReachabilityAppDelegate: NSObject { - IBOutlet UIWindow* window; - IBOutlet UIView* contentView; - IBOutlet UILabel* summaryLabel; - - IBOutlet UITextField* remoteHostLabel; - IBOutlet UIImageView* remoteHostIcon; - IBOutlet UITextField* remoteHostStatusField; - - IBOutlet UIImageView* internetConnectionIcon; - IBOutlet UITextField* internetConnectionStatusField; - - IBOutlet UIImageView* localWiFiConnectionIcon; - IBOutlet UITextField* localWiFiConnectionStatusField; - - Reachability* hostReach; - Reachability* internetReach; - Reachability* wifiReach; -} -@end diff --git a/Frameworks/Reachability/Classes/ReachabilityAppDelegate.m b/Frameworks/Reachability/Classes/ReachabilityAppDelegate.m deleted file mode 100644 index d6affc9..0000000 --- a/Frameworks/Reachability/Classes/ReachabilityAppDelegate.m +++ /dev/null @@ -1,158 +0,0 @@ -/* - -File: ReachabilityAppDelegate.m -Abstract: The application's controller. - -Version: 2.2 - -Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. -("Apple") in consideration of your agreement to the following terms, and your -use, installation, modification or redistribution of this Apple software -constitutes acceptance of these terms. If you do not agree with these terms, -please do not use, install, modify or redistribute this Apple software. - -In consideration of your agreement to abide by the following terms, and subject -to these terms, Apple grants you a personal, non-exclusive license, under -Apple's copyrights in this original Apple software (the "Apple Software"), to -use, reproduce, modify and redistribute the Apple Software, with or without -modifications, in source and/or binary forms; provided that if you redistribute -the Apple Software in its entirety and without modifications, you must retain -this notice and the following text and disclaimers in all such redistributions -of the Apple Software. -Neither the name, trademarks, service marks or logos of Apple Inc. may be used -to endorse or promote products derived from the Apple Software without specific -prior written permission from Apple. Except as expressly stated in this notice, -no other rights or licenses, express or implied, are granted by Apple herein, -including but not limited to any patent rights that may be infringed by your -derivative works or by other works in which the Apple Software may be -incorporated. - -The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO -WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED -WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN -COMBINATION WITH YOUR PRODUCTS. - -IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR -DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF -CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF -APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Copyright (C) 2010 Apple Inc. All Rights Reserved. - -*/ - -#import "ReachabilityAppDelegate.h" -#import "Reachability.h" - -@implementation ReachabilityAppDelegate - -- (void) configureTextField: (UITextField*) textField imageView: (UIImageView*) imageView reachability: (Reachability*) curReach -{ - NetworkStatus netStatus = [curReach currentReachabilityStatus]; - BOOL connectionRequired= [curReach connectionRequired]; - NSString* statusString= @""; - switch (netStatus) - { - case NotReachable: - { - statusString = @"Access Not Available"; - imageView.image = [UIImage imageNamed: @"stop-32.png"] ; - //Minor interface detail- connectionRequired may return yes, even when the host is unreachable. We cover that up here... - connectionRequired= NO; - break; - } - - case ReachableViaWWAN: - { - statusString = @"Reachable WWAN"; - imageView.image = [UIImage imageNamed: @"WWAN5.png"]; - break; - } - case ReachableViaWiFi: - { - statusString= @"Reachable WiFi"; - imageView.image = [UIImage imageNamed: @"Airport.png"]; - break; - } - } - if(connectionRequired) - { - statusString= [NSString stringWithFormat: @"%@, Connection Required", statusString]; - } - textField.text= statusString; -} - -- (void) updateInterfaceWithReachability: (Reachability*) curReach -{ - if(curReach == hostReach) - { - [self configureTextField: remoteHostStatusField imageView: remoteHostIcon reachability: curReach]; - NetworkStatus netStatus = [curReach currentReachabilityStatus]; - BOOL connectionRequired= [curReach connectionRequired]; - - summaryLabel.hidden = (netStatus != ReachableViaWWAN); - NSString* baseLabel= @""; - if(connectionRequired) - { - baseLabel= @"Cellular data network is available.\n Internet traffic will be routed through it after a connection is established."; - } - else - { - baseLabel= @"Cellular data network is active.\n Internet traffic will be routed through it."; - } - summaryLabel.text= baseLabel; - } - if(curReach == internetReach) - { - [self configureTextField: internetConnectionStatusField imageView: internetConnectionIcon reachability: curReach]; - } - if(curReach == wifiReach) - { - [self configureTextField: localWiFiConnectionStatusField imageView: localWiFiConnectionIcon reachability: curReach]; - } - -} - -//Called by Reachability whenever status changes. -- (void) reachabilityChanged: (NSNotification* )note -{ - Reachability* curReach = [note object]; - NSParameterAssert([curReach isKindOfClass: [Reachability class]]); - [self updateInterfaceWithReachability: curReach]; -} - - -- (void) applicationDidFinishLaunching: (UIApplication* )application -{ - #pragma unused(application) - contentView.backgroundColor = [UIColor groupTableViewBackgroundColor]; - - summaryLabel.hidden = YES; - - - // Observe the kNetworkReachabilityChangedNotification. When that notification is posted, the - // method "reachabilityChanged" will be called. - [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; - - //Change the host name here to change the server your monitoring - remoteHostLabel.text = [NSString stringWithFormat: @"Remote Host: %@", @"www.apple.com"]; - hostReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain]; - [hostReach startNotifier]; - [self updateInterfaceWithReachability: hostReach]; - - internetReach = [[Reachability reachabilityForInternetConnection] retain]; - [internetReach startNotifier]; - [self updateInterfaceWithReachability: internetReach]; - - wifiReach = [[Reachability reachabilityForLocalWiFi] retain]; - [wifiReach startNotifier]; - [self updateInterfaceWithReachability: wifiReach]; - - [window makeKeyAndVisible]; - -} -@end diff --git a/Frameworks/Reachability/Default.png b/Frameworks/Reachability/Default.png deleted file mode 100644 index ab51ddb..0000000 Binary files a/Frameworks/Reachability/Default.png and /dev/null differ diff --git a/Frameworks/Reachability/English.lproj/MainWindow.xib b/Frameworks/Reachability/English.lproj/MainWindow.xib deleted file mode 100644 index af5f331..0000000 --- a/Frameworks/Reachability/English.lproj/MainWindow.xib +++ /dev/null @@ -1,568 +0,0 @@ - - - - 512 - 9J61 - 677 - 949.46 - 353.00 - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - - - IBFirstResponder - - - - - 1292 - - YES - - - 1298 - - YES - - - 1306 - {{8, 318}, {303, 99}} - - NO - YES - NO - Q2VsbHVsYXIgZGF0YSBuZXR3b3JrIGlzIGF2YWlsYWJsZS4KSW50ZXJuZXQgdHJhZmZpYyB3aWxsIGJl -IHJvdXRlZCB0aHJvdWdoIGl0Lg - - 1 - MSAwIDAAA - - - 1 - NO - 1.400000e+01 - 0 - 1 - - - - 1316 - {{20, 61}, {32, 32}} - - NO - NO - 4 - NO - - - - 1316 - {{20, 155}, {32, 32}} - - NO - NO - 4 - NO - - - - 1316 - {{60, 62}, {240, 31}} - - NO - NO - 0 - - 3 - - 3 - MAA - - 2 - - - YES - YES - 1.200000e+01 - - - - - 1316 - {{20, 25}, {280, 29}} - - NO - NO - 0 - Remote Host: - - 3 - MAA - - - - Helvetica - 1.900000e+01 - 16 - - YES - YES - 2.900000e+01 - - - - - 1316 - {{60, 155}, {240, 31}} - - NO - NO - 0 - - 3 - - 3 - MAA - - - YES - YES - 1.200000e+01 - - - - - 1316 - {{20, 117}, {280, 29}} - - NO - NO - 0 - TCP/IP Routing Available - - 3 - MAA - - - - YES - YES - 2.900000e+01 - - - - - 1316 - {{20, 253}, {32, 32}} - - NO - NO - 4 - NO - - - - 1316 - {{60, 254}, {240, 31}} - - NO - NO - 0 - - 3 - - 3 - MAA - - - YES - YES - 1.200000e+01 - - - - - 1316 - {{20, 216}, {280, 29}} - - NO - NO - 0 - Local WiFi - - 3 - MAA - - - - YES - YES - 2.900000e+01 - - - - {320, 480} - - - 3 - MQA - - - NO - NO - - - - {320, 480} - - - 1 - MSAxIDEAA - - NO - NO - - - - - YES - - - delegate - - - - 5 - - - - window - - - - 6 - - - - contentView - - - - 8 - - - - summaryLabel - - - - 10 - - - - internetConnectionStatusField - - - - 21 - - - - remoteHostIcon - - - - 24 - - - - remoteHostLabel - - - - 27 - - - - remoteHostStatusField - - - - 28 - - - - internetConnectionIcon - - - - 30 - - - - localWiFiConnectionIcon - - - - 35 - - - - localWiFiConnectionStatusField - - - - 36 - - - - - YES - - 0 - - YES - - - - - - 2 - - - YES - - - - - - -1 - - - RmlsZSdzIE93bmVyA - - - 4 - - - ReachabilityAppDelegate - - - 7 - - - YES - - - - - - - - - - - - - - - 9 - - - - - -2 - - - - - 11 - - - - - 12 - - - - - 13 - - - - - 15 - - - - - 16 - - - - - 17 - - - - - 18 - - - - - 19 - - - - - 29 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 11.IBPluginDependency - 12.IBPluginDependency - 13.IBPluginDependency - 15.IBPluginDependency - 16.IBPluginDependency - 17.IBPluginDependency - 18.IBPluginDependency - 19.IBPluginDependency - 2.IBAttributePlaceholdersKey - 2.IBEditorWindowLastContentRect - 2.IBPluginDependency - 2.UIWindow.visibleAtLaunch - 29.IBPluginDependency - 4.CustomClassName - 4.IBPluginDependency - 7.IBPluginDependency - 9.IBPluginDependency - - - YES - UIApplication - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - YES - - YES - - - YES - - - {{287, 643}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - ReachabilityAppDelegate - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - YES - - - YES - - - - - YES - - YES - - - YES - - - - 36 - - - - YES - - ReachabilityAppDelegate - NSObject - - YES - - YES - contentView - internetConnectionIcon - internetConnectionStatusField - localWiFiConnectionIcon - localWiFiConnectionStatusField - remoteHostIcon - remoteHostLabel - remoteHostStatusField - summaryLabel - window - - - YES - UIView - UIImageView - UITextField - UIImageView - UITextField - UIImageView - UITextField - UITextField - UILabel - UIWindow - - - - IBProjectSource - Classes/ReachabilityAppDelegate.h - - - - - 0 - Reachability.xcodeproj - 3 - 3.0 - - diff --git a/Frameworks/Reachability/Images/Icon-72.png b/Frameworks/Reachability/Images/Icon-72.png deleted file mode 100644 index b154505..0000000 Binary files a/Frameworks/Reachability/Images/Icon-72.png and /dev/null differ diff --git a/Frameworks/Reachability/Images/Icon-Small-50.png b/Frameworks/Reachability/Images/Icon-Small-50.png deleted file mode 100644 index e7dbbf4..0000000 Binary files a/Frameworks/Reachability/Images/Icon-Small-50.png and /dev/null differ diff --git a/Frameworks/Reachability/Images/Icon-Small.png b/Frameworks/Reachability/Images/Icon-Small.png deleted file mode 100644 index 675c18f..0000000 Binary files a/Frameworks/Reachability/Images/Icon-Small.png and /dev/null differ diff --git a/Frameworks/Reachability/Images/Icon-Small@2x.png b/Frameworks/Reachability/Images/Icon-Small@2x.png deleted file mode 100644 index e740019..0000000 Binary files a/Frameworks/Reachability/Images/Icon-Small@2x.png and /dev/null differ diff --git a/Frameworks/Reachability/Images/Icon.png b/Frameworks/Reachability/Images/Icon.png deleted file mode 100644 index dfc83b7..0000000 Binary files a/Frameworks/Reachability/Images/Icon.png and /dev/null differ diff --git a/Frameworks/Reachability/Images/Icon@2x.png b/Frameworks/Reachability/Images/Icon@2x.png deleted file mode 100644 index 21e17cc..0000000 Binary files a/Frameworks/Reachability/Images/Icon@2x.png and /dev/null differ diff --git a/Frameworks/Reachability/Images/iTunesArtwork b/Frameworks/Reachability/Images/iTunesArtwork deleted file mode 100644 index 6ad7a1f..0000000 Binary files a/Frameworks/Reachability/Images/iTunesArtwork and /dev/null differ diff --git a/Frameworks/Reachability/Info.plist b/Frameworks/Reachability/Info.plist deleted file mode 100644 index 334d2bf..0000000 --- a/Frameworks/Reachability/Info.plist +++ /dev/null @@ -1,39 +0,0 @@ - - - - - CFBundleIconFiles - - Icon.png - Icon@2x.png - Icon-72.png - Icon-Small.png - Icon-Small-50.png - Icon-Small@2x.png - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - Reachability - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 2.2 - NSMainNibFile - MainWindow - UIStatusBarHidden - - LSRequiresIPhoneOS - - - diff --git a/Frameworks/Reachability/Network.png b/Frameworks/Reachability/Network.png deleted file mode 100644 index f5679c3..0000000 Binary files a/Frameworks/Reachability/Network.png and /dev/null differ diff --git a/Frameworks/Reachability/Reachability.xcodeproj/project.pbxproj b/Frameworks/Reachability/Reachability.xcodeproj/project.pbxproj deleted file mode 100644 index 608235c..0000000 --- a/Frameworks/Reachability/Reachability.xcodeproj/project.pbxproj +++ /dev/null @@ -1,376 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 45; - objects = { - -/* Begin PBXBuildFile section */ - 02084CDB11E53A7500199A4D /* iTunesArtwork in Resources */ = {isa = PBXBuildFile; fileRef = 02084CDA11E53A7500199A4D /* iTunesArtwork */; }; - 025B4FF211CAE2EB004E3314 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = 025B4FEB11CAE2EB004E3314 /* Icon-72.png */; }; - 025B4FF311CAE2EB004E3314 /* Icon-Small-50.png in Resources */ = {isa = PBXBuildFile; fileRef = 025B4FEC11CAE2EB004E3314 /* Icon-Small-50.png */; }; - 025B4FF411CAE2EB004E3314 /* Icon-Small.png in Resources */ = {isa = PBXBuildFile; fileRef = 025B4FED11CAE2EB004E3314 /* Icon-Small.png */; }; - 025B4FF511CAE2EB004E3314 /* Icon-Small@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 025B4FEE11CAE2EB004E3314 /* Icon-Small@2x.png */; }; - 025B4FF611CAE2EB004E3314 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 025B4FEF11CAE2EB004E3314 /* Icon.png */; }; - 025B4FF711CAE2EB004E3314 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 025B4FF011CAE2EB004E3314 /* Icon@2x.png */; }; - 025B501511CAE3CD004E3314 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 025B501411CAE3CD004E3314 /* MainWindow.xib */; }; - 02C021BA0FA263C7006AFB5F /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 02C021B90FA263C7006AFB5F /* Reachability.m */; }; - 1D3623260D0F684500981E51 /* ReachabilityAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* ReachabilityAppDelegate.m */; }; - 1D4F2F9A0D10AC310045FB13 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 1D4F2F990D10AC310045FB13 /* Default.png */; }; - 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; - 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - 414AF4950D5FDBA400072C1E /* WWAN5.png in Resources */ = {isa = PBXBuildFile; fileRef = 414AF4930D5FDBA400072C1E /* WWAN5.png */; }; - 414AF4960D5FDBA400072C1E /* Airport.png in Resources */ = {isa = PBXBuildFile; fileRef = 414AF4940D5FDBA400072C1E /* Airport.png */; }; - 418B52B50D64ED9A00D0F015 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 418561090D5E57F70036FBAB /* SystemConfiguration.framework */; }; - 418B52B70D64EDA900D0F015 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - 41A855100D62A5670049A9B9 /* stop-32.png in Resources */ = {isa = PBXBuildFile; fileRef = 41A8550F0D62A5670049A9B9 /* stop-32.png */; }; - 844866C10DB922FC009556CD /* icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 844866C00DB922FC009556CD /* icon.png */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 02084CDA11E53A7500199A4D /* iTunesArtwork */ = {isa = PBXFileReference; lastKnownFileType = file; path = iTunesArtwork; sourceTree = ""; }; - 025B4FEB11CAE2EB004E3314 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72.png"; sourceTree = ""; }; - 025B4FEC11CAE2EB004E3314 /* Icon-Small-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-50.png"; sourceTree = ""; }; - 025B4FED11CAE2EB004E3314 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small.png"; sourceTree = ""; }; - 025B4FEE11CAE2EB004E3314 /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small@2x.png"; sourceTree = ""; }; - 025B4FEF11CAE2EB004E3314 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; }; - 025B4FF011CAE2EB004E3314 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = ""; }; - 02C021B80FA263C7006AFB5F /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; - 02C021B90FA263C7006AFB5F /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = ""; }; - 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 1D3623240D0F684500981E51 /* ReachabilityAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = ReachabilityAppDelegate.h; sourceTree = ""; tabWidth = 4; usesTabs = 0; }; - 1D3623250D0F684500981E51 /* ReachabilityAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = ReachabilityAppDelegate.m; sourceTree = ""; tabWidth = 4; usesTabs = 0; }; - 1D4F2F990D10AC310045FB13 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; - 1D6058910D05DD3D006BFB54 /* Reachability.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Reachability.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 28CE467A0DA6896A003A8F85 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainWindow.xib; sourceTree = ""; }; - 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 32CA4F630368D1EE00C91783 /* Reachability_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability_Prefix.pch; sourceTree = ""; }; - 414AF4930D5FDBA400072C1E /* WWAN5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = WWAN5.png; sourceTree = ""; }; - 414AF4940D5FDBA400072C1E /* Airport.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Airport.png; sourceTree = ""; }; - 418561090D5E57F70036FBAB /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - 41A8550F0D62A5670049A9B9 /* stop-32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "stop-32.png"; sourceTree = ""; }; - 41AD131B0D60E5BE00475B51 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 844866C00DB922FC009556CD /* icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon.png; sourceTree = ""; }; - 844866CF0DB9233D009556CD /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ReadMe.txt; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, - 418B52B50D64ED9A00D0F015 /* SystemConfiguration.framework in Frameworks */, - 418B52B70D64EDA900D0F015 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 025B4FEA11CAE2EB004E3314 /* Images */ = { - isa = PBXGroup; - children = ( - 02084CDA11E53A7500199A4D /* iTunesArtwork */, - 025B4FEB11CAE2EB004E3314 /* Icon-72.png */, - 025B4FEC11CAE2EB004E3314 /* Icon-Small-50.png */, - 025B4FED11CAE2EB004E3314 /* Icon-Small.png */, - 025B4FEE11CAE2EB004E3314 /* Icon-Small@2x.png */, - 025B4FEF11CAE2EB004E3314 /* Icon.png */, - 025B4FF011CAE2EB004E3314 /* Icon@2x.png */, - ); - path = Images; - sourceTree = ""; - }; - 080E96DDFE201D6D7F000001 /* Classes */ = { - isa = PBXGroup; - children = ( - 1D3623240D0F684500981E51 /* ReachabilityAppDelegate.h */, - 1D3623250D0F684500981E51 /* ReachabilityAppDelegate.m */, - 02C021B80FA263C7006AFB5F /* Reachability.h */, - 02C021B90FA263C7006AFB5F /* Reachability.m */, - ); - path = Classes; - sourceTree = ""; - }; - 19C28FACFE9D520D11CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 1D6058910D05DD3D006BFB54 /* Reachability.app */, - ); - name = Products; - sourceTree = ""; - }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { - isa = PBXGroup; - children = ( - 844866CF0DB9233D009556CD /* ReadMe.txt */, - 080E96DDFE201D6D7F000001 /* Classes */, - 29B97315FDCFA39411CA2CEA /* Other Sources */, - 29B97317FDCFA39411CA2CEA /* Resources */, - 29B97323FDCFA39411CA2CEA /* Frameworks */, - 19C28FACFE9D520D11CA2CBB /* Products */, - ); - name = CustomTemplate; - sourceTree = ""; - }; - 29B97315FDCFA39411CA2CEA /* Other Sources */ = { - isa = PBXGroup; - children = ( - 32CA4F630368D1EE00C91783 /* Reachability_Prefix.pch */, - 29B97316FDCFA39411CA2CEA /* main.m */, - ); - name = "Other Sources"; - sourceTree = ""; - }; - 29B97317FDCFA39411CA2CEA /* Resources */ = { - isa = PBXGroup; - children = ( - 025B4FEA11CAE2EB004E3314 /* Images */, - 844866C00DB922FC009556CD /* icon.png */, - 025B501411CAE3CD004E3314 /* MainWindow.xib */, - 41A8550F0D62A5670049A9B9 /* stop-32.png */, - 414AF4930D5FDBA400072C1E /* WWAN5.png */, - 414AF4940D5FDBA400072C1E /* Airport.png */, - 1D4F2F990D10AC310045FB13 /* Default.png */, - 41AD131B0D60E5BE00475B51 /* Info.plist */, - ); - name = Resources; - sourceTree = ""; - }; - 29B97323FDCFA39411CA2CEA /* Frameworks */ = { - isa = PBXGroup; - children = ( - 418561090D5E57F70036FBAB /* SystemConfiguration.framework */, - 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, - 1D30AB110D05D00D00671497 /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 1D6058900D05DD3D006BFB54 /* Reachability */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Reachability" */; - buildPhases = ( - 1D60588D0D05DD3D006BFB54 /* Resources */, - 1D60588E0D05DD3D006BFB54 /* Sources */, - 1D60588F0D05DD3D006BFB54 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Reachability; - productName = foo; - productReference = 1D6058910D05DD3D006BFB54 /* Reachability.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 29B97313FDCFA39411CA2CEA /* Project object */ = { - isa = PBXProject; - buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Reachability" */; - compatibilityVersion = "Xcode 3.1"; - hasScannedForEncodings = 1; - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 1D6058900D05DD3D006BFB54 /* Reachability */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1D60588D0D05DD3D006BFB54 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1D4F2F9A0D10AC310045FB13 /* Default.png in Resources */, - 414AF4950D5FDBA400072C1E /* WWAN5.png in Resources */, - 414AF4960D5FDBA400072C1E /* Airport.png in Resources */, - 41A855100D62A5670049A9B9 /* stop-32.png in Resources */, - 025B501511CAE3CD004E3314 /* MainWindow.xib in Resources */, - 844866C10DB922FC009556CD /* icon.png in Resources */, - 025B4FF211CAE2EB004E3314 /* Icon-72.png in Resources */, - 025B4FF311CAE2EB004E3314 /* Icon-Small-50.png in Resources */, - 025B4FF411CAE2EB004E3314 /* Icon-Small.png in Resources */, - 025B4FF511CAE2EB004E3314 /* Icon-Small@2x.png in Resources */, - 025B4FF611CAE2EB004E3314 /* Icon.png in Resources */, - 025B4FF711CAE2EB004E3314 /* Icon@2x.png in Resources */, - 02084CDB11E53A7500199A4D /* iTunesArtwork in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1D60588E0D05DD3D006BFB54 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1D60589B0D05DD56006BFB54 /* main.m in Sources */, - 1D3623260D0F684500981E51 /* ReachabilityAppDelegate.m in Sources */, - 02C021BA0FA263C7006AFB5F /* Reachability.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 025B501411CAE3CD004E3314 /* MainWindow.xib */ = { - isa = PBXVariantGroup; - children = ( - 28CE467A0DA6896A003A8F85 /* English */, - ); - name = MainWindow.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 1D6058940D05DD3E006BFB54 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - }; - name = Debug; - }; - 1D6058950D05DD3E006BFB54 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - }; - name = Release; - }; - C01FCF4F08A954540054247B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_DYNAMIC_NO_PIC = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = Reachability_Prefix.pch; - GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; - GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES; - GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INHIBIT_ALL_WARNINGS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PEDANTIC = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_STRICT_SELECTOR_MATCH = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_PARAMETER = YES; - GCC_WARN_UNUSED_VALUE = YES; - INFOPLIST_FILE = Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 3.2; - ONLY_ACTIVE_ARCH = YES; - PREBINDING = NO; - PRODUCT_NAME = Reachability; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - SDKROOT = iphoneos4.0; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - C01FCF5008A954540054247B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_RESOURCE_RULES_PATH = ""; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = s; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = Reachability_Prefix.pch; - GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; - GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; - GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES; - GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; - GCC_WARN_INHIBIT_ALL_WARNINGS = NO; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PEDANTIC = NO; - GCC_WARN_PROTOTYPE_CONVERSION = NO; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_STRICT_SELECTOR_MATCH = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_PARAMETER = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 3.2; - OTHER_CODE_SIGN_FLAGS = ""; - PREBINDING = NO; - PRODUCT_NAME = Reachability; - SDKROOT = iphoneos4.0; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Reachability" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1D6058940D05DD3E006BFB54 /* Debug */, - 1D6058950D05DD3E006BFB54 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Reachability" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C01FCF4F08A954540054247B /* Debug */, - C01FCF5008A954540054247B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; -} diff --git a/Frameworks/Reachability/Reachability_Prefix.pch b/Frameworks/Reachability/Reachability_Prefix.pch deleted file mode 100644 index 05b388a..0000000 --- a/Frameworks/Reachability/Reachability_Prefix.pch +++ /dev/null @@ -1,52 +0,0 @@ -/* - -File: Reachability_Prefix.pch -Abstract: This file is included for support purposes and isn't necessary for -understanding this sample. - -Version: 2.2 - -Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. -("Apple") in consideration of your agreement to the following terms, and your -use, installation, modification or redistribution of this Apple software -constitutes acceptance of these terms. If you do not agree with these terms, -please do not use, install, modify or redistribute this Apple software. - -In consideration of your agreement to abide by the following terms, and subject -to these terms, Apple grants you a personal, non-exclusive license, under -Apple's copyrights in this original Apple software (the "Apple Software"), to -use, reproduce, modify and redistribute the Apple Software, with or without -modifications, in source and/or binary forms; provided that if you redistribute -the Apple Software in its entirety and without modifications, you must retain -this notice and the following text and disclaimers in all such redistributions -of the Apple Software. -Neither the name, trademarks, service marks or logos of Apple Inc. may be used -to endorse or promote products derived from the Apple Software without specific -prior written permission from Apple. Except as expressly stated in this notice, -no other rights or licenses, express or implied, are granted by Apple herein, -including but not limited to any patent rights that may be infringed by your -derivative works or by other works in which the Apple Software may be -incorporated. - -The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO -WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED -WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN -COMBINATION WITH YOUR PRODUCTS. - -IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR -DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF -CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF -APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2010 Apple Inc. All Rights Reserved. - -*/ - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Frameworks/Reachability/ReadMe.txt b/Frameworks/Reachability/ReadMe.txt deleted file mode 100644 index 55459dc..0000000 --- a/Frameworks/Reachability/ReadMe.txt +++ /dev/null @@ -1,96 +0,0 @@ -Reachability - -======================================================================== -DESCRIPTION: - -The Reachability sample application demonstrates how to use the System -Configuration framework to monitor the network state of an iPhone or -iPod touch. In particular, it demonstrates how to know when IP can be -routed and when traffic will be routed through a Wireless Wide Area -Network (WWAN) interface such as EDGE or 3G. - -Note: Reachability cannot tell your application if you can connect to a -particular host, only that an interface is available that might allow a -connection, and whether that interface is the WWAN. - -======================================================================== -USING THE SAMPLE - -Build and run the sample using Xcode. When running the iPhone Simulator, -you can exercise the application by disconnecting the Ethernet cable, -turning off AirPort, or by joining an ad-hoc local Wi-Fi network. - -By default, the application uses www.apple.com for its remote host. You -can change the host it uses in ReachabilityAppDelegate.m by modifying -the call to [Reachability reachabilityWithHostName] in --applicationDidFinishLaunching. - -IMPORTANT: Reachability must use DNS to resolve the host name before it -can determine the Reachability of that host, and this may take time on -certain network connections. Because of this, the API will return -NotReachable until name resolution has completed. This delay may be -visible in the interface on some networks. - -The Reachability sample demonstrates the asynchronous use of the -SCNetworkReachability API. You can use the API synchronously, but do not -issue a synchronous check by hostName on the main thread. If the device -cannot reach a DNS server or is on a slow network, a synchronous call to -the SCNetworkReachabilityGetFlags function can block for up to 30 -seconds trying to resolve the hostName. If this happens on the main -thread, the application watchdog will kill the application after 20 -seconds of inactivity. - -SCNetworkReachability API's do not currently provide a means to detect -support for GameKit Peer To Peer networking over BlueTooth. - -======================================================================== -BUILD REQUIREMENTS - -iOS 4.0 - -======================================================================== -RUNTIME REQUIREMENTS - -iOS 4.0 - -======================================================================== -PACKAGING LIST - -Reachability.h Reachability.m --Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - -ReachabilityAppDelegate.h ReachabilityAppDelegate.m --The application's controller. - -======================================================================== -CHANGES FROM PREVIOUS VERSIONS -Version 2.2 --Updated sample for iOS 4.0 - -Version 2.1 --Removed [super init] from class method. --Fixed spelling error in method names. --Fixed several warnings. - -Version 2.0 --Greatly simplified UI code. --Rewrote Reachability object to be fully asychronous and simplify. -monitoring of multiple SCNetworkReachabilityRefs. --Added code showing how to monitor wether a connection will be required. - -Version 1.5 -- Updated for and tested with iPhone OS 2.0. First public release. - -Version 1.4 -- Updated for Beta 7. - -Version 1.3 -- Updated for Beta 6. - Added LSRequiresIPhoneOS key to Info.plist. - -Version 1.2 -- Updated for Beta 4. Added code signing. - -Version 1.1 -- Updated for Beta 3 to use a nib file. - -Copyright (C) Apple Inc. All rights reserved. \ No newline at end of file diff --git a/Frameworks/Reachability/WWAN5.png b/Frameworks/Reachability/WWAN5.png deleted file mode 100644 index b475a21..0000000 Binary files a/Frameworks/Reachability/WWAN5.png and /dev/null differ diff --git a/Frameworks/Reachability/icon.png b/Frameworks/Reachability/icon.png deleted file mode 100644 index 955e114..0000000 Binary files a/Frameworks/Reachability/icon.png and /dev/null differ diff --git a/Frameworks/Reachability/main.m b/Frameworks/Reachability/main.m deleted file mode 100644 index 2b91702..0000000 --- a/Frameworks/Reachability/main.m +++ /dev/null @@ -1,57 +0,0 @@ -/* - -File: main.m -Abstract: Main entry point. - -Version: 2.2 - -Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. -("Apple") in consideration of your agreement to the following terms, and your -use, installation, modification or redistribution of this Apple software -constitutes acceptance of these terms. If you do not agree with these terms, -please do not use, install, modify or redistribute this Apple software. - -In consideration of your agreement to abide by the following terms, and subject -to these terms, Apple grants you a personal, non-exclusive license, under -Apple's copyrights in this original Apple software (the "Apple Software"), to -use, reproduce, modify and redistribute the Apple Software, with or without -modifications, in source and/or binary forms; provided that if you redistribute -the Apple Software in its entirety and without modifications, you must retain -this notice and the following text and disclaimers in all such redistributions -of the Apple Software. -Neither the name, trademarks, service marks or logos of Apple Inc. may be used -to endorse or promote products derived from the Apple Software without specific -prior written permission from Apple. Except as expressly stated in this notice, -no other rights or licenses, express or implied, are granted by Apple herein, -including but not limited to any patent rights that may be infringed by your -derivative works or by other works in which the Apple Software may be -incorporated. - -The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO -WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED -WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN -COMBINATION WITH YOUR PRODUCTS. - -IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR -DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF -CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF -APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2010 Apple Inc. All Rights Reserved. - -*/ - - -#import - -int main(int argc, char* argv[]) -{ - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - int retVal = UIApplicationMain(argc, argv, nil, nil); - [pool release]; - return retVal; -} diff --git a/Frameworks/Reachability/red.png b/Frameworks/Reachability/red.png deleted file mode 100644 index 4d100b6..0000000 Binary files a/Frameworks/Reachability/red.png and /dev/null differ diff --git a/Frameworks/Reachability/stop-32.png b/Frameworks/Reachability/stop-32.png deleted file mode 100644 index b5639d3..0000000 Binary files a/Frameworks/Reachability/stop-32.png and /dev/null differ diff --git a/Frameworks/SDWebImage b/Frameworks/SDWebImage deleted file mode 160000 index 5df0eaf..0000000 --- a/Frameworks/SDWebImage +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5df0eafc92cb13bead88d0906cfed6b3fc403f0a diff --git a/Frameworks/ShareKit b/Frameworks/ShareKit deleted file mode 160000 index b100bbe..0000000 --- a/Frameworks/ShareKit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b100bbec7b2847957f14c4a9b3d2378741225351 diff --git a/Frameworks/TMQuiltView b/Frameworks/TMQuiltView deleted file mode 160000 index 99a0f20..0000000 --- a/Frameworks/TMQuiltView +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 99a0f20259b12695c5c233e3921f88061d450b75 diff --git a/Frameworks/TSAlertView b/Frameworks/TSAlertView deleted file mode 160000 index 37c4c4d..0000000 --- a/Frameworks/TSAlertView +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 37c4c4d3bba757d82201f7609577b32020561ef9 diff --git a/Frameworks/ViewDeck/IIViewDeckController.h b/Frameworks/ViewDeck/IIViewDeckController.h deleted file mode 100644 index 6e6e549..0000000 --- a/Frameworks/ViewDeck/IIViewDeckController.h +++ /dev/null @@ -1,173 +0,0 @@ -// -// IIViewDeckController.h -// IIViewDeck -// -// Copyright (C) 2011, Tom Adriaenssen -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of -// this software and associated documentation files (the "Software"), to deal in -// the Software without restriction, including without limitation the rights to -// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -// of the Software, and to permit persons to whom the Software is furnished to do -// so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -#import - -@protocol IIViewDeckControllerDelegate; - -typedef enum { - IIViewDeckNoPanning, // no panning allowed - IIViewDeckFullViewPanning, // the default: touch anywhere in the center view to drag the center view around - IIViewDeckNavigationBarPanning, // panning only occurs when you start touching in the navigation bar (when the center controller is a UINavigationController with a visible navigation bar). Otherwise it will behave as IIViewDeckNoPanning. - IIViewDeckPanningViewPanning // panning only occurs when you start touching in a UIView set in panningView property -} IIViewDeckPanningMode; - - -typedef enum { - IIViewDeckCenterHiddenUserInteractive, // the center view stays interactive - IIViewDeckCenterHiddenNotUserInteractive, // the center view will become nonresponsive to useractions - IIViewDeckCenterHiddenNotUserInteractiveWithTapToClose, // the center view will become nonresponsive to useractions, but will allow the user to tap it so that it closes - IIViewDeckCenterHiddenNotUserInteractiveWithTapToCloseBouncing, // same as IIViewDeckCenterHiddenNotUserInteractiveWithTapToClose, but closes the center view bouncing -} IIViewDeckCenterHiddenInteractivity; - - -typedef enum { - IIViewDeckNavigationControllerContained, // the center navigation controller will act as any other viewcontroller. Pushing and popping view controllers will be contained in the centerview. - IIViewDeckNavigationControllerIntegrated // the center navigation controller will integrate with the viewdeck. -} IIViewDeckNavigationControllerBehavior; - - -typedef enum { - IIViewDeckRotationKeepsLedgeSizes, // when rotating, the ledge sizes are kept (side views are more/less visible) - IIViewDeckRotationKeepsViewSizes // when rotating, the size view sizes are kept (ledges change) -} IIViewDeckRotationBehavior; - - -#define IIViewDeckCenterHiddenCanTapToClose(interactivity) ((interactivity) == IIViewDeckCenterHiddenNotUserInteractiveWithTapToClose || (interactivity) == IIViewDeckCenterHiddenNotUserInteractiveWithTapToCloseBouncing) -#define IIViewDeckCenterHiddenIsInteractive(interactivity) ((interactivity) == IIViewDeckCenterHiddenUserInteractive) - - -@interface IIViewDeckController : UIViewController { -@private - CGFloat _panOrigin; - BOOL _viewAppeared; - CGFloat _preRotationWidth, _leftWidth, _rightWidth, _preRotationCenterWidth, _maxLedge, _offset; -} - -typedef void (^IIViewDeckControllerBlock) (IIViewDeckController *controller); - -@property (nonatomic, assign) id delegate; -@property (nonatomic, retain) UIViewController* centerController; -@property (nonatomic, retain) UIViewController* leftController; -@property (nonatomic, retain) UIViewController* rightController; -@property (nonatomic, readonly, assign) UIViewController* slidingController; -@property (nonatomic, retain) UIView* panningView; -@property (nonatomic, assign) id panningGestureDelegate; -@property (nonatomic, readonly, retain) NSArray* controllers; -@property (nonatomic, getter=isEnabled) BOOL enabled; -@property (nonatomic) BOOL elastic; - -@property (nonatomic) CGFloat leftLedge; -@property (nonatomic) CGFloat rightLedge; -@property (nonatomic) CGFloat maxLedge; -@property (nonatomic) BOOL resizesCenterView; -@property (nonatomic) IIViewDeckPanningMode panningMode; -@property (nonatomic) IIViewDeckCenterHiddenInteractivity centerhiddenInteractivity; -@property (nonatomic) IIViewDeckNavigationControllerBehavior navigationControllerBehavior; -@property (nonatomic) IIViewDeckRotationBehavior rotationBehavior; -@property (nonatomic) BOOL automaticallyUpdateTabBarItems; - -- (id)initWithCenterViewController:(UIViewController*)centerController; -- (id)initWithCenterViewController:(UIViewController*)centerController leftViewController:(UIViewController*)leftController; -- (id)initWithCenterViewController:(UIViewController*)centerController rightViewController:(UIViewController*)rightController; -- (id)initWithCenterViewController:(UIViewController*)centerController leftViewController:(UIViewController*)leftController rightViewController:(UIViewController*)rightController; - -- (void)showCenterView; -- (void)showCenterView:(BOOL)animated; -- (void)showCenterView:(BOOL)animated completion:(IIViewDeckControllerBlock)completed; - - -- (void)setLeftLedge:(CGFloat)rightLedge completion:(void(^)(BOOL finished))completion; -- (void)setRightLedge:(CGFloat)rightLedge completion:(void(^)(BOOL finished))completion; - -- (BOOL)toggleLeftView; -- (BOOL)openLeftView; -- (BOOL)closeLeftView; -- (BOOL)toggleLeftViewAnimated:(BOOL)animated; -- (BOOL)toggleLeftViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openLeftViewAnimated:(BOOL)animated; -- (BOOL)openLeftViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openLeftViewBouncing:(IIViewDeckControllerBlock)bounced; -- (BOOL)openLeftViewBouncing:(IIViewDeckControllerBlock)bounced completion:(IIViewDeckControllerBlock)completed; -- (BOOL)closeLeftViewAnimated:(BOOL)animated; -- (BOOL)closeLeftViewAnimated:(BOOL)animated completion:(void(^)(IIViewDeckController* controller))completed; -- (BOOL)closeLeftViewBouncing:(IIViewDeckControllerBlock)bounced; -- (BOOL)closeLeftViewBouncing:(IIViewDeckControllerBlock)bounced completion:(IIViewDeckControllerBlock)completed; - -- (BOOL)toggleRightView; -- (BOOL)openRightView; -- (BOOL)closeRightView; -- (BOOL)toggleRightViewAnimated:(BOOL)animated; -- (BOOL)toggleRightViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openRightViewAnimated:(BOOL)animated; -- (BOOL)openRightViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openRightViewBouncing:(IIViewDeckControllerBlock)bounced; -- (BOOL)openRightViewBouncing:(IIViewDeckControllerBlock)bounced completion:(IIViewDeckControllerBlock)completed; -- (BOOL)closeRightViewAnimated:(BOOL)animated; -- (BOOL)closeRightViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed; -- (BOOL)closeRightViewBouncing:(IIViewDeckControllerBlock)bounced; -- (BOOL)closeRightViewBouncing:(IIViewDeckControllerBlock)bounced completion:(IIViewDeckControllerBlock)completed; -- (void)rightViewPushViewControllerOverCenterController:(UIViewController*)controller; - -- (BOOL)leftControllerIsClosed; -- (BOOL)leftControllerIsOpen; -- (BOOL)rightControllerIsClosed; -- (BOOL)rightControllerIsOpen; - -- (CGFloat)statusBarHeight; - -@end - - -// Delegate protocol - -@protocol IIViewDeckControllerDelegate - -@optional -- (void)viewDeckController:(IIViewDeckController*)viewDeckController applyShadow:(CALayer*)shadowLayer withBounds:(CGRect)rect; - -- (void)viewDeckController:(IIViewDeckController*)viewDeckController didPanToOffset:(CGFloat)offset; -- (void)viewDeckController:(IIViewDeckController*)viewDeckController slideOffsetChanged:(CGFloat)offset; -- (void)viewDeckController:(IIViewDeckController *)viewDeckController didBounceWithClosingController:(UIViewController*)openController; -- (BOOL)viewDeckControllerWillOpenLeftView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; -- (void)viewDeckControllerDidOpenLeftView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; -- (BOOL)viewDeckControllerWillCloseLeftView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; -- (void)viewDeckControllerDidCloseLeftView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; -- (BOOL)viewDeckControllerWillOpenRightView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; -- (void)viewDeckControllerDidOpenRightView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; -- (BOOL)viewDeckControllerWillCloseRightView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; -- (void)viewDeckControllerDidCloseRightView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; -- (void)viewDeckControllerDidShowCenterView:(IIViewDeckController*)viewDeckController animated:(BOOL)animated; - -@end - - -// category on UIViewController to provide access to the viewDeckController in the -// contained viewcontrollers, a la UINavigationController. -@interface UIViewController (UIViewDeckItem) - -@property(nonatomic,readonly,retain) IIViewDeckController *viewDeckController; - -@end diff --git a/Frameworks/ViewDeck/IIViewDeckController.m b/Frameworks/ViewDeck/IIViewDeckController.m deleted file mode 100644 index 2aa6609..0000000 --- a/Frameworks/ViewDeck/IIViewDeckController.m +++ /dev/null @@ -1,1996 +0,0 @@ -// -// IIViewDeckController.m -// IIViewDeck -// -// Copyright (C) 2011, Tom Adriaenssen -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of -// this software and associated documentation files (the "Software"), to deal in -// the Software without restriction, including without limitation the rights to -// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -// of the Software, and to permit persons to whom the Software is furnished to do -// so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -// define some LLVM3 macros if the code is compiled with a different compiler (ie LLVMGCC42) -#ifndef __has_feature -#define __has_feature(x) 0 -#endif -#ifndef __has_extension -#define __has_extension __has_feature // Compatibility with pre-3.0 compilers. -#endif - -#if __has_feature(objc_arc) && __clang_major__ >= 3 -#define II_ARC_ENABLED 1 -#endif // __has_feature(objc_arc) - -#if II_ARC_ENABLED -#define II_RETAIN(xx) ((void)(0)) -#define II_RELEASE(xx) ((void)(0)) -#define II_AUTORELEASE(xx) (xx) -#else -#define II_RETAIN(xx) [xx retain] -#define II_RELEASE(xx) [xx release] -#define II_AUTORELEASE(xx) [xx autorelease] -#endif - -#define II_FLOAT_EQUAL(x, y) (((x) - (y)) == 0.0f) -#define II_STRING_EQUAL(a, b) ((a == nil && b == nil) || (a != nil && [a isEqualToString:b])) - -#define II_CGRectOffsetRightAndShrink(rect, offset) \ -({ \ -__typeof__(rect) __r = (rect); \ -__typeof__(offset) __o = (offset); \ -(CGRect) { { __r.origin.x, __r.origin.y }, \ -{ __r.size.width - __o, __r.size.height } \ -}; \ -}) -#define II_CGRectOffsetTopAndShrink(rect, offset) \ -({ \ -__typeof__(rect) __r = (rect); \ -__typeof__(offset) __o = (offset); \ -(CGRect) { { __r.origin.x, __r.origin.y + __o }, \ -{ __r.size.width, __r.size.height - __o } \ -}; \ -}) -#define II_CGRectOffsetBottomAndShrink(rect, offset) \ -({ \ -__typeof__(rect) __r = (rect); \ -__typeof__(offset) __o = (offset); \ -(CGRect) { { __r.origin.x, __r.origin.y }, \ -{ __r.size.width, __r.size.height - __o} \ -}; \ -}) -#define II_CGRectShrink(rect, w, h) \ -({ \ -__typeof__(rect) __r = (rect); \ -__typeof__(w) __w = (w); \ -__typeof__(h) __h = (h); \ -(CGRect) { __r.origin, \ -{ __r.size.width - __w, __r.size.height - __h} \ -}; \ -}) - -#import "IIViewDeckController.h" -#import -#import -#import -#import "WrapController.h" - -#define DURATION_FAST 0.3 -#define DURATION_SLOW 0.3 -#define SLIDE_DURATION(animated,duration) ((animated) ? (duration) : 0) -#define OPEN_SLIDE_DURATION(animated) SLIDE_DURATION(animated,DURATION_FAST) -#define CLOSE_SLIDE_DURATION(animated) SLIDE_DURATION(animated,DURATION_SLOW) - -@interface IIViewDeckController () - - -@property (nonatomic, retain) UIView* referenceView; -@property (nonatomic, readonly) CGRect referenceBounds; -@property (nonatomic, readonly) CGRect centerViewBounds; -@property (nonatomic, readonly) CGRect sideViewBounds; -@property (nonatomic, retain) NSMutableArray* panners; -@property (nonatomic, assign) CGFloat originalShadowRadius; -@property (nonatomic, assign) CGFloat originalShadowOpacity; -@property (nonatomic, retain) UIColor* originalShadowColor; -@property (nonatomic, assign) CGSize originalShadowOffset; -@property (nonatomic, retain) UIBezierPath* originalShadowPath; -@property (nonatomic, retain) UIButton* centerTapper; -@property (nonatomic, retain) UIView* centerView; -@property (nonatomic, readonly) UIView* slidingControllerView; - -- (void)cleanup; - -- (BOOL)closeLeftViewAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)closeLeftViewAnimated:(BOOL)animated options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openLeftViewAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openLeftViewAnimated:(BOOL)animated options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openLeftViewBouncing:(IIViewDeckControllerBlock)bounced callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openLeftViewBouncing:(IIViewDeckControllerBlock)bounced options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)closeRightViewAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)closeRightViewAnimated:(BOOL)animated options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openRightViewAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openRightViewAnimated:(BOOL)animated options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openRightViewBouncing:(IIViewDeckControllerBlock)bounced callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; -- (BOOL)openRightViewBouncing:(IIViewDeckControllerBlock)bounced options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed; - -- (CGRect)slidingRectForOffset:(CGFloat)offset; -- (CGSize)slidingSizeForOffset:(CGFloat)offset; -- (void)setSlidingFrameForOffset:(CGFloat)frame; -- (void)hideAppropriateSideViews; - -- (void)reapplySideController:(__strong UIViewController **)controllerStore; -- (BOOL)setSlidingAndReferenceViews; -- (void)applyShadowToSlidingView; -- (void)restoreShadowToSlidingView; -- (void)arrangeViewsAfterRotation; -- (CGFloat)relativeStatusBarHeight; - -- (void)centerViewVisible; -- (void)centerViewHidden; -- (void)centerTapped; - -- (void)addPanners; -- (void)removePanners; - -- (BOOL)checkDelegate:(SEL)selector animated:(BOOL)animated; -- (void)performDelegate:(SEL)selector animated:(BOOL)animated; -- (void)performOffsetDelegate:(SEL)selector offset:(CGFloat)offset; - -- (void)relayAppearanceMethod:(void(^)(UIViewController* controller))relay; -- (void)relayAppearanceMethod:(void(^)(UIViewController* controller))relay forced:(BOOL)forced; - -@end - - -@interface UIViewController (UIViewDeckItem_Internal) - -// internal setter for the viewDeckController property on UIViewController -- (void)setViewDeckController:(IIViewDeckController*)viewDeckController; - -@end - -@interface UIViewController (UIViewDeckController_ViewContainmentEmulation) - -- (void)addChildViewController:(UIViewController *)childController; -- (void)removeFromParentViewController; -- (void)willMoveToParentViewController:(UIViewController *)parent; -- (void)didMoveToParentViewController:(UIViewController *)parent; - -- (BOOL)vdc_shouldRelay; -- (void)vdc_viewWillAppear:(bool)animated; -- (void)vdc_viewDidAppear:(bool)animated; -- (void)vdc_viewWillDisappear:(bool)animated; -- (void)vdc_viewDidDisappear:(bool)animated; - -@end - - -@implementation IIViewDeckController - -@synthesize panningMode = _panningMode; -@synthesize panners = _panners; -@synthesize referenceView = _referenceView; -@synthesize slidingController = _slidingController; -@synthesize centerController = _centerController; -@synthesize leftController = _leftController; -@synthesize rightController = _rightController; -@synthesize leftLedge = _leftLedge; -@synthesize rightLedge = _rightLedge; -@synthesize maxLedge = _maxLedge; -@synthesize resizesCenterView = _resizesCenterView; -@synthesize originalShadowOpacity = _originalShadowOpacity; -@synthesize originalShadowPath = _originalShadowPath; -@synthesize originalShadowRadius = _originalShadowRadius; -@synthesize originalShadowColor = _originalShadowColor; -@synthesize originalShadowOffset = _originalShadowOffset; -@synthesize delegate = _delegate; -@synthesize navigationControllerBehavior = _navigationControllerBehavior; -@synthesize panningView = _panningView; -@synthesize centerhiddenInteractivity = _centerhiddenInteractivity; -@synthesize centerTapper = _centerTapper; -@synthesize centerView = _centerView; -@synthesize rotationBehavior = _rotationBehavior; -@synthesize enabled = _enabled; -@synthesize elastic = _elastic; -@synthesize automaticallyUpdateTabBarItems = _automaticallyUpdateTabBarItems; -@synthesize panningGestureDelegate = _panningGestureDelegate; - -#pragma mark - Initalisation and deallocation - -- (id)initWithCoder:(NSCoder *)aDecoder -{ - return [self initWithCenterViewController:nil]; -} - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - return [self initWithCenterViewController:nil]; -} - -- (id)initWithCenterViewController:(UIViewController*)centerController { - if ((self = [super initWithNibName:nil bundle:nil])) { - _elastic = YES; - _panningMode = IIViewDeckFullViewPanning; - _navigationControllerBehavior = IIViewDeckNavigationControllerContained; - _centerhiddenInteractivity = IIViewDeckCenterHiddenUserInteractive; - _rotationBehavior = IIViewDeckRotationKeepsLedgeSizes; - _viewAppeared = NO; - _resizesCenterView = NO; - _automaticallyUpdateTabBarItems = NO; - self.panners = [NSMutableArray array]; - self.enabled = YES; - - self.originalShadowRadius = 0; - self.originalShadowOffset = CGSizeZero; - self.originalShadowColor = nil; - self.originalShadowOpacity = 0; - self.originalShadowPath = nil; - - _slidingController = nil; - self.centerController = centerController; - self.leftController = nil; - self.rightController = nil; - self.leftLedge = 44; - self.rightLedge = 44; - } - return self; -} - -- (id)initWithCenterViewController:(UIViewController*)centerController leftViewController:(UIViewController*)leftController { - if ((self = [self initWithCenterViewController:centerController])) { - self.leftController = leftController; - } - return self; -} - -- (id)initWithCenterViewController:(UIViewController*)centerController rightViewController:(UIViewController*)rightController { - if ((self = [self initWithCenterViewController:centerController])) { - self.rightController = rightController; - } - return self; -} - -- (id)initWithCenterViewController:(UIViewController*)centerController leftViewController:(UIViewController*)leftController rightViewController:(UIViewController*)rightController { - if ((self = [self initWithCenterViewController:centerController])) { - self.leftController = leftController; - self.rightController = rightController; - } - return self; -} - -- (void)cleanup { - self.originalShadowRadius = 0; - self.originalShadowOpacity = 0; - self.originalShadowColor = nil; - self.originalShadowOffset = CGSizeZero; - self.originalShadowPath = nil; - - _slidingController = nil; - self.referenceView = nil; - self.centerView = nil; - self.centerTapper = nil; -} - -- (void)dealloc { - [self cleanup]; - - self.centerController.viewDeckController = nil; - self.centerController = nil; - self.leftController.viewDeckController = nil; - self.leftController = nil; - self.rightController.viewDeckController = nil; - self.rightController = nil; - self.panners = nil; - -#if !II_ARC_ENABLED - [super dealloc]; -#endif -} - -#pragma mark - Memory management - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - - [self.centerController didReceiveMemoryWarning]; - [self.leftController didReceiveMemoryWarning]; - [self.rightController didReceiveMemoryWarning]; -} - -#pragma mark - Bookkeeping - -- (NSArray*)controllers { - NSMutableArray *result = [NSMutableArray array]; - if (self.centerController) [result addObject:self.centerController]; - if (self.leftController) [result addObject:self.leftController]; - if (self.rightController) [result addObject:self.rightController]; - return [NSArray arrayWithArray:result]; -} - -- (CGRect)referenceBounds { - return self.referenceView.bounds; -} - -- (CGFloat)relativeStatusBarHeight { - if (![self.referenceView isKindOfClass:[UIWindow class]]) - return 0; - - return [self statusBarHeight]; -} - -- (CGFloat)statusBarHeight { - return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) - ? [UIApplication sharedApplication].statusBarFrame.size.width - : [UIApplication sharedApplication].statusBarFrame.size.height; -} - -- (CGRect)centerViewBounds { - if (self.navigationControllerBehavior == IIViewDeckNavigationControllerContained) - return self.referenceBounds; - - return II_CGRectShrink(self.referenceBounds, 0, [self relativeStatusBarHeight] + (self.navigationController.navigationBarHidden ? 0 : self.navigationController.navigationBar.frame.size.height)); -} - -- (CGRect)sideViewBounds { - if (self.navigationControllerBehavior == IIViewDeckNavigationControllerContained) - return self.referenceBounds; - - return II_CGRectOffsetTopAndShrink(self.referenceBounds, [self relativeStatusBarHeight]); -} - -- (CGFloat)limitOffset:(CGFloat)offset { - if (_leftController && _rightController) return offset; - - if (_leftController && self.maxLedge > 0) { - CGFloat left = self.referenceBounds.size.width - self.maxLedge; - offset = MAX(offset, left); - } - else if (_rightController && self.maxLedge > 0) { - CGFloat right = self.maxLedge - self.referenceBounds.size.width; - offset = MIN(offset, right); - } - - return offset; -} - -- (CGRect)slidingRectForOffset:(CGFloat)offset { - offset = [self limitOffset:offset]; - return (CGRect) { {self.resizesCenterView && offset < 0 ? 0 : offset, 0}, [self slidingSizeForOffset:offset] }; -} - -- (CGSize)slidingSizeForOffset:(CGFloat)offset { - if (!self.resizesCenterView) return self.referenceBounds.size; - - offset = [self limitOffset:offset]; - if (offset < 0) - return (CGSize) { self.centerViewBounds.size.width + offset, self.centerViewBounds.size.height }; - - return (CGSize) { self.centerViewBounds.size.width - offset, self.centerViewBounds.size.height }; -} - --(void)setSlidingFrameForOffset:(CGFloat)offset { - _offset = [self limitOffset:offset]; - self.slidingControllerView.frame = [self slidingRectForOffset:_offset]; - [self performOffsetDelegate:@selector(viewDeckController:slideOffsetChanged:) offset:_offset]; -} - -- (void)hideAppropriateSideViews { - self.leftController.view.hidden = CGRectGetMinX(self.slidingControllerView.frame) <= 0; - self.rightController.view.hidden = CGRectGetMaxX(self.slidingControllerView.frame) >= self.referenceBounds.size.width; -} - -#pragma mark - ledges - -- (void)setLeftLedge:(CGFloat)leftLedge { - // Compute the final ledge in two steps. This prevents a strange bug where - // nesting MAX(X, MIN(Y, Z)) with miniscule referenceBounds returns a bogus near-zero value. - CGFloat minLedge = MIN(self.referenceBounds.size.width, leftLedge); - leftLedge = MAX(leftLedge, minLedge); - if (_viewAppeared && II_FLOAT_EQUAL(self.slidingControllerView.frame.origin.x, self.referenceBounds.size.width - _leftLedge)) { - if (leftLedge < _leftLedge) { - [UIView animateWithDuration:CLOSE_SLIDE_DURATION(YES) animations:^{ - [self setSlidingFrameForOffset:self.referenceBounds.size.width - leftLedge]; - }]; - } - else if (leftLedge > _leftLedge) { - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) animations:^{ - [self setSlidingFrameForOffset:self.referenceBounds.size.width - leftLedge]; - }]; - } - } - _leftLedge = leftLedge; -} - -- (void)setLeftLedge:(CGFloat)leftLedge completion:(void(^)(BOOL finished))completion { - // Compute the final ledge in two steps. This prevents a strange bug where - // nesting MAX(X, MIN(Y, Z)) with miniscule referenceBounds returns a bogus near-zero value. - CGFloat minLedge = MIN(self.referenceBounds.size.width, leftLedge); - leftLedge = MAX(leftLedge, minLedge); - if (_viewAppeared && II_FLOAT_EQUAL(self.slidingControllerView.frame.origin.x, self.referenceBounds.size.width - _leftLedge)) { - if (leftLedge < _leftLedge) { - [UIView animateWithDuration:CLOSE_SLIDE_DURATION(YES) animations:^{ - [self setSlidingFrameForOffset:self.referenceBounds.size.width - leftLedge]; - } completion:completion]; - } - else if (leftLedge > _leftLedge) { - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) animations:^{ - [self setSlidingFrameForOffset:self.referenceBounds.size.width - leftLedge]; - } completion:completion]; - } - } - _leftLedge = leftLedge; -} - - -- (void)setRightLedge:(CGFloat)rightLedge { - // Compute the final ledge in two steps. This prevents a strange bug where - // nesting MAX(X, MIN(Y, Z)) with miniscule referenceBounds returns a bogus near-zero value. - CGFloat minLedge = MIN(self.referenceBounds.size.width, rightLedge); - rightLedge = MAX(rightLedge, minLedge); - if (_viewAppeared && II_FLOAT_EQUAL(self.slidingControllerView.frame.origin.x, _rightLedge - self.referenceBounds.size.width)) { - if (rightLedge < _rightLedge) { - [UIView animateWithDuration:CLOSE_SLIDE_DURATION(YES) animations:^{ - [self setSlidingFrameForOffset:rightLedge - self.referenceBounds.size.width]; - }]; - } - else if (rightLedge > _rightLedge) { - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) animations:^{ - [self setSlidingFrameForOffset:rightLedge - self.referenceBounds.size.width]; - }]; - } - } - _rightLedge = rightLedge; -} - -- (void)setRightLedge:(CGFloat)rightLedge completion:(void(^)(BOOL finished))completion { - // Compute the final ledge in two steps. This prevents a strange bug where - // nesting MAX(X, MIN(Y, Z)) with miniscule referenceBounds returns a bogus near-zero value. - CGFloat minLedge = MIN(self.referenceBounds.size.width, rightLedge); - rightLedge = MAX(rightLedge, minLedge); - if (_viewAppeared && II_FLOAT_EQUAL(self.slidingControllerView.frame.origin.x, _rightLedge - self.referenceBounds.size.width)) { - if (rightLedge < _rightLedge) { - [UIView animateWithDuration:CLOSE_SLIDE_DURATION(YES) animations:^{ - [self setSlidingFrameForOffset:rightLedge - self.referenceBounds.size.width]; - } completion:completion]; - } - else if (rightLedge > _rightLedge) { - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) animations:^{ - [self setSlidingFrameForOffset:rightLedge - self.referenceBounds.size.width]; - } completion:completion]; - } - } - _rightLedge = rightLedge; -} - - -- (void)setMaxLedge:(CGFloat)maxLedge { - _maxLedge = maxLedge; - if (_leftController && _rightController) { - NSLog(@"IIViewDeckController: warning: setting maxLedge with 2 side controllers. Value will be ignored."); - return; - } - - if (_leftController && _leftLedge > _maxLedge) { - self.leftLedge = _maxLedge; - } - else if (_rightController && _rightLedge > _maxLedge) { - self.rightLedge = _maxLedge; - } - - [self setSlidingFrameForOffset:_offset]; -} - -#pragma mark - View lifecycle - -- (void)loadView -{ - _offset = 0; - _viewAppeared = NO; - self.view = II_AUTORELEASE([[UIView alloc] init]); - self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.view.autoresizesSubviews = YES; - self.view.clipsToBounds = YES; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.centerView = II_AUTORELEASE([[UIView alloc] init]); - self.centerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.centerView.autoresizesSubviews = YES; - self.centerView.clipsToBounds = YES; - [self.view addSubview:self.centerView]; - - self.originalShadowRadius = 0; - self.originalShadowOpacity = 0; - self.originalShadowColor = nil; - self.originalShadowOffset = CGSizeZero; - self.originalShadowPath = nil; - - [self setNeedsStatusBarAppearanceUpdate]; - -} - --(UIStatusBarStyle)preferredStatusBarStyle{ - return UIStatusBarStyleLightContent; -} - -- (void)viewDidUnload -{ - [self cleanup]; - [super viewDidUnload]; -} - - - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - - BOOL wasntAppeared = !_viewAppeared; - [self.view addObserver:self forKeyPath:@"bounds" options:NSKeyValueChangeSetting context:nil]; - - void(^applyViews)(void) = ^{ - [self.centerController.view removeFromSuperview]; - [self.centerView addSubview:self.centerController.view]; - [self.leftController.view removeFromSuperview]; - [self.referenceView insertSubview:self.leftController.view belowSubview:self.slidingControllerView]; - [self.rightController.view removeFromSuperview]; - [self.referenceView insertSubview:self.rightController.view belowSubview:self.slidingControllerView]; - - [self reapplySideController:&_leftController]; - [self reapplySideController:&_rightController]; - - [self setSlidingFrameForOffset:_offset]; - self.slidingControllerView.hidden = NO; - - self.centerView.frame = self.centerViewBounds; - self.centerController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.centerController.view.frame = self.centerView.bounds; - self.leftController.view.frame = self.sideViewBounds; - self.leftController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.rightController.view.frame = self.sideViewBounds; - self.rightController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - [self applyShadowToSlidingView]; - }; - - if ([self setSlidingAndReferenceViews]) - applyViews(); - _viewAppeared = YES; - - // after 0.01 sec, since in certain cases the sliding view is reset. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){ - if (!self.referenceView) { - [self setSlidingAndReferenceViews]; - applyViews(); - } - [self setSlidingFrameForOffset:_offset]; - [self hideAppropriateSideViews]; - }); - - [self addPanners]; - - if (self.slidingControllerView.frame.origin.x == 0.0f) - [self centerViewVisible]; - else - [self centerViewHidden]; - - [self relayAppearanceMethod:^(UIViewController *controller) { - [controller viewWillAppear:animated]; - } forced:wasntAppeared]; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - [self relayAppearanceMethod:^(UIViewController *controller) { - [controller viewDidAppear:animated]; - }]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - [self relayAppearanceMethod:^(UIViewController *controller) { - [controller viewWillDisappear:animated]; - }]; - - [self removePanners]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - - @try { - [self.view removeObserver:self forKeyPath:@"bounds"]; - } @catch(id anException){ - //do nothing, obviously it wasn't attached because an exception was thrown - } - - [self relayAppearanceMethod:^(UIViewController *controller) { - [controller viewDidDisappear:animated]; - }]; -} - -#pragma mark - rotation - -/* - - - We need a specific rotation for out APP, comment the default one - - - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - _preRotationWidth = self.referenceBounds.size.width; - _preRotationCenterWidth = self.centerView.bounds.size.width; - - if (self.rotationBehavior == IIViewDeckRotationKeepsViewSizes) { - _leftWidth = self.leftController.view.frame.size.width; - _rightWidth = self.rightController.view.frame.size.width; - } - - BOOL should = YES; - if (self.centerController) - should = [self.centerController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; - - return should; -} - -- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; - - [self relayAppearanceMethod:^(UIViewController *controller) { - [controller willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; - }]; - - [self arrangeViewsAfterRotation]; -} - - -- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; - [self restoreShadowToSlidingView]; - - [self relayAppearanceMethod:^(UIViewController *controller) { - [controller willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; - }]; -} - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; - [self applyShadowToSlidingView]; - - [self relayAppearanceMethod:^(UIViewController *controller) { - [controller didRotateFromInterfaceOrientation:fromInterfaceOrientation]; - }]; -} -*/ - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - - -- (void)arrangeViewsAfterRotation { - if (_preRotationWidth <= 0) return; - - CGFloat offset = self.slidingControllerView.frame.origin.x; - if (self.resizesCenterView && offset == 0) { - offset = offset + (_preRotationCenterWidth - _preRotationWidth); - } - - if (self.rotationBehavior == IIViewDeckRotationKeepsLedgeSizes) { - if (offset > 0) { - offset = self.referenceBounds.size.width - _preRotationWidth + offset; - } - else if (offset < 0) { - offset = offset + _preRotationWidth - self.referenceBounds.size.width; - } - } - else { - self.leftLedge = self.leftLedge + self.referenceBounds.size.width - _preRotationWidth; - self.rightLedge = self.rightLedge + self.referenceBounds.size.width - _preRotationWidth; - self.maxLedge = self.maxLedge + self.referenceBounds.size.width - _preRotationWidth; - } - [self setSlidingFrameForOffset:offset]; - - _preRotationWidth = 0; -} - -#pragma mark - controller state - -- (BOOL)leftControllerIsClosed { - return !self.leftController || CGRectGetMinX(self.slidingControllerView.frame) <= 0; -} - -- (BOOL)rightControllerIsClosed { - return !self.rightController || CGRectGetMaxX(self.slidingControllerView.frame) >= self.referenceBounds.size.width; -} - -- (BOOL)leftControllerIsOpen { - return self.leftController && CGRectGetMinX(self.slidingControllerView.frame) < self.referenceBounds.size.width && CGRectGetMinX(self.slidingControllerView.frame) >= self.rightLedge; -} - -- (BOOL)rightControllerIsOpen { - return self.rightController && CGRectGetMaxX(self.slidingControllerView.frame) < self.referenceBounds.size.width && CGRectGetMaxX(self.slidingControllerView.frame) >= self.leftLedge; -} - -- (void)showCenterView { - [self showCenterView:YES]; -} - -- (void)showCenterView:(BOOL)animated { - [self showCenterView:animated completion:nil]; -} - -- (void)showCenterView:(BOOL)animated completion:(IIViewDeckControllerBlock)completed { - BOOL mustRunCompletion = completed != nil; - if (self.leftController && !self.leftController.view.hidden) { - [self closeLeftViewAnimated:animated completion:completed]; - mustRunCompletion = NO; - } - - if (self.rightController && !self.rightController.view.hidden) { - [self closeRightViewAnimated:animated completion:completed]; - mustRunCompletion = NO; - } - - if (mustRunCompletion) - completed(self); -} - -- (BOOL)toggleLeftView { - return [self toggleLeftViewAnimated:YES]; -} - -- (BOOL)openLeftView { - return [self openLeftViewAnimated:YES]; -} - -- (BOOL)closeLeftView { - return [self closeLeftViewAnimated:YES]; -} - -- (BOOL)toggleLeftViewAnimated:(BOOL)animated { - return [self toggleLeftViewAnimated:animated completion:nil]; -} - -- (BOOL)toggleLeftViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed { - if ([self leftControllerIsClosed]) - return [self openLeftViewAnimated:animated completion:completed]; - else - return [self closeLeftViewAnimated:animated completion:completed]; -} - -- (BOOL)openLeftViewAnimated:(BOOL)animated { - return [self openLeftViewAnimated:animated completion:nil]; -} - -- (BOOL)openLeftViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed { - return [self openLeftViewAnimated:animated options:UIViewAnimationOptionCurveEaseInOut callDelegate:YES completion:completed]; -} - -- (BOOL)openLeftViewAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - return [self openLeftViewAnimated:animated options:UIViewAnimationOptionCurveEaseInOut callDelegate:callDelegate completion:completed]; -} - -- (BOOL)openLeftViewAnimated:(BOOL)animated options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - if (!self.leftController || II_FLOAT_EQUAL(CGRectGetMinX(self.slidingControllerView.frame), self.leftLedge)) return YES; - - // check the delegate to allow opening - if (callDelegate && ![self checkDelegate:@selector(viewDeckControllerWillOpenLeftView:animated:) animated:animated]) return NO; - // also close the right view if it's open. Since the delegate can cancel the close, check the result. - if (callDelegate && ![self closeRightViewAnimated:animated options:options callDelegate:callDelegate completion:completed]) return NO; - - [UIView animateWithDuration:OPEN_SLIDE_DURATION(animated) delay:0 options:options | UIViewAnimationOptionLayoutSubviews | UIViewAnimationOptionBeginFromCurrentState animations:^{ - self.leftController.view.hidden = NO; - [self setSlidingFrameForOffset:self.referenceBounds.size.width - self.leftLedge]; - [self centerViewHidden]; - } completion:^(BOOL finished) { - if (completed) completed(self); - if (callDelegate) [self performDelegate:@selector(viewDeckControllerDidOpenLeftView:animated:) animated:animated]; - }]; - - return YES; -} - -- (BOOL)openLeftViewBouncing:(IIViewDeckControllerBlock)bounced { - return [self openLeftViewBouncing:bounced completion:nil]; -} - -- (BOOL)openLeftViewBouncing:(IIViewDeckControllerBlock)bounced completion:(IIViewDeckControllerBlock)completed { - return [self openLeftViewBouncing:bounced callDelegate:YES completion:completed]; -} - -- (BOOL)openLeftViewBouncing:(IIViewDeckControllerBlock)bounced callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - return [self openLeftViewBouncing:bounced options:UIViewAnimationOptionCurveEaseInOut callDelegate:YES completion:completed]; -} - -- (BOOL)openLeftViewBouncing:(IIViewDeckControllerBlock)bounced options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - if (!self.leftController || II_FLOAT_EQUAL(CGRectGetMinX(self.slidingControllerView.frame), self.leftLedge)) return YES; - - // check the delegate to allow opening - if (callDelegate && ![self checkDelegate:@selector(viewDeckControllerWillOpenLeftView:animated:) animated:YES]) return NO; - // also close the right view if it's open. Since the delegate can cancel the close, check the result. - if (callDelegate && ![self closeRightViewAnimated:YES options:options callDelegate:callDelegate completion:completed]) return NO; - - // first open the view completely, run the block (to allow changes) - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) delay:0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionLayoutSubviews animations:^{ - self.leftController.view.hidden = NO; - [self setSlidingFrameForOffset:self.referenceBounds.size.width]; - } completion:^(BOOL finished) { - // run block if it's defined - if (bounced) bounced(self); - [self centerViewHidden]; - - // now slide the view back to the ledge position - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) delay:0 options:options | UIViewAnimationOptionLayoutSubviews | UIViewAnimationOptionBeginFromCurrentState animations:^{ - [self setSlidingFrameForOffset:self.referenceBounds.size.width - self.leftLedge]; - } completion:^(BOOL finished) { - if (completed) completed(self); - if (callDelegate) [self performDelegate:@selector(viewDeckControllerDidOpenLeftView:animated:) animated:YES]; - }]; - }]; - - return YES; -} - -- (BOOL)closeLeftViewAnimated:(BOOL)animated { - return [self closeLeftViewAnimated:animated completion:nil]; -} - -- (BOOL)closeLeftViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed { - return [self closeLeftViewAnimated:animated callDelegate:YES completion:completed]; -} - -- (BOOL)closeLeftViewAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - return [self closeLeftViewAnimated:animated options:UIViewAnimationOptionCurveEaseInOut callDelegate:callDelegate completion:completed]; -} - -- (BOOL)closeLeftViewAnimated:(BOOL)animated options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - if (self.leftControllerIsClosed) return YES; - - // check the delegate to allow closing - if (callDelegate && ![self checkDelegate:@selector(viewDeckControllerWillCloseLeftView:animated:) animated:animated]) return NO; - - [UIView animateWithDuration:CLOSE_SLIDE_DURATION(animated) delay:0 options:options | UIViewAnimationOptionLayoutSubviews animations:^{ - [self setSlidingFrameForOffset:0]; - [self centerViewVisible]; - } completion:^(BOOL finished) { - [self hideAppropriateSideViews]; - if (completed) completed(self); - if (callDelegate) { - [self performDelegate:@selector(viewDeckControllerDidCloseLeftView:animated:) animated:animated]; - [self performDelegate:@selector(viewDeckControllerDidShowCenterView:animated:) animated:animated]; - } - }]; - - return YES; -} - -- (BOOL)closeLeftViewBouncing:(IIViewDeckControllerBlock)bounced { - return [self closeLeftViewBouncing:bounced completion:nil]; -} - -- (BOOL)closeLeftViewBouncing:(IIViewDeckControllerBlock)bounced completion:(IIViewDeckControllerBlock)completed { - return [self closeLeftViewBouncing:bounced callDelegate:YES completion:completed]; -} - -- (BOOL)closeLeftViewBouncing:(IIViewDeckControllerBlock)bounced callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - if (self.leftControllerIsClosed) return YES; - - // check the delegate to allow closing - if (callDelegate && ![self checkDelegate:@selector(viewDeckControllerWillCloseLeftView:animated:) animated:YES]) return NO; - - // first open the view completely, run the block (to allow changes) and close it again. - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) delay:0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionLayoutSubviews animations:^{ - [self setSlidingFrameForOffset:self.referenceBounds.size.width]; - } completion:^(BOOL finished) { - // run block if it's defined - if (bounced) bounced(self); - if (callDelegate && self.delegate && [self.delegate respondsToSelector:@selector(viewDeckController:didBounceWithClosingController:)]) - [self.delegate viewDeckController:self didBounceWithClosingController:self.leftController]; - - [UIView animateWithDuration:CLOSE_SLIDE_DURATION(YES) delay:0 options:UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionLayoutSubviews animations:^{ - [self setSlidingFrameForOffset:0]; - [self centerViewVisible]; - } completion:^(BOOL finished2) { - [self hideAppropriateSideViews]; - if (completed) completed(self); - if (callDelegate) { - [self performDelegate:@selector(viewDeckControllerDidCloseLeftView:animated:) animated:YES]; - [self performDelegate:@selector(viewDeckControllerDidShowCenterView:animated:) animated:YES]; - } - }]; - }]; - - return YES; -} - - -- (BOOL)toggleRightView { - return [self toggleRightViewAnimated:YES]; -} - -- (BOOL)openRightView { - return [self openRightViewAnimated:YES]; -} - -- (BOOL)closeRightView { - return [self closeRightViewAnimated:YES]; -} - -- (BOOL)toggleRightViewAnimated:(BOOL)animated { - return [self toggleRightViewAnimated:animated completion:nil]; -} - -- (BOOL)toggleRightViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed { - if ([self rightControllerIsClosed]) - return [self openRightViewAnimated:animated completion:completed]; - else - return [self closeRightViewAnimated:animated completion:completed]; -} - -- (BOOL)openRightViewAnimated:(BOOL)animated { - return [self openRightViewAnimated:animated completion:nil]; -} - -- (BOOL)openRightViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed { - return [self openRightViewAnimated:animated options:UIViewAnimationOptionCurveEaseInOut callDelegate:YES completion:completed]; -} - -- (BOOL)openRightViewAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - return [self openRightViewAnimated:animated options:UIViewAnimationOptionCurveEaseInOut callDelegate:callDelegate completion:completed]; -} - -- (BOOL)openRightViewAnimated:(BOOL)animated options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - if (!self.rightController || II_FLOAT_EQUAL(CGRectGetMaxX(self.slidingControllerView.frame), self.rightLedge)) return YES; - - // check the delegate to allow opening - if (callDelegate && ![self checkDelegate:@selector(viewDeckControllerWillOpenRightView:animated:) animated:animated]) return NO; - // also close the left view if it's open. Since the delegate can cancel the close, check the result. - if (callDelegate && ![self closeLeftViewAnimated:animated options:options callDelegate:callDelegate completion:completed]) return NO; - - [UIView animateWithDuration:OPEN_SLIDE_DURATION(animated) delay:0 options:options | UIViewAnimationOptionLayoutSubviews animations:^{ - self.rightController.view.hidden = NO; - [self setSlidingFrameForOffset:self.rightLedge - self.referenceBounds.size.width]; - [self centerViewHidden]; - } completion:^(BOOL finished) { - if (completed) completed(self); - if (callDelegate) [self performDelegate:@selector(viewDeckControllerDidOpenRightView:animated:) animated:animated]; - }]; - - return YES; -} - -- (BOOL)openRightViewBouncing:(IIViewDeckControllerBlock)bounced { - return [self openRightViewBouncing:bounced completion:nil]; -} - -- (BOOL)openRightViewBouncing:(IIViewDeckControllerBlock)bounced completion:(IIViewDeckControllerBlock)completed { - return [self openRightViewBouncing:bounced callDelegate:YES completion:completed]; -} - -- (BOOL)openRightViewBouncing:(IIViewDeckControllerBlock)bounced callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - return [self openRightViewBouncing:bounced options:UIViewAnimationOptionCurveEaseInOut callDelegate:YES completion:completed]; -} - -- (BOOL)openRightViewBouncing:(IIViewDeckControllerBlock)bounced options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - if (!self.rightController || II_FLOAT_EQUAL(CGRectGetMinX(self.slidingControllerView.frame), self.rightLedge)) return YES; - - // check the delegate to allow opening - if (callDelegate && ![self checkDelegate:@selector(viewDeckControllerWillOpenRightView:animated:) animated:YES]) return NO; - // also close the right view if it's open. Since the delegate can cancel the close, check the result. - if (callDelegate && ![self closeLeftViewAnimated:YES options:options callDelegate:callDelegate completion:completed]) return NO; - - // first open the view completely, run the block (to allow changes) - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) delay:0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionLayoutSubviews animations:^{ - self.rightController.view.hidden = NO; - [self setSlidingFrameForOffset:-self.referenceBounds.size.width]; - } completion:^(BOOL finished) { - // run block if it's defined - if (bounced) bounced(self); - [self centerViewHidden]; - - // now slide the view back to the ledge position - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) delay:0 options:options | UIViewAnimationOptionLayoutSubviews | UIViewAnimationOptionBeginFromCurrentState animations:^{ - [self setSlidingFrameForOffset:self.rightLedge - self.referenceBounds.size.width]; - } completion:^(BOOL finished) { - if (completed) completed(self); - if (callDelegate) [self performDelegate:@selector(viewDeckControllerDidOpenRightView:animated:) animated:YES]; - }]; - }]; - - return YES; -} - -- (BOOL)closeRightViewAnimated:(BOOL)animated { - return [self closeRightViewAnimated:animated completion:nil]; -} - -- (BOOL)closeRightViewAnimated:(BOOL)animated completion:(IIViewDeckControllerBlock)completed { - return [self closeRightViewAnimated:animated options:UIViewAnimationOptionCurveEaseInOut callDelegate:YES completion:completed]; -} - -- (BOOL)closeRightViewAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - return [self openRightViewAnimated:animated options:UIViewAnimationOptionCurveEaseInOut callDelegate:callDelegate completion:completed]; -} - -- (BOOL)closeRightViewAnimated:(BOOL)animated options:(UIViewAnimationOptions)options callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - if (self.rightControllerIsClosed) return YES; - - // check the delegate to allow closing - if (callDelegate && ![self checkDelegate:@selector(viewDeckControllerWillCloseRightView:animated:) animated:animated]) return NO; - - [UIView animateWithDuration:CLOSE_SLIDE_DURATION(animated) delay:0 options:options | UIViewAnimationOptionLayoutSubviews animations:^{ - [self setSlidingFrameForOffset:0]; - [self centerViewVisible]; - } completion:^(BOOL finished) { - if (completed) completed(self); - [self hideAppropriateSideViews]; - if (callDelegate) { - [self performDelegate:@selector(viewDeckControllerDidCloseRightView:animated:) animated:animated]; - [self performDelegate:@selector(viewDeckControllerDidShowCenterView:animated:) animated:animated]; - } - }]; - - return YES; -} - -- (BOOL)closeRightViewBouncing:(IIViewDeckControllerBlock)bounced { - return [self closeRightViewBouncing:bounced completion:nil]; -} - -- (BOOL)closeRightViewBouncing:(IIViewDeckControllerBlock)bounced completion:(IIViewDeckControllerBlock)completed { - return [self closeRightViewBouncing:bounced callDelegate:YES completion:completed]; -} - -- (BOOL)closeRightViewBouncing:(IIViewDeckControllerBlock)bounced callDelegate:(BOOL)callDelegate completion:(IIViewDeckControllerBlock)completed { - if (self.rightControllerIsClosed) return YES; - - // check the delegate to allow closing - if (callDelegate && ![self checkDelegate:@selector(viewDeckControllerWillCloseRightView:animated:) animated:YES]) return NO; - - [UIView animateWithDuration:OPEN_SLIDE_DURATION(YES) delay:0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionLayoutSubviews animations:^{ - [self setSlidingFrameForOffset:-self.referenceBounds.size.width]; - } completion:^(BOOL finished) { - if (bounced) bounced(self); - if (callDelegate && self.delegate && [self.delegate respondsToSelector:@selector(viewDeckController:didBounceWithClosingController:)]) - [self.delegate viewDeckController:self didBounceWithClosingController:self.rightController]; - - [UIView animateWithDuration:CLOSE_SLIDE_DURATION(YES) delay:0 options:UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionLayoutSubviews animations:^{ - [self setSlidingFrameForOffset:0]; - [self centerViewVisible]; - } completion:^(BOOL finished2) { - [self hideAppropriateSideViews]; - if (completed) completed(self); - [self performDelegate:@selector(viewDeckControllerDidCloseRightView:animated:) animated:YES]; - [self performDelegate:@selector(viewDeckControllerDidShowCenterView:animated:) animated:YES]; - }]; - }]; - - return YES; -} - -- (void)rightViewPushViewControllerOverCenterController:(UIViewController*)controller { - NSAssert([self.centerController isKindOfClass:[UINavigationController class]], @"cannot rightViewPushViewControllerOverCenterView when center controller is not a navigation controller"); - - UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0); - - CGContextRef context = UIGraphicsGetCurrentContext(); - [self.view.layer renderInContext:context]; - UIImage *deckshot = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - UIImageView* shotView = [[UIImageView alloc] initWithImage:deckshot]; - shotView.frame = self.view.frame; - [self.view.superview addSubview:shotView]; - CGRect targetFrame = self.view.frame; - self.view.frame = CGRectOffset(self.view.frame, self.view.frame.size.width, 0); - - [self closeRightViewAnimated:NO]; - UINavigationController* navController = (UINavigationController*)self.centerController; - [navController pushViewController:controller animated:NO]; - - [UIView animateWithDuration:0.3 delay:0 options:0 animations:^{ - shotView.frame = CGRectOffset(shotView.frame, -self.view.frame.size.width, 0); - self.view.frame = targetFrame; - } completion:^(BOOL finished) { - [shotView removeFromSuperview]; - }]; -} - - - -#pragma mark - Pre iOS5 message relaying - -- (void)relayAppearanceMethod:(void(^)(UIViewController* controller))relay forced:(BOOL)forced { - bool shouldRelay = ![self respondsToSelector:@selector(automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers)] || ![self performSelector:@selector(automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers)]; - - // don't relay if the controller supports automatic relaying - if (!shouldRelay && !forced) - return; - - relay(self.centerController); - relay(self.leftController); - relay(self.rightController); -} - -- (void)relayAppearanceMethod:(void(^)(UIViewController* controller))relay { - [self relayAppearanceMethod:relay forced:NO]; -} - -#pragma mark - center view hidden stuff - -- (void)centerViewVisible { - [self removePanners]; - if (self.centerTapper) { - [self.centerTapper removeTarget:self action:@selector(centerTapped) forControlEvents:UIControlEventTouchUpInside]; - [self.centerTapper removeFromSuperview]; - } - self.centerTapper = nil; - [self addPanners]; -} - -- (void)centerViewHidden { - if (IIViewDeckCenterHiddenIsInteractive(self.centerhiddenInteractivity)) - return; - - [self removePanners]; - if (!self.centerTapper) { - self.centerTapper = [UIButton buttonWithType:UIButtonTypeCustom]; - self.centerTapper.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.centerTapper.frame = [self.centerView bounds]; - [self.centerView addSubview:self.centerTapper]; - [self.centerTapper addTarget:self action:@selector(centerTapped) forControlEvents:UIControlEventTouchUpInside]; - self.centerTapper.backgroundColor = [UIColor clearColor]; - - } - self.centerTapper.frame = [self.centerView bounds]; - [self addPanners]; -} - -- (void)centerTapped { - if (IIViewDeckCenterHiddenCanTapToClose(self.centerhiddenInteractivity)) { - if (self.leftController && CGRectGetMinX(self.slidingControllerView.frame) > 0) { - if (self.centerhiddenInteractivity == IIViewDeckCenterHiddenNotUserInteractiveWithTapToClose) - [self closeLeftView]; - else - [self closeLeftViewBouncing:nil]; - } - if (self.rightController && CGRectGetMinX(self.slidingControllerView.frame) < 0) { - if (self.centerhiddenInteractivity == IIViewDeckCenterHiddenNotUserInteractiveWithTapToClose) - [self closeRightView]; - else - [self closeRightViewBouncing:nil]; - } - - } -} - -#pragma mark - Panning - -- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { - if (self.panningGestureDelegate && [self.panningGestureDelegate respondsToSelector:@selector(gestureRecognizerShouldBegin:)]) { - BOOL result = [self.panningGestureDelegate gestureRecognizerShouldBegin:gestureRecognizer]; - if (!result) return result; - } - - CGFloat px = self.slidingControllerView.frame.origin.x; - if (px != 0) return YES; - - CGFloat x = [self locationOfPanner:(UIPanGestureRecognizer*)gestureRecognizer]; - BOOL ok = YES; - - if (x > 0) { - ok = [self checkDelegate:@selector(viewDeckControllerWillOpenLeftView:animated:) animated:NO]; - if (!ok) - [self closeLeftViewAnimated:NO]; - } - else if (x < 0) { - ok = [self checkDelegate:@selector(viewDeckControllerWillOpenRightView:animated:) animated:NO]; - if (!ok) - [self closeRightViewAnimated:NO]; - } - - return ok; -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { - if (self.panningGestureDelegate && [self.panningGestureDelegate respondsToSelector:@selector(gestureRecognizer:shouldReceiveTouch:)]) { - BOOL result = [self.panningGestureDelegate gestureRecognizer:gestureRecognizer - shouldReceiveTouch:touch]; - if (!result) return result; - } - - if ([[touch view] isKindOfClass:[UISlider class]]) - return NO; - - _panOrigin = self.slidingControllerView.frame.origin.x; - return YES; -} - --(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { - if (self.panningGestureDelegate && [self.panningGestureDelegate respondsToSelector:@selector(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)]) { - return [self.panningGestureDelegate gestureRecognizer:gestureRecognizer - shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer]; - } - - return NO; -} - -- (CGFloat)locationOfPanner:(UIPanGestureRecognizer*)panner { - CGPoint pan = [panner translationInView:self.referenceView]; - CGFloat x = pan.x + _panOrigin; - - if (!self.leftController) x = MIN(0, x); - if (!self.rightController) x = MAX(0, x); - - CGFloat w = self.referenceBounds.size.width; - CGFloat lx = fmaxf(fminf(x, w-self.leftLedge), -w+self.rightLedge); - - if (self.elastic) { - CGFloat dx = ABS(x) - ABS(lx); - if (dx > 0) { - dx = dx / logf(dx + 1) * 2; - x = lx + (x < 0 ? -dx : dx); - } - } - else { - x = lx; - } - - return [self limitOffset:x]; -} - -- (void)panned:(UIPanGestureRecognizer*)panner { - if (!_enabled) return; - - CGFloat px = self.slidingControllerView.frame.origin.x; - CGFloat x = [self locationOfPanner:panner]; - CGFloat w = self.referenceBounds.size.width; - - SEL didCloseSelector = nil; - SEL didOpenSelector = nil; - - // if we move over a boundary while dragging, ... - if (px <= 0 && x >= 0 && px != x) { - // ... then we need to check if the other side can open. - if (px < 0) { - BOOL canClose = [self checkDelegate:@selector(viewDeckControllerWillCloseRightView:animated:) animated:NO]; - if (!canClose) - return; - didCloseSelector = @selector(viewDeckControllerDidCloseRightView:animated:); - } - - if (x > 0) { - BOOL canOpen = [self checkDelegate:@selector(viewDeckControllerWillOpenLeftView:animated:) animated:NO]; - didOpenSelector = @selector(viewDeckControllerDidOpenLeftView:animated:); - if (!canOpen) { - [self closeRightViewAnimated:NO]; - return; - } - } - } - else if (px >= 0 && x <= 0 && px != x) { - if (px > 0) { - BOOL canClose = [self checkDelegate:@selector(viewDeckControllerWillCloseLeftView:animated:) animated:NO]; - if (!canClose) { - return; - } - didCloseSelector = @selector(viewDeckControllerDidCloseLeftView:animated:); - } - - if (x < 0) { - BOOL canOpen = [self checkDelegate:@selector(viewDeckControllerWillOpenRightView:animated:) animated:NO]; - didOpenSelector = @selector(viewDeckControllerDidOpenRightView:animated:); - if (!canOpen) { - [self closeLeftViewAnimated:NO]; - return; - } - } - } - - [self setSlidingFrameForOffset:x]; - - [self performOffsetDelegate:@selector(viewDeckController:didPanToOffset:) offset:x]; - - if (panner.state == UIGestureRecognizerStateEnded || - panner.state == UIGestureRecognizerStateCancelled || - panner.state == UIGestureRecognizerStateFailed) { - if (self.slidingControllerView.frame.origin.x == 0.0f) - [self centerViewVisible]; - else - [self centerViewHidden]; - - CGFloat lw3 = (w-self.leftLedge) / 3.0; - CGFloat rw3 = (w-self.rightLedge) / 3.0; - CGFloat velocity = [panner velocityInView:self.referenceView].x; - if (ABS(velocity) < 500) { - // small velocity, no movement - if (x >= w - self.leftLedge - lw3) { - [self openLeftViewAnimated:YES options:UIViewAnimationOptionCurveEaseOut callDelegate:NO completion:nil]; - } - else if (x <= self.rightLedge + rw3 - w) { - [self openRightViewAnimated:YES options:UIViewAnimationOptionCurveEaseOut callDelegate:NO completion:nil]; - } - else - [self showCenterView:YES]; - } - else if (velocity < 0) { - // swipe to the left - if (x < 0) { - [self openRightViewAnimated:YES options:UIViewAnimationOptionCurveEaseOut callDelegate:YES completion:nil]; - } - else - [self showCenterView:YES]; - } - else if (velocity > 0) { - // swipe to the right - if (x > 0) { - [self openLeftViewAnimated:YES options:UIViewAnimationOptionCurveEaseOut callDelegate:YES completion:nil]; - } - else - [self showCenterView:YES]; - } - } - else - [self hideAppropriateSideViews]; - - if (didCloseSelector) - [self performDelegate:didCloseSelector animated:NO]; - if (didOpenSelector) - [self performDelegate:didOpenSelector animated:NO]; -} - - -- (void)addPanner:(UIView*)view { - if (!view) return; - - UIPanGestureRecognizer* panner = II_AUTORELEASE([[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panned:)]); - panner.cancelsTouchesInView = YES; - panner.delegate = self; - [view addGestureRecognizer:panner]; - [self.panners addObject:panner]; -} - - -- (void)addPanners { - [self removePanners]; - - switch (_panningMode) { - case IIViewDeckNoPanning: - break; - - case IIViewDeckFullViewPanning: - [self addPanner:self.slidingControllerView]; - // also add to disabled center - if (self.centerTapper) - [self addPanner:self.centerTapper]; - // also add to navigationbar if present - if (self.navigationController && !self.navigationController.navigationBarHidden) - [self addPanner:self.navigationController.navigationBar]; - break; - - case IIViewDeckNavigationBarPanning: - if (self.navigationController && !self.navigationController.navigationBarHidden) { - [self addPanner:self.navigationController.navigationBar]; - } - - if (self.centerController.navigationController && !self.centerController.navigationController.navigationBarHidden) { - [self addPanner:self.centerController.navigationController.navigationBar]; - } - - if ([self.centerController isKindOfClass:[UINavigationController class]] && !((UINavigationController*)self.centerController).navigationBarHidden) { - [self addPanner:((UINavigationController*)self.centerController).navigationBar]; - } - break; - case IIViewDeckPanningViewPanning: - if (_panningView) { - [self addPanner:self.panningView]; - } - break; - } -} - - -- (void)removePanners { - for (UIGestureRecognizer* panner in self.panners) { - [panner.view removeGestureRecognizer:panner]; - } - [self.panners removeAllObjects]; -} - -#pragma mark - Delegate convenience methods - -- (BOOL)checkDelegate:(SEL)selector animated:(BOOL)animated { - BOOL ok = YES; - // used typed message send to properly pass values - BOOL (*objc_msgSendTyped)(id self, SEL _cmd, IIViewDeckController* foo, BOOL animated) = (void*)objc_msgSend; - - if (self.delegate && [self.delegate respondsToSelector:selector]) - ok = ok & objc_msgSendTyped(self.delegate, selector, self, animated); - - for (UIViewController* controller in self.controllers) { - // check controller first - if ([controller respondsToSelector:selector] && (id)controller != (id)self.delegate) - ok = ok & objc_msgSendTyped(controller, selector, self, animated); - // if that fails, check if it's a navigation controller and use the top controller - else if ([controller isKindOfClass:[UINavigationController class]]) { - UIViewController* topController = ((UINavigationController*)controller).topViewController; - if ([topController respondsToSelector:selector] && (id)topController != (id)self.delegate) - ok = ok & objc_msgSendTyped(topController, selector, self, animated); - } - } - - return ok; -} - -- (void)performDelegate:(SEL)selector animated:(BOOL)animated { - // used typed message send to properly pass values - void (*objc_msgSendTyped)(id self, SEL _cmd, IIViewDeckController* foo, BOOL animated) = (void*)objc_msgSend; - - if (self.delegate && [self.delegate respondsToSelector:selector]) - objc_msgSendTyped(self.delegate, selector, self, animated); - - for (UIViewController* controller in self.controllers) { - // check controller first - if ([controller respondsToSelector:selector] && (id)controller != (id)self.delegate) - objc_msgSendTyped(controller, selector, self, animated); - // if that fails, check if it's a navigation controller and use the top controller - else if ([controller isKindOfClass:[UINavigationController class]]) { - UIViewController* topController = ((UINavigationController*)controller).topViewController; - if ([topController respondsToSelector:selector] && (id)topController != (id)self.delegate) - objc_msgSendTyped(topController, selector, self, animated); - } - } -} - -- (void)performOffsetDelegate:(SEL)selector offset:(CGFloat)offset { - void (*objc_msgSendTyped)(id self, SEL _cmd, IIViewDeckController* foo, CGFloat offset) = (void*)objc_msgSend; - if (self.delegate && [self.delegate respondsToSelector:selector]) - objc_msgSendTyped(self.delegate, selector, self, offset); - - for (UIViewController* controller in self.controllers) { - // check controller first - if ([controller respondsToSelector:selector] && (id)controller != (id)self.delegate) - objc_msgSendTyped(controller, selector, self, offset); - - // if that fails, check if it's a navigation controller and use the top controller - else if ([controller isKindOfClass:[UINavigationController class]]) { - UIViewController* topController = ((UINavigationController*)controller).topViewController; - if ([topController respondsToSelector:selector] && (id)topController != (id)self.delegate) - objc_msgSendTyped(topController, selector, self, offset); - } - } -} - - -#pragma mark - Properties - -- (void)setTitle:(NSString *)title { - if (!II_STRING_EQUAL(title, self.title)) [super setTitle:title]; - if (!II_STRING_EQUAL(title, self.centerController.title)) self.centerController.title = title; -} - -- (NSString*)title { - return self.centerController.title; -} - -- (void)setPanningMode:(IIViewDeckPanningMode)panningMode { - if (_viewAppeared) { - [self removePanners]; - _panningMode = panningMode; - [self addPanners]; - } - else - _panningMode = panningMode; -} - -- (void)setPanningView:(UIView *)panningView { - if (_panningView != panningView) { - II_RELEASE(_panningView); - _panningView = panningView; - II_RETAIN(_panningView); - - if (_viewAppeared && _panningMode == IIViewDeckPanningViewPanning) - [self addPanners]; - } -} - -- (void)setNavigationControllerBehavior:(IIViewDeckNavigationControllerBehavior)navigationControllerBehavior { - if (!_viewAppeared) { - _navigationControllerBehavior = navigationControllerBehavior; - } - else { - @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Cannot set navigationcontroller behavior when the view deck is already showing." userInfo:nil]; - } -} - -- (void)applySideController:(__strong UIViewController **)controllerStore to:(UIViewController *)newController otherSideController:(UIViewController *)otherController clearOtherController:(void(^)())clearOtherController { - void(^beforeBlock)(UIViewController* controller) = ^(UIViewController* controller){}; - void(^afterBlock)(UIViewController* controller, BOOL left) = ^(UIViewController* controller, BOOL left){}; - - if (_viewAppeared) { - beforeBlock = ^(UIViewController* controller) { - [controller vdc_viewWillDisappear:NO]; - [controller.view removeFromSuperview]; - [controller vdc_viewDidDisappear:NO]; - }; - afterBlock = ^(UIViewController* controller, BOOL left) { - [controller vdc_viewWillAppear:NO]; - controller.view.hidden = left ? self.slidingControllerView.frame.origin.x <= 0 : self.slidingControllerView.frame.origin.x >= 0; - controller.view.frame = self.referenceBounds; - controller.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - if (self.slidingController) - [self.referenceView insertSubview:controller.view belowSubview:self.slidingControllerView]; - else - [self.referenceView addSubview:controller.view]; - [controller vdc_viewDidAppear:NO]; - }; - } - - // start the transition - if (*controllerStore) { - [*controllerStore willMoveToParentViewController:nil]; - if (newController == self.centerController) self.centerController = nil; - if (newController == otherController && clearOtherController) clearOtherController(); - beforeBlock(*controllerStore); - [*controllerStore setViewDeckController:nil]; - [*controllerStore removeFromParentViewController]; - [*controllerStore didMoveToParentViewController:nil]; - } - - // make the switch - if (*controllerStore != newController) { - II_RELEASE(*controllerStore); - *controllerStore = newController; - II_RETAIN(*controllerStore); - } - - if (*controllerStore) { - [newController willMoveToParentViewController:nil]; - [newController removeFromParentViewController]; - [newController didMoveToParentViewController:nil]; - - // and finish the transition - UIViewController* parentController = (self.referenceView == self.view) ? self : [[self parentViewController] parentViewController]; - [parentController addChildViewController:*controllerStore]; - [*controllerStore setViewDeckController:self]; - afterBlock(*controllerStore, *controllerStore == _leftController); - [*controllerStore didMoveToParentViewController:parentController]; - } -} - -- (void)reapplySideController:(__strong UIViewController **)controllerStore { - [self applySideController:controllerStore to:*controllerStore otherSideController:nil clearOtherController:nil]; -} - -- (void)setLeftController:(UIViewController *)leftController { - if (_leftController == leftController) return; - [self applySideController:&_leftController to:leftController otherSideController:_rightController clearOtherController:^() { self.rightController = nil; }]; -} - -- (void)setRightController:(UIViewController *)rightController { - if (_rightController == rightController) return; - [self applySideController:&_rightController to:rightController otherSideController:_leftController clearOtherController:^() { self.leftController = nil; }]; -} - - -- (void)setCenterController:(UIViewController *)centerController { - if (_centerController == centerController) return; - - void(^beforeBlock)(UIViewController* controller) = ^(UIViewController* controller){}; - void(^afterBlock)(UIViewController* controller) = ^(UIViewController* controller){}; - - __block CGRect currentFrame = self.referenceBounds; - if (_viewAppeared) { - beforeBlock = ^(UIViewController* controller) { - [controller vdc_viewWillDisappear:NO]; - [self restoreShadowToSlidingView]; - [self removePanners]; - [controller.view removeFromSuperview]; - [controller vdc_viewDidDisappear:NO]; - [self.centerView removeFromSuperview]; - }; - afterBlock = ^(UIViewController* controller) { - [self.view addSubview:self.centerView]; - [controller vdc_viewWillAppear:NO]; - UINavigationController* navController = [centerController isKindOfClass:[UINavigationController class]] - ? (UINavigationController*)centerController - : nil; - BOOL barHidden = NO; - if (navController != nil && !navController.navigationBarHidden) { - barHidden = YES; - navController.navigationBarHidden = YES; - } - - [self setSlidingAndReferenceViews]; - controller.view.frame = currentFrame; - controller.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - controller.view.hidden = NO; - [self.centerView addSubview:controller.view]; - - if (barHidden) - navController.navigationBarHidden = NO; - - [self addPanners]; - [self applyShadowToSlidingView]; - [controller vdc_viewDidAppear:NO]; - }; - } - - // start the transition - if (_centerController) { - currentFrame = _centerController.view.frame; - [_centerController willMoveToParentViewController:nil]; - if (centerController == self.leftController) self.leftController = nil; - if (centerController == self.rightController) self.rightController = nil; - beforeBlock(_centerController); - @try { - [_centerController removeObserver:self forKeyPath:@"title"]; - if (self.automaticallyUpdateTabBarItems) { - [_centerController removeObserver:self forKeyPath:@"tabBarItem.title"]; - [_centerController removeObserver:self forKeyPath:@"tabBarItem.image"]; - [_centerController removeObserver:self forKeyPath:@"hidesBottomBarWhenPushed"]; - } - } - @catch (NSException *exception) {} - [_centerController setViewDeckController:nil]; - [_centerController removeFromParentViewController]; - - - [_centerController didMoveToParentViewController:nil]; - II_RELEASE(_centerController); - } - - // make the switch - _centerController = centerController; - - if (_centerController) { - // and finish the transition - II_RETAIN(_centerController); - [self addChildViewController:_centerController]; - [_centerController setViewDeckController:self]; - [_centerController addObserver:self forKeyPath:@"title" options:0 context:nil]; - self.title = _centerController.title; - if (self.automaticallyUpdateTabBarItems) { - [_centerController addObserver:self forKeyPath:@"tabBarItem.title" options:0 context:nil]; - [_centerController addObserver:self forKeyPath:@"tabBarItem.image" options:0 context:nil]; - [_centerController addObserver:self forKeyPath:@"hidesBottomBarWhenPushed" options:0 context:nil]; - self.tabBarItem.title = _centerController.tabBarItem.title; - self.tabBarItem.image = _centerController.tabBarItem.image; - self.hidesBottomBarWhenPushed = _centerController.hidesBottomBarWhenPushed; - } - - afterBlock(_centerController); - [_centerController didMoveToParentViewController:self]; - } -} - -- (void)setAutomaticallyUpdateTabBarItems:(BOOL)automaticallyUpdateTabBarItems { - if (_automaticallyUpdateTabBarItems) { - @try { - [_centerController removeObserver:self forKeyPath:@"tabBarItem.title"]; - [_centerController removeObserver:self forKeyPath:@"tabBarItem.image"]; - [_centerController removeObserver:self forKeyPath:@"hidesBottomBarWhenPushed"]; - } - @catch (NSException *exception) {} - } - - _automaticallyUpdateTabBarItems = automaticallyUpdateTabBarItems; - - if (_automaticallyUpdateTabBarItems) { - [_centerController addObserver:self forKeyPath:@"tabBarItem.title" options:0 context:nil]; - [_centerController addObserver:self forKeyPath:@"tabBarItem.image" options:0 context:nil]; - [_centerController addObserver:self forKeyPath:@"hidesBottomBarWhenPushed" options:0 context:nil]; - self.tabBarItem.title = _centerController.tabBarItem.title; - self.tabBarItem.image = _centerController.tabBarItem.image; - } -} - - -- (BOOL)setSlidingAndReferenceViews { - if (self.navigationController && self.navigationControllerBehavior == IIViewDeckNavigationControllerIntegrated) { - if ([self.navigationController.view superview]) { - _slidingController = self.navigationController; - self.referenceView = [self.navigationController.view superview]; - return YES; - } - } - else { - _slidingController = self.centerController; - self.referenceView = self.view; - return YES; - } - - return NO; -} - -- (UIView*)slidingControllerView { - if (self.navigationController && self.navigationControllerBehavior == IIViewDeckNavigationControllerIntegrated) { - return self.slidingController.view; - } - else { - return self.centerView; - } -} - -#pragma mark - observation - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if (object == _centerController) { - if ([@"tabBarItem.title" isEqualToString:keyPath]) { - self.tabBarItem.title = _centerController.tabBarItem.title; - return; - } - - if ([@"tabBarItem.image" isEqualToString:keyPath]) { - self.tabBarItem.image = _centerController.tabBarItem.image; - return; - } - - if ([@"hidesBottomBarWhenPushed" isEqualToString:keyPath]) { - self.hidesBottomBarWhenPushed = _centerController.hidesBottomBarWhenPushed; - self.tabBarController.hidesBottomBarWhenPushed = _centerController.hidesBottomBarWhenPushed; - return; - } - } - - if ([@"title" isEqualToString:keyPath]) { - if (!II_STRING_EQUAL([super title], self.centerController.title)) { - self.title = self.centerController.title; - } - return; - } - - if ([keyPath isEqualToString:@"bounds"]) { - CGFloat offset = self.slidingControllerView.frame.origin.x; - [self setSlidingFrameForOffset:offset]; - self.slidingControllerView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.referenceBounds].CGPath; - UINavigationController* navController = [self.centerController isKindOfClass:[UINavigationController class]] - ? (UINavigationController*)self.centerController - : nil; - if (navController != nil && !navController.navigationBarHidden) { - navController.navigationBarHidden = YES; - navController.navigationBarHidden = NO; - } - return; - } -} - -#pragma mark - Shadow - -- (void)restoreShadowToSlidingView { - UIView* shadowedView = self.slidingControllerView; - if (!shadowedView) return; - - shadowedView.layer.shadowRadius = self.originalShadowRadius; - shadowedView.layer.shadowOpacity = self.originalShadowOpacity; - shadowedView.layer.shadowColor = [self.originalShadowColor CGColor]; - shadowedView.layer.shadowOffset = self.originalShadowOffset; - shadowedView.layer.shadowPath = [self.originalShadowPath CGPath]; -} - -- (void)applyShadowToSlidingView { - UIView* shadowedView = self.slidingControllerView; - if (!shadowedView) return; - - self.originalShadowRadius = shadowedView.layer.shadowRadius; - self.originalShadowOpacity = shadowedView.layer.shadowOpacity; - self.originalShadowColor = shadowedView.layer.shadowColor ? [UIColor colorWithCGColor:self.slidingControllerView.layer.shadowColor] : nil; - self.originalShadowOffset = shadowedView.layer.shadowOffset; - self.originalShadowPath = shadowedView.layer.shadowPath ? [UIBezierPath bezierPathWithCGPath:self.slidingControllerView.layer.shadowPath] : nil; - - if ([self.delegate respondsToSelector:@selector(viewDeckController:applyShadow:withBounds:)]) { - [self.delegate viewDeckController:self applyShadow:shadowedView.layer withBounds:self.referenceBounds]; - } - else { - shadowedView.layer.masksToBounds = NO; - shadowedView.layer.shadowRadius = 10; - shadowedView.layer.shadowOpacity = 0.5; - shadowedView.layer.shadowColor = [[UIColor blackColor] CGColor]; - shadowedView.layer.shadowOffset = CGSizeZero; - shadowedView.layer.shadowPath = [[UIBezierPath bezierPathWithRect:shadowedView.bounds] CGPath]; - } -} - - -@end - -#pragma mark - - -@implementation UIViewController (UIViewDeckItem) - -@dynamic viewDeckController; - -static const char* viewDeckControllerKey = "ViewDeckController"; - -- (IIViewDeckController*)viewDeckController_core { - return objc_getAssociatedObject(self, viewDeckControllerKey); -} - -- (IIViewDeckController*)viewDeckController { - id result = [self viewDeckController_core]; - if (!result && self.navigationController) - result = [self.navigationController viewDeckController]; - if (!result && [self respondsToSelector:@selector(wrapController)] && self.wrapController) - result = [self.wrapController viewDeckController]; - - return result; -} - -- (void)setViewDeckController:(IIViewDeckController*)viewDeckController { - objc_setAssociatedObject(self, viewDeckControllerKey, viewDeckController, OBJC_ASSOCIATION_ASSIGN); -} - -- (void)vdc_presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated { - UIViewController* controller = self.viewDeckController && (self.viewDeckController.navigationControllerBehavior == IIViewDeckNavigationControllerIntegrated || ![self.viewDeckController.centerController isKindOfClass:[UINavigationController class]]) ? self.viewDeckController : self; - [controller vdc_presentModalViewController:modalViewController animated:animated]; // when we get here, the vdc_ method is actually the old, real method -} - -- (void)vdc_dismissModalViewControllerAnimated:(BOOL)animated { - UIViewController* controller = self.viewDeckController ? self.viewDeckController : self; - [controller vdc_dismissModalViewControllerAnimated:animated]; // when we get here, the vdc_ method is actually the old, real method -} - -#ifdef __IPHONE_5_0 - -- (void)vdc_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)animated completion:(void (^)(void))completion { - UIViewController* controller = self.viewDeckController && (self.viewDeckController.navigationControllerBehavior == IIViewDeckNavigationControllerIntegrated || ![self.viewDeckController.centerController isKindOfClass:[UINavigationController class]]) ? self.viewDeckController : self; - [controller vdc_presentViewController:viewControllerToPresent animated:animated completion:completion]; // when we get here, the vdc_ method is actually the old, real method -} - -- (void)vdc_dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion { - UIViewController* controller = self.viewDeckController ? self.viewDeckController : self; - [controller vdc_dismissViewControllerAnimated:flag completion:completion]; // when we get here, the vdc_ method is actually the old, real method -} - -#endif - -- (UINavigationController*)vdc_navigationController { - UIViewController* controller = self.viewDeckController_core ? self.viewDeckController_core : self; - return [controller vdc_navigationController]; // when we get here, the vdc_ method is actually the old, real method -} - -- (UINavigationItem*)vdc_navigationItem { - UIViewController* controller = self.viewDeckController_core ? self.viewDeckController_core : self; - return [controller vdc_navigationItem]; // when we get here, the vdc_ method is actually the old, real method -} - -+ (void)vdc_swizzle { - SEL presentModal = @selector(presentModalViewController:animated:); - SEL vdcPresentModal = @selector(vdc_presentModalViewController:animated:); - method_exchangeImplementations(class_getInstanceMethod(self, presentModal), class_getInstanceMethod(self, vdcPresentModal)); - - SEL presentVC = @selector(presentViewController:animated:completion:); - SEL vdcPresentVC = @selector(vdc_presentViewController:animated:completion:); - method_exchangeImplementations(class_getInstanceMethod(self, presentVC), class_getInstanceMethod(self, vdcPresentVC)); - - SEL nc = @selector(navigationController); - SEL vdcnc = @selector(vdc_navigationController); - method_exchangeImplementations(class_getInstanceMethod(self, nc), class_getInstanceMethod(self, vdcnc)); - - SEL ni = @selector(navigationItem); - SEL vdcni = @selector(vdc_navigationItem); - method_exchangeImplementations(class_getInstanceMethod(self, ni), class_getInstanceMethod(self, vdcni)); - - // view containment drop ins for - -@interface WrapController : UIViewController - -@property (nonatomic, readonly, retain) UIViewController* wrappedController; -@property (nonatomic, copy) void(^onViewDidLoad)(WrapController* controller); -@property (nonatomic, copy) void(^onViewWillAppear)(WrapController* controller, BOOL animated); -@property (nonatomic, copy) void(^onViewDidAppear)(WrapController* controller, BOOL animated); -@property (nonatomic, copy) void(^onViewWillDisappear)(WrapController* controller, BOOL animated); -@property (nonatomic, copy) void(^onViewDidDisappear)(WrapController* controller, BOOL animated); - -- (id)initWithViewController:(UIViewController*)controller; - -@end - -// category on WrappedController to provide access to the viewDeckController in the -// contained viewcontrollers, a la UINavigationController. -@interface UIViewController (WrapControllerItem) - -@property(nonatomic,readonly,assign) WrapController *wrapController; - -@end \ No newline at end of file diff --git a/Frameworks/ViewDeck/WrapController.m b/Frameworks/ViewDeck/WrapController.m deleted file mode 100644 index 94b5df0..0000000 --- a/Frameworks/ViewDeck/WrapController.m +++ /dev/null @@ -1,292 +0,0 @@ -// -// WrappedController.m -// IIViewDeck -// -// Copyright (C) 2011, Tom Adriaenssen -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of -// this software and associated documentation files (the "Software"), to deal in -// the Software without restriction, including without limitation the rights to -// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -// of the Software, and to permit persons to whom the Software is furnished to do -// so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -#if __has_feature(objc_arc) && __clang_major__ >= 3 -#define II_ARC_ENABLED 1 -#endif // __has_feature(objc_arc) - -#if II_ARC_ENABLED -#define II_RETAIN(xx) ((void)(0)) -#define II_RELEASE(xx) ((void)(0)) -#define II_AUTORELEASE(xx) (xx) -#else -#define II_RETAIN(xx) [xx retain] -#define II_RELEASE(xx) [xx release] -#define II_AUTORELEASE(xx) [xx autorelease] -#endif - -#define II_CGRectOffsetRightAndShrink(rect, offset) ({__typeof__(rect) __r = (rect); __typeof__(offset) __o = (offset); (CGRect) { __r.origin.x, __r.origin.y, __r.size.width-__o, __r.size.height }; }) -#define II_CGRectOffsetTopAndShrink(rect, offset) ({__typeof__(rect) __r = (rect); __typeof__(offset) __o = (offset); (CGRect) {{ __r.origin.x, __r.origin.y + __o}, {__r.size.width, __r.size.height-__o }}; }) -#define II_CGRectOffsetBottomAndShrink(rect, offset) ({__typeof__(rect) __r = (rect); __typeof__(offset) __o = (offset); (CGRect) { __r.origin.x, __r.origin.y, __r.size.width, __r.size.height-__o }; }) -#define II_CGRectShrink(rect, w, h) ({__typeof__(rect) __r = (rect); __typeof__(w) __w = (w); __typeof__(h) __h = (h); (CGRect) { __r.origin, __r.size.width - __w, __r.size.height - __h }; }) - -#import "WrapController.h" -#import -#import - -@interface UIViewController (WrappedItem_Internal) - -// internal setter for the wrapController property on UIViewController -- (void)setWrapController:(WrapController *)wrapController; - -@end - -@implementation WrapController - -@synthesize wrappedController = _wrappedController; -@synthesize onViewDidLoad = _onViewDidLoad; -@synthesize onViewWillAppear = _onViewWillAppear; -@synthesize onViewDidAppear = _onViewDidAppear; -@synthesize onViewWillDisappear = _onViewWillDisappear; -@synthesize onViewDidDisappear = _onViewDidDisappear; - -#pragma mark - View lifecycle - -- (id)initWithViewController:(UIViewController *)controller { - if ((self = [super init])) { - II_RETAIN(controller); - _wrappedController = controller; - [controller setWrapController:self]; - } - - return self; -} - -- (CGFloat)statusBarHeight { -// if (![[self.referenceView superview] isKindOfClass:[UIWindow class]]) -// return 0; -// - return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) - ? [UIApplication sharedApplication].statusBarFrame.size.width - : [UIApplication sharedApplication].statusBarFrame.size.height; -} - -// Implement loadView to create a view hierarchy programmatically, without using a nib. -- (void)loadView -{ -#if __IPHONE_5_0 - if ([self respondsToSelector:@selector(addChildViewController:)]) - [self addChildViewController:self.wrappedController]; -#endif - - self.view = II_AUTORELEASE([[UIView alloc] initWithFrame:II_CGRectOffsetTopAndShrink(self.wrappedController.view.frame, [self statusBarHeight])]); - self.view.autoresizingMask = self.wrappedController.view.autoresizingMask; - self.wrappedController.view.frame = self.view.bounds; - self.wrappedController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [self.view addSubview:self.wrappedController.view]; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - if (self.onViewDidLoad) - self.onViewDidLoad(self); -} - -- (void)viewDidUnload -{ - [super viewDidUnload]; - [self.wrappedController.view removeFromSuperview]; -} - -- (void)dealloc { -#if __IPHONE_5_0 - if ([_wrappedController respondsToSelector:@selector(removeFromParentViewController)]) { - [_wrappedController removeFromParentViewController]; - } -#endif - [_wrappedController setWrapController:nil]; - II_RELEASE(_wrappedController); - _wrappedController = nil; -#if !II_ARC_ENABLED - [super dealloc]; -#endif -} - -- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers { - return NO; -} - -- (UITabBarItem *)tabBarItem { - return _wrappedController.tabBarItem; -} - --(void)setTabBarItem:(UITabBarItem *)tabBarItem { - [_wrappedController setTabBarItem:tabBarItem]; -} - -- (BOOL)hidesBottomBarWhenPushed { - return _wrappedController.hidesBottomBarWhenPushed; -} - -- (void)setHidesBottomBarWhenPushed:(BOOL)hidesBottomBarWhenPushed { - [_wrappedController setHidesBottomBarWhenPushed:hidesBottomBarWhenPushed]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - if (self.onViewWillAppear) - self.onViewWillAppear(self, animated); - - [self.wrappedController viewWillAppear:animated]; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - if (self.onViewDidAppear) - self.onViewDidAppear(self, animated); - - [self.wrappedController viewDidAppear:animated]; -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - if (self.onViewWillDisappear) - self.onViewWillDisappear(self, animated); - - [self.wrappedController viewWillDisappear:animated]; -} - -- (void)viewDidDisappear:(BOOL)animated -{ - [super viewDidDisappear:animated]; - if (self.onViewDidDisappear) - self.onViewDidDisappear(self, animated); - - [self.wrappedController viewDidDisappear:animated]; -} - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -/* - - - - We need a specific rotation for out APP, comment the default one - - - - - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return [self.wrappedController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; -} - -- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; - [self.wrappedController willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; -} - -- (void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - [super willAnimateFirstHalfOfRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; - [self.wrappedController willAnimateFirstHalfOfRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; -} - -- (void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration { - [super willAnimateSecondHalfOfRotationFromInterfaceOrientation:fromInterfaceOrientation duration:duration]; - [self.wrappedController willAnimateSecondHalfOfRotationFromInterfaceOrientation:fromInterfaceOrientation duration:duration]; -} - -- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; - [self.wrappedController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; -} - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; - [self.wrappedController didRotateFromInterfaceOrientation:fromInterfaceOrientation]; -} -*/ -- (void)didReceiveMemoryWarning { - [self.wrappedController didReceiveMemoryWarning]; -} - -@end - -@implementation UIViewController (WrapControllerItem) - -@dynamic wrapController; - -static const char* wrapControllerKey = "WrapController"; - -- (WrapController*)wrapController_core { - return objc_getAssociatedObject(self, wrapControllerKey); -} - -- (WrapController*)wrapController { - id result = [self wrapController_core]; - if (!result && self.navigationController) - return [self.navigationController wrapController]; - - return result; -} - -- (void)setWrapController:(WrapController *)wrapController { - objc_setAssociatedObject(self, wrapControllerKey, wrapController, OBJC_ASSOCIATION_ASSIGN); -} - -- (UINavigationController*)wc_navigationController { - UIViewController* controller = self.wrapController_core ? self.wrapController_core : self; - return [controller wc_navigationController]; // when we get here, the wc_ method is actually the old, real method -} - -- (UINavigationItem*)wc_navigationItem { - UIViewController* controller = self.wrapController_core ? self.wrapController_core : self; - return [controller wc_navigationItem]; // when we get here, the wc_ method is actually the old, real method -} - -+ (void)wc_swizzle { - SEL nc = @selector(navigationController); - SEL wcnc = @selector(wc_navigationController); - method_exchangeImplementations(class_getInstanceMethod(self, nc), class_getInstanceMethod(self, wcnc)); - - SEL ni = @selector(navigationItem); - SEL wcni = @selector(wc_navigationItem); - method_exchangeImplementations(class_getInstanceMethod(self, ni), class_getInstanceMethod(self, wcni)); -} - -+ (void)load { - [super load]; - [self wc_swizzle]; -} - -@end \ No newline at end of file diff --git a/Frameworks/iRate b/Frameworks/iRate deleted file mode 160000 index d20486c..0000000 --- a/Frameworks/iRate +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d20486c9a2f7bdb0e3f7c75056f9dda236b557e6 diff --git a/Frameworks/json-framework b/Frameworks/json-framework deleted file mode 160000 index ad4bad3..0000000 --- a/Frameworks/json-framework +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ad4bad36abb899b53a8eb9c0896f388ea484fbeb diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e3b6a3f..0000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright 2012 CloudPot - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/Photo/Account.h b/Photo/Account.h deleted file mode 100644 index bea2e27..0000000 --- a/Photo/Account.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// Account -// Trovebox -// -// Created by Patrick Santana on 06/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "UpdateUtilities.h" -#import "KeychainItemWrapper.h" - -#import "Profile.h" -#import "Permission.h" - -@interface Account : NSObject - -// general -@property (nonatomic, strong) NSString *email; -@property (nonatomic, strong) NSString *host; -@property (nonatomic, strong) NSString *type; - -// token -@property (nonatomic, strong) NSString *clientToken; -@property (nonatomic, strong) NSString *clientSecret; -@property (nonatomic, strong) NSString *userToken; -@property (nonatomic, strong) NSString *userSecret; - -// profile -@property (nonatomic, strong) Profile *profile; - -// collaborators -@property (nonatomic, strong) Permission *permission; - -- (void) saveToStandardUserDefaults; -- (void) readFromStandardUserDefaults; - -@end diff --git a/Photo/Account.m b/Photo/Account.m deleted file mode 100644 index c588482..0000000 --- a/Photo/Account.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// Account -// Trovebox -// -// Created by Patrick Santana on 06/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Account.h" - - -@implementation Account - -@synthesize email=_email, host=_host, type=_type, clientToken=_clientToken, clientSecret=_clientSecret, userToken=_userToken, userSecret=_userSecret; -@synthesize profile=_profile, permission=_permission; - -- (void) saveToStandardUserDefaults{ - // save information related to host and email - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - [standardUserDefaults setValue:@"OK" forKey:kAuthenticationValid]; - [standardUserDefaults setValue:[self.host lowercaseString] forKey:kTroveboxServer]; - [standardUserDefaults setValue:self.email forKey:kTroveboxEmailUser]; - [standardUserDefaults setValue:self.type forKey:kTroveboxTypeUser]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPicturesTimestamp]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPictures]; - [standardUserDefaults setValue:[[UpdateUtilities instance] getVersion] forKey:kVersionApplicationInstalled]; - - // synchronize the keys - [standardUserDefaults synchronize]; - - - // profile - if (self.profile) - [standardUserDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:self.profile] forKey:kAccountDetailsProfile]; - - // permissions - if (self.permission) - [standardUserDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:self.permission] forKey:kAccountDetailsPermission]; - - // save credentials - // keychain for credentials - KeychainItemWrapper *keychainItemOAuth = [[KeychainItemWrapper alloc]initWithTroveboxOAuth]; - KeychainItemWrapper *keychainItemConsumer = [[KeychainItemWrapper alloc]initWithTroveboxConsumer]; - - [keychainItemOAuth setObject:self.userToken forKey:(__bridge id)(kSecAttrAccount)]; - [keychainItemOAuth setObject:self.userSecret forKey:(__bridge id)(kSecValueData)]; - [keychainItemConsumer setObject:self.clientToken forKey:(__bridge id)(kSecAttrAccount)]; - [keychainItemConsumer setObject:self.clientSecret forKey:(__bridge id)(kSecValueData)]; -} - -- (void) readFromStandardUserDefaults{ - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - self.email = [standardUserDefaults objectForKey:kTroveboxEmailUser]; - self.host =[standardUserDefaults objectForKey:kTroveboxServer]; - self.type =[standardUserDefaults objectForKey:kTroveboxTypeUser]; - - NSData *profileData = [standardUserDefaults objectForKey:kAccountDetailsProfile]; - if (profileData != nil) - self.profile =[NSKeyedUnarchiver unarchiveObjectWithData:profileData]; - - NSData *permissionData =[standardUserDefaults objectForKey:kAccountDetailsPermission]; - if (permissionData != nil) - self.permission =[NSKeyedUnarchiver unarchiveObjectWithData:permissionData]; - - // keychains for credentials - KeychainItemWrapper *keychainItemOAuth = [[KeychainItemWrapper alloc]initWithTroveboxOAuth]; - KeychainItemWrapper *keychainItemConsumer = [[KeychainItemWrapper alloc]initWithTroveboxConsumer]; - - self.userToken = [keychainItemOAuth objectForKey:(__bridge id)(kSecAttrAccount)]; - self.userSecret = [keychainItemOAuth objectForKey:(__bridge id)(kSecValueData)]; - self.clientToken = [keychainItemConsumer objectForKey:(__bridge id)(kSecAttrAccount)]; - self.clientSecret = [keychainItemConsumer objectForKey:(__bridge id)(kSecValueData)]; -} - -@end diff --git a/Photo/AccountViewController.h b/Photo/AccountViewController.h deleted file mode 100644 index b1a9bac..0000000 --- a/Photo/AccountViewController.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// AccountViewController.h -// Trovebox -// -// Created by Patrick Santana on 29/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - - -#import - -@interface AccountViewController : UIViewController - -@end diff --git a/Photo/Album.h b/Photo/Album.h deleted file mode 100644 index c1ff2f3..0000000 --- a/Photo/Album.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// Album.h -// Trovebox -// -// Created by Patrick Santana on 09/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface Album : NSObject - -// constructor with tag name -- (id) initWithAlbumName:(NSString*) name; -- (id) initWithAlbumName:(NSString*) name Quantity:(NSInteger) qtd Identification:(NSString *) identification AlbumImageUrl:(NSString *) thumb; - -@property (nonatomic, strong) NSString *identification; -@property (nonatomic, strong) NSString *name; -@property (nonatomic, strong) NSString *thumb; -@property (nonatomic) NSInteger quantity; - -// used for upload with an album -@property (nonatomic) BOOL selected; - -@end diff --git a/Photo/Album.m b/Photo/Album.m deleted file mode 100644 index a58aed0..0000000 --- a/Photo/Album.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// Album.m -// Trovebox -// -// Created by Patrick Santana on 09/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Album.h" - -@implementation Album - -@synthesize name=_name, quantity=_quantity, identification=_identification, thumb=_thumb, selected=_selected; - -- (id) initWithAlbumName:(NSString*) name -{ - self = [super init]; - if (self) { - // Initialization code here. - self.name=name; - - // by default no tag is selected. This is used for READ ONLY proposal - self.selected = NO; - } - return self; -} - -- (id)initWithAlbumName:(NSString*) name Quantity:(NSInteger) qtd Identification:(NSString *) identification AlbumImageUrl:(NSString *) thumb -{ - self = [super init]; - if (self) { - // Initialization code here. - self.name=name; - self.quantity = qtd; - self.identification = identification; - self.thumb=thumb; - - // by default no tag is selected. This is used for READ ONLY proposal - self.selected = NO; - } - - return self; -} - -@end diff --git a/Photo/AlbumViewController.h b/Photo/AlbumViewController.h deleted file mode 100644 index dec877e..0000000 --- a/Photo/AlbumViewController.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// AlbumViewController.h -// Trovebox -// -// Created by Patrick Santana on 09/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "TSAlertView.h" -#import "WebService.h" -#import "MBProgressHUD.h" -#import "PhotoAlertView.h" -#import "Album.h" - -// image cache -#import - -@interface AlbumViewController : UITableViewController - -@property (nonatomic, strong) NSMutableArray *albums; - --(void) setReadOnly; --(NSString*) getSelectedAlbumsIdentification; - -@end diff --git a/Photo/AlbumViewController.m b/Photo/AlbumViewController.m deleted file mode 100644 index 837d8b1..0000000 --- a/Photo/AlbumViewController.m +++ /dev/null @@ -1,416 +0,0 @@ -// -// AlbumViewController.m -// Trovebox -// -// Created by Patrick Santana on 09/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AlbumViewController.h" - -@interface AlbumViewController () -- (void) loadAlbums; -- (NSArray *) getSelectedAlbums; -- (void) loadAlbumsForV1:(NSArray *) result; -- (void) loadAlbumsForV2:(NSArray *) result; - -//used for create new albums -@property (nonatomic) BOOL readOnly; - -// for infinite scroll -@property (nonatomic) NSInteger page; -@property (nonatomic) NSInteger totalPages; - -@end - -@implementation AlbumViewController - -@synthesize albums = _albums, readOnly=_readOnly; - -- (id)initWithStyle:(UITableViewStyle)style -{ - self = [super initWithStyle:style]; - if (self) { - // initialize the object albums - self.albums = [NSMutableArray array]; - self.readOnly = NO; - - // for infinite scroll - self.page = 1; - self.totalPages = 2; // it will contain always on page more until we find that there is no answer anymore, then me make them equal - } - return self; -} - -- (void) setReadOnly -{ - self.readOnly = YES; -} - -#pragma mark - View lifecycle -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // image for the navigator - [self.navigationController.navigationBar troveboxStyle:NO]; - - if ( self.readOnly){ - - [self.navigationItem troveboxStyle:NSLocalizedString(@"Albums", @"Menu - title for Albums") defaultButtons:NO viewController:nil menuViewController:nil]; - - // button for create a new album - UIBarButtonItem *customBarItem2 = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Add", @"Add") style:UIBarButtonItemStylePlain target:self action:@selector(addNewAlbum)]; - self.navigationItem.rightBarButtonItem = customBarItem2; - - if ([self.albums count] == 0 ){ - // just load in case there is no album. - // we do that to keep the past selection - [self loadAlbums]; - } - - }else{ - [self.navigationItem troveboxStyle:NSLocalizedString(@"Albums", @"Menu - title for Albums") defaultButtons:YES viewController:self.viewDeckController menuViewController:(MenuViewController*) self.viewDeckController.leftController]; - } - - // title - self.view.backgroundColor = UIColorFromRGB(0XFAF3EF); - self.tableView.separatorColor = UIColorFromRGB(0xC8BEA0); - - UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; - refreshControl.tintColor = UIColorFromRGB(0x3B2414); - self.refreshControl = refreshControl; - [refreshControl addTarget:self action:@selector(loadAlbums) forControlEvents:UIControlEventValueChanged]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - if (self.readOnly == NO){ - [self.albums removeAllObjects]; - [self.tableView reloadData]; - - // load all albums - [self loadAlbums]; - - self.totalPages=2; - self.page=1; - } -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - // Return YES for supported orientations - return YES; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - // Return the number of sections. - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - // Return the number of rows in the section. - return self.albums.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; - cell.backgroundColor = [UIColor clearColor]; - } - - NSUInteger row = [indexPath row]; - - Album *album = [self.albums objectAtIndex:row]; - cell.textLabel.text=album.name; - - if (self.readOnly == NO){ - // details quantity - cell.detailTextLabel.text=[NSString stringWithFormat:@"%d", album.quantity]; - cell.detailTextLabel.textColor = UIColorFromRGB(0xE6501E); - cell.accessoryType = UITableViewCellAccessoryNone; - }else{ - // check if it selected or not - if(album.selected == YES) - cell.accessoryType = UITableViewCellAccessoryCheckmark; - else - cell.accessoryType = UITableViewCellAccessoryNone; - } - - if (album.thumb != nil){ - // Here we use the new provided setImageWithURL: method to load the web image - [cell.imageView setImageWithURL:[NSURL URLWithString:album.thumb] - placeholderImage:[UIImage imageNamed:@"empty_img.png"]]; - }else{ - [cell.imageView setImage:[UIImage imageNamed:@"empty_img.png"]]; - } - - - if (self.totalPages){ - if ([self.albums count] - 1 == indexPath.row && self.page != self.totalPages){ - [self loadAlbums]; - } - } - - return cell; -} - -#pragma mark - Table view delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - // get the tag - NSUInteger row = [indexPath row]; - Album *album = [self.albums objectAtIndex:row]; - - if (self.readOnly == YES){ - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - - if (cell.accessoryType == UITableViewCellAccessoryCheckmark) { - cell.accessoryType = UITableViewCellAccessoryNone; - album.selected = NO; - } else { - cell.accessoryType = UITableViewCellAccessoryCheckmark; - album.selected = YES; - } - }else{ - if (album.quantity >0 ){ - // open the gallery with a tag that contains at least one picture. - UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:[[GalleryViewController alloc]initWithAlbum:album]]; - self.viewDeckController.centerController = nav; - [NSThread sleepForTimeInterval:(300+arc4random()%700)/1000000.0]; // mimic delay... not really necessary - } - } -} - -#pragma mark -#pragma mark - Methods to get albums via json -- (void) loadAlbums -{ - // if there isn't netwok - if ( [SharedAppDelegate internetActive] == NO ){ - // problem with internet, show message to user - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please check your internet connection",@"") duration:5000]; - [alert showAlert]; - }else { - //read the version of the system. - // In the case of Albums we need to support version v1 and v2 - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - NSDictionary *serverDetails = [standardUserDefaults dictionaryForKey:kServerDetails]; - - NSString *versionServer = @"v2"; - if ([serverDetails valueForKey:@"api"] != nil && [[serverDetails valueForKey:@"api"] isEqualToString:@"v1"]){ - // in this case if api is not null and the api is v1, we change the value - // this will be used for the old installation of Trovebox - versionServer = @"v1"; - } - - dispatch_queue_t loadAlbums = dispatch_queue_create("loadAlbums", NULL); - dispatch_async(loadAlbums, ^{ - // call the method and get the details - @try { - // get factory for OpenPhoto Service - WebService *service = [[WebService alloc] init]; - NSArray *result = [service loadAlbums:25 onPage:self.page version:versionServer]; - - dispatch_async(dispatch_get_main_queue(), ^{ - - if ([result class] != [NSNull class] && [result count] >0) { - // we may try to load more albums again - self.totalPages++; - self.page++; - - // check based on version - if ([versionServer isEqualToString:@"v1"]){ - // in the v1, we just need to check if the result has - // more than one position in the array - [self loadAlbumsForV1:result]; - }else if ([versionServer isEqualToString:@"v2"]){ - // here the content will be always the same - // but we need to check the totalPages or totalRows - [self loadAlbumsForV2:result]; - } - - // load data - [self.tableView reloadData]; - }else{ - self.totalPages = self.page; - } - - [self.refreshControl endRefreshing]; - }); - }@catch (NSException *exception) { - dispatch_async(dispatch_get_main_queue(), ^{ - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:exception.description duration:5000]; - [alert showAlert]; - [self.refreshControl endRefreshing]; - }); - } - }); - } -} - -- (void) loadAlbumsForV1:(NSArray *) result -{ - // Loop through each entry in the dictionary and create an array Albums - for (NSDictionary *albumDetails in result){ - [self processAlbumDetails:albumDetails]; - } -} - -- (void) loadAlbumsForV2:(NSArray *) result -{ - // Loop through each entry in the dictionary and create an array Albums - for (NSDictionary *albumDetails in result){ - - // see if totalRows is null or totalPages = 0 - if ([albumDetails objectForKey:@"totalPages"] != nil && - [[albumDetails objectForKey:@"totalPages"] intValue] == 0){ - self.totalPages = self.page; - break; - } - - [self processAlbumDetails:albumDetails]; - } -} - - -- (void) processAlbumDetails:(NSDictionary *) albumDetails -{ - // tag name - NSString *name = [albumDetails objectForKey:@"name"]; - name = [name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - // how many images - NSString *qtd = [albumDetails objectForKey:@"count"]; - NSString *identification = [albumDetails objectForKey:@"id"]; - - if ([qtd integerValue] >0 ){ - // first get the cover - NSDictionary* cover = [albumDetails objectForKey:@"cover"]; - NSString *size; - if ([DisplayUtilities isIPad]) - size = @"photo200x200xCR"; - else - size = @"photo100x100xCR"; - NSArray *pathCover = [cover objectForKey:size]; - - // create an album and add to the list of albums - Album *album = [[Album alloc]initWithAlbumName:name Quantity:[qtd integerValue] Identification:identification AlbumImageUrl:[pathCover objectAtIndex:0]]; - - [self.albums addObject:album]; - }else if (self.readOnly){ - // in this case add just with the name and count - Album *album = [[Album alloc]initWithAlbumName:name Quantity:0 Identification:identification AlbumImageUrl:nil]; - [self.albums addObject:album]; - } -} -- (void) addNewAlbum -{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Adding new album"); -#endif - - TSAlertView* av = [[TSAlertView alloc] initWithTitle:NSLocalizedString(@"Enter new album name",@"Album screen - create a new album") message:nil delegate:self - cancelButtonTitle:NSLocalizedString(@"Cancel",nil) - otherButtonTitles:NSLocalizedString(@"OK",nil),nil]; - av.style = TSAlertViewStyleInput; - [av show]; -} - -// after animation -- (void) alertView: (TSAlertView *) alertView didDismissWithButtonIndex: (NSInteger) buttonIndex -{ - // cancel - if( buttonIndex == 0 || alertView.inputTextField.text == nil || alertView.inputTextField.text.length==0) - return; - - // add the new tag in the list and select it - Album *album = [[Album alloc] initWithAlbumName:alertView.inputTextField.text]; - - MBProgressHUD *hud =[MBProgressHUD showHUDAddedTo:self.view animated:YES]; - hud.labelText = NSLocalizedString(@"Creating",@"Creating Album"); - - dispatch_queue_t createAlbum = dispatch_queue_create("createAlbum", NULL); - dispatch_async(createAlbum, ^{ - @try { - // get factory for Trovebox Service - WebService *service = [[WebService alloc] init]; - NSString *identification = [service createAlbum:album]; - - dispatch_async(dispatch_get_main_queue(), ^{ - album.identification = identification; - album.selected = YES; - [self.albums addObject:album]; - [self.tableView reloadData]; - [MBProgressHUD hideHUDForView:self.view animated:YES]; - }); - }@catch (NSException *exception) { - dispatch_async(dispatch_get_main_queue(), ^{ - [MBProgressHUD hideHUDForView:self.view animated:YES]; - - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:exception.description duration:5000]; - [alert showAlert]; - }); - } - }); -} - --(NSString*) getSelectedAlbumsIdentification -{ - NSMutableString *result = [NSMutableString string]; - NSArray *selectedAlbums = [self getSelectedAlbums]; - int counter = 1; - - if (selectedAlbums != nil && [selectedAlbums count]>0){ - for (Album* album in selectedAlbums) { - [result appendFormat:@"%@",album.identification]; - - // add the , - if ( counter < [selectedAlbums count]){ - [result appendFormat:@", "]; - } - - counter++; - } - } - - return result; -} - -- (NSArray *) getSelectedAlbums -{ - NSMutableArray *array = [NSMutableArray array]; - for (Album* album in self.albums) { - if (album.selected == YES){ - [array addObject:album]; - } - } - - return array; -} - -@end \ No newline at end of file diff --git a/Photo/AppDelegate.h b/Photo/AppDelegate.h deleted file mode 100644 index 8eb4e2f..0000000 --- a/Photo/AppDelegate.h +++ /dev/null @@ -1,99 +0,0 @@ -// -// AppDelegate.h -// Trovebox -// -// Created by Patrick Santana on 25/09/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "IIViewDeckController.h" -#import "MenuViewController.h" -#import "SyncViewController.h" -#import "iRate.h" -#import "AuthenticationService.h" -#import "AuthenticationViewController.h" -#import "Reachability.h" - -#import "PhotoSHKConfigurator.h" -#import "InitializerService.h" -#import "HomeTableViewController.h" -#import "JobUploaderController.h" -#import "ELCImagePickerController.h" -#import "LoginViewController.h" -#import "AuthenticationService.h" - -#import - -// sharing -#import "SHK.h" -#import "SHKItem.h" -#import "SHKTwitter.h" -#import "SHKFacebook.h" -#import "SHKConfiguration.h" -#import "FBConnect.h" - -@interface AppDelegate : UIResponder { - -@private - NSManagedObjectContext *managedObjectContext; - NSManagedObjectModel *managedObjectModel; - NSPersistentStoreCoordinator *persistentStoreCoordinator; - - // for internet checks - Reachability* internetReachable; - Reachability* hostReachable; - -@public - BOOL internetActive, hostActive; -} - - -@property (strong, nonatomic) UIWindow *window; - -@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; -@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; -@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; - -- (void)saveContext; -- (NSURL *)applicationDocumentsDirectory; - - -// for internet check -@property (nonatomic) BOOL internetActive; -@property (nonatomic) BOOL hostActive; -@property (nonatomic) BOOL wifi; - -//google analytics -@property(nonatomic, strong) id tracker; - -// navigation -@property (nonatomic, strong) UIViewController *centerController; -@property (nonatomic, strong) UIViewController *menuController; - -// get the user connect -- (NSString *) userHost; -- (NSString *) userEmail; -- (BOOL) isHosted; -- (BOOL) isProUser; -- (BOOL) isFreeUser; -- (NSInteger) limitFreeUser; -- (NSInteger) limitAllowed; - -// if we need to forward the user to the login view controller -- (void) presentLoginViewController; - - -@end diff --git a/Photo/AppDelegate.m b/Photo/AppDelegate.m deleted file mode 100644 index 8efcc09..0000000 --- a/Photo/AppDelegate.m +++ /dev/null @@ -1,511 +0,0 @@ -// -// AppDelegate.m -// Trovebox -// -// Created by Patrick Santana on 25/09/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AppDelegate.h" - -@interface AppDelegate() --(void) shareTwitterOrFacebook:(NSString *) message; --(void) prepareConnectionInformation; --(void) checkNetworkStatus:(NSNotification *) notice; -@end - -// Dispatch period in seconds -static const NSInteger kGANDispatchPeriodSec = 10; - -@implementation AppDelegate - -@synthesize managedObjectContext = _managedObjectContext; -@synthesize managedObjectModel = _managedObjectModel; -@synthesize persistentStoreCoordinator = _persistentStoreCoordinator; - -@synthesize internetActive = _internetActive; -@synthesize hostActive = _hostActive; -@synthesize wifi = _wifi; - -@synthesize centerController = _viewController; -@synthesize menuController = _menuController; - -@synthesize tracker = tracker_; - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - - [Crashlytics startWithAPIKey:@"263e33cba7a0a8804ec757ba8607fc77514dca33"]; - -#ifdef GOOGLE_ANALYTICS_ENABLED - // Google Analytics SDK - // Initialize Google Analytics - [GAI sharedInstance].trackUncaughtExceptions = NO; - [GAI sharedInstance].dispatchInterval = 20; - self.tracker = [[GAI sharedInstance] trackerWithTrackingId:kPrivateGoogleAnalytics]; -#endif - - [self prepareConnectionInformation]; - - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - // Override point for customization after application launch. - self.window.backgroundColor = [UIColor whiteColor]; - - - self.menuController = [[MenuViewController alloc] init]; - - HomeTableViewController *centerController = [[HomeTableViewController alloc] init]; - self.centerController = [[UINavigationController alloc] initWithRootViewController:centerController]; - IIViewDeckController* deckController = [[IIViewDeckController alloc] initWithCenterViewController:self.centerController - leftViewController:self.menuController]; - - if ([DisplayUtilities isIPad]){ - deckController.leftLedge = 490.0; - } - - //ShareKit - DefaultSHKConfigurator *configurator = [[PhotoSHKConfigurator alloc] init]; - [SHKConfiguration sharedInstanceWithConfigurator:configurator]; - - // initializer - InitializerService *initializer = [[InitializerService alloc]init]; - if ([initializer isInitialized] == NO){ - [initializer initialize]; - } - - // updater - UpdateUtilities *updater = [UpdateUtilities instance]; - if ([updater needsUpdate]) { - [updater update]; - } - - self.window.rootViewController = deckController; - self.window.tintColor = [UIColor whiteColor]; - [self.window makeKeyAndVisible]; - - - // check if use is connect - if (![AuthenticationService isLogged]){ - // reset core data - [Timeline deleteAllTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - [Synced deleteAllSyncedPhotosInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - [[SharedAppDelegate managedObjectContext] reset]; - - NSError *saveError = nil; - if (![[SharedAppDelegate managedObjectContext] save:&saveError]){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Error deleting objects from core data = %@",[saveError localizedDescription]); -#endif - } - - [self presentLoginViewController]; - } - - //register to share data. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(eventHandler:) - name:kNotificationShareInformationToFacebookOrTwitter - object:nil ]; - - // start the job - [[JobUploaderController getController] start]; - - // remove badges - [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; - - return YES; -} - -- (void) presentLoginViewController -{ - LoginViewController *controller; - - if ([DisplayUtilities isIPad]){ - controller = [[LoginViewController alloc]initWithNibName:@"LoginViewControlleriPad" bundle:nil ]; - - }else{ - controller = [[LoginViewController alloc]initWithNibName:[DisplayUtilities getCorrectNibName:@"LoginViewController"] bundle:nil ]; - } - - UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; - navController.navigationBar.barStyle=UIBarStyleBlackTranslucent; - navController.navigationController.navigationBar.barStyle=UIBarStyleBlackTranslucent; - [self.window.rootViewController presentViewController:navController animated:YES completion:nil]; -} - -+ (void) initialize -{ - //configure iRate - [iRate sharedInstance].daysUntilPrompt = 7; - [iRate sharedInstance].usesUntilPrompt = 6; - [iRate sharedInstance].appStoreID = kPrivateappStoreID; - [iRate sharedInstance].applicationBundleID = kPrivateapplicationBundleID; - [iRate sharedInstance].applicationName=kPrivateapplicationName; -} - -- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url -{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Application should handleOpenUrl = %@",url); -#endif - - if ([[url scheme] isEqualToString:@"openphoto"]){ - AuthenticationService *auth = [[AuthenticationService alloc]init]; - - if ([AuthenticationService isLogged] == NO){ - [auth startOAuthProcedure:url]; - } - - - // check details - // openphoto://open=/p/:id // photo - // openphoto://open=/v/:id // video - // openphoto://open=/m/:id // media - - }else if ([[url scheme] hasPrefix:@"fb"]){ - return [SHKFacebook handleOpenURL:url]; - } - - return YES; -} - - -- (void)applicationWillResignActive:(UIApplication *)application -{ - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. -} - -- (void)applicationDidEnterBackground:(UIApplication *)application -{ - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. -} - -- (void)applicationWillEnterForeground:(UIApplication *)application -{ - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. -} - -- (void)applicationDidBecomeActive:(UIApplication *)application -{ - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. -} - -- (void)applicationWillTerminate:(UIApplication *)application -{ - // Saves changes in the application's managed object context before the application terminates. - [Timeline resetEntitiesOnStateUploadingInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - [self saveContext]; -} - -//event handler when event occurs --(void)eventHandler: (NSNotification *) notification -{ - if ([notification.name isEqualToString:kNotificationShareInformationToFacebookOrTwitter]){ - [self performSelector:@selector(shareTwitterOrFacebook:) withObject:notification afterDelay:1.0f]; - } -} - -- (void) shareTwitterOrFacebook:(NSNotification*) notification{ - NSDictionary *dictionary = [notification object]; - - // create the item - SHKItem *item = [SHKItem URL:[NSURL URLWithString:[dictionary objectForKey:@"url"]] title:[dictionary objectForKey:@"title"] contentType:SHKURLContentTypeWebpage]; - - if ( [[dictionary objectForKey:@"type"] isEqualToString:@"Twitter"]){ - // send a tweet - [SHKTwitter shareItem:item]; - }else{ - // facebook - [SHKFacebook shareItem:item]; - } -} - -#pragma mark - Core Data stack - -// Returns the managed object context for the application. -// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application. -- (NSManagedObjectContext *)managedObjectContext -{ - if (_managedObjectContext != nil) { - return _managedObjectContext; - } - - NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; - if (coordinator != nil) { - _managedObjectContext = [[NSManagedObjectContext alloc] init]; - [_managedObjectContext setPersistentStoreCoordinator:coordinator]; - } - return _managedObjectContext; -} - -// Returns the managed object model for the application. -// If the model doesn't already exist, it is created from the application's model. -- (NSManagedObjectModel *)managedObjectModel -{ - if (_managedObjectModel != nil) { - return _managedObjectModel; - } - NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Photo" withExtension:@"momd"]; - _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; - return _managedObjectModel; -} - -// Returns the persistent store coordinator for the application. -// If the coordinator doesn't already exist, it is created and the application's store added to it. -- (NSPersistentStoreCoordinator *)persistentStoreCoordinator -{ - if (_persistentStoreCoordinator != nil) { - return _persistentStoreCoordinator; - } - - NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Photo.sqlite"]; - // automatic update - NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, - [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; - - NSError *error = nil; - _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; - if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Unresolved error with PersistStoreCoordinator %@, %@.", error, [error userInfo]); - NSLog(@"Create the persistent file again."); -#endif - - // let's recreate it - [managedObjectContext reset]; - [managedObjectContext lock]; - - // delete file - if ([[NSFileManager defaultManager] fileExistsAtPath:storeURL.path]) { - if (![[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error]) { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); -#endif - abort(); - } - } - - _persistentStoreCoordinator = nil; - - NSPersistentStoreCoordinator *r = [self persistentStoreCoordinator]; - [managedObjectContext unlock]; - - return r; - - - /* - Replace this implementation with code to handle the error appropriately. - - abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - - Typical reasons for an error here include: - * The persistent store is not accessible; - * The schema for the persistent store is incompatible with current managed object model. - Check the error message to determine what the actual problem was. - - - If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory. - - If you encounter schema incompatibility errors during development, you can reduce their frequency by: - * Simply deleting the existing store: - [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil] - - * Performing automatic lightweight migration by passing the following dictionary as the options parameter: - @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} - - Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details. - - */ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); -#endif - abort(); - } - - return _persistentStoreCoordinator; -} - -- (void)saveContext -{ - NSError *error = nil; - NSManagedObjectContext *localManagedObjectContext = self.managedObjectContext; - if (localManagedObjectContext != nil) { - if ([localManagedObjectContext hasChanges] && ![localManagedObjectContext save:&error]) { - // Replace this implementation with code to handle the error appropriately. - // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); -#endif - abort(); - } - } -} - -#pragma mark - Application's Documents directory - -// Returns the URL to the application's Documents directory. -- (NSURL *)applicationDocumentsDirectory -{ - return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; -} - -//////// Internet details -#pragma mark - -#pragma mark Internet details -- (void) prepareConnectionInformation -{ - // check for internet connection - // no internet assume - self.internetActive = NO; - self.hostActive = NO; - self.wifi = NO; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; - - internetReachable = [Reachability reachabilityForInternetConnection] ; - [internetReachable startNotifier]; - - // check if a pathway to a random host exists - hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"] ; - [hostReachable startNotifier]; - - // do the first network check - [self checkNetworkStatus:nil]; -} - -- (void) checkNetworkStatus:(NSNotification *)notice -{ - // called after network status changes - NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; - switch (internetStatus) - - { - case NotReachable: - { - self.internetActive = NO; - self.wifi = NO; - break; - } - case ReachableViaWiFi: - { - self.internetActive = YES; - self.wifi = YES; - break; - } - case ReachableViaWWAN: - { - self.internetActive = YES; - self.wifi = NO; - break; - } - } - - - NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; - switch (hostStatus) - { - case NotReachable: - { - self.hostActive = NO; - break; - } - case ReachableViaWiFi: - { - self.hostActive = YES; - break; - } - case ReachableViaWWAN: - { - self.hostActive = YES; - break; - } - } -} - -- (NSString *) userHost -{ - return [[NSUserDefaults standardUserDefaults] valueForKey:kTroveboxServer]; -} - -- (NSString *) userEmail -{ - return [[NSUserDefaults standardUserDefaults] valueForKey:kTroveboxEmailUser]; -} - -- (BOOL) isHosted -{ - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - return [[standardUserDefaults valueForKey:kServerDetailsIsHosted] boolValue]; -} - -- (BOOL) isProUser -{ - // NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - // return [[standardUserDefaults valueForKey:kProfileAccountType] boolValue]; - - // this is a workaround - return YES; -} - -- (BOOL) isFreeUser -{ - return ![self isProUser]; -} - -- (NSInteger) limitFreeUser -{ - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - return [[standardUserDefaults valueForKey:kProfileLimitRemaining] integerValue]; -} - -- (NSInteger) limitAllowed -{ - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - return [[standardUserDefaults valueForKey:kProfileLimitAllowed] integerValue]; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -///////////// -/// FOR NOTIFICATION -//////////// -- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken -{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"My token is: %@", deviceToken); -#endif -} - -- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error -{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Failed to get token, error: %@", error); -#endif -} - -- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary *)userInfo -{ - -} - -@end diff --git a/Photo/AssetsLibraryUtilities.h b/Photo/AssetsLibraryUtilities.h deleted file mode 100644 index b1b9de0..0000000 --- a/Photo/AssetsLibraryUtilities.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// AssetsLibraryUtilities.h -// Trovebox -// -// Created by Patrick Santana on 04/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "DateUtilities.h" - -@interface AssetsLibraryUtilities : NSObject - -+ (NSString *) getAssetsUrlExtension:(NSURL *) url; -+ (NSString *) getAssetsUrlId:(NSURL *) url; -+ (NSString *) getFileNameForImage:(NSData*)data - url:(NSURL*) url; -+ (NSString *) getPhotoTitleForImage:(NSData*)data - url:(NSURL*) url; -@end \ No newline at end of file diff --git a/Photo/AssetsLibraryUtilities.m b/Photo/AssetsLibraryUtilities.m deleted file mode 100644 index aa7e3ba..0000000 --- a/Photo/AssetsLibraryUtilities.m +++ /dev/null @@ -1,143 +0,0 @@ -// -// AssetsLibraryUtilities.m -// Trovebox -// -// Created by Patrick Santana on 04/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AssetsLibraryUtilities.h" - -@interface AssetsLibraryUtilities() -+ (NSDictionary*) parseAssetUrl:(NSURL*) url; -+ (NSDate*) getDefaultFileDate:(NSURL*) url; -+ (NSDate*) getFileDate:(NSURL*) url; -@end - -@implementation AssetsLibraryUtilities - -NSString *const kExifDateFormat = @"yyyy:MM:dd HH:mm:ss"; - -+ (NSString*) getAssetsUrlExtension:(NSURL*) url { - NSDictionary *pairs = [self parseAssetUrl:url]; - // return the ext - return [pairs objectForKey:@"ext"]; -} - -+ (NSString*) getAssetsUrlId:(NSURL*) url{ - NSDictionary *pairs = [self parseAssetUrl:url]; - // return the ext - return [pairs objectForKey:@"id"]; -} - -+ (NSDictionary*) parseAssetUrl:(NSURL*) url{ - NSString *query = [url query]; - NSArray *queryPairs = [query componentsSeparatedByString:@"&"]; - NSMutableDictionary *pairs = [NSMutableDictionary dictionary]; - for (NSString *queryPair in queryPairs) { - NSArray *bits = [queryPair componentsSeparatedByString:@"="]; - if ([bits count] != 2) { continue; } - - NSString *key = [[bits objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - NSString *value = [[bits objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - - [pairs setObject:value forKey:key]; - } - - return pairs; -} - -+ (NSString *) getPhotoTitleForImage:(NSData*)data - url:(NSURL*) url -{ - CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL); - NSDictionary *exif = (__bridge NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL); - - // check if there is date, if not returns current date - // in the exif we must look these values in the order: - // {Exif} = DateTimeOriginal, DateTimeDigitized - // {TIFF} = DateTime - // date format = 2013:05:12 17:17:24 - - // first we look for {Exif} - NSDictionary *exifDetails = [exif objectForKey:@"{Exif}"]; - // get first DateTimeOriginal - NSDate *date = [DateUtilities getDateFrom:[exifDetails objectForKey:@"DateTimeOriginal"] withFormat:kExifDateFormat]; - - if (date == nil){ - // if it does not exist, let's try DateTimeDigitized - date = [DateUtilities getDateFrom:[exifDetails objectForKey:@"DateTimeDigitized"] withFormat:kExifDateFormat]; - if (date == nil){ - // if it does not exist, get the {TIFF} - NSDictionary *tiffDetails = [exif objectForKey:@"{TIFF}"]; - date = [DateUtilities getDateFrom:[tiffDetails objectForKey:@"DateTime"] withFormat:kExifDateFormat]; - - if (date == nil){ - // if nothing works, get the default date - date = [self getDefaultFileDate:url]; - } - } - } - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Date for file = %@", [DateUtilities formatDate:date]); -#endif - - return [DateUtilities formatDate:date]; -} -+ (NSString*) getFileNameForImage:(NSData*)data - url:(NSURL*) url -{ - - if (!url){ - CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault); - CFStringRef newUniqueIdString = CFUUIDCreateString(kCFAllocatorDefault, newUniqueId); - - // get type of the file - NSString *extension = [ContentTypeUtilities contentTypeExtensionForImageData:data]; - - return [NSString stringWithFormat:@"%@.%@",(__bridge NSString *) newUniqueIdString,extension]; - }else{ - // no filter, image is located on Library - return [NSString stringWithFormat:@"%@.%@",[AssetsLibraryUtilities getAssetsUrlId:url],[AssetsLibraryUtilities getAssetsUrlExtension:url]]; - } -} - -+ (NSDate*) getDefaultFileDate:(NSURL*) url -{ - // try to get the file date - NSDate *fileDate = [self getFileDate:url]; - - if (fileDate != nil){ - return fileDate; - } - - // no information on file - return [NSDate date]; -} - -+ (NSDate*) getFileDate:(NSURL*) url -{ - NSFileManager *fm = [NSFileManager defaultManager]; - NSDictionary *attrs = [fm attributesOfItemAtPath:[url absoluteString] error:nil]; - - if (attrs != nil) { - return (NSDate*)[attrs objectForKey: NSFileCreationDate]; - }else { - return nil; - } -} - -@end diff --git a/Photo/AuthenticationService.h b/Photo/AuthenticationService.h deleted file mode 100644 index ea3141d..0000000 --- a/Photo/AuthenticationService.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// AuthenticationService.h -// Trovebox -// -// Created by Patrick Santana on 5/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import "OAToken.h" -#import "OAServiceTicket.h" -#import "OADataFetcher.h" -#import "Account.h" -#import "PrivateAuthenticationService.h" -#import "Timeline+Methods.h" -#import "Synced+Methods.h" -#import -#import "UpdateUtilities.h" - -@interface AuthenticationService : NSObject - - -// for OAuth 1.a --(NSURL*) getOAuthInitialUrl; --(NSURL*) getOAuthAccessUrl; --(NSURL*) getOAuthTestUrl; - - -// methods related to user authentication -+ (BOOL) isLogged; -- (void) logout; -- (void) startOAuthProcedure:(NSURL*) url; - -// for login -// returns a list of Account -+ (NSArray *) signIn:(NSString*) email password:(NSString*) pwd; -+ (NSString *) recoverPassword:(NSString *) email; - -+ (void) sendToServerReceipt:(NSData *) receipt forUser:(NSString *) email; - -@end diff --git a/Photo/AuthenticationService.m b/Photo/AuthenticationService.m deleted file mode 100644 index 108cfbf..0000000 --- a/Photo/AuthenticationService.m +++ /dev/null @@ -1,313 +0,0 @@ -// -// AuthenticationService.m -// Trovebox -// -// Created by Patrick Santana on 5/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "AuthenticationService.h" - -@implementation AuthenticationService - --(NSURL*) getOAuthInitialUrl{ - // get the url - NSString *server = [[NSUserDefaults standardUserDefaults] valueForKey:kTroveboxServer]; - NSString *path = @"/v1/oauth/authorize?oauth_callback=openphoto://&name="; - NSString *appName = [[UIDevice currentDevice] name]; - NSString *fullPath = [[NSString alloc]initWithFormat:@"%@%@%@",server,path,[appName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ] ; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"URL for OAuth initialization = %@",fullPath); -#endif - NSURL *url = [NSURL URLWithString:fullPath]; - - if (!url){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"URL is invalid, use the default."); -#endif - return [NSURL URLWithString:[[NSString alloc]initWithFormat:@"%@%@%@",server,path,@"Trovebox%20App"] ]; - } - - return url; -} - --(NSURL*) getOAuthAccessUrl{ - // get the url - NSString* server = [[NSUserDefaults standardUserDefaults] valueForKey:kTroveboxServer]; - NSString* url = [[NSString alloc]initWithFormat:@"%@%@",server,@"/v1/oauth/token/access"] ; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"URL for OAuth Access = %@",url); -#endif - - return [NSURL URLWithString:url]; -} - --(NSURL*) getOAuthTestUrl{ - // get the url - NSString* server = [[NSUserDefaults standardUserDefaults] valueForKey:kTroveboxServer]; - NSString* url = [[NSString alloc]initWithFormat:@"%@%@",server,@"/v1/oauth/test"] ; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"URL for OAuth Test = %@",url); -#endif - - return [NSURL URLWithString:url]; -} - - -+ (BOOL) isLogged{ - /* - * check if the client id is valid. - * Possible values: nil, INVALID or other - * - * If it is nil or text INVALID, return that is INVALID = NO - */ - if (![[NSUserDefaults standardUserDefaults] stringForKey:kAuthenticationValid] || - [[[NSUserDefaults standardUserDefaults] stringForKey:kAuthenticationValid] isEqualToString:@"INVALID"]){ - return NO; - } - - // otherwise return that it is valid - return YES; -} - -- (void) logout{ - - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]initWithTroveboxConsumer]; - - // remove the credentials from the server in case of internet - if ([SharedAppDelegate internetActive]){ - NSString *consumerKey = [keychainItem objectForKey:(__bridge id)(kSecAttrAccount)]; - - dispatch_queue_t removeCredentials = dispatch_queue_create("remove_credentials", NULL); - dispatch_async(removeCredentials, ^{ - - @try { - WebService *service = [[WebService alloc] init]; - [service removeCredentialsForKey:consumerKey]; - }@catch (NSException *exception) { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Error to remove the credentials from server %@",exception.description); -#endif - } - - }); - } - - // set the variable client id to INVALID - [standardUserDefaults setValue:@"INVALID" forKey:kAuthenticationValid]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPicturesTimestamp]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPictures]; - - // reset profile information - [standardUserDefaults setValue:nil forKey:kTroveboxEmailUser]; - [standardUserDefaults setValue:nil forKey:kProfileLatestUpdateDate]; - [standardUserDefaults setValue:nil forKey:kProfileAccountType]; - [standardUserDefaults setValue:nil forKey:kProfileLimitRemaining]; - [standardUserDefaults setValue:nil forKey:kTroveboxNameUser]; - - // synchronize the keys - [standardUserDefaults synchronize]; - - // keychain for credentials reset - [keychainItem resetKeychainItem]; - - // reset core data - [Timeline deleteAllTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - [Synced deleteAllSyncedPhotosInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - - NSError *saveError = nil; - if (![[SharedAppDelegate managedObjectContext] save:&saveError]){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Error deleting objects from core data = %@",[saveError localizedDescription]); -#endif - } - - // reset cache - [[SDImageCache sharedImageCache] cleanDisk]; - [[SDImageCache sharedImageCache] clearDisk]; - [[SDImageCache sharedImageCache] clearMemory]; - - // send notification to clear the Menu - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationNeededsUpdate object:nil]; - - // display - [SharedAppDelegate presentLoginViewController]; -} - -- (void) startOAuthProcedure:(NSURL*) url{ - - /* - * This is the step where the User allowed the iOS App to use the OpenPhoto service in his behalf. - * The URL will be like that: openphoto://?oauth_consumer_key=e826d2647851aac26948b7a56044fc&oauth_consumer_secret=ba0c75dfa9&oauth_token=ba27ffebfbc07251a5fbf3529492d7&oauth_token_secret=5a9dc1c212&oauth_verifier=6b741d57c1 - * the openphoto is the callback that makes iOS to open our app, we also use openphoto-test in case of - * TestFlight users. - */ - - // get the token and the verifier from the URL - NSString *oauthConsumerKey = nil; - NSString *oauthConsumerSecret = nil; - NSString *oauthToken = nil; - NSString *oauthTokenSecret = nil; - NSString *oauthVerifier = nil; - - // we just care after ? - NSArray *comp1 = [[url absoluteString] componentsSeparatedByString:@"?"]; - NSString *query = [comp1 lastObject]; - NSArray *queryElements = [query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyVal = [element componentsSeparatedByString:@"="]; - NSString *variableKey = [keyVal objectAtIndex:0]; - NSString *value = [keyVal lastObject]; - - // get all details from the request and save it - if ([variableKey isEqualToString:@"oauth_consumer_key"]){ - oauthConsumerKey = value; - }else if ([variableKey isEqualToString:@"oauth_consumer_secret"]){ - oauthConsumerSecret = value; - }else if ([variableKey isEqualToString:@"oauth_token"]){ - oauthToken = value; - }else if ([variableKey isEqualToString:@"oauth_token_secret"]){ - oauthTokenSecret = value; - }else if ([variableKey isEqualToString:@"oauth_verifier"]){ - oauthVerifier = value; - } - } - - // save consumer data - // keychain for credentials - KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]initWithTroveboxConsumer]; - [keychainItem setObject:oauthConsumerKey forKey:(__bridge id)(kSecAttrAccount)]; - [keychainItem setObject:oauthConsumerSecret forKey:(__bridge id)(kSecValueData)]; - - /* - * With the token and verifier, we can request the ACCESS - */ - NSURL* accessUrl = [self getOAuthAccessUrl]; - - // from the callback get the details and create token and consumer - OAToken *token = [[OAToken alloc] initWithKey:oauthToken secret:oauthTokenSecret]; - OAConsumer *consumer = [[OAConsumer alloc] initWithKey:oauthConsumerKey secret:oauthConsumerSecret]; - - OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:accessUrl - consumer:consumer - token:token - realm:nil - signatureProvider:nil]; - // the request must be POST - [request setHTTPMethod:@"POST"]; - - // set parameters - OARequestParameter *parameterToken = [[OARequestParameter alloc] initWithName:@"oauth_token" value:oauthToken]; - OARequestParameter *parameterVerifier = [[OARequestParameter alloc] initWithName:@"oauth_verifier" - value:oauthVerifier]; - NSArray *params = [NSArray arrayWithObjects: parameterToken, parameterVerifier, nil]; - [request setParameters:params]; - - // create data fetcher and send the request - OADataFetcher *fetcher = [[OADataFetcher alloc] init]; - [fetcher fetchDataWithRequest:request - delegate:self - didFinishSelector:@selector(requestTokenAccess:didFinishWithData:) - didFailSelector:@selector(requestToken:didFailWithError:)]; -} - - -- (void)requestTokenAccess:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data { - if (ticket.didSucceed) { - NSString *responseBody = [[NSString alloc] initWithData:data - encoding:NSUTF8StringEncoding]; - /* - *The Access Token will receive these information, eg: - * oauth_token=9dd1869a9cf07fd5daa9b4e8785978 - * oauth_token_secret=18c2927518 - */ - NSString *oauthToken = nil; - NSString *oauthTokenSecret = nil; - - - // parse the data - NSArray *queryElements = [responseBody componentsSeparatedByString:@"&"]; - - for (NSString *element in queryElements) { - NSArray *keyVal = [element componentsSeparatedByString:@"="]; - NSString *variableKey = [keyVal objectAtIndex:0]; - NSString *value = [keyVal lastObject]; - - if ([variableKey isEqualToString:@"oauth_token"]){ - oauthToken = value; - }else if ([variableKey isEqualToString:@"oauth_token_secret"]){ - oauthTokenSecret = value; - } - } - - - // save data to the user information - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - [standardUserDefaults setValue:@"OK" forKey:kAuthenticationValid]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPicturesTimestamp]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPictures]; - [standardUserDefaults setValue:[[UpdateUtilities instance] getVersion] forKey:kVersionApplicationInstalled]; - - // synchronize the keys - [standardUserDefaults synchronize]; - - // save credentials - // keychain for credentials - KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]initWithTroveboxOAuth]; - - [keychainItem setObject:oauthToken forKey:(__bridge id)(kSecAttrAccount)]; - [keychainItem setObject:oauthTokenSecret forKey:(__bridge id)(kSecValueData)]; - - - // send notification to the system that it can shows the screen: - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationLoginAuthorize object:nil]; - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationNeededsUpdate object:nil]; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"OAuth procedure finished"); -#endif - - } -} - -- (void)requestToken:(OAServiceTicket *)ticket didFailWithError:(NSError *)error { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Error = %@", [error userInfo]); -#endif - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Authentication failed: try again.",@"Authentication method") duration:5000]; - [alert showAlertOnTop]; -} - -+ (NSArray *) signIn:(NSString*) email password:(NSString*) pwd -{ - return [PrivateAuthenticationService signIn:email password:pwd]; -} - -+ (NSString *) recoverPassword:(NSString *) email -{ - return [PrivateAuthenticationService recoverPassword:email]; -} - -+ (void) sendToServerReceipt:(NSData *) receipt forUser:(NSString *) email -{ - return [PrivateAuthenticationService sendToServerReceipt:receipt forUser:email]; -} - -@end - diff --git a/Photo/AuthenticationViewController.h b/Photo/AuthenticationViewController.h deleted file mode 100644 index 4632e75..0000000 --- a/Photo/AuthenticationViewController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// AuthenticationViewController.h -// Trovebox -// -// Created by Patrick Santana on 07/09/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "WebService.h" - -@interface AuthenticationViewController : GAITrackedViewController - -@property (retain, nonatomic) IBOutlet UITextField *serverURL; -@property (weak, nonatomic) IBOutlet UIImageView *backgroundServerUrl; -- (IBAction)login:(id)sender; - -@end \ No newline at end of file diff --git a/Photo/AuthenticationViewController.m b/Photo/AuthenticationViewController.m deleted file mode 100644 index c733238..0000000 --- a/Photo/AuthenticationViewController.m +++ /dev/null @@ -1,210 +0,0 @@ -// -// AuthenticationViewController.m -// Trovebox -// -// Created by Patrick Santana on 07/09/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "AuthenticationViewController.h" - -// Private interface definition -@interface AuthenticationViewController() - -- (void) saveUrl:(NSString *) text; -- (void) eventHandler: (NSNotification *) notification; - -@end - -@implementation AuthenticationViewController -@synthesize serverURL = _serverURL; - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - //register to listen for to remove the login screen. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(eventHandler:) - name:kNotificationLoginAuthorize - object:nil ]; - } - return self; -} - -#pragma mark - View lifecycle - -- (void)viewDidLoad -{ - [super viewDidLoad]; - // Do any additional setup after loading the view from its nib. - [self.navigationController setNavigationBarHidden:NO animated:YES]; - self.screenName = @"Self-instance Login Screen"; -} - -- (void)viewDidUnload -{ - [self setServerURL:nil]; - [self setBackgroundServerUrl:nil]; - [super viewDidUnload]; - // Release any retained subviews of the main view. - // e.g. self.myOutlet = nil; -} - -- (void) viewWillAppear:(BOOL)animated -{ - // if ipad, lets centralize fields - if([DisplayUtilities isIPad]){ - self.serverURL.center=self.backgroundServerUrl.center; - } -} - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -- (IBAction)login:(id)sender { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Url Login %@",self.serverURL.text); -#endif - - // check if the user typed something - if ( self.serverURL.text != nil && - [self.serverURL.text isEqualToString:@"username.trovebox.com"]){ - - // user should add URL - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please, set the URL to the Trovebox Server.",@"Used when user don't set the url for the hosted server") duration:5000]; - [alert showAlert]; - }else{ - // save the url method. It removes the last / if exists - [self saveUrl:self.serverURL.text]; - - // to the login in the website - [[UIApplication sharedApplication] openURL:[[[AuthenticationService alloc]init] getOAuthInitialUrl]]; - } -} - -// Action if user clicks in DONE in the keyboard -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Url %@",self.serverURL.text); -#endif - - // save the url method. It removes the last / if exists - [self saveUrl:textField.text]; - - // to the login - [[UIApplication sharedApplication] openURL:[[[AuthenticationService alloc]init] getOAuthInitialUrl]]; - - // return - [textField resignFirstResponder]; - return YES; -} - -- (void)textFieldDidBeginEditing:(UITextField *)textField -{ - // we just move the view if it is 3.5 inch - if (![DisplayUtilities isIPad] && ![DisplayUtilities is4InchRetina]){ - [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationCurveEaseOut animations:^{ - // move the view a little bit up - [self.view setCenter:CGPointMake([self.view center].x, [self.view center].y - 26)]; - }completion:^(BOOL finished){ - // just set the range after the move - [self setTextRange:textField]; - }]; - }else{ - [self setTextRange:textField]; - } -} - -- (void) setTextRange:(UITextField *)textField -{ - // get the actual range - UITextRange *selectedRange = [textField selectedTextRange]; - - //Calculate the new position, - for left and + for right - UITextPosition *fromPosition = [textField positionFromPosition:selectedRange.start offset:-21]; - UITextPosition *toPosition = [textField positionFromPosition:selectedRange.start offset:0]; - - //Construct a new range and set in the textfield - UITextRange *newRange = [textField textRangeFromPosition:fromPosition toPosition:toPosition]; - textField.selectedTextRange = newRange; -} - - - -/////////////////////////////////// -// PRIVATES METHODS -////////////////////////////////// --(void) saveUrl:(NSString *) text{ - // save the url for the app - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - - NSURL *url; - if ([text rangeOfString:@"http://"].location == NSNotFound - && [text rangeOfString:@"https://"].location == NSNotFound) { - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"URL does not contain http:// or https://"); -#endif - - NSString *urlString = [[NSString alloc] initWithFormat:@"http://%@",text]; - url = [NSURL URLWithString:urlString]; - }else{ - url = [NSURL URLWithString:text]; - } - - // removes form the URL if it ends with "/" - NSString *server; - if ([[url lastPathComponent] isEqualToString:@"/"]){ - server = [text stringByReplacingCharactersInRange:NSMakeRange(text.length-1, 1) withString:@""]; - }else{ - server = [url relativeString]; - } - - [standardUserDefaults setValue:[server lowercaseString] forKey:kTroveboxServer]; - [standardUserDefaults setValue:@"owner" forKey:kTroveboxTypeUser]; - [standardUserDefaults synchronize]; -} - -//event handler when event occurs --(void)eventHandler: (NSNotification *) notification -{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"###### Event triggered: %@", notification); -#endif - - if ([notification.name isEqualToString:kNotificationLoginAuthorize]){ - // we don't need the screen anymore - [self dismissViewControllerAnimated:YES completion:nil]; - } -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} -@end diff --git a/Photo/AuthenticationViewController.xib b/Photo/AuthenticationViewController.xib deleted file mode 100644 index fd24849..0000000 --- a/Photo/AuthenticationViewController.xib +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/AuthenticationViewController5.xib b/Photo/AuthenticationViewController5.xib deleted file mode 100644 index 24ecfd8..0000000 --- a/Photo/AuthenticationViewController5.xib +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/Constants.h b/Photo/Constants.h deleted file mode 100644 index efb3735..0000000 --- a/Photo/Constants.h +++ /dev/null @@ -1,91 +0,0 @@ -// -// Constants.h -// Trovebox -// -// Created by Patrick Santana on 05/09/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -@interface Constants : NSObject - -extern NSString * const kAppInitialized; -extern NSString * const kPhotosArePrivate; -extern NSString * const kTroveboxServer; -extern NSString * const kTroveboxNameUser; -extern NSString * const kTroveboxEmailUser; -extern NSString * const kTroveboxTypeUser; - -extern NSString * const kHomeScreenPictures; -extern NSString * const kHomeScreenPicturesTimestamp; -extern NSString * const kServerDetails; -extern NSString * const kServerDetailsIsHosted; - -extern NSString * const kAuthenticationValid; - -extern NSString * const kNotificationLoginAuthorize; -extern NSString * const kNotificationRefreshPictures; -extern NSString * const kNotificationCheckRefreshPictures; -extern NSString * const kNotificationShareInformationToFacebookOrTwitter; -extern NSString * const kNotificationNeededsUpdate; -extern NSString * const kNotificationNeededsUpdateHome; -extern NSString * const kNotificationDisableUpdateHome; -extern NSString * const kNotificationProfileRefresh; -extern NSString * const kNotificationProfileRemoveProgressBar; - -extern NSString * const kCellIdentifierTitle; -extern NSString * const kCellIdentifierTags; -extern NSString * const kCellIdentifierAlbums; -extern NSString * const kCellIdentifierFilter; -extern NSString * const kCellIdentifierPrivate; -extern NSString * const kCellIdentifierShareFacebook; -extern NSString * const kCellIdentifierShareTwitter; - -extern NSString * const kVersionApplicationInstalled; - -extern NSString * const kValidateNotAllowedLocation; - -extern NSString * const kSyncShowUploadedPhotos; - -// For profile -extern NSString * const kProfileAccountType; -extern NSString * const kProfileLimitRemaining; -extern NSString * const kProfileAccountProReceipt; -extern NSString * const kProfileLatestUpdateDate; -extern NSString * const kProfileLimitAllowed; - -// Auto Sync -extern NSString * const kAutoSyncEnabled; -extern NSString * const kAutoSyncMessageDisplayed; - -// Account Details -extern NSString * const kAccountDetailsProfile; -extern NSString * const kAccountDetailsPermission; - -// when defined, we will use Google Analytics -#define GOOGLE_ANALYTICS_ENABLED - -// a lot of logs, don't use in production env. -//#define DEVELOPMENT_ENABLED - -// log the return information from the server -//#define DEVELOPMENT_ENABLED_JSON_RETURN - -// if set developer can have credentials printed in the console -//#define DEVELOPMENT_CREDENTIALS_LOG_ENABLED - -// to transform color from hex to RBG -//RGB color macro -#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] - -@end \ No newline at end of file diff --git a/Photo/Constants.m b/Photo/Constants.m deleted file mode 100644 index 21b018a..0000000 --- a/Photo/Constants.m +++ /dev/null @@ -1,107 +0,0 @@ -// -// Constants.m -// Trovebox -// -// Created by Patrick Santana on 05/09/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "Constants.h" - -@implementation Constants - - -// Const for the app initialization variable -NSString * const kAppInitialized = @"app_initialized"; -// Privacy - NSUserDefaults name -NSString * const kPhotosArePrivate=@"photos_are_private"; -// NSUserDefault variable name for the Trovebox Server -NSString * const kTroveboxServer=@"account_server"; -// user's name -NSString * const kTroveboxNameUser=@"account_user_name"; -// user email -NSString * const kTroveboxEmailUser=@"account_user_email"; -// if user is owner, admin or group -NSString * const kTroveboxTypeUser=@"account_user_type"; - - -// NSUserDefault variable to hold user pictures -NSString * const kHomeScreenPictures=@"home_pictures"; -// NSUserDefault variable with information about the last time that the pictures were refreshed -NSString * const kHomeScreenPicturesTimestamp=@"home_pictures_timestamp"; -// NSUserDefault variable with information about the server -NSString * const kServerDetails=@"server_details"; -NSString * const kServerDetailsIsHosted=@"server_details_is_hosted"; - - -NSString * const kAuthenticationValid=@"authentication_valid"; - -/* - * Constants for Notification - */ -NSString * const kNotificationLoginAuthorize=@"notification_login_authorized"; -NSString * const kNotificationRefreshPictures=@"notification_refresh_pictures"; -NSString * const kNotificationCheckRefreshPictures=@"notification_check_refresh_pictures"; -NSString * const kNotificationShareInformationToFacebookOrTwitter=@"notification_share_information_to_facebook_or_twitter"; -NSString * const kNotificationNeededsUpdate=@"notification_needs_update"; -NSString * const kNotificationNeededsUpdateHome=@"notification_needs_update_home_screen"; -NSString * const kNotificationDisableUpdateHome=@"notification_disable_update_home_screen"; -NSString * const kNotificationProfileRefresh=@"notification_update_profile_information"; -NSString * const kNotificationProfileRemoveProgressBar=@"notification_profile_remove_progress_bar"; - -/* - * Constants for the table in the upload screen - */ -NSString * const kCellIdentifierTitle = @"cellIdentifierTitle"; -NSString * const kCellIdentifierTags=@"cellIdentifierTags"; -NSString * const kCellIdentifierAlbums=@"cellIdentifierAlbums"; -NSString * const kCellIdentifierFilter=@"cellIdentifierFilter"; -NSString * const kCellIdentifierPrivate=@"cellIdentifierPrivate"; -NSString * const kCellIdentifierShareFacebook=@"cellIdentifierShareToFacebook"; -NSString * const kCellIdentifierShareTwitter=@"cellIdentifierShareToTwitter"; - - -/* - * Constants for the Updater - */ -NSString * const kVersionApplicationInstalled=@"version_application_installed"; - -/* - * Constants for Statistic - */ -NSString * const kValidateNotAllowedLocation=@"validate_not_allowed_location"; - -/* - * Constants for Sync - */ -NSString * const kSyncShowUploadedPhotos=@"sync_show_uploaded_photos"; - - -// For profile -NSString * const kProfileAccountType=@"profile_account_type"; -NSString * const kProfileLimitRemaining=@"profile_limit_remaining"; -NSString * const kProfileAccountProReceipt=@"profile_account_pro_receipt"; -NSString * const kProfileLatestUpdateDate=@"profile_latest_update_date"; -NSString * const kProfileLimitAllowed=@"profile_limit_allowed"; - - -// Auto Sync -NSString * const kAutoSyncEnabled=@"photos_auto_sync"; -NSString * const kAutoSyncMessageDisplayed=@"photos_auto_sync_message_displayed"; - -// Account Details -NSString * const kAccountDetailsProfile=@"account_details_profile_object"; -NSString * const kAccountDetailsPermission=@"account_details_permission_object"; - -@end diff --git a/Photo/ContentTypeUtilities.h b/Photo/ContentTypeUtilities.h deleted file mode 100644 index ec10d8d..0000000 --- a/Photo/ContentTypeUtilities.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// ContentTypeUtilities.h -// Trovebox -// -// Created by Patrick Santana on 29/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface ContentTypeUtilities : NSObject - -+ (NSString *) contentTypeForImageData:(NSData *)data; -+ (NSString *) contentTypeExtensionForImageData:(NSData *)data; -@end diff --git a/Photo/ContentTypeUtilities.m b/Photo/ContentTypeUtilities.m deleted file mode 100644 index ee82b30..0000000 --- a/Photo/ContentTypeUtilities.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// ContentTypeUtilities.m -// Trovebox -// -// Created by Patrick Santana on 29/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "ContentTypeUtilities.h" - -@implementation ContentTypeUtilities - - -+ (NSString *) contentTypeForImageData:(NSData *)data -{ - uint8_t c; - [data getBytes:&c length:1]; - - switch (c) { - case 0xFF: - return @"image/jpeg"; - case 0x89: - return @"image/png"; - case 0x47: - return @"image/gif"; - case 0x49: - case 0x4D: - return @"image/tiff"; - } - return nil; -} - -+ (NSString *) contentTypeExtensionForImageData:(NSData *)data -{ - uint8_t c; - [data getBytes:&c length:1]; - - switch (c) { - case 0xFF: - return @"jpeg"; - case 0x89: - return @"png"; - case 0x47: - return @"gif"; - case 0x49: - case 0x4D: - return @"tiff"; - } - return @""; -} - -@end diff --git a/Photo/CoreDataTableViewController.h b/Photo/CoreDataTableViewController.h deleted file mode 100644 index 0f138b4..0000000 --- a/Photo/CoreDataTableViewController.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// CoreDataTableViewController.h -// -// Created for Stanford CS193p Fall 2011. -// Copyright 2011 Stanford University. All rights reserved. -// -// This class mostly just copies the code from NSFetchedResultsController's documentation page -// into a subclass of UITableViewController. -// -// Just subclass this and set the fetchedResultsController. -// The only UITableViewDataSource method you'll HAVE to implement is tableView:cellForRowAtIndexPath:. -// And you can use the NSFetchedResultsController method objectAtIndexPath: to do it. -// -// Remember that once you create an NSFetchedResultsController, you CANNOT modify its @propertys. -// If you want new fetch parameters (predicate, sorting, etc.), -// create a NEW NSFetchedResultsController and set this class's fetchedResultsController @property again. -// - -#import -#import - -@interface CoreDataTableViewController : UITableViewController - -// The controller (this class fetches nothing if this is not set). -@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; - -// Causes the fetchedResultsController to refetch the data. -// You almost certainly never need to call this. -// The NSFetchedResultsController class observes the context -// (so if the objects in the context change, you do not need to call performFetch -// since the NSFetchedResultsController will notice and update the table automatically). -// This will also automatically be called if you change the fetchedResultsController @property. -- (void)performFetch; - -// Turn this on before making any changes in the managed object context that -// are a one-for-one result of the user manipulating rows directly in the table view. -// Such changes cause the context to report them (after a brief delay), -// and normally our fetchedResultsController would then try to update the table, -// but that is unnecessary because the changes were made in the table already (by the user) -// so the fetchedResultsController has nothing to do and needs to ignore those reports. -// Turn this back off after the user has finished the change. -// Note that the effect of setting this to NO actually gets delayed slightly -// so as to ignore previously-posted, but not-yet-processed context-changed notifications, -// therefore it is fine to set this to YES at the beginning of, e.g., tableView:moveRowAtIndexPath:toIndexPath:, -// and then set it back to NO at the end of your implementation of that method. -// It is not necessary (in fact, not desirable) to set this during row deletion or insertion -// (but definitely for row moves). -@property (nonatomic) BOOL suspendAutomaticTrackingOfChangesInManagedObjectContext; - -// Set to YES to get some debugging output in the console. -@property BOOL debug; - -@end diff --git a/Photo/CoreDataTableViewController.m b/Photo/CoreDataTableViewController.m deleted file mode 100644 index 874f766..0000000 --- a/Photo/CoreDataTableViewController.m +++ /dev/null @@ -1,180 +0,0 @@ -// -// CoreDataTableViewController.m -// -// Created for Stanford CS193p Fall 2011. -// Copyright 2011 Stanford University. All rights reserved. -// - -#import "CoreDataTableViewController.h" - -@interface CoreDataTableViewController() -@property (nonatomic) BOOL beganUpdates; -@end - -@implementation CoreDataTableViewController - -#pragma mark - Properties - -@synthesize fetchedResultsController = _fetchedResultsController; -@synthesize suspendAutomaticTrackingOfChangesInManagedObjectContext = _suspendAutomaticTrackingOfChangesInManagedObjectContext; -@synthesize debug = _debug; -@synthesize beganUpdates = _beganUpdates; - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return YES; -} - -#pragma mark - Fetching - -- (void)performFetch -{ - if (self.fetchedResultsController) { - if (self.fetchedResultsController.fetchRequest.predicate) { - if (self.debug) NSLog(@"[%@ %@] fetching %@ with predicate: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName, self.fetchedResultsController.fetchRequest.predicate); - } else { - if (self.debug) NSLog(@"[%@ %@] fetching all %@ (i.e., no predicate)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName); - } - NSError *error = nil; - [self.fetchedResultsController performFetch:&error]; - if (error) NSLog(@"[%@ %@] %@ (%@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), [error localizedDescription], [error localizedFailureReason]); - } else { - if (self.debug) NSLog(@"[%@ %@] no NSFetchedResultsController (yet?)", NSStringFromClass([self class]), NSStringFromSelector(_cmd)); - } - [self.tableView reloadData]; -} - -- (void)setFetchedResultsController:(NSFetchedResultsController *)newfrc -{ - NSFetchedResultsController *oldfrc = _fetchedResultsController; - if (newfrc != oldfrc) { - _fetchedResultsController = newfrc; - newfrc.delegate = self; - if ((!self.title || [self.title isEqualToString:oldfrc.fetchRequest.entity.name]) && (!self.navigationController || !self.navigationItem.title)) { - self.title = newfrc.fetchRequest.entity.name; - } - if (newfrc) { - if (self.debug) NSLog(@"[%@ %@] %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), oldfrc ? @"updated" : @"set"); - [self performFetch]; - } else { - if (self.debug) NSLog(@"[%@ %@] reset to nil", NSStringFromClass([self class]), NSStringFromSelector(_cmd)); - [self.tableView reloadData]; - } - } -} - -#pragma mark - UITableViewDataSource - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return [[self.fetchedResultsController sections] count]; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects]; -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section -{ - return [[[self.fetchedResultsController sections] objectAtIndex:section] name]; -} - -- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index -{ - return [self.fetchedResultsController sectionForSectionIndexTitle:title atIndex:index]; -} - -- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView -{ - return [self.fetchedResultsController sectionIndexTitles]; -} - -#pragma mark - NSFetchedResultsControllerDelegate - -- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller -{ - if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext) { - [self.tableView beginUpdates]; - self.beganUpdates = YES; - } -} - -- (void)controller:(NSFetchedResultsController *)controller - didChangeSection:(id )sectionInfo - atIndex:(NSUInteger)sectionIndex - forChangeType:(NSFetchedResultsChangeType)type -{ - if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext) - { - switch(type) - { - case NSFetchedResultsChangeInsert: - [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade]; - break; - - case NSFetchedResultsChangeDelete: - [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade]; - break; - } - } -} - - -- (void)controller:(NSFetchedResultsController *)controller - didChangeObject:(id)anObject - atIndexPath:(NSIndexPath *)indexPath - forChangeType:(NSFetchedResultsChangeType)type - newIndexPath:(NSIndexPath *)newIndexPath -{ - if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext) - { - switch(type) { - - case NSFetchedResultsChangeInsert: - [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] - withRowAnimation:UITableViewRowAnimationFade]; - break; - - case NSFetchedResultsChangeDelete: - [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] - withRowAnimation:UITableViewRowAnimationFade]; - break; - - case NSFetchedResultsChangeUpdate: - [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; - break; - - case NSFetchedResultsChangeMove: - [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] - withRowAnimation:UITableViewRowAnimationFade]; - [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] - withRowAnimation:UITableViewRowAnimationFade]; - break; - } - } -} -- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller -{ - if (self.beganUpdates) { - self.beganUpdates = NO; - [self.tableView endUpdates]; - } -} - -- (void)endSuspensionOfUpdatesDueToContextChanges -{ - _suspendAutomaticTrackingOfChangesInManagedObjectContext = NO; -} - -- (void)setSuspendAutomaticTrackingOfChangesInManagedObjectContext:(BOOL)suspend -{ - if (suspend) { - _suspendAutomaticTrackingOfChangesInManagedObjectContext = YES; - } else { - [self performSelector:@selector(endSuspensionOfUpdatesDueToContextChanges) withObject:0 afterDelay:0]; - } -} - -@end - diff --git a/Photo/CoreLocationController.h b/Photo/CoreLocationController.h deleted file mode 100644 index af641f3..0000000 --- a/Photo/CoreLocationController.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// CoreLocationController.h -// Trovebox -// -// Created by Patrick Santana on 02/11/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@protocol CoreLocationControllerDelegate -@required - -- (void)locationUpdate:(CLLocation *)location; -- (void)locationError:(NSError *)error; - -@end - - -@interface CoreLocationController : NSObject { - CLLocationManager *locMgr; - id delegate; -} - -@property (nonatomic, strong) CLLocationManager *locMgr; -@property (nonatomic, assign) id delegate; - - -@end diff --git a/Photo/CoreLocationController.m b/Photo/CoreLocationController.m deleted file mode 100644 index 6a91d14..0000000 --- a/Photo/CoreLocationController.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// CoreLocationController.m -// Trovebox -// -// Created by Patrick Santana on 02/11/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "CoreLocationController.h" - - -@implementation CoreLocationController - -@synthesize locMgr=_locMgr; -@synthesize delegate=_delegate; - -- (id)init { - self = [super init]; - - if(self != nil) { - self.locMgr = [[CLLocationManager alloc] init]; - self.locMgr.delegate = self; - } - - return self; -} - -- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { - if([self.delegate conformsToProtocol:@protocol(CoreLocationControllerDelegate)]) { - [self.delegate locationUpdate:newLocation]; - } -} - -- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { - if([self.delegate conformsToProtocol:@protocol(CoreLocationControllerDelegate)]) { - [self.delegate locationError:error]; - } -} - -@end diff --git a/Photo/DateUtilities.h b/Photo/DateUtilities.h deleted file mode 100644 index 3f23cc6..0000000 --- a/Photo/DateUtilities.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// DateUtilities.h -// Trovebox -// -// Created by Patrick Santana on 28/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@interface DateUtilities : NSObject - -+ (int)daysBetween:(NSDate*) dt1 and:(NSDate*) dt2; -+ (NSString*) formatDate:(NSDate*) date; -+ (NSDate*) getDateFrom:(NSString*) string withFormat:(NSString*) format; - -@end diff --git a/Photo/DateUtilities.m b/Photo/DateUtilities.m deleted file mode 100644 index dd06cfa..0000000 --- a/Photo/DateUtilities.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// DateUtilities.m -// Trovebox -// -// Created by Patrick Santana on 28/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DateUtilities.h" - -@implementation DateUtilities - -+ (int)daysBetween:(NSDate *)dt1 and:(NSDate *)dt2 -{ - NSUInteger unitFlags = NSDayCalendarUnit; - NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; - NSDateComponents *components = [calendar components:unitFlags fromDate:dt1 toDate:dt2 options:0]; - return [components day]+1; -} - -+ (NSString *) formatDate:(NSDate *) date -{ - if (date == nil) - return nil; - - NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; - [dateFormat setDateStyle:NSDateFormatterMediumStyle]; - [dateFormat setTimeStyle:NSDateFormatterShortStyle]; - return [dateFormat stringFromDate:date]; -} - -+ (NSDate*) getDateFrom:(NSString*) string withFormat:(NSString*) format -{ - if (string == nil) - { - return nil; - } - - // Convert string to date object - NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; - if (format !=nil){ - [dateFormat setDateFormat:format]; - } - return [dateFormat dateFromString:string]; -} - -@end diff --git a/Photo/DisplayUtilities.h b/Photo/DisplayUtilities.h deleted file mode 100644 index b45b8c6..0000000 --- a/Photo/DisplayUtilities.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// DisplayUtilities.h -// Trovebox -// -// Created by Patrick Santana on 29/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@interface DisplayUtilities : NSObject - -+(BOOL) isRetina; -+(BOOL) isIPhone; -+(BOOL) isIPad; -+(BOOL) is4InchRetina; - -// this method will add the correct extension in the nibname -// specific for the device: -// eg: nibname: ContactUsViewController -// returns -// iphone : ContactUsViewController -// iphone5: ContactUsViewController5 -// ipad : ContactUsViewControlleriPad -+(NSString*) getCorrectNibName:(NSString*) nibName; - -@end diff --git a/Photo/DisplayUtilities.m b/Photo/DisplayUtilities.m deleted file mode 100644 index 0ba098c..0000000 --- a/Photo/DisplayUtilities.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// DisplayUtilities.m -// Trovebox -// -// Created by Patrick Santana on 29/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DisplayUtilities.h" - -@implementation DisplayUtilities - -+(BOOL) isRetina -{ - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - return YES; - } - - return NO; -} - -+(BOOL) isIPhone -{ - return ![DisplayUtilities isIPad]; -} - -+(BOOL) isIPad -{ - if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) { - return YES; - } - - return NO; -} - -+ (BOOL) is4InchRetina -{ - CGRect screenBounds = [[UIScreen mainScreen] bounds]; - if (screenBounds.size.height == 568) { - return YES; - } - - return NO; -} - -+(NSString*) getCorrectNibName:(NSString*) nibName -{ - if ( [DisplayUtilities isIPad] ){ - // for now we don't do the ipad - return nibName; - }else if ( [DisplayUtilities is4InchRetina]){ - return [[NSString alloc] initWithFormat:@"%@%@",nibName,@"5"]; - } - - // return default - return nibName; -} - -@end diff --git a/Photo/ELCAsset.h b/Photo/ELCAsset.h deleted file mode 100644 index 5aec3ad..0000000 --- a/Photo/ELCAsset.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Asset.h -// -// Created by ELC on 2/15/11. -// Copyright 2011 ELC Technologies. All rights reserved. -// - -#import -#import - -@class ELCAsset; - -@protocol ELCAssetDelegate - -@optional -- (void)assetSelected:(ELCAsset *)asset; - -@end - -@interface ELCAsset : UIView - - -@property (nonatomic, strong) ALAsset *asset; -@property (nonatomic, strong) id parent; -@property (nonatomic) BOOL selected; -@property (nonatomic) BOOL uploaded; - -- (id)initWithAsset:(ALAsset*)_asset alreadyUploaded:(BOOL) uploaded type:(NSString*) type duration:(NSString*) time; - -@end \ No newline at end of file diff --git a/Photo/ELCAsset.m b/Photo/ELCAsset.m deleted file mode 100644 index 4f1df44..0000000 --- a/Photo/ELCAsset.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// Asset.m -// -// Created by ELC on 2/15/11. -// Copyright 2011 ELC Technologies. All rights reserved. -// - -#import "ELCAsset.h" - -@interface ELCAsset(){ - NSString* _type; - NSString* _duration; - - UIImageView *overlayAlreadyUploadedView; -} - -@end - -@implementation ELCAsset - -@synthesize asset = _asset; -@synthesize parent = _parent; -@synthesize selected = _selected; -@synthesize uploaded= _uploaded; - - --(id)initWithAsset:(ALAsset*) alasset alreadyUploaded:(BOOL) isUploaded type:(NSString*) type duration:(NSString*) time{ - - self = [super init]; - if (self) { - self.asset = alasset; - _selected = NO; - _uploaded = isUploaded; - _type = type; - } - - return self; - -} - - -- (void)toggleSelection -{ - self.selected = !self.selected; -} - -- (void)setSelected:(BOOL)selected -{ - _selected = selected; - if (selected) { - if (_parent != nil && [_parent respondsToSelector:@selector(assetSelected:)]) { - [_parent assetSelected:self]; - } - } -} - -- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { - if (buttonIndex == 1){ - [(MenuViewController*) SharedAppDelegate.menuController displayProfileScreen]; - } -} - -@end - diff --git a/Photo/ELCAssetCell.h b/Photo/ELCAssetCell.h deleted file mode 100644 index d5d0d88..0000000 --- a/Photo/ELCAssetCell.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AssetCell.h -// -// Created by ELC on 2/15/11. -// Copyright 2011 ELC Technologies. All rights reserved. -// - -#import - - -@interface ELCAssetCell : UITableViewCell - -- (id)initWithAssets:(NSArray *)assets reuseIdentifier:(NSString *)identifier; -- (void)setAssets:(NSArray *)assets; - -@end diff --git a/Photo/ELCAssetCell.m b/Photo/ELCAssetCell.m deleted file mode 100644 index 83695de..0000000 --- a/Photo/ELCAssetCell.m +++ /dev/null @@ -1,179 +0,0 @@ -// -// AssetCell.m -// -// Created by ELC on 2/15/11. -// Copyright 2011 ELC Technologies. All rights reserved. -// - -#import "ELCAssetCell.h" -#import "ELCAsset.h" - -@interface ELCAssetCell () - -@property (nonatomic, strong) NSArray *rowAssets; -@property (nonatomic, strong) NSMutableArray *imageViewArray; -@property (nonatomic, strong) NSMutableArray *uploadedViewArray; -@property (nonatomic, strong) NSMutableArray *overlayViewArray; - -@end - -@implementation ELCAssetCell - - -- (id)initWithAssets:(NSArray *)assets reuseIdentifier:(NSString *)identifier -{ - self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; - if(self) { - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)]; - [self addGestureRecognizer:tapRecognizer]; - - NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:4]; - self.imageViewArray = mutableArray; - - NSMutableArray *overlayArray = [[NSMutableArray alloc] initWithCapacity:4]; - self.overlayViewArray = overlayArray; - - NSMutableArray *uploadedViewArray = [[NSMutableArray alloc] initWithCapacity:4]; - self.uploadedViewArray = uploadedViewArray; - - [self setAssets:assets]; - } - return self; -} - -- (void)setAssets:(NSArray *)assets -{ - self.rowAssets = assets; - for (UIImageView *view in _imageViewArray) { - [view removeFromSuperview]; - } - - for (UIImageView *view in _uploadedViewArray) { - [view removeFromSuperview]; - } - - for (UIImageView *view in _overlayViewArray) { - [view removeFromSuperview]; - } - - //set up a pointer here so we don't keep calling [UIImage imageNamed:] if creating overlays - UIImage *overlayImage = nil; - UIImage *overlayUploaded = nil; - - for (int i = 0; i < [_rowAssets count]; ++i) { - - ELCAsset *asset = [_rowAssets objectAtIndex:i]; - - // IMAGE - if (i < [_imageViewArray count]) { - UIImageView *imageView = [_imageViewArray objectAtIndex:i]; - imageView.image = [UIImage imageWithCGImage:asset.asset.thumbnail]; - } else { - UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:asset.asset.thumbnail]]; - [_imageViewArray addObject:imageView]; - } - - // UPLOADED - if (i < [_uploadedViewArray count]){ - UIImageView *uploadedView = [_uploadedViewArray objectAtIndex:i]; - uploadedView.hidden = asset.uploaded ? NO :YES; - }else{ - if (overlayUploaded == nil){ - overlayUploaded = [UIImage imageNamed:@"sync-already-uploaded.png"]; - } - UIImageView *uploadedView = [[UIImageView alloc] initWithImage:overlayUploaded]; - [_uploadedViewArray addObject:uploadedView]; - uploadedView.hidden = asset.uploaded ? NO :YES; - } - - // OVERLAY - if (i < [_overlayViewArray count]) { - UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; - overlayView.hidden = asset.selected ? NO : YES; - } else { - if (overlayImage == nil) { - overlayImage = [UIImage imageNamed:@"sync-overlay.png"]; - } - UIImageView *overlayView = [[UIImageView alloc] initWithImage:overlayImage]; - [_overlayViewArray addObject:overlayView]; - overlayView.hidden = asset.selected ? NO : YES; - } - } -} - -- (void)cellTapped:(UITapGestureRecognizer *)tapRecognizer -{ - CGPoint point = [tapRecognizer locationInView:self]; - CGFloat totalWidth = self.rowAssets.count * 75 + (self.rowAssets.count - 1) * 4; - CGFloat startX = (self.bounds.size.width - totalWidth) / 2; - - CGRect frame = CGRectMake(startX, 2, 75, 75); - - for (int i = 0; i < [_rowAssets count]; ++i) { - if (CGRectContainsPoint(frame, point)) { - ELCAsset *asset = [_rowAssets objectAtIndex:i]; - asset.selected = !asset.selected; - UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; - overlayView.hidden = !asset.selected; - - // reach max - if([(SyncViewController*) asset.parent totalSelectedAssets] >= 50) { - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Maximum reached",@"Sync") duration:5000]; - [alert showAlert]; - - asset.selected = NO; - overlayView.hidden = TRUE; - - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action" - action:@"buttonPress" - label:@"Sync - maximum reached" - value:nil] build]]; - } - - // check limits - if ([SharedAppDelegate isHosted] && [SharedAppDelegate isFreeUser]){ - - if ([SharedAppDelegate limitFreeUser] == 0 || - [(SyncViewController*) asset.parent totalSelectedAssets] > [SharedAppDelegate limitFreeUser]){ - // limit reached, - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Limit reached", nil) - message: [NSString stringWithFormat:NSLocalizedString(@"You've reached your monthly limit of 100 photos.",@"Message when limit is reached")] - delegate:nil - cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"OK",nil),nil]; - [alert show]; - asset.selected = NO; - overlayView.hidden = TRUE; - } - } - - break; - } - frame.origin.x = frame.origin.x + frame.size.width + 4; - } -} - -- (void)layoutSubviews -{ - CGFloat totalWidth = self.rowAssets.count * 75 + (self.rowAssets.count - 1) * 4; - CGFloat startX = (self.bounds.size.width - totalWidth) / 2; - - CGRect frame = CGRectMake(startX, 2, 75, 75); - - for (int i = 0; i < [_rowAssets count]; ++i) { - UIImageView *imageView = [_imageViewArray objectAtIndex:i]; - [imageView setFrame:frame]; - [self addSubview:imageView]; - - UIImageView *updatedView = [_uploadedViewArray objectAtIndex:i]; - [updatedView setFrame:frame]; - [self addSubview:updatedView]; - - UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; - [overlayView setFrame:frame]; - [self addSubview:overlayView]; - - frame.origin.x = frame.origin.x + frame.size.width + 4; - } -} - -@end diff --git a/Photo/ELCAssetPicker.xib b/Photo/ELCAssetPicker.xib deleted file mode 100644 index 5d5e2b5..0000000 --- a/Photo/ELCAssetPicker.xib +++ /dev/null @@ -1,435 +0,0 @@ - - - - 1024 - 10F569 - 804 - 1038.29 - 461.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 123 - - - YES - - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - YES - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - YES - - - 268 - {320, 416} - - - 1 - MSAxIDEAA - - YES - YES - IBCocoaTouchFramework - - - {320, 416} - - - 3 - MQA - - 2 - - - - - NO - - IBCocoaTouchFramework - - - - - YES - - - view - - - - 3 - - - - scrollview - - - - 7 - - - - - YES - - 0 - - - - - - 1 - - - YES - - - - - - -1 - - - File's Owner - - - -2 - - - - - 6 - - - YES - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - 1.IBEditorWindowLastContentRect - 1.IBPluginDependency - 6.IBPluginDependency - 6.IBViewBoundsToFrameTransform - - - YES - AssetPicker - UIResponder - {{575, 376}, {320, 480}} - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - P4AAAL+AAAAAAAAAw88AAA - - - - - YES - - - YES - - - - - YES - - - YES - - - - 15 - - - - YES - - AssetPicker - UIViewController - - dismiss: - id - - - dismiss: - - dismiss: - id - - - - YES - - YES - parent - scrollview - selectedAssetsLabel - - - YES - id - UIScrollView - UILabel - - - - YES - - YES - parent - scrollview - selectedAssetsLabel - - - YES - - parent - id - - - scrollview - UIScrollView - - - selectedAssetsLabel - UILabel - - - - - IBProjectSource - Classes/ELCImagePickerController.h - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UILabel - UIView - - IBFrameworkSource - UIKit.framework/Headers/UILabel.h - - - - UIResponder - NSObject - - - - UIScrollView - UIView - - IBFrameworkSource - UIKit.framework/Headers/UIScrollView.h - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - ../ELCImagePickerDemo.xcodeproj - 3 - 123 - - diff --git a/Photo/ELCAssetSelectionDelegate.h b/Photo/ELCAssetSelectionDelegate.h deleted file mode 100644 index 3f55bf0..0000000 --- a/Photo/ELCAssetSelectionDelegate.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// ELCAssetSelectionDelegate.h -// ELCImagePickerDemo -// -// Created by JN on 9/6/12. -// Copyright (c) 2012 ELC Technologies. All rights reserved. -// - -#import - -@protocol ELCAssetSelectionDelegate - -- (void)selectedAssets:(NSArray *)assets; - -@end diff --git a/Photo/ELCImagePickerController.h b/Photo/ELCImagePickerController.h deleted file mode 100644 index b25d74e..0000000 --- a/Photo/ELCImagePickerController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// ELCImagePickerController.h -// ELCImagePickerDemo -// -// Created by ELC on 9/9/10. -// Copyright 2010 ELC Technologies. All rights reserved. -// - -#import -#import "ELCAssetSelectionDelegate.h" - -@class ELCImagePickerController; - -@protocol ELCImagePickerControllerDelegate - -- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info; -- (void)elcImagePickerControllerDidCancel:(ELCImagePickerController *)picker; - -@end - -@interface ELCImagePickerController : UINavigationController - -@property (nonatomic, weak) id delegate; - -- (void)cancelImagePicker; - -@end - diff --git a/Photo/ELCImagePickerController.m b/Photo/ELCImagePickerController.m deleted file mode 100644 index 28ddb0c..0000000 --- a/Photo/ELCImagePickerController.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// ELCImagePickerController.m -// ELCImagePickerDemo -// -// Created by ELC on 9/9/10. -// Copyright 2010 ELC Technologies. All rights reserved. -// - -#import "ELCImagePickerController.h" -#import "ELCAsset.h" -#import "ELCAssetCell.h" - -@implementation ELCImagePickerController - -@synthesize delegate = _myDelegate; - -- (void)cancelImagePicker -{ - if([_myDelegate respondsToSelector:@selector(elcImagePickerControllerDidCancel:)]) { - [_myDelegate performSelector:@selector(elcImagePickerControllerDidCancel:) withObject:self]; - } -} - -- (void)selectedAssets:(NSArray *)assets -{ - NSMutableArray *returnArray = [[NSMutableArray alloc] init]; - - /* - for(ALAsset *asset in assets) { - - NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init]; - [workingDictionary setObject:[asset valueForProperty:ALAssetPropertyType] forKey:@"UIImagePickerControllerMediaType"]; - ALAssetRepresentation *assetRep = [asset defaultRepresentation]; - - CGImageRef imgRef = [assetRep fullScreenImage]; - UIImage *img = [UIImage imageWithCGImage:imgRef - scale:[UIScreen mainScreen].scale - orientation:(UIImageOrientation)assetRep.orientation]; - [workingDictionary setObject:img forKey:@"UIImagePickerControllerOriginalImage"]; - [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:@"UIImagePickerControllerReferenceURL"]; - - [returnArray addObject:workingDictionary]; - - } - */ - - for(ALAsset *asset in assets) { - NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init]; - [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:@"UIImagePickerControllerReferenceURL"]; - - [returnArray addObject:workingDictionary]; - } - - - - if(_myDelegate != nil && [_myDelegate respondsToSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:)]) { - [_myDelegate performSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:) withObject:self withObject:[NSArray arrayWithArray:returnArray]]; - } else { - [self popToRootViewControllerAnimated:NO]; - } -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation -{ - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - return YES; - } else { - return toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown; - } -} - -@end diff --git a/Photo/ELCImagePickerController.xib b/Photo/ELCImagePickerController.xib deleted file mode 100644 index ad9eab2..0000000 --- a/Photo/ELCImagePickerController.xib +++ /dev/null @@ -1,291 +0,0 @@ - - - - 1024 - 10F569 - 804 - 1038.29 - 461.00 - - YES - - YES - - - YES - - - - YES - - - - YES - - - YES - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - - YES - - - - YES - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - - - YES - - YES - -1.CustomClassName - -2.CustomClassName - - - YES - ELCImagePickerController - UIResponder - - - - YES - - - YES - - - - - YES - - - YES - - - - 12 - - - - YES - - ELCImagePickerController - UIViewController - - IBProjectSource - Classes/ELCImagePickerController.h - - - - - YES - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIAccessibility.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UINibLoading.h - - - - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UIResponder - NSObject - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UIView - - IBFrameworkSource - UIKit.framework/Headers/UITextField.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UINavigationController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UIPopoverController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UISplitViewController.h - - - - UIViewController - - IBFrameworkSource - UIKit.framework/Headers/UITabBarController.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - ../ELCImagePickerDemo.xcodeproj - 3 - 123 - - diff --git a/Photo/Gallery.h b/Photo/Gallery.h deleted file mode 100644 index 7ac486c..0000000 --- a/Photo/Gallery.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// Gallery.h -// Trovebox -// -// Created by Patrick Santana on 14/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - - -@interface Gallery : NSManagedObject - -@property (nonatomic, retain) NSDate * date; -@property (nonatomic, retain) NSNumber * height; -@property (nonatomic, retain) NSString * identification; -@property (nonatomic, retain) NSString * pageUrl; -@property (nonatomic, retain) NSString * title; -@property (nonatomic, retain) NSString * url; -@property (nonatomic, retain) NSString * urlThumb; -@property (nonatomic, retain) NSNumber * width; - -@end diff --git a/Photo/Gallery.m b/Photo/Gallery.m deleted file mode 100644 index 33a4796..0000000 --- a/Photo/Gallery.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// Gallery.m -// Trovebox -// -// Created by Patrick Santana on 14/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Gallery.h" - - -@implementation Gallery - -@dynamic date; -@dynamic height; -@dynamic identification; -@dynamic pageUrl; -@dynamic title; -@dynamic url; -@dynamic urlThumb; -@dynamic width; - -@end diff --git a/Photo/GalleryViewController.h b/Photo/GalleryViewController.h deleted file mode 100644 index 23910f4..0000000 --- a/Photo/GalleryViewController.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// GalleryViewController.h -// Trovebox -// -// Created by Patrick Santana on 30/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "TMQuiltView.h" -#import "TMPhotoQuiltViewCell.h" -#import "Album.h" -#import "Tag.h" -#import "MWPhotoBrowser.h" - -@interface GalleryViewController : TMQuiltViewController - -@property (nonatomic, strong) NSMutableArray *photos; - -- (id) initWithTag:(Tag *) tag; -- (id) initWithAlbum:(Album *) album; - -@end diff --git a/Photo/GalleryViewController.m b/Photo/GalleryViewController.m deleted file mode 100644 index ffb5d11..0000000 --- a/Photo/GalleryViewController.m +++ /dev/null @@ -1,294 +0,0 @@ -// -// GalleryViewController.m -// Trovebox -// -// Created by Patrick Santana on 30/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "GalleryViewController.h" - -@interface GalleryViewController () -- (void) loadPhotos:(UIRefreshControl *)refreshControl; - -// for loading page -@property (nonatomic) NSInteger page; -@property (nonatomic) NSInteger totalPages; - -// for albums or tags -@property (nonatomic,strong) Album *album; -@property (nonatomic,strong) Tag *tag; -@end - -@implementation GalleryViewController -@synthesize photos=_photos; -@synthesize page=_page; -@synthesize totalPages=_totalPages; -@synthesize album=_album; -@synthesize tag=_tag; - -- (id)init -{ - self = [super init]; - if (self) { - // Custom initialization - self.photos = [NSMutableArray array]; - self.page = 1; - } - return self; -} - -- (id) initWithTag:(Tag *) tag -{ - self = [self init]; - if (self){ - self.tag = tag; - } - - return self; -} - -- (id) initWithAlbum:(Album *) album -{ - self = [self init]; - if (self){ - self.album = album; - } - - return self; -} -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = UIColorFromRGB(0XFAF3EF); - - // image for the navigator - [self.navigationController.navigationBar troveboxStyle:NO]; - - // title and buttons - [self.navigationItem troveboxStyle:NSLocalizedString(@"Gallery", @"Menu - title for Gallery") defaultButtons:YES viewController:self.viewDeckController menuViewController:(MenuViewController*) self.viewDeckController.leftController]; - - UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; - refreshControl.tintColor = UIColorFromRGB(0x3B2414); - [refreshControl addTarget:self action:@selector(loadPhotos:) forControlEvents:UIControlEventValueChanged]; - - [self.view addSubview:refreshControl]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - self.page = 1; - self.totalPages = nil; - // load photos - [self loadPhotos:nil]; -} - -#pragma mark - Rotation - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -#pragma mark - QuiltViewControllerDataSource -- (UIImage *)imageAtIndexPath:(NSIndexPath *)indexPath { - return [UIImage imageNamed:[self.photos objectAtIndex:indexPath.row]]; -} - -- (NSInteger)quiltViewNumberOfCells:(TMQuiltView *)TMQuiltView { - return [self.photos count]; -} - -- (TMQuiltViewCell *)quiltView:(TMQuiltView *)quiltView cellAtIndexPath:(NSIndexPath *)indexPath { - TMPhotoQuiltViewCell *cell = (TMPhotoQuiltViewCell *)[quiltView dequeueReusableCellWithReuseIdentifier:@"PhotoCell"]; - if (!cell) { - cell = [[TMPhotoQuiltViewCell alloc] initWithReuseIdentifier:@"PhotoCell"]; - } - - MWPhoto *photo = [self.photos objectAtIndex:indexPath.row]; - [cell.photoView setImageWithURL:[NSURL URLWithString:photo.thumbUrl] - placeholderImage:nil - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType){ - if (error){ - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Couldn't download the image",nil) duration:5000]; - [alert showAlert]; - } - }]; - - - // check if it is the last cell - if (self.totalPages){ - if ([self.photos count] - 1 == indexPath.row && self.page <= self.totalPages){ - [self loadPhotos:nil]; - } - } - - return cell; -} - -- (void)quiltView:(TMQuiltView *)quiltView didSelectCellAtIndexPath:(NSIndexPath *)indexPath -{ - // Create & present browser - MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self]; - - // Set options - browser.wantsFullScreenLayout = YES; - - // check if user is type GROUP - // if yes, he should not have access to actions - NSString *type = [[NSUserDefaults standardUserDefaults] objectForKey:kTroveboxTypeUser]; - if (type && [type isEqualToString:@"group"]){ - browser.displayActionButton = NO; - }else{ - browser.displayActionButton = YES; - } - - [browser setCurrentPhotoIndex:indexPath.row]; - UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:browser]; - - // Present - [self presentViewController:nav animated:NO completion:nil]; -} - -- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser { - return self.photos.count; -} - -- (MWPhoto *)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index { - if (index < self.photos.count){ - return [self.photos objectAtIndex:index]; - } - - return nil; -} - - -#pragma mark - TMQuiltViewDelegate - -- (NSInteger)quiltViewNumberOfColumns:(TMQuiltView *)quiltView { - if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft - || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight) { - - // is iPad - if ([DisplayUtilities isIPad]){ - return 6; - } - - return 3; - } else { - // is iPad - if ([DisplayUtilities isIPad]){ - return 4; - } - - return 2; - } -} - -- (CGFloat)quiltView:(TMQuiltView *)quiltView heightForCellAtIndexPath:(NSIndexPath *)indexPath { - MWPhoto *photo = [self.photos objectAtIndex:indexPath.row]; - return [photo.thumbHeight integerValue]; -} - --(void) loadPhotos:(UIRefreshControl *)refreshControl -{ - // if there isn't netwok - if ( [SharedAppDelegate internetActive] == NO ){ - // problem with internet, show message to user - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please check your internet connection",@"") duration:5000]; - [alert showAlert]; - }else { - dispatch_queue_t loadPhotos = dispatch_queue_create("loadPhotos", NULL); - dispatch_async(loadPhotos, ^{ - // call the method and get the details - @try { - // get factory for Service - WebService *service = [[WebService alloc] init]; - NSArray *result; - - // if user is refreshing that means we must load the initial data - if (refreshControl != nil){ - self.page = 1; - self.totalPages = nil; - } - - if (self.album){ - result = [service loadGallery:50 onPage:self.page++ album:self.album]; - }else if (self.tag){ - result = [service loadGallery:50 onPage:self.page++ tag:self.tag]; - }else{ - result = [service loadGallery:50 onPage:self.page++]; - } - - dispatch_async(dispatch_get_main_queue(), ^{ - if ([result class] != [NSNull class]) { - - if ( self.page == 2 ){ - // first time loading - [self.photos removeAllObjects]; - } - - // Loop through each entry in the dictionary and create an array of photos - for (NSDictionary *photoDetails in result){ - - // get totalPages - if (!self.totalPages){ - self.totalPages = [[photoDetails objectForKey:@"totalPages"] doubleValue]; - } - - MWPhoto *photo = [MWPhoto photoWithServerInfo:photoDetails]; - if (photo != nil){ - [self.photos addObject:photo]; - } - } - } - - [self.quiltView reloadData]; - [refreshControl endRefreshing]; - }); - }@catch (NSException *exception) { - dispatch_async(dispatch_get_main_queue(), ^{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Exception %@",exception.description); -#endif - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:exception.description duration:5000]; - [alert showAlert]; - [refreshControl endRefreshing]; - }); - } - }); - } -} -@end diff --git a/Photo/HomeTableViewController.h b/Photo/HomeTableViewController.h deleted file mode 100644 index 77cef51..0000000 --- a/Photo/HomeTableViewController.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// HomeTableViewController.h -// Trovebox -// -// Created by Patrick Santana on 22/06/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Timeline+Methods.h" -#import "WebService.h" - -#import "NewestPhotoCell.h" -#import "UploadCell.h" - -#import "CoreLocationController.h" -#import "CoreDataTableViewController.h" -#import "SHA1.h" -#import "NSDictionarySerializer.h" - -// image cache -#import - -// to update profile -#import "DateUtilities.h" -#import "MWPhotoBrowser.h" - -@interface HomeTableViewController : CoreDataTableViewController -{ - - // Reloading var should really be your tableviews datasource - BOOL _reloading; - - UIImageView *noPhotoImageView; - - // ask the user about location int the home screen - CoreLocationController *coreLocationController; -} - -@property (nonatomic, strong) UIImageView *noPhotoImageView; - -@end diff --git a/Photo/HomeTableViewController.m b/Photo/HomeTableViewController.m deleted file mode 100644 index 5830546..0000000 --- a/Photo/HomeTableViewController.m +++ /dev/null @@ -1,688 +0,0 @@ -// -// HomeTableViewController.m -// Trovebox -// -// Created by Patrick Santana on 22/06/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "HomeTableViewController.h" - -@interface HomeTableViewController () -// refresh the list. It is not necessary when comes from photo -@property (nonatomic) BOOL needsUpdate; -@property (nonatomic, strong) MWPhoto* mwphoto; - -- (void) doneLoadingTableViewData; -- (void) updateProfileDetails; -- (void) updateServerDetails; -@end - -@implementation HomeTableViewController -@synthesize noPhotoImageView=_noPhotoImageView; -@synthesize needsUpdate = _needsUpdate; -@synthesize mwphoto=_mwphoto; - -- (id)initWithStyle:(UITableViewStyle)style -{ - self = [super initWithStyle:style]; - if (self) { - - CGPoint imageSize = CGPointMake(self.view.frame.size.width / 2.0, self.view.frame.size.height / 2.0); - self.noPhotoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"home-upload-now.png"]]; - self.noPhotoImageView.center = imageSize; - self.noPhotoImageView.hidden = YES; - - coreLocationController = [[CoreLocationController alloc] init]; - - // nothing is loading - _reloading = NO; - - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; - NSEntityDescription *entity = [NSEntityDescription entityForName:@"Timeline" inManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - [fetchRequest setEntity:entity]; - - - fetchRequest.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"photoToUpload" ascending:NO],[NSSortDescriptor sortDescriptorWithKey:@"dateUploaded" ascending:NO],nil]; - - NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest - managedObjectContext:[SharedAppDelegate managedObjectContext] - sectionNameKeyPath:nil - cacheName:nil]; - self.fetchedResultsController = controller; - - - // needs update in screen - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(eventHandler:) - name:kNotificationNeededsUpdateHome - object:nil ]; - - // set that it always need update - self.needsUpdate = YES; - // if we don't need update, it needs to receive a notification - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(eventHandler:) - name:kNotificationDisableUpdateHome - object:nil ]; - - // update profile information - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(eventHandler:) - name:kNotificationProfileRefresh - object:nil ]; - - - } - return self; -} - -- (void) viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - - if ([AuthenticationService isLogged]){ - if (self.needsUpdate == YES){ - [self loadNewestPhotosIntoCoreData]; - }else{ - // next time it can be reloaded - self.needsUpdate = YES; - [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; - } - } -#ifdef GOOGLE_ANALYTICS_ENABLED - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"Screens" - action:@"Loaded" - label:@"Home" - value:nil] build]]; -#endif - - // ask if user wants to enable location - [coreLocationController.locMgr startUpdatingLocation]; - [coreLocationController.locMgr stopUpdatingLocation]; - - // if no picture, show image to upload - if ([[self.fetchedResultsController fetchedObjects] count]== 0){ - [self.view addSubview:self.noPhotoImageView]; - self.noPhotoImageView.hidden = NO; - }else{ - [self.noPhotoImageView removeFromSuperview]; - } - - // details screen - self.view.backgroundColor = UIColorFromRGB(0XFAF3EF); - [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; - - // check if needs to update the profile - [self needsUpdateProfileDetails]; - - // select the first row in the menu - [(MenuViewController*) SharedAppDelegate.menuController selectLatestActivity]; - - // items and text - [self.navigationItem troveboxStyle:@"" defaultButtons:YES viewController:self.viewDeckController menuViewController:(MenuViewController*) self.viewDeckController.leftController]; - - // image for the navigator - [self.navigationController.navigationBar troveboxStyle:YES]; - - // update server details - [self updateServerDetails]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; - refreshControl.tintColor = UIColorFromRGB(0x3B2414); - self.refreshControl = refreshControl; - [refreshControl addTarget:self action:@selector(loadingData) forControlEvents:UIControlEventValueChanged]; -} - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - - -#pragma mark - -#pragma mark UITableViewDataSource - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - static NSString *photoCellIdentifier = @"photoCell"; - static NSString *uploadCellIdentifier = @"uploadCell"; - - // get the object - Timeline *photo = [self.fetchedResultsController objectAtIndexPath:indexPath]; - - - // first decide if we have to show a upload cell or photo cell - if (![photo.status isEqualToString:kUploadStatusTypeUploaded]){ - // in this case, we have uploads and the cell must be a upload cell - UploadCell *uploadCell= (UploadCell *)[tableView dequeueReusableCellWithIdentifier:uploadCellIdentifier]; - - if (uploadCell == nil) { - NSString *cellNibName; - if ([DisplayUtilities isIPad]){ - cellNibName=@"UploadCelliPad"; - }else{ - cellNibName=@"UploadCell"; - } - - NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:cellNibName owner:nil options:nil]; - uploadCell = [topLevelObjects objectAtIndex:0]; - uploadCell.progressBar.progressTintColor = UIColorFromRGB(0xFECD31); - uploadCell.progressBar.trackTintColor = UIColorFromRGB(0x3B2414); - } - - // set the upload photo object in the cell for restart or cancel - uploadCell.originalObject = photo; - - // set thumb - uploadCell.thumb.image = [UIImage imageWithData:photo.photoDataThumb]; - [uploadCell.thumb.superview.layer setCornerRadius:3.0f]; - [uploadCell.thumb.superview.layer setShadowColor:[UIColor blackColor].CGColor]; - [uploadCell.thumb.superview.layer setShadowOpacity:0.25]; - [uploadCell.thumb.superview.layer setShadowRadius:1.0]; - [uploadCell.thumb.superview.layer setShadowOffset:CGSizeMake(1.0, 1.0)]; - - // set status and image upload status - uploadCell.imageStatus.hidden=YES; - uploadCell.progressBar.hidden=YES; - - if ( [photo.status isEqualToString:kUploadStatusTypeCreated]){ - uploadCell.status.text=NSLocalizedString(@"Waiting ...",@"Status upload - waiting"); - [uploadCell.imageStatus setImage:[UIImage imageNamed:@"home-waiting.png"]]; - uploadCell.imageStatus.hidden=NO; - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - }else if ( [photo.status isEqualToString:kUploadStatusTypeUploading]){ - uploadCell.status.text=@""; - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - uploadCell.progressBar.hidden=NO; - - [uploadCell.progressBar setProgress:[photo.photoUploadProgress floatValue]]; - }else if ( [photo.status isEqualToString:kUploadStatusTypeUploadFinished]){ - uploadCell.status.text=NSLocalizedString(@"Upload finished!",@"Status upload - Upload finished!"); - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - [uploadCell.imageStatus setImage:[UIImage imageNamed:@"home-finished.png"]]; - uploadCell.imageStatus.hidden=NO; - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - - // check if it needs share for twitter or facebook - // prepare NSDictionary with details of sharing if Twitter or Facebook was checked - if ([photo.twitter boolValue] || [photo.facebook boolValue]){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"User wants to share uploaded photo"); -#endif - - NSDictionary *responsePhoto = [NSDictionarySerializer nsDataToNSDictionary:photo.photoUploadResponse]; - - // parameters from upload - NSArray *keys = [NSArray arrayWithObjects:@"url", @"title",@"type",nil]; - NSString *shareDetails = [responsePhoto objectForKey:@"url"]; - if (photo.photoUploadMultiplesUrl){ - shareDetails = photo.photoUploadMultiplesUrl; - } - NSArray *objects= [NSArray arrayWithObjects: shareDetails, [NSString stringWithFormat:@"%@", [responsePhoto objectForKey:@"title"]],[photo.twitter boolValue] ? @"Twitter" : @"Facebook", nil]; - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationShareInformationToFacebookOrTwitter object:[NSDictionary dictionaryWithObjects:objects forKeys:keys] ]; - } - - // delete this object after 2 seconds - [self performSelector:@selector(deleteTimeline:) withObject:photo afterDelay:2.0]; - }else if ( [photo.status isEqualToString:kUploadStatusTypeFailed]){ - uploadCell.status.text=NSLocalizedString(@"Retry uploading",@"Status upload - Retry uploading!"); - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - }else if ( [photo.status isEqualToString:kUploadStatusTypeDuplicated]){ - uploadCell.status.text=NSLocalizedString(@"Already in your account",@"Status upload - Already in your account"); - [uploadCell.imageStatus setImage:[UIImage imageNamed:@"home-already-uploaded.png"]]; - uploadCell.imageStatus.hidden=NO; - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - - // delete this object after 2 seconds - [self performSelector:@selector(deleteTimeline:) withObject:photo afterDelay:2.0]; - }else if ( [photo.status isEqualToString:kUploadStatusTypeLimitReached]){ - uploadCell.status.text=NSLocalizedString(@"Limit reached",@"Status upload - Limit reached!"); - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - }else if ( [photo.status isEqualToString:kUploadStatusTypeCreating]){ - uploadCell.status.text=NSLocalizedString(@"Creating ...",@"Status upload - Creating ..."); - [uploadCell.imageStatus setImage:[UIImage imageNamed:@"home-waiting.png"]]; - uploadCell.imageStatus.hidden=NO; - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - }else{ - // it is invalid - uploadCell.status.text=NSLocalizedString(@"Invalid photo",@"Status upload - Invalid photo!"); - [uploadCell.imageStatus setImage:[UIImage imageNamed:@"home-already-uploaded.png"]]; - uploadCell.imageStatus.hidden=NO; - uploadCell.status.textColor=UIColorFromRGB(0x3B2414); - - // delete this object after 1 seconds - [self performSelector:@selector(deleteTimeline:) withObject:photo afterDelay:1.0]; - - } - - // decide if we show retry/cancel - if ([photo.status isEqualToString:kUploadStatusTypeFailed] || - [photo.status isEqualToString:kUploadStatusTypeLimitReached]) { - uploadCell.btnRetry.hidden = NO; - }else{ - uploadCell.btnRetry.hidden = YES; - } - - return uploadCell; - }else{ - - NewestPhotoCell *newestPhotoCell = (NewestPhotoCell *)[tableView dequeueReusableCellWithIdentifier:photoCellIdentifier]; - - if (newestPhotoCell == nil) { - NSString *cellNibName; - if ([DisplayUtilities isIPad]){ - cellNibName=@"NewestPhotoCelliPad"; - }else{ - cellNibName=@"NewestPhotoCell"; - } - NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:cellNibName owner:nil options:nil]; - newestPhotoCell = [topLevelObjects objectAtIndex:0]; - newestPhotoCell.activity.color=UIColorFromRGB(0x3B2414); - } - - // title - [newestPhotoCell label].text=[photo.title stringByReplacingOccurrencesOfString:@"\t" withString:@""]; - - // days or hours - NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:photo.date]; - - NSInteger days = interval/86400; - if (days >= 2 ){ - if (days > 365){ - // show in years - if (days/365 == 1){ - [newestPhotoCell date].text = NSLocalizedString(@"This photo was taken one year ago",@"Message for photo details in the home - This photo was taken one year ago"); - }else{ - [newestPhotoCell date].text = [NSString stringWithFormat:NSLocalizedString(@"This photo was taken %i years ago",@"Message for photo details in the home - This photo was taken %i years ago"), days/365]; - } - }else{ - // lets show in days - [newestPhotoCell date].text = [NSString stringWithFormat:NSLocalizedString(@"This photo was taken %i days ago",@"Message for photo details in the home - This photo was taken %i days ago"), days]; - } - }else{ - // lets show in hours - NSInteger hours = interval / 3600; - if (hours<1){ - [newestPhotoCell date].text = NSLocalizedString(@"This photo was taken less than one hour ago",@"Message for photo details in the home - less than one hour ago"); - }else { - if (hours == 1){ - [newestPhotoCell date].text = NSLocalizedString(@"This photo was taken one hour ago",@"Message for photo details in the home - This photo was taken one hour ago"); - }else { - [newestPhotoCell date].text = [NSString stringWithFormat:NSLocalizedString(@"This photo was taken %i hours ago",@"Message for photo details in the home - This photo was taken %i hours ago"), hours]; - } - } - } - - // tags - [newestPhotoCell tags].text=photo.tags; - newestPhotoCell.private.hidden=YES; - newestPhotoCell.shareButton.hidden=YES; - newestPhotoCell.geoPositionButton.hidden=YES; - newestPhotoCell.geoSharingImage.hidden=YES; - [newestPhotoCell.activity startAnimating]; - - [newestPhotoCell.photo setImageWithURL:[NSURL URLWithString:photo.photoUrl] - placeholderImage:nil - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType){ - if (error){ - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Couldn't download the image",nil) duration:5000]; - [alert showAlert]; -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Error: %@",[error localizedDescription]); -#endif - - [[SharedAppDelegate managedObjectContext] deleteObject:photo]; - }else{ - [newestPhotoCell.activity stopAnimating]; - newestPhotoCell.photo.superview.layer.masksToBounds = NO; - [newestPhotoCell.photo.superview.layer setShadowColor:[UIColor blackColor].CGColor]; - [newestPhotoCell.photo.superview.layer setShadowOpacity:0.25]; - [newestPhotoCell.photo.superview.layer setShadowRadius:1.0]; - [newestPhotoCell.photo.superview.layer setShadowOffset:CGSizeMake(2.0, 0.0)]; - [newestPhotoCell.photo.superview.layer setShadowPath:[UIBezierPath bezierPathWithRect:[newestPhotoCell.photo.superview.layer bounds]].CGPath]; - - - // set objects - newestPhotoCell.timeline = photo; - newestPhotoCell.newestPhotosTableViewController = self; - - // set details of private or not - if ([photo.permission boolValue] == NO){ - newestPhotoCell.private.hidden=NO; - } - - // user can share - if (photo.photoUrl != nil){ - newestPhotoCell.shareButton.hidden=NO; - } - - // set details geoposition - newestPhotoCell.geoSharingImage.hidden=NO; - if (photo.latitude != nil && photo.longitude != nil){ - // show button - newestPhotoCell.geoPositionButton.hidden=NO; - newestPhotoCell.geoSharingImage.image = [UIImage imageNamed:@"home-geo-on-sharing.png"]; - }else { - newestPhotoCell.geoPositionButton.hidden=YES; - newestPhotoCell.geoSharingImage.image = [UIImage imageNamed:@"home-geo-off-sharing.png"]; - } - } - }]; - - return newestPhotoCell; - } -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ - Timeline *photo = [self.fetchedResultsController objectAtIndexPath:indexPath]; - if ([photo.status isEqualToString:kUploadStatusTypeUploaded]){ - if ([DisplayUtilities isIPad]) - return 600; - else - return 365; - }else{ - return 44; - } -} - -- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - Timeline *photo = [self.fetchedResultsController objectAtIndexPath:indexPath]; - if ([photo.status isEqualToString:kUploadStatusTypeUploaded]){ - - // Create & present browser - self.mwphoto = [MWPhoto photoWithURL:[NSURL URLWithString:photo.photoUrlDetail]]; - - // set details - self.mwphoto.identification = photo.key; - self.mwphoto.pageUrl = photo.photoPageUrl; - self.mwphoto.permission = photo.permission; - - MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self]; - - // check if user is type GROUP - // if yes, he should not have access to actions - NSString *type = [[NSUserDefaults standardUserDefaults] objectForKey:kTroveboxTypeUser]; - if (type && [type isEqualToString:@"group"]){ - browser.displayActionButton = NO; - }else{ - browser.displayActionButton = YES; - } - - UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:browser]; - - // Present - [self presentViewController:nav animated:NO completion:nil]; - } -} - -- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser { - return 1; -} - -- (MWPhoto *)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index { - return self.mwphoto; -} - - -// Override to support conditional editing of the table view. -// This only needs to be implemented if you are going to be returning NO -// for some items. By default, all items are editable. -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { - // get the object - Timeline *photo = [self.fetchedResultsController objectAtIndexPath:indexPath]; - - - // first decide if we have to show a upload cell or photo cell - if ([photo.status isEqualToString:kUploadStatusTypeFailed]){ - return YES; - } - - return NO; -} - -// Override to support editing the table view. -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (editingStyle == UITableViewCellEditingStyleDelete) { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Pressed delete button"); -#endif - // delete object originalObject - Timeline *photo = [self.fetchedResultsController objectAtIndexPath:indexPath]; - - //delete the file - NSError *error = nil; - if ([[NSFileManager defaultManager] removeItemAtPath:photo.photoDataTempUrl error:&error] != YES) -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Unable to delete file: %@", [error localizedDescription]); -#endif - - [[SharedAppDelegate managedObjectContext] deleteObject:photo]; - } -} - -- (void) deleteTimeline:(Timeline *) photo -{ - [[SharedAppDelegate managedObjectContext] deleteObject:photo]; -} - -#pragma mark - -#pragma mark Data Source Loading / Reloading Methods -- (void)doneLoadingTableViewData -{ - _reloading = NO; - [self.refreshControl endRefreshing]; - - // if no picture, show image to upload - if ([[self.fetchedResultsController fetchedObjects] count]== 0){ - [self.navigationController.view addSubview:self.noPhotoImageView]; - self.noPhotoImageView.hidden = NO; - }else{ - [self.noPhotoImageView removeFromSuperview]; - } -} - -#pragma mark - -#pragma mark Refresh Methods -- (void)loadingData -{ - [self loadNewestPhotosIntoCoreData]; -} - -#pragma mark - -#pragma mark Population core data -- (void) loadNewestPhotosIntoCoreData -{ - if (_reloading == NO && [AuthenticationService isLogged]){ - // set reloading in the table - _reloading = YES; - - // if there isn't netwok - if ( [SharedAppDelegate internetActive] == NO ){ - [self notifyUserNoInternet]; - [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:1.0]; - }else { - dispatch_queue_t loadNewestPhotos = dispatch_queue_create("loadNewestPhotos", NULL); - dispatch_async(loadNewestPhotos, ^{ - // call the method and get the details - @try { - // get factory for OpenPhoto Service - WebService *service = [[WebService alloc] init]; - NSArray *result = [service fetchNewestPhotosMaxResult:25]; - - dispatch_async(dispatch_get_main_queue(), ^{ - // let NewestPhotos treat the objects - [Timeline insertIntoCoreData:result InManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - [self doneLoadingTableViewData]; - }); - }@catch (NSException *exception) { - dispatch_async(dispatch_get_main_queue(), ^{ - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Failed! We couldn't get your newest photos.",@"Message in the home when trying to load newest photos") duration:5000]; - [alert showAlert]; - - // refresh table - [self doneLoadingTableViewData]; - }); - } - }); - } - } -} - -- (void) notifyUserNoInternet{ - [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; - // problem with internet, show message to user - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please check your internet connection",@"") duration:5000]; - [alert showAlert]; -} - -- (void) eventHandler: (NSNotification *) notification{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"###### Event triggered: %@", notification); -#endif - - if ([notification.name isEqualToString:kNotificationNeededsUpdateHome]){ - [self loadNewestPhotosIntoCoreData]; - }else if ([notification.name isEqualToString:kNotificationDisableUpdateHome]){ - self.needsUpdate = NO; - }else if ([notification.name isEqualToString:kNotificationProfileRefresh]){ - [self updateProfileDetails]; - } -} - -- (void) needsUpdateProfileDetails -{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Checking if needs update profile"); -#endif - - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - // is there a variable for the latest update profile information - if ([standardUserDefaults objectForKey:kProfileLatestUpdateDate] != nil){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Variable exists, do the check"); -#endif - if ([DateUtilities daysBetween:[standardUserDefaults objectForKey:kProfileLatestUpdateDate] and:[NSDate date]] > 1){ - // update it sending a notification - [self updateProfileDetails]; - } - }else{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Variable does not exist, create for the first time"); -#endif - // it does not exist, creates it invoking the method to refresh - [self updateProfileDetails]; - } -} - -- (void) updateServerDetails -{ - if ( [SharedAppDelegate internetActive] == YES && [AuthenticationService isLogged]){ - dispatch_queue_t get_server_details = dispatch_queue_create("get_server_details", NULL); - dispatch_async(get_server_details, ^{ - - @try{ - WebService *service = [[WebService alloc] init]; - NSDictionary *rawAnswer = [service getSystemVersion]; - NSDictionary *result = [rawAnswer objectForKey:@"result"]; - - // display details - dispatch_async(dispatch_get_main_queue(), ^{ - if ([result class] != [NSNull class]) { - // save details locally - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - [standardUserDefaults setValue:result forKey:kServerDetails]; - - if ([result objectForKey:@"isHosted"] == nil){ - [standardUserDefaults setValue:NO forKey:kServerDetailsIsHosted]; - }else{ - [standardUserDefaults setValue:[result objectForKey:@"isHosted"] forKey:kServerDetailsIsHosted]; - } - [standardUserDefaults synchronize]; - } - }); - }@catch (NSException* e) { - dispatch_async(dispatch_get_main_queue(), ^{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Could not load server details: %@",[e description]); -#endif - }); - } - }); - } -} - -- (void) updateProfileDetails -{ - if ( [SharedAppDelegate internetActive] == YES && [AuthenticationService isLogged]){ - dispatch_queue_t get_user_details = dispatch_queue_create("get_user_details", NULL); - dispatch_async(get_user_details, ^{ - - @try{ - WebService *service = [[WebService alloc] init]; - NSDictionary *rawAnswer = [service getUserDetails]; - NSDictionary *result = [rawAnswer objectForKey:@"result"]; - - // display details - dispatch_async(dispatch_get_main_queue(), ^{ - if ([result class] != [NSNull class]) { - // limits - NSDictionary* limits = [result objectForKey:@"limit"]; - - // save details locally - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - [standardUserDefaults setValue:[result objectForKey:@"name"] forKey:kTroveboxNameUser]; - [standardUserDefaults setValue:[result objectForKey:@"email"] forKey:kTroveboxEmailUser]; - [standardUserDefaults setValue:[NSDate date] forKey:kProfileLatestUpdateDate]; - [standardUserDefaults setValue:[result objectForKey:@"paid"] forKey:kProfileAccountType]; - [standardUserDefaults setValue:[limits objectForKey:@"remaining"] forKey:kProfileLimitRemaining]; - [standardUserDefaults setValue:[limits objectForKey:@"allowed"] forKey:kProfileLimitAllowed]; - [standardUserDefaults synchronize]; - - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationNeededsUpdate object:nil]; - } - }); - }@catch (NSException* e) { - dispatch_async(dispatch_get_main_queue(), ^{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Could not update the profile: %@",[e description]); -#endif - }); - } - }); - } -} - -- (void) dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} -@end \ No newline at end of file diff --git a/Photo/ImageManipulation.h b/Photo/ImageManipulation.h deleted file mode 100644 index c913007..0000000 --- a/Photo/ImageManipulation.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// ImageManipulation.h -// Trovebox -// -// Created by Patrick Santana on 08/08/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - -@interface ImageManipulation : NSObject - -+ (UIImage*) imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize; - -@end diff --git a/Photo/ImageManipulation.m b/Photo/ImageManipulation.m deleted file mode 100644 index f7d3244..0000000 --- a/Photo/ImageManipulation.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// ImageManipulation.m -// Trovebox -// -// Created by Patrick Santana on 08/08/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "ImageManipulation.h" - -@implementation ImageManipulation - -+ (UIImage*)imageWithImage:(UIImage*)image - scaledToSize:(CGSize)newSize{ - - UIGraphicsBeginImageContext( newSize ); - [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; - UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - return newImage; -} -@end diff --git a/Photo/InitializerService.h b/Photo/InitializerService.h deleted file mode 100644 index 8730465..0000000 --- a/Photo/InitializerService.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// InitializerService.h -// Trovebox -// -// Created by Patrick Santana on 04/09/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -// this class helps with initializer routines -@interface InitializerService : NSObject - -- (BOOL) isInitialized; -- (void) initialize; -- (void) resetInitialization; - -@end diff --git a/Photo/InitializerService.m b/Photo/InitializerService.m deleted file mode 100644 index 02f1d05..0000000 --- a/Photo/InitializerService.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// InitializerHelper.m -// Trovebox -// -// Created by Patrick Santana on 04/09/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "InitializerService.h" - -@implementation InitializerService - -- (BOOL) isInitialized -{ - // compare not just nil. It may be reset. So, we need to check for NO - if (![[NSUserDefaults standardUserDefaults] boolForKey:kAppInitialized] || - [[NSUserDefaults standardUserDefaults] boolForKey:kAppInitialized] == NO){ - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Property not defined"); -#endif - - return NO; - } - - return YES; -} - -- (void) initialize -{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Initialization starting ...."); -#endif - - // get the user defaults - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - /* - * set the initial configuration for the user properties - */ - if (standardUserDefaults) { - // Privacy - [standardUserDefaults setBool:YES forKey:kPhotosArePrivate]; - - - // set that the initialization is okay. - [standardUserDefaults setBool:YES forKey:kAppInitialized]; - - // for authentication - [standardUserDefaults setValue:@"INVALID" forKey:kAuthenticationValid]; - - // clean images saved localy - [standardUserDefaults setValue:nil forKey:kHomeScreenPicturesTimestamp]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPictures]; - - // show photos uploades - [standardUserDefaults setBool:YES forKey:kSyncShowUploadedPhotos]; - - // for auto-sync - [standardUserDefaults setBool:NO forKey:kAutoSyncEnabled]; - [standardUserDefaults setBool:NO forKey:kAutoSyncMessageDisplayed]; - - // synchronize the keys - [standardUserDefaults synchronize]; - } - - // set the variable to initialized -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Initialization finished ...."); -#endif -} - -- (void) resetInitialization -{ - // set the variable initialized to NO - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - [standardUserDefaults setBool:NO forKey:kAppInitialized]; - - // clean images saved localy - [standardUserDefaults setValue:nil forKey:kHomeScreenPicturesTimestamp]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPictures]; - // for auto-sync - [standardUserDefaults setBool:NO forKey:kAutoSyncEnabled]; - [standardUserDefaults setBool:NO forKey:kAutoSyncMessageDisplayed]; - - // synchronize the keys - [standardUserDefaults synchronize]; -} -@end diff --git a/Photo/JobUploaderController.h b/Photo/JobUploaderController.h deleted file mode 100644 index 94c25be..0000000 --- a/Photo/JobUploaderController.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// JobUploaderController.h -// Trovebox -// -// Created by Patrick Santana on 03/07/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "JobUploaderDelegate.h" -#import "WebService.h" -#import "NSDictionarySerializer.h" -#import "Timeline+Methods.h" -#import "Synced+Methods.h" -#import -#import "AssetsLibraryUtilities.h" -#import - - -@interface JobUploaderController : NSObject - -// get the instance -+ (JobUploaderController*) getController; - -// methods -- (void) start; -- (void) stop; -- (BOOL) isRunning; - -@end diff --git a/Photo/JobUploaderController.m b/Photo/JobUploaderController.m deleted file mode 100644 index 78a74b7..0000000 --- a/Photo/JobUploaderController.m +++ /dev/null @@ -1,384 +0,0 @@ -// -// JobUploaderController.m -// Trovebox -// -// Created by Patrick Santana on 03/07/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "JobUploaderController.h" -#import "PhotoUploader.h" - -@interface JobUploaderController (){ - BOOL running; - ALAssetsLibrary *library; - NSArray *imagesAlreadySynced; - PhotoUploader *uploader; -} -- (void) executeUploadJob; -- (void) executeSyncJob; -- (void) loadPhotosToDatabase:(ALAssetsGroup *) group; - -@end - -@implementation JobUploaderController - - -+ (JobUploaderController*) getController -{ - static dispatch_once_t pred; - static JobUploaderController *shared = nil; - - dispatch_once(&pred, ^{ - shared = [[JobUploaderController alloc] init]; - }); - - return shared; -} - -- (id)init -{ - self = [super init]; - if (self) { - library = [[ALAssetsLibrary alloc] init]; - uploader = [[PhotoUploader alloc]init]; - } - return self; -} - -- (void) start -{ - running = YES; - - dispatch_queue_t jobQueue = dispatch_queue_create("job_queue", NULL); - dispatch_async(jobQueue, ^{ - @try { - // start the thread - while (running) { - // sleep for 3 seconds - [NSThread sleepForTimeInterval:3]; - - // execute the method - [self executeUploadJob]; - - // execute Sync - [self executeSyncJob]; - - - } - }@catch (NSException *exception) { - NSLog(@"Error in the job %@", [exception description]); - } - }); -} - -- (void) stop -{ - // this will stop the thread - running = NO; -} - -- (BOOL) isRunning -{ - return running; -} - -- (void) executeSyncJob -{ - dispatch_async(dispatch_get_main_queue(), ^{ - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Job: sync"); -#endif - - // check if users enables sync and there is internet - if ([[NSUserDefaults standardUserDefaults] boolForKey:kAutoSyncEnabled] == YES && - [SharedAppDelegate internetActive] == YES && [SharedAppDelegate wifi] == YES){ - - int uploading = [Timeline howEntitiesTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext] type:kUploadStatusTypeUploading]; - int created = [Timeline howEntitiesTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext] type:kUploadStatusTypeCreated]; - - if (created == 0 && uploading == 0){ - // queue is EMPTY, take some pictures from the camera roll. But just - // do it in the case where there are no pictures being uploaded. -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Job: queue is empty"); -#endif - - // load images from sync already uploded - imagesAlreadySynced = [Synced getPathsInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - - // get 30 images from the Gallery that were not uploaded yet - // Group enumerator Block - void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) - { - if (group == nil) - { - return; - } - - if ( [[group valueForProperty:ALAssetsGroupPropertyType] intValue] == ALAssetsGroupSavedPhotos) { - // with the local group, we can load the images - [self performSelectorInBackground:@selector(loadPhotosToDatabase:) withObject:group]; - } - }; - - // Group Enumerator Failure Block - void (^assetGroupEnumberatorFailure)(NSError *) = ^(NSError *error) { - NSLog(@"A problem occured %@", [error description]); - }; - - // Show only the Saved Photos - [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos - usingBlock:assetGroupEnumerator - failureBlock:assetGroupEnumberatorFailure]; - } - } - }); -} - --(void)loadPhotosToDatabase:(ALAssetsGroup *) group { - // put them in the table to upload - [group setAssetsFilter:[ALAssetsFilter allPhotos]]; - __block int assetsNotUploaded = 0; - - @autoreleasepool { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"numberOfAssets %i", assetsNumber); -#endif - - [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) - { - if(result == nil) - { - return; - } - - if ( assetsNotUploaded < 30){ - - // check if user already uploaded - NSString *asset = [AssetsLibraryUtilities getAssetsUrlId:result.defaultRepresentation.url] ; - - BOOL alreadyUploaded = [imagesAlreadySynced containsObject:asset]; - if (!alreadyUploaded){ - assetsNotUploaded++; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Photo not uploaded, adding %d", assetsNotUploaded); -#endif - NSURL *url = [[result valueForProperty:ALAssetPropertyURLs] valueForKey:[[[result valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]]; - [uploader loadDataAndSaveEntityUploadDate:[NSDate date] - shareFacebook:[NSNumber numberWithBool:NO] - shareTwitter:[NSNumber numberWithBool:NO] - permission:[NSNumber numberWithBool:NO] - tags:@"" - albums:@"" - title:@"" - url:url - groupUrl:nil]; - } - }else{ - // stop the enumeration - *stop = YES; - // send to database - } - }]; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"done enumerating photos"); -#endif - - } -} - - - -- (void) executeUploadJob -{ - dispatch_async(dispatch_get_main_queue(), ^{ - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Job: uploader"); -#endif - - int i = [Timeline howEntitiesTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext] type:kUploadStatusTypeUploading]; - int created = [Timeline howEntitiesTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext] type:kUploadStatusTypeCreated]; - - // disable or enable the lock screen - if (created > 0){ - // disable lock screen - [UIApplication sharedApplication].idleTimerDisabled = YES; - }else{ - // enable lock screen - [UIApplication sharedApplication].idleTimerDisabled = NO; - } - - if (i < 2 && created > 0){ - - // looks for uploads in the state WAITING - NSArray *waitings = [Timeline getNextWaitingToUploadInManagedObjectContext:[SharedAppDelegate managedObjectContext] qtd:2-i]; - - // loop in the list and start to upload - for (Timeline *photo in waitings){ - photo.status = kUploadStatusTypeUploading; - - // create a delegate - JobUploaderDelegate *delegate = [[JobUploaderDelegate alloc] initWithPhoto:photo size:[NSNumber numberWithInteger:0]]; - - NSDictionary *dictionary = nil; - @try { - dictionary = [photo toDictionary]; - } - @catch (NSException *e) { - photo.status = kUploadStatusTypeFailed; - break; - } - - // send - NSURL *storedURL = [NSURL URLWithString:photo.photoDataTempUrl]; - NSData *data = [[NSData alloc] initWithContentsOfURL:storedURL]; - - dispatch_queue_t uploaderQueue = dispatch_queue_create("job_uploader", NULL); - dispatch_async(uploaderQueue, ^{ - - @try{ - // prepare the data to upload - NSString *filename = photo.fileName; - - // set size - delegate.totalSize = [NSNumber numberWithInteger:data.length]; - - // create the service, check photo exists and send the request - WebService *service = [[WebService alloc] init]; - - // before check if the photo already exist - if ([service isPhotoAlreadyOnServer:[SHA1 sha1File:data]]){ - @throw [NSException exceptionWithName:@"Failed to upload" reason:@"409" userInfo: nil]; - }else{ - NSDictionary *response = [service uploadPicture:data metadata:dictionary fileName:filename delegate:delegate]; -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Photo uploaded correctly"); -#endif - - dispatch_async(dispatch_get_main_queue(), ^{ - // save the url - if (photo.syncedUrl){ - // add to the sync list, with that we don't need to show photos already uploaded. - // in the case of edited images via Aviary, we don't save it. - Synced *sync = [NSEntityDescription insertNewObjectForEntityForName:@"Synced" - inManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - sync.filePath = photo.syncedUrl; - sync.status = kSyncedStatusTypeUploaded; - - // used to say which user uploaded this image - sync.userUrl = [SharedAppDelegate userHost]; - } - - photo.status = kUploadStatusTypeUploadFinished; - photo.photoUploadResponse = [NSDictionarySerializer nsDictionaryToNSData:[response objectForKey:@"result"]]; - - // delete local file - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error; - BOOL fileExists = [fileManager fileExistsAtPath:photo.photoDataTempUrl]; -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Path to file: %@", photo.photoDataTempUrl); - NSLog(@"File exists: %d", fileExists); - NSLog(@"Is deletable file at path: %d", [fileManager isDeletableFileAtPath:photo.photoDataTempUrl]); -#endif - if (fileExists) - { - BOOL success = [fileManager removeItemAtPath:photo.photoDataTempUrl error:&error]; - if (!success) NSLog(@"Error: %@", [error localizedDescription]); - } - - // check if there is more files to upload - // if not, refresh the Home page - if ( [Timeline howEntitiesTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext] type:kUploadStatusTypeUploading] == 0 && - [Timeline howEntitiesTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext] type:kUploadStatusTypeCreated] == 0){ - - // set that needs update - Home - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationNeededsUpdateHome object:nil]; - // refresh profile details - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationProfileRefresh object:nil userInfo:nil]; - - // also lets save the Managed Context - NSError *saveError = nil; - if (![[SharedAppDelegate managedObjectContext] save:&saveError]){ - NSLog(@"Error to save context = %@",[saveError localizedDescription]); - } - } - }); - } - }@catch (NSException* e) { - NSLog(@"Error to upload image:%@", [e description]); - - // if it fails for any reason, set status FAILED in the main thread - dispatch_async(dispatch_get_main_queue(), ^{ - // check if it is duplicated - if ([[e description] hasPrefix:@"Error: 409 - This photo already exists based on a"] || - [[e description] hasPrefix:@"409"]){ - - // this photo is already uploaded - if (photo.syncedUrl){ - // add to the sync list, with that we don't need to show photos already uploaded. - // in the case of edited images via Aviary, we don't save it. - Synced *sync = [NSEntityDescription insertNewObjectForEntityForName:@"Synced" - inManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - sync.filePath = photo.syncedUrl; - sync.status = kSyncedStatusTypeUploaded; - - // used to say which user uploaded this image - sync.userUrl = [SharedAppDelegate userHost]; - } - photo.status = kUploadStatusTypeDuplicated; - }else if ([[e description] hasPrefix:@"402"]){ - photo.status = kUploadStatusTypeLimitReached; - photo.photoUploadProgress = 0; - }else { - photo.status = kUploadStatusTypeFailed; - photo.photoUploadProgress = 0; - } - - if ( [Timeline howEntitiesTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext] type:kUploadStatusTypeUploading] == 0 && - [Timeline howEntitiesTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext] type:kUploadStatusTypeCreated] == 0){ - - // set that needs update - Home - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationNeededsUpdateHome object:nil]; - } - }); - }@finally{ - // delete local file - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSError *error; - BOOL fileExists = [fileManager fileExistsAtPath:photo.photoDataTempUrl]; -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Path to file: %@", photo.photoDataTempUrl); - NSLog(@"File exists: %d", fileExists); - NSLog(@"Is deletable file at path: %d", [fileManager isDeletableFileAtPath:photo.photoDataTempUrl]); -#endif - if (fileExists) - { - BOOL success = [fileManager removeItemAtPath:photo.photoDataTempUrl error:&error]; - if (!success) NSLog(@"Error: %@", [error localizedDescription]); - } - - } - }); - } - } - }); -} -@end \ No newline at end of file diff --git a/Photo/JobUploaderDelegate.h b/Photo/JobUploaderDelegate.h deleted file mode 100644 index 362735d..0000000 --- a/Photo/JobUploaderDelegate.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// JobUploaderDelegate.h -// Trovebox -// -// Created by Patrick Santana on 05/07/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "ASIProgressDelegate.h" -#import "Timeline+Methods.h" - -@interface JobUploaderDelegate : NSObject - -// you can set by hand the totalSize. -// we just have the file in the thread not in the main -@property (nonatomic, strong) NSNumber *totalSize; - -- (id) initWithPhoto:(Timeline *) photo size:(NSNumber *) bytes; - -@end diff --git a/Photo/JobUploaderDelegate.m b/Photo/JobUploaderDelegate.m deleted file mode 100644 index 6fcbb66..0000000 --- a/Photo/JobUploaderDelegate.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// JobUploaderDelegate.m -// Trovebox -// -// Created by Patrick Santana on 05/07/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "JobUploaderDelegate.h" - -@interface JobUploaderDelegate() - -@property (nonatomic, strong) NSNumber *alreadySent; -@property (nonatomic, strong) Timeline* photoDelegate; - -@end - - -@implementation JobUploaderDelegate -@synthesize totalSize=_totalSize, alreadySent=_alreadySent, photoDelegate = _photoDelegate; - -- (id) initWithPhoto:(Timeline *) photo size:(NSNumber *) bytes -{ - self = [super init]; - if (self) { - self.photoDelegate = photo; - self.totalSize = bytes; - self.alreadySent = [NSNumber numberWithInt:0]; - } - return self; -} - -- (void)request:(ASIHTTPRequest *)request didSendBytes:(long long)bytes -{ - self.alreadySent = [NSNumber numberWithUnsignedLongLong:[self.alreadySent longLongValue] + bytes ]; - - dispatch_async(dispatch_get_main_queue(), ^{ - self.photoDelegate.photoUploadProgress =[ NSNumber numberWithFloat:[self.alreadySent floatValue]/[self.totalSize floatValue]]; - }); -} - -@end diff --git a/Photo/KeychainItemWrapper.h b/Photo/KeychainItemWrapper.h deleted file mode 100755 index 9c8b6b4..0000000 --- a/Photo/KeychainItemWrapper.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - File: KeychainItemWrapper.h - Abstract: - Objective-C wrapper for accessing a single keychain item. - - Version: 1.2 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2010 Apple Inc. All Rights Reserved. - -*/ - -#import - -/* - The KeychainItemWrapper class is an abstraction layer for the iPhone Keychain communication. It is merely a - simple wrapper to provide a distinct barrier between all the idiosyncracies involved with the Keychain - CF/NS container objects. -*/ -@interface KeychainItemWrapper : NSObject -{ - NSMutableDictionary *keychainItemData; // The actual keychain item data backing store. - NSMutableDictionary *genericPasswordQuery; // A placeholder for the generic keychain item query used to locate the item. -} - -@property (nonatomic, retain) NSMutableDictionary *keychainItemData; -@property (nonatomic, retain) NSMutableDictionary *genericPasswordQuery; - - -// Methos for speed up get oauth and consumer credentials -- (id)initWithTroveboxOAuth; -- (id)initWithTroveboxConsumer; - -// Designated initializer. -- (id) initWithIdentifier: (NSString *)identifier accessGroup:(NSString *) accessGroup; -- (void) setObject:(id)inObject forKey:(id)key; -- (id) objectForKey:(id)key; - -// Initializes and resets the default generic keychain item data. -- (void) resetKeychainItem; - -@end \ No newline at end of file diff --git a/Photo/KeychainItemWrapper.m b/Photo/KeychainItemWrapper.m deleted file mode 100755 index 884c543..0000000 --- a/Photo/KeychainItemWrapper.m +++ /dev/null @@ -1,324 +0,0 @@ -/* - File: KeychainItemWrapper.m - Abstract: - Objective-C wrapper for accessing a single keychain item. - - Version: 1.2 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2010 Apple Inc. All Rights Reserved. - - */ - -#import "KeychainItemWrapper.h" -#import - -/* - - These are the default constants and their respective types, - available for the kSecClassGenericPassword Keychain Item class: - - kSecAttrAccessGroup - CFStringRef - kSecAttrCreationDate - CFDateRef - kSecAttrModificationDate - CFDateRef - kSecAttrDescription - CFStringRef - kSecAttrComment - CFStringRef - kSecAttrCreator - CFNumberRef - kSecAttrType - CFNumberRef - kSecAttrLabel - CFStringRef - kSecAttrIsInvisible - CFBooleanRef - kSecAttrIsNegative - CFBooleanRef - kSecAttrAccount - CFStringRef - kSecAttrService - CFStringRef - kSecAttrGeneric - CFDataRef - - See the header file Security/SecItem.h for more details. - - */ - -@interface KeychainItemWrapper (PrivateMethods) -/* - The decision behind the following two methods (secItemFormatToDictionary and dictionaryToSecItemFormat) was - to encapsulate the transition between what the detail view controller was expecting (NSString *) and what the - Keychain API expects as a validly constructed container class. - */ -- (NSMutableDictionary *)secItemFormatToDictionary:(NSDictionary *)dictionaryToConvert; -- (NSMutableDictionary *)dictionaryToSecItemFormat:(NSDictionary *)dictionaryToConvert; - -// Updates the item in the keychain, or adds it if it doesn't exist. -- (void)writeToKeychain; - -@end - -@implementation KeychainItemWrapper - -@synthesize keychainItemData, genericPasswordQuery; - - -- (id)initWithTroveboxOAuth -{ - return [self initWithIdentifier:@"TroveboxLoginOAuth" accessGroup:nil]; -} - -- (id)initWithTroveboxConsumer -{ - return [self initWithIdentifier:@"TroveboxLoginConsumer" accessGroup:nil]; -} - -- (id)initWithIdentifier: (NSString *)identifier accessGroup:(NSString *) accessGroup; -{ - if (self = [super init]) - { - // Begin Keychain search setup. The genericPasswordQuery leverages the special user - // defined attribute kSecAttrGeneric to distinguish itself between other generic Keychain - // items which may be included by the same application. - genericPasswordQuery = [[NSMutableDictionary alloc] init]; - - [genericPasswordQuery setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass]; - [genericPasswordQuery setObject:identifier forKey:(id)kSecAttrGeneric]; - - // The keychain access group attribute determines if this item can be shared - // amongst multiple apps whose code signing entitlements contain the same keychain access group. - if (accessGroup != nil) - { -#if TARGET_IPHONE_SIMULATOR - // Ignore the access group if running on the iPhone simulator. - // - // Apps that are built for the simulator aren't signed, so there's no keychain access group - // for the simulator to check. This means that all apps can see all keychain items when run - // on the simulator. - // - // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the - // simulator will return -25243 (errSecNoAccessForItem). -#else - [genericPasswordQuery setObject:accessGroup forKey:(id)kSecAttrAccessGroup]; -#endif - } - - // Use the proper search constants, return only the attributes of the first match. - [genericPasswordQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; - [genericPasswordQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnAttributes]; - - NSDictionary *tempQuery = [NSDictionary dictionaryWithDictionary:genericPasswordQuery]; - - NSMutableDictionary *outDictionary = nil; - - if (! SecItemCopyMatching((CFDictionaryRef)tempQuery, (CFTypeRef *)&outDictionary) == noErr) - { - // Stick these default values into keychain item if nothing found. - [self resetKeychainItem]; - - // Add the generic attribute and the keychain access group. - [keychainItemData setObject:identifier forKey:(id)kSecAttrGeneric]; - if (accessGroup != nil) - { -#if TARGET_IPHONE_SIMULATOR - // Ignore the access group if running on the iPhone simulator. - // - // Apps that are built for the simulator aren't signed, so there's no keychain access group - // for the simulator to check. This means that all apps can see all keychain items when run - // on the simulator. - // - // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the - // simulator will return -25243 (errSecNoAccessForItem). -#else - [keychainItemData setObject:accessGroup forKey:(id)kSecAttrAccessGroup]; -#endif - } - } - else - { - // load the saved data from Keychain. - self.keychainItemData = [self secItemFormatToDictionary:outDictionary]; - } - - [outDictionary release]; - } - - return self; -} - -- (void)dealloc -{ - [keychainItemData release]; - [genericPasswordQuery release]; - - [super dealloc]; -} - -- (void)setObject:(id)inObject forKey:(id)key -{ - if (inObject == nil) return; - id currentObject = [keychainItemData objectForKey:key]; - if (![currentObject isEqual:inObject]) - { - [keychainItemData setObject:inObject forKey:key]; - [self writeToKeychain]; - } -} - -- (id)objectForKey:(id)key -{ - return [keychainItemData objectForKey:key]; -} - -- (void)resetKeychainItem -{ - OSStatus junk = noErr; - if (!keychainItemData) - { - self.keychainItemData = [[NSMutableDictionary alloc] init]; - } - else if (keychainItemData) - { - NSMutableDictionary *tempDictionary = [self dictionaryToSecItemFormat:keychainItemData]; - junk = SecItemDelete((CFDictionaryRef)tempDictionary); - NSAssert( junk == noErr || junk == errSecItemNotFound, @"Problem deleting current dictionary." ); - } - - // Default attributes for keychain item. - [keychainItemData setObject:@"" forKey:(id)kSecAttrAccount]; - [keychainItemData setObject:@"" forKey:(id)kSecAttrLabel]; - [keychainItemData setObject:@"" forKey:(id)kSecAttrDescription]; - - // Default data for keychain item. - [keychainItemData setObject:@"" forKey:(id)kSecValueData]; -} - -- (NSMutableDictionary *)dictionaryToSecItemFormat:(NSDictionary *)dictionaryToConvert -{ - // The assumption is that this method will be called with a properly populated dictionary - // containing all the right key/value pairs for a SecItem. - - // Create a dictionary to return populated with the attributes and data. - NSMutableDictionary *returnDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionaryToConvert]; - - // Add the Generic Password keychain item class attribute. - [returnDictionary setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass]; - - // Convert the NSString to NSData to meet the requirements for the value type kSecValueData. - // This is where to store sensitive data that should be encrypted. - NSString *passwordString = [dictionaryToConvert objectForKey:(id)kSecValueData]; - [returnDictionary setObject:[passwordString dataUsingEncoding:NSUTF8StringEncoding] forKey:(id)kSecValueData]; - - return returnDictionary; -} - -- (NSMutableDictionary *)secItemFormatToDictionary:(NSDictionary *)dictionaryToConvert -{ - // The assumption is that this method will be called with a properly populated dictionary - // containing all the right key/value pairs for the UI element. - - // Create a dictionary to return populated with the attributes and data. - NSMutableDictionary *returnDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionaryToConvert]; - - // Add the proper search key and class attribute. - [returnDictionary setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; - [returnDictionary setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass]; - - // Acquire the password data from the attributes. - NSData *passwordData = NULL; - if (SecItemCopyMatching((CFDictionaryRef)returnDictionary, (CFTypeRef *)&passwordData) == noErr) - { - // Remove the search, class, and identifier key/value, we don't need them anymore. - [returnDictionary removeObjectForKey:(id)kSecReturnData]; - - // Add the password to the dictionary, converting from NSData to NSString. - NSString *password = [[[NSString alloc] initWithBytes:[passwordData bytes] length:[passwordData length] - encoding:NSUTF8StringEncoding] autorelease]; - [returnDictionary setObject:password forKey:(id)kSecValueData]; - } - else - { - // Don't do anything if nothing is found. - NSAssert(NO, @"Serious error, no matching item found in the keychain.\n"); - } - - [passwordData release]; - - return returnDictionary; -} - -- (void)writeToKeychain -{ - NSDictionary *attributes = NULL; - NSMutableDictionary *updateItem = NULL; - OSStatus result; - - if (SecItemCopyMatching((CFDictionaryRef)genericPasswordQuery, (CFTypeRef *)&attributes) == noErr) - { - // First we need the attributes from the Keychain. - updateItem = [NSMutableDictionary dictionaryWithDictionary:attributes]; - // Second we need to add the appropriate search key/values. - [updateItem setObject:[genericPasswordQuery objectForKey:(id)kSecClass] forKey:(id)kSecClass]; - - // Lastly, we need to set up the updated attribute list being careful to remove the class. - NSMutableDictionary *tempCheck = [self dictionaryToSecItemFormat:keychainItemData]; - [tempCheck removeObjectForKey:(id)kSecClass]; - -#if TARGET_IPHONE_SIMULATOR - // Remove the access group if running on the iPhone simulator. - // - // Apps that are built for the simulator aren't signed, so there's no keychain access group - // for the simulator to check. This means that all apps can see all keychain items when run - // on the simulator. - // - // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the - // simulator will return -25243 (errSecNoAccessForItem). - // - // The access group attribute will be included in items returned by SecItemCopyMatching, - // which is why we need to remove it before updating the item. - [tempCheck removeObjectForKey:(id)kSecAttrAccessGroup]; -#endif - - // An implicit assumption is that you can only update a single item at a time. - - result = SecItemUpdate((CFDictionaryRef)updateItem, (CFDictionaryRef)tempCheck); - NSAssert( result == noErr, @"Couldn't update the Keychain Item." ); - } - else - { - // No previous item found; add the new one. - result = SecItemAdd((CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL); - NSAssert( result == noErr, @"Couldn't add the Keychain Item." ); - } -} - -@end diff --git a/Photo/LoginConnectViewController.h b/Photo/LoginConnectViewController.h deleted file mode 100644 index a7bad8d..0000000 --- a/Photo/LoginConnectViewController.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// LoginConnectViewController.h -// Trovebox -// -// Created by Patrick Santana on 02/05/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AuthenticationService.h" -#import "Account.h" -#import "MBProgressHUD.h" -#import "MultiSiteSelectionViewController.h" - -@interface LoginConnectViewController : GAITrackedViewController - -@property (retain, nonatomic) IBOutlet UITextField *email; -@property (retain, nonatomic) IBOutlet UITextField *password; -@property (weak, nonatomic) IBOutlet UIImageView *backgroundEmail; -@property (weak, nonatomic) IBOutlet UIImageView *backgroundPassword; - -// actions -- (IBAction)login:(id)sender; -- (IBAction)recoverPassword:(id)sender; -- (IBAction)haveYourOwnInstance:(id)sender; -@end diff --git a/Photo/LoginConnectViewController.m b/Photo/LoginConnectViewController.m deleted file mode 100644 index 5daaa78..0000000 --- a/Photo/LoginConnectViewController.m +++ /dev/null @@ -1,278 +0,0 @@ -// -// LoginConnectViewController.m -// Trovebox -// -// Created by Patrick Santana on 02/05/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "LoginConnectViewController.h" - -@interface LoginConnectViewController () - -@property (nonatomic) BOOL isViewUp; - -@end - -@implementation LoginConnectViewController -@synthesize email; -@synthesize password; -@synthesize isViewUp = _isViewUp; - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - self.title=@"Login"; - self.isViewUp = NO; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - // Do any additional setup after loading the view from its nib. - [self.navigationController setNavigationBarHidden:NO animated:YES]; - self.screenName = @"Login Screen"; -} - -- (void)viewDidUnload -{ - [self setEmail:nil]; - [self setPassword:nil]; - [self setBackgroundEmail:nil]; - [self setBackgroundPassword:nil]; - [super viewDidUnload]; - - [self.navigationController setNavigationBarHidden:NO animated:YES]; -} - -- (void) viewWillAppear:(BOOL)animated -{ - // if ipad, lets centralize fields - if([DisplayUtilities isIPad]){ - self.email.center=self.backgroundEmail.center; - self.password.center=self.backgroundPassword.center; - } -} - - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -- (void)textFieldDidBeginEditing:(UITextField *)textField -{ - // in the case of iphone 5 or ipad we don't need to move the screen - if (![DisplayUtilities isIPad] && ![DisplayUtilities is4InchRetina]){ - if (self.isViewUp == NO){ - [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationCurveEaseOut animations:^{ - [self.view setCenter:CGPointMake([self.view center].x, [self.view center].y - 30)]; - }completion:^(BOOL finished){ - self.isViewUp = YES; - }]; - }} -} - - -// Action if user clicks in DONE in the keyboard -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - if (textField == self.email){ - [self.password becomeFirstResponder]; - return NO; - }else{ - [textField resignFirstResponder]; - [self login:nil]; - return YES; - } -} -- (IBAction)login:(id)sender { - // put view down - // in the case of iphone 5 or ipad we don't need to move the screen - if (![DisplayUtilities isIPad] && ![DisplayUtilities is4InchRetina]){ - if (self.isViewUp == YES){ - [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationCurveEaseOut animations:^{ - [self.view setCenter:CGPointMake([self.view center].x, [self.view center].y + 30)]; - }completion:^(BOOL finished){ - self.isViewUp = NO; - }]; - }} - - // no keyboard - [self.email resignFirstResponder]; - [self.password resignFirstResponder]; - - // - // check if email and password is set - // - if (self.email.text == nil || [[self.email.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length ] == 0){ - //show message - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please, set your email.",@"")]; - [alert showAlert]; - return; - - } - if (self.password.text == nil || [[self.password.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length ] == 0){ - //show message - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please, set your password.",@"")]; - [alert showAlert]; - return; - } - - if ( [SharedAppDelegate internetActive] == NO ){ - // problem with internet, show message to user - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please check your internet connection",@"")]; - [alert showAlert]; - }else{ - - // display - MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; - hud.labelText = NSLocalizedString(@"Logging",@""); - - - // do it in a queue - NSString *postEmail =self.email.text; - NSString *postPassword = self.password.text; - dispatch_queue_t loggin_account = dispatch_queue_create("logging_account", NULL); - dispatch_async(loggin_account, ^{ - - @try{ - // gcd to sign in - NSArray *accounts = [AuthenticationService signIn:postEmail password:postPassword]; - - // if there is just one account in the response - // save it and move on. - // if there is more than one account, user needs to select one of them - - - dispatch_async(dispatch_get_main_queue(), ^{ - if ([accounts count] == 0){ - // there is a problem. Users needs to contact support - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Unable to determine which site connect.",@"")]; - [alert showAlert]; - }else if ([accounts count] == 1){ - // save the details of account and remove the progress - - Account *account =[accounts objectAtIndex:0]; - [account saveToStandardUserDefaults]; - - // send notification to the system that it can shows the screen: - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationLoginAuthorize object:nil ]; - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationNeededsUpdate object:nil]; - - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - }else{ - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - - // display the MultiSelectionViewController - MultiSiteSelectionViewController *controller = [[MultiSiteSelectionViewController alloc] initWithAccounts:accounts]; - self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; - [self.navigationController pushViewController:controller animated:YES]; - } - }); - }@catch (NSException* e) { - dispatch_async(dispatch_get_main_queue(), ^{ - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:[e description]]; - [alert showAlert]; - }); - - } - }); - } -} - -- (IBAction)recoverPassword:(id)sender { - - // put view down - // in the case of iphone 5 or ipad we don't need to move the screen - if (![DisplayUtilities isIPad] && ![DisplayUtilities is4InchRetina]){ - if (self.isViewUp == YES){ - [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationCurveEaseOut animations:^{ - [self.view setCenter:CGPointMake([self.view center].x, [self.view center].y + 42)]; - }completion:^(BOOL finished){ - self.isViewUp = NO; - }]; - }} - - // no keyboard - [self.email resignFirstResponder]; - [self.password resignFirstResponder]; - - if (self.email.text == nil || [[self.email.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length ] == 0){ - //show message - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please, set your email to recovery password.",@"")]; - [alert showAlert]; - return; - - } - - if ( [SharedAppDelegate internetActive] == NO ){ - // problem with internet, show message to user - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please check your internet connection",@"")]; - [alert showAlert]; - }else{ - - // display - MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; - hud.labelText = NSLocalizedString(@"Resetting",@"Action to reset the pwd"); - - - // do it in a queue - NSString *postEmail =self.email.text; - dispatch_queue_t reset_user_pwd = dispatch_queue_create("reset_user_pwd", NULL); - dispatch_async(reset_user_pwd, ^{ - - @try{ - // gcd to reset - NSString *messageStatusRecover = [AuthenticationService recoverPassword:postEmail]; - - // show the message to the user - dispatch_async(dispatch_get_main_queue(), ^{ - - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - - // show message to the user - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:messageStatusRecover]; - [alert showAlert]; - }); - }@catch (NSException* e) { - dispatch_async(dispatch_get_main_queue(), ^{ - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:[e description]]; - [alert showAlert]; - }); - } - }); - } -} - -- (IBAction)haveYourOwnInstance:(id)sender { - AuthenticationViewController *controller = [[AuthenticationViewController alloc]initWithNibName:[DisplayUtilities getCorrectNibName:@"AuthenticationViewController"] bundle:nil]; - [self.navigationController pushViewController:controller animated:YES]; -} -@end diff --git a/Photo/LoginConnectViewController.xib b/Photo/LoginConnectViewController.xib deleted file mode 100644 index dfa694e..0000000 --- a/Photo/LoginConnectViewController.xib +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/LoginConnectViewController5.xib b/Photo/LoginConnectViewController5.xib deleted file mode 100644 index dd7ce46..0000000 --- a/Photo/LoginConnectViewController5.xib +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/LoginViewController.h b/Photo/LoginViewController.h deleted file mode 100644 index d5e150a..0000000 --- a/Photo/LoginViewController.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// LoginViewController.h -// Trovebox -// -// Created by Patrick Santana on 02/05/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "LoginConnectViewController.h" -#import "AuthenticationService.h" -#import "Account.h" -#import "MBProgressHUD.h" - -@interface LoginViewController : GAITrackedViewController - -- (IBAction)signInWithEmail:(id)sender; -- (IBAction)openTroveboxWebsite:(id)sender; - -@end diff --git a/Photo/LoginViewController.m b/Photo/LoginViewController.m deleted file mode 100644 index 48e3216..0000000 --- a/Photo/LoginViewController.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// LoginViewController.m -// Trovebox -// -// Created by Patrick Santana on 02/05/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "LoginViewController.h" - -@interface LoginViewController () - -@end - -@implementation LoginViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - - //register to listen for to remove the login screen. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(eventHandler:) - name:kNotificationLoginAuthorize - object:nil ]; - - } - return self; -} - --(void) viewDidLoad{ - [super viewDidLoad]; - [self.navigationController setNavigationBarHidden:YES animated:YES]; - self.screenName = @"Login Screen"; - - [self setNeedsStatusBarAppearanceUpdate]; -} - --(UIStatusBarStyle)preferredStatusBarStyle{ - return UIStatusBarStyleLightContent; -} - --(void) viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - [self.navigationController setNavigationBarHidden:YES animated:YES]; - - -} - -#pragma mark - Rotation - -- (BOOL) shouldAutorotate -{ - return NO; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -- (IBAction)signInWithEmail:(id)sender { - LoginConnectViewController *controller = [[LoginConnectViewController alloc] initWithNibName:[DisplayUtilities getCorrectNibName:@"LoginConnectViewController"] bundle:nil]; - self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; - [self.navigationController pushViewController:controller animated:YES]; -} - -- (IBAction)openTroveboxWebsite:(id)sender { - [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://www.trovebox.com"]]; -} - -//event handler when event occurs --(void)eventHandler: (NSNotification *) notification -{ - if ([notification.name isEqualToString:kNotificationLoginAuthorize]){ - // we don't need the screen anymore - [self dismissViewControllerAnimated:YES completion:nil]; - } -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end diff --git a/Photo/LoginViewController.xib b/Photo/LoginViewController.xib deleted file mode 100644 index a8fe8ac..0000000 --- a/Photo/LoginViewController.xib +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/LoginViewController5.xib b/Photo/LoginViewController5.xib deleted file mode 100644 index 62c4966..0000000 --- a/Photo/LoginViewController5.xib +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/LoginViewControlleriPad.xib b/Photo/LoginViewControlleriPad.xib deleted file mode 100644 index 3c33167..0000000 --- a/Photo/LoginViewControlleriPad.xib +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/MenuTableViewCell.h b/Photo/MenuTableViewCell.h deleted file mode 100644 index 346a13e..0000000 --- a/Photo/MenuTableViewCell.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MenuTableViewCell.h -// Trovebox -// -// Created by Patrick Santana on 07/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface MenuTableViewCell : UITableViewCell - - -// image -@property (strong, nonatomic) NSString *imageDefault; -// image when selected -@property (strong, nonatomic) NSString *imageSelected; - - -@property (weak, nonatomic) IBOutlet UIImageView *image; -@property (weak, nonatomic) IBOutlet UILabel *label; -@property (weak, nonatomic) IBOutlet UIImageView *imageLine; - -@end diff --git a/Photo/MenuTableViewCell.m b/Photo/MenuTableViewCell.m deleted file mode 100644 index 659c81e..0000000 --- a/Photo/MenuTableViewCell.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// MenuTableViewCell.m -// Trovebox -// -// Created by Patrick Santana on 07/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "MenuTableViewCell.h" - -@implementation MenuTableViewCell -@synthesize label=_label,imageDefault=_imageDefault,imageSelected=_imageSelected,imageLine=_imageLine; - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - } - return self; -} - - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - if (selected){ - self.label.textColor = UIColorFromRGB(0xFECD31); - // change the image to selected one - [self.image setImage:[UIImage imageNamed:self.imageSelected]]; - // change the narrow in the left - self.imageLine.hidden = FALSE; - }else{ - self.label.textColor = [UIColor whiteColor]; - // change the image to the default - [self.image setImage:[UIImage imageNamed:self.imageDefault]]; - - // change the narrow in the left - self.imageLine.hidden = TRUE; - } -} - -@end diff --git a/Photo/MenuTableViewCell.xib b/Photo/MenuTableViewCell.xib deleted file mode 100644 index f74adc1..0000000 --- a/Photo/MenuTableViewCell.xib +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/MenuTableViewSearchCell.h b/Photo/MenuTableViewSearchCell.h deleted file mode 100644 index 3f52722..0000000 --- a/Photo/MenuTableViewSearchCell.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MenuTableViewSearchCell.h -// Trovebox -// -// Created by Patrick Santana on 07/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface MenuTableViewSearchCell : UITableViewCell - -@property (weak, nonatomic) IBOutlet UITextField *labelSearch; -@property (strong, nonatomic) IBOutlet UILabel *labelTroveboxUser; -@end diff --git a/Photo/MenuTableViewSearchCell.m b/Photo/MenuTableViewSearchCell.m deleted file mode 100644 index 1088c1d..0000000 --- a/Photo/MenuTableViewSearchCell.m +++ /dev/null @@ -1,48 +0,0 @@ -// -// MenuTableViewSearchCell.m -// Trovebox -// -// Created by Patrick Santana on 07/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "MenuTableViewSearchCell.h" - -@implementation MenuTableViewSearchCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - } - return self; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -// Action if user clicks in DONE in the keyboard -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - // return - [textField resignFirstResponder]; - return YES; -} - -@end diff --git a/Photo/MenuTableViewSearchCell.xib b/Photo/MenuTableViewSearchCell.xib deleted file mode 100644 index 702147f..0000000 --- a/Photo/MenuTableViewSearchCell.xib +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/MenuTableViewSectionCell.h b/Photo/MenuTableViewSectionCell.h deleted file mode 100644 index 3038e7b..0000000 --- a/Photo/MenuTableViewSectionCell.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MenuTableViewSectionCell.h -// Trovebox -// -// Created by Patrick Santana on 07/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface MenuTableViewSectionCell : UITableViewCell - -@property (weak, nonatomic) IBOutlet UILabel *labelPreferences; -@end diff --git a/Photo/MenuTableViewSectionCell.m b/Photo/MenuTableViewSectionCell.m deleted file mode 100644 index 3c7e444..0000000 --- a/Photo/MenuTableViewSectionCell.m +++ /dev/null @@ -1,42 +0,0 @@ -// -// MenuTableViewSectionCell.m -// Trovebox -// -// Created by Patrick Santana on 07/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "MenuTableViewSectionCell.h" - -@implementation MenuTableViewSectionCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - self.labelPreferences.text = NSLocalizedString(@"PREFERENCES",@"Content of the menu for the PREFERENCES"); - } - return self; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/Photo/MenuTableViewSectionCell.xib b/Photo/MenuTableViewSectionCell.xib deleted file mode 100644 index e064967..0000000 --- a/Photo/MenuTableViewSectionCell.xib +++ /dev/null @@ -1,170 +0,0 @@ - - - - 1552 - 12D78 - 3084 - 1187.37 - 626.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUILabel - IBUITableViewCell - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 292 - - - - 256 - - - - 292 - {{8, 0}, {320, 37}} - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - PREFERENCES - - 3 - MQA - - - 0 - - Arial-BoldMT - Arial - 2 - 12 - - - Arial-BoldMT - 12 - 16 - - NO - - - {320, 36} - - - _NS:11 - - 3 - MCAwAA - - NO - YES - 4 - YES - IBCocoaTouchFramework - - - {320, 37} - - - _NS:9 - - 2 - MC40MTE3NjQ3NDA5IDAuMzM3MjU0OTExNyAwLjMwOTgwMzkzMjkAA - - IBCocoaTouchFramework - 0 - - menuTableViewSectionCell - - - - - - - - labelPreferences - - - - 5 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 2 - - - - - - - - 3 - - - - - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - MenuTableViewSectionCell - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 5 - - - 0 - IBCocoaTouchFramework - YES - 3 - 2083 - - diff --git a/Photo/MenuViewController.h b/Photo/MenuViewController.h deleted file mode 100644 index 94feae5..0000000 --- a/Photo/MenuViewController.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// MenuViewController.h -// Trovebox -// -// Created by Patrick Santana on 5/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "AuthenticationService.h" -#import "TagViewController.h" -#import "AlbumViewController.h" -#import "HomeTableViewController.h" -#import "SyncViewController.h" -#import "AccountViewController.h" -#import "ProfileViewController.h" -#import "GalleryViewController.h" -#import "CoreLocationController.h" - -// for settings -#import "IASKAppSettingsViewController.h" -#import "IASKSettingsStoreFile.h" - -// specific cell -#import "MenuTableViewSearchCell.h" -#import "MenuTableViewSectionCell.h" -#import "MenuTableViewCell.h" - -// photo picker -#import "DLCImagePickerController.h" - -@interface MenuViewController : UITableViewController -{ - // ask the user about location int the home screen - CoreLocationController *coreLocationController; - - ALAssetsLibrary *library; -} - -@property (nonatomic, strong) OpenPhotoIASKAppSettingsViewController *appSettingsViewController; -@property (nonatomic, strong) UINavigationController *galleryController; -@property (nonatomic, strong) UINavigationController *albumController; -@property (nonatomic, strong) UINavigationController *tagController; -@property (nonatomic, strong) UINavigationController *syncController; -@property (nonatomic, strong) UINavigationController *profileController; - - -@property (nonatomic, strong) CLLocation *location; -@property (nonatomic, strong) UIPopoverController* popoverController; - -- (void) openCamera:(id) sender; -- (void) selectLatestActivity; -- (void) displayProfileScreen; -- (void) displayHomeScreen; -@end diff --git a/Photo/MenuViewController.m b/Photo/MenuViewController.m deleted file mode 100644 index 4f0a273..0000000 --- a/Photo/MenuViewController.m +++ /dev/null @@ -1,520 +0,0 @@ -// -// MenuViewController.m -// Trovebox -// -// Created by Patrick Santana on 5/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -#import "MenuViewController.h" -#import "IIViewDeckController.h" - -@interface MenuViewController() -- (MenuTableViewCell *) getDefaultUITableViewCell:(UITableView *)tableView image:(NSString *) imagePath imageSelected:(NSString *) imageSelectedPath; -@end - -@implementation MenuViewController - -@synthesize popoverController = _popoverController2; -@synthesize location = _location; -@synthesize appSettingsViewController; - -@synthesize galleryController=_galleryController; -@synthesize albumController=_albumController; -@synthesize tagController=_tagController; -@synthesize syncController=_syncController; -@synthesize profileController=_profileController; - -- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle -{ - self = [super initWithNibName:nibName bundle:nibBundle]; - if (self){ - // needs update menu - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(eventHandler:) - name:kNotificationNeededsUpdate - object:nil ]; - - self.tableView.backgroundColor = UIColorFromRGB(0x6B5851); - // no separator - [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; - - coreLocationController = [[CoreLocationController alloc] init]; - coreLocationController.delegate = self; - - library = [[ALAssetsLibrary alloc] init]; - - } - return self; -} - -#pragma mark - View lifecycle - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.tableView.scrollsToTop = NO; - self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)]; - self.tableView.scrollEnabled = NO; -} - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - // if type = group, returns only 7: We need to remove Tags and My Profile - NSString *type = [[NSUserDefaults standardUserDefaults] objectForKey:kTroveboxTypeUser]; - if (type && [type isEqualToString:@"group"]){ - return 7; - }else{ - return 9; - } -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *menuTableViewSectionCellIdentifier = @"menuTableViewSectionCell"; - static NSString *menuTableViewSearchCellIdentifier = @"menuTableViewSearchCell"; - - BOOL groupUser = NO; - NSString *type = [[NSUserDefaults standardUserDefaults] objectForKey:kTroveboxTypeUser]; - if (type && [type isEqualToString:@"group"]){ - groupUser = YES; - } - - NSUInteger row = [indexPath row]; - if ( row == 0){ - // the first one is the search - // load the search cell - MenuTableViewSearchCell *cell = [tableView dequeueReusableCellWithIdentifier:menuTableViewSearchCellIdentifier]; - - if (cell == nil){ - NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MenuTableViewSearchCell" owner:nil options:nil]; - for(id currentObject in topLevelObjects) - { - if([currentObject isKindOfClass:[MenuTableViewSearchCell class]]) - { - cell = (MenuTableViewSearchCell *)currentObject; - break; - } - } - } - - cell.contentView.backgroundColor = UIColorFromRGB(0x40332D); - cell.labelSearch.delegate = cell; - - // set temporary the user's name - NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:kTroveboxNameUser]; - if (name) - cell.labelTroveboxUser.text = name; - else{ - cell.labelTroveboxUser.text = @"Trovebox User"; - } - - return cell; - }else if ( row == 1){ - // latest activity - MenuTableViewCell *cell = [self getDefaultUITableViewCell:tableView image:@"menu-latest.png" imageSelected:@"menu-latest-selected.png"]; - cell.label.text = NSLocalizedString(@"Latest Activity", @"Menu - title for Home"); - return cell; - }else if ( row == 2){ - // photos - gallery - MenuTableViewCell *cell = [self getDefaultUITableViewCell:tableView image:@"menu-gallery.png" imageSelected:@"menu-gallery-selected.png"]; - cell.label.text = NSLocalizedString(@"Gallery", @"Menu - title for Gallery"); - return cell; - }else if ( row == 3){ - // albums - MenuTableViewCell *cell = [self getDefaultUITableViewCell:tableView image:@"menu-album.png" imageSelected:@"menu-album-selected.png"]; - cell.label.text = NSLocalizedString(@"Albums", @"Menu - title for Albums"); - return cell; - }else if ( row == 4 && !groupUser){ - // tags - MenuTableViewCell *cell = [self getDefaultUITableViewCell:tableView image:@"menu-tags.png" imageSelected:@"menu-tags-selected.png"]; - cell.label.text = NSLocalizedString(@"Tags", @"Menu - title for Tags"); - return cell; - }else if ( (row == 5 && !groupUser) || (row == 4 && groupUser) ){ - // upload & sync - MenuTableViewCell *cell = [self getDefaultUITableViewCell:tableView image:@"menu-upload.png" imageSelected:@"menu-upload-selected.png"]; - cell.label.text = NSLocalizedString(@"Upload & Sync", @"Menu - title for Upload & Sync"); - return cell; - }else if ( (row == 6 && !groupUser) || (row == 5 && groupUser) ){ - // preferences - // load preference cell - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:menuTableViewSectionCellIdentifier]; - if (cell == nil) { - NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MenuTableViewSectionCell" owner:nil options:nil]; - cell = [topLevelObjects objectAtIndex:0]; - } - - cell.contentView.backgroundColor = UIColorFromRGB(0x40332D); - - return cell; - }else if ( row == 7 && !groupUser){ - // my account - MenuTableViewCell *cell = [self getDefaultUITableViewCell:tableView image:@"menu-profile.png" imageSelected:@"menu-profile-selected.png"]; - cell.label.text = NSLocalizedString(@"My Account", @"Menu - title for Account"); - return cell; - }else { - // settings - MenuTableViewCell *cell = [self getDefaultUITableViewCell:tableView image:@"menu-settings.png" imageSelected:@"menu-settings-selected.png"]; - cell.label.text = NSLocalizedString(@"Settings", @"Menu - title for Settings"); - return cell; - } - -} - -- (MenuTableViewCell *) getDefaultUITableViewCell:(UITableView *)tableView image:(NSString *) imagePath imageSelected:(NSString *) imageSelectedPath -{ - static NSString *menuTableViewCellIdentifier = @"menuTableViewCell"; - MenuTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:menuTableViewCellIdentifier]; - - if (cell == nil) { - NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MenuTableViewCell" owner:nil options:nil]; - cell = [topLevelObjects objectAtIndex:0]; - } - - cell.imageSelected = imageSelectedPath; - cell.imageDefault = imagePath; - - [cell.image setImage:[UIImage imageNamed:imagePath]]; - - return cell; -} - -#pragma mark - Table view delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - BOOL groupUser = NO; - NSString *type = [[NSUserDefaults standardUserDefaults] objectForKey:kTroveboxTypeUser]; - if (type && [type isEqualToString:@"group"]){ - groupUser = YES; - } - - - [self.viewDeckController closeLeftViewBouncing:^(IIViewDeckController *controller) { - - if ([controller.centerController isKindOfClass:[UINavigationController class]]) { - if (indexPath.row == 1){ - // Latest activity - controller.centerController = SharedAppDelegate.centerController; - }else if (indexPath.row ==2){ - // Gallery - if (self.galleryController == nil){ - self.galleryController = [[UINavigationController alloc]initWithRootViewController:[[GalleryViewController alloc] init]]; - } - controller.centerController = self.galleryController; - }else if ( indexPath.row == 3){ - // Albums - if (self.albumController == nil){ - self.albumController = [[UINavigationController alloc]initWithRootViewController:[[AlbumViewController alloc] init]]; - } - controller.centerController = self.albumController; - }else if ( indexPath.row == 4 && !groupUser){ - // Tags - if (self.tagController == nil){ - self.tagController = [[UINavigationController alloc]initWithRootViewController:[[TagViewController alloc] init]]; - } - controller.centerController = self.tagController; - }else if ( (indexPath.row == 5 && !groupUser) || (indexPath.row == 4 && groupUser) ){ - // Upload & Sync - if (self.syncController == nil){ - SyncViewController *photoPicker = [[SyncViewController alloc] initWithNibName:@"SyncViewController" bundle:nil]; - ELCImagePickerController *syncController = [[ELCImagePickerController alloc] initWithRootViewController:photoPicker] ; - [photoPicker setParent:syncController]; - [syncController setDelegate:photoPicker]; - self.syncController = syncController; - } - controller.centerController = self.syncController; - controller.centerController.navigationController.navigationBar.tintColor = [UIColor whiteColor]; - }else if ( indexPath.row == 7 && !groupUser){ - // Account - Profile - if (self.profileController == nil){ - if ([DisplayUtilities isIPad]){ - self.profileController = [[UINavigationController alloc]initWithRootViewController:[[ProfileViewController alloc] initWithNibName:@"ProfileViewControlleriPad" bundle:nil]]; - }else{ - self.profileController = [[UINavigationController alloc]initWithRootViewController:[[ProfileViewController alloc] init]]; - } - } - controller.centerController = self.profileController; - }else{ - // Settings - UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:self.appSettingsViewController]; - controller.centerController = nav; - } - } - - [NSThread sleepForTimeInterval:(300+arc4random()%700)/1000000.0]; // mimic delay... not really necessary - }]; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ - - // if type = group, returns only 7: We need to remove Tags and My Profile - BOOL groupUser = NO; - NSString *type = [[NSUserDefaults standardUserDefaults] objectForKey:kTroveboxTypeUser]; - if (type && [type isEqualToString:@"group"]){ - groupUser = YES; - } - - if ( [indexPath row] == 0){ - return 64; - }else if ( ([indexPath row] == 6) || (([indexPath row] == 5) && groupUser)){ - return 37; - }else{ - return 44; - } -} - -- (void) openLoginViewController -{ - // open the login - LoginViewController *controller = [[LoginViewController alloc]initWithNibName:[DisplayUtilities getCorrectNibName:@"LoginViewController"] bundle:nil ]; - UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; - [self presentViewController:navController animated:YES completion:nil]; -} - -- (void) eventHandler: (NSNotification *) notification{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"###### Event triggered: %@", notification); -#endif - - if ([notification.name isEqualToString:kNotificationNeededsUpdate]){ - [self.tableView reloadData]; - } -} - -- (OpenPhotoIASKAppSettingsViewController*)appSettingsViewController { - if (!appSettingsViewController) { - appSettingsViewController = [[OpenPhotoIASKAppSettingsViewController alloc] initWithNibName:@"IASKAppSettingsView" bundle:nil]; - appSettingsViewController.delegate = self; - [appSettingsViewController setShowCreditsFooter:NO]; - appSettingsViewController.showDoneButton = NO; - } - return appSettingsViewController; -} - -- (void)settingsViewController:(IASKAppSettingsViewController*)sender buttonTappedForKey:(NSString*)key { - if ([key isEqualToString:@"CleanCache"]){ - [Timeline deleteAllTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - NSError *saveError = nil; - if (![[SharedAppDelegate managedObjectContext] save:&saveError]){ - NSLog(@"Error to save context = %@",[saveError localizedDescription]); - } - - //remove cache - SDImageCache *imageCache = [SDImageCache sharedImageCache]; - [imageCache clearMemory]; - [imageCache clearDisk]; - [imageCache cleanDisk]; - } -} - -- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController*)sender { - [self dismissViewControllerAnimated:YES completion:nil]; -} - -- (void) openCamera:(id) sender -{ - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Open Camera"); -#endif - - // refresh profile details - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationProfileRefresh object:nil]; - - self.viewDeckController.centerController = SharedAppDelegate.centerController; - [self selectLatestActivity]; - - DLCImagePickerController *picker = [[DLCImagePickerController alloc] init]; - picker.delegate = self; - - [coreLocationController.locMgr startUpdatingLocation]; - [self presentViewController:picker animated:YES completion:nil]; -} - - -- (void)imagePickerController:(DLCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { - // the image itself to save in the library, - // this data must be a raw data on DLCImagePickerController. Remove the PNG representation - UIImage *pickedImage = [info objectForKey:@"image"]; - - // User come from Snapshot. We will temporary save in the Library. - NSData* pngData = UIImageJPEGRepresentation(pickedImage,1.0); - CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)pngData, NULL); - - NSDictionary *exifTemp = (__bridge NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL); - __block NSMutableDictionary *exif = [exifTemp mutableCopy]; - - NSDictionary *gpsDict = [self currentLocation]; - if ([gpsDict count] > 0) { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"There is location"); -#endif - [exif setObject:gpsDict forKey:(NSString*) kCGImagePropertyGPSDictionary]; - }else{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"No location found"); -#endif - } - - [library writeImageToSavedPhotosAlbum:[pickedImage CGImage] metadata:exif completionBlock:^(NSURL *newUrl, NSError *error) { - if (error) { - NSLog(@"The photo took by the user could not be saved = %@", [error description]); - } else { - PhotoViewController* controller = [[PhotoViewController alloc]initWithNibName:[DisplayUtilities getCorrectNibName:@"PhotoViewController"] bundle:nil url:newUrl]; - UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; - [navController.navigationBar troveboxStyle:NO]; - [self dismissViewControllerAnimated:YES completion:^{ - [self presentViewController:navController animated:YES completion:nil]; - }]; - } - }]; - - - // stop location - [coreLocationController.locMgr stopUpdatingLocation]; - -} - -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ - [picker dismissViewControllerAnimated:YES completion:^{ - [coreLocationController.locMgr stopUpdatingLocation]; - }]; -} - - -//Creates an EXIF field for the current geo location. -- (NSMutableDictionary*)currentLocation { - NSMutableDictionary *locDict = [[NSMutableDictionary alloc] init]; - - if (self.location != nil) { - CLLocationDegrees exifLatitude = self.location.coordinate.latitude; - CLLocationDegrees exifLongitude = self.location.coordinate.longitude; - - [locDict setObject:self.location.timestamp forKey:(NSString*) kCGImagePropertyGPSTimeStamp]; - - if (exifLatitude < 0.0) { - exifLatitude = exifLatitude*(-1); - [locDict setObject:@"S" forKey:(NSString*)kCGImagePropertyGPSLatitudeRef]; - } else { - [locDict setObject:@"N" forKey:(NSString*)kCGImagePropertyGPSLatitudeRef]; - } - [locDict setObject:[NSNumber numberWithFloat:exifLatitude] forKey:(NSString*)kCGImagePropertyGPSLatitude]; - - if (exifLongitude < 0.0) { - exifLongitude=exifLongitude*(-1); - [locDict setObject:@"W" forKey:(NSString*)kCGImagePropertyGPSLongitudeRef]; - } else { - [locDict setObject:@"E" forKey:(NSString*)kCGImagePropertyGPSLongitudeRef]; - } - [locDict setObject:[NSNumber numberWithFloat:exifLongitude] forKey:(NSString*) kCGImagePropertyGPSLongitude]; - } - - return locDict; - -} - -- (void)locationUpdate:(CLLocation *)position{ - self.location = position; -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Position %@", position); -#endif -} - -- (void)locationError:(NSError *)error { - NSLog(@"Location error %@", [error description]); - - if ([error code] == kCLErrorDenied){ - // validate if we had checked once if user allowed location - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - if (standardUserDefaults) { - - if (![[NSUserDefaults standardUserDefaults] boolForKey:kValidateNotAllowedLocation] || - [[NSUserDefaults standardUserDefaults] boolForKey:kValidateNotAllowedLocation] == NO){ - // validated - [standardUserDefaults setBool:YES forKey:kValidateNotAllowedLocation]; - - // synchronize the keys - [standardUserDefaults synchronize]; - } - } - } -} - -- (void) selectLatestActivity -{ - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone]; -} - -- (void) displayProfileScreen -{ - [self.viewDeckController openLeftViewAnimated:YES completion:^(IIViewDeckController *controller) { - // Account - Profile - if (self.profileController == nil){ - self.profileController = [[UINavigationController alloc]initWithRootViewController:[[ProfileViewController alloc] init]]; - self.profileController.title= NSLocalizedString(@"My Account", @"Menu - title for Account"); - } - - controller.centerController = self.profileController; - // select profile - [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:7 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone]; - - //sleep a little and close the left view - [NSThread sleepForTimeInterval:(300+arc4random()%700)/1000000.0]; // mimic delay... not really necessary - [self.viewDeckController closeLeftViewAnimated:YES]; - }]; -} - -- (void) displayHomeScreen -{ - [self.viewDeckController openLeftViewAnimated:YES completion:^(IIViewDeckController *controller) { - controller.centerController = SharedAppDelegate.centerController; - [self selectLatestActivity]; - [MBProgressHUD hideAllHUDsForView:self.viewDeckController.view animated:YES]; - [NSThread sleepForTimeInterval:(300+arc4random()%700)/1000000.0]; // mimic delay... not really necessary - [self.viewDeckController closeLeftViewAnimated:YES]; - }]; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end \ No newline at end of file diff --git a/Photo/MultiSiteSelectionCell.h b/Photo/MultiSiteSelectionCell.h deleted file mode 100644 index 89c5ae7..0000000 --- a/Photo/MultiSiteSelectionCell.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MultiSiteSelectionCell.h -// Trovebox -// -// Created by Patrick Santana on 18/10/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import - -@interface MultiSiteSelectionCell : UITableViewCell - -@property (strong, nonatomic) IBOutlet UILabel *type; -@property (strong, nonatomic) IBOutlet UILabel *host; -@property (strong, nonatomic) IBOutlet UIImageView *userImage; - -@end diff --git a/Photo/MultiSiteSelectionCell.m b/Photo/MultiSiteSelectionCell.m deleted file mode 100644 index 5937c31..0000000 --- a/Photo/MultiSiteSelectionCell.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// MultiSiteSelectionCell.m -// Trovebox -// -// Created by Patrick Santana on 18/10/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import "MultiSiteSelectionCell.h" - -@implementation MultiSiteSelectionCell - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - } - return self; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; - - // Configure the view for the selected state -} - -@end diff --git a/Photo/MultiSiteSelectionCell.xib b/Photo/MultiSiteSelectionCell.xib deleted file mode 100644 index ef212b0..0000000 --- a/Photo/MultiSiteSelectionCell.xib +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/MultiSiteSelectionViewController.h b/Photo/MultiSiteSelectionViewController.h deleted file mode 100644 index 633c5dc..0000000 --- a/Photo/MultiSiteSelectionViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MultiSiteSelectionViewController.h -// Trovebox -// -// Created by Patrick Santana on 15/10/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import -#import "Account.h" -#import "MultiSiteSelectionCell.h" - -// image cache -#import - -@interface MultiSiteSelectionViewController : UITableViewController - --(id) initWithAccounts:(NSArray*) accounts; - -@end diff --git a/Photo/MultiSiteSelectionViewController.m b/Photo/MultiSiteSelectionViewController.m deleted file mode 100644 index f8dfdf0..0000000 --- a/Photo/MultiSiteSelectionViewController.m +++ /dev/null @@ -1,120 +0,0 @@ -// -// MultiSiteSelectionViewController.m -// Trovebox -// -// Created by Patrick Santana on 15/10/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import "MultiSiteSelectionViewController.h" - -@interface MultiSiteSelectionViewController () - -@property (nonatomic, strong) NSArray *accounts; - -@end - -@implementation MultiSiteSelectionViewController -@synthesize accounts=_accounts; --(id) initWithAccounts:(NSArray*) accounts -{ - self = [super initWithStyle:UITableViewStylePlain]; - if (self){ - _accounts = accounts; - self.title=@"Select account"; - } - - return self; -} - -- (void) viewDidLoad -{ - [super viewDidLoad]; - self.view.backgroundColor = UIColorFromRGB(0x44291A); - self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - // Return the number of sections. - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return [_accounts count]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"MultiSiteSelectionCell"; - Account *account =[_accounts objectAtIndex:indexPath.row]; - - if ([DisplayUtilities isIPad]){ - // if iPad just use the simple cell - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; - [cell setSelectionStyle:UITableViewCellSelectionStyleGray]; - } - - cell.textLabel.text = [account.host stringByReplacingOccurrencesOfString:@"http://" withString:@""]; - cell.textLabel.textColor = [UIColor whiteColor]; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Profile photo %@", account.profile.photoUrl); -#endif - - [cell.imageView setImageWithURL:[NSURL URLWithString:account.profile.photoUrl] placeholderImage:[UIImage imageNamed:@"empty_img.png"] completed:nil]; - - return cell; - }else{ - // if iPhone uses a more complex - MultiSiteSelectionCell *multiSiteSelectionCell = (MultiSiteSelectionCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - - if (multiSiteSelectionCell == nil) { - NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MultiSiteSelectionCell" owner:nil options:nil]; - multiSiteSelectionCell = [topLevelObjects objectAtIndex:0]; - } - - multiSiteSelectionCell.host.text=[account.host stringByReplacingOccurrencesOfString:@"http://" withString:@""]; - - multiSiteSelectionCell.type.text=account.type; - - [multiSiteSelectionCell.userImage setImageWithURL:[NSURL URLWithString:account.profile.photoUrl] placeholderImage:[UIImage imageNamed:@"empty_img.png"] completed:nil]; - - return multiSiteSelectionCell; - - } -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 90; -} - - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - // get the account - NSUInteger row = [indexPath row]; - Account *account = [self.accounts objectAtIndex:row]; - - // save locally - [account saveToStandardUserDefaults]; - - // send notification to the system that it can shows the screen: - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationLoginAuthorize object:nil ]; - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationNeededsUpdate object:nil]; -} - -- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath -{ - [cell setBackgroundColor:[UIColor clearColor]]; -} - - -@end diff --git a/Photo/NSDictionarySerializer.h b/Photo/NSDictionarySerializer.h deleted file mode 100644 index 653a431..0000000 --- a/Photo/NSDictionarySerializer.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// NSDictionarySerializer.h -// Trovebox -// -// Created by Patrick Santana on 05/07/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - -#import - -@interface NSDictionarySerializer : NSObject - -+ (NSData*) nsDictionaryToNSData:(NSDictionary *) dict; -+ (NSDictionary*) nsDataToNSDictionary:(NSData *) data; - -@end diff --git a/Photo/NSDictionarySerializer.m b/Photo/NSDictionarySerializer.m deleted file mode 100644 index 45b04fe..0000000 --- a/Photo/NSDictionarySerializer.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// NSDictionarySerializer.m -// Trovebox -// -// Created by Patrick Santana on 05/07/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "NSDictionarySerializer.h" - -@implementation NSDictionarySerializer - -static NSString * const KEY_NSDICTIONARY = @"key_nsdictionary_to_data_and_vice_versa"; - -+ (NSData*) nsDictionaryToNSData:(NSDictionary *) dict -{ - NSMutableData *data = [[NSMutableData alloc] init]; - NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; - [archiver encodeObject:dict forKey:KEY_NSDICTIONARY]; - [archiver finishEncoding]; - - return data; -} - -+ (NSDictionary*) nsDataToNSDictionary:(NSData *) data -{ - NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; - NSDictionary *dic = [unarchiver decodeObjectForKey:KEY_NSDICTIONARY]; - [unarchiver finishDecoding]; - - return dic; -} - -@end diff --git a/Photo/NewestPhotoCell.h b/Photo/NewestPhotoCell.h deleted file mode 100644 index 1c90a18..0000000 --- a/Photo/NewestPhotoCell.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// NewestPhotoCell.h -// Trovebox-FIXED -// -// Created by Patrick Santana on 27/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "SHK.h" -#import "Timeline+Methods.h" - -@interface NewestPhotoCell : UITableViewCell - -@property (nonatomic, weak) IBOutlet UIImageView *photo; -@property (nonatomic, weak) IBOutlet UILabel *date; -@property (nonatomic, weak) IBOutlet UILabel *tags; -@property (nonatomic, weak) IBOutlet UIActivityIndicatorView *activity; -@property (nonatomic, weak) IBOutlet UIImageView *private; -@property (nonatomic, weak) IBOutlet UIButton *geoPositionButton; -@property (nonatomic, weak) IBOutlet UILabel *label; -@property (nonatomic, weak) IBOutlet UIButton *shareButton; -@property (nonatomic, weak) IBOutlet UIImageView *geoSharingImage; - -@property (nonatomic, strong) Timeline *timeline; - -@property (nonatomic, strong) UITableViewController *newestPhotosTableViewController; - -- (IBAction)openGeoPosition:(id)sender; -- (IBAction)sharePhoto:(id)sender; - -@end diff --git a/Photo/NewestPhotoCell.m b/Photo/NewestPhotoCell.m deleted file mode 100644 index 9b04343..0000000 --- a/Photo/NewestPhotoCell.m +++ /dev/null @@ -1,146 +0,0 @@ -// -// NewestPhotoCell.m -// Trovebox -// -// Created by Patrick Santana on 27/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -#import "NewestPhotoCell.h" - -@implementation NewestPhotoCell - -@synthesize photo=_photo; -@synthesize date=_date; -@synthesize tags=_tags; -@synthesize activity=_activity; -@synthesize private=_private; -@synthesize geoPositionButton=_geoPositionButton; -@synthesize label=_label; -@synthesize shareButton = _shareButton; - -@synthesize timeline=_timeline; - -@synthesize newestPhotosTableViewController=_newestPhotosTableViewController; - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - } - return self; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; -} - -- (IBAction)openGeoPosition:(id)sender { - if (self.timeline.latitude != 0){ - - // Check for iOS 6 - Class mapItemClass = [MKMapItem class]; - if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) - { - // Create an MKMapItem to pass to the Maps app - CLLocationDegrees lat = [self.timeline.latitude doubleValue]; - CLLocationDegrees lon = [self.timeline.longitude doubleValue]; - CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(lat,lon ); - MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate - addressDictionary:nil]; - MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark]; - [mapItem setName:NSLocalizedString(@"My Photo",@"Message to appears in the map when opened an image")]; - // Pass the map item to the Maps app - [mapItem openInMapsWithLaunchOptions:nil]; - }else{ - NSString *url = [NSString stringWithFormat: @"http://maps.google.com/maps?q=%@", - [[NSString stringWithFormat:@"%@,%@",self.timeline.latitude,self.timeline.longitude] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; - [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]]; - } - } -} - -- (IBAction)sharePhoto:(id)sender { - if (self.timeline.photoPageUrl != nil && self.newestPhotosTableViewController != nil){ - - __block NSString *url = self.timeline.photoPageUrl; - - // check if photo is a private version. If it is, generate a token - if ([self.timeline.permission boolValue] == NO){ - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action" - action:@"buttonPress" - label:@"Share private photo" - value:nil] build]]; - }else{ - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action" - action:@"buttonPress" - label:@"Share public photo" - value:nil] build]]; - - } - - // create a dispatch to generate a token - dispatch_queue_t token = dispatch_queue_create("generate_token_for_image", NULL); - dispatch_async(token, ^{ - @try { - // get's token from website - WebService *service = [[WebService alloc] init]; - - // set in url - url = [service shareToken:self.timeline.key]; - - dispatch_async(dispatch_get_main_queue(), ^{ - - // stop loading - [MBProgressHUD hideHUDForView:self.newestPhotosTableViewController.view animated:YES]; - - // share the photo - [self shareUrl:[NSString stringWithFormat:@"%@%@",self.timeline.photoPageUrl, url]]; - }); - - }@catch (NSException *exception) { - dispatch_async(dispatch_get_main_queue(), ^{ - [MBProgressHUD hideHUDForView:self.newestPhotosTableViewController.view animated:YES]; - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:exception.description duration:5000]; - [alert showAlert]; - }); - } - }); - - // show progress bar - [MBProgressHUD showHUDAddedTo:self.newestPhotosTableViewController.view animated:YES]; - } -} - -- (void) shareUrl:(NSString*) url -{ - // create the item to share - SHKItem *item = [SHKItem URL:[NSURL URLWithString:url] title:self.label.text contentType:SHKURLContentTypeWebpage]; - - // Get the ShareKit action sheet - SHKActionSheet *actionSheet = [SHKActionSheet actionSheetForItem:item]; - - // ShareKit detects top view controller (the one intended to present ShareKit UI) automatically, - // but sometimes it may not find one. To be safe, set it explicitly - [SHK setRootViewController:self.newestPhotosTableViewController]; - - // Display the action sheet - [actionSheet showFromToolbar:self.newestPhotosTableViewController.navigationController.toolbar]; -} - -@end diff --git a/Photo/NewestPhotoCell.xib b/Photo/NewestPhotoCell.xib deleted file mode 100644 index 0f1e7c1..0000000 --- a/Photo/NewestPhotoCell.xib +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/NewestPhotoCelliPad.xib b/Photo/NewestPhotoCelliPad.xib deleted file mode 100644 index a227a54..0000000 --- a/Photo/NewestPhotoCelliPad.xib +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/OpenPhotoIASKAppSettingsViewController.h b/Photo/OpenPhotoIASKAppSettingsViewController.h deleted file mode 100644 index f72d068..0000000 --- a/Photo/OpenPhotoIASKAppSettingsViewController.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// OpenPhotoIASKAppSettingsViewController.h -// Trovebox -// -// Created by Patrick Santana on 29/10/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "IASKAppSettingsViewController.h" -#import "AuthenticationService.h" -#import "IASKPSToggleSwitchSpecifierViewCell.h" -#import "IASKSwitch.h" -#import "IASKPSTextFieldSpecifierViewCell.h" -#import "IASKSpecifier.h" -#import "IASKSettingsReader.h" - -@interface OpenPhotoIASKAppSettingsViewController : IASKAppSettingsViewController { -} - -@end diff --git a/Photo/OpenPhotoIASKAppSettingsViewController.m b/Photo/OpenPhotoIASKAppSettingsViewController.m deleted file mode 100644 index e5e73e4..0000000 --- a/Photo/OpenPhotoIASKAppSettingsViewController.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// OpenPhotoIASKAppSettingsViewController.m -// Trovebox -// -// Created by Patrick Santana on 29/10/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "OpenPhotoIASKAppSettingsViewController.h" - -@implementation OpenPhotoIASKAppSettingsViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { - - - } - return self; -} - -- (void)viewWillAppear:(BOOL)animated { - - [super viewWillAppear:animated]; - - // menu - UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom]; - UIImage *leftButtonImage = [UIImage imageNamed:@"button-navigation-menu.png"] ; - [leftButton setImage:leftButtonImage forState:UIControlStateNormal]; - leftButton.frame = CGRectMake(0, 0, leftButtonImage.size.width, leftButtonImage.size.height); - [leftButton addTarget:self.viewDeckController action:@selector(toggleLeftView) forControlEvents:UIControlEventTouchUpInside]; - - UIBarButtonItem *customLeftButton = [[UIBarButtonItem alloc] initWithCustomView:leftButton]; - self.navigationItem.leftBarButtonItem = customLeftButton; - - // button Log out - UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Sign out", @"Sign out on Settings") style:UIBarButtonItemStylePlain target:self action:@selector(logoutButton)]; - self.navigationItem.rightBarButtonItem = customBarItem; - - UIImageView *imgView=[[UIImageView alloc]init]; - imgView.backgroundColor = UIColorFromRGB(0XFAF3EF); - self.tableView.backgroundView=imgView; - self.tableView.separatorColor = UIColorFromRGB(0xCDC9C1); - - [self.navigationController.navigationBar troveboxStyle:NO]; - [self.navigationItem troveboxStyle:NSLocalizedString(@"Settings", @"Menu - title for Settings") defaultButtons:NO viewController:self.viewDeckController menuViewController:(MenuViewController*) self.viewDeckController.leftController]; -} - -- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section -{ - // Get the text - NSString *text = [super tableView:tableView titleForHeaderInSection:section]; - - // create the parent view that will hold header Label - UIView* customView = [[UIView alloc] initWithFrame:CGRectMake(10.0, 0.0, 300.0, 44.0)]; - - // create the button object - UILabel * headerLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - headerLabel.backgroundColor = [UIColor clearColor]; - headerLabel.textColor = UIColorFromRGB(0x8C7B73); - headerLabel.font = [UIFont boldSystemFontOfSize:18]; - headerLabel.frame = CGRectMake(18.0, 0.0, 300.0, 44.0); - - - headerLabel.text = text; - [customView addSubview:headerLabel]; - - return customView; -} - -// extend the framework to let Switch be another color. -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; - - IASKSpecifier *specifier = [self.settingsReader specifierForIndexPath:indexPath]; - - // change the color for the Switch - if ([[specifier type] isEqualToString:kIASKPSToggleSwitchSpecifier]) { - if([((IASKPSToggleSwitchSpecifierViewCell*)cell).toggle respondsToSelector:@selector(setOnTintColor:)]){ - //iOS 5.0 - [((IASKPSToggleSwitchSpecifierViewCell*)cell).toggle setOnTintColor: UIColorFromRGB(0xEFC005)]; - } - }else if ([[specifier type] isEqualToString:kIASKPSTitleValueSpecifier]){ - // change the color for the text - cell.detailTextLabel.textColor = UIColorFromRGB(0x8C7B73); - cell.detailTextLabel.font = [UIFont systemFontOfSize:13]; - }else if ([[specifier type] isEqualToString:kIASKOpenURLSpecifier]) { - // change the color for the text - cell.detailTextLabel.textColor = UIColorFromRGB(0x8C7B73); - cell.detailTextLabel.font = [UIFont systemFontOfSize:13]; - } else if ([[specifier type] isEqualToString:kIASKButtonSpecifier]) { - if (!cell) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[specifier type]]; - cell.backgroundColor = [UIColor whiteColor]; - } - cell.textLabel.text = [specifier title]; - cell.textLabel.textAlignment = UITextAlignmentLeft; - return cell; - } - - return cell; -} - -- (void) logoutButton{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Sign out. Are you sure?",@"Message to confirm if user really wants to log out") message:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel",@"") otherButtonTitles:NSLocalizedString(@"Sign out",@""),nil]; - [alert show]; -} - -- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { - if (buttonIndex == 1){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Invalidate user information"); -#endif - - AuthenticationService* helper = [[AuthenticationService alloc]init]; - [helper logout]; - [(MenuViewController*) SharedAppDelegate.menuController displayHomeScreen]; - } -} - -#pragma mark - Rotation - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -@end diff --git a/Photo/Permission.h b/Photo/Permission.h deleted file mode 100644 index 02580f8..0000000 --- a/Photo/Permission.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// Permission.h -// Trovebox -// -// Created by Patrick Santana on 15/10/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import - -@interface Permission : NSObject - -@property (nonatomic, strong) id c; -@property (nonatomic, strong) id r; -@property (nonatomic, strong) id u; -@property (nonatomic, strong) id d; - -@end diff --git a/Photo/Permission.m b/Photo/Permission.m deleted file mode 100644 index 3469adf..0000000 --- a/Photo/Permission.m +++ /dev/null @@ -1,42 +0,0 @@ -// -// Permission.m -// Trovebox -// -// Created by Patrick Santana on 15/10/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import "Permission.h" - -@implementation Permission - -#define kPermissionC @"permission_value_c" -#define kPermissionR @"permission_value_r" -#define kPermissionU @"permission_value_u" -#define kPermissionD @"permission_value_d" - -@synthesize c=_c, r=_r, u=_u, d=_d; - -- (void) encodeWithCoder:(NSCoder *)encoder { - [encoder encodeObject:self.c forKey:kPermissionC]; - [encoder encodeObject:self.r forKey:kPermissionR]; - [encoder encodeObject:self.u forKey:kPermissionU]; - [encoder encodeObject:self.d forKey:kPermissionD]; -} - -- (id)initWithCoder:(NSCoder *)decoder { - // create a object and set all details - self = [[Permission alloc] init]; - - if (self != nil){ - self.c = [decoder decodeObjectForKey:kPermissionC]; - self.r = [decoder decodeObjectForKey:kPermissionR]; - self.u = [decoder decodeObjectForKey:kPermissionU]; - self.d = [decoder decodeObjectForKey:kPermissionD]; - } - - // return the object saved - return self; -} - -@end diff --git a/Photo/Photo.h b/Photo/Photo.h deleted file mode 100644 index 6aea603..0000000 --- a/Photo/Photo.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Trovebox.h -// Trovebox -// -// Created by Patrick Santana on 29/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - - -@interface Photo : NSManagedObject - -@property (nonatomic, retain) NSDate * date; -@property (nonatomic, retain) NSNumber * height; -@property (nonatomic, retain) NSString * identification; -@property (nonatomic, retain) NSString * pageUrl; -@property (nonatomic, retain) NSNumber * thumbHeight; -@property (nonatomic, retain) NSString * thumbUrl; -@property (nonatomic, retain) NSNumber * thumbWidth; -@property (nonatomic, retain) NSString * title; -@property (nonatomic, retain) NSString * url; -@property (nonatomic, retain) NSNumber * width; - -@end diff --git a/Photo/Photo.m b/Photo/Photo.m deleted file mode 100644 index e47e27b..0000000 --- a/Photo/Photo.m +++ /dev/null @@ -1,37 +0,0 @@ -// -// Trovebox.m -// Trovebox -// -// Created by Patrick Santana on 29/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Photo.h" - - -@implementation Photo - -@dynamic date; -@dynamic height; -@dynamic identification; -@dynamic pageUrl; -@dynamic thumbHeight; -@dynamic thumbUrl; -@dynamic thumbWidth; -@dynamic title; -@dynamic url; -@dynamic width; - -@end diff --git a/Photo/Photo.xcdatamodeld/.xccurrentversion b/Photo/Photo.xcdatamodeld/.xccurrentversion deleted file mode 100644 index 7445ea4..0000000 --- a/Photo/Photo.xcdatamodeld/.xccurrentversion +++ /dev/null @@ -1,8 +0,0 @@ - - - - - _XCCurrentVersionName - Photo.xcdatamodel - - diff --git a/Photo/Photo.xcdatamodeld/Photo.xcdatamodel/contents b/Photo/Photo.xcdatamodeld/Photo.xcdatamodel/contents deleted file mode 100644 index 1f81d3f..0000000 --- a/Photo/Photo.xcdatamodeld/Photo.xcdatamodel/contents +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/PhotoAlertView.h b/Photo/PhotoAlertView.h deleted file mode 100644 index c734bbc..0000000 --- a/Photo/PhotoAlertView.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// PhotoAlertView.h -// Trovebox -// -// Created by Patrick Santana on 23/04/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface PhotoAlertView : NSObject - -// init with text and default duration -- (id) initWithMessage:(NSString *) text; -// init with text and duration -- (id) initWithMessage:(NSString *) text duration:(NSInteger) time; -- (void) showAlert; -- (void) showAlertOnTop; -@end diff --git a/Photo/PhotoAlertView.m b/Photo/PhotoAlertView.m deleted file mode 100644 index 99230e9..0000000 --- a/Photo/PhotoAlertView.m +++ /dev/null @@ -1,114 +0,0 @@ -// -// PhotoAlertView.m -// Trovebox -// -// Created by Patrick Santana on 23/04/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "PhotoAlertView.h" - - -@interface PhotoAlertView(){ - UIView *viewAlert; - NSString *message; - NSInteger duration; -} - -- (void)showOnTop:(BOOL) top; - -@property (nonatomic, strong) UIView *viewAlert; -@property (nonatomic, strong) NSString *message; -@property (assign) NSInteger duration; - -@end - -@implementation PhotoAlertView -@synthesize viewAlert = _viewAlert; -@synthesize message = _message; -@synthesize duration = _duration; - - -- (id) initWithMessage:(NSString *) text{ - return [self initWithMessage:text duration:5000]; -} -- (id) initWithMessage:(NSString *) text duration:(NSInteger) time{ - if (self = [super init]) { - self.message = text; - self.duration = time; - } - - return self; -} - -- (void) showAlertOnTop{ - [self showOnTop:YES]; -} - -- (void)showAlert{ - [self showOnTop:NO]; -} - - -- (void)showOnTop:(BOOL) top{ - [self.viewAlert removeFromSuperview]; - - int sizeWidth = 320; - if ([DisplayUtilities isIPad]){ - sizeWidth = 768; - } - - UIFont *font = [UIFont systemFontOfSize:12]; - CGSize textSize = [self.message sizeWithFont:font constrainedToSize:CGSizeMake(sizeWidth, 60)]; - - UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width + 5, textSize.height + 5)]; - label.font = font; - label.backgroundColor = [UIColor clearColor]; - label.textColor = [UIColor whiteColor]; - label.text = self.message; - label.shadowColor = [UIColor blackColor]; - label.shadowOffset = CGSizeMake(0, 1); - - UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; - button.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]; - - if (!top){ - button.frame = CGRectMake(0, 64, sizeWidth, textSize.height + 10); - }else{ - button.frame = CGRectMake(0, 20, sizeWidth, textSize.height + 10); - } - - button.alpha = 0; - label.center = CGPointMake(button.frame.size.width / 2, button.frame.size.height / 2); - [button addSubview:label]; - - // get the windows - UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0]; - [window addSubview:button]; - - // set the property view - self.viewAlert = button; - [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationCurveEaseOut animations:^{ - self.viewAlert.alpha = 1; - }completion:^(BOOL finished){ - [UIView animateWithDuration:0.3 delay:2 options:UIViewAnimationCurveEaseOut animations:^{ - self.viewAlert.alpha = 0; - }completion:^(BOOL finished){ - [self.viewAlert removeFromSuperview]; - }]; - }]; -} - -@end diff --git a/Photo/PhotoSHKConfigurator.h b/Photo/PhotoSHKConfigurator.h deleted file mode 100644 index aa80a73..0000000 --- a/Photo/PhotoSHKConfigurator.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// PhotoSHKConfigurator.h -// Trovebox -// -// Created by Patrick Santana on 16/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DefaultSHKConfigurator.h" -#import "SHKConfiguration.h" - -@interface PhotoSHKConfigurator : DefaultSHKConfigurator - -#define SHKMyAppName @"App for Trovebox" -#define SHKMyAppURL @"https://trovebox.com/for/iphone" - -#define SHKFacebookUseSessionProxy NO -#define SHKFacebookAppID @"" -#define SHKFacebookLocalAppID @"" -#define SHKFacebookSessionProxyURL @"" - -#define SHKTwitterConsumerKey @"" -#define SHKTwitterSecret @"" -#define SHKTwitterCallbackUrl @"http://openphoto.me" // You need to set this if using OAuth, see note above (xAuth users can skip it) -#define SHKTwitterUseXAuth 0 // To use xAuth, set to 1 -#define SHKTwitterUsername @"" // Enter your app's twitter account if you'd like to ask the user to follow it when logging in. (Only for xAuth) - -// Bit.ly (for shortening URLs on Twitter) - http://bit.ly/account/register - after signup: http://bit.ly/a/your_api_key -#define SHKBitLyLogin @"" -#define SHKBitLyKey @"" - -@end diff --git a/Photo/PhotoSHKConfigurator.m b/Photo/PhotoSHKConfigurator.m deleted file mode 100644 index 5e0e92c..0000000 --- a/Photo/PhotoSHKConfigurator.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// PhotoSHKConfigurator.m -// Trovebox -// -// Created by Patrick Santana on 16/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "PhotoSHKConfigurator.h" - -@implementation PhotoSHKConfigurator - -@end diff --git a/Photo/PhotoUploader.h b/Photo/PhotoUploader.h deleted file mode 100644 index dbf8d50..0000000 --- a/Photo/PhotoUploader.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// PhotoUploader.h -// Trovebox -// -// Created by Patrick Santana on 08/06/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Synced+Methods.h" -#import "Timeline+Methods.h" - -#import "ContentTypeUtilities.h" -#import -#import "AssetsLibraryUtilities.h" - -@interface PhotoUploader : NSObject - -// assets library -@property (nonatomic, strong) ALAssetsLibrary *assetsLibrary; - -- (void) loadDataAndSaveEntityUploadDate:(NSDate *) date - shareFacebook:(NSNumber *) facebook - shareTwitter:(NSNumber *) twitter - permission:(NSNumber *) permission - tags:(NSString *) tags - albums:(NSString *) albums - title:(NSString *) title - url:(NSURL *) url - groupUrl:(NSString *) urlGroup; - -@end diff --git a/Photo/PhotoUploader.m b/Photo/PhotoUploader.m deleted file mode 100644 index e2afef8..0000000 --- a/Photo/PhotoUploader.m +++ /dev/null @@ -1,180 +0,0 @@ -// -// PhotoUploader.m -// Trovebox -// -// Created by Patrick Santana on 08/06/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "PhotoUploader.h" - -@interface PhotoUploader() - -- (void) saveEntityUploadDate:(NSDate *) date - shareFacebook:(NSNumber *) facebook - shareTwitter:(NSNumber *) twitter - image:(NSData *) image - permission:(NSNumber *) permission - tags:(NSString *) tags - albums:(NSString *) albums - title:(NSString *) title - url:(NSURL *) url - groupUrl:(NSString *) urlGroup; - -@end - -@implementation PhotoUploader - -@synthesize assetsLibrary=_assetsLibrary; - -- (id)init -{ - self = [super init]; - if (self) { - self.assetsLibrary = [[ALAssetsLibrary alloc] init]; - } - return self; -} - -- (void) loadDataAndSaveEntityUploadDate:(NSDate *) date - shareFacebook:(NSNumber *) facebook - shareTwitter:(NSNumber *) twitter - permission:(NSNumber *) permission - tags:(NSString *) tags - albums:(NSString *) albums - title:(NSString *) title - url:(NSURL *) url - groupUrl:(NSString *) urlGroup -{ - // load image and then save it to database - // via block - ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset *asset) - { - - ALAssetRepresentation *rep = [asset defaultRepresentation]; -#ifdef DEVELOPMENT_ENABLED - NSLog(@"GOT ASSET, File size: %f", [rep size] / (1024.0f*1024.0f)); -#endif - uint8_t* buffer = malloc([rep size]); - - NSError* error = NULL; - NSUInteger bytes = [rep getBytes:buffer fromOffset:0 length:[rep size] error:&error]; - NSData *data = nil; - - if (bytes == [rep size]){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Asset %@ loaded from Asset Library OK", url); -#endif - data = [NSData dataWithBytes:buffer length:bytes]; - [self saveEntityUploadDate:date - shareFacebook:facebook - shareTwitter:twitter - image:data - permission:permission - tags:tags - albums:albums - title:title - url:url - groupUrl:urlGroup]; - }else{ - NSLog(@"Error '%@' reading bytes from asset: '%@'", [error localizedDescription], url); - } - - free(buffer); - }; - - // block for failed image - ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) - { - NSLog(@"Error '%@' getting asset from library", [error localizedDescription]); - }; - - // schedules the asset read - [self.assetsLibrary assetForURL:url resultBlock:resultBlock failureBlock:failureBlock]; -} - -- (void) saveEntityUploadDate:(NSDate *) date - shareFacebook:(NSNumber *) facebook - shareTwitter:(NSNumber *) twitter - image:(NSData *) image - permission:(NSNumber *) permission - tags:(NSString *) tags - albums:(NSString *) albums - title:(NSString *) title - url:(NSURL *) url - groupUrl:(NSString *) urlGroup -{ - if ( image != nil){ - - // generate a file name - NSString *name = [AssetsLibraryUtilities getFileNameForImage:image url:url]; - - // check title of photo - if (title == nil){ - title = [[NSString alloc]initWithFormat:@"\t%@",[AssetsLibraryUtilities getPhotoTitleForImage:image url:url]]; - } - - // generate path of temporary file - NSURL *pathTemporaryFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:name]]; - - // save in a temporary folder - BOOL result = [image writeToURL:pathTemporaryFile atomically:NO]; - - // generate a thumb - CGSize itemSize = CGSizeMake(70, 70); - UIGraphicsBeginImageContext(itemSize); - - UIImage *imageTemp = [UIImage imageWithData:image]; - [imageTemp drawInRect:CGRectMake(0, 0, 70, 70)]; - imageTemp = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - NSData* data =[NSData dataWithData:UIImagePNGRepresentation (imageTemp)]; - - - //in the main queue, generate TimelinePhotos - dispatch_async(dispatch_get_main_queue(), ^{ - @autoreleasepool{ - if (result){ - // data to be saved in the database - Timeline *uploadInfo = [NSEntityDescription insertNewObjectForEntityForName:@"Timeline" - inManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - - // details form this upload - uploadInfo.date = date; - uploadInfo.dateUploaded = date; - uploadInfo.facebook = facebook; - uploadInfo.twitter = twitter; - uploadInfo.permission = permission; - uploadInfo.title = title; - uploadInfo.tags=tags; - uploadInfo.albums=albums; - uploadInfo.status=kUploadStatusTypeCreated; - uploadInfo.photoDataTempUrl = [pathTemporaryFile absoluteString]; - uploadInfo.photoDataThumb = data; - uploadInfo.fileName = name; - uploadInfo.userUrl = [SharedAppDelegate userHost]; - uploadInfo.photoToUpload = [NSNumber numberWithBool:YES]; - uploadInfo.photoUploadMultiplesUrl = urlGroup; - - if (url){ - // add to the sync list, with that we don't need to show photos already uploaded. - uploadInfo.syncedUrl = [AssetsLibraryUtilities getAssetsUrlId:url]; - } - }} - }); - } -} -@end diff --git a/Photo/PhotoViewController.h b/Photo/PhotoViewController.h deleted file mode 100644 index 0f3ecd6..0000000 --- a/Photo/PhotoViewController.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// PhotoViewController.h -// Trovebox -// -// Created by Patrick Santana on 29/07/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "TagViewController.h" -#import "AlbumViewController.h" -#import "Synced+Methods.h" -#import "Timeline+Methods.h" - -#import "PhotoUploader.h" -#import "Account.h" - -@interface PhotoViewController : GAITrackedViewController - -@property (nonatomic, weak) IBOutlet UITableView *detailsPictureTable; - -// in case of user getting an image from the snapshot -@property (nonatomic, strong) NSURL *image; -// List of all images form the sync -@property (nonatomic, strong) NSArray *images; - -@property (nonatomic, strong) UITextField *titleTextField; -@property (nonatomic, strong) UISwitch *permissionPicture; -@property (nonatomic, strong) UISwitch *shareFacebook; -@property (nonatomic, strong) UISwitch *shareTwitter; - -@property (nonatomic, strong) TagViewController *tagController; -@property (nonatomic, strong) AlbumViewController *albumController; - -// construct that receive the snapshot -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil url:(NSURL *) imageFromCamera; -// construct that receives a list with all images URL from Sync -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil images:(NSArray *) imagesFromSync; - -@property (weak, nonatomic) IBOutlet UILabel *labelLimitUpload; - -// for upload -@property (nonatomic, strong) PhotoUploader *uploader; - -@end diff --git a/Photo/PhotoViewController.m b/Photo/PhotoViewController.m deleted file mode 100644 index 9845885..0000000 --- a/Photo/PhotoViewController.m +++ /dev/null @@ -1,562 +0,0 @@ -// -// PhotoViewController.m -// Trovebox -// -// Created by Patrick Santana on 29/07/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "PhotoViewController.h" - -@interface PhotoViewController() -- (void) switchedFacebook; -- (void) switchedTwitter; -- (void)upload:(id)sender; - -@end - -@implementation PhotoViewController - -@synthesize detailsPictureTable=_detailsPictureTable; -@synthesize titleTextField=_titleTextField, permissionPicture=_permissionPicture, shareFacebook=_shareFacebook, shareTwitter=_shareTwitter; -@synthesize tagController=_tagController, albumController=_albumController; - -@synthesize image= _image; -@synthesize images = _images; - -// to upload -@synthesize uploader=_uploader; - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil url:(NSURL *) imageFromCamera -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - - if (self) { - // Custom initialization - self.image = imageFromCamera; - self.uploader = [[PhotoUploader alloc] init]; - - // initialization of tag controller - self.tagController = [[TagViewController alloc] init]; - [self.tagController setReadOnly]; - - // initialization of algum controller - self.albumController = [[AlbumViewController alloc] init]; - [self.albumController setReadOnly]; - } - return self; -} - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil images:(NSArray *) imagesFromSync -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - - if (self) { - // Custom initialization - self.images = imagesFromSync; - self.uploader = [[PhotoUploader alloc] init]; - - // how many images we need to process? - if (self.images){ - // if there is only one, treat it as a camera image, so user will be able to edit - if ([self.images count] == 1){ - self.image = [self.images lastObject]; - } - } - - // initialization of tag controller - self.tagController = [[TagViewController alloc] init]; - [self.tagController setReadOnly]; - - // initialization of algum controller - self.albumController = [[AlbumViewController alloc] init]; - [self.albumController setReadOnly]; - } - return self; -} - - -#pragma mark - View lifecycle -- (void)viewDidLoad{ - [super viewDidLoad]; - self.screenName = @"Upload Screen"; - - [self.navigationItem troveboxStyle:NSLocalizedString(@"Upload", @"Title in the upload form") defaultButtons:NO viewController:nil menuViewController:nil]; - - [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; - [self.navigationController setNavigationBarHidden:NO animated:YES]; - - if (self.images){ - self.detailsPictureTable.frame = CGRectMake(self.detailsPictureTable.frame.origin.x,self.detailsPictureTable.frame.origin.y - 40, self.detailsPictureTable.frame.size.width,self.detailsPictureTable.frame.size.height+40); - }else{ - // if user wants to cancel the upload - // it should be just in the case of snapshot - // button CLOSE - UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Close", @"Close on Upload") style:UIBarButtonItemStylePlain target:self action:@selector(cancelUploadButton)]; - self.navigationItem.leftBarButtonItem = customBarItem; - } - - // button DONE - UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done", @"Done on Upload") style:UIBarButtonItemStylePlain target:self action:@selector(upload:)]; - self.navigationItem.rightBarButtonItem = customBarItem; - - self.detailsPictureTable.backgroundColor = UIColorFromRGB(0XFAF3EF); - self.view.backgroundColor = UIColorFromRGB(0XFAF3EF); -} - - -- (void) cancelUploadButton{ - [self dismissViewControllerAnimated:YES completion:^{ - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action" - action:@"buttonPress" - label:@"Cancel Upload" - value:nil] build]]; - }]; -} - --(IBAction)OnClick_btnBack:(id)sender { - [self.navigationController popViewControllerAnimated:YES]; -} - -- (void)viewDidUnload{ - [self setLabelLimitUpload:nil]; - [super viewDidUnload]; - [self setDetailsPictureTable:nil]; -} - -#pragma mark - Rotation - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -- (void) viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - if ([SharedAppDelegate isProUser] || ![SharedAppDelegate isHosted]){ - self.labelLimitUpload.hidden = TRUE; - }else{ - self.labelLimitUpload.hidden = FALSE; - - // set lable for the limit - NSString *message; - if ([SharedAppDelegate limitFreeUser] == 1){ - message = NSLocalizedString(@"You can upload one more photo this month",@"Message limit - one more photo"); - }else if([SharedAppDelegate limitFreeUser] > 1){ - message = [NSString stringWithFormat:NSLocalizedString(@"You can upload %d more photos this month",@"Message limit - n more photos"), [SharedAppDelegate limitFreeUser]]; - }else{ - message = [NSString stringWithFormat:NSLocalizedString(@"You've reached your monthly limit of 100 photos",@"Message when limit is reached on upload screen")]; - } - - self.labelLimitUpload.text = message; - } -} - -#pragma mark - Table -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ - return 6; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ - UITableViewCell *cell = nil; - - NSUInteger row = [indexPath row]; - switch (row) { - case 0: - // title - cell=[tableView dequeueReusableCellWithIdentifier:kCellIdentifierTitle]; - if (cell == nil) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellIdentifierTitle]; - [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; - - // position based if it is ipad or not - CGRect position; - if ([DisplayUtilities isIPad]) - position = CGRectMake(55 , 13, 460, 21); - else - position = CGRectMake(17 , 13, 260, 21); - - self.titleTextField = [[UITextField alloc] initWithFrame:position]; - self.titleTextField.adjustsFontSizeToFitWidth = YES; - self.titleTextField.textColor = UIColorFromRGB(0x8C7B73); - - self.titleTextField.placeholder = NSLocalizedString(@"title",@"Upload - inside text input"); - self.titleTextField.keyboardType = UIKeyboardTypeDefault; - self.titleTextField.returnKeyType = UIReturnKeyNext; - self.titleTextField.delegate = self; - [cell addSubview:self.titleTextField]; - } - break; - case 1: - // tags - cell=[tableView dequeueReusableCellWithIdentifier:kCellIdentifierTags]; - if (cell == nil) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellIdentifierTags]; - // Do anything that should be the same on EACH cell here. Fonts, colors, etc. - } - - cell.textLabel.text=NSLocalizedString(@"Tags",nil); - // customised disclosure button - [cell setAccessoryView:[self makeDetailDisclosureButton]]; - break; - - case 2: - // albums - cell=[tableView dequeueReusableCellWithIdentifier:kCellIdentifierAlbums]; - if (cell == nil) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellIdentifierAlbums]; - } - - cell.textLabel.text=NSLocalizedString(@"Albums",nil); - // customised disclosure button - [cell setAccessoryView:[self makeDetailDisclosureButton]]; - break; - - case 3: - // private flag - cell=[tableView dequeueReusableCellWithIdentifier:kCellIdentifierPrivate]; - if (cell == nil) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellIdentifierPrivate]; - // Do anything that should be the same on EACH cell here. Fonts, colors, etc. - } - - cell.textLabel.text=NSLocalizedString(@"Private",@"Upload - Private"); - self.permissionPicture = [[UISwitch alloc] initWithFrame:CGRectZero]; - cell.accessoryView = self.permissionPicture; - [self.permissionPicture setOnTintColor:UIColorFromRGB(0xEFC005)]; - - // get from user configuration if pictures should be private or not - [(UISwitch *)cell.accessoryView setOn:[[NSUserDefaults standardUserDefaults] boolForKey:kPhotosArePrivate]]; - break; - - case 4: - // Facebook - cell=[tableView dequeueReusableCellWithIdentifier:kCellIdentifierShareFacebook]; - if (cell == nil) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellIdentifierShareFacebook]; - // Do anything that should be the same on EACH cell here. Fonts, colors, etc. - } - - cell.textLabel.text=NSLocalizedString(@"Facebook",@"Upload - Facebook"); - self.shareFacebook = [[UISwitch alloc] initWithFrame:CGRectZero]; - [self.shareFacebook setOnTintColor:UIColorFromRGB(0xEFC005)]; - [self.shareFacebook addTarget:self action:@selector(switchedFacebook) forControlEvents:UIControlEventValueChanged]; - [self.shareFacebook setOn:NO]; - cell.accessoryView = self.shareFacebook; - break; - - case 5: - // Twitter - cell=[tableView dequeueReusableCellWithIdentifier:kCellIdentifierShareTwitter]; - if (cell == nil) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCellIdentifierShareTwitter] ; - // Do anything that should be the same on EACH cell here. Fonts, colors, etc. - } - - cell.textLabel.text=NSLocalizedString(@"Twitter",@"Upload - Twitter"); - self.shareTwitter = [[UISwitch alloc] initWithFrame:CGRectZero]; - [self.shareTwitter setOnTintColor:UIColorFromRGB(0xEFC005)]; - [self.shareTwitter addTarget:self action:@selector(switchedTwitter) forControlEvents:UIControlEventValueChanged]; - cell.accessoryView = self.shareTwitter; - break; - - default: - break; - } - - return cell; -} - -- (UIButton *) makeDetailDisclosureButton{ - UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; - - // set the image - UIImage *image = [UIImage imageNamed:@"button-disclosure-form.png"]; - [button setImage:image forState:UIControlStateNormal]; - - CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height); - button.frame = frame; - - // action - [button addTarget: self - action: @selector(accessoryButtonTapped:withEvent:) - forControlEvents: UIControlEventTouchUpInside]; - - return button; -} - -- (void) accessoryButtonTapped: (UIControl *) button withEvent: (UIEvent *) event{ - NSIndexPath * indexPath = [self.detailsPictureTable indexPathForRowAtPoint: [[[event touchesForView: button] anyObject] locationInView: self.detailsPictureTable]]; - if ( indexPath == nil ) - return; - - [self.detailsPictureTable.delegate tableView: self.detailsPictureTable accessoryButtonTappedForRowWithIndexPath: indexPath]; -} - -- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { - NSUInteger row = [indexPath row]; - - if (row == 1){ - // tags - [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:0]; - [self.navigationController pushViewController:self.tagController animated:YES]; - }else if (row == 2){ - // albums - [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:0]; - [self.navigationController pushViewController:self.albumController animated:YES]; - } -} - --(void) switchedFacebook{ - if ([self.shareFacebook isOn]){ - [self.shareTwitter setOn:NO animated:YES]; - } -} - --(void) switchedTwitter{ - if ([self.shareTwitter isOn]){ - [self.shareFacebook setOn:NO animated:YES]; - } -} - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - [textField resignFirstResponder]; - return YES; -} - -- (void)upload:(id)sender { - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action" - action:@"buttonPress" - label:@"Upload" - value:nil] build]]; - - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Upload button clicked. Save all details in the database"); -#endif - - // values - NSNumber *facebook = ([self.shareFacebook isOn] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO]) ; - NSNumber *twitter = ([self.shareTwitter isOn] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO]); - NSNumber *permission = (![self.permissionPicture isOn] ? [NSNumber numberWithBool:YES] : [NSNumber numberWithBool:NO]); - NSString *title = self.titleTextField.text.length > 0 ? self.titleTextField.text : nil; - NSString *tags = [self.tagController getSelectedTagsInJsonFormat]; - NSString *albums = [self.albumController getSelectedAlbumsIdentification]; - - - NSString *type = [[NSUserDefaults standardUserDefaults] objectForKey:kTroveboxTypeUser]; - if (type && [type isEqualToString:@"group"] && [SharedAppDelegate isHosted]){ - // user needs to select an album - // if there is no album, he can't upload - Account *account = [[Account alloc]init]; - [account readFromStandardUserDefaults]; - - // now we should have access to all information from this user - Permission *permission = account.permission; - if ([permission.c isKindOfClass:[NSArray class]]){ - // has one or more albums that he can upload. - if ([permission.c count] == 1){ - // if there is one, needs to set this one as identifier - id albumAllowed = [permission.c objectAtIndex:0]; - if ([albumAllowed isKindOfClass:[NSString class]]){ - albums = [permission.c objectAtIndex:0]; - } else{ - albums = [[permission.c objectAtIndex:0] stringValue]; - } - }else{ - // check if it is one of the selected - NSArray *albumsAllowed = permission.c; - - // if not, ask user to select one - BOOL found=NO; - for (id s in albumsAllowed) - { - if ([s isKindOfClass:[NSString class]]){ - if ([albums rangeOfString:s].location != NSNotFound) { - found = YES; - break; - } - } else{ - if ([albums rangeOfString:[s stringValue]].location != NSNotFound) { - found = YES; - break; - } - } - } - - if (!found){ - // show message and return - UIAlertView *alert = [[UIAlertView alloc] initWithTitle: nil - message: NSLocalizedString(@"Please select an album.", @"Message to select one album to upload your photos") - delegate:nil - cancelButtonTitle:nil - otherButtonTitles:NSLocalizedString(@"OK",nil), nil]; - [alert show]; - return; - } - - } - }else if ([permission.c isKindOfClass:[NSNumber class]]){ - // if 1, YES for all - // if 0, NO for all, so just display an alert he doesn't have permission and return - } - - } - - dispatch_queue_t waiting = dispatch_queue_create("waiting_finish_insert_database", NULL); - dispatch_async(waiting, ^{ - @try { - // - // - // Process all images in a queue. - // When necessary to run in the main thread, do it - // during this time, user will have a progress bar, so, no possible to change values - // - // - - // check the type of image that we are uploading - // is it a single image or a bunch of images? - if (self.images && [self.images count]>1){ - // bunch of photos and more than one - int i = [self.images count]; - for ( NSURL *url in self.images){ - if ( i != 1 ){ - [self.uploader loadDataAndSaveEntityUploadDate:[NSDate date] - shareFacebook:[NSNumber numberWithBool:NO] - shareTwitter:[NSNumber numberWithBool:NO] - permission:permission - tags:tags - albums:albums - title:title - url:url - groupUrl:nil]; - - - }else{ - // this is the last one, - // so we do the sharing if needed - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - // create the url to connect to OpenPhoto - NSString *urlString = [NSString stringWithFormat: @"%@/photos/list?sortBy=dateUploaded,DESC&pageSize=%i", [standardUserDefaults valueForKey:kTroveboxServer], [self.images count]]; - - [self.uploader loadDataAndSaveEntityUploadDate:[NSDate date] - shareFacebook:facebook - shareTwitter:twitter - permission:permission - tags:tags - albums:albums - title:title - url:url - groupUrl:urlString]; - } - - // decrease until the first one - i--; - } - }else{ - // just one photo to share - [self.uploader loadDataAndSaveEntityUploadDate:[NSDate date] - shareFacebook:facebook - shareTwitter:twitter - permission:permission - tags:tags - albums:albums - title:title - url:self.image - groupUrl:nil]; - } - - // checkpoint - if (self.images){ - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"Upload" - action:@"typeImage" - label:@"Image from Sync" - value:nil] build]]; - }else{ - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"Upload" - action:@"typeImage" - label:@"Image from Snapshot" - value:nil] build]]; - } - - // wait for 2 seconds to go to main screen - [NSThread sleepForTimeInterval:4]; - dispatch_async(dispatch_get_main_queue(), ^{ - - // stop loading - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - - // if it comes form the sync, - // go back in the navigation - if (self.images){ - [self.navigationController popViewControllerAnimated:NO]; - [(MenuViewController*) SharedAppDelegate.menuController displayHomeScreen]; - }else{ - [self dismissViewControllerAnimated:YES completion:nil]; - } - }); - - }@catch (NSException *exception) { - dispatch_async(dispatch_get_main_queue(), ^{ - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:exception.description duration:5000]; - [alert showAlert]; - - // go to home - if (self.images){ - [self.navigationController popViewControllerAnimated:NO]; - [(MenuViewController*) SharedAppDelegate.menuController displayHomeScreen]; - }else{ - [self dismissViewControllerAnimated:YES completion:nil]; - } - }); - } - }); - - MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; - hud.labelText = @"Preparing"; - - // next visit to Newest Home does not need update - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationDisableUpdateHome object:nil]; -} - -- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{ - if (error.localizedDescription != nil){ - NSLog(@"Image could not be saved = %@", error.localizedDescription); - }else{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Image saved"); -#endif - } -} - -@end diff --git a/Photo/PhotoViewController.xib b/Photo/PhotoViewController.xib deleted file mode 100644 index e5ff31c..0000000 --- a/Photo/PhotoViewController.xib +++ /dev/null @@ -1,324 +0,0 @@ - - - - 1552 - 12D78 - 3084 - 1187.37 - 626.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - YES - IBProxyObject - IBUILabel - IBUITableView - IBUIView - - - YES - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - YES - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - YES - - - 274 - {{10, 71}, {300, 389}} - - - _NS:392 - - 2 - MC45ODAzOTIyMTc2IDAuOTUyOTQxMjM4OSAwLjkzNzI1NDk2NTMAA - - YES - 4 - IBCocoaTouchFramework - YES - NO - NO - NO - 1 - 2 - 6 - NO - 44 - 10 - 10 - - - - 290 - {{0, 10}, {320, 21}} - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Limit upload - - 1 - MCAwIDAAA - darkTextColor - - - 0 - 1 - - 1 - 14 - - - Helvetica - 14 - 16 - - NO - - - {{0, 20}, {320, 460}} - - - - 4 - - 2 - - - 2 - NO - - - IBUIScreenMetrics - - YES - - YES - - - - - YES - {320, 480} - {480, 320} - - - IBCocoaTouchFramework - Retina 3.5 Full Screen - 0 - - IBCocoaTouchFramework - - - - - YES - - - view - - - - 3 - - - - detailsPictureTable - - - - 35 - - - - labelLimitUpload - - - - 39 - - - - dataSource - - - - 30 - - - - delegate - - - - 31 - - - - - YES - - 0 - - YES - - - - - - 1 - - - YES - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 29 - - - - - 36 - - - - - - - YES - - YES - -1.CustomClassName - -1.IBPluginDependency - -2.CustomClassName - -2.IBPluginDependency - 1.IBPluginDependency - 29.IBPluginDependency - 36.IBPluginDependency - - - YES - PhotoViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - YES - - - - - - YES - - - - - 39 - - - - YES - - GAITrackedViewController - UIViewController - - IBProjectSource - ./Classes/GAITrackedViewController.h - - - - PhotoViewController - GAITrackedViewController - - YES - - YES - detailsPictureTable - labelLimitUpload - - - YES - UITableView - UILabel - - - - YES - - YES - detailsPictureTable - labelLimitUpload - - - YES - - detailsPictureTable - UITableView - - - labelLimitUpload - UILabel - - - - - IBProjectSource - ./Classes/PhotoViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 - - - YES - 3 - 2083 - - diff --git a/Photo/PhotoViewController5.xib b/Photo/PhotoViewController5.xib deleted file mode 100644 index ff6f9ef..0000000 --- a/Photo/PhotoViewController5.xib +++ /dev/null @@ -1,269 +0,0 @@ - - - - 1552 - 12D78 - 3084 - 1187.37 - 626.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUILabel - IBUITableView - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 274 - {{10, 78}, {300, 450}} - - - _NS:392 - - 2 - MC45ODAzOTIyMTc2IDAuOTUyOTQxMjM4OSAwLjkzNzI1NDk2NTMAA - - YES - 5 - IBCocoaTouchFramework - YES - NO - NO - NO - 1 - 2 - 6 - NO - 44 - 10 - 10 - - - - 290 - {{0, 12}, {320, 21}} - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Limit upload: - - 1 - MCAwIDAAA - darkTextColor - - - 0 - 1 - - 1 - 14 - - - Helvetica - 14 - 16 - - NO - - - {{0, 20}, {320, 548}} - - - - - - 2 - - - 2 - NO - - - IBUIScreenMetrics - - YES - - - - - - {320, 568} - {568, 320} - - - IBCocoaTouchFramework - Retina 4 Full Screen - 2 - - IBCocoaTouchFramework - - - - - - - view - - - - 3 - - - - detailsPictureTable - - - - 18 - - - - labelLimitUpload - - - - 26 - - - - dataSource - - - - 20 - - - - delegate - - - - 21 - - - - - - 0 - - - - - - 1 - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 6 - - - - - - 23 - - - - - - - PhotoViewController - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 27 - - - - - GAITrackedViewController - UIViewController - - IBProjectSource - ./Classes/GAITrackedViewController.h - - - - PhotoViewController - GAITrackedViewController - - UITableView - UILabel - - - - detailsPictureTable - UITableView - - - labelLimitUpload - UILabel - - - - IBProjectSource - ./Classes/PhotoViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - 2083 - - diff --git a/Photo/PrivateAuthenticationService.h b/Photo/PrivateAuthenticationService.h deleted file mode 100644 index a8bfe66..0000000 --- a/Photo/PrivateAuthenticationService.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// PrivateAccountLoginService -// Trovebox -// -// Created by Patrick Santana on 06/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -#import "Account.h" -#import "TransformationUtilities.h" - -@interface PrivateAuthenticationService : NSObject - -+ (NSArray *) signIn:(NSString*) email password:(NSString*) pwd; -+ (NSString *) recoverPassword:(NSString *) email; -+ (void) sendToServerReceipt:(NSData *) receipt forUser:(NSString *) email; - -@end diff --git a/Photo/PrivateConstants.h b/Photo/PrivateConstants.h deleted file mode 100644 index a579a9a..0000000 --- a/Photo/PrivateConstants.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// PrivateConstants.h -// Trovebox -// -// Created by Patrick Santana on 16/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface PrivateConstants : NSObject - -extern NSInteger const kPrivateappStoreID; -extern NSString * const kPrivateapplicationBundleID; -extern NSString * const kPrivateapplicationName; -extern NSString * const kPrivateGoogleAnalytics; - -@end diff --git a/Photo/PrivateConstants.m b/Photo/PrivateConstants.m deleted file mode 100644 index 60a17d4..0000000 --- a/Photo/PrivateConstants.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// PrivateConstants.m -// Trovebox -// -// Created by Patrick Santana on 16/10/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "PrivateConstants.h" - -@implementation PrivateConstants - -NSInteger const kPrivateappStoreID=511845345; -NSString * const kPrivateapplicationBundleID=@"me.OpenPhoto.ios"; -NSString * const kPrivateapplicationName=@"Trovebox"; - -NSString * const kPrivateGoogleAnalytics=@"UA-29785237-3"; - -@end diff --git a/Photo/Profile.h b/Photo/Profile.h deleted file mode 100644 index 9f77bd9..0000000 --- a/Photo/Profile.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Profile.h -// Trovebox -// -// Created by Patrick Santana on 15/10/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import - -@interface Profile : NSObject - -@property (nonatomic) BOOL paid; -@property (nonatomic, strong) NSString *limitRemaining; -@property (nonatomic, strong) NSString *limitAllowed; - -@property (nonatomic, strong) NSString *name; -@property (nonatomic, strong) NSString *photos; -@property (nonatomic, strong) NSString *albums; -@property (nonatomic, strong) NSString *storage; -@property (nonatomic, strong) NSString *tags; - -@property (nonatomic, strong) NSString *photoUrl; - -@end diff --git a/Photo/Profile.m b/Photo/Profile.m deleted file mode 100644 index 0d490af..0000000 --- a/Photo/Profile.m +++ /dev/null @@ -1,69 +0,0 @@ -// -// Profile.m -// Trovebox -// -// Created by Patrick Santana on 15/10/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import "Profile.h" - -@implementation Profile - -#define kPaid @"profile_paid" -#define kLimitRemaining @"profile_limit_remaining" -#define kLimitAllowed @"profile_limit_allowed" -#define kName @"profile_name" -#define kPhotos @"profile_photos" -#define kAlbums @"profile_albums" -#define kStorage @"profile_storage" -#define kPhotoUrl @"profile_photo_url" -#define kTags @"profile_tags" - -@synthesize paid=_paid, limitRemaining=_limitRemaining, limitAllowed=_limitAllowed, name=_name, photos=_photos, albums=_albums, storage=_storage, photoUrl=_photoUrl, tags=_tags; - -- (void) encodeWithCoder:(NSCoder *)encoder { - [encoder encodeBool:self.paid forKey:kPaid]; - if (self.limitRemaining) - [encoder encodeObject:self.limitRemaining forKey:kLimitRemaining]; - if (self.limitAllowed) - [encoder encodeObject:self.limitAllowed forKey:kLimitAllowed]; - if (self.name){ - [encoder encodeObject:self.name forKey:kName]; - // legacy code: we also save this as a separeted parameter - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - [standardUserDefaults setValue:self.name forKey:kTroveboxNameUser]; - [standardUserDefaults synchronize]; - } - if (self.photos) - [encoder encodeObject:self.photos forKey:kPhotos]; - if (self.albums) - [encoder encodeObject:self.albums forKey:kAlbums]; - if(self.storage) - [encoder encodeObject:self.storage forKey:kStorage]; - if (self.photoUrl) - [encoder encodeObject:self.photoUrl forKey:kPhotoUrl]; - if (self.tags) - [encoder encodeObject:self.tags forKey:kTags]; -} - -- (id)initWithCoder:(NSCoder *)decoder { - // create a object and set all details - self = [[Profile alloc] init]; - if (self != nil){ - self.paid = [decoder decodeBoolForKey:kPaid]; - self.limitRemaining = [decoder decodeObjectForKey:kLimitRemaining]; - self.limitAllowed= [decoder decodeObjectForKey:kLimitAllowed]; - self.name= [decoder decodeObjectForKey:kName]; - self.photos= [decoder decodeObjectForKey:kPhotos]; - self.albums= [decoder decodeObjectForKey:kAlbums]; - self.storage= [decoder decodeObjectForKey:kStorage]; - self.tags= [decoder decodeObjectForKey:kTags]; - self.photoUrl= [decoder decodeObjectForKey:kPhotoUrl]; - } - - // return the object saved - return self; -} - -@end diff --git a/Photo/ProfileViewController.h b/Photo/ProfileViewController.h deleted file mode 100644 index 3c355b5..0000000 --- a/Photo/ProfileViewController.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// ProfileViewController.h -// Trovebox -// -// Created by Patrick Santana on 05/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "WebService.h" -#import "OpenPhotoIASKAppSettingsViewController.h" -// image cache -#import - -// for clean the cache -#import "Timeline+Methods.h" -#import - -#import - -@interface ProfileViewController : GAITrackedViewController - -@property (nonatomic, weak) IBOutlet UILabel *labelAlbums; -@property (nonatomic, weak) IBOutlet UILabel *labelPhotos; -@property (nonatomic, weak) IBOutlet UILabel *labelTags; -@property (nonatomic, weak) IBOutlet UILabel *labelStorage; -@property (nonatomic, weak) IBOutlet UILabel *labelName; -@property (nonatomic, weak) IBOutlet UIImageView *photo; -@property (nonatomic, weak) IBOutlet UILabel *labelStorageDetails; -@property (nonatomic, weak) IBOutlet UILabel *labelServer; -@property (nonatomic, weak) IBOutlet UILabel *labelAccount; - -@end diff --git a/Photo/ProfileViewController.m b/Photo/ProfileViewController.m deleted file mode 100644 index 4dceff7..0000000 --- a/Photo/ProfileViewController.m +++ /dev/null @@ -1,289 +0,0 @@ -// -// ProfileViewController.m -// Trovebox -// -// Created by Patrick Santana on 05/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "ProfileViewController.h" - -@interface ProfileViewController () -- (void) loadUserDetails; -- (void) formatStorage:(long long) storage; -@end - -@implementation ProfileViewController - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - self.view.backgroundColor = [UIColor blackColor]; - self.tabBarItem.title=NSLocalizedString(@"Profile",@"Title screen Profile"); - self.title=NSLocalizedString(@"Profile",@"Title screen Profile"); - self.hidesBottomBarWhenPushed = NO; - self.wantsFullScreenLayout = YES; - self.view.backgroundColor = UIColorFromRGB(0XFAF3EF); - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(eventHandler:) - name:kNotificationProfileRemoveProgressBar - object:nil ]; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - self.title=NSLocalizedString(@"Profile",@"Title screen Profile"); - self.screenName = @"Profile Screen"; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - --(void) viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; - - // image for the navigator - [self.navigationController.navigationBar troveboxStyle:NO]; - - // title and buttons - [self.navigationItem troveboxStyle:NSLocalizedString(@"My Account", @"Menu - title for Account") defaultButtons:NO viewController:nil menuViewController:nil]; - - // menu - UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom]; - UIImage *leftButtonImage = [UIImage imageNamed:@"button-navigation-menu.png"] ; - [leftButton setImage:leftButtonImage forState:UIControlStateNormal]; - leftButton.frame = CGRectMake(0, 0, leftButtonImage.size.width, leftButtonImage.size.height); - [leftButton addTarget:self.viewDeckController action:@selector(toggleLeftView) forControlEvents:UIControlEventTouchUpInside]; - - UIBarButtonItem *customLeftButton = [[UIBarButtonItem alloc] initWithCustomView:leftButton]; - self.navigationItem.leftBarButtonItem = customLeftButton; - - // button Logout - UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Sign out", @"Sign out on Profile") style:UIBarButtonItemStylePlain target:self action:@selector(logoutButton)]; - self.navigationItem.rightBarButtonItem = customBarItem; - - // load the data from the server and show in the screen - [self loadUserDetails]; -} - -#pragma mark - Rotation - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -- (void) logoutButton{ - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Sign out. Are you sure?",@"Message to confirm if user really wants to sign out") message:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel",@"") otherButtonTitles:NSLocalizedString(@"Sign out",@""),nil]; - [alert show]; -} - -- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { - if (buttonIndex == 1){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Invalidate user information"); -#endif - - AuthenticationService* helper = [[AuthenticationService alloc]init]; - [helper logout]; - [(MenuViewController*) SharedAppDelegate.menuController displayHomeScreen]; - } -} - -- (void) loadUserDetails -{ - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Loading Profile details"); -#endif - - if ( [SharedAppDelegate internetActive] == NO ){ - // problem with internet, show message to user - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please check your internet connection",@"")]; - [alert showAlert]; - }else if ([AuthenticationService isLogged]){ - - // display - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; - hud.labelText = @"Refreshing"; - - dispatch_queue_t get_user_details = dispatch_queue_create("get_user_details", NULL); - dispatch_async(get_user_details, ^{ - - @try{ - WebService *service = [[WebService alloc] init]; - NSDictionary *rawAnswer = [service getUserDetails]; - NSDictionary *result = [rawAnswer objectForKey:@"result"]; - - // display details - dispatch_async(dispatch_get_main_queue(), ^{ - if ([result class] != [NSNull class]) { - - // email - [self.labelServer setText:[result objectForKey:@"email"]]; - // name - NSString *name = [result objectForKey:@"name"]; - [self.labelName setText:name]; - // url thumb - [self.photo setImageWithURL:[NSURL URLWithString:[result objectForKey:@"photoUrl"]] - placeholderImage:nil - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType){ - if (error){ - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Couldn't download the image",@"message when couldn't download the image in the profile screen") duration:5000]; - [alert showAlert]; -#ifdef DEVELOPMENT_ENABLED - NSLog(@"URL failed to load %@", [result objectForKey:@"photoUrl"]); -#endif - }else{ - // Begin a new image that will be the new image with the rounded corners - // (here with the size of an UIImageView) - UIGraphicsBeginImageContextWithOptions(self.photo.bounds.size, NO, 1.0); - - // Add a clip before drawing anything, in the shape of an rounded rect - [[UIBezierPath bezierPathWithRoundedRect:self.photo.bounds - cornerRadius:10.0] addClip]; - // Draw your image - [image drawInRect:self.photo.bounds]; - - // Get the image, here setting the UIImageView image - self.photo.image = UIGraphicsGetImageFromCurrentImageContext(); - - // Lets forget about that we were drawing - UIGraphicsEndImageContext(); - } - }]; - - // paid user - if (![SharedAppDelegate isHosted]){ - [self.labelAccount setText:NSLocalizedString(@"Self-hosted",@"Profile - Self-hosted text")]; - }else{ - if ([[result objectForKey:@"paid"] boolValue]) - [self.labelAccount setText:NSLocalizedString(@"Pro",@"Profile - Pro text")]; - else - [self.labelAccount setText:NSLocalizedString(@"Free",@"Profile - Free text")]; - } - - NSDictionary* counts = [result objectForKey:@"counts"]; - // albums - [self.labelAlbums setText:[NSString stringWithFormat:@"%@", [counts objectForKey:@"albums"]]]; - // photos - [self.labelPhotos setText:[NSString stringWithFormat:@"%@", [counts objectForKey:@"photos"]]]; - - // storage - NSString *storage = [counts objectForKey:@"storage_str"]; - if (storage != nil){ - [self formatStorage:[storage longLongValue]]; - } - - // tags - [self.labelTags setText:[NSString stringWithFormat:@"%@",[counts objectForKey:@"tags"]]]; - - // limits - NSDictionary* limits = [result objectForKey:@"limit"]; - - // save details locally - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - [standardUserDefaults setValue:name forKey:kTroveboxNameUser]; - [standardUserDefaults setValue:[result objectForKey:@"email"] forKey:kTroveboxEmailUser]; - [standardUserDefaults setValue:[NSDate date] forKey:kProfileLatestUpdateDate]; - [standardUserDefaults setValue:[result objectForKey:@"paid"] forKey:kProfileAccountType]; - [standardUserDefaults setValue:[limits objectForKey:@"remaining"] forKey:kProfileLimitRemaining]; - [standardUserDefaults setValue:[limits objectForKey:@"allowed"] forKey:kProfileLimitAllowed]; - - [standardUserDefaults synchronize]; - } - - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - }); - }@catch (NSException* e) { - dispatch_async(dispatch_get_main_queue(), ^{ - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:[e description]]; - [alert showAlert]; - }); - - } - }); - } - -} - -- (void) formatStorage:(long long) storage -{ - int kb = 1024; - - // less than 1mb - if(storage < 1048576){ - storage = ceil(storage/kb); - [self.labelStorage setText:[NSString stringWithFormat:@"%llu",storage]]; - [self.labelStorageDetails setText:NSLocalizedString(@"KB used",@"Profile - size storage")]; - }else if(storage < 1073741824){ - // less than 1gb - storage = ceil(storage/pow(kb,2)); - [self.labelStorage setText:[NSString stringWithFormat:@"%llu",storage]]; - [self.labelStorageDetails setText:NSLocalizedString(@"MB used",@"Profile - size storage")]; - }else{ - storage = ceil(storage/pow(kb,3)); - [self.labelStorage setText:[NSString stringWithFormat:@"%llu",storage]]; - [self.labelStorageDetails setText:NSLocalizedString(@"GB used",@"Profile - size storage")]; - } -} - -- (void) eventHandler: (NSNotification *) notification{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"###### Event triggered: %@", notification); -#endif - - if ([notification.name isEqualToString:kNotificationProfileRemoveProgressBar]){ - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - } -} - -- (void)viewDidUnload { - [self setLabelAlbums:nil]; - [self setLabelPhotos:nil]; - [self setLabelTags:nil]; - [self setLabelStorage:nil]; - - [self setLabelName:nil]; - [self setPhoto:nil]; - [self setLabelStorageDetails:nil]; - [self setLabelServer:nil]; - [self setLabelAccount:nil]; - - [super viewDidUnload]; -} -@end diff --git a/Photo/ProfileViewController.xib b/Photo/ProfileViewController.xib deleted file mode 100644 index d903f88..0000000 --- a/Photo/ProfileViewController.xib +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/ProfileViewControlleriPad.xib b/Photo/ProfileViewControlleriPad.xib deleted file mode 100644 index e9b2c97..0000000 --- a/Photo/ProfileViewControlleriPad.xib +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/SHA1.h b/Photo/SHA1.h deleted file mode 100644 index f75c917..0000000 --- a/Photo/SHA1.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// SHA1Utilite.h -// Trovebox -// -// Created by Patrick Santana on 06/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@interface SHA1 : NSObject - -+ (NSString*) sha1:(NSString*) input; -+ (NSString*) sha1File:(NSData *) data; - -@end diff --git a/Photo/SHA1.m b/Photo/SHA1.m deleted file mode 100644 index 2fb4c11..0000000 --- a/Photo/SHA1.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// SHA1Utilite.m -// Trovebox -// -// Created by Patrick Santana on 06/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "SHA1.h" - -@implementation SHA1 - - -+ (NSString*) sha1:(NSString*) input{ - const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; - NSData *data = [NSData dataWithBytes:cstr length:input.length]; - - return [SHA1 sha1File:data]; -} - -+ (NSString*) sha1File:(NSData *) data{ - uint8_t digest[CC_SHA1_DIGEST_LENGTH]; - CC_SHA1(data.bytes, data.length, digest); - - NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; - - for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) - [output appendFormat:@"%02x", digest[i]]; - - return output; -} - -@end diff --git a/Photo/Settings.bundle/Root.plist b/Photo/Settings.bundle/Root.plist deleted file mode 100644 index 77295bf..0000000 --- a/Photo/Settings.bundle/Root.plist +++ /dev/null @@ -1,85 +0,0 @@ - - - - - PreferenceSpecifiers - - - Type - PSGroupSpecifier - Title - Account - - - DefaultValue - http://current.trovebox.com - Type - PSTitleValueSpecifier - Title - Website - Key - account_server - - - Type - PSGroupSpecifier - Title - Photos - - - DefaultValue - - Key - photos_are_private - Title - Private by default - Type - PSToggleSwitchSpecifier - - - DefaultValue - - Key - photos_auto_sync - Title - Auto Sync by WiFi - Type - PSToggleSwitchSpecifier - - - Title - About - Type - PSGroupSpecifier - - - Type - PSTitleValueSpecifier - Title - Version - Key - version_application_installed - - - DefaultValue - website - File - https://trovebox.com/ - Title - Trovebox - Type - IASKOpenURLSpecifier - - - Key - CleanCache - Title - Clear my cache - Type - IASKButtonSpecifier - - - StringsTable - Root - - diff --git a/Photo/Settings.bundle/en.lproj/Root.strings b/Photo/Settings.bundle/en.lproj/Root.strings deleted file mode 100644 index 91ca5ea..0000000 Binary files a/Photo/Settings.bundle/en.lproj/Root.strings and /dev/null differ diff --git a/Photo/SyncService.h b/Photo/SyncService.h deleted file mode 100644 index c240299..0000000 --- a/Photo/SyncService.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// SyncService.h -// Trovebox -// -// Created by Patrick Santana on 24/05/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -#import -#import - -@protocol SyncServiceDelegate -@required -- (void) information:(NSString*) info; -- (void) finish; -@end - -@interface SyncService : NSObject{ - // better to keep here for faster access - schedules the asset read - ALAssetsLibrary* assetsLibrary; - id delegate; - NSInteger counter; - NSInteger counterTotal; -} - -// protocol that will send the response -@property (nonatomic, weak) id delegate; -@property (nonatomic) NSInteger counter; -@property (nonatomic) NSInteger counterTotal; - - -// it will load all images into the coredata entity SyncPhotos -- (void) loadLocalImagesOnDatabase; - -@end diff --git a/Photo/SyncService.m b/Photo/SyncService.m deleted file mode 100644 index a39a968..0000000 --- a/Photo/SyncService.m +++ /dev/null @@ -1,141 +0,0 @@ -// -// SyncService.m -// Trovebox -// -// Created by Patrick Santana on 24/05/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "SyncService.h" - -@interface SyncService() -- (void) loadAssets:(ALAssetsGroup *) group; -- (void) loadAssetsGroup; -@end - -@implementation SyncService -@synthesize delegate=_delegate,counter=_counter,counterTotal=_counterTotal; - -- (id)init -{ - self = [super init]; - if (self) { - // for access local images - assetsLibrary = [[ALAssetsLibrary alloc] init]; - } - return self; -} - -- (void) loadLocalImagesOnDatabase -{ - [self loadAssetsGroup]; -} - - -- (void) loadAssets:(ALAssetsGroup *) group -{ - // load image - ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) - { - @autoreleasepool { - ALAssetRepresentation *rep = [myasset defaultRepresentation]; - uint8_t* buffer = malloc([rep size]); - - NSError* error = NULL; - NSUInteger bytes = [rep getBytes:buffer fromOffset:0 length:[rep size] error:&error]; - NSData *data = nil; - - if (bytes == [rep size]){ - data = [NSData dataWithBytes:buffer length:bytes] ; - if (data != nil){ - // calculate hash - NSLog(@"Hash = %@ from group %@",[SHA1 sha1File:data],group); - }else{ - NSLog(@"Error to get the data from the library"); - } - }else{ - NSLog(@"Error '%@' reading bytes", [error localizedDescription]); - } - free(buffer); - } - //calculation to know if it is finished - self.counter = self.counter - 1; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Conter %d",self.counter); -#endif - - if (self.counter <1){ - // finish - [self.delegate finish]; - } - }; - - // - ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){ - NSLog(@"Error '%@' getting asset from library", [myerror localizedDescription]); - }; - - // filter all photos - [group setAssetsFilter:[ALAssetsFilter allPhotos]]; - - // get photos for each group - [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) - { - if(result == nil){ - return; - } - - // add image - [assetsLibrary assetForURL:[[result valueForProperty:ALAssetPropertyURLs] valueForKey:[[[result valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] - resultBlock:resultblock - failureBlock:failureblock]; - }]; -} -- (void) loadAssetsGroup -{ - self.counter = 0; - - // Load Albums into assetGroups - // Group enumerator Block - void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) - { - if (group == nil){ - return; - } - - if ([[group valueForProperty:ALAssetsGroupPropertyType] intValue] != ALAssetsGroupPhotoStream){ - // [group setAssetsFilter:[ALAssetsFilter allPhotos]]; - self.counter = self.counter + [group numberOfAssets]; -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Album: %@",group); -#endif - [self loadAssets:group]; - } - - }; - - // Group Enumerator Failure Block - void (^assetGroupEnumberatorFailure)(NSError *) = ^(NSError *error) { - NSLog(@"A problem occured %@", [error description]); - }; - - // Enumerate Albums - [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll - usingBlock:assetGroupEnumerator - failureBlock:assetGroupEnumberatorFailure]; -} - -@end diff --git a/Photo/SyncViewController.h b/Photo/SyncViewController.h deleted file mode 100644 index 29f8e83..0000000 --- a/Photo/SyncViewController.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// SyncViewController.h -// Trovebox -// -// Created by Patrick Santana on 18/06/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "AssetsLibraryUtilities.h" -#import -#import "MBProgressHUD.h" -#import "Synced+Methods.h" -#import "ELCAsset.h" -#import "ELCAssetCell.h" -#import "ELCImagePickerController.h" -#import "PhotoViewController.h" - -@interface SyncViewController : GAITrackedViewController -{ - ALAssetsGroup *assetGroup; - - NSMutableArray *elcAssets; - int selectedAssets; - - id parent; - - NSOperationQueue *queue; - ALAssetsLibrary *library; - - NSMutableArray *imagesAlreadyUploaded; - - BOOL loaded; - int assetsNumber; -} - -@property (nonatomic, weak) id parent; -@property (nonatomic, strong) ALAssetsGroup *assetGroup; -@property (nonatomic, strong) NSMutableArray *elcAssets; -@property (nonatomic, strong) NSMutableArray *imagesAlreadyUploaded; -@property (nonatomic, weak) IBOutlet UITableView *tableView; - --(int) totalSelectedAssets; --(void) preparePhotos; --(void) doneAction:(id)sender; - -@end \ No newline at end of file diff --git a/Photo/SyncViewController.m b/Photo/SyncViewController.m deleted file mode 100644 index 172b728..0000000 --- a/Photo/SyncViewController.m +++ /dev/null @@ -1,442 +0,0 @@ -// -// SyncViewController.m -// Trovebox -// -// Created by Patrick Santana on 18/06/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "SyncViewController.h" - -@interface SyncViewController () --(void) loadSavedPhotos; -@end - -@implementation SyncViewController - -@synthesize parent=_parent; -@synthesize assetGroup=_assetGroup, elcAssets=_elcAssets; -@synthesize imagesAlreadyUploaded; -@synthesize tableView=_tableView; - --(void)viewDidLoad -{ - [super viewDidLoad]; - [self.tableView setAllowsSelection:NO]; - self.screenName = @"Sync Screen"; - - [self.navigationController.navigationBar troveboxStyle:NO]; - - // table colors - self.tableView.backgroundColor = UIColorFromRGB(0XFAF3EF); - self.tableView.separatorColor = UIColorFromRGB(0xCDC9C1); - - - NSMutableArray *tempArray = [[NSMutableArray alloc] init]; - self.elcAssets = tempArray; - - // title and buttons - [self.navigationItem troveboxStyle:NSLocalizedString(@"Sync", @"Menu - title for Sync") defaultButtons:YES viewController:self.viewDeckController menuViewController:(MenuViewController*) self.viewDeckController.leftController]; - - // button NEXT - UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Next", @"Next button on Sync") style:UIBarButtonItemStylePlain target:self action:@selector(doneAction:)]; - self.navigationItem.rightBarButtonItem = customBarItem; - - // no separator - [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; - - library = [[ALAssetsLibrary alloc] init]; - loaded = NO; - - // load all urls - self.imagesAlreadyUploaded = [Synced getPathsInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - [self loadSavedPhotos]; -} - -- (void) viewWillAppear:(BOOL)animated -{ - // refresh profile details - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationProfileRefresh object:nil]; - - if (loaded == YES){ - MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.viewDeckController.view animated:YES]; - hud.labelText = @"Loading"; - // load all urls - self.imagesAlreadyUploaded = [Synced getPathsInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - [self performSelectorInBackground:@selector(preparePhotos) withObject:nil]; - }else{ - loaded = YES; - } - - // check if users wants to enable auto sync - if (![[NSUserDefaults standardUserDefaults] valueForKey:kAutoSyncMessageDisplayed] || [[NSUserDefaults standardUserDefaults] boolForKey:kAutoSyncMessageDisplayed] == NO){ - // show message - // limit reached, - UIAlertView *alert = [[UIAlertView alloc] initWithTitle: NSLocalizedString(@"Enable Auto Sync", nil) - message: NSLocalizedString(@"Would you like to enable auto sync? Your photos will be upload as private over wifi only.", @"Message to enable auto sync") - delegate:self - cancelButtonTitle:NSLocalizedString(@"No",nil) - otherButtonTitles:NSLocalizedString(@"Yes",nil), nil]; - [alert show]; - } - -} - --(void)preparePhotos { - if (loaded == YES){ - // in the case we had already loaded, let's clean the assets - // to not have duplicate - [self.elcAssets removeAllObjects]; - } - - @autoreleasepool { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"enumerating photos"); - NSLog(@"Assets Number %i", assetsNumber); - NSLog(@"numberOfAssets %i", [self.assetGroup numberOfAssets]); -#endif - - if ([self.assetGroup numberOfAssets] != assetsNumber){ - // we need to load again - [self loadSavedPhotos]; - }else{ - NSMutableArray *startArray = [NSMutableArray array]; - [self.assetGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) - { - if(result == nil) - { - return; - } - - // check if user already uploaded - NSString *asset = [AssetsLibraryUtilities getAssetsUrlId:result.defaultRepresentation.url] ; - - BOOL alreadyUploaded = [self.imagesAlreadyUploaded containsObject:asset]; - ELCAsset *elcAsset = [[ELCAsset alloc] initWithAsset:result alreadyUploaded:alreadyUploaded type:[result valueForProperty:ALAssetPropertyType] duration:[result valueForProperty:ALAssetPropertyDuration]]; - [elcAsset setParent:self]; - [startArray addObject:elcAsset]; - }]; - - //revert the order - [self.elcAssets addObjectsFromArray:[[startArray reverseObjectEnumerator] allObjects]]; - - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"done enumerating photos"); -#endif - [self.tableView reloadData]; - } - } - - [MBProgressHUD hideHUDForView:self.viewDeckController.view animated:YES]; -} - -- (void) doneAction:(id)sender { - @try { - NSMutableArray *selectedAssetsImages = [[NSMutableArray alloc] init]; - - for(ELCAsset *elcAsset in self.elcAssets) - { - if([elcAsset selected]) { - [selectedAssetsImages addObject:[elcAsset asset]]; - } - } - - [self.parent selectedAssets:selectedAssetsImages]; - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action" - action:@"buttonPress" - label:@"Sync - next pressed" - value:nil] build]]; - }@catch (NSException *exception) { - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:@"Error to select your photos" duration:3000]; - [alert showAlert]; - - NSLog(@"A problem occured when NEXT is clicked on SyncController: %@", [exception description]); - [self loadSavedPhotos]; - } -} - -#pragma mark UITableViewDataSource Delegate Methods - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - // Return the number of sections. - return 1; -} - - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if ([DisplayUtilities isIPad]){ - return ceil([self.elcAssets count] / 9.0); - }else{ - return ceil([self.elcAssets count] / 4.0); - } -} - -- (NSArray*)assetsForIndexPath:(NSIndexPath*)_indexPath { - if ([DisplayUtilities isIPad]){ - int index = (_indexPath.row*9); - int maxIndex = (_indexPath.row*9+8); - - if(maxIndex < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - [self.elcAssets objectAtIndex:index+3], - [self.elcAssets objectAtIndex:index+4], - [self.elcAssets objectAtIndex:index+5], - [self.elcAssets objectAtIndex:index+6], - [self.elcAssets objectAtIndex:index+7], - [self.elcAssets objectAtIndex:index+8], - nil]; - }else if(maxIndex-1 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - [self.elcAssets objectAtIndex:index+3], - [self.elcAssets objectAtIndex:index+4], - [self.elcAssets objectAtIndex:index+5], - [self.elcAssets objectAtIndex:index+6], - [self.elcAssets objectAtIndex:index+7], - nil]; - }else if(maxIndex-2 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - [self.elcAssets objectAtIndex:index+3], - [self.elcAssets objectAtIndex:index+4], - [self.elcAssets objectAtIndex:index+5], - [self.elcAssets objectAtIndex:index+6], - nil]; - }else if(maxIndex-3 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - [self.elcAssets objectAtIndex:index+3], - [self.elcAssets objectAtIndex:index+4], - [self.elcAssets objectAtIndex:index+5], - nil]; - }else if(maxIndex-4 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - [self.elcAssets objectAtIndex:index+3], - [self.elcAssets objectAtIndex:index+4], - nil]; - }else if(maxIndex-5 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - [self.elcAssets objectAtIndex:index+3], - nil]; - }else if(maxIndex-6 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - nil]; - }else if(maxIndex-7 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - nil]; - }else if(maxIndex-8 < [self.elcAssets count]) { - return [NSArray arrayWithObject:[self.elcAssets objectAtIndex:index]]; - } - - - }else{ - int index = (_indexPath.row*4); - int maxIndex = (_indexPath.row*4+3); - - if(maxIndex < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - [self.elcAssets objectAtIndex:index+3], - nil]; - }else if(maxIndex-1 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - [self.elcAssets objectAtIndex:index+2], - nil]; - }else if(maxIndex-2 < [self.elcAssets count]) { - return [NSArray arrayWithObjects:[self.elcAssets objectAtIndex:index], - [self.elcAssets objectAtIndex:index+1], - nil]; - }else if(maxIndex-3 < [self.elcAssets count]) { - return [NSArray arrayWithObject:[self.elcAssets objectAtIndex:index]]; - } - } - return nil; -} - -// Customize the appearance of table view cells. -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - - static NSString *CellIdentifier = @"Cell"; - - ELCAssetCell *cell = (ELCAssetCell*)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - - if (cell == nil){ - cell = [[ELCAssetCell alloc] initWithAssets:[self assetsForIndexPath:indexPath] reuseIdentifier:CellIdentifier]; - cell.backgroundColor = [UIColor clearColor]; - }else{ - [cell setAssets:[self assetsForIndexPath:indexPath]]; - } - - return cell; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - - return 79; -} - -- (int)totalSelectedAssets { - - int count = 0; - - for(ELCAsset *asset in self.elcAssets) - { - if([asset selected]) - { - count++; - } - } - - return count; -} - -- (void) loadSavedPhotos -{ - // the Saved Photos Album - dispatch_async(dispatch_get_main_queue(), ^ - { - // Group enumerator Block - void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) - { - if (group == nil) - { - return; - } - - if ( [[group valueForProperty:ALAssetsGroupPropertyType] intValue] == ALAssetsGroupSavedPhotos) { - self.assetGroup = group; - // just bring photos - [self.assetGroup setAssetsFilter:[ALAssetsFilter allPhotos]]; - - MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.viewDeckController.view animated:YES]; - hud.labelText = NSLocalizedString(@"Loading", nil); - assetsNumber = [self.assetGroup numberOfAssets]; - - // with the local group, we can load the images - [self performSelectorInBackground:@selector(preparePhotos) withObject:nil]; - } - }; - - // Group Enumerator Failure Block - void (^assetGroupEnumberatorFailure)(NSError *) = ^(NSError *error) { - - UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Album Error: %@ - %@", [error localizedDescription], [error localizedRecoverySuggestion]] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; - [alert show]; - - NSLog(@"A problem occured %@", [error description]); - }; - - // Show only the Saved Photos - [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos - usingBlock:assetGroupEnumerator - failureBlock:assetGroupEnumberatorFailure]; - - }); - -} - -// Sync -#pragma mark ELCImagePickerControllerDelegate Methods - -- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Selected some images"); -#endif - - if (info != nil && [info count]>0 ){ - // convert to nsarray - NSMutableArray *urls = [NSMutableArray array]; - for(NSDictionary *dict in info) { - [urls addObject:[dict objectForKey:UIImagePickerControllerReferenceURL]]; - } - - PhotoViewController* controller = [[PhotoViewController alloc]initWithNibName:[DisplayUtilities getCorrectNibName:@"PhotoViewController"] bundle:nil images:urls]; - [picker pushViewController:controller animated:YES]; - }else{ - // no photo select - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:@"Please select at least 1 photo." duration:5000]; - [alert showAlert]; - } - -} - -- (void)elcImagePickerControllerDidCancel:(ELCImagePickerController *)picker { - // this one is not used. -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Cancel Sync"); -#endif -} - - -- (void)viewDidUnload { - [self setTableView:nil]; - [super viewDidUnload]; -} - -#pragma mark - Rotation - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - if (buttonIndex == 1){ - // Yes - [standardUserDefaults setBool:YES forKey:kAutoSyncEnabled]; - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action" - action:@"buttonPress" - label:@"Auto Sync - select YES" - value:nil] build]]; - }else{ - // No - [standardUserDefaults setBool:NO forKey:kAutoSyncEnabled]; - [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action" - action:@"buttonPress" - label:@"Auto Sync - select NO" - value:nil] build]]; - } - - // set any value in the variable that we showed the message - [standardUserDefaults setBool:YES forKey:kAutoSyncMessageDisplayed]; -} -@end diff --git a/Photo/SyncViewController.xib b/Photo/SyncViewController.xib deleted file mode 100644 index d736c1f..0000000 --- a/Photo/SyncViewController.xib +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/Synced+Methods.h b/Photo/Synced+Methods.h deleted file mode 100644 index b444175..0000000 --- a/Photo/Synced+Methods.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Synced+Photos.h -// Trovebox -// -// Created by Patrick Santana on 21/05/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -#import "Synced.h" - -@interface Synced (Photo) - -// constant -extern NSString * const kSyncedStatusTypeUploaded; - -+ (NSMutableArray *) getPathsInManagedObjectContext:(NSManagedObjectContext *)context; -+ (void) deleteAllSyncedPhotosInManagedObjectContext:(NSManagedObjectContext *)context; - -@end diff --git a/Photo/Synced+Methods.m b/Photo/Synced+Methods.m deleted file mode 100644 index df477b5..0000000 --- a/Photo/Synced+Methods.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// Synced+Photo.m -// Trovebox -// -// Created by Patrick Santana on 21/05/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Synced+Methods.h" - -@implementation Synced (Methods) - -// -// Constast for sync uploaded -// -NSString * const kSyncedStatusTypeUploaded = @"Uploaded"; - -+ (NSMutableArray *) getPathsInManagedObjectContext:(NSManagedObjectContext *)context -{ - NSMutableArray *array = [NSMutableArray array]; - - // get all syncs and put in the dictionary - // with all paths - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Synced"]; - - NSError *error = nil; - NSArray *matches = [context executeFetchRequest:request error:&error]; - - if (error){ - NSLog(@"Error to get all paths from Synced on managed object context = %@",[error localizedDescription]); - return nil; - } - - for (Synced *model in matches) { - [array addObject:model.filePath]; - } - - return array; -} - -+ (void) deleteAllSyncedPhotosInManagedObjectContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; - [fetchRequest setEntity:[NSEntityDescription entityForName:@"Synced" inManagedObjectContext:context]]; - [fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID - - NSError *error = nil; - NSArray *photos = [context executeFetchRequest:fetchRequest error:&error]; - if (error){ - NSLog(@"Error getting timeline to delete all from managed object context = %@",[error localizedDescription]); - } - - for (NSManagedObject *photo in photos) { - [context deleteObject:photo]; - } - - NSError *saveError = nil; - if (![context save:&saveError]){ - NSLog(@"Error delete all photos from managed object context = %@",[error localizedDescription]); - } -} - -@end diff --git a/Photo/Synced.h b/Photo/Synced.h deleted file mode 100644 index bd204e6..0000000 --- a/Photo/Synced.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// Synced.h -// Trovebox -// -// Created by Patrick Santana on 29/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - - -@interface Synced : NSManagedObject - -@property (nonatomic, retain) NSString * fileHash; -@property (nonatomic, retain) NSString * filePath; -@property (nonatomic, retain) NSString * status; -@property (nonatomic, retain) NSString * userUrl; - -@end diff --git a/Photo/Synced.m b/Photo/Synced.m deleted file mode 100644 index ecdf28d..0000000 --- a/Photo/Synced.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// Synced.m -// Trovebox -// -// Created by Patrick Santana on 29/03/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Synced.h" - - -@implementation Synced - -@dynamic fileHash; -@dynamic filePath; -@dynamic status; -@dynamic userUrl; - -@end diff --git a/Photo/TMPhotoQuiltViewCell.h b/Photo/TMPhotoQuiltViewCell.h deleted file mode 100644 index 2689f7a..0000000 --- a/Photo/TMPhotoQuiltViewCell.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// TMQuiltView -// -// Created by Bruno Virlet on 7/20/12. -// -// Copyright (c) 2012 1000memories - -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR -// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -// - -#import - -// image cache -#import - -@interface TMPhotoQuiltViewCell : TMQuiltViewCell - -@property (nonatomic, strong) UIImageView *photoView; - -@end diff --git a/Photo/TMPhotoQuiltViewCell.m b/Photo/TMPhotoQuiltViewCell.m deleted file mode 100644 index af240b0..0000000 --- a/Photo/TMPhotoQuiltViewCell.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// TMQuiltView -// -// Created by Bruno Virlet on 7/20/12. -// -// Copyright (c) 2012 1000memories - -// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), -// to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR -// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. -// - - -#import "TMPhotoQuiltViewCell.h" - -const CGFloat kTMPhotoQuiltViewMargin = 2; - -@implementation TMPhotoQuiltViewCell - -@synthesize photoView = _photoView; - -- (void)dealloc { - _photoView = nil; -} - -- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithReuseIdentifier:reuseIdentifier]; - if (self) { - self.backgroundColor = [UIColor whiteColor]; - } - return self; -} - -- (UIImageView *)photoView { - if (!_photoView) { - _photoView = [[UIImageView alloc] init]; - _photoView.contentMode = UIViewContentModeScaleAspectFill; - _photoView.clipsToBounds = YES; - [self addSubview:_photoView]; - } - return _photoView; -} - -- (void)layoutSubviews { - self.photoView.frame = CGRectInset(self.bounds, kTMPhotoQuiltViewMargin, kTMPhotoQuiltViewMargin); -} - -@end diff --git a/Photo/Tag.h b/Photo/Tag.h deleted file mode 100644 index 2d43361..0000000 --- a/Photo/Tag.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Tag.h -// Trovebox -// -// Created by Patrick Santana on 11/08/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@interface Tag : NSObject - -// constructor with tag name -- (id)initWithTagName:(NSString*) name Quantity:(NSInteger) qtd; - -@property (nonatomic, copy) NSString *name; -@property (nonatomic) NSInteger quantity; -@property (nonatomic) BOOL selected; - -@end diff --git a/Photo/Tag.m b/Photo/Tag.m deleted file mode 100644 index bd05784..0000000 --- a/Photo/Tag.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// Tag.m -// Trovebox -// -// Created by Patrick Santana on 11/08/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Tag.h" - -@implementation Tag - -@synthesize name=_name,quantity=_quantity,selected=_selected; - -- (id)initWithTagName:(NSString*) name Quantity:(NSInteger) qtd{ - self = [super init]; - if (self) { - // Initialization code here. - self.name=name; - self.quantity = qtd; - // by default no tag is selected. This is used for READ ONLY proposal - self.selected = NO; - } - - return self; -} - -@end diff --git a/Photo/TagViewController.h b/Photo/TagViewController.h deleted file mode 100644 index 5d9ff7f..0000000 --- a/Photo/TagViewController.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// TagViewController.h -// Trovebox -// -// Created by Patrick Santana on 11/08/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Tag.h" -#import "TSAlertView.h" -#import "WebService.h" -#import "MBProgressHUD.h" -#import "PhotoAlertView.h" - -@interface TagViewController : UITableViewController - -@property (nonatomic, strong) NSMutableArray *tags; - --(void) setReadOnly; --(NSArray*) getSelectedTags; --(NSString *) getSelectedTagsInJsonFormat; - -@end diff --git a/Photo/TagViewController.m b/Photo/TagViewController.m deleted file mode 100644 index 16e1828..0000000 --- a/Photo/TagViewController.m +++ /dev/null @@ -1,307 +0,0 @@ -// -// TagViewController.m -// Trovebox -// -// Created by Patrick Santana on 11/08/11. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "TagViewController.h" - -@interface TagViewController() -- (void) loadTags; -@property (nonatomic) BOOL readOnly; - -@end - -@implementation TagViewController - -@synthesize tags = _tags, readOnly = _readOnly; - - -- (id)initWithStyle:(UITableViewStyle)style -{ - self = [super initWithStyle:style]; - if (self) { - // initialize the object tags - self.tags = [NSMutableArray array]; - - // set the read only by default as NO - self.readOnly = NO; - } - return self; -} - -- (void) setReadOnly -{ - self.readOnly = YES; -} - -// this method return only the tag's name. -- (NSArray*) getSelectedTags -{ - NSMutableArray *array = [NSMutableArray array]; - - for (id object in self.tags) { - Tag *tag = (Tag*) object; - if (tag.selected == YES){ - [array addObject:tag.name]; - } - } - - return array; -} - -// this method return the tag's name but in the format to send to openphoto server -- (NSString *) getSelectedTagsInJsonFormat -{ - NSMutableString *result = [NSMutableString string]; - - NSArray *array = [self getSelectedTags]; - int counter = 1; - - if (array != nil && [array count]>0){ - for (id string in array) { - [result appendFormat:@"%@",string]; - - // add the , - if ( counter < [array count]){ - [result appendFormat:@", "]; - } - - counter++; - } - } - - return result; -} - -#pragma mark - View lifecycle -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // image for the navigator - [self.navigationController.navigationBar troveboxStyle:NO]; - - if ( self.readOnly){ - [self.navigationItem troveboxStyle:NSLocalizedString(@"Tags", @"Menu - title for Tags") defaultButtons:NO viewController:nil menuViewController:nil]; - - // button for create a new tag - UIBarButtonItem *customBarItem2 = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Add", @"Add") style:UIBarButtonItemStylePlain target:self action:@selector(addNewTag)]; - self.navigationItem.rightBarButtonItem = customBarItem2; - - if ([self.tags count] == 0 ){ - // just load in case there is no tags. - // we do that to keep the past selection - [self loadTags]; - } - - }else{ - // title and buttons - [self.navigationItem troveboxStyle:NSLocalizedString(@"Tags", @"Menu - title for Tags") defaultButtons:YES viewController:self.viewDeckController menuViewController:(MenuViewController*) self.viewDeckController.leftController]; - } - - self.view.backgroundColor = UIColorFromRGB(0XFAF3EF); - self.tableView.separatorColor = UIColorFromRGB(0xC8BEA0); - - UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; - refreshControl.tintColor = UIColorFromRGB(0x3B2414); - self.refreshControl = refreshControl; - [refreshControl addTarget:self action:@selector(loadingData) forControlEvents:UIControlEventValueChanged]; - -} - -#pragma mark - -#pragma mark Refresh Methods -- (void)loadingData -{ - [self loadTags]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - // load all tags - if (self.readOnly == NO || [self.tags count] == 0 ){ - [self loadTags]; - } -} - - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - // Return YES for supported orientations - return YES; -} - --(void) addNewTag -{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Adding new tag"); -#endif - - TSAlertView* av = [[TSAlertView alloc] initWithTitle:NSLocalizedString(@"Enter new tag name",@"Tag screen - create a new screen") message:nil delegate:self - cancelButtonTitle:NSLocalizedString(@"Cancel",nil) - otherButtonTitles:NSLocalizedString(@"OK",nil),nil]; - av.style = TSAlertViewStyleInput; - [av show]; -} - -// after animation -- (void) alertView: (TSAlertView *) alertView didDismissWithButtonIndex: (NSInteger) buttonIndex -{ - // cancel - if( buttonIndex == 0 || alertView.inputTextField.text == nil || alertView.inputTextField.text.length==0) - return; - - // add the new tag in the list and select it - Tag *newTag = [[Tag alloc]initWithTagName:alertView.inputTextField.text Quantity:0]; - newTag.selected = YES; - [self.tags addObject:newTag]; - [self.tableView reloadData]; -} - -#pragma mark - Table view data source - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - // Return the number of sections. - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - // Return the number of rows in the section. - return self.tags.count; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - static NSString *CellIdentifier = @"Cell"; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; - cell.backgroundColor = [UIColor clearColor]; - } - NSUInteger row = [indexPath row]; - - Tag *tag = [self.tags objectAtIndex:row]; - cell.textLabel.text=tag.name; - if (self.readOnly == NO){ - - // details quantity - cell.detailTextLabel.text=[NSString stringWithFormat:@"%d", tag.quantity]; - cell.detailTextLabel.textColor = UIColorFromRGB(0xE6501E); - - cell.accessoryType = UITableViewCellAccessoryNone; - }else{ - // check if it selected or not - if(tag.selected == YES) - cell.accessoryType = UITableViewCellAccessoryCheckmark; - else - cell.accessoryType = UITableViewCellAccessoryNone; - } - - return cell; -} - -#pragma mark - Table view delegate - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - // get the tag - NSUInteger row = [indexPath row]; - Tag *tag = [self.tags objectAtIndex:row]; - - if (tag.quantity >0 && self.readOnly == NO){ - // open the gallery with a tag that contains at least one picture. - UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:[[GalleryViewController alloc]initWithTag:tag]]; - self.viewDeckController.centerController = nav; - [NSThread sleepForTimeInterval:(300+arc4random()%700)/1000000.0]; // mimic delay... not really necessary - } - - if (self.readOnly == YES){ - UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; - NSUInteger row = [indexPath row]; - Tag *tag = [self.tags objectAtIndex:row]; - - if (cell.accessoryType == UITableViewCellAccessoryCheckmark) { - cell.accessoryType = UITableViewCellAccessoryNone; - tag.selected = NO; - } else { - cell.accessoryType = UITableViewCellAccessoryCheckmark; - tag.selected = YES; - } - } -} - - -#pragma mark -#pragma mark - Methods to get Tags via json -- (void) loadTags -{ - - // if there isn't netwok - if ( [SharedAppDelegate internetActive] == NO ){ - // problem with internet, show message to user - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:NSLocalizedString(@"Please check your internet connection",@"") duration:5000]; - [alert showAlert]; - }else { - dispatch_queue_t loadTags = dispatch_queue_create("loadTags", NULL); - dispatch_async(loadTags, ^{ - // call the method and get the details - @try { - // Get Web Service - WebService *service = [[WebService alloc] init]; - NSArray *result = [service getTags]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tags removeAllObjects]; - if ([result class] != [NSNull class]) { - // Loop through each entry in the dictionary and create an array Tags - for (NSDictionary *tagDetails in result){ - // tag name - NSString *name = [tagDetails objectForKey:@"id"]; - name = [name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - - // how many images - NSString *qtd = [tagDetails objectForKey:@"count"]; - - // create a tag and add to the list - Tag *tag = [[Tag alloc]initWithTagName:name Quantity:[qtd integerValue]]; - tag.selected = NO; - [self.tags addObject:tag]; - }} - - [self.tableView reloadData]; - [self.refreshControl endRefreshing]; - }); - }@catch (NSException *exception) { - dispatch_async(dispatch_get_main_queue(), ^{ - [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; - PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:exception.description duration:5000]; - [alert showAlert]; - - [self.refreshControl endRefreshing]; - }); - } - }); - } - -} -@end \ No newline at end of file diff --git a/Photo/Timeline+Methods.h b/Photo/Timeline+Methods.h deleted file mode 100644 index 2ed0ecf..0000000 --- a/Photo/Timeline+Methods.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// Timeline+Photo.h -// Trovebox -// -// Created by Patrick Santana on 22/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Timeline.h" -#import "SHA1.h" - -// constant -extern NSString * const kUploadStatusTypeCreating; // this is used while we are creating all UPLOAD entries. After all of them are finish, we changed to CREATED -extern NSString * const kUploadStatusTypeCreated; -extern NSString * const kUploadStatusTypeFailed; -extern NSString * const kUploadStatusTypeDuplicated; -extern NSString * const kUploadStatusTypeLimitReached; -extern NSString * const kUploadStatusTypeUploading; -extern NSString * const kUploadStatusTypeUploadFinished; - -// images already in the server -extern NSString * const kUploadStatusTypeUploaded; - -@interface Timeline (Methods) - - -+ (NSArray *) getNewestPhotosInManagedObjectContext:(NSManagedObjectContext *)context; -+ (void) insertIntoCoreData:(NSArray *) rawNewestPhotos InManagedObjectContext:(NSManagedObjectContext *)context; - -// From upload -+ (NSArray *) getUploadsInManagedObjectContext:(NSManagedObjectContext *)context; -+ (NSArray *) getUploadsNotUploadedInManagedObjectContext:(NSManagedObjectContext *)context; -+ (void) deleteAllTimelineInManagedObjectContext:(NSManagedObjectContext *)context; - -+ (int) howEntitiesTimelineInManagedObjectContext:(NSManagedObjectContext *)context type:(NSString*) type; -+ (NSArray *) getNextWaitingToUploadInManagedObjectContext:(NSManagedObjectContext *)context qtd:(int) quantity; -+ (void) deleteEntitiesInManagedObjectContext:(NSManagedObjectContext *)context state:(NSString*) state; -+ (void) resetEntitiesOnStateUploadingInManagedObjectContext:(NSManagedObjectContext *)context; - -+ (void) setUploadsStatusToCreatedInManagedObjectContext:(NSManagedObjectContext *)context; -- (NSDictionary *) toDictionary; - -@end diff --git a/Photo/Timeline+Methods.m b/Photo/Timeline+Methods.m deleted file mode 100644 index 936d783..0000000 --- a/Photo/Timeline+Methods.m +++ /dev/null @@ -1,350 +0,0 @@ -// -// Timeline+Photo.m -// Trovebox -// -// Created by Patrick Santana on 22/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Timeline+Methods.h" - -@implementation Timeline (Methods) - -// -// Constast for Upload Status -// -NSString * const kUploadStatusTypeCreating = @"Creating"; -NSString * const kUploadStatusTypeCreated = @"Created"; -NSString * const kUploadStatusTypeFailed = @"Failed"; -NSString * const kUploadStatusTypeUploaded = @"Uploaded"; -NSString * const kUploadStatusTypeDuplicated = @"Duplicated"; -NSString * const kUploadStatusTypeLimitReached = @"LimitReached"; -NSString * const kUploadStatusTypeUploading = @"Uploading"; -NSString * const kUploadStatusTypeUploadFinished =@"A_UploadFinished"; - -+ (NSArray *) getUploadsInManagedObjectContext:(NSManagedObjectContext *) context -{ - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Timeline"]; - - NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]; - request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; - - NSError *error = nil; - NSArray *matches = [context executeFetchRequest:request error:&error]; - - if (error){ - NSLog(@"Error to get all uploads on managed object context = %@",[error localizedDescription]); - } - - NSMutableArray *result = [[NSMutableArray alloc] init]; - for (Timeline *model in matches) { - [result addObject:model]; - } - - // return an array of Uploads - return result; -} - -+ (NSArray *) getUploadsNotUploadedInManagedObjectContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Timeline"]; - - // status not Uploaded - request.predicate= [NSPredicate predicateWithFormat:@"status != %@", kUploadStatusTypeUploaded]; - - NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]; - request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; - - NSError *error = nil; - NSArray *matches = [context executeFetchRequest:request error:&error]; - - if (error){ - NSLog(@"Error to get all uploads on managed object context = %@",[error localizedDescription]); - } - - return matches; -} - -+ (int) howEntitiesTimelineInManagedObjectContext:(NSManagedObjectContext *)context type:(NSString*) type -{ - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Timeline"]; - request.predicate= [NSPredicate predicateWithFormat:@"status == %@", type]; - [request setIncludesPropertyValues:NO]; //only fetch the managedObjectID - - NSError *error = nil; - NSArray *result = [context executeFetchRequest:request error:&error]; - if (error){ - NSLog(@"Error to get how many uploading = %@",[error localizedDescription]); - } - - return [result count]; -} - -+ (void) resetEntitiesOnStateUploadingInManagedObjectContext:(NSManagedObjectContext *)context{ - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Timeline"]; - request.predicate= [NSPredicate predicateWithFormat:@"status == %@", kUploadStatusTypeUploading]; - - NSError *error = nil; - NSArray *matches = [context executeFetchRequest:request error:&error]; - if (error){ - NSLog(@"Error to get how many uploading = %@",[error localizedDescription]); - } - - for (Timeline *model in matches) { - model.status = kUploadStatusTypeCreated; - } -} - - -+ (NSArray *) getNewestPhotosInManagedObjectContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Timeline"]; - - NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dateUploaded" ascending:NO]; - request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; - - NSError *error = nil; - NSArray *matches = [context executeFetchRequest:request error:&error]; - - if (error){ - NSLog(@"Error to get all newest photos on managed object context = %@",[error localizedDescription]); - } - - return matches; -} - - -+ (void) deleteAllTimelineInManagedObjectContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; - [fetchRequest setEntity:[NSEntityDescription entityForName:@"Timeline" inManagedObjectContext:context]]; - [fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID - - NSError *error = nil; - NSArray *photos = [context executeFetchRequest:fetchRequest error:&error]; - if (error){ - NSLog(@"Error getting timeline to delete all from managed object context = %@",[error localizedDescription]); - } - - for (NSManagedObject *photo in photos) { - [context deleteObject:photo]; - } - - NSError *saveError = nil; - if (![context save:&saveError]){ - NSLog(@"Error delete all newest photos from managed object context = %@",[saveError localizedDescription]); - } -} - -+ (void) insertIntoCoreData:(NSArray *) rawNewestPhotos InManagedObjectContext:(NSManagedObjectContext *)context -{ - if ([rawNewestPhotos count]>0){ - BOOL checkTotalRows = YES; - for (NSDictionary *raw in rawNewestPhotos){ - // check if object exists - if (checkTotalRows){ - if ([[raw objectForKey:@"totalRows"] intValue] == 0){ - return; - }else{ - checkTotalRows = NO; - } - } - - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Timeline"]; - request.predicate= [NSPredicate predicateWithFormat:@"key==%@",[NSString stringWithFormat:@"%@",[raw objectForKey:@"id"]]]; - [request setIncludesPropertyValues:NO]; //only fetch the managedObjectID - - NSError *error = nil; - NSArray *matches = [context executeFetchRequest:request error:&error]; - - if (error){ - NSLog(@"Error getting a newest photo on managed object context = %@",[error localizedDescription]); - } - - if (!matches || [matches count] > 0){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Object already exist"); -#endif - }else { - Timeline *photo = [NSEntityDescription insertNewObjectForEntityForName:@"Timeline" - inManagedObjectContext:context]; - - // check if it is for iPad and get details URL - if ([DisplayUtilities isIPad]){ - // check if ipad is retina - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - photo.photoUrl = [NSString stringWithFormat:@"%@",[raw objectForKey:@"path1510x984xCR"]]; - photo.photoUrlDetail = [NSString stringWithFormat:@"%@",[raw objectForKey:@"path2024x1536"]]; - }else{ - photo.photoUrl = [NSString stringWithFormat:@"%@",[raw objectForKey:@"path755x492xCR"]]; - photo.photoUrlDetail = [NSString stringWithFormat:@"%@",[raw objectForKey:@"path1024x768"]]; - } - }else{ - // iphone/ipod => check retina - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - photo.photoUrl = [NSString stringWithFormat:@"%@",[raw objectForKey:@"path620x540xCR"]]; - photo.photoUrlDetail = [NSString stringWithFormat:@"%@",[raw objectForKey:@"path1136x640"]]; - }else{ - // old models - photo.photoUrl = [NSString stringWithFormat:@"%@",[raw objectForKey:@"path310x270xCR"]]; - photo.photoUrlDetail = [NSString stringWithFormat:@"%@",[raw objectForKey:@"path480x320"]]; - } - } - - NSString *title = [raw objectForKey:@"title"]; - if ([title class] == [NSNull class] || [title isEqualToString:@""]) - photo.title = [NSString stringWithFormat:@"%@",[raw objectForKey:@"filenameOriginal"]]; - else - photo.title = title; - - NSArray *tagsResult = [raw objectForKey:@"tags"]; - NSMutableString *tags = [NSMutableString string]; - if ([tagsResult class] != [NSNull class]) { - int i = 1; - for (NSString *tagDetails in tagsResult){ - [tags appendString:[tagDetails stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; - if ( i < [tagsResult count]) - [tags appendString:@", "]; - - i++; - }} - photo.tags=tags; - - photo.key=[NSString stringWithFormat:@"%@",[raw objectForKey:@"id"]]; - - // get the date taken since 1970 - double d = [[raw objectForKey:@"dateTaken"] doubleValue]; - NSTimeInterval date = d; - photo.date = [NSDate dateWithTimeIntervalSince1970:date]; - - // permission - if ([[raw objectForKey:@"permission"] isEqualToString:@"1"]) - photo.permission = [NSNumber numberWithBool:YES]; - else - photo.permission = [NSNumber numberWithBool:NO]; - - // latitude - // TODO: API does not return the number in float sometimes, - // in this case the framework will convert the NSString to NSDecimal - // https://github.com/photo/frontend/issues/1402 - NSString *latitude = [raw objectForKey:@"latitude"]; - if ([latitude class] != [NSNull class]){ - if ( [latitude isKindOfClass: [NSString class]] && ![latitude isEqualToString:@""]) { - photo.latitude = latitude; - }else if ( [latitude isKindOfClass: [NSNumber class]] ) { - photo.latitude = [((NSNumber*)latitude) stringValue]; - } - } - - // longitude - // TODO: API does not return the number in float sometimes, - // in this case the framework will convert the NSString to NSDecimal - // https://github.com/photo/frontend/issues/1402 - NSString *longitude = [raw objectForKey:@"longitude"]; - if ([longitude class] != [NSNull class]){ - if ( [longitude isKindOfClass: [NSString class]] && ![longitude isEqualToString:@""]) { - photo.longitude = longitude; - }else if ( [longitude isKindOfClass: [NSNumber class]] ) { - photo.longitude = [((NSNumber*)longitude) stringValue]; - } - } - - // get the date since 1970 - double dUpload = [[raw objectForKey:@"dateUploaded"] doubleValue]; - NSTimeInterval dateUpload = dUpload; - photo.dateUploaded = [NSDate dateWithTimeIntervalSince1970:dateUpload]; - - // page url - photo.photoPageUrl = [raw objectForKey:@"url"]; - - // status - photo.status = kUploadStatusTypeUploaded; - } - } - - // save context - NSError *error = nil; - if (![context save:&error]) { - NSLog(@"Couldn't save: %@", [error localizedDescription]); - } - } -} - -+ (NSArray *) getNextWaitingToUploadInManagedObjectContext:(NSManagedObjectContext *)context qtd:(int) quantity -{ - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Timeline"]; - - // status not Uploaded - request.predicate= [NSPredicate predicateWithFormat:@"status == %@", kUploadStatusTypeCreated]; - - NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dateUploaded" ascending:NO]; - request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; - - // set max to return - [request setFetchLimit:quantity]; - - NSError *error = nil; - NSArray *matches = [context executeFetchRequest:request error:&error]; - - if (error){ - NSLog(@"Error to get all uploads on managed object context = %@",[error localizedDescription]); - } - - return matches; -} - -+ (void) deleteEntitiesInManagedObjectContext:(NSManagedObjectContext *)context state:(NSString*) state -{ - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; - [fetchRequest setEntity:[NSEntityDescription entityForName:@"Timeline" inManagedObjectContext:context]]; - fetchRequest.predicate= [NSPredicate predicateWithFormat:@"status == %@", state]; - [fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID - - NSError *error = nil; - NSArray *photos = [context executeFetchRequest:fetchRequest error:&error]; - if (error){ - NSLog(@"Error getting timeline to delete all from managed object context = %@",[error localizedDescription]); - } - - for (NSManagedObject *photo in photos) { - [context deleteObject:photo]; - } -} - -+ (void) setUploadsStatusToCreatedInManagedObjectContext:(NSManagedObjectContext *)context -{ - NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Timeline"]; - request.predicate= [NSPredicate predicateWithFormat:@"status == %@", kUploadStatusTypeCreating]; - - NSError *error = nil; - NSArray *matches = [context executeFetchRequest:request error:&error]; - if (error){ - NSLog(@"Error to get how many uploading = %@",[error localizedDescription]); - } - - for (Timeline *model in matches) { - model.status = kUploadStatusTypeCreated; - } -} - -- (NSDictionary *) toDictionary -{ - NSArray *keys = [NSArray arrayWithObjects: @"date", @"facebook", @"permission", @"status", @"title", @"twitter", @"image", @"fileName",@"tags",@"albums", nil]; - NSArray *objects = [NSArray arrayWithObjects:self.date,self.facebook,self.permission,self.status,self.title,self.twitter,self.photoDataTempUrl,self.fileName,self.tags, self.albums, nil]; - - return [NSDictionary dictionaryWithObjects:objects forKeys:keys]; -} - -@end diff --git a/Photo/Timeline.h b/Photo/Timeline.h deleted file mode 100644 index a69ac1f..0000000 --- a/Photo/Timeline.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// Timeline.h -// Trovebox -// -// Created by Patrick Santana on 17/04/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - - -@interface Timeline : NSManagedObject - -@property (nonatomic, retain) NSDate * date; -@property (nonatomic, retain) NSDate * dateUploaded; -@property (nonatomic, retain) NSNumber * facebook; -@property (nonatomic, retain) NSString * fileName; -@property (nonatomic, retain) NSString * key; -@property (nonatomic, retain) NSString * latitude; -@property (nonatomic, retain) NSString * longitude; -@property (nonatomic, retain) NSNumber * permission; -@property (nonatomic, retain) NSString * photoDataTempUrl; -@property (nonatomic, retain) NSData * photoDataThumb; -@property (nonatomic, retain) NSString * photoPageUrl; -@property (nonatomic, retain) NSNumber * photoToUpload; -@property (nonatomic, retain) NSString * photoUploadMultiplesUrl; -@property (nonatomic, retain) NSNumber * photoUploadProgress; -@property (nonatomic, retain) NSData * photoUploadResponse; -@property (nonatomic, retain) NSString * photoUrl; -@property (nonatomic, retain) NSString * photoUrlDetail; -@property (nonatomic, retain) NSString * status; -@property (nonatomic, retain) NSString * syncedUrl; -@property (nonatomic, retain) NSString * tags; -@property (nonatomic, retain) NSString * title; -@property (nonatomic, retain) NSNumber * twitter; -@property (nonatomic, retain) NSString * userUrl; -@property (nonatomic, retain) NSString * albums; - -@end diff --git a/Photo/Timeline.m b/Photo/Timeline.m deleted file mode 100644 index 0c805f7..0000000 --- a/Photo/Timeline.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// Timeline.m -// Trovebox -// -// Created by Patrick Santana on 17/04/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "Timeline.h" - - -@implementation Timeline - -@dynamic date; -@dynamic dateUploaded; -@dynamic facebook; -@dynamic fileName; -@dynamic key; -@dynamic latitude; -@dynamic longitude; -@dynamic permission; -@dynamic photoDataTempUrl; -@dynamic photoDataThumb; -@dynamic photoPageUrl; -@dynamic photoToUpload; -@dynamic photoUploadMultiplesUrl; -@dynamic photoUploadProgress; -@dynamic photoUploadResponse; -@dynamic photoUrl; -@dynamic photoUrlDetail; -@dynamic status; -@dynamic syncedUrl; -@dynamic tags; -@dynamic title; -@dynamic twitter; -@dynamic userUrl; -@dynamic albums; - -@end diff --git a/Photo/TransformationUtilities.h b/Photo/TransformationUtilities.h deleted file mode 100644 index d51f498..0000000 --- a/Photo/TransformationUtilities.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// TransformationUtilities.h -// Trovebox -// -// Created by Patrick Santana on 25/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface TransformationUtilities : NSObject - -+ (NSString*)base64forData:(NSData*)theData; - -@end diff --git a/Photo/TransformationUtilities.m b/Photo/TransformationUtilities.m deleted file mode 100644 index a1070a9..0000000 --- a/Photo/TransformationUtilities.m +++ /dev/null @@ -1,58 +0,0 @@ -// -// TransformationUtilities.m -// Trovebox -// -// Created by Patrick Santana on 25/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "TransformationUtilities.h" - -@implementation TransformationUtilities - - -+ (NSString*)base64forData:(NSData*)theData { - const uint8_t* input = (const uint8_t*)[theData bytes]; - NSInteger length = [theData length]; - - static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - - NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; - uint8_t* output = (uint8_t*)data.mutableBytes; - - NSInteger i; - for (i=0; i < length; i += 3) { - NSInteger value = 0; - NSInteger j; - for (j = i; j < (i + 3); j++) { - value <<= 8; - - if (j < length) { - value |= (0xFF & input[j]); - } - } - - NSInteger theIndex = (i / 3) * 4; - output[theIndex + 0] = table[(value >> 18) & 0x3F]; - output[theIndex + 1] = table[(value >> 12) & 0x3F]; - output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; - output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; - } - - return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] ; -} - - -@end diff --git a/Photo/Trovebox-Info.plist b/Photo/Trovebox-Info.plist deleted file mode 100644 index 39a1c2c..0000000 --- a/Photo/Trovebox-Info.plist +++ /dev/null @@ -1,109 +0,0 @@ - - - - - CFBuildDate - 2013-10-25T21:50:22Z - CFBundleDevelopmentRegion - en - CFBundleDisplayName - Trovebox - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIcons - - CFBundlePrimaryIcon - - CFBundleIconFiles - - trovebox_58 - trovebox_120 - - - - CFBundleIcons~ipad - - CFBundlePrimaryIcon - - CFBundleIconFiles - - trovebox_58 - trovebox_29 - trovebox_152 - trovebox_76 - - - - CFBundleIdentifier - me.OpenPhoto.ios - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 13.1 - CFBundleSignature - ???? - CFBundleURLTypes - - - CFBundleURLName - me.openphoto - CFBundleURLSchemes - - openphoto - fb283425805036236 - - - - CFBundleVersion - 163 - LSRequiresIPhoneOS - - UIPrerenderedIcon - - UIRequiredDeviceCapabilities - - armv7 - - UIStatusBarHidden - - UIStatusBarStyle - UIStatusBarStyleDefault - UIStatusBarTintParameters - - UINavigationBar - - Style - UIBarStyleDefault - TintColor - - Blue - 0.066371366381645203 - Green - 0.1054482683539391 - Red - 0.17748937010765081 - - Translucent - - - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/Photo/Trovebox-Prefix.pch b/Photo/Trovebox-Prefix.pch deleted file mode 100644 index e920217..0000000 --- a/Photo/Trovebox-Prefix.pch +++ /dev/null @@ -1,30 +0,0 @@ -// -// Prefix header for all source files of the 'Photo' target in the 'Photo' project -// - -#import - -#ifndef __IPHONE_3_0 -#warning "This project uses features only available in iOS SDK 3.0 and later." -#endif - -#ifdef __OBJC__ -#import -#import -#import -#import -#import "GAI.h" -#import "GAIDictionaryBuilder.h" -#import "AppDelegate.h" -#import "Constants.h" -#import "PrivateConstants.h" -#import "PhotoAlertView.h" -#import "DisplayUtilities.h" -#import "UINavigationBar+Trovebox.h" -#import "UINavigationItem+Trovebox.h" - - -#define SharedAppDelegate ((AppDelegate*)[[UIApplication sharedApplication] delegate]) - -#endif - diff --git a/Photo/UINavigationBar+Trovebox.h b/Photo/UINavigationBar+Trovebox.h deleted file mode 100644 index f5393ba..0000000 --- a/Photo/UINavigationBar+Trovebox.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// UINavigationBar+Trovebox.h -// Trovebox -// -// Created by Nico Prananta on 4/7/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface UINavigationBar (Trovebox) - -- (void)troveboxStyle:(BOOL) defaultLogo; - -@end diff --git a/Photo/UINavigationBar+Trovebox.m b/Photo/UINavigationBar+Trovebox.m deleted file mode 100644 index f70a0ed..0000000 --- a/Photo/UINavigationBar+Trovebox.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// UINavigationBar+Trovebox.m -// Trovebox -// -// Created by Nico Prananta on 4/7/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "UINavigationBar+Trovebox.h" - -@implementation UINavigationBar (Trovebox) - -- (void)troveboxStyle:(BOOL) defaultLogo -{ - self.barTintColor = UIColorFromRGB(0x3B2414); - self.tintColor = [UIColor whiteColor]; - - if (defaultLogo){ - UIImageView *titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"home-trovebox-logo.png"]]; - [self.topItem setTitleView:titleView]; - } -} - -@end diff --git a/Photo/UINavigationItem+Trovebox.h b/Photo/UINavigationItem+Trovebox.h deleted file mode 100644 index 0f6489a..0000000 --- a/Photo/UINavigationItem+Trovebox.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// UINavigationItem+Trovebox.h -// Trovebox -// -// Created by Patrick Santana on 19/04/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface UINavigationItem (Trovebox) - - -- (void)troveboxStyle:(NSString *) name defaultButtons:(BOOL) defaultButtonsEnabled viewController:(UIViewController*) controller menuViewController:(MenuViewController*) menuViewController; - -@end diff --git a/Photo/UINavigationItem+Trovebox.m b/Photo/UINavigationItem+Trovebox.m deleted file mode 100644 index 30bd82c..0000000 --- a/Photo/UINavigationItem+Trovebox.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// UINavigationItem+Trovebox.m -// Trovebox -// -// Created by Patrick Santana on 19/04/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "UINavigationItem+Trovebox.h" - -@implementation UINavigationItem (Trovebox) - -- (void)troveboxStyle:(NSString *) name defaultButtons:(BOOL) defaultButtonsEnabled viewController:(UIViewController*) controller menuViewController:(MenuViewController*) menuViewController -{ - - UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; - label.backgroundColor = [UIColor clearColor]; - label.font = [UIFont boldSystemFontOfSize:20.0]; - label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]; - label.textAlignment = NSTextAlignmentCenter; - label.textColor = [UIColor whiteColor]; // change this color - label.text = name; - [label sizeToFit]; - self.titleView = label; - - if (defaultButtonsEnabled){ - // menu - UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeCustom]; - UIImage *leftButtonImage = [UIImage imageNamed:@"button-navigation-menu.png"] ; - [leftButton setImage:leftButtonImage forState:UIControlStateNormal]; - leftButton.frame = CGRectMake(0, 0, leftButtonImage.size.width, leftButtonImage.size.height); - [leftButton addTarget:controller action:@selector(toggleLeftView) forControlEvents:UIControlEventTouchUpInside]; - - UIBarButtonItem *customLeftButton = [[UIBarButtonItem alloc] initWithCustomView:leftButton]; - self.leftBarButtonItem = customLeftButton; - - // camera - UIButton *buttonRight = [UIButton buttonWithType:UIButtonTypeCustom]; - UIImage *buttonRightImage = [UIImage imageNamed:@"button-navigation-camera.png"] ; - [buttonRight setImage:buttonRightImage forState:UIControlStateNormal]; - buttonRight.frame = CGRectMake(0, 0, buttonRightImage.size.width, buttonRightImage.size.height); - [buttonRight addTarget:menuViewController action:@selector(openCamera:) forControlEvents:UIControlEventTouchUpInside]; - - UIBarButtonItem *customRightButton = [[UIBarButtonItem alloc] initWithCustomView:buttonRight]; - self.rightBarButtonItem = customRightButton; - - } -} - -@end diff --git a/Photo/UpdateUtilities.h b/Photo/UpdateUtilities.h deleted file mode 100644 index c0cb9bf..0000000 --- a/Photo/UpdateUtilities.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// UpdateUtilities.h -// Trovebox -// -// Created by Patrick Santana on 25/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "KeychainItemWrapper.h" - -@interface UpdateUtilities : NSObject - -// singleton -+(UpdateUtilities*) instance; - -//methods -- (NSString*) getVersion; -- (BOOL) needsUpdate; -- (void) update; - -// rename the server form OpenPhoto to Trovebox -- (void) fixOpenPhotoToTroveboxServer; - -// this fix the problem with some servers being handle with upper case. -// There is some problems with token in this situation. -// So we just lower case the server url and it is solved. -- (void) fixServerLowerCase; - -// check if user is still using the old version of saving password on the NSUserDefaults -// we should always use the keychain instead of properties -// and delete it from there -// for new users will be saved on Keychain -- (void) fixKeyChain; - -@end diff --git a/Photo/UpdateUtilities.m b/Photo/UpdateUtilities.m deleted file mode 100644 index f226fdf..0000000 --- a/Photo/UpdateUtilities.m +++ /dev/null @@ -1,166 +0,0 @@ -// -// UpdateUtilities.m -// Trovebox -// -// Created by Patrick Santana on 25/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -#import "UpdateUtilities.h" - -@implementation UpdateUtilities - -/* - * OAuth 1.0a - * =================================== - * There are 4 values for you to store: two tokens and two secrets - * one for the "app" and another for the "user" - * the two secrets are used to generate the signature but are not passed with the request - * the two tokens are passed with the request - */ -NSString * const kAuthenticationOAuthToken=@"authentication_oauth_token"; -NSString * const kAuthenticationOAuthSecret=@"authentication_oauth_secret"; -NSString * const kAuthenticationConsumerKey=@"authentication_consumer_key"; -NSString * const kAuthenticationConsumerSecret=@"authentication_consumer_secret"; - - -static UpdateUtilities* instance = nil; - -+(UpdateUtilities*) instance{ - if ( instance == nil ) { - instance = [[UpdateUtilities alloc] init]; - } - return instance; -} - -- (NSString*) getVersion{ - return @"13.1"; -} - -- (BOOL) needsUpdate{ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Version from user: %@",[[NSUserDefaults standardUserDefaults] stringForKey:kVersionApplicationInstalled]); -#endif - - // check if the user version saved in the user default - if ([[NSUserDefaults standardUserDefaults] stringForKey:kVersionApplicationInstalled] == nil - || ![[[NSUserDefaults standardUserDefaults] stringForKey:kVersionApplicationInstalled] isEqualToString:[self getVersion]]){ - return YES; - } - - // otherwise, it does not need to change - return NO; -} - -- (void) update{ - // save the version in the user default - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPicturesTimestamp]; - [standardUserDefaults setValue:nil forKey:kHomeScreenPictures]; - [standardUserDefaults setValue:[self getVersion] forKey:kVersionApplicationInstalled]; - [standardUserDefaults setBool:YES forKey:kSyncShowUploadedPhotos]; - if ([standardUserDefaults stringForKey:kAutoSyncEnabled] == nil){ - [standardUserDefaults setBool:NO forKey:kAutoSyncEnabled]; - [standardUserDefaults setBool:NO forKey:kAutoSyncMessageDisplayed]; - } - [standardUserDefaults synchronize]; - - // delete timeline - [Timeline deleteAllTimelineInManagedObjectContext:[SharedAppDelegate managedObjectContext]]; - - // remove old cache - [[SDImageCache sharedImageCache] cleanDisk]; - - [self fixOpenPhotoToTroveboxServer]; - [self fixServerLowerCase]; - [self fixKeyChain]; - - // update details from the profile - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationProfileRefresh object:nil userInfo:nil]; -} - -//renames the server from OpenPhoto to Trovebox -- (void) fixOpenPhotoToTroveboxServer -{ - - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - // check if the app has been already initialized and has a server. - // If not, no action is necessary - if ([standardUserDefaults stringForKey:kTroveboxServer] != nil) - { - // check if the server has openphoto.me - NSString *server = [standardUserDefaults valueForKey:kTroveboxServer]; - - if ([server hasSuffix:@"openphoto.me"]){ -#ifdef DEVELOPMENT_ENABLED - NSLog(@"We need to change the url"); -#endif - server = [server stringByReplacingOccurrencesOfString:@"openphoto.me" - withString:@"trovebox.com"]; - - // save in the user defaults - [standardUserDefaults setValue:server forKey:kTroveboxServer]; - [standardUserDefaults synchronize]; - } - } -} - -- (void) fixServerLowerCase -{ - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - // check if the app has been already initialized and has a server. - // If not, no action is necessary - if ([standardUserDefaults stringForKey:kTroveboxServer] != nil) - { - // get the server - NSString *server = [standardUserDefaults valueForKey:kTroveboxServer]; - // lower case - server = [server lowercaseString]; - - // save in the user defaults - [standardUserDefaults setValue:server forKey:kTroveboxServer]; - [standardUserDefaults synchronize]; - } -} - -- (void) fixKeyChain -{ - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - if ([standardUserDefaults stringForKey:kAuthenticationOAuthToken] != nil) - { - // copy the value to Keychain and delete - KeychainItemWrapper *keychainItemOAuth = [[KeychainItemWrapper alloc]initWithTroveboxOAuth]; - KeychainItemWrapper *keychainItemConsumer = [[KeychainItemWrapper alloc]initWithTroveboxConsumer]; - - [keychainItemOAuth setObject:[standardUserDefaults valueForKey:kAuthenticationOAuthToken] forKey:(__bridge id)(kSecAttrAccount)]; - [keychainItemOAuth setObject:[standardUserDefaults valueForKey:kAuthenticationOAuthSecret] forKey:(__bridge id)(kSecValueData)]; - [keychainItemConsumer setObject:[standardUserDefaults valueForKey:kAuthenticationConsumerKey] forKey:(__bridge id)(kSecAttrAccount)]; - [keychainItemConsumer setObject:[standardUserDefaults valueForKey:kAuthenticationConsumerSecret] forKey:(__bridge id)(kSecValueData)]; - - // now, delete from NSUserDefaults - [standardUserDefaults removeObjectForKey:kAuthenticationOAuthToken]; - [standardUserDefaults removeObjectForKey:kAuthenticationOAuthSecret]; - [standardUserDefaults removeObjectForKey:kAuthenticationConsumerKey]; - [standardUserDefaults removeObjectForKey:kAuthenticationConsumerSecret]; - - // synchronize the keys - [standardUserDefaults synchronize]; - } -} - -@end diff --git a/Photo/UploadCell.h b/Photo/UploadCell.h deleted file mode 100644 index d52b9c3..0000000 --- a/Photo/UploadCell.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// UploadCell.h -// Trovebox -// -// Created by Patrick Santana on 27/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -#import "Timeline+Methods.h" - -@interface UploadCell : UITableViewCell - -@property (nonatomic, weak) IBOutlet UIImageView *thumb; -@property (nonatomic, weak) IBOutlet UILabel *status; -@property (nonatomic, weak) IBOutlet UIButton *btnRetry; -@property (nonatomic, weak) IBOutlet UIImageView *imageStatus; -@property (nonatomic, weak) IBOutlet UIProgressView *progressBar; -@property (nonatomic, weak) Timeline *originalObject; - -- (IBAction)refresh:(id)sender; - -@end diff --git a/Photo/UploadCell.m b/Photo/UploadCell.m deleted file mode 100644 index 2c1db32..0000000 --- a/Photo/UploadCell.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// UploadCell.m -// Trovebox -// -// Created by Patrick Santana on 27/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - - -#import "UploadCell.h" - -@implementation UploadCell -@synthesize thumb=_thumb; -@synthesize status=_status; -@synthesize btnRetry=_btnRetry; -@synthesize imageStatus = _imageStatus; -@synthesize originalObject = _originalObject; -@synthesize progressBar = _progressBar; - - -- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier -{ - self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; - if (self) { - // Initialization code - } - return self; -} - -- (void)setSelected:(BOOL)selected animated:(BOOL)animated -{ - [super setSelected:selected animated:animated]; -} - -- (IBAction)refresh:(id)sender { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Pressed refresh button"); -#endif - // change status object originalObject - self.originalObject.status=kUploadStatusTypeCreated; - self.progressBar.progress = 0.0; - self.btnRetry.hidden=YES; -} - -@end diff --git a/Photo/UploadCell.xib b/Photo/UploadCell.xib deleted file mode 100644 index 0f5403e..0000000 --- a/Photo/UploadCell.xib +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Photo/UploadCelliPad.xib b/Photo/UploadCelliPad.xib deleted file mode 100644 index 5aad1d4..0000000 --- a/Photo/UploadCelliPad.xib +++ /dev/null @@ -1,345 +0,0 @@ - - - - 1552 - 12D78 - 3084 - 1187.37 - 626.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUIButton - IBUIImageView - IBUILabel - IBUIProgressView - IBUITableViewCell - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 292 - - - - 256 - - - - 292 - - - - 274 - {35, 35} - - - _NS:9 - NO - IBCocoaTouchFramework - - - {{9, 4}, {35, 35}} - - - _NS:9 - - 3 - MQA - - IBCocoaTouchFramework - - - - 292 - {{53, 11}, {645, 21}} - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - - - 2 - MC4yMzUyOTQxMzM0IDAuMTQxMTc2NDc3MSAwLjA4MjM1Mjk0MzcyAA - - - 0 - 10 - - HelveticaNeue-Bold - Helvetica Neue - 2 - 16 - - - HelveticaNeue-Bold - 16 - 16 - - NO - - - - 292 - {{706, 0}, {48, 43}} - - - _NS:9 - NO - 4 - IBCocoaTouchFramework - 0 - 0 - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - 3 - MC41AA - - - NSImage - home-retry.png - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - - -2147483356 - {{706, 0}, {48, 43}} - - - _NS:9 - 4 - NO - IBCocoaTouchFramework - - - - -2147483356 - {{53, 17}, {645, 11}} - - - _NS:9 - NO - IBCocoaTouchFramework - 1 - - 2 - MC45MDE5NjA4NDk4IDAuMzEzNzI1NTAxMyAwLjExNzY0NzA2NjcAA - - - 1 - MSAwLjUgMAA - - - - {768, 43} - - - _NS:11 - - 3 - MCAwAA - - NO - YES - 4 - YES - IBCocoaTouchFramework - - - {768, 44} - - - _NS:9 - IBCocoaTouchFramework - 0 - - uploadCell - - - - - - - status - - - - 10 - - - - btnRetry - - - - 11 - - - - imageStatus - - - - 19 - - - - thumb - - - - 9 - - - - progressBar - - - - 24 - - - - refresh: - - - 7 - - 13 - - - - - - 0 - - - - - - -1 - - - File's Owner - - - -2 - - - - - 3 - - - - - - - - - - - - 4 - - - - - 7 - - - btnRetry - - - 18 - - - imageStatus - - - 21 - - - - - - - - 6 - - - - - 23 - - - - - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UIResponder - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - UploadCell - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 24 - - - 0 - IBCocoaTouchFramework - YES - 3 - - home-retry.png - {26, 27} - - 2083 - - diff --git a/Photo/UploadStatusTableViewController.h b/Photo/UploadStatusTableViewController.h deleted file mode 100644 index 3f05553..0000000 --- a/Photo/UploadStatusTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// UploadStatusTableViewController.h -// Trovebox -// -// Created by Patrick Santana on 26/09/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import - -@interface UploadStatusTableViewController : NSObject - -@end diff --git a/Photo/UploadStatusTableViewController.m b/Photo/UploadStatusTableViewController.m deleted file mode 100644 index a723c1f..0000000 --- a/Photo/UploadStatusTableViewController.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// UploadStatusTableViewController.m -// Trovebox -// -// Created by Patrick Santana on 26/09/13. -// Copyright (c) 2013 Trovebox. All rights reserved. -// - -#import "UploadStatusTableViewController.h" - -@implementation UploadStatusTableViewController - -@end diff --git a/Photo/WebService.h b/Photo/WebService.h deleted file mode 100644 index 1b79543..0000000 --- a/Photo/WebService.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// OpenPhotoService.h -// Trovebox -// -// Created by Patrick Santana on 20/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "ASIHTTPRequest.h" -#import "OAMutableURLRequest.h" -#import "OAToken.h" -#import "SBJson.h" -#import "ASIFormDataRequest.h" -#import "ContentTypeUtilities.h" -#import "ASIProgressDelegate.h" -#import "Tag.h" -#import "Album.h" -#import "KeychainItemWrapper.h" - -@interface WebService : NSObject{ - -} - -- (id)initForServer:(NSString *) server - oAuthKey:(NSString *) oAuthKey - oAuthSecret:(NSString *) oAuthSecret - consumerKey:(NSString *) consumerKey - consumerSecret:(NSString *) consumerSecret; - -- (NSArray *) fetchNewestPhotosMaxResult:(int) maxResult; - -// in the dictionary, we expect: title, permission and tags -- (NSDictionary *) uploadPicture:(NSData*) data metadata:(NSDictionary*) values fileName:(NSString *)fileName delegate:(id) delegate; - -// get all tags. It brings how many images have this tag. -- (NSArray *) getTags; - -// get 25 pictures -- (NSArray *) loadGallery:(int) pageSize onPage:(int) page; - -// get pictures by tag -- (NSArray *) loadGallery:(int) pageSize onPage:(int) page tag:(Tag*) tag; - -// get pictures by album -- (NSArray *) loadGallery:(int) pageSize onPage:(int) page album:(Album*) album; - -- (NSArray *) loadAlbums:(int) pageSize onPage:(int) page version:(NSString *) serverVersion; - -// get details from the system -- (NSDictionary *) getSystemVersion; - -// get user details -- (NSDictionary*) getUserDetails; - -// remove credentials form the server when sign out -- (NSArray *) removeCredentialsForKey:(NSString *) consumerKey; - -// check via SHA1 is photo is already in the server -- (BOOL) isPhotoAlreadyOnServer:(NSString *) sha1; - -// return the identification of this album -- (NSString *) createAlbum:(Album *) album; - -// return a shared token -// - :type = photo | album - for now we just implement for type photo -// - :id = id of photo or album -- (NSString *) shareToken:(NSString *) id; - -@end diff --git a/Photo/WebService.m b/Photo/WebService.m deleted file mode 100644 index a953679..0000000 --- a/Photo/WebService.m +++ /dev/null @@ -1,515 +0,0 @@ -// -// WebService.m -// Trovebox -// -// Created by Patrick Santana on 20/03/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "WebService.h" -@interface WebService() - -- (ASIHTTPRequest *) sendSynchronousRequest:(NSString *) request httpMethod:(NSString*) method; -- (void) validateCredentials; -- (OAMutableURLRequest*) getUrlRequest:(NSURL *) url; -- (NSArray *) parseResponse:(ASIHTTPRequest *) response; -- (NSDictionary *) parseResponseAsNSDictionary:(ASIHTTPRequest *) response; -+ (BOOL) isMessageValid:(NSDictionary *)response; -- (NSString *) getScreenSizesForRequest; - -@property (nonatomic, retain, readwrite) NSString *server; -@property (nonatomic, retain, readwrite) NSString *oAuthKey; -@property (nonatomic, retain, readwrite) NSString *oAuthSecret; -@property (nonatomic, retain, readwrite) NSString *consumerKey; -@property (nonatomic, retain, readwrite) NSString *consumerSecret; - -@end - -@implementation WebService - -@synthesize server=_server, oAuthKey=_oAuthKey, oAuthSecret=_oAuthSecret, consumerKey = _consumerKey, consumerSecret=_consumerSecret; - -- (id)init -{ - self = [super init]; - if (self) { - // keychains for credentials - KeychainItemWrapper *keychainItemOAuth = [[KeychainItemWrapper alloc]initWithTroveboxOAuth]; - KeychainItemWrapper *keychainItemConsumer = [[KeychainItemWrapper alloc]initWithTroveboxConsumer]; - - // user defaults values for server url - NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; - - self = [[WebService alloc] initForServer:[standardUserDefaults valueForKey:kTroveboxServer] - oAuthKey:[keychainItemOAuth objectForKey:(__bridge id)(kSecAttrAccount)] - oAuthSecret:[keychainItemOAuth objectForKey:(__bridge id)(kSecValueData)] - consumerKey:[keychainItemConsumer objectForKey:(__bridge id)(kSecAttrAccount)] - consumerSecret:[keychainItemConsumer objectForKey:(__bridge id)(kSecValueData)]]; - } - return self; -} - --(id)initForServer:(NSString *) server - oAuthKey:(NSString *) oAuthKey - oAuthSecret:(NSString *) oAuthSecret - consumerKey:(NSString *) consumerKey - consumerSecret:(NSString *) consumerSecret{ - - self = [super init]; - - if (self) { - // set the objects - self.server = server; - self.oAuthKey = oAuthKey; - self.oAuthSecret = oAuthSecret; - self.consumerKey = consumerKey; - self.consumerSecret = consumerSecret; - } - - return self; -} - -- (NSArray*) fetchNewestPhotosMaxResult:(int) maxResult{ - NSMutableString *request = [NSMutableString stringWithFormat: @"%@%i%@",@"/v1/photos/list.json?sortBy=dateUploaded,DESC&pageSize=", maxResult, @"&returnSizes="]; - - // check if it is for iPad - if ([DisplayUtilities isIPad]){ - // check if ipad is retina - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - [request appendString:@"1510x984xCR,2024x1536"]; - }else{ - [request appendString:@"755x492xCR,1024x768"]; - } - }else{ - // iphone/ipod => check retina - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - [request appendString:@"620x540xCR,1136x640"]; - }else{ - // old models - [request appendString:@"310x270xCR,480x320"]; - } - } - return [self parseResponse:[self sendSynchronousRequest:request httpMethod:@"GET"]]; -} - - -- (NSDictionary*) uploadPicture:(NSData*) data metadata:(NSDictionary*) values fileName:(NSString *)fileName delegate:(id) delegate -{ - [self validateCredentials]; - - // for video: /v1/media/upload.json" - // just for images: /v1/photo/upload.json - NSMutableString *urlString = [NSMutableString stringWithFormat: @"%@/v1/photo/upload.json", self.server]; - NSURL *url = [NSURL URLWithString:urlString]; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Url upload = [%@]. Execute OAuth and Multipart",urlString); - NSLog(@"Title = %@",[values objectForKey:@"title"] ); - NSLog(@"Permission = %@",[values objectForKey:@"permission"]); - NSLog(@"Tags = %@",[values objectForKey:@"tags"]); - NSLog(@"Albums = %@",[values objectForKey:@"albums"]); -#endif - - OAMutableURLRequest *oaUrlRequest = [self getUrlRequest:url]; - [oaUrlRequest setHTTPMethod:@"POST"]; - - OARequestParameter *titleParam = [[OARequestParameter alloc] initWithName:@"title" - value:[values objectForKey:@"title"]]; - OARequestParameter *permissionParam = [[OARequestParameter alloc] initWithName:@"permission" - value:[NSString stringWithFormat:@"%@",[values objectForKey:@"permission"]]]; - - OARequestParameter *tagsParam = [[OARequestParameter alloc] initWithName:@"tags" - value:[values objectForKey:@"tags"]]; - OARequestParameter *albumsParam = [[OARequestParameter alloc] initWithName:@"albums" - value:[values objectForKey:@"albums"]]; - - NSArray *params = [NSArray arrayWithObjects:titleParam, permissionParam, tagsParam, albumsParam, nil]; - [oaUrlRequest setParameters:params]; - - // prepare the request. This will be used to get the Authorization header and add in the multipart component - [oaUrlRequest prepare]; - - /* - * - * Using ASIHTTPRequest for Multipart. The authentication come from the OAMutableURLRequest - * - */ - ASIFormDataRequest *asiRequest = [ASIFormDataRequest requestWithURL:url]; - asiRequest.userAgentString=@"Trovebox iOS"; - - // set the authorization header to be used in the OAuth - NSDictionary *dictionary = [oaUrlRequest allHTTPHeaderFields]; - [asiRequest addRequestHeader:@"Authorization" value:[dictionary objectForKey:@"Authorization"]]; - - // set the parameter already added in the signature - [asiRequest addPostValue:[values objectForKey:@"title"] forKey:@"title"]; - [asiRequest addPostValue:[values objectForKey:@"permission"] forKey:@"permission"]; - [asiRequest addPostValue:[values objectForKey:@"tags"] forKey:@"tags"]; - [asiRequest addPostValue:[values objectForKey:@"albums"] forKey:@"albums"]; - - if (delegate){ - // set the progress bar - [asiRequest setUploadProgressDelegate:delegate]; - } - - // add the file in the multipart. This file is stored locally for perfomance reason. We don't have to load it - // in memory. If it is a picture with filter, we just send without giving the name - // and content type - [asiRequest addData:data withFileName:fileName andContentType:[ContentTypeUtilities contentTypeForImageData:data] forKey:@"photo"]; - // timeout 4 minutes. TODO. Needs improvements. - [asiRequest setTimeOutSeconds:240]; - [asiRequest startSynchronous]; - - return [self parseResponseAsNSDictionary:asiRequest]; -} - -// get all tags. It brings how many images have this tag. -- (NSArray*) getTags -{ - return [self parseResponse:[self sendSynchronousRequest:@"/v1/tags/list.json" httpMethod:@"GET"]]; -} - -// get details from the system -- (NSDictionary*) getSystemVersion -{ - return [self parseResponseAsNSDictionary:[self sendSynchronousRequest:@"/v1/system/version.json" httpMethod:@"GET"]]; -} - -// get user details -- (NSDictionary*) getUserDetails -{ - return [self parseResponseAsNSDictionary:[self sendSynchronousRequest:@"/v1/user/profile.json" httpMethod:@"GET"]]; -} - -- (NSArray*) removeCredentialsForKey:(NSString *) consumerKey -{ - return [self parseResponse:[self sendSynchronousRequest:[NSString stringWithFormat:@"/oauth/%@/delete.json",consumerKey] httpMethod:@"POST"]]; -} - - -- (NSArray*) loadGallery:(int) pageSize onPage:(int) page -{ - return [self parseResponse:[self sendSynchronousRequest:[NSString stringWithFormat:@"/v1/photos/list.json?pageSize=%d&page=%d&returnSizes=%@", pageSize,page,[self getScreenSizesForRequest]] httpMethod:@"GET"]]; -} - -- (NSArray *) loadGallery:(int) pageSize onPage:(int) page tag:(Tag*) tag -{ - return [self parseResponse:[self sendSynchronousRequest:[NSString stringWithFormat:@"/v1/photos/list.json?pageSize=%d&page=%d&returnSizes=%@&tags=%@", pageSize,page,[self getScreenSizesForRequest],[tag.name stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] httpMethod:@"GET"]]; -} - -- (NSArray *) loadGallery:(int) pageSize onPage:(int) page album:(Album *)album -{ - return [self parseResponse:[self sendSynchronousRequest:[NSString stringWithFormat:@"/v1/photos/list.json?pageSize=%d&page=%d&returnSizes=%@&album=%@", pageSize,page,[self getScreenSizesForRequest],[album.identification stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] httpMethod:@"GET"]]; -} - -- (NSArray*) loadAlbums:(int) pageSize onPage:(int) page version:(NSString *) serverVersion -{ - if ([serverVersion isEqualToString:@"v1"] || - [serverVersion isEqualToString:@"v2"]){ - - // in the case of version two, we can add the skipEmpty - NSString *additionalParameters=@""; - if ( [serverVersion isEqualToString:@"v2"] ) - additionalParameters = @"&skipEmpty=1"; - - return [self parseResponse:[self sendSynchronousRequest:[NSString stringWithFormat: @"/%@/albums/list.json?pageSize=%d&page=%d%@", serverVersion, pageSize, page,additionalParameters] httpMethod:@"GET"]]; - - }else{ - NSException *exception = [NSException exceptionWithName: @"Incorrect server version" - reason: @"Only version v1 and v2 are accept" - userInfo: nil]; - @throw exception; - } -} - -// return identification -- (NSString *) createAlbum:(Album *) album -{ - [self validateCredentials]; - - NSString *urlString = [NSString stringWithFormat: @"%@/v1/album/create.json", self.server]; - NSURL *url = [NSURL URLWithString:urlString]; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Url upload = [%@]. Execute OAuth and Multipart",urlString); - NSLog(@"Album name = %@",album.name); -#endif - - OAMutableURLRequest *oaUrlRequest = [self getUrlRequest:url]; - [oaUrlRequest setHTTPMethod:@"POST"]; - - OARequestParameter *nameParam = [[OARequestParameter alloc] initWithName:@"name" - value:album.name]; - - NSArray *params = [NSArray arrayWithObjects:nameParam, nil]; - [oaUrlRequest setParameters:params]; - - // prepare the request. This will be used to get the Authorization header and add in the multipart component - [oaUrlRequest prepare]; - - /* - * - * Using ASIHTTPRequest for Multipart. The authentication come from the OAMutableURLRequest - * - */ - ASIFormDataRequest *asiRequest = [ASIFormDataRequest requestWithURL:url]; - asiRequest.userAgentString=@"Trovebox iOS"; - - // set the authorization header to be used in the OAuth - NSDictionary *dictionary = [oaUrlRequest allHTTPHeaderFields]; - [asiRequest addRequestHeader:@"Authorization" value:[dictionary objectForKey:@"Authorization"]]; - - // set the parameter already added in the signature - [asiRequest addPostValue:album.name forKey:@"name"]; - [asiRequest startSynchronous]; - - NSDictionary *result = [self parseResponseAsNSDictionary:asiRequest]; - NSDictionary *dics = [result objectForKey:@"result"] ; - - // check if it is null - if ([dics class] == [NSNull class]){ - // if it is null, return an empty array - return @""; - }else { - return [dics objectForKey:@"id"]; - } -} - -- (NSString *) shareToken:(NSString *) id -{ - [self validateCredentials]; - - NSString *urlString = [NSString stringWithFormat: @"%@/token/photo/%@/create.json", self.server, id]; - NSURL *url = [NSURL URLWithString:urlString]; - - OAMutableURLRequest *oaUrlRequest = [self getUrlRequest:url]; - [oaUrlRequest setHTTPMethod:@"POST"]; - - // prepare the request. This will be used to get the Authorization header and add in the multipart component - [oaUrlRequest prepare]; - - ASIFormDataRequest *asiRequest = [ASIFormDataRequest requestWithURL:url]; - asiRequest.userAgentString=@"Trovebox iOS"; - - // set the authorization header to be used in the OAuth - NSDictionary *dictionary = [oaUrlRequest allHTTPHeaderFields]; - [asiRequest addRequestHeader:@"Authorization" value:[dictionary objectForKey:@"Authorization"]]; - [asiRequest startSynchronous]; - - NSDictionary *result = [self parseResponseAsNSDictionary:asiRequest]; - NSDictionary *dics = [result objectForKey:@"result"] ; - - // check if it is null - if ([dics class] == [NSNull class]){ - // if it is null, return an empty array - return @""; - }else { - return [NSString stringWithFormat:@"/token-%@", [dics objectForKey:@"id"]]; - } -} - -- (ASIHTTPRequest *) sendSynchronousRequest:(NSString *) request httpMethod:(NSString*) method{ - [self validateCredentials]; - - // create the url to connect to Trovebox - NSString *urlString = [NSString stringWithFormat: @"%@%@", self.server, request]; - -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Request to be sent = [%@]",urlString); - NSLog(@"Request http method = [%@]",method); - -#endif - - // transform in URL for the request - NSURL *url = [NSURL URLWithString:urlString]; - - OAMutableURLRequest *oaUrlRequest = [self getUrlRequest:url]; - [oaUrlRequest setHTTPMethod:method]; - - // prepare the Authentication Header - [oaUrlRequest prepare]; - - // set the authorization header to be used in the OAuth - NSDictionary *dictionary = [oaUrlRequest allHTTPHeaderFields]; - - if ([method isEqualToString:@"GET"]){ - // GET - ASIHTTPRequest *asiHttpRequest = [ASIHTTPRequest requestWithURL:url]; - [asiHttpRequest addRequestHeader:@"Authorization" value:[dictionary objectForKey:@"Authorization"]]; - asiHttpRequest.userAgentString=@"Trovebox iOS"; - [asiHttpRequest setTimeOutSeconds:60]; - - // send the request synchronous - [asiHttpRequest startSynchronous]; - - return asiHttpRequest; - }else{ - // POST - ASIFormDataRequest *asiRequest = [ASIFormDataRequest requestWithURL:url]; - [asiRequest addRequestHeader:@"Authorization" value:[dictionary objectForKey:@"Authorization"]]; - asiRequest.userAgentString=@"Trovebox iOS"; - [asiRequest setTimeOutSeconds:60]; - - [asiRequest startSynchronous]; - - return asiRequest; - } -} - -- (NSDictionary *) parseResponseAsNSDictionary:(ASIHTTPRequest *) response -{ -#ifdef DEVELOPMENT_ENABLED_JSON_RETURN - NSLog(@"Response = %@",response); -#endif -#ifdef DEVELOPMENT_ENABLED - NSLog(@"responseStatusMessage = %@", [response responseStatusMessage]); - NSLog(@"responseStatusCode = %i", [response responseStatusCode]); -#endif - - NSError *error = [response error]; - if (error) { -#ifdef DEVELOPMENT_ENABLED - NSLog(@"Error: %@", error); -#endif - NSException *exception = [NSException exceptionWithName: @"Response error" - reason: [error localizedDescription] - userInfo: nil]; - @throw exception; - } - - if ( [response responseStatusCode] != 200){ - // there is an error with the request - NSException *exception = [NSException exceptionWithName: @"Response error" - reason: [NSString stringWithFormat:@"%d - %@",[response responseStatusCode],[response responseStatusMessage]] - userInfo: nil]; - @throw exception; - } - - // parse response - SBJsonParser *parser =[[SBJsonParser alloc] init]; - NSDictionary *result = [parser objectWithString:[response responseString]]; - - // check the valid result - if (![WebService isMessageValid:result]){ - // invalid message - NSException *exception = [NSException exceptionWithName: @"Incorrect request" - reason: [NSString stringWithFormat:@"%@ - %@",[result objectForKey:@"code"],[result objectForKey:@"message"]] - userInfo: nil]; - @throw exception; - } - - return result; -} - -- (NSArray *) parseResponse:(ASIHTTPRequest *) response -{ - - NSDictionary *result = [self parseResponseAsNSDictionary:response]; - NSArray *array = [result objectForKey:@"result"] ; - - // check if user has photos - if ([array class] == [NSNull class]){ - // if it is null, return an empty array - return [NSArray array]; - }else { - return array; - } -} - -- (BOOL) isPhotoAlreadyOnServer:(NSString *) sha1{ - NSArray *result = [self parseResponse:[self sendSynchronousRequest:[NSString stringWithFormat:@"/v1/photos/list.json?hash=%@",sha1] httpMethod:@"GET"]]; - - // result can be null - if ([result class] != [NSNull class]) { - NSDictionary *photo = [result objectAtIndex:0]; - int totalRows = [[photo objectForKey:@"totalRows"] intValue]; - return (totalRows > 0); - } - - - return NO; -} - -- (void) validateCredentials{ - // validate if the service has all details for the account - if (self.oAuthKey == nil || - self.oAuthSecret == nil || - self.consumerKey == nil || - self.consumerSecret == nil){ - NSException *exception = [NSException exceptionWithName: @"Unathorized Access" - reason: @"Credentials is not configured correct" - userInfo: nil]; - @throw exception; - } -} - -- (OAMutableURLRequest*) getUrlRequest:(NSURL *) url -{ - -#ifdef DEVELOPMENT_CREDENTIALS_LOG_ENABLED - NSLog(@"auth key = %@",self.oAuthKey); - NSLog(@"auth secret = %@",self.oAuthSecret); - NSLog(@"consumer key = %@",self.consumerKey); - NSLog(@"consumer Secret = %@",self.consumerSecret); -#endif - - // token to send. We get the details from the user defaults - OAToken *token = [[OAToken alloc] initWithKey:self.oAuthKey - secret:self.oAuthSecret]; - - // consumer to send. We get the details from the user defaults - OAConsumer *consumer = [[OAConsumer alloc] initWithKey:self.consumerKey - secret:self.consumerSecret]; - - return [[OAMutableURLRequest alloc] initWithURL:url - consumer:consumer - token:token - realm:nil - signatureProvider:nil]; -} - -+ (BOOL) isMessageValid:(NSDictionary *)response{ - // get the content of code - NSString* code = [response objectForKey:@"code"]; - NSInteger icode = [code integerValue]; - - // is it different than 200, 201, 202, 204 - if (icode != 200 && icode != 201 && icode != 202 && icode != 204) - return NO; - - // another kind of message - return YES; -} - -- (NSString *) getScreenSizesForRequest -{ - // check if it is for iPad - if ([DisplayUtilities isIPad]){ - // check if ipad is retina - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - return @"300x300,2024x1536"; - }else{ - return @"200x200,1024x768"; - } - }else{ - // iphone/ipod => check retina - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - return @"300x300,1136x640"; - }else{ - // old models - return @"200x200,480x320"; - } - } -} -@end diff --git a/Photo/WebViewController.h b/Photo/WebViewController.h deleted file mode 100644 index c8563ad..0000000 --- a/Photo/WebViewController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// WebViewController.h -// Trovebox -// -// Created by Patrick Santana on 26/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface WebViewController : UIViewController - -@property (nonatomic, weak) UIWebView *m_cWebView; - - -@end diff --git a/Photo/WebViewController.m b/Photo/WebViewController.m deleted file mode 100644 index 9fa8040..0000000 --- a/Photo/WebViewController.m +++ /dev/null @@ -1,87 +0,0 @@ -// -// WebViewController.m -// Trovebox -// -// Created by Patrick Santana on 26/02/13. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "WebViewController.h" - -@interface WebViewController () - -@end - -@implementation WebViewController -@synthesize m_cWebView=_m_cWebView; - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - self.view.backgroundColor = [UIColor blackColor]; - self.tabBarItem.title=NSLocalizedString(@"Plans",@"Profile - plans web controller"); - self.title=NSLocalizedString(@"Plans",@"Profile - plans web controller"); - self.hidesBottomBarWhenPushed = NO; - self.wantsFullScreenLayout = YES; - } - return self; -} - -- (void)loadView -{ - CGRect webFrame = [[UIScreen mainScreen] applicationFrame]; - webFrame.size.height -= self.navigationController.navigationBar.frame.size.height; - UIWebView *pWebView = [[UIWebView alloc] initWithFrame:webFrame]; - pWebView.autoresizesSubviews = YES; - pWebView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth); - self.view = pWebView; - pWebView.scalesPageToFit = YES; - self.m_cWebView = pWebView; - - self.view.backgroundColor = UIColorFromRGB(0XFAF3EF); -} - - -- (void)viewDidLoad -{ - [super viewDidLoad]; - if( self.m_cWebView != nil ) - { - NSURL *url = [NSURL URLWithString:@"https://trovebox.com/plans/mobile"]; - NSURLRequest* request = [NSURLRequest requestWithURL:url]; - [self.m_cWebView loadRequest:request]; - } -} - -#pragma mark - Rotation - -- (BOOL) shouldAutorotate -{ - return YES; -} - -- (NSUInteger) supportedInterfaceOrientations -{ - return UIInterfaceOrientationMaskPortrait; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation -{ - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -@end diff --git a/Photo/de.lproj/Localizable.strings b/Photo/de.lproj/Localizable.strings deleted file mode 100644 index 611521d..0000000 Binary files a/Photo/de.lproj/Localizable.strings and /dev/null differ diff --git a/Photo/en.lproj/InfoPlist.strings b/Photo/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/Photo/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Photo/en.lproj/Localizable.strings b/Photo/en.lproj/Localizable.strings deleted file mode 100644 index 0dd2c8f..0000000 Binary files a/Photo/en.lproj/Localizable.strings and /dev/null differ diff --git a/Photo/images/45-movie-1.png b/Photo/images/45-movie-1.png deleted file mode 100644 index a8fa395..0000000 Binary files a/Photo/images/45-movie-1.png and /dev/null differ diff --git a/Photo/images/45-movie-1@2x.png b/Photo/images/45-movie-1@2x.png deleted file mode 100644 index f4c8ed1..0000000 Binary files a/Photo/images/45-movie-1@2x.png and /dev/null differ diff --git a/Photo/images/Icon-72.png b/Photo/images/Icon-72.png deleted file mode 100644 index 97651ef..0000000 Binary files a/Photo/images/Icon-72.png and /dev/null differ diff --git a/Photo/images/Icon-Small-50.png b/Photo/images/Icon-Small-50.png deleted file mode 100644 index 2ec41e4..0000000 Binary files a/Photo/images/Icon-Small-50.png and /dev/null differ diff --git a/Photo/images/Icon-Small.png b/Photo/images/Icon-Small.png deleted file mode 100644 index 5c52980..0000000 Binary files a/Photo/images/Icon-Small.png and /dev/null differ diff --git a/Photo/images/Icon.png b/Photo/images/Icon.png deleted file mode 100644 index 7c4c8ad..0000000 Binary files a/Photo/images/Icon.png and /dev/null differ diff --git a/Photo/images/Icon@2x.png b/Photo/images/Icon@2x.png deleted file mode 100644 index 8889bfe..0000000 Binary files a/Photo/images/Icon@2x.png and /dev/null differ diff --git a/Photo/images/appbar_empty.png b/Photo/images/appbar_empty.png deleted file mode 100644 index 4f876d3..0000000 Binary files a/Photo/images/appbar_empty.png and /dev/null differ diff --git a/Photo/images/appbar_empty@2x.png b/Photo/images/appbar_empty@2x.png deleted file mode 100644 index 1a4a616..0000000 Binary files a/Photo/images/appbar_empty@2x.png and /dev/null differ diff --git a/Photo/images/button-disclosure-form.png b/Photo/images/button-disclosure-form.png deleted file mode 100644 index 9a08856..0000000 Binary files a/Photo/images/button-disclosure-form.png and /dev/null differ diff --git a/Photo/images/button-disclosure-form@2x.png b/Photo/images/button-disclosure-form@2x.png deleted file mode 100644 index 37ae10b..0000000 Binary files a/Photo/images/button-disclosure-form@2x.png and /dev/null differ diff --git a/Photo/images/button-more.png b/Photo/images/button-more.png deleted file mode 100644 index 5db49af..0000000 Binary files a/Photo/images/button-more.png and /dev/null differ diff --git a/Photo/images/button-more@2x.png b/Photo/images/button-more@2x.png deleted file mode 100644 index 00e12cb..0000000 Binary files a/Photo/images/button-more@2x.png and /dev/null differ diff --git a/Photo/images/button-navigation-camera.png b/Photo/images/button-navigation-camera.png deleted file mode 100644 index 1e5d4ce..0000000 Binary files a/Photo/images/button-navigation-camera.png and /dev/null differ diff --git a/Photo/images/button-navigation-camera@2x.png b/Photo/images/button-navigation-camera@2x.png deleted file mode 100644 index 4e61286..0000000 Binary files a/Photo/images/button-navigation-camera@2x.png and /dev/null differ diff --git a/Photo/images/button-navigation-menu.png b/Photo/images/button-navigation-menu.png deleted file mode 100644 index 9e6ba5f..0000000 Binary files a/Photo/images/button-navigation-menu.png and /dev/null differ diff --git a/Photo/images/button-navigation-menu@2x.png b/Photo/images/button-navigation-menu@2x.png deleted file mode 100644 index 7258c25..0000000 Binary files a/Photo/images/button-navigation-menu@2x.png and /dev/null differ diff --git a/Photo/images/button-upgrade.png b/Photo/images/button-upgrade.png deleted file mode 100644 index 4ec8e7e..0000000 Binary files a/Photo/images/button-upgrade.png and /dev/null differ diff --git a/Photo/images/button-upgrade@2x.png b/Photo/images/button-upgrade@2x.png deleted file mode 100644 index ce9611f..0000000 Binary files a/Photo/images/button-upgrade@2x.png and /dev/null differ diff --git a/Photo/images/button-upload-form.png b/Photo/images/button-upload-form.png deleted file mode 100644 index 8f7f525..0000000 Binary files a/Photo/images/button-upload-form.png and /dev/null differ diff --git a/Photo/images/button-upload-form@2x.png b/Photo/images/button-upload-form@2x.png deleted file mode 100644 index 476fea1..0000000 Binary files a/Photo/images/button-upload-form@2x.png and /dev/null differ diff --git a/Photo/images/close_camera.png b/Photo/images/close_camera.png deleted file mode 100644 index f89996a..0000000 Binary files a/Photo/images/close_camera.png and /dev/null differ diff --git a/Photo/images/close_camera@2x.png b/Photo/images/close_camera@2x.png deleted file mode 100644 index 2cfd3d3..0000000 Binary files a/Photo/images/close_camera@2x.png and /dev/null differ diff --git a/Photo/images/edit.png b/Photo/images/edit.png deleted file mode 100644 index e9362b3..0000000 Binary files a/Photo/images/edit.png and /dev/null differ diff --git a/Photo/images/edit@2x.png b/Photo/images/edit@2x.png deleted file mode 100644 index 9b2e9c4..0000000 Binary files a/Photo/images/edit@2x.png and /dev/null differ diff --git a/Photo/images/empty_img.png b/Photo/images/empty_img.png deleted file mode 100644 index 8a704d7..0000000 Binary files a/Photo/images/empty_img.png and /dev/null differ diff --git a/Photo/images/empty_img@2x.png b/Photo/images/empty_img@2x.png deleted file mode 100644 index 712918d..0000000 Binary files a/Photo/images/empty_img@2x.png and /dev/null differ diff --git a/Photo/images/gallery-show-tags.png b/Photo/images/gallery-show-tags.png deleted file mode 100644 index fbdac44..0000000 Binary files a/Photo/images/gallery-show-tags.png and /dev/null differ diff --git a/Photo/images/gallery-show-tags@2x.png b/Photo/images/gallery-show-tags@2x.png deleted file mode 100644 index cceaa04..0000000 Binary files a/Photo/images/gallery-show-tags@2x.png and /dev/null differ diff --git a/Photo/images/home-already-uploaded.png b/Photo/images/home-already-uploaded.png deleted file mode 100644 index 4105869..0000000 Binary files a/Photo/images/home-already-uploaded.png and /dev/null differ diff --git a/Photo/images/home-already-uploaded@2x.png b/Photo/images/home-already-uploaded@2x.png deleted file mode 100644 index 470c08c..0000000 Binary files a/Photo/images/home-already-uploaded@2x.png and /dev/null differ diff --git a/Photo/images/home-brown-arrow.png b/Photo/images/home-brown-arrow.png deleted file mode 100644 index 1d95f1a..0000000 Binary files a/Photo/images/home-brown-arrow.png and /dev/null differ diff --git a/Photo/images/home-brown-arrow@2x.png b/Photo/images/home-brown-arrow@2x.png deleted file mode 100644 index 3c054a4..0000000 Binary files a/Photo/images/home-brown-arrow@2x.png and /dev/null differ diff --git a/Photo/images/home-geo-off-sharing.png b/Photo/images/home-geo-off-sharing.png deleted file mode 100644 index e53bd0c..0000000 Binary files a/Photo/images/home-geo-off-sharing.png and /dev/null differ diff --git a/Photo/images/home-geo-off-sharing@2x.png b/Photo/images/home-geo-off-sharing@2x.png deleted file mode 100644 index 94033b0..0000000 Binary files a/Photo/images/home-geo-off-sharing@2x.png and /dev/null differ diff --git a/Photo/images/home-geo-on-sharing.png b/Photo/images/home-geo-on-sharing.png deleted file mode 100644 index 014cd67..0000000 Binary files a/Photo/images/home-geo-on-sharing.png and /dev/null differ diff --git a/Photo/images/home-geo-on-sharing@2x.png b/Photo/images/home-geo-on-sharing@2x.png deleted file mode 100644 index 62e1fbf..0000000 Binary files a/Photo/images/home-geo-on-sharing@2x.png and /dev/null differ diff --git a/Photo/images/home-private.png b/Photo/images/home-private.png deleted file mode 100644 index 99c5e2c..0000000 Binary files a/Photo/images/home-private.png and /dev/null differ diff --git a/Photo/images/home-private@2x.png b/Photo/images/home-private@2x.png deleted file mode 100644 index db6d1ea..0000000 Binary files a/Photo/images/home-private@2x.png and /dev/null differ diff --git a/Photo/images/home-retry.png b/Photo/images/home-retry.png deleted file mode 100644 index b83c310..0000000 Binary files a/Photo/images/home-retry.png and /dev/null differ diff --git a/Photo/images/home-retry@2x.png b/Photo/images/home-retry@2x.png deleted file mode 100644 index 2d82510..0000000 Binary files a/Photo/images/home-retry@2x.png and /dev/null differ diff --git a/Photo/images/home-trovebox-logo.png b/Photo/images/home-trovebox-logo.png deleted file mode 100644 index e0db2a4..0000000 Binary files a/Photo/images/home-trovebox-logo.png and /dev/null differ diff --git a/Photo/images/home-trovebox-logo@2x.png b/Photo/images/home-trovebox-logo@2x.png deleted file mode 100644 index 54a1d46..0000000 Binary files a/Photo/images/home-trovebox-logo@2x.png and /dev/null differ diff --git a/Photo/images/home-upload-now.png b/Photo/images/home-upload-now.png deleted file mode 100644 index 3344ac0..0000000 Binary files a/Photo/images/home-upload-now.png and /dev/null differ diff --git a/Photo/images/home-upload-now@2x.png b/Photo/images/home-upload-now@2x.png deleted file mode 100644 index 6cccc1a..0000000 Binary files a/Photo/images/home-upload-now@2x.png and /dev/null differ diff --git a/Photo/images/home-uploaded.png b/Photo/images/home-uploaded.png deleted file mode 100644 index a555a0d..0000000 Binary files a/Photo/images/home-uploaded.png and /dev/null differ diff --git a/Photo/images/home-uploaded@2x.png b/Photo/images/home-uploaded@2x.png deleted file mode 100644 index 5c32e62..0000000 Binary files a/Photo/images/home-uploaded@2x.png and /dev/null differ diff --git a/Photo/images/home-waiting.png b/Photo/images/home-waiting.png deleted file mode 100644 index 042c490..0000000 Binary files a/Photo/images/home-waiting.png and /dev/null differ diff --git a/Photo/images/home-waiting@2x.png b/Photo/images/home-waiting@2x.png deleted file mode 100644 index 4581704..0000000 Binary files a/Photo/images/home-waiting@2x.png and /dev/null differ diff --git a/Photo/images/login-background-568h@2x.png b/Photo/images/login-background-568h@2x.png deleted file mode 100644 index 842acbf..0000000 Binary files a/Photo/images/login-background-568h@2x.png and /dev/null differ diff --git a/Photo/images/login-background.png b/Photo/images/login-background.png deleted file mode 100644 index c7ccaef..0000000 Binary files a/Photo/images/login-background.png and /dev/null differ diff --git a/Photo/images/login-background@2x.png b/Photo/images/login-background@2x.png deleted file mode 100644 index fac8f1c..0000000 Binary files a/Photo/images/login-background@2x.png and /dev/null differ diff --git a/Photo/images/login-create-account.png b/Photo/images/login-create-account.png deleted file mode 100644 index 67177bb..0000000 Binary files a/Photo/images/login-create-account.png and /dev/null differ diff --git a/Photo/images/login-create-account@2x.png b/Photo/images/login-create-account@2x.png deleted file mode 100644 index ee648d9..0000000 Binary files a/Photo/images/login-create-account@2x.png and /dev/null differ diff --git a/Photo/images/login-facebook.png b/Photo/images/login-facebook.png deleted file mode 100644 index 0089112..0000000 Binary files a/Photo/images/login-facebook.png and /dev/null differ diff --git a/Photo/images/login-facebook@2x.png b/Photo/images/login-facebook@2x.png deleted file mode 100644 index 3b6ea49..0000000 Binary files a/Photo/images/login-facebook@2x.png and /dev/null differ diff --git a/Photo/images/login-field-background.png b/Photo/images/login-field-background.png deleted file mode 100644 index cf6fcac..0000000 Binary files a/Photo/images/login-field-background.png and /dev/null differ diff --git a/Photo/images/login-field-background@2x.png b/Photo/images/login-field-background@2x.png deleted file mode 100644 index 2893a2c..0000000 Binary files a/Photo/images/login-field-background@2x.png and /dev/null differ diff --git a/Photo/images/login-login-with.png b/Photo/images/login-login-with.png deleted file mode 100644 index b3daba6..0000000 Binary files a/Photo/images/login-login-with.png and /dev/null differ diff --git a/Photo/images/login-login-with@2x.png b/Photo/images/login-login-with@2x.png deleted file mode 100644 index be8a805..0000000 Binary files a/Photo/images/login-login-with@2x.png and /dev/null differ diff --git a/Photo/images/login-login.png b/Photo/images/login-login.png deleted file mode 100644 index c20c279..0000000 Binary files a/Photo/images/login-login.png and /dev/null differ diff --git a/Photo/images/login-login@2x.png b/Photo/images/login-login@2x.png deleted file mode 100644 index 5a98172..0000000 Binary files a/Photo/images/login-login@2x.png and /dev/null differ diff --git a/Photo/images/login-recover.png b/Photo/images/login-recover.png deleted file mode 100644 index 24011d3..0000000 Binary files a/Photo/images/login-recover.png and /dev/null differ diff --git a/Photo/images/login-recover@2x.png b/Photo/images/login-recover@2x.png deleted file mode 100644 index d677854..0000000 Binary files a/Photo/images/login-recover@2x.png and /dev/null differ diff --git a/Photo/images/login-signup.png b/Photo/images/login-signup.png deleted file mode 100644 index a9c35d4..0000000 Binary files a/Photo/images/login-signup.png and /dev/null differ diff --git a/Photo/images/login-signup@2x.png b/Photo/images/login-signup@2x.png deleted file mode 100644 index babec52..0000000 Binary files a/Photo/images/login-signup@2x.png and /dev/null differ diff --git a/Photo/images/login-using-own-domain.png b/Photo/images/login-using-own-domain.png deleted file mode 100644 index d480574..0000000 Binary files a/Photo/images/login-using-own-domain.png and /dev/null differ diff --git a/Photo/images/login-using-own-domain@2x.png b/Photo/images/login-using-own-domain@2x.png deleted file mode 100644 index 7138358..0000000 Binary files a/Photo/images/login-using-own-domain@2x.png and /dev/null differ diff --git a/Photo/images/menu-album-selected.png b/Photo/images/menu-album-selected.png deleted file mode 100644 index 99d884f..0000000 Binary files a/Photo/images/menu-album-selected.png and /dev/null differ diff --git a/Photo/images/menu-album-selected@2x.png b/Photo/images/menu-album-selected@2x.png deleted file mode 100644 index f7edbe1..0000000 Binary files a/Photo/images/menu-album-selected@2x.png and /dev/null differ diff --git a/Photo/images/menu-album.png b/Photo/images/menu-album.png deleted file mode 100644 index ffda40c..0000000 Binary files a/Photo/images/menu-album.png and /dev/null differ diff --git a/Photo/images/menu-album@2x.png b/Photo/images/menu-album@2x.png deleted file mode 100644 index 14bcef9..0000000 Binary files a/Photo/images/menu-album@2x.png and /dev/null differ diff --git a/Photo/images/menu-gallery-selected.png b/Photo/images/menu-gallery-selected.png deleted file mode 100644 index 4aa794e..0000000 Binary files a/Photo/images/menu-gallery-selected.png and /dev/null differ diff --git a/Photo/images/menu-gallery-selected@2x.png b/Photo/images/menu-gallery-selected@2x.png deleted file mode 100644 index 751ac65..0000000 Binary files a/Photo/images/menu-gallery-selected@2x.png and /dev/null differ diff --git a/Photo/images/menu-gallery.png b/Photo/images/menu-gallery.png deleted file mode 100644 index 9fa58ef..0000000 Binary files a/Photo/images/menu-gallery.png and /dev/null differ diff --git a/Photo/images/menu-gallery@2x.png b/Photo/images/menu-gallery@2x.png deleted file mode 100644 index 6dd76f1..0000000 Binary files a/Photo/images/menu-gallery@2x.png and /dev/null differ diff --git a/Photo/images/menu-latest-selected.png b/Photo/images/menu-latest-selected.png deleted file mode 100644 index 9622712..0000000 Binary files a/Photo/images/menu-latest-selected.png and /dev/null differ diff --git a/Photo/images/menu-latest-selected@2x.png b/Photo/images/menu-latest-selected@2x.png deleted file mode 100644 index b3953cd..0000000 Binary files a/Photo/images/menu-latest-selected@2x.png and /dev/null differ diff --git a/Photo/images/menu-latest.png b/Photo/images/menu-latest.png deleted file mode 100644 index fa4e61e..0000000 Binary files a/Photo/images/menu-latest.png and /dev/null differ diff --git a/Photo/images/menu-latest@2x.png b/Photo/images/menu-latest@2x.png deleted file mode 100644 index 29f4b8f..0000000 Binary files a/Photo/images/menu-latest@2x.png and /dev/null differ diff --git a/Photo/images/menu-profile-selected.png b/Photo/images/menu-profile-selected.png deleted file mode 100644 index 7beda9c..0000000 Binary files a/Photo/images/menu-profile-selected.png and /dev/null differ diff --git a/Photo/images/menu-profile-selected@2x.png b/Photo/images/menu-profile-selected@2x.png deleted file mode 100644 index 0c5e7ba..0000000 Binary files a/Photo/images/menu-profile-selected@2x.png and /dev/null differ diff --git a/Photo/images/menu-profile.png b/Photo/images/menu-profile.png deleted file mode 100644 index ab8e7a4..0000000 Binary files a/Photo/images/menu-profile.png and /dev/null differ diff --git a/Photo/images/menu-profile@2x.png b/Photo/images/menu-profile@2x.png deleted file mode 100644 index 08ebee5..0000000 Binary files a/Photo/images/menu-profile@2x.png and /dev/null differ diff --git a/Photo/images/menu-search.png b/Photo/images/menu-search.png deleted file mode 100644 index cac9955..0000000 Binary files a/Photo/images/menu-search.png and /dev/null differ diff --git a/Photo/images/menu-search@2x.png b/Photo/images/menu-search@2x.png deleted file mode 100644 index 0f40e89..0000000 Binary files a/Photo/images/menu-search@2x.png and /dev/null differ diff --git a/Photo/images/menu-settings-selected.png b/Photo/images/menu-settings-selected.png deleted file mode 100644 index db947e0..0000000 Binary files a/Photo/images/menu-settings-selected.png and /dev/null differ diff --git a/Photo/images/menu-settings-selected@2x.png b/Photo/images/menu-settings-selected@2x.png deleted file mode 100644 index c7b811a..0000000 Binary files a/Photo/images/menu-settings-selected@2x.png and /dev/null differ diff --git a/Photo/images/menu-settings.png b/Photo/images/menu-settings.png deleted file mode 100644 index dcaf5e3..0000000 Binary files a/Photo/images/menu-settings.png and /dev/null differ diff --git a/Photo/images/menu-settings@2x.png b/Photo/images/menu-settings@2x.png deleted file mode 100644 index 69cf57b..0000000 Binary files a/Photo/images/menu-settings@2x.png and /dev/null differ diff --git a/Photo/images/menu-tags-selected.png b/Photo/images/menu-tags-selected.png deleted file mode 100644 index 4517024..0000000 Binary files a/Photo/images/menu-tags-selected.png and /dev/null differ diff --git a/Photo/images/menu-tags-selected@2x.png b/Photo/images/menu-tags-selected@2x.png deleted file mode 100644 index f0dccc4..0000000 Binary files a/Photo/images/menu-tags-selected@2x.png and /dev/null differ diff --git a/Photo/images/menu-tags.png b/Photo/images/menu-tags.png deleted file mode 100644 index c15c2bb..0000000 Binary files a/Photo/images/menu-tags.png and /dev/null differ diff --git a/Photo/images/menu-tags@2x.png b/Photo/images/menu-tags@2x.png deleted file mode 100644 index 16a6d61..0000000 Binary files a/Photo/images/menu-tags@2x.png and /dev/null differ diff --git a/Photo/images/menu-upload-selected.png b/Photo/images/menu-upload-selected.png deleted file mode 100644 index 30fb83a..0000000 Binary files a/Photo/images/menu-upload-selected.png and /dev/null differ diff --git a/Photo/images/menu-upload-selected@2x.png b/Photo/images/menu-upload-selected@2x.png deleted file mode 100644 index c29b704..0000000 Binary files a/Photo/images/menu-upload-selected@2x.png and /dev/null differ diff --git a/Photo/images/menu-upload.png b/Photo/images/menu-upload.png deleted file mode 100644 index 25f480d..0000000 Binary files a/Photo/images/menu-upload.png and /dev/null differ diff --git a/Photo/images/menu-upload@2x.png b/Photo/images/menu-upload@2x.png deleted file mode 100644 index dfe3c05..0000000 Binary files a/Photo/images/menu-upload@2x.png and /dev/null differ diff --git a/Photo/images/multiselection-cell-bg.png b/Photo/images/multiselection-cell-bg.png deleted file mode 100644 index ea0e1b7..0000000 Binary files a/Photo/images/multiselection-cell-bg.png and /dev/null differ diff --git a/Photo/images/multiselection-cell-bg@2x.png b/Photo/images/multiselection-cell-bg@2x.png deleted file mode 100644 index bd08277..0000000 Binary files a/Photo/images/multiselection-cell-bg@2x.png and /dev/null differ diff --git a/Photo/images/profile-albumsico.png b/Photo/images/profile-albumsico.png deleted file mode 100644 index 3ba0ee7..0000000 Binary files a/Photo/images/profile-albumsico.png and /dev/null differ diff --git a/Photo/images/profile-albumsico@2x.png b/Photo/images/profile-albumsico@2x.png deleted file mode 100644 index ecef118..0000000 Binary files a/Photo/images/profile-albumsico@2x.png and /dev/null differ diff --git a/Photo/images/profile-button-upgrade-pro.png b/Photo/images/profile-button-upgrade-pro.png deleted file mode 100644 index faa1e4c..0000000 Binary files a/Photo/images/profile-button-upgrade-pro.png and /dev/null differ diff --git a/Photo/images/profile-button-upgrade-pro@2x.png b/Photo/images/profile-button-upgrade-pro@2x.png deleted file mode 100644 index a3261fa..0000000 Binary files a/Photo/images/profile-button-upgrade-pro@2x.png and /dev/null differ diff --git a/Photo/images/profile-details-server-account.png b/Photo/images/profile-details-server-account.png deleted file mode 100644 index 501ccf3..0000000 Binary files a/Photo/images/profile-details-server-account.png and /dev/null differ diff --git a/Photo/images/profile-details-server-account@2x.png b/Photo/images/profile-details-server-account@2x.png deleted file mode 100644 index 09ff1ef..0000000 Binary files a/Photo/images/profile-details-server-account@2x.png and /dev/null differ diff --git a/Photo/images/profile-line.png b/Photo/images/profile-line.png deleted file mode 100644 index 489cb36..0000000 Binary files a/Photo/images/profile-line.png and /dev/null differ diff --git a/Photo/images/profile-line@2x.png b/Photo/images/profile-line@2x.png deleted file mode 100644 index 2bfe4cd..0000000 Binary files a/Photo/images/profile-line@2x.png and /dev/null differ diff --git a/Photo/images/profile-photosico.png b/Photo/images/profile-photosico.png deleted file mode 100644 index 9eeae8c..0000000 Binary files a/Photo/images/profile-photosico.png and /dev/null differ diff --git a/Photo/images/profile-photosico@2x.png b/Photo/images/profile-photosico@2x.png deleted file mode 100644 index 12664a1..0000000 Binary files a/Photo/images/profile-photosico@2x.png and /dev/null differ diff --git a/Photo/images/profile-storageico.png b/Photo/images/profile-storageico.png deleted file mode 100644 index 2c406f6..0000000 Binary files a/Photo/images/profile-storageico.png and /dev/null differ diff --git a/Photo/images/profile-storageico@2x.png b/Photo/images/profile-storageico@2x.png deleted file mode 100644 index a9bfe45..0000000 Binary files a/Photo/images/profile-storageico@2x.png and /dev/null differ diff --git a/Photo/images/profile-tagsico.png b/Photo/images/profile-tagsico.png deleted file mode 100644 index f473117..0000000 Binary files a/Photo/images/profile-tagsico.png and /dev/null differ diff --git a/Photo/images/profile-tagsico@2x.png b/Photo/images/profile-tagsico@2x.png deleted file mode 100644 index 6ace5f9..0000000 Binary files a/Photo/images/profile-tagsico@2x.png and /dev/null differ diff --git a/Photo/images/profilepic.png b/Photo/images/profilepic.png deleted file mode 100644 index d1b19ee..0000000 Binary files a/Photo/images/profilepic.png and /dev/null differ diff --git a/Photo/images/profilepic@2x.png b/Photo/images/profilepic@2x.png deleted file mode 100644 index b9de66d..0000000 Binary files a/Photo/images/profilepic@2x.png and /dev/null differ diff --git a/Photo/images/refresh.png b/Photo/images/refresh.png deleted file mode 100644 index 3bbc614..0000000 Binary files a/Photo/images/refresh.png and /dev/null differ diff --git a/Photo/images/refresh@2x.png b/Photo/images/refresh@2x.png deleted file mode 100644 index 1beff00..0000000 Binary files a/Photo/images/refresh@2x.png and /dev/null differ diff --git a/Photo/images/register-background-568h@2x.png b/Photo/images/register-background-568h@2x.png deleted file mode 100644 index a7f7e5d..0000000 Binary files a/Photo/images/register-background-568h@2x.png and /dev/null differ diff --git a/Photo/images/register-background.png b/Photo/images/register-background.png deleted file mode 100644 index 58481a6..0000000 Binary files a/Photo/images/register-background.png and /dev/null differ diff --git a/Photo/images/register-background@2x.png b/Photo/images/register-background@2x.png deleted file mode 100644 index 2ee1851..0000000 Binary files a/Photo/images/register-background@2x.png and /dev/null differ diff --git a/Photo/images/settingsbtn.png b/Photo/images/settingsbtn.png deleted file mode 100644 index e15b173..0000000 Binary files a/Photo/images/settingsbtn.png and /dev/null differ diff --git a/Photo/images/settingsbtn@2x.png b/Photo/images/settingsbtn@2x.png deleted file mode 100644 index 346e11a..0000000 Binary files a/Photo/images/settingsbtn@2x.png and /dev/null differ diff --git a/Photo/images/sync-already-uploaded.png b/Photo/images/sync-already-uploaded.png deleted file mode 100644 index 573fbed..0000000 Binary files a/Photo/images/sync-already-uploaded.png and /dev/null differ diff --git a/Photo/images/sync-already-uploaded@2x.png b/Photo/images/sync-already-uploaded@2x.png deleted file mode 100644 index d1defef..0000000 Binary files a/Photo/images/sync-already-uploaded@2x.png and /dev/null differ diff --git a/Photo/images/sync-hide.png b/Photo/images/sync-hide.png deleted file mode 100644 index 54ac757..0000000 Binary files a/Photo/images/sync-hide.png and /dev/null differ diff --git a/Photo/images/sync-hide@2x.png b/Photo/images/sync-hide@2x.png deleted file mode 100644 index 5aac884..0000000 Binary files a/Photo/images/sync-hide@2x.png and /dev/null differ diff --git a/Photo/images/sync-overlay.png b/Photo/images/sync-overlay.png deleted file mode 100644 index cf7c5d8..0000000 Binary files a/Photo/images/sync-overlay.png and /dev/null differ diff --git a/Photo/images/sync-overlay@2x.png b/Photo/images/sync-overlay@2x.png deleted file mode 100644 index 1fd6adc..0000000 Binary files a/Photo/images/sync-overlay@2x.png and /dev/null differ diff --git a/Photo/images/sync-show.png b/Photo/images/sync-show.png deleted file mode 100644 index d57e46c..0000000 Binary files a/Photo/images/sync-show.png and /dev/null differ diff --git a/Photo/images/sync-show@2x.png b/Photo/images/sync-show@2x.png deleted file mode 100644 index b5b12a2..0000000 Binary files a/Photo/images/sync-show@2x.png and /dev/null differ diff --git a/Photo/images/trovebox-logo-ipad.png b/Photo/images/trovebox-logo-ipad.png deleted file mode 100644 index 7e94ecb..0000000 Binary files a/Photo/images/trovebox-logo-ipad.png and /dev/null differ diff --git a/Photo/main.m b/Photo/main.m deleted file mode 100644 index 25530dd..0000000 --- a/Photo/main.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// main.m -// Trovebox -// -// Created by Patrick Santana on 25/09/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "AppDelegate.h" - -int main(int argc, char *argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/Photo/mwphotobrowser/DACircularProgressView.h b/Photo/mwphotobrowser/DACircularProgressView.h deleted file mode 100755 index 53835ff..0000000 --- a/Photo/mwphotobrowser/DACircularProgressView.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// DACircularProgressView.h -// DACircularProgress -// -// Created by Daniel Amitay on 2/6/12. -// Copyright (c) 2012 Daniel Amitay. All rights reserved. -// - -#import - -@interface DACircularProgressView : UIView - -@property(nonatomic, strong) UIColor *trackTintColor UI_APPEARANCE_SELECTOR; -@property(nonatomic, strong) UIColor *progressTintColor UI_APPEARANCE_SELECTOR; -@property(nonatomic) NSInteger roundedCorners UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-( -@property(nonatomic) CGFloat thicknessRatio UI_APPEARANCE_SELECTOR; -@property(nonatomic) CGFloat progress; - -@property(nonatomic) CGFloat indeterminateDuration UI_APPEARANCE_SELECTOR; -@property(nonatomic) NSInteger indeterminate UI_APPEARANCE_SELECTOR; // Can not use BOOL with UI_APPEARANCE_SELECTOR :-( - -- (void)setProgress:(CGFloat)progress animated:(BOOL)animated; - -@end diff --git a/Photo/mwphotobrowser/DACircularProgressView.m b/Photo/mwphotobrowser/DACircularProgressView.m deleted file mode 100755 index 6e0490c..0000000 --- a/Photo/mwphotobrowser/DACircularProgressView.m +++ /dev/null @@ -1,234 +0,0 @@ -// -// DACircularProgressView.m -// DACircularProgress -// -// Created by Daniel Amitay on 2/6/12. -// Copyright (c) 2012 Daniel Amitay. All rights reserved. -// - -#import "DACircularProgressView.h" - -#import - -@interface DACircularProgressLayer : CALayer - -@property(nonatomic, strong) UIColor *trackTintColor; -@property(nonatomic, strong) UIColor *progressTintColor; -@property(nonatomic) NSInteger roundedCorners; -@property(nonatomic) CGFloat thicknessRatio; -@property(nonatomic) CGFloat progress; - -@end - -@implementation DACircularProgressLayer - -@dynamic trackTintColor; -@dynamic progressTintColor; -@dynamic roundedCorners; -@dynamic thicknessRatio; -@dynamic progress; - -+ (BOOL)needsDisplayForKey:(NSString *)key -{ - return [key isEqualToString:@"progress"] ? YES : [super needsDisplayForKey:key]; -} - -- (void)drawInContext:(CGContextRef)context -{ - CGRect rect = self.bounds; - CGPoint centerPoint = CGPointMake(rect.size.height / 2.0f, rect.size.width / 2.0f); - CGFloat radius = MIN(rect.size.height, rect.size.width) / 2.0f; - - CGFloat progress = MIN(self.progress, 1.0f - FLT_EPSILON); - CGFloat radians = (progress * 2.0f * M_PI) - M_PI_2; - - CGContextSetFillColorWithColor(context, self.trackTintColor.CGColor); - CGMutablePathRef trackPath = CGPathCreateMutable(); - CGPathMoveToPoint(trackPath, NULL, centerPoint.x, centerPoint.y); - CGPathAddArc(trackPath, NULL, centerPoint.x, centerPoint.y, radius, 3.0f * M_PI_2, -M_PI_2, NO); - CGPathCloseSubpath(trackPath); - CGContextAddPath(context, trackPath); - CGContextFillPath(context); - CGPathRelease(trackPath); - - if (progress > 0.0f) - { - CGContextSetFillColorWithColor(context, self.progressTintColor.CGColor); - CGMutablePathRef progressPath = CGPathCreateMutable(); - CGPathMoveToPoint(progressPath, NULL, centerPoint.x, centerPoint.y); - CGPathAddArc(progressPath, NULL, centerPoint.x, centerPoint.y, radius, 3.0f * M_PI_2, radians, NO); - CGPathCloseSubpath(progressPath); - CGContextAddPath(context, progressPath); - CGContextFillPath(context); - CGPathRelease(progressPath); - } - - if (progress > 0.0f && self.roundedCorners) - { - CGFloat pathWidth = radius * self.thicknessRatio; - CGFloat xOffset = radius * (1.0f + ((1.0f - (self.thicknessRatio / 2.0f)) * cosf(radians))); - CGFloat yOffset = radius * (1.0f + ((1.0f - (self.thicknessRatio / 2.0f)) * sinf(radians))); - CGPoint endPoint = CGPointMake(xOffset, yOffset); - - CGContextAddEllipseInRect(context, CGRectMake(centerPoint.x - pathWidth / 2.0f, 0.0f, pathWidth, pathWidth)); - CGContextFillPath(context); - - CGContextAddEllipseInRect(context, CGRectMake(endPoint.x - pathWidth / 2.0f, endPoint.y - pathWidth / 2.0f, pathWidth, pathWidth)); - CGContextFillPath(context); - } - - CGContextSetBlendMode(context, kCGBlendModeClear); - CGFloat innerRadius = radius * (1.0f - self.thicknessRatio); - CGPoint newCenterPoint = CGPointMake(centerPoint.x - innerRadius, centerPoint.y - innerRadius); - CGContextAddEllipseInRect(context, CGRectMake(newCenterPoint.x, newCenterPoint.y, innerRadius * 2.0f, innerRadius * 2.0f)); - CGContextFillPath(context); -} - -@end - -@interface DACircularProgressView () - -@end - -@implementation DACircularProgressView - -+ (void) initialize -{ - if (self != [DACircularProgressView class]) - return; - - id appearance = [self appearance]; - [appearance setTrackTintColor:[[UIColor whiteColor] colorWithAlphaComponent:0.3f]]; - [appearance setProgressTintColor:[UIColor whiteColor]]; - [appearance setBackgroundColor:[UIColor clearColor]]; - [appearance setThicknessRatio:0.3f]; - [appearance setRoundedCorners:NO]; - - [appearance setIndeterminateDuration:2.0f]; - [appearance setIndeterminate:NO]; -} - -+ (Class)layerClass -{ - return [DACircularProgressLayer class]; -} - -- (DACircularProgressLayer *)circularProgressLayer -{ - return (DACircularProgressLayer *)self.layer; -} - -- (id)init -{ - return [super initWithFrame:CGRectMake(0.0f, 0.0f, 40.0f, 40.0f)]; -} - -- (void)didMoveToWindow -{ - CGFloat windowContentsScale = self.window.screen.scale; - self.circularProgressLayer.contentsScale = windowContentsScale; -} - -#pragma mark - Progress - -- (CGFloat)progress -{ - return self.circularProgressLayer.progress; -} - -- (void)setProgress:(CGFloat)progress -{ - [self setProgress:progress animated:NO]; -} - -- (void)setProgress:(CGFloat)progress animated:(BOOL)animated -{ - [self.layer removeAnimationForKey:@"indeterminateAnimation"]; - [self.circularProgressLayer removeAnimationForKey:@"progress"]; - - CGFloat pinnedProgress = MIN(MAX(progress, 0.0f), 1.0f); - if (animated) - { - CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"progress"]; - animation.duration = fabsf(self.progress - pinnedProgress); // Same duration as UIProgressView animation - animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - animation.fromValue = [NSNumber numberWithFloat:self.progress]; - animation.toValue = [NSNumber numberWithFloat:pinnedProgress]; - [self.circularProgressLayer addAnimation:animation forKey:@"progress"]; - } - else - { - [self.circularProgressLayer setNeedsDisplay]; - } - self.circularProgressLayer.progress = pinnedProgress; -} - -#pragma mark - UIAppearance methods - -- (UIColor *)trackTintColor -{ - return self.circularProgressLayer.trackTintColor; -} - -- (void)setTrackTintColor:(UIColor *)trackTintColor -{ - self.circularProgressLayer.trackTintColor = trackTintColor; - [self.circularProgressLayer setNeedsDisplay]; -} - -- (UIColor *)progressTintColor -{ - return self.circularProgressLayer.progressTintColor; -} - -- (void)setProgressTintColor:(UIColor *)progressTintColor -{ - self.circularProgressLayer.progressTintColor = progressTintColor; - [self.circularProgressLayer setNeedsDisplay]; -} - -- (NSInteger)roundedCorners -{ - return self.roundedCorners; -} - -- (void)setRoundedCorners:(NSInteger)roundedCorners -{ - self.circularProgressLayer.roundedCorners = roundedCorners; - [self.circularProgressLayer setNeedsDisplay]; -} - -- (CGFloat)thicknessRatio -{ - return self.circularProgressLayer.thicknessRatio; -} - -- (void)setThicknessRatio:(CGFloat)thicknessRatio -{ - self.circularProgressLayer.thicknessRatio = MIN(MAX(thicknessRatio, 0.f), 1.f); - [self.circularProgressLayer setNeedsDisplay]; -} - -- (NSInteger)indeterminate -{ - CAAnimation *spinAnimation = [self.layer animationForKey:@"indeterminateAnimation"]; - return (spinAnimation == nil ? 0 : 1); -} - -- (void)setIndeterminate:(NSInteger)indeterminate -{ - if (indeterminate && !self.indeterminate) - { - CABasicAnimation *spinAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; - spinAnimation.byValue = [NSNumber numberWithFloat:indeterminate > 0 ? 2.0f*M_PI : -2.0f*M_PI]; - spinAnimation.duration = self.indeterminateDuration; - spinAnimation.repeatCount = HUGE_VALF; - [self.layer addAnimation:spinAnimation forKey:@"indeterminateAnimation"]; - } - else - { - [self.layer removeAnimationForKey:@"indeterminateAnimation"]; - } -} - -@end diff --git a/Photo/mwphotobrowser/MWCaptionView.h b/Photo/mwphotobrowser/MWCaptionView.h deleted file mode 100644 index 6fd2c8c..0000000 --- a/Photo/mwphotobrowser/MWCaptionView.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MWCaptionView.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 30/12/2011. -// Copyright (c) 2011 __MyCompanyName__. All rights reserved. -// - -#import -#import "MWPhotoProtocol.h" - -@interface MWCaptionView : UIToolbar - -// Init -- (id)initWithPhoto:(id)photo; - -// To create your own custom caption view, subclass this view -// and override the following two methods (as well as any other -// UIView methods that you see fit): - -// Override -setupCaption so setup your subviews and customise the appearance -// of your custom caption -// You can access the photo's data by accessing the _photo ivar -// If you need more data per photo then simply subclass MWPhoto and return your -// subclass to the photo browsers -photoBrowser:photoAtIndex: delegate method -- (void)setupCaption; - -// Override -sizeThatFits: and return a CGSize specifying the height of your -// custom caption view. With width property is ignored and the caption is displayed -// the full width of the screen -- (CGSize)sizeThatFits:(CGSize)size; - -@end diff --git a/Photo/mwphotobrowser/MWCaptionView.m b/Photo/mwphotobrowser/MWCaptionView.m deleted file mode 100644 index 8b7f8d2..0000000 --- a/Photo/mwphotobrowser/MWCaptionView.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// MWCaptionView.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 30/12/2011. -// Copyright (c) 2011 __MyCompanyName__. All rights reserved. -// - -#import "MWCaptionView.h" -#import "MWPhoto.h" - -static const CGFloat labelPadding = 10; - -// Private -@interface MWCaptionView () { - id _photo; - UILabel *_label; -} -@end - -@implementation MWCaptionView - -- (id)initWithPhoto:(id)photo { - self = [super initWithFrame:CGRectMake(0, 0, 320, 44)]; // Random initial frame - if (self) { - self.userInteractionEnabled = NO; - _photo = photo; - - // Use iOS 7 blurry goodness - self.barStyle = UIBarStyleBlackTranslucent; - - self.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin; - [self setupCaption]; - } - return self; -} - -- (CGSize)sizeThatFits:(CGSize)size { - CGFloat maxHeight = 9999; - if (_label.numberOfLines > 0) maxHeight = _label.font.leading*_label.numberOfLines; - CGSize textSize = [_label.text sizeWithFont:_label.font - constrainedToSize:CGSizeMake(size.width - labelPadding*2, maxHeight) - lineBreakMode:_label.lineBreakMode]; - return CGSizeMake(size.width, textSize.height + labelPadding * 2); -} - -- (void)setupCaption { - _label = [[UILabel alloc] initWithFrame:CGRectIntegral(CGRectMake(labelPadding, 0, - self.bounds.size.width-labelPadding*2, - self.bounds.size.height))]; - _label.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; - _label.opaque = NO; - _label.backgroundColor = [UIColor clearColor]; - _label.textAlignment = NSTextAlignmentCenter; - _label.lineBreakMode = UILineBreakModeWordWrap; - _label.numberOfLines = 0; - _label.textColor = [UIColor whiteColor]; - _label.font = [UIFont systemFontOfSize:17]; - if ([_photo respondsToSelector:@selector(caption)]) { - _label.text = [_photo caption] ? [_photo caption] : @" "; - } - [self addSubview:_label]; -} - - -@end diff --git a/Photo/mwphotobrowser/MWPhoto.h b/Photo/mwphotobrowser/MWPhoto.h deleted file mode 100644 index b348c72..0000000 --- a/Photo/mwphotobrowser/MWPhoto.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// MWPhoto.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 17/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import -#import "MWPhotoProtocol.h" - -// This class models a photo/image and it's caption -// If you want to handle photos, caching, decompression -// yourself then you can simply ensure your custom data model -// conforms to MWPhotoProtocol -@interface MWPhoto : NSObject - -// Properties -@property (nonatomic, strong) NSString *caption; -@property (nonatomic, readonly) UIImage *image; -@property (nonatomic, readonly) NSURL *photoURL; -@property (nonatomic, readonly) NSString *filePath __attribute__((deprecated("Use photoURL"))); // Depreciated - -// Properties from our side -@property (nonatomic, strong) NSDate *date; -@property (nonatomic, strong) NSString *identification; -@property (nonatomic, strong) NSString *pageUrl; -@property (nonatomic, strong) NSString *title; -@property (nonatomic, strong) NSNumber *thumbWidth; -@property (nonatomic, strong) NSNumber *thumbHeight; -@property (nonatomic, strong) NSString *thumbUrl; -@property (nonatomic, strong) NSString *url; -@property (nonatomic, strong) NSNumber *permission; - -// Class -+ (MWPhoto *) photoWithImage:(UIImage *)image; -+ (MWPhoto *) photoWithFilePath:(NSString *)path __attribute__((deprecated("Use photoWithURL: with a file URL"))); // Depreciated -+ (MWPhoto *) photoWithURL:(NSURL *)url; -+ (MWPhoto *) photoWithServerInfo:(NSDictionary *) response; - -// Init -- (id) initWithImage:(UIImage *)image; -- (id) initWithURL:(NSURL *)url; -- (id) initWithFilePath:(NSString *)path __attribute__((deprecated("Use initWithURL: with a file URL"))); // Depreciated - -@end - diff --git a/Photo/mwphotobrowser/MWPhoto.m b/Photo/mwphotobrowser/MWPhoto.m deleted file mode 100644 index 8317438..0000000 --- a/Photo/mwphotobrowser/MWPhoto.m +++ /dev/null @@ -1,332 +0,0 @@ -// -// MWPhoto.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 17/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import "MWPhoto.h" -#import "MWPhotoBrowser.h" -#import -#import "SDWebImageDecoder.h" -#import - -// Private -@interface MWPhoto () { - - BOOL _loadingInProgress; - -} - -// Properties -@property (nonatomic, strong) UIImage *underlyingImage; // holds the decompressed image - -// Methods -- (void)decompressImageAndFinishLoading; -- (void)imageLoadingComplete; - -@end - -// MWPhoto -@implementation MWPhoto - -// Properties -@synthesize underlyingImage = _underlyingImage; -@synthesize caption = _caption; -@synthesize date = _date; -@synthesize identification = _identification; -@synthesize pageUrl = _pageUrl; -@synthesize title = _title; -@synthesize thumbWidth = _thumbWidth; -@synthesize thumbHeight = _thumbHeight; -@synthesize thumbUrl = _thumbUrl; -@synthesize url = _url; -@synthesize permission = _permission; - -#pragma mark Class Methods - -+ (MWPhoto *)photoWithImage:(UIImage *)image { - return [[MWPhoto alloc] initWithImage:image]; -} - -// Depricated -+ (MWPhoto *)photoWithFilePath:(NSString *)path { - return [MWPhoto photoWithURL:[NSURL fileURLWithPath:path]]; -} - -+ (MWPhoto *)photoWithURL:(NSURL *)url { - return [[MWPhoto alloc] initWithURL:url]; -} - -#pragma mark NSObject - -- (id)initWithImage:(UIImage *)image { - if ((self = [super init])) { - _image = image; - } - return self; -} - -// Depricated -- (id)initWithFilePath:(NSString *)path { - if ((self = [super init])) { - _photoURL = [NSURL fileURLWithPath:path]; - } - return self; -} - -- (id)initWithURL:(NSURL *)url { - if ((self = [super init])) { - _photoURL = [url copy]; - } - return self; -} - -#pragma mark MWPhoto Protocol Methods - -- (UIImage *)underlyingImage { - return _underlyingImage; -} - -- (void)loadUnderlyingImageAndNotify { - NSAssert([[NSThread currentThread] isMainThread], @"This method must be called on the main thread."); - _loadingInProgress = YES; - if (self.underlyingImage) { - - // Image already loaded - [self imageLoadingComplete]; - - } else { - - // Get underlying image - if (_image) { - - // We have UIImage so decompress - self.underlyingImage = _image; - [self decompressImageAndFinishLoading]; - - } else if (_photoURL) { - - // Check what type of url it is - if ([[[_photoURL scheme] lowercaseString] isEqualToString:@"assets-library"]) { - - // Load from asset library async - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - @autoreleasepool { - @try { - ALAssetsLibrary *assetslibrary = [[ALAssetsLibrary alloc] init]; - [assetslibrary assetForURL:_photoURL - resultBlock:^(ALAsset *asset){ - ALAssetRepresentation *rep = [asset defaultRepresentation]; - CGImageRef iref = [rep fullScreenImage]; - if (iref) { - self.underlyingImage = [UIImage imageWithCGImage:iref]; - } - [self performSelectorOnMainThread:@selector(decompressImageAndFinishLoading) withObject:nil waitUntilDone:NO]; - } - failureBlock:^(NSError *error) { - self.underlyingImage = nil; - MWLog(@"Photo from asset library error: %@",error); - [self performSelectorOnMainThread:@selector(decompressImageAndFinishLoading) withObject:nil waitUntilDone:NO]; - }]; - } @catch (NSException *e) { - MWLog(@"Photo from asset library error: %@", e); - [self performSelectorOnMainThread:@selector(decompressImageAndFinishLoading) withObject:nil waitUntilDone:NO]; - } - } - }); - - } else if ([_photoURL isFileReferenceURL]) { - - // Load from local file async - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - @autoreleasepool { - @try { - self.underlyingImage = [UIImage imageWithContentsOfFile:_photoURL.path]; - if (!_underlyingImage) { - MWLog(@"Error loading photo from path: %@", _photoPath); - } - } @finally { - [self performSelectorOnMainThread:@selector(decompressImageAndFinishLoading) withObject:nil waitUntilDone:NO]; - } - } - }); - - } else { - - // Load async from web (using SDWebImage) - @try { - SDWebImageManager *manager = [SDWebImageManager sharedManager]; - [manager downloadWithURL:_photoURL - options:0 - progress:^(NSUInteger receivedSize, long long expectedSize) { - float progress = receivedSize / (float)expectedSize; - NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithFloat:progress], @"progress", - self, @"photo", nil]; - [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_PROGRESS_NOTIFICATION object:dict]; - } - completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { - if (error) { - MWLog(@"SDWebImage failed to download image: %@", error); - } - self.underlyingImage = image; - [self decompressImageAndFinishLoading]; - }]; - } @catch (NSException *e) { - MWLog(@"Photo from web: %@", e); - [self decompressImageAndFinishLoading]; - } - - } - - } else { - - // Failed - no source - self.underlyingImage = nil; - [self imageLoadingComplete]; - - } - } -} - -// Release if we can get it again from path or url -- (void)unloadUnderlyingImage { - _loadingInProgress = NO; - if (self.underlyingImage) { - self.underlyingImage = nil; - } -} - -- (void)decompressImageAndFinishLoading { - NSAssert([[NSThread currentThread] isMainThread], @"This method must be called on the main thread."); - if (self.underlyingImage) { - // Decode image async to avoid lagging when UIKit lazy loads - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - self.underlyingImage = [UIImage decodedImageWithImage:self.underlyingImage]; - dispatch_async(dispatch_get_main_queue(), ^{ - // Finish on main thread - [self imageLoadingComplete]; - }); - }); - } else { - // Failed - [self imageLoadingComplete]; - } -} - -- (void)imageLoadingComplete { - NSAssert([[NSThread currentThread] isMainThread], @"This method must be called on the main thread."); - // Complete so notify - _loadingInProgress = NO; - [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_LOADING_DID_END_NOTIFICATION - object:self]; -} - - -#pragma mark - Internal code from Trovebox -+ (MWPhoto *) photoWithServerInfo:(NSDictionary *) response -{ - - if ([response objectForKey:@"id"] != nil){ - // Get title of the image - NSString *title = [response objectForKey:@"title"]; - if ([title class] == [NSNull class]) - title = @""; - - // small url and url - NSString *thumbUrl = [NSString stringWithFormat:@"%@", [response objectForKey:[self getPathThumb]]]; - NSString *url = [NSString stringWithFormat:@"%@", [response objectForKey:[self getPathUrl]]]; - NSString *pageUrl = [NSString stringWithFormat:@"%@", [response objectForKey:@"url"]]; - - // get width and height for the thumb - NSArray* thumbPhotoDetails = [response objectForKey:[self getDetailsThumb]]; - float thumbWidth = [[thumbPhotoDetails objectAtIndex:1] floatValue]; - float thumbHeight = [[thumbPhotoDetails objectAtIndex:2] floatValue]; - - // get the date since 1970 - double d = [[response objectForKey:@"dateTaken"] doubleValue]; - NSTimeInterval date = d; - - // create object - MWPhoto *photo = [MWPhoto photoWithURL:[NSURL URLWithString:url]]; - photo.url = [url copy]; - photo.thumbUrl = [thumbUrl copy]; - photo.thumbHeight = [NSNumber numberWithFloat:thumbHeight]; - photo.thumbWidth = [NSNumber numberWithFloat:thumbWidth]; - photo.pageUrl = [pageUrl copy]; - photo.identification = [NSString stringWithFormat:@"%@",[response objectForKey:@"id"]]; - photo.date = [NSDate dateWithTimeIntervalSince1970:date]; - - // permission - if ([[response objectForKey:@"permission"] isEqualToString:@"1"]) - photo.permission = [NSNumber numberWithBool:YES]; - else - photo.permission = [NSNumber numberWithBool:NO]; - - // return result - return photo; - } - - // error - return nil; - -} - -- (BOOL)isEqual:(id)other { - if (other == self) - return YES; - if (!other || ![other isKindOfClass:[self class]]) - return NO; - return [self isEqualToWidget:other]; -} - -- (BOOL)isEqualToWidget:(MWPhoto *)aWidget { - if (self == aWidget) - return YES; - if (![(id)[self identification] isEqual:[aWidget identification]]) - return NO; - if (![[self thumbUrl] isEqual:[aWidget thumbUrl]]) - return NO; - if (![[self url] isEqual:[aWidget url]]) - return NO; - return YES; -} - -+ (NSString*) getDetailsThumb -{ - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - return @"photo300x300"; - }else{ - return @"photo200x200"; - }} - -+ (NSString*) getPathThumb -{ - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - return @"path300x300"; - }else{ - return @"path200x200"; - } -} - -+ (NSString*) getPathUrl -{ - if ([DisplayUtilities isIPad]){ - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - return @"path2024x1536"; - }else{ - return @"path1024x768"; - } - }else{ - if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { - return @"path1136x640"; - }else{ - return @"path480x320"; - } - } -} - - -@end diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/Checkmark.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/Checkmark.png deleted file mode 100755 index 89c31d3..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/Checkmark.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/Checkmark@2x.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/Checkmark@2x.png deleted file mode 100755 index 5ac8c21..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/Checkmark@2x.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowLeft.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowLeft.png deleted file mode 100644 index 4075997..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowLeft.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowLeft@2x.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowLeft@2x.png deleted file mode 100644 index 16c36ea..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowLeft@2x.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineLeft.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineLeft.png deleted file mode 100644 index 412d996..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineLeft.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineLeft@2x.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineLeft@2x.png deleted file mode 100644 index ace4d4c..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineLeft@2x.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineRight.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineRight.png deleted file mode 100644 index 4f9fe77..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineRight.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineRight@2x.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineRight@2x.png deleted file mode 100644 index d45324b..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutlineRight@2x.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowRight.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowRight.png deleted file mode 100644 index 19109d3..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowRight.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowRight@2x.png b/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowRight@2x.png deleted file mode 100644 index 55c43c7..0000000 Binary files a/Photo/mwphotobrowser/MWPhotoBrowser.bundle/images/UIBarButtonItemArrowRight@2x.png and /dev/null differ diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.h b/Photo/mwphotobrowser/MWPhotoBrowser.h deleted file mode 100644 index 900e0b9..0000000 --- a/Photo/mwphotobrowser/MWPhotoBrowser.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// MWPhotoBrowser.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 14/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import -#import -#import "MWPhoto.h" -#import "MWPhotoProtocol.h" -#import "MWCaptionView.h" - -// Debug Logging -#if 0 // Set to 1 to enable debug logging -#define MWLog(x, ...) NSLog(x, ## __VA_ARGS__); -#else -#define MWLog(x, ...) -#endif - -// Delgate -@class MWPhotoBrowser; - -@protocol MWPhotoBrowserDelegate - -- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser; -- (id)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index; - -@optional - -- (MWCaptionView *)photoBrowser:(MWPhotoBrowser *)photoBrowser captionViewForPhotoAtIndex:(NSUInteger)index; -- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser didDisplayPhotoAtIndex:(NSUInteger)index; -- (void)photoBrowser:(MWPhotoBrowser *)photoBrowser actionButtonPressedForPhotoAtIndex:(NSUInteger)index; - -@end - -// MWPhotoBrowser -@interface MWPhotoBrowser : UIViewController - -// Properties -@property (nonatomic, weak) IBOutlet id delegate; -@property (nonatomic) BOOL zoomPhotosToFill; -@property (nonatomic) BOOL displayNavArrows; -@property (nonatomic) BOOL displayActionButton; -@property (nonatomic, readonly) NSUInteger currentIndex; - -// Init -- (id)initWithPhotos:(NSArray *)photosArray __attribute__((deprecated("Use initWithDelegate: instead"))); // Depreciated -- (id)initWithDelegate:(id )delegate; - -// Reloads the photo browser and refetches data -- (void)reloadData; - -// Set page that photo browser starts on -- (void)setCurrentPhotoIndex:(NSUInteger)index; -- (void)setInitialPageIndex:(NSUInteger)index __attribute__((deprecated("Use setCurrentPhotoIndex: instead"))); // Depreciated - -// Navigation -- (void)showNextPhotoAnimated:(BOOL)animated; -- (void)showPreviousPhotoAnimated:(BOOL)animated; - -@end diff --git a/Photo/mwphotobrowser/MWPhotoBrowser.m b/Photo/mwphotobrowser/MWPhotoBrowser.m deleted file mode 100644 index 9b4b2e4..0000000 --- a/Photo/mwphotobrowser/MWPhotoBrowser.m +++ /dev/null @@ -1,1381 +0,0 @@ -// -// MWPhotoBrowser.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 14/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import -#import "MWPhotoBrowser.h" -#import "MWZoomingScrollView.h" -#import "MBProgressHUD.h" -#import - -#define PADDING 10 -#define PAGE_INDEX_TAG_OFFSET 1000 -#define PAGE_INDEX(page) ([(page) tag] - PAGE_INDEX_TAG_OFFSET) -#define ACTION_SHEET_OLD_ACTIONS 2000 - -// Private -@interface MWPhotoBrowser () { - - // Data - NSUInteger _photoCount; - NSMutableArray *_photos; - NSArray *_depreciatedPhotoData; // Depreciated - - // Views - UIScrollView *_pagingScrollView; - - // Paging - NSMutableSet *_visiblePages, *_recycledPages; - NSUInteger _currentPageIndex; - NSUInteger _pageIndexBeforeRotation; - - // Navigation & controls - UIToolbar *_toolbar; - NSTimer *_controlVisibilityTimer; - UIBarButtonItem *_previousButton, *_nextButton, *_actionButton; - MBProgressHUD *_progressHUD; - UIActionSheet *_actionsSheet; - - // Appearance - BOOL _previousNavBarHidden; - BOOL _previousNavToolbarHidden; - UIBarStyle _previousNavBarStyle; - UIStatusBarStyle _previousStatusBarStyle; - UIColor *_previousNavBarTintColor; - UIColor *_previousNavBarBarTintColor; - UIBarButtonItem *_previousViewControllerBackButton; - UIImage *_previousNavigationBarBackgroundImageDefault; - UIImage *_previousNavigationBarBackgroundImageLandscapePhone; - - // Misc - BOOL _isVCBasedStatusBarAppearance; - BOOL _statusBarShouldBeHidden; - BOOL _displayActionButton; - BOOL _leaveStatusBarAlone; - BOOL _performingLayout; - BOOL _rotating; - BOOL _viewIsActive; // active as in it's in the view heirarchy - BOOL _didSavePreviousStateOfNavBar; - -} - -// Private -@property (nonatomic) UIActivityViewController *activityViewController; - -// Layout -- (void)performLayout; -- (BOOL)presentingViewControllerPrefersStatusBarHidden; - -// Nav Bar Appearance -- (void)setNavBarAppearance:(BOOL)animated; -- (void)storePreviousNavBarAppearance; -- (void)restorePreviousNavBarAppearance:(BOOL)animated; - -// Paging -- (void)tilePages; -- (BOOL)isDisplayingPageForIndex:(NSUInteger)index; -- (MWZoomingScrollView *)pageDisplayedAtIndex:(NSUInteger)index; -- (MWZoomingScrollView *)pageDisplayingPhoto:(id)photo; -- (MWZoomingScrollView *)dequeueRecycledPage; -- (void)configurePage:(MWZoomingScrollView *)page forIndex:(NSUInteger)index; -- (void)didStartViewingPageAtIndex:(NSUInteger)index; - -// Frames -- (CGRect)frameForPagingScrollView; -- (CGRect)frameForPageAtIndex:(NSUInteger)index; -- (CGSize)contentSizeForPagingScrollView; -- (CGPoint)contentOffsetForPageAtIndex:(NSUInteger)index; -- (CGRect)frameForToolbarAtOrientation:(UIInterfaceOrientation)orientation; -- (CGRect)frameForCaptionView:(MWCaptionView *)captionView atIndex:(NSUInteger)index; - -// Navigation -- (void)updateNavigation; -- (void)jumpToPageAtIndex:(NSUInteger)index animated:(BOOL)animated; -- (void)gotoPreviousPage; -- (void)gotoNextPage; - -// Controls -- (void)cancelControlHiding; -- (void)hideControlsAfterDelay; -- (void)setControlsHidden:(BOOL)hidden animated:(BOOL)animated permanent:(BOOL)permanent; -- (void)toggleControls; -- (BOOL)areControlsHidden; - -// Data -- (NSUInteger)numberOfPhotos; -- (id)photoAtIndex:(NSUInteger)index; -- (UIImage *)imageForPhoto:(id)photo; -- (void)loadAdjacentPhotosIfNecessary:(id)photo; -- (void)releaseAllUnderlyingPhotos:(BOOL)preserveCurrent; - -// Actions -- (void)savePhoto; -- (void)copyPhoto; -- (void)emailPhoto; - -@end - -// MWPhotoBrowser -@implementation MWPhotoBrowser - -#pragma mark - NSObject - -- (id)init { - if ((self = [super init])) { - [self _initialisation]; - } - return self; -} - -- (id)initWithDelegate:(id )delegate { - if ((self = [self init])) { - _delegate = delegate; - [self _initialisation]; - } - return self; -} - -- (id)initWithPhotos:(NSArray *)photosArray { - if ((self = [self init])) { - _depreciatedPhotoData = photosArray; - [self _initialisation]; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)decoder { - if ((self = [self initWithCoder:decoder])) { - [self _initialisation]; - } - return self; -} - -- (void)_initialisation { - - // Defaults - NSNumber *isVCBasedStatusBarAppearanceNum = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"]; - if (isVCBasedStatusBarAppearanceNum) { - _isVCBasedStatusBarAppearance = isVCBasedStatusBarAppearanceNum.boolValue; - } else { - _isVCBasedStatusBarAppearance = YES; // default - } - self.wantsFullScreenLayout = YES; - self.hidesBottomBarWhenPushed = YES; - _photoCount = NSNotFound; - _currentPageIndex = 0; - _displayActionButton = YES; - _displayNavArrows = NO; - _zoomPhotosToFill = YES; - _performingLayout = NO; // Reset on view did appear - _rotating = NO; - _viewIsActive = NO; - _visiblePages = [[NSMutableSet alloc] init]; - _recycledPages = [[NSMutableSet alloc] init]; - _photos = [[NSMutableArray alloc] init]; - - _didSavePreviousStateOfNavBar = NO; - if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]){ - self.automaticallyAdjustsScrollViewInsets = NO; - } - - // Listen for MWPhoto notifications - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleMWPhotoLoadingDidEndNotification:) - name:MWPHOTO_LOADING_DID_END_NOTIFICATION - object:nil]; - -} - -- (void)dealloc { - _pagingScrollView.delegate = nil; - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self releaseAllUnderlyingPhotos:NO]; - [[SDImageCache sharedImageCache] clearMemory]; // clear memory -} - -- (void)releaseAllUnderlyingPhotos:(BOOL)preserveCurrent { - // create a copy in case this array is modified while we are looping through - NSArray *photosCopy = [_photos copy]; - for (id p in photosCopy) { - if (p != [NSNull null]) { - if (preserveCurrent && p == [self photoAtIndex:self.currentIndex]) { - continue; // skip current - } - [p unloadUnderlyingImage]; - } - } -} - -- (void)didReceiveMemoryWarning { - - // Release any cached data, images, etc that aren't in use. - [self releaseAllUnderlyingPhotos:YES]; - [_recycledPages removeAllObjects]; - - // Releases the view if it doesn't have a superview. - [super didReceiveMemoryWarning]; - -} - -#pragma mark - View Loading - -// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. -- (void)viewDidLoad { - - // View - self.view.backgroundColor = [UIColor blackColor]; - self.view.clipsToBounds = YES; - - // Setup paging scrolling view - CGRect pagingScrollViewFrame = [self frameForPagingScrollView]; - _pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame]; - _pagingScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _pagingScrollView.pagingEnabled = YES; - _pagingScrollView.delegate = self; - _pagingScrollView.showsHorizontalScrollIndicator = NO; - _pagingScrollView.showsVerticalScrollIndicator = NO; - _pagingScrollView.backgroundColor = [UIColor blackColor]; - _pagingScrollView.contentSize = [self contentSizeForPagingScrollView]; - [self.view addSubview:_pagingScrollView]; - - // Toolbar - _toolbar = [[UIToolbar alloc] initWithFrame:[self frameForToolbarAtOrientation:self.interfaceOrientation]]; - _toolbar.tintColor = [UIColor whiteColor]; - if ([[UIToolbar class] respondsToSelector:@selector(appearance)]) { - [_toolbar setBackgroundImage:nil forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault]; - [_toolbar setBackgroundImage:nil forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsLandscapePhone]; - } - _toolbar.barStyle = UIBarStyleBlackTranslucent; - _toolbar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth; - - // Toolbar Items - if (self.displayNavArrows) { - NSString *arrowPathFormat = @"MWPhotoBrowser.bundle/images/UIBarButtonItemArrowOutline%@.png"; - _previousButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:arrowPathFormat, @"Left"]] style:UIBarButtonItemStylePlain target:self action:@selector(gotoPreviousPage)]; - _nextButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:arrowPathFormat, @"Right"]] style:UIBarButtonItemStylePlain target:self action:@selector(gotoNextPage)]; - } - if (self.displayActionButton) { - _actionButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(actionButtonPressed:)]; - } - - // Update - [self reloadData]; - - // Super - [super viewDidLoad]; - -} - -- (void)performLayout { - - // Setup - _performingLayout = YES; - NSUInteger numberOfPhotos = [self numberOfPhotos]; - - // Setup pages - [_visiblePages removeAllObjects]; - [_recycledPages removeAllObjects]; - - // Navigation buttons - if ([self.navigationController.viewControllers objectAtIndex:0] == self) { - // We're first on stack so show done button - UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done", nil) style:UIBarButtonItemStylePlain target:self action:@selector(doneButtonPressed:)]; - // Set appearance - if ([UIBarButtonItem respondsToSelector:@selector(appearance)]) { - [doneButton setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [doneButton setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; - [doneButton setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; - [doneButton setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsLandscapePhone]; - [doneButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateNormal]; - [doneButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateHighlighted]; - } - self.navigationItem.rightBarButtonItem = doneButton; - } else { - // We're not first so show back button - UIViewController *previousViewController = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-2]; - NSString *backButtonTitle = previousViewController.navigationItem.backBarButtonItem ? previousViewController.navigationItem.backBarButtonItem.title : previousViewController.title; - UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:backButtonTitle style:UIBarButtonItemStylePlain target:nil action:nil]; - // Appearance - if ([UIBarButtonItem respondsToSelector:@selector(appearance)]) { - [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; - [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; - [newBackButton setBackButtonBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsLandscapePhone]; - [newBackButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateNormal]; - [newBackButton setTitleTextAttributes:[NSDictionary dictionary] forState:UIControlStateHighlighted]; - } - _previousViewControllerBackButton = previousViewController.navigationItem.backBarButtonItem; // remember previous - previousViewController.navigationItem.backBarButtonItem = newBackButton; - } - - // Show action button on nav if we can - BOOL actionButtonOnNavBar = !self.navigationItem.rightBarButtonItem; - if (_actionButton && actionButtonOnNavBar) { - self.navigationItem.rightBarButtonItem = _actionButton; - } - - // Toolbar items - UIBarButtonItem *fixedLeftSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil]; - fixedLeftSpace.width = 32; // To balance action button - UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; - NSMutableArray *items = [[NSMutableArray alloc] init]; - if (_actionButton && !actionButtonOnNavBar) [items addObject:fixedLeftSpace]; - [items addObject:flexSpace]; - if (_previousButton || _nextButton) { - if (_previousButton && numberOfPhotos > 1) [items addObject:_previousButton]; - [items addObject:flexSpace]; - if (_nextButton && numberOfPhotos > 1) [items addObject:_nextButton]; - } - [items addObject:flexSpace]; - if (_actionButton && !actionButtonOnNavBar) [items addObject:_actionButton]; - [_toolbar setItems:items]; - - // Toolbar visibility - BOOL hideToolbar = YES; - for (UIBarButtonItem* item in _toolbar.items) { - if (item != fixedLeftSpace && item != flexSpace) { - hideToolbar = NO; - break; - } - } - if (hideToolbar) { - [_toolbar removeFromSuperview]; - } else { - [self.view addSubview:_toolbar]; - } - - // Update nav - [self updateNavigation]; - - // Content offset - _pagingScrollView.contentOffset = [self contentOffsetForPageAtIndex:_currentPageIndex]; - [self tilePages]; - _performingLayout = NO; - -} - -// Release any retained subviews of the main view. -- (void)viewDidUnload { - _currentPageIndex = 0; - _pagingScrollView = nil; - _visiblePages = nil; - _recycledPages = nil; - _toolbar = nil; - _previousButton = nil; - _nextButton = nil; - _progressHUD = nil; - [super viewDidUnload]; -} - -- (BOOL)presentingViewControllerPrefersStatusBarHidden { - UIViewController *presenting = self.presentingViewController; - if (presenting) { - if ([presenting isKindOfClass:[UINavigationController class]]) { - presenting = [(UINavigationController *)presenting topViewController]; - } - } else { - // We're in a navigation controller so get previous one! - if (self.navigationController && self.navigationController.viewControllers.count > 1) { - presenting = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-2]; - } - } - if (presenting) { - return [presenting prefersStatusBarHidden]; - } else { - return NO; - } -} - -#pragma mark - Appearance - -- (void)viewWillAppear:(BOOL)animated { - - // Super - [super viewWillAppear:animated]; - - // Status bar - if ([UIViewController instancesRespondToSelector:@selector(prefersStatusBarHidden)]) { - _leaveStatusBarAlone = [self presentingViewControllerPrefersStatusBarHidden]; - } else { - _leaveStatusBarAlone = [UIApplication sharedApplication].statusBarHidden; - } - if (!_leaveStatusBarAlone && self.wantsFullScreenLayout && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { - _previousStatusBarStyle = [[UIApplication sharedApplication] statusBarStyle]; - [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:animated]; - } - - // Navigation bar appearance - if (!_viewIsActive && [self.navigationController.viewControllers objectAtIndex:0] != self) { - [self storePreviousNavBarAppearance]; - } - [self setNavBarAppearance:animated]; - - // Hide navigation controller's toolbar - _previousNavToolbarHidden = self.navigationController.toolbarHidden; - [self.navigationController setToolbarHidden:YES]; - - // Update UI - [self hideControlsAfterDelay]; - -} - -- (void)viewWillDisappear:(BOOL)animated { - - // Check that we're being popped for good - if ([self.navigationController.viewControllers objectAtIndex:0] != self && - ![self.navigationController.viewControllers containsObject:self]) { - - // State - _viewIsActive = NO; - - // Bar state / appearance - [self restorePreviousNavBarAppearance:animated]; - - } - - // Controls - [self.navigationController.navigationBar.layer removeAllAnimations]; // Stop all animations on nav bar - [NSObject cancelPreviousPerformRequestsWithTarget:self]; // Cancel any pending toggles from taps - [self setControlsHidden:NO animated:NO permanent:YES]; - - // Status bar - if (!_leaveStatusBarAlone && self.wantsFullScreenLayout && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { - [[UIApplication sharedApplication] setStatusBarStyle:_previousStatusBarStyle animated:animated]; - } - - // Show navigation controller's toolbar - [self.navigationController setToolbarHidden:_previousNavToolbarHidden]; - - // Super - [super viewWillDisappear:animated]; - -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - _viewIsActive = YES; -} - -#pragma mark - Nav Bar Appearance - -- (void)setNavBarAppearance:(BOOL)animated { - [self.navigationController setNavigationBarHidden:NO animated:animated]; - UINavigationBar *navBar = self.navigationController.navigationBar; - navBar.tintColor = [UIColor whiteColor]; - if ([navBar respondsToSelector:@selector(setBarTintColor:)]) { - navBar.barTintColor = nil; - navBar.shadowImage = nil; - } - navBar.barStyle = UIBarStyleBlackTranslucent; - if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { - [navBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; - [navBar setBackgroundImage:nil forBarMetrics:UIBarMetricsLandscapePhone]; - } -} - -- (void)storePreviousNavBarAppearance { - _didSavePreviousStateOfNavBar = YES; - if ([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]) { - _previousNavBarBarTintColor = self.navigationController.navigationBar.barTintColor; - } - _previousNavBarTintColor = self.navigationController.navigationBar.tintColor; - _previousNavBarHidden = self.navigationController.navigationBarHidden; - _previousNavBarStyle = self.navigationController.navigationBar.barStyle; - if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { - _previousNavigationBarBackgroundImageDefault = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault]; - _previousNavigationBarBackgroundImageLandscapePhone = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsLandscapePhone]; - } -} - -- (void)restorePreviousNavBarAppearance:(BOOL)animated { - if (_didSavePreviousStateOfNavBar) { - [self.navigationController setNavigationBarHidden:_previousNavBarHidden animated:animated]; - UINavigationBar *navBar = self.navigationController.navigationBar; - navBar.tintColor = _previousNavBarTintColor; - if ([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]) { - navBar.barTintColor = _previousNavBarBarTintColor; - } - navBar.barStyle = _previousNavBarStyle; - if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { - [navBar setBackgroundImage:_previousNavigationBarBackgroundImageDefault forBarMetrics:UIBarMetricsDefault]; - [navBar setBackgroundImage:_previousNavigationBarBackgroundImageLandscapePhone forBarMetrics:UIBarMetricsLandscapePhone]; - } - // Restore back button if we need to - if (_previousViewControllerBackButton) { - UIViewController *previousViewController = [self.navigationController topViewController]; // We've disappeared so previous is now top - previousViewController.navigationItem.backBarButtonItem = _previousViewControllerBackButton; - _previousViewControllerBackButton = nil; - } - } -} - -#pragma mark - Layout - -- (void)viewWillLayoutSubviews { - - // Super - [super viewWillLayoutSubviews]; - - // Flag - _performingLayout = YES; - - // Toolbar - _toolbar.frame = [self frameForToolbarAtOrientation:self.interfaceOrientation]; - - // Remember index - NSUInteger indexPriorToLayout = _currentPageIndex; - - // Get paging scroll view frame to determine if anything needs changing - CGRect pagingScrollViewFrame = [self frameForPagingScrollView]; - - // Frame needs changing - _pagingScrollView.frame = pagingScrollViewFrame; - - // Recalculate contentSize based on current orientation - _pagingScrollView.contentSize = [self contentSizeForPagingScrollView]; - - // Adjust frames and configuration of each visible page - for (MWZoomingScrollView *page in _visiblePages) { - NSUInteger index = PAGE_INDEX(page); - page.frame = [self frameForPageAtIndex:index]; - page.captionView.frame = [self frameForCaptionView:page.captionView atIndex:index]; - - // Adjust scales if bounds has changed since last time - static CGRect previousBounds = {0}; - if (!CGRectEqualToRect(previousBounds, self.view.bounds)) { - // Update zooms for new bounds - [page setMaxMinZoomScalesForCurrentBounds]; - previousBounds = self.view.bounds; - } - - } - - // Adjust contentOffset to preserve page location based on values collected prior to location - _pagingScrollView.contentOffset = [self contentOffsetForPageAtIndex:indexPriorToLayout]; - [self didStartViewingPageAtIndex:_currentPageIndex]; // initial - - // Reset - _currentPageIndex = indexPriorToLayout; - _performingLayout = NO; - -} - -#pragma mark - Rotation - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { - return YES; -} - -- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - - // Remember page index before rotation - _pageIndexBeforeRotation = _currentPageIndex; - _rotating = YES; - - // In iOS 7 the nav bar gets shown after rotation, but might as well do this for everything! - if ([self areControlsHidden]) { - // Force hidden - self.navigationController.navigationBarHidden = YES; - } - -} - -- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - - // Perform layout - _currentPageIndex = _pageIndexBeforeRotation; - - // Delay control holding - [self hideControlsAfterDelay]; - -} - -- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { - _rotating = NO; - // Ensure nav bar isn't re-displayed - if ([self areControlsHidden]) { - self.navigationController.navigationBarHidden = NO; - self.navigationController.navigationBar.alpha = 0; - } -} - -#pragma mark - Data - -- (void)reloadData { - - // Reset - _photoCount = NSNotFound; - - // Get data - NSUInteger numberOfPhotos = [self numberOfPhotos]; - [self releaseAllUnderlyingPhotos:YES]; - [_photos removeAllObjects]; - for (int i = 0; i < numberOfPhotos; i++) [_photos addObject:[NSNull null]]; - - // Remove everything - while (_pagingScrollView.subviews.count) { - [[_pagingScrollView.subviews lastObject] removeFromSuperview]; - } - - // Update current page index - _currentPageIndex = MAX(0, MIN(_currentPageIndex, numberOfPhotos - 1)); - - // Update - [self performLayout]; - - // Layout - [self.view setNeedsLayout]; - -} - -- (NSUInteger)numberOfPhotos { - if (_photoCount == NSNotFound) { - if ([_delegate respondsToSelector:@selector(numberOfPhotosInPhotoBrowser:)]) { - _photoCount = [_delegate numberOfPhotosInPhotoBrowser:self]; - } else if (_depreciatedPhotoData) { - _photoCount = _depreciatedPhotoData.count; - } - } - if (_photoCount == NSNotFound) _photoCount = 0; - return _photoCount; -} - -- (id)photoAtIndex:(NSUInteger)index { - id photo = nil; - if (index < _photos.count) { - if ([_photos objectAtIndex:index] == [NSNull null]) { - if ([_delegate respondsToSelector:@selector(photoBrowser:photoAtIndex:)]) { - photo = [_delegate photoBrowser:self photoAtIndex:index]; - } else if (_depreciatedPhotoData && index < _depreciatedPhotoData.count) { - photo = [_depreciatedPhotoData objectAtIndex:index]; - } - if (photo) [_photos replaceObjectAtIndex:index withObject:photo]; - } else { - photo = [_photos objectAtIndex:index]; - } - } - return photo; -} - -- (MWCaptionView *)captionViewForPhotoAtIndex:(NSUInteger)index { - MWCaptionView *captionView = nil; - if ([_delegate respondsToSelector:@selector(photoBrowser:captionViewForPhotoAtIndex:)]) { - captionView = [_delegate photoBrowser:self captionViewForPhotoAtIndex:index]; - } else { - id photo = [self photoAtIndex:index]; - if ([photo respondsToSelector:@selector(caption)]) { - if ([photo caption]) captionView = [[MWCaptionView alloc] initWithPhoto:photo]; - } - } - captionView.alpha = [self areControlsHidden] ? 0 : 1; // Initial alpha - return captionView; -} - -- (UIImage *)imageForPhoto:(id)photo { - if (photo) { - // Get image or obtain in background - if ([photo underlyingImage]) { - return [photo underlyingImage]; - } else { - [photo loadUnderlyingImageAndNotify]; - } - } - return nil; -} - -- (void)loadAdjacentPhotosIfNecessary:(id)photo { - MWZoomingScrollView *page = [self pageDisplayingPhoto:photo]; - if (page) { - // If page is current page then initiate loading of previous and next pages - NSUInteger pageIndex = PAGE_INDEX(page); - if (_currentPageIndex == pageIndex) { - if (pageIndex > 0) { - // Preload index - 1 - id photo = [self photoAtIndex:pageIndex-1]; - if (![photo underlyingImage]) { - [photo loadUnderlyingImageAndNotify]; - MWLog(@"Pre-loading image at index %i", pageIndex-1); - } - } - if (pageIndex < [self numberOfPhotos] - 1) { - // Preload index + 1 - id photo = [self photoAtIndex:pageIndex+1]; - if (![photo underlyingImage]) { - [photo loadUnderlyingImageAndNotify]; - MWLog(@"Pre-loading image at index %i", pageIndex+1); - } - } - } - } -} - -#pragma mark - MWPhoto Loading Notification - -- (void)handleMWPhotoLoadingDidEndNotification:(NSNotification *)notification { - id photo = [notification object]; - MWZoomingScrollView *page = [self pageDisplayingPhoto:photo]; - if (page) { - if ([photo underlyingImage]) { - // Successful load - [page displayImage]; - [self loadAdjacentPhotosIfNecessary:photo]; - } else { - // Failed to load - [page displayImageFailure]; - } - // Update nav - [self updateNavigation]; - } -} - -#pragma mark - Paging - -- (void)tilePages { - - // Calculate which pages should be visible - // Ignore padding as paging bounces encroach on that - // and lead to false page loads - CGRect visibleBounds = _pagingScrollView.bounds; - int iFirstIndex = (int)floorf((CGRectGetMinX(visibleBounds)+PADDING*2) / CGRectGetWidth(visibleBounds)); - int iLastIndex = (int)floorf((CGRectGetMaxX(visibleBounds)-PADDING*2-1) / CGRectGetWidth(visibleBounds)); - if (iFirstIndex < 0) iFirstIndex = 0; - if (iFirstIndex > [self numberOfPhotos] - 1) iFirstIndex = [self numberOfPhotos] - 1; - if (iLastIndex < 0) iLastIndex = 0; - if (iLastIndex > [self numberOfPhotos] - 1) iLastIndex = [self numberOfPhotos] - 1; - - // Recycle no longer needed pages - NSInteger pageIndex; - for (MWZoomingScrollView *page in _visiblePages) { - pageIndex = PAGE_INDEX(page); - if (pageIndex < (NSUInteger)iFirstIndex || pageIndex > (NSUInteger)iLastIndex) { - [_recycledPages addObject:page]; - [page prepareForReuse]; - [page removeFromSuperview]; - MWLog(@"Removed page at index %i", PAGE_INDEX(page)); - } - } - [_visiblePages minusSet:_recycledPages]; - while (_recycledPages.count > 2) // Only keep 2 recycled pages - [_recycledPages removeObject:[_recycledPages anyObject]]; - - // Add missing pages - for (NSUInteger index = (NSUInteger)iFirstIndex; index <= (NSUInteger)iLastIndex; index++) { - if (![self isDisplayingPageForIndex:index]) { - - // Add new page - MWZoomingScrollView *page = [self dequeueRecycledPage]; - if (!page) { - page = [[MWZoomingScrollView alloc] initWithPhotoBrowser:self]; - } - [self configurePage:page forIndex:index]; - [_visiblePages addObject:page]; - [_pagingScrollView addSubview:page]; - MWLog(@"Added page at index %i", index); - - // Add caption - MWCaptionView *captionView = [self captionViewForPhotoAtIndex:index]; - captionView.frame = [self frameForCaptionView:captionView atIndex:index]; - [_pagingScrollView addSubview:captionView]; - page.captionView = captionView; - - } - } - -} - -- (BOOL)isDisplayingPageForIndex:(NSUInteger)index { - for (MWZoomingScrollView *page in _visiblePages) - if (PAGE_INDEX(page) == index) return YES; - return NO; -} - -- (MWZoomingScrollView *)pageDisplayedAtIndex:(NSUInteger)index { - MWZoomingScrollView *thePage = nil; - for (MWZoomingScrollView *page in _visiblePages) { - if (PAGE_INDEX(page) == index) { - thePage = page; break; - } - } - return thePage; -} - -- (MWZoomingScrollView *)pageDisplayingPhoto:(id)photo { - MWZoomingScrollView *thePage = nil; - for (MWZoomingScrollView *page in _visiblePages) { - if (page.photo == photo) { - thePage = page; break; - } - } - return thePage; -} - -- (void)configurePage:(MWZoomingScrollView *)page forIndex:(NSUInteger)index { - page.frame = [self frameForPageAtIndex:index]; - page.tag = PAGE_INDEX_TAG_OFFSET + index; - page.photo = [self photoAtIndex:index]; -} - -- (MWZoomingScrollView *)dequeueRecycledPage { - MWZoomingScrollView *page = [_recycledPages anyObject]; - if (page) { - [_recycledPages removeObject:page]; - } - return page; -} - -// Handle page changes -- (void)didStartViewingPageAtIndex:(NSUInteger)index { - - if (![self numberOfPhotos]) { - // Show controls - [self setControlsHidden:NO animated:YES permanent:YES]; - return; - } - - // Release images further away than +/-1 - NSUInteger i; - if (index > 0) { - // Release anything < index - 1 - for (i = 0; i < index-1; i++) { - id photo = [_photos objectAtIndex:i]; - if (photo != [NSNull null]) { - [photo unloadUnderlyingImage]; - [_photos replaceObjectAtIndex:i withObject:[NSNull null]]; - MWLog(@"Released underlying image at index %i", i); - } - } - } - if (index < [self numberOfPhotos] - 1) { - // Release anything > index + 1 - for (i = index + 2; i < _photos.count; i++) { - id photo = [_photos objectAtIndex:i]; - if (photo != [NSNull null]) { - [photo unloadUnderlyingImage]; - [_photos replaceObjectAtIndex:i withObject:[NSNull null]]; - MWLog(@"Released underlying image at index %i", i); - } - } - } - - // Load adjacent images if needed and the photo is already - // loaded. Also called after photo has been loaded in background - id currentPhoto = [self photoAtIndex:index]; - if ([currentPhoto underlyingImage]) { - // photo loaded so load ajacent now - [self loadAdjacentPhotosIfNecessary:currentPhoto]; - } - - // Notify delegate - static NSUInteger prevIndex = NSUIntegerMax; - if (index != prevIndex) { - if ([_delegate respondsToSelector:@selector(photoBrowser:didDisplayPhotoAtIndex:)]) - [_delegate photoBrowser:self didDisplayPhotoAtIndex:index]; - prevIndex = index; - } - - // Update nav - [self updateNavigation]; - -} - -#pragma mark - Frame Calculations - -- (CGRect)frameForPagingScrollView { - CGRect frame = self.view.bounds;// [[UIScreen mainScreen] bounds]; - frame.origin.x -= PADDING; - frame.size.width += (2 * PADDING); - return CGRectIntegral(frame); -} - -- (CGRect)frameForPageAtIndex:(NSUInteger)index { - // We have to use our paging scroll view's bounds, not frame, to calculate the page placement. When the device is in - // landscape orientation, the frame will still be in portrait because the pagingScrollView is the root view controller's - // view, so its frame is in window coordinate space, which is never rotated. Its bounds, however, will be in landscape - // because it has a rotation transform applied. - CGRect bounds = _pagingScrollView.bounds; - CGRect pageFrame = bounds; - pageFrame.size.width -= (2 * PADDING); - pageFrame.origin.x = (bounds.size.width * index) + PADDING; - return CGRectIntegral(pageFrame); -} - -- (CGSize)contentSizeForPagingScrollView { - // We have to use the paging scroll view's bounds to calculate the contentSize, for the same reason outlined above. - CGRect bounds = _pagingScrollView.bounds; - return CGSizeMake(bounds.size.width * [self numberOfPhotos], bounds.size.height); -} - -- (CGPoint)contentOffsetForPageAtIndex:(NSUInteger)index { - CGFloat pageWidth = _pagingScrollView.bounds.size.width; - CGFloat newOffset = index * pageWidth; - return CGPointMake(newOffset, 0); -} - -- (CGRect)frameForToolbarAtOrientation:(UIInterfaceOrientation)orientation { - CGFloat height = 44; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && - UIInterfaceOrientationIsLandscape(orientation)) height = 32; - return CGRectIntegral(CGRectMake(0, self.view.bounds.size.height - height, self.view.bounds.size.width, height)); -} - -- (CGRect)frameForCaptionView:(MWCaptionView *)captionView atIndex:(NSUInteger)index { - CGRect pageFrame = [self frameForPageAtIndex:index]; - CGSize captionSize = [captionView sizeThatFits:CGSizeMake(pageFrame.size.width, 0)]; - CGRect captionFrame = CGRectMake(pageFrame.origin.x, - pageFrame.size.height - captionSize.height - (_toolbar.superview?_toolbar.frame.size.height:0), - pageFrame.size.width, - captionSize.height); - return CGRectIntegral(captionFrame); -} - -#pragma mark - UIScrollView Delegate - -- (void)scrollViewDidScroll:(UIScrollView *)scrollView { - - // Checks - if (!_viewIsActive || _performingLayout || _rotating) return; - - // Tile pages - [self tilePages]; - - // Calculate current page - CGRect visibleBounds = _pagingScrollView.bounds; - int index = (int)(floorf(CGRectGetMidX(visibleBounds) / CGRectGetWidth(visibleBounds))); - if (index < 0) index = 0; - if (index > [self numberOfPhotos] - 1) index = [self numberOfPhotos] - 1; - NSUInteger previousCurrentPage = _currentPageIndex; - _currentPageIndex = index; - if (_currentPageIndex != previousCurrentPage) { - [self didStartViewingPageAtIndex:index]; - } - -} - -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { - // Hide controls when dragging begins - [self setControlsHidden:YES animated:YES permanent:NO]; -} - -- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { - // Update nav when page changes - [self updateNavigation]; -} - -#pragma mark - Navigation - -- (void)updateNavigation { - - // Title - if ([self numberOfPhotos] > 1) { - self.title = [NSString stringWithFormat:@"%i %@ %i", _currentPageIndex+1, NSLocalizedString(@"of", @"Used in the context: 'Showing 1 of 3 items'"), [self numberOfPhotos]]; - } else { - self.title = nil; - } - - // Buttons - _previousButton.enabled = (_currentPageIndex > 0); - _nextButton.enabled = (_currentPageIndex < [self numberOfPhotos]-1); - _actionButton.enabled = [[self photoAtIndex:_currentPageIndex] underlyingImage] != nil; - -} - -- (void)jumpToPageAtIndex:(NSUInteger)index animated:(BOOL)animated { - - // Change page - if (index < [self numberOfPhotos]) { - CGRect pageFrame = [self frameForPageAtIndex:index]; - [_pagingScrollView setContentOffset:CGPointMake(pageFrame.origin.x - PADDING, 0) animated:animated]; - [self updateNavigation]; - } - - // Update timer to give more time - [self hideControlsAfterDelay]; - -} - -- (void)gotoPreviousPage { - [self showPreviousPhotoAnimated:NO]; -} -- (void)gotoNextPage { - [self showNextPhotoAnimated:NO]; -} - -- (void)showPreviousPhotoAnimated:(BOOL)animated { - [self jumpToPageAtIndex:_currentPageIndex-1 animated:animated]; -} - -- (void)showNextPhotoAnimated:(BOOL)animated { - [self jumpToPageAtIndex:_currentPageIndex+1 animated:animated]; -} - - -#pragma mark - Control Hiding / Showing - -// If permanent then we don't set timers to hide again -// Fades all controls on iOS 5 & 6, and iOS 7 controls slide and fade -- (void)setControlsHidden:(BOOL)hidden animated:(BOOL)animated permanent:(BOOL)permanent { - - // Force visible if no photos - if (![self numberOfPhotos]) hidden = NO; - - // Cancel any timers - [self cancelControlHiding]; - - // Animations & positions - CGFloat animatonOffset = 20; - CGFloat animationDuration = (animated ? 0.35 : 0); - - // Status bar - if (!_leaveStatusBarAlone) { - if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { - - // Hide status bar - if (!_isVCBasedStatusBarAppearance) { - - // Non-view controller based - [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated ? UIStatusBarAnimationSlide : UIStatusBarAnimationNone]; - - } else { - - // View controller based so animate away - _statusBarShouldBeHidden = hidden; - [UIView animateWithDuration:animationDuration animations:^(void) { - [self setNeedsStatusBarAppearanceUpdate]; - } completion:^(BOOL finished) {}]; - - } - - } else { - - // Status bar and nav bar positioning - if (self.wantsFullScreenLayout) { - - // Need to get heights and set nav bar position to overcome display issues - - // Get status bar height if visible - CGFloat statusBarHeight = 0; - if (![UIApplication sharedApplication].statusBarHidden) { - CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; - statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); - } - - // Status Bar - [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated?UIStatusBarAnimationFade:UIStatusBarAnimationNone]; - - // Get status bar height if visible - if (![UIApplication sharedApplication].statusBarHidden) { - CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; - statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); - } - - // Set navigation bar frame - CGRect navBarFrame = self.navigationController.navigationBar.frame; - navBarFrame.origin.y = statusBarHeight; - self.navigationController.navigationBar.frame = navBarFrame; - - } - - } - } - - // Toolbar, nav bar and captions - // Pre-appear animation positions for iOS 7 sliding - if ([self areControlsHidden] && !hidden && animated) { - - // Toolbar - _toolbar.frame = CGRectOffset([self frameForToolbarAtOrientation:self.interfaceOrientation], 0, animatonOffset); - - // Captions - for (MWZoomingScrollView *page in _visiblePages) { - if (page.captionView) { - MWCaptionView *v = page.captionView; - // Pass any index, all we're interested in is the Y - CGRect captionFrame = [self frameForCaptionView:v atIndex:0]; - captionFrame.origin.x = v.frame.origin.x; // Reset X - v.frame = CGRectOffset(captionFrame, 0, animatonOffset); - } - } - - } - [UIView animateWithDuration:animationDuration animations:^(void) { - - CGFloat alpha = hidden ? 0 : 1; - - // Nav bar slides up on it's own on iOS 7 - [self.navigationController.navigationBar setAlpha:alpha]; - - // Toolbar - _toolbar.frame = [self frameForToolbarAtOrientation:self.interfaceOrientation]; - if (hidden) _toolbar.frame = CGRectOffset(_toolbar.frame, 0, animatonOffset); - _toolbar.alpha = alpha; - - // Captions - for (MWZoomingScrollView *page in _visiblePages) { - if (page.captionView) { - MWCaptionView *v = page.captionView; - - // Pass any index, all we're interested in is the Y - CGRect captionFrame = [self frameForCaptionView:v atIndex:0]; - captionFrame.origin.x = v.frame.origin.x; // Reset X - if (hidden) captionFrame = CGRectOffset(captionFrame, 0, animatonOffset); - v.frame = captionFrame; - v.alpha = alpha; - } - } - - } completion:^(BOOL finished) {}]; - - // Control hiding timer - // Will cancel existing timer but only begin hiding if - // they are visible - if (!permanent) [self hideControlsAfterDelay]; - -} - -- (BOOL)prefersStatusBarHidden { - if (!_leaveStatusBarAlone) { - return _statusBarShouldBeHidden; - } else { - return [self presentingViewControllerPrefersStatusBarHidden]; - } -} - -- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { - return UIStatusBarAnimationSlide; -} - -- (void)cancelControlHiding { - // If a timer exists then cancel and release - if (_controlVisibilityTimer) { - [_controlVisibilityTimer invalidate]; - _controlVisibilityTimer = nil; - } -} - -// Enable/disable control visiblity timer -- (void)hideControlsAfterDelay { - if (![self areControlsHidden]) { - [self cancelControlHiding]; - _controlVisibilityTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(hideControls) userInfo:nil repeats:NO]; - } -} - -- (BOOL)areControlsHidden { return (_toolbar.alpha == 0); } -- (void)hideControls { [self setControlsHidden:YES animated:YES permanent:NO]; } -- (void)toggleControls { [self setControlsHidden:![self areControlsHidden] animated:YES permanent:NO]; } - -#pragma mark - Properties - -// Handle depreciated method -- (void)setInitialPageIndex:(NSUInteger)index { - [self setCurrentPhotoIndex:index]; -} - -- (void)setCurrentPhotoIndex:(NSUInteger)index { - // Validate - if (index >= [self numberOfPhotos]) - index = [self numberOfPhotos]-1; - _currentPageIndex = index; - if ([self isViewLoaded]) { - [self jumpToPageAtIndex:index animated:NO]; - if (!_viewIsActive) - [self tilePages]; // Force tiling if view is not visible - } -} - -#pragma mark - Misc - -- (void)doneButtonPressed:(id)sender { - [self dismissViewControllerAnimated:YES completion:nil]; -} - -#pragma mark - Actions - -- (void)actionButtonPressed:(id)sender { - if (_actionsSheet) { - - // Dismiss - [_actionsSheet dismissWithClickedButtonIndex:_actionsSheet.cancelButtonIndex animated:YES]; - - } else { - - // Only react when image has loaded - id photo = [self photoAtIndex:_currentPageIndex]; - if ([self numberOfPhotos] > 0 && [photo underlyingImage]) { - - // If they have defined a delegate method then just message them - if ([self.delegate respondsToSelector:@selector(photoBrowser:actionButtonPressedForPhotoAtIndex:)]) { - - // Let delegate handle things - [self.delegate photoBrowser:self actionButtonPressedForPhotoAtIndex:_currentPageIndex]; - - } else { - // Show activity view controller - NSMutableArray *items = [NSMutableArray arrayWithObject:[photo underlyingImage]]; - if (photo.caption) { - [items addObject:photo.caption]; - } - self.activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil]; - - // Show loading spinner after a couple of seconds - double delayInSeconds = 2.0; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); - dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ - if (self.activityViewController) { - [self showProgressHUDWithMessage:nil]; - } - }); - - // Show - __weak typeof(self) weakSelf = self; - [self.activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) { - weakSelf.activityViewController = nil; - [weakSelf hideControlsAfterDelay]; - [weakSelf hideProgressHUD:YES]; - }]; - [self presentViewController:self.activityViewController animated:YES completion:nil]; - } - - // Keep controls hidden - [self setControlsHidden:NO animated:YES permanent:YES]; - - } - } -} - -#pragma mark - Action Sheet Delegate - -- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { - if (actionSheet.tag == ACTION_SHEET_OLD_ACTIONS) { - // Old Actions - _actionsSheet = nil; - if (buttonIndex != actionSheet.cancelButtonIndex) { - if (buttonIndex == actionSheet.firstOtherButtonIndex) { - [self savePhoto]; return; - } else if (buttonIndex == actionSheet.firstOtherButtonIndex + 1) { - [self copyPhoto]; return; - } else if (buttonIndex == actionSheet.firstOtherButtonIndex + 2) { - [self emailPhoto]; return; - } - } - } - [self hideControlsAfterDelay]; // Continue as normal... -} - -#pragma mark - Action Progress - -- (MBProgressHUD *)progressHUD { - if (!_progressHUD) { - _progressHUD = [[MBProgressHUD alloc] initWithView:self.view]; - _progressHUD.minSize = CGSizeMake(120, 120); - _progressHUD.minShowTime = 1; - // The sample image is based on the - // work by: http://www.pixelpressicons.com - // licence: http://creativecommons.org/licenses/by/2.5/ca/ - self.progressHUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MWPhotoBrowser.bundle/images/Checkmark.png"]]; - [self.view addSubview:_progressHUD]; - } - return _progressHUD; -} - -- (void)showProgressHUDWithMessage:(NSString *)message { - self.progressHUD.labelText = message; - self.progressHUD.mode = MBProgressHUDModeIndeterminate; - [self.progressHUD show:YES]; - self.navigationController.navigationBar.userInteractionEnabled = NO; -} - -- (void)hideProgressHUD:(BOOL)animated { - [self.progressHUD hide:animated]; - self.navigationController.navigationBar.userInteractionEnabled = YES; -} - -- (void)showProgressHUDCompleteMessage:(NSString *)message { - if (message) { - if (self.progressHUD.isHidden) [self.progressHUD show:YES]; - self.progressHUD.labelText = message; - self.progressHUD.mode = MBProgressHUDModeCustomView; - [self.progressHUD hide:YES afterDelay:1.5]; - } else { - [self.progressHUD hide:YES]; - } - self.navigationController.navigationBar.userInteractionEnabled = YES; -} - -#pragma mark - Actions - -- (void)savePhoto { - id photo = [self photoAtIndex:_currentPageIndex]; - if ([photo underlyingImage]) { - [self showProgressHUDWithMessage:[NSString stringWithFormat:@"%@\u2026" , NSLocalizedString(@"Saving", @"Displayed with ellipsis as 'Saving...' when an item is in the process of being saved")]]; - [self performSelector:@selector(actuallySavePhoto:) withObject:photo afterDelay:0]; - } -} - -- (void)actuallySavePhoto:(id)photo { - if ([photo underlyingImage]) { - UIImageWriteToSavedPhotosAlbum([photo underlyingImage], self, - @selector(image:didFinishSavingWithError:contextInfo:), nil); - } -} - -- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { - [self showProgressHUDCompleteMessage: error ? NSLocalizedString(@"Failed", @"Informing the user a process has failed") : NSLocalizedString(@"Saved", @"Informing the user an item has been saved")]; - [self hideControlsAfterDelay]; // Continue as normal... -} - -- (void)copyPhoto { - id photo = [self photoAtIndex:_currentPageIndex]; - if ([photo underlyingImage]) { - [self showProgressHUDWithMessage:[NSString stringWithFormat:@"%@\u2026" , NSLocalizedString(@"Copying", @"Displayed with ellipsis as 'Copying...' when an item is in the process of being copied")]]; - [self performSelector:@selector(actuallyCopyPhoto:) withObject:photo afterDelay:0]; - } -} - -- (void)actuallyCopyPhoto:(id)photo { - if ([photo underlyingImage]) { - [[UIPasteboard generalPasteboard] setData:UIImagePNGRepresentation([photo underlyingImage]) - forPasteboardType:@"public.png"]; - [self showProgressHUDCompleteMessage:NSLocalizedString(@"Copied", @"Informing the user an item has finished copying")]; - [self hideControlsAfterDelay]; // Continue as normal... - } -} - -- (void)emailPhoto { - id photo = [self photoAtIndex:_currentPageIndex]; - if ([photo underlyingImage]) { - [self showProgressHUDWithMessage:[NSString stringWithFormat:@"%@\u2026" , NSLocalizedString(@"Preparing", @"Displayed with ellipsis as 'Preparing...' when an item is in the process of being prepared")]]; - [self performSelector:@selector(actuallyEmailPhoto:) withObject:photo afterDelay:0]; - } -} - -- (void)actuallyEmailPhoto:(id)photo { - if ([photo underlyingImage]) { - MFMailComposeViewController *emailer = [[MFMailComposeViewController alloc] init]; - emailer.mailComposeDelegate = self; - [emailer setSubject:NSLocalizedString(@"Photo", nil)]; - [emailer addAttachmentData:UIImagePNGRepresentation([photo underlyingImage]) mimeType:@"png" fileName:@"Photo.png"]; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - emailer.modalPresentationStyle = UIModalPresentationPageSheet; - } - [self presentViewController:emailer animated:YES completion:^{ - [self hideProgressHUD:NO]; - }]; - } -} - -- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { - if (result == MFMailComposeResultFailed) { - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Email", nil) - message:NSLocalizedString(@"Email failed to send. Please try again.", nil) - delegate:nil cancelButtonTitle:NSLocalizedString(@"Dismiss", nil) otherButtonTitles:nil]; - [alert show]; - } - [self dismissViewControllerAnimated:YES completion:nil]; -} - -@end diff --git a/Photo/mwphotobrowser/MWPhotoProtocol.h b/Photo/mwphotobrowser/MWPhotoProtocol.h deleted file mode 100644 index 781941c..0000000 --- a/Photo/mwphotobrowser/MWPhotoProtocol.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// MWPhotoProtocol.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 02/01/2012. -// Copyright (c) 2012 __MyCompanyName__. All rights reserved. -// - -#import - -// Notifications -#define MWPHOTO_LOADING_DID_END_NOTIFICATION @"MWPHOTO_LOADING_DID_END_NOTIFICATION" -#define MWPHOTO_PROGRESS_NOTIFICATION @"MWPHOTO_PROGRESS_NOTIFICATION" - -// If you wish to use your own data models for photo then they must conform -// to this protocol. See instructions for details on each method. -// Otherwise you can use the MWPhoto object or subclass it yourself to -// store more information per photo. -// -// You can see the MWPhoto class for an example implementation of this protocol -// -@protocol MWPhoto - -@required - -// Return underlying UIImage to be displayed -// Return nil if the image is not immediately available (loaded into memory, preferably -// already decompressed) and needs to be loaded from a source (cache, file, web, etc) -// IMPORTANT: You should *NOT* use this method to initiate -// fetching of images from any external of source. That should be handled -// in -loadUnderlyingImageAndNotify: which may be called by the photo browser if this -// methods returns nil. -- (UIImage *)underlyingImage; - -// Called when the browser has determined the underlying images is not -// already loaded into memory but needs it. -// You must load the image asyncronously (and decompress it for better performance). -// It is recommended that you use SDWebImageDecoder to perform the decompression. -// See MWPhoto object for an example implementation. -// When the underlying UIImage is loaded (or failed to load) you should post the following -// notification: -// -// [[NSNotificationCenter defaultCenter] postNotificationName:MWPHOTO_LOADING_DID_END_NOTIFICATION -// object:self]; -// -- (void)loadUnderlyingImageAndNotify; - -// This is called when the photo browser has determined the photo data -// is no longer needed or there are low memory conditions -// You should release any underlying (possibly large and decompressed) image data -// as long as the image can be re-loaded (from cache, file, or URL) -- (void)unloadUnderlyingImage; - -@optional - -// Return a caption string to be displayed over the image -// Return nil to display no caption -- (NSString *)caption; - -@end \ No newline at end of file diff --git a/Photo/mwphotobrowser/MWTapDetectingImageView.h b/Photo/mwphotobrowser/MWTapDetectingImageView.h deleted file mode 100644 index 31d311f..0000000 --- a/Photo/mwphotobrowser/MWTapDetectingImageView.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// UIImageViewTap.h -// Momento -// -// Created by Michael Waterfall on 04/11/2009. -// Copyright 2009 d3i. All rights reserved. -// - -#import - -@protocol MWTapDetectingImageViewDelegate; - -@interface MWTapDetectingImageView : UIImageView {} - -@property (nonatomic, weak) id tapDelegate; - -- (void)handleSingleTap:(UITouch *)touch; -- (void)handleDoubleTap:(UITouch *)touch; -- (void)handleTripleTap:(UITouch *)touch; - -@end - -@protocol MWTapDetectingImageViewDelegate - -@optional - -- (void)imageView:(UIImageView *)imageView singleTapDetected:(UITouch *)touch; -- (void)imageView:(UIImageView *)imageView doubleTapDetected:(UITouch *)touch; -- (void)imageView:(UIImageView *)imageView tripleTapDetected:(UITouch *)touch; - -@end \ No newline at end of file diff --git a/Photo/mwphotobrowser/MWTapDetectingImageView.m b/Photo/mwphotobrowser/MWTapDetectingImageView.m deleted file mode 100644 index b0666ba..0000000 --- a/Photo/mwphotobrowser/MWTapDetectingImageView.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// UIImageViewTap.m -// Momento -// -// Created by Michael Waterfall on 04/11/2009. -// Copyright 2009 d3i. All rights reserved. -// - -#import "MWTapDetectingImageView.h" - -@implementation MWTapDetectingImageView - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (id)initWithImage:(UIImage *)image { - if ((self = [super initWithImage:image])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (id)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage { - if ((self = [super initWithImage:image highlightedImage:highlightedImage])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - UITouch *touch = [touches anyObject]; - NSUInteger tapCount = touch.tapCount; - switch (tapCount) { - case 1: - [self handleSingleTap:touch]; - break; - case 2: - [self handleDoubleTap:touch]; - break; - case 3: - [self handleTripleTap:touch]; - break; - default: - break; - } - [[self nextResponder] touchesEnded:touches withEvent:event]; -} - -- (void)handleSingleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(imageView:singleTapDetected:)]) - [_tapDelegate imageView:self singleTapDetected:touch]; -} - -- (void)handleDoubleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(imageView:doubleTapDetected:)]) - [_tapDelegate imageView:self doubleTapDetected:touch]; -} - -- (void)handleTripleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(imageView:tripleTapDetected:)]) - [_tapDelegate imageView:self tripleTapDetected:touch]; -} - -@end diff --git a/Photo/mwphotobrowser/MWTapDetectingView.h b/Photo/mwphotobrowser/MWTapDetectingView.h deleted file mode 100644 index 7088a4e..0000000 --- a/Photo/mwphotobrowser/MWTapDetectingView.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// UIViewTap.h -// Momento -// -// Created by Michael Waterfall on 04/11/2009. -// Copyright 2009 d3i. All rights reserved. -// - -#import - -@protocol MWTapDetectingViewDelegate; - -@interface MWTapDetectingView : UIView {} - -@property (nonatomic, weak) id tapDelegate; - -- (void)handleSingleTap:(UITouch *)touch; -- (void)handleDoubleTap:(UITouch *)touch; -- (void)handleTripleTap:(UITouch *)touch; - -@end - -@protocol MWTapDetectingViewDelegate - -@optional - -- (void)view:(UIView *)view singleTapDetected:(UITouch *)touch; -- (void)view:(UIView *)view doubleTapDetected:(UITouch *)touch; -- (void)view:(UIView *)view tripleTapDetected:(UITouch *)touch; - -@end \ No newline at end of file diff --git a/Photo/mwphotobrowser/MWTapDetectingView.m b/Photo/mwphotobrowser/MWTapDetectingView.m deleted file mode 100644 index e1796bc..0000000 --- a/Photo/mwphotobrowser/MWTapDetectingView.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// UIViewTap.m -// Momento -// -// Created by Michael Waterfall on 04/11/2009. -// Copyright 2009 d3i. All rights reserved. -// - -#import "MWTapDetectingView.h" - -@implementation MWTapDetectingView - -- (id)init { - if ((self = [super init])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (id)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - self.userInteractionEnabled = YES; - } - return self; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - UITouch *touch = [touches anyObject]; - NSUInteger tapCount = touch.tapCount; - switch (tapCount) { - case 1: - [self handleSingleTap:touch]; - break; - case 2: - [self handleDoubleTap:touch]; - break; - case 3: - [self handleTripleTap:touch]; - break; - default: - break; - } - [[self nextResponder] touchesEnded:touches withEvent:event]; -} - -- (void)handleSingleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(view:singleTapDetected:)]) - [_tapDelegate view:self singleTapDetected:touch]; -} - -- (void)handleDoubleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(view:doubleTapDetected:)]) - [_tapDelegate view:self doubleTapDetected:touch]; -} - -- (void)handleTripleTap:(UITouch *)touch { - if ([_tapDelegate respondsToSelector:@selector(view:tripleTapDetected:)]) - [_tapDelegate view:self tripleTapDetected:touch]; -} - -@end diff --git a/Photo/mwphotobrowser/MWZoomingScrollView.h b/Photo/mwphotobrowser/MWZoomingScrollView.h deleted file mode 100644 index 8ac128d..0000000 --- a/Photo/mwphotobrowser/MWZoomingScrollView.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// ZoomingScrollView.h -// MWPhotoBrowser -// -// Created by Michael Waterfall on 14/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import -#import "MWPhotoProtocol.h" -#import "MWTapDetectingImageView.h" -#import "MWTapDetectingView.h" - -@class MWPhotoBrowser, MWPhoto, MWCaptionView; - -@interface MWZoomingScrollView : UIScrollView { - -} - -@property (nonatomic) MWCaptionView *captionView; -@property (nonatomic) id photo; - -- (id)initWithPhotoBrowser:(MWPhotoBrowser *)browser; -- (void)displayImage; -- (void)displayImageFailure; -- (void)setMaxMinZoomScalesForCurrentBounds; -- (void)prepareForReuse; - -@end diff --git a/Photo/mwphotobrowser/MWZoomingScrollView.m b/Photo/mwphotobrowser/MWZoomingScrollView.m deleted file mode 100644 index 8cd0a94..0000000 --- a/Photo/mwphotobrowser/MWZoomingScrollView.m +++ /dev/null @@ -1,364 +0,0 @@ -// -// ZoomingScrollView.m -// MWPhotoBrowser -// -// Created by Michael Waterfall on 14/10/2010. -// Copyright 2010 d3i. All rights reserved. -// - -#import "MWZoomingScrollView.h" -#import "MWPhotoBrowser.h" -#import "MWPhoto.h" -#import "DACircularProgressView.h" - -// Declare private methods of browser -@interface MWPhotoBrowser () -- (UIImage *)imageForPhoto:(id)photo; -- (void)cancelControlHiding; -- (void)hideControlsAfterDelay; -@end - -// Private methods and properties -@interface MWZoomingScrollView () { - - MWTapDetectingView *_tapView; // for background taps - MWTapDetectingImageView *_photoImageView; - DACircularProgressView *_loadingIndicator; - -} - -@property (nonatomic, weak) MWPhotoBrowser *photoBrowser; - -- (void)handleSingleTap:(CGPoint)touchPoint; -- (void)handleDoubleTap:(CGPoint)touchPoint; - -@end - -@implementation MWZoomingScrollView - -- (id)initWithPhotoBrowser:(MWPhotoBrowser *)browser { - if ((self = [super init])) { - - // Delegate - self.photoBrowser = browser; - - // Tap view for background - _tapView = [[MWTapDetectingView alloc] initWithFrame:self.bounds]; - _tapView.tapDelegate = self; - _tapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - _tapView.backgroundColor = [UIColor blackColor]; - [self addSubview:_tapView]; - - // Image view - _photoImageView = [[MWTapDetectingImageView alloc] initWithFrame:CGRectZero]; - _photoImageView.tapDelegate = self; - _photoImageView.contentMode = UIViewContentModeCenter; - _photoImageView.backgroundColor = [UIColor blackColor]; - [self addSubview:_photoImageView]; - - // Loading indicator - _loadingIndicator = [[DACircularProgressView alloc] initWithFrame:CGRectMake(140.0f, 30.0f, 40.0f, 40.0f)]; - _loadingIndicator.userInteractionEnabled = NO; - _loadingIndicator.thicknessRatio = 0.1; - _loadingIndicator.roundedCorners = NO; - - _loadingIndicator.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | - UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin; - [self addSubview:_loadingIndicator]; - - // Listen progress notifications - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(setProgressFromNotification:) - name:MWPHOTO_PROGRESS_NOTIFICATION - object:nil]; - - // Setup - self.backgroundColor = [UIColor blackColor]; - self.delegate = self; - self.showsHorizontalScrollIndicator = NO; - self.showsVerticalScrollIndicator = NO; - self.decelerationRate = UIScrollViewDecelerationRateFast; - self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -- (void)setPhoto:(id)photo { - _photoImageView.image = nil; // Release image - if (_photo != photo) { - _photo = photo; - } - [self displayImage]; -} - -- (void)prepareForReuse { - self.photo = nil; - [_captionView removeFromSuperview]; - self.captionView = nil; -} - -#pragma mark - Image - -// Get and display image -- (void)displayImage { - if (_photo && _photoImageView.image == nil) { - - // Reset - self.maximumZoomScale = 1; - self.minimumZoomScale = 1; - self.zoomScale = 1; - self.contentSize = CGSizeMake(0, 0); - - // Get image from browser as it handles ordering of fetching - UIImage *img = [self.photoBrowser imageForPhoto:_photo]; - if (img) { - - // Hide indicator - [self hideLoadingIndicator]; - - // Set image - _photoImageView.image = img; - _photoImageView.hidden = NO; - - // Setup photo frame - CGRect photoImageViewFrame; - photoImageViewFrame.origin = CGPointZero; - photoImageViewFrame.size = img.size; - _photoImageView.frame = photoImageViewFrame; - self.contentSize = photoImageViewFrame.size; - - // Set zoom to minimum zoom - [self setMaxMinZoomScalesForCurrentBounds]; - - } else { - - // Hide image view - _photoImageView.hidden = YES; - [self showLoadingIndicator]; - - } - [self setNeedsLayout]; - } -} - -// Image failed so just show black! -- (void)displayImageFailure { - [self hideLoadingIndicator]; -} - -#pragma mark - Loading Progress - -- (void)setProgressFromNotification:(NSNotification *)notification { - NSDictionary *dict = [notification object]; - MWPhoto *photoWithProgress = (MWPhoto *)[dict objectForKey:@"photo"]; - if (photoWithProgress == self.photo) { - float progress = [[dict valueForKey:@"progress"] floatValue]; - _loadingIndicator.progress = MAX(MIN(1, progress), 0); - } -} - -- (void)hideLoadingIndicator { - _loadingIndicator.hidden = YES; -} - -- (void)showLoadingIndicator { - _loadingIndicator.progress = 0; - _loadingIndicator.hidden = NO; -} - -#pragma mark - Setup - -- (void)setMaxMinZoomScalesForCurrentBounds { - - // Reset - self.maximumZoomScale = 1; - self.minimumZoomScale = 1; - self.zoomScale = 1; - - // Bail - if (_photoImageView.image == nil) return; - - // Sizes - CGSize boundsSize = self.bounds.size; - CGSize imageSize = _photoImageView.frame.size; - - // Calculate Min - CGFloat xScale = boundsSize.width / imageSize.width; // the scale needed to perfectly fit the image width-wise - CGFloat yScale = boundsSize.height / imageSize.height; // the scale needed to perfectly fit the image height-wise - CGFloat minScale = MIN(xScale, yScale); // use minimum of these to allow the image to become fully visible - - // Calculate Max - CGFloat maxScale = 3; - if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { - // Let them go a bit bigger on a bigger screen! - maxScale = 4; - } - - // Image is smaller than screen so no zooming! - if (xScale >= 1 && yScale >= 1) { - minScale = 1.0; - } - - // Initial zoom - CGFloat zoomScale = minScale; - if (self.photoBrowser.zoomPhotosToFill) { - // Zoom image to fill if the aspect ratios are fairly similar - CGFloat boundsAR = boundsSize.width / boundsSize.height; - CGFloat imageAR = imageSize.width / imageSize.height; - if (ABS(boundsAR - imageAR) < 0.3) { - zoomScale = MAX(xScale, yScale); - // Ensure we don't zoom in or out too far, just in case - zoomScale = MIN(MAX(minScale, zoomScale), maxScale); - } - } - - // Set - self.maximumZoomScale = maxScale; - self.minimumZoomScale = minScale; - self.zoomScale = zoomScale; - - // Reset position - _photoImageView.frame = CGRectMake(0, 0, _photoImageView.frame.size.width, _photoImageView.frame.size.height); - - // If we're zooming to full then centralise - if (zoomScale != minScale) { - self.contentOffset = CGPointMake((imageSize.width * zoomScale - boundsSize.width) / 2.0, - (imageSize.height * zoomScale - boundsSize.height) / 2.0); - } - - // Layout - [self setNeedsLayout]; - -} - -#pragma mark - Layout - -- (void)layoutSubviews { - - // Update tap view frame - _tapView.frame = self.bounds; - - // Indicator - if (!_loadingIndicator.hidden) - _loadingIndicator.center = CGPointMake(floorf(self.bounds.size.width/2.0), - floorf(self.bounds.size.height/2.0)); - // Super - [super layoutSubviews]; - - // Center the image as it becomes smaller than the size of the screen - CGSize boundsSize = self.bounds.size; - CGRect frameToCenter = _photoImageView.frame; - - // Horizontally - if (frameToCenter.size.width < boundsSize.width) { - frameToCenter.origin.x = floorf((boundsSize.width - frameToCenter.size.width) / 2.0); - } else { - frameToCenter.origin.x = 0; - } - - // Vertically - if (frameToCenter.size.height < boundsSize.height) { - frameToCenter.origin.y = floorf((boundsSize.height - frameToCenter.size.height) / 2.0); - } else { - frameToCenter.origin.y = 0; - } - - // Center - if (!CGRectEqualToRect(_photoImageView.frame, frameToCenter)) - _photoImageView.frame = frameToCenter; - -} - -#pragma mark - UIScrollViewDelegate - -- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { - return _photoImageView; -} - -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { - [_photoBrowser cancelControlHiding]; -} - -- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { - [_photoBrowser cancelControlHiding]; -} - -- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { - [_photoBrowser hideControlsAfterDelay]; -} - -#pragma mark - Tap Detection - -- (void)handleSingleTap:(CGPoint)touchPoint { - [_photoBrowser performSelector:@selector(toggleControls) withObject:nil afterDelay:0.2]; -} - -- (void)handleDoubleTap:(CGPoint)touchPoint { - - // Cancel any single tap handling - [NSObject cancelPreviousPerformRequestsWithTarget:_photoBrowser]; - - // Zoom - if (self.zoomScale == self.maximumZoomScale) { - - // Zoom out - [self setZoomScale:self.minimumZoomScale animated:YES]; - - } else { - - // Zoom in - CGFloat newZoomScale; - if (((self.zoomScale - self.minimumZoomScale) / self.maximumZoomScale) >= 0.3) { // we're zoomed in a fair bit, so zoom to max now - // Go to max zoom - newZoomScale = self.maximumZoomScale; - } else { - // Zoom to 50% - newZoomScale = ((self.maximumZoomScale + self.minimumZoomScale) / 2); - } - CGFloat xsize = self.bounds.size.width / newZoomScale; - CGFloat ysize = self.bounds.size.height / newZoomScale; - [self zoomToRect:CGRectMake(touchPoint.x - xsize/2, touchPoint.y - ysize/2, xsize, ysize) animated:YES]; - - } - - // Delay controls - [_photoBrowser hideControlsAfterDelay]; - -} - -// Image View -- (void)imageView:(UIImageView *)imageView singleTapDetected:(UITouch *)touch { - [self handleSingleTap:[touch locationInView:imageView]]; -} -- (void)imageView:(UIImageView *)imageView doubleTapDetected:(UITouch *)touch { - [self handleDoubleTap:[touch locationInView:imageView]]; -} - -// Background View -- (void)view:(UIView *)view singleTapDetected:(UITouch *)touch { - // Translate touch location to image view location - CGFloat touchX = [touch locationInView:view].x; - CGFloat touchY = [touch locationInView:view].y; - touchX *= 1/self.zoomScale; - touchY *= 1/self.zoomScale; - touchX += self.contentOffset.x; - touchY += self.contentOffset.y; - [self handleSingleTap:CGPointMake(touchX, touchY)]; -} -- (void)view:(UIView *)view doubleTapDetected:(UITouch *)touch { - // Translate touch location to image view location - CGFloat touchX = [touch locationInView:view].x; - CGFloat touchY = [touch locationInView:view].y; - touchX *= 1/self.zoomScale; - touchY *= 1/self.zoomScale; - touchX += self.contentOffset.x; - touchY += self.contentOffset.y; - [self handleDoubleTap:CGPointMake(touchX, touchY)]; -} - -@end diff --git a/Photo/pt.lproj/Localizable.strings b/Photo/pt.lproj/Localizable.strings deleted file mode 100644 index ba861e8..0000000 Binary files a/Photo/pt.lproj/Localizable.strings and /dev/null differ diff --git a/Photo/trovebox_120.png b/Photo/trovebox_120.png deleted file mode 100644 index de32ebb..0000000 Binary files a/Photo/trovebox_120.png and /dev/null differ diff --git a/Photo/trovebox_152.png b/Photo/trovebox_152.png deleted file mode 100644 index 205ed51..0000000 Binary files a/Photo/trovebox_152.png and /dev/null differ diff --git a/Photo/trovebox_29.png b/Photo/trovebox_29.png deleted file mode 100644 index 3dbfcc4..0000000 Binary files a/Photo/trovebox_29.png and /dev/null differ diff --git a/Photo/trovebox_58.png b/Photo/trovebox_58.png deleted file mode 100644 index d92c259..0000000 Binary files a/Photo/trovebox_58.png and /dev/null differ diff --git a/Photo/trovebox_76.png b/Photo/trovebox_76.png deleted file mode 100644 index 24b4b86..0000000 Binary files a/Photo/trovebox_76.png and /dev/null differ diff --git a/Photo/video-placeholder@2x.png b/Photo/video-placeholder@2x.png deleted file mode 100644 index 378a924..0000000 Binary files a/Photo/video-placeholder@2x.png and /dev/null differ diff --git a/PhotoTests/PhotoTests.h b/PhotoTests/PhotoTests.h deleted file mode 100644 index cd6bbc2..0000000 --- a/PhotoTests/PhotoTests.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// PhotoTests.h -// TroveboxTest -// -// Created by Patrick Santana on 25/09/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@interface PhotoTests : SenTestCase - -@end diff --git a/PhotoTests/PhotoTests.m b/PhotoTests/PhotoTests.m deleted file mode 100644 index fd3320b..0000000 --- a/PhotoTests/PhotoTests.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// PhotoTests.m -// TroveboxTest -// -// Created by Patrick Santana on 25/09/12. -// Copyright 2013 Trovebox -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "PhotoTests.h" - -@implementation PhotoTests - -- (void)setUp -{ - [super setUp]; - - // Set-up code here. -} - -- (void)tearDown -{ - // Tear-down code here. - - [super tearDown]; -} - -- (void)testExample -{ - STFail(@"Unit tests are not implemented yet in PhotoTests"); -} - -@end diff --git a/PhotoTests/TroveboxTests-Info.plist b/PhotoTests/TroveboxTests-Info.plist deleted file mode 100644 index b9e75c4..0000000 --- a/PhotoTests/TroveboxTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - com.trovebox.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/PhotoTests/en.lproj/InfoPlist.strings b/PhotoTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/PhotoTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Podfile b/Podfile deleted file mode 100644 index a80eec7..0000000 --- a/Podfile +++ /dev/null @@ -1,3 +0,0 @@ -pod 'AFNetworking', '~>1.0' - -xcodeproj `Trovebox` diff --git a/Pods/BuildHeaders/SDWebImage/NSData+ImageContentType.h b/Pods/BuildHeaders/SDWebImage/NSData+ImageContentType.h deleted file mode 120000 index db1cbe7..0000000 --- a/Pods/BuildHeaders/SDWebImage/NSData+ImageContentType.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/NSData+ImageContentType.h \ No newline at end of file diff --git a/Pods/Headers/SDWebImage/NSData+ImageContentType.h b/Pods/Headers/SDWebImage/NSData+ImageContentType.h deleted file mode 120000 index db1cbe7..0000000 --- a/Pods/Headers/SDWebImage/NSData+ImageContentType.h +++ /dev/null @@ -1 +0,0 @@ -../../SDWebImage/SDWebImage/NSData+ImageContentType.h \ No newline at end of file diff --git a/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h b/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h deleted file mode 100644 index bb78bb0..0000000 --- a/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.h +++ /dev/null @@ -1,10 +0,0 @@ -// -// Created by Fabrice Aneche on 06/01/14. -// Copyright (c) 2014 Dailymotion. All rights reserved. -// - -#import - -@interface NSData (ImageContentType) -+ (NSString *)contentTypeForImageData:(NSData *)data; -@end diff --git a/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m b/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m deleted file mode 100644 index 6fb352d..0000000 --- a/Pods/SDWebImage/SDWebImage/NSData+ImageContentType.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// Created by Fabrice Aneche on 06/01/14. -// Copyright (c) 2014 Dailymotion. All rights reserved. -// - -#import "NSData+ImageContentType.h" - - -@implementation NSData (ImageContentType) - -+ (NSString *)contentTypeForImageData:(NSData *)data { - uint8_t c; - [data getBytes:&c length:1]; - switch (c) { - case 0xFF: - return @"image/jpeg"; - case 0x89: - return @"image/png"; - case 0x47: - return @"image/gif"; - case 0x49: - case 0x4D: - return @"image/tiff"; - case 0x52: - // R as RIFF for WEBP - if ([data length] < 12) { - return nil; - } - - NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding]; - if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) { - return @"image/webp"; - } - - return nil; - } - return nil; -} - -@end diff --git a/README.mdown b/README.mdown deleted file mode 100644 index 5abb9e9..0000000 --- a/README.mdown +++ /dev/null @@ -1,78 +0,0 @@ - - -### What is Trovebox? - -1. [FAQ][faq], Answers to the most common questions. -1. [API][api], Documentation to get started building applications on Trovebox. -1. [Schemas][schemas], Description of what the different objects in Trovebox look like (i.e. a photo or a comment). -1. [Guides][guides], Detailed guides to help you get the Trovebox software installed on various systems. - ----------------------------------------- - -### How does Trovebox work? - -Trovebox works similarly to Flickr, Smugmug and other photo sharing services with one major difference: you retain ownership and give Trovebox access to use them. -All photos, tags and comments are stored in your personal cloud accounts with companies like Amazon, Rackspace or Google. -This means you can easily switch between Trovebox services, use more than one at a time or stop using them altogether while retaining all of your photos, tags and comments. - ----------------------------------------- - -### Why should I use Trovebox? - -While Trovebox functions like many existing services it's drastically different for several reasons. - -1. **Ownership** - Users can specify where their photos are stored. By default they are seamlessly stored in your [Amazon S3][s3] bucket. -1. **Built in backups** - Since you upload photos to your own [Amazon S3][s3] bucket it's like uploading and archiving your photos in one step. -1. **Portability** - Easily start off by signing up for a hosted Trovebox account and later switch to hosting the software yourself. There's no need to transfer your photos somewhere else since it's federated. It's like plug and play. -1. **Durability** - Your photos are not tied to any particular photo service. Because everything is open you can write your own web interface for your photos, choose between Trovebox hosting providers or install the Trovebox software on your own server. -1. **Community** - New features will be entirely community driven. Features with the most votes will get top priority in getting implemented. If you want a feature that doesn't have many votes you can implement it yourself and issue a pull request. - ----------------------------------------- - -### What if I use Flickr or Smugmug? - -If you're using Flickr or Smugmug you should consider switching to Trovebox. -The more photos and time you invest on a proprietary photo sharing service the more devastated you're going to be once they shut down or no longer appeal to you. - -There are importing tools available to make the switch easy. - ----------------------------------------- -# DEVELOPERS - -### Reachability problems - -`Reachability / gcc-4.2 failed with exit code 1 / Duplicate symbol` -The Reachability class is included in ShareKit. As this class already exists in the project, you'll need to remove it from ShareKit. Open the ShareKit group and delete the Reachability group. - - -### Modules -Don't forget to execute -```` -$ git submodule update --init --recursive -```` - -### Localization -Use this command to run in all files .m and generate the translation file to be filled by translators. - -```` -cd Photo -find . -name \*.m | xargs genstrings -o en.lproj -```` - -### Missing implementation -After download our code, Xcode will complain that a PrivateAuthenticationService.m is missing. This happens because it is the implementation applied by Trovebox. -You can download it [here](https://dl.dropboxusercontent.com/u/138224/Github/PrivateAuthenticationService.m). It will be an empty implementation. Then to connect to your service use the OAuth Procedure. Click in `Login with email` > `Own Server` - - -[aws]: http://aws.amazon.com/ -[s3]: http://aws.amazon.com/s3/ -[simpledb]: http://aws.amazon.com/simpledb/ -[api]: https://github.com/photo/frontend/blob/master/documentation/api/Api.markdown -[faq]: https://github.com/photo/frontend/blob/master/documentation/faq/Faq.markdown -[schemas]: https://github.com/photo/frontend/blob/master/documentation/schemas/Schemas.markdown -[guides]: https://github.com/photo/frontend/blob/master/documentation/guides/Guides.markdown diff --git a/Trovebox.xcodeproj/project.pbxproj b/Trovebox.xcodeproj/project.pbxproj deleted file mode 100644 index 8d5bc91..0000000 --- a/Trovebox.xcodeproj/project.pbxproj +++ /dev/null @@ -1,3273 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 03184971171146B3009C9214 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03184970171146B2009C9214 /* AVFoundation.framework */; }; - 03184973171146E0009C9214 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03184972171146E0009C9214 /* CoreMedia.framework */; }; - 03184975171146E6009C9214 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03184974171146E6009C9214 /* CoreVideo.framework */; }; - 0318498117114966009C9214 /* DLCImagePicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0318497817114965009C9214 /* DLCImagePicker.xib */; }; - 0318498217114966009C9214 /* 02.acv in Resources */ = {isa = PBXBuildFile; fileRef = 0318497A17114966009C9214 /* 02.acv */; }; - 0318498317114966009C9214 /* 06.acv in Resources */ = {isa = PBXBuildFile; fileRef = 0318497B17114966009C9214 /* 06.acv */; }; - 0318498417114966009C9214 /* 17.acv in Resources */ = {isa = PBXBuildFile; fileRef = 0318497C17114966009C9214 /* 17.acv */; }; - 0318498517114966009C9214 /* aqua.acv in Resources */ = {isa = PBXBuildFile; fileRef = 0318497D17114966009C9214 /* aqua.acv */; }; - 0318498617114966009C9214 /* crossprocess.acv in Resources */ = {isa = PBXBuildFile; fileRef = 0318497E17114966009C9214 /* crossprocess.acv */; }; - 0318498717114966009C9214 /* purple-green.acv in Resources */ = {isa = PBXBuildFile; fileRef = 0318497F17114966009C9214 /* purple-green.acv */; }; - 0318498817114966009C9214 /* yellow-red.acv in Resources */ = {isa = PBXBuildFile; fileRef = 0318498017114966009C9214 /* yellow-red.acv */; }; - 031849C717114990009C9214 /* 1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318498B17114990009C9214 /* 1.jpg */; }; - 031849C817114990009C9214 /* 10.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318498C17114990009C9214 /* 10.jpg */; }; - 031849C917114990009C9214 /* 10@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318498D17114990009C9214 /* 10@2x.jpg */; }; - 031849CA17114990009C9214 /* 1@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318498E17114990009C9214 /* 1@2x.jpg */; }; - 031849CB17114990009C9214 /* 2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318498F17114990009C9214 /* 2.jpg */; }; - 031849CC17114990009C9214 /* 2@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499017114990009C9214 /* 2@2x.jpg */; }; - 031849CD17114990009C9214 /* 3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499117114990009C9214 /* 3.jpg */; }; - 031849CE17114990009C9214 /* 3@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499217114990009C9214 /* 3@2x.jpg */; }; - 031849CF17114990009C9214 /* 4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499317114990009C9214 /* 4.jpg */; }; - 031849D017114990009C9214 /* 4@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499417114990009C9214 /* 4@2x.jpg */; }; - 031849D117114990009C9214 /* 5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499517114990009C9214 /* 5.jpg */; }; - 031849D217114990009C9214 /* 5@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499617114990009C9214 /* 5@2x.jpg */; }; - 031849D317114990009C9214 /* 6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499717114990009C9214 /* 6.jpg */; }; - 031849D417114990009C9214 /* 6@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499817114990009C9214 /* 6@2x.jpg */; }; - 031849D517114990009C9214 /* 7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499917114990009C9214 /* 7.jpg */; }; - 031849D617114990009C9214 /* 7@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499A17114990009C9214 /* 7@2x.jpg */; }; - 031849D717114990009C9214 /* 8.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499B17114990009C9214 /* 8.jpg */; }; - 031849D817114990009C9214 /* 8@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499C17114990009C9214 /* 8@2x.jpg */; }; - 031849D917114990009C9214 /* 9.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499D17114990009C9214 /* 9.jpg */; }; - 031849DA17114990009C9214 /* 9@2x.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 0318499E17114990009C9214 /* 9@2x.jpg */; }; - 031849DB17114990009C9214 /* blackframe.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849A017114990009C9214 /* blackframe.png */; }; - 031849DC17114990009C9214 /* mask.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849A117114990009C9214 /* mask.png */; }; - 031849DD17114990009C9214 /* sample1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 031849A317114990009C9214 /* sample1.jpg */; }; - 031849DE17114990009C9214 /* blur-on.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849A517114990009C9214 /* blur-on.png */; }; - 031849DF17114990009C9214 /* blur-on@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849A617114990009C9214 /* blur-on@2x.png */; }; - 031849E017114990009C9214 /* blur.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849A717114990009C9214 /* blur.png */; }; - 031849E117114990009C9214 /* blur@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849A817114990009C9214 /* blur@2x.png */; }; - 031849E217114990009C9214 /* camera-button.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849A917114990009C9214 /* camera-button.png */; }; - 031849E317114990009C9214 /* camera-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849AA17114990009C9214 /* camera-button@2x.png */; }; - 031849E417114990009C9214 /* camera-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849AB17114990009C9214 /* camera-icon.png */; }; - 031849E517114990009C9214 /* camera-icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849AC17114990009C9214 /* camera-icon@2x.png */; }; - 031849E617114990009C9214 /* close.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849AD17114990009C9214 /* close.png */; }; - 031849E717114990009C9214 /* close@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849AE17114990009C9214 /* close@2x.png */; }; - 031849E817114990009C9214 /* dock_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849AF17114990009C9214 /* dock_bg.png */; }; - 031849E917114990009C9214 /* dock_bg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B017114990009C9214 /* dock_bg@2x.png */; }; - 031849EA17114990009C9214 /* filter-close.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B117114990009C9214 /* filter-close.png */; }; - 031849EB17114990009C9214 /* filter-close@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B217114990009C9214 /* filter-close@2x.png */; }; - 031849EC17114990009C9214 /* filter-open.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B317114990009C9214 /* filter-open.png */; }; - 031849ED17114990009C9214 /* filter-open@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B417114990009C9214 /* filter-open@2x.png */; }; - 031849EE17114990009C9214 /* filter.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B517114990009C9214 /* filter.png */; }; - 031849EF17114990009C9214 /* filter@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B617114990009C9214 /* filter@2x.png */; }; - 031849F017114991009C9214 /* flash-auto.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B717114990009C9214 /* flash-auto.png */; }; - 031849F117114991009C9214 /* flash-auto@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B817114990009C9214 /* flash-auto@2x.png */; }; - 031849F217114991009C9214 /* flash-off.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849B917114990009C9214 /* flash-off.png */; }; - 031849F317114991009C9214 /* flash-off@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849BA17114990009C9214 /* flash-off@2x.png */; }; - 031849F417114991009C9214 /* flash.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849BB17114990009C9214 /* flash.png */; }; - 031849F517114991009C9214 /* flash@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849BC17114990009C9214 /* flash@2x.png */; }; - 031849F617114991009C9214 /* focus-crosshair.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849BD17114990009C9214 /* focus-crosshair.png */; }; - 031849F717114991009C9214 /* focus-crosshair@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849BE17114990009C9214 /* focus-crosshair@2x.png */; }; - 031849F817114991009C9214 /* front-camera.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849BF17114990009C9214 /* front-camera.png */; }; - 031849F917114991009C9214 /* front-camera@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849C017114990009C9214 /* front-camera@2x.png */; }; - 031849FA17114991009C9214 /* library.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849C117114990009C9214 /* library.png */; }; - 031849FB17114991009C9214 /* library@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849C217114990009C9214 /* library@2x.png */; }; - 031849FC17114991009C9214 /* micro_carbon.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849C317114990009C9214 /* micro_carbon.png */; }; - 031849FD17114991009C9214 /* micro_carbon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849C417114990009C9214 /* micro_carbon@2x.png */; }; - 031849FE17114991009C9214 /* photo_bar.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849C517114990009C9214 /* photo_bar.png */; }; - 031849FF17114991009C9214 /* photo_bar@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 031849C617114990009C9214 /* photo_bar@2x.png */; }; - 03A1DBB61730BB7D004CEC1D /* libGPUImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 03A1DBB11730BA22004CEC1D /* libGPUImage.a */; }; - 03EEFF6117114244008D2FDA /* BlurOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 03EEFF5A17114244008D2FDA /* BlurOverlayView.m */; }; - 03EEFF6217114244008D2FDA /* DLCImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 03EEFF5C17114244008D2FDA /* DLCImagePickerController.m */; }; - 03EEFF6317114244008D2FDA /* GrayscaleContrastFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 03EEFF5E17114244008D2FDA /* GrayscaleContrastFilter.m */; }; - 03F119C817115A8A00EBBD45 /* UINavigationBar+Trovebox.m in Sources */ = {isa = PBXBuildFile; fileRef = 03F119C717115A8A00EBBD45 /* UINavigationBar+Trovebox.m */; }; - CD004A39161F02B7006B1C6E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD004A38161F02B7006B1C6E /* Security.framework */; }; - CD004A3B161F02C9006B1C6E /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD004A3A161F02C9006B1C6E /* MessageUI.framework */; }; - CD004A3D161F02DA006B1C6E /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD004A3C161F02DA006B1C6E /* CoreLocation.framework */; }; - CD004A3F161F030F006B1C6E /* Twitter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD004A3E161F030F006B1C6E /* Twitter.framework */; }; - CD004A41161F0324006B1C6E /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD004A40161F0324006B1C6E /* CoreFoundation.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - CD014602170641C800FFE797 /* Synced.m in Sources */ = {isa = PBXBuildFile; fileRef = CD014601170641C800FFE797 /* Synced.m */; }; - CD01462A170641C900FFE797 /* Photo.m in Sources */ = {isa = PBXBuildFile; fileRef = CD014629170641C900FFE797 /* Photo.m */; }; - CD043EBB180CDF79002E0524 /* 45-movie-1.png in Resources */ = {isa = PBXBuildFile; fileRef = CD043EB9180CDF79002E0524 /* 45-movie-1.png */; }; - CD043EBC180CDF79002E0524 /* 45-movie-1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD043EBA180CDF79002E0524 /* 45-movie-1@2x.png */; }; - CD0DE1D1171F251D0043D1DC /* Timeline.m in Sources */ = {isa = PBXBuildFile; fileRef = CD0DE1D0171F251D0043D1DC /* Timeline.m */; }; - CD0DE1FB171F31360043D1DC /* IIViewDeckController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD0DE1F8171F31360043D1DC /* IIViewDeckController.m */; }; - CD0DE1FC171F31360043D1DC /* WrapController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD0DE1FA171F31360043D1DC /* WrapController.m */; }; - CD128354172153A800D61DB9 /* NewestPhotoCelliPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD128353172153A800D61DB9 /* NewestPhotoCelliPad.xib */; }; - CD1528481628DB8500EA08FF /* Account.m in Sources */ = {isa = PBXBuildFile; fileRef = CD15283C1628DB8500EA08FF /* Account.m */; }; - CD15284A1628DB8500EA08FF /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1528401628DB8500EA08FF /* LoginViewController.m */; }; - CD15284B1628DB8500EA08FF /* LoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD1528411628DB8500EA08FF /* LoginViewController.xib */; }; - CD15284E1628DB8500EA08FF /* LoginConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1528461628DB8500EA08FF /* LoginConnectViewController.m */; }; - CD15284F1628DB8500EA08FF /* LoginConnectViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD1528471628DB8500EA08FF /* LoginConnectViewController.xib */; }; - CD1A6CDB1704811B0002763A /* TMPhotoQuiltViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6CDA1704811A0002763A /* TMPhotoQuiltViewCell.m */; }; - CD1A6D151704959E0002763A /* MWCaptionView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6D081704959E0002763A /* MWCaptionView.m */; }; - CD1A6D161704959E0002763A /* MWPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6D0A1704959E0002763A /* MWPhoto.m */; }; - CD1A6D181704959E0002763A /* MWPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6D0D1704959E0002763A /* MWPhotoBrowser.m */; }; - CD1A6D191704959E0002763A /* MWTapDetectingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6D101704959E0002763A /* MWTapDetectingImageView.m */; }; - CD1A6D1A1704959E0002763A /* MWTapDetectingView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6D121704959E0002763A /* MWTapDetectingView.m */; }; - CD1A6D1B1704959E0002763A /* MWZoomingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1A6D141704959E0002763A /* MWZoomingScrollView.m */; }; - CD1CDE39162C275F00E57F73 /* CoreDataTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDE38162C275F00E57F73 /* CoreDataTableViewController.m */; }; - CD1CDE3C162C2AE400E57F73 /* CoreLocationController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1CDE3B162C2AE400E57F73 /* CoreLocationController.m */; }; - CD1CDE51162C2D8300E57F73 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD1CDE50162C2D8300E57F73 /* ImageIO.framework */; }; - CD1D824716E9205A00877A8E /* MenuTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1D824616E9205A00877A8E /* MenuTableViewCell.m */; }; - CD1D826C16E9211100877A8E /* MenuTableViewSectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1D826B16E9211000877A8E /* MenuTableViewSectionCell.m */; }; - CD1D826E16E9213800877A8E /* MenuTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD1D826D16E9213800877A8E /* MenuTableViewCell.xib */; }; - CD1D827016E9215600877A8E /* MenuTableViewSectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD1D826F16E9215600877A8E /* MenuTableViewSectionCell.xib */; }; - CD1D827316E9412800877A8E /* MenuTableViewSearchCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CD1D827216E9412800877A8E /* MenuTableViewSearchCell.m */; }; - CD1D827516E9413A00877A8E /* MenuTableViewSearchCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD1D827416E9413900877A8E /* MenuTableViewSearchCell.xib */; }; - CD25838F17F4C24900A62574 /* UploadStatusTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD25838E17F4C24900A62574 /* UploadStatusTableViewController.m */; }; - CD30D57016303E54001A0CA0 /* ELCAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D56216303E54001A0CA0 /* ELCAsset.m */; }; - CD30D57116303E54001A0CA0 /* ELCAssetCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D56416303E54001A0CA0 /* ELCAssetCell.m */; }; - CD30D57216303E54001A0CA0 /* ELCAssetPicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD30D56516303E54001A0CA0 /* ELCAssetPicker.xib */; }; - CD30D57316303E54001A0CA0 /* ELCImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D56716303E54001A0CA0 /* ELCImagePickerController.m */; }; - CD30D57416303E54001A0CA0 /* ELCImagePickerController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD30D56816303E54001A0CA0 /* ELCImagePickerController.xib */; }; - CD30D57516303E54001A0CA0 /* SyncService.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D56A16303E54001A0CA0 /* SyncService.m */; }; - CD30D57616303E54001A0CA0 /* SyncViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D56C16303E54001A0CA0 /* SyncViewController.m */; }; - CD30D57716303E54001A0CA0 /* SyncViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD30D56D16303E54001A0CA0 /* SyncViewController.xib */; }; - CD30D5F8163041A4001A0CA0 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD30D5F7163041A4001A0CA0 /* AssetsLibrary.framework */; }; - CD30D5FB16304202001A0CA0 /* AssetsLibraryUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D5FA16304202001A0CA0 /* AssetsLibraryUtilities.m */; }; - CD30D79116317A79001A0CA0 /* JobUploaderController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D78E16317A79001A0CA0 /* JobUploaderController.m */; }; - CD30D79216317A79001A0CA0 /* JobUploaderDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D79016317A79001A0CA0 /* JobUploaderDelegate.m */; }; - CD30D84116369CF1001A0CA0 /* PhotoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D83F16369CF1001A0CA0 /* PhotoViewController.m */; }; - CD30D84216369CF1001A0CA0 /* PhotoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD30D84016369CF1001A0CA0 /* PhotoViewController.xib */; }; - CD30D8511636A98C001A0CA0 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD30D8501636A98C001A0CA0 /* Accelerate.framework */; }; - CD30D8531636A9AB001A0CA0 /* libsqlite3.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CD30D8521636A9AB001A0CA0 /* libsqlite3.0.dylib */; }; - CD30D8571636A9CE001A0CA0 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD30D8561636A9CE001A0CA0 /* CoreText.framework */; }; - CD30D8591636A9DB001A0CA0 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD30D8581636A9DA001A0CA0 /* OpenGLES.framework */; }; - CD31DECE17143FFA0071D3E1 /* menu-album-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC017143FF90071D3E1 /* menu-album-selected.png */; }; - CD31DECF17143FFA0071D3E1 /* menu-album-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC117143FF90071D3E1 /* menu-album-selected@2x.png */; }; - CD31DED017143FFA0071D3E1 /* menu-gallery-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC217143FF90071D3E1 /* menu-gallery-selected.png */; }; - CD31DED117143FFA0071D3E1 /* menu-gallery-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC317143FF90071D3E1 /* menu-gallery-selected@2x.png */; }; - CD31DED217143FFA0071D3E1 /* menu-latest-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC417143FFA0071D3E1 /* menu-latest-selected.png */; }; - CD31DED317143FFA0071D3E1 /* menu-latest-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC517143FFA0071D3E1 /* menu-latest-selected@2x.png */; }; - CD31DED417143FFA0071D3E1 /* menu-profile-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC617143FFA0071D3E1 /* menu-profile-selected.png */; }; - CD31DED517143FFA0071D3E1 /* menu-profile-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC717143FFA0071D3E1 /* menu-profile-selected@2x.png */; }; - CD31DED617143FFA0071D3E1 /* menu-settings-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC817143FFA0071D3E1 /* menu-settings-selected.png */; }; - CD31DED717143FFA0071D3E1 /* menu-settings-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DEC917143FFA0071D3E1 /* menu-settings-selected@2x.png */; }; - CD31DED817143FFA0071D3E1 /* menu-tags-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DECA17143FFA0071D3E1 /* menu-tags-selected.png */; }; - CD31DED917143FFA0071D3E1 /* menu-tags-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DECB17143FFA0071D3E1 /* menu-tags-selected@2x.png */; }; - CD31DEDA17143FFA0071D3E1 /* menu-upload-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DECC17143FFA0071D3E1 /* menu-upload-selected.png */; }; - CD31DEDB17143FFA0071D3E1 /* menu-upload-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DECD17143FFA0071D3E1 /* menu-upload-selected@2x.png */; }; - CD44F034180C82B30019B307 /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD44F002180C77560019B307 /* libGoogleAnalyticsServices.a */; }; - CD47755A17600DD7001AF36E /* button-more.png in Resources */ = {isa = PBXBuildFile; fileRef = CD47755817600DD7001AF36E /* button-more.png */; }; - CD47755B17600DD7001AF36E /* button-more@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD47755917600DD7001AF36E /* button-more@2x.png */; }; - CD4B593F1733CD730023C199 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = CD4B593C1733CD730023C199 /* Icon-72.png */; }; - CD4B59401733CD730023C199 /* Icon-Small-50.png in Resources */ = {isa = PBXBuildFile; fileRef = CD4B593D1733CD730023C199 /* Icon-Small-50.png */; }; - CD4B59411733CD730023C199 /* Icon-Small.png in Resources */ = {isa = PBXBuildFile; fileRef = CD4B593E1733CD730023C199 /* Icon-Small.png */; }; - CD53E2B1180D8DBA00F9DB80 /* MultiSiteSelectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD53E2B0180D8DBA00F9DB80 /* MultiSiteSelectionViewController.m */; }; - CD53E2DC180D950B00F9DB80 /* Profile.m in Sources */ = {isa = PBXBuildFile; fileRef = CD53E2DB180D950B00F9DB80 /* Profile.m */; }; - CD53E2DF180DC47300F9DB80 /* Permission.m in Sources */ = {isa = PBXBuildFile; fileRef = CD53E2DE180DC47300F9DB80 /* Permission.m */; }; - CD53E2E6180DCC4700F9DB80 /* trovebox_29.png in Resources */ = {isa = PBXBuildFile; fileRef = CD53E2E1180DCC4700F9DB80 /* trovebox_29.png */; }; - CD53E2E7180DCC4700F9DB80 /* trovebox_58.png in Resources */ = {isa = PBXBuildFile; fileRef = CD53E2E2180DCC4700F9DB80 /* trovebox_58.png */; }; - CD53E2E8180DCC4700F9DB80 /* trovebox_76.png in Resources */ = {isa = PBXBuildFile; fileRef = CD53E2E3180DCC4700F9DB80 /* trovebox_76.png */; }; - CD53E2E9180DCC4700F9DB80 /* trovebox_120.png in Resources */ = {isa = PBXBuildFile; fileRef = CD53E2E4180DCC4700F9DB80 /* trovebox_120.png */; }; - CD53E2EA180DCC4700F9DB80 /* trovebox_152.png in Resources */ = {isa = PBXBuildFile; fileRef = CD53E2E5180DCC4700F9DB80 /* trovebox_152.png */; }; - CD5F5E4316F20E050044427E /* Gallery.m in Sources */ = {isa = PBXBuildFile; fileRef = CD5F5E4216F20E050044427E /* Gallery.m */; }; - CD764288161ED9BB00E0B657 /* iRate.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CD764285161ED9BB00E0B657 /* iRate.bundle */; }; - CD764289161ED9BB00E0B657 /* iRate.m in Sources */ = {isa = PBXBuildFile; fileRef = CD764287161ED9BB00E0B657 /* iRate.m */; }; - CD76429F161EDAC000E0B657 /* ASIAuthenticationDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = CD76428C161EDAC000E0B657 /* ASIAuthenticationDialog.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD7642A0161EDAC000E0B657 /* ASIDataCompressor.m in Sources */ = {isa = PBXBuildFile; fileRef = CD76428F161EDAC000E0B657 /* ASIDataCompressor.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD7642A1161EDAC000E0B657 /* ASIDataDecompressor.m in Sources */ = {isa = PBXBuildFile; fileRef = CD764291161EDAC000E0B657 /* ASIDataDecompressor.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD7642A2161EDAC000E0B657 /* ASIDownloadCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CD764293161EDAC000E0B657 /* ASIDownloadCache.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD7642A3161EDAC000E0B657 /* ASIFormDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CD764295161EDAC000E0B657 /* ASIFormDataRequest.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD7642A4161EDAC000E0B657 /* ASIHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CD764297161EDAC000E0B657 /* ASIHTTPRequest.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD7642A5161EDAC000E0B657 /* ASIInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = CD76429B161EDAC000E0B657 /* ASIInputStream.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD7642A6161EDAC000E0B657 /* ASINetworkQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = CD76429D161EDAC000E0B657 /* ASINetworkQueue.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD7642AC161EDB7700E0B657 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7642AB161EDB7700E0B657 /* CFNetwork.framework */; }; - CD7642AE161EDB8300E0B657 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7642AD161EDB8300E0B657 /* SystemConfiguration.framework */; }; - CD7642B0161EDB8E00E0B657 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7642AF161EDB8E00E0B657 /* MobileCoreServices.framework */; }; - CD7642B2161EDB9E00E0B657 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7642B1161EDB9E00E0B657 /* libz.dylib */; }; - CD7642BA161EDFE400E0B657 /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7642B9161EDFE400E0B657 /* Constants.m */; }; - CD7642BE161EE15E00E0B657 /* AuthenticationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7642BC161EE15E00E0B657 /* AuthenticationViewController.m */; }; - CD7642BF161EE15E00E0B657 /* AuthenticationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD7642BD161EE15E00E0B657 /* AuthenticationViewController.xib */; }; - CD7642D1161EE27D00E0B657 /* AuthenticationService.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7642D0161EE27D00E0B657 /* AuthenticationService.m */; }; - CD7642D7161EE4B800E0B657 /* PhotoAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7642D6161EE4B800E0B657 /* PhotoAlertView.m */; }; - CD7642DA161EF3DD00E0B657 /* SHA1.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7642D9161EF3DD00E0B657 /* SHA1.m */; }; - CD7642DD161EF45700E0B657 /* NSDictionarySerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7642DC161EF45700E0B657 /* NSDictionarySerializer.m */; }; - CD7642E0161EF4F500E0B657 /* ContentTypeUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CD7642DF161EF4F400E0B657 /* ContentTypeUtilities.m */; }; - CD84B36F162D49180008FE7D /* PrivateConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = CD84B36E162D49180008FE7D /* PrivateConstants.m */; }; - CD84B3A2162D527E0008FE7D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD84B3A1162D527E0008FE7D /* QuartzCore.framework */; }; - CD84B3A5162D58330008FE7D /* PhotoSHKConfigurator.m in Sources */ = {isa = PBXBuildFile; fileRef = CD84B3A4162D58330008FE7D /* PhotoSHKConfigurator.m */; }; - CD84B3A8162D5F150008FE7D /* InitializerService.m in Sources */ = {isa = PBXBuildFile; fileRef = CD84B3A7162D5F140008FE7D /* InitializerService.m */; }; - CD899287161F08AB00026DBB /* WebService.m in Sources */ = {isa = PBXBuildFile; fileRef = CD899284161F08AB00026DBB /* WebService.m */; }; - CD90127A172167D000BB30EF /* UploadCelliPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD901279172167D000BB30EF /* UploadCelliPad.xib */; }; - CD90127F17218B0700BB30EF /* UINavigationItem+Trovebox.m in Sources */ = {isa = PBXBuildFile; fileRef = CD90127E17218B0700BB30EF /* UINavigationItem+Trovebox.m */; }; - CD9013471726C66800BB30EF /* ProfileViewControlleriPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD9013461726C66800BB30EF /* ProfileViewControlleriPad.xib */; }; - CD91157316234A5A0099204B /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = CD91157216234A5A0099204B /* MBProgressHUD.m */; }; - CD91157C16234A820099204B /* TSAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = CD91157516234A820099204B /* TSAlertView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD91157D16234A820099204B /* TSAlertViewBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = CD91157616234A820099204B /* TSAlertViewBackground.png */; }; - CD91157E16234A820099204B /* TSAlertViewBackground2.png in Resources */ = {isa = PBXBuildFile; fileRef = CD91157716234A820099204B /* TSAlertViewBackground2.png */; }; - CD91157F16234A820099204B /* TSAlertViewButtonBackground_Highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = CD91157816234A820099204B /* TSAlertViewButtonBackground_Highlighted.png */; }; - CD91158016234A820099204B /* TSAlertViewButtonBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = CD91157916234A820099204B /* TSAlertViewButtonBackground.png */; }; - CD91158116234A820099204B /* TSAlertViewCancelButtonBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = CD91157A16234A820099204B /* TSAlertViewCancelButtonBackground.png */; }; - CD91158216234A820099204B /* TSAlertViewMessageListViewShadow.png in Resources */ = {isa = PBXBuildFile; fileRef = CD91157B16234A820099204B /* TSAlertViewMessageListViewShadow.png */; }; - CD9115BD16243FCA0099204B /* Album.m in Sources */ = {isa = PBXBuildFile; fileRef = CD9115BC16243FCA0099204B /* Album.m */; }; - CD9115C016243FE90099204B /* AlbumViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD9115BF16243FE90099204B /* AlbumViewController.m */; }; - CD92F16716E5375200E071CB /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = CDF2F10C16E5305800D309B9 /* Reachability.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD9380931794050300C09B9D /* KeychainItemWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = CD9380921794050300C09B9D /* KeychainItemWrapper.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CD9ECD3D17C66DC900D4585B /* video-placeholder@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD9ECD3C17C66DC900D4585B /* video-placeholder@2x.png */; }; - CDA1855A16E601CB00D617CB /* libEmail.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15D016E600DC004D22FD /* libEmail.a */; }; - CDA1855B16E601CB00D617CB /* libFacebook.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15E416E600DC004D22FD /* libFacebook.a */; }; - CDA1855C16E601CB00D617CB /* libJSONKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15C216E600DC004D22FD /* libJSONKit.a */; }; - CDA1855D16E601CB00D617CB /* libOAuth.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15C616E600DC004D22FD /* libOAuth.a */; }; - CDA1855E16E601CB00D617CB /* libShareKitCore.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15C016E600DC004D22FD /* libShareKitCore.a */; }; - CDA1855F16E601CB00D617CB /* libTwitter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15FA16E600DC004D22FD /* libTwitter.a */; }; - CDA1856016E601F100D617CB /* ShareKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CD2F15BE16E600DC004D22FD /* ShareKit.bundle */; }; - CDA1856D16E61BC200D617CB /* button-navigation-camera.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA1856916E61BBC00D617CB /* button-navigation-camera.png */; }; - CDA1856E16E61BC200D617CB /* button-navigation-camera@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA1856A16E61BBE00D617CB /* button-navigation-camera@2x.png */; }; - CDA1856F16E61BC200D617CB /* button-navigation-menu.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA1856B16E61BBF00D617CB /* button-navigation-menu.png */; }; - CDA1857016E61BC200D617CB /* button-navigation-menu@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDA1856C16E61BC000D617CB /* button-navigation-menu@2x.png */; }; - CDAC02B316EF62EB00D3BB7F /* TMQuiltView.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAC02AE16EF62EB00D3BB7F /* TMQuiltView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDAC02B416EF62EB00D3BB7F /* TMQuiltViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAC02B016EF62EB00D3BB7F /* TMQuiltViewCell.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDAC02B516EF62EB00D3BB7F /* TMQuiltViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAC02B216EF62EB00D3BB7F /* TMQuiltViewController.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDAFB9D316122262002D6E86 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDAFB9D216122262002D6E86 /* UIKit.framework */; }; - CDAFB9D516122262002D6E86 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDAFB9D416122262002D6E86 /* Foundation.framework */; }; - CDAFB9D716122262002D6E86 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDAFB9D616122262002D6E86 /* CoreGraphics.framework */; }; - CDAFB9D916122262002D6E86 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDAFB9D816122262002D6E86 /* CoreData.framework */; }; - CDAFB9DF16122262002D6E86 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CDAFB9DD16122262002D6E86 /* InfoPlist.strings */; }; - CDAFB9E116122262002D6E86 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAFB9E016122262002D6E86 /* main.m */; }; - CDAFB9E516122263002D6E86 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAFB9E416122263002D6E86 /* AppDelegate.m */; }; - CDAFB9EE16122263002D6E86 /* Photo.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = CDAFB9EC16122263002D6E86 /* Photo.xcdatamodeld */; }; - CDB1A9161811BD660049DF8C /* multiselection-cell-bg.png in Resources */ = {isa = PBXBuildFile; fileRef = CDB1A9141811BD660049DF8C /* multiselection-cell-bg.png */; }; - CDB1A9171811BD660049DF8C /* multiselection-cell-bg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDB1A9151811BD660049DF8C /* multiselection-cell-bg@2x.png */; }; - CDB1A93E1811C0BC0049DF8C /* MultiSiteSelectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDB1A93D1811C0BC0049DF8C /* MultiSiteSelectionCell.xib */; }; - CDB1A9411811C1150049DF8C /* MultiSiteSelectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB1A9401811C1150049DF8C /* MultiSiteSelectionCell.m */; }; - CDB3B3A81705EA1C0010C38A /* home-trovebox-logo.png in Resources */ = {isa = PBXBuildFile; fileRef = CDB3B3A61705EA020010C38A /* home-trovebox-logo.png */; }; - CDB3B3A91705EA1C0010C38A /* home-trovebox-logo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDB3B3A71705EA0D0010C38A /* home-trovebox-logo@2x.png */; }; - CDBD38D416F868F1007D0CC6 /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDBD38D316F868F1007D0CC6 /* Crashlytics.framework */; }; - CDC3A7E9161DF89D003FDC2E /* MenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDC3A7E7161DF89D003FDC2E /* MenuViewController.m */; }; - CDC3A7ED161DFAEA003FDC2E /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CDC3A7EB161DFAEA003FDC2E /* Localizable.strings */; }; - CDC7AE90163EC7D700FC8BC1 /* DisplayUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CDC7AE8F163EC7D700FC8BC1 /* DisplayUtilities.m */; }; - CDC7AEDC163EDD3A00FC8BC1 /* PrivateAuthenticationService.m in Sources */ = {isa = PBXBuildFile; fileRef = CDC7AEDB163EDD3900FC8BC1 /* PrivateAuthenticationService.m */; }; - CDC7AF2E1640156400FC8BC1 /* GalleryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDC7AF2C1640156400FC8BC1 /* GalleryViewController.m */; }; - CDC7AF39164028E100FC8BC1 /* PhotoViewController5.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDC7AF37164028E000FC8BC1 /* PhotoViewController5.xib */; }; - CDCC0A8F16E0C23700BE4481 /* appbar_empty.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A0E16E0C23700BE4481 /* appbar_empty.png */; }; - CDCC0A9016E0C23700BE4481 /* appbar_empty@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A0F16E0C23700BE4481 /* appbar_empty@2x.png */; }; - CDCC0A9516E0C23700BE4481 /* button-disclosure-form.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A1416E0C23700BE4481 /* button-disclosure-form.png */; }; - CDCC0A9616E0C23700BE4481 /* button-disclosure-form@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A1516E0C23700BE4481 /* button-disclosure-form@2x.png */; }; - CDCC0A9716E0C23700BE4481 /* button-upgrade.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A1616E0C23700BE4481 /* button-upgrade.png */; }; - CDCC0A9816E0C23700BE4481 /* button-upgrade@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A1716E0C23700BE4481 /* button-upgrade@2x.png */; }; - CDCC0A9916E0C23700BE4481 /* button-upload-form.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A1816E0C23700BE4481 /* button-upload-form.png */; }; - CDCC0A9A16E0C23700BE4481 /* button-upload-form@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A1916E0C23700BE4481 /* button-upload-form@2x.png */; }; - CDCC0A9B16E0C23700BE4481 /* close_camera.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A1A16E0C23700BE4481 /* close_camera.png */; }; - CDCC0A9C16E0C23700BE4481 /* close_camera@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A1B16E0C23700BE4481 /* close_camera@2x.png */; }; - CDCC0AA216E0C23700BE4481 /* edit.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2116E0C23700BE4481 /* edit.png */; }; - CDCC0AA316E0C23700BE4481 /* edit@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2216E0C23700BE4481 /* edit@2x.png */; }; - CDCC0AA416E0C23700BE4481 /* empty_img.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2316E0C23700BE4481 /* empty_img.png */; }; - CDCC0AA516E0C23700BE4481 /* empty_img@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2416E0C23700BE4481 /* empty_img@2x.png */; }; - CDCC0AA616E0C23700BE4481 /* gallery-show-tags.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2516E0C23700BE4481 /* gallery-show-tags.png */; }; - CDCC0AA716E0C23700BE4481 /* gallery-show-tags@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2616E0C23700BE4481 /* gallery-show-tags@2x.png */; }; - CDCC0AA816E0C23700BE4481 /* home-already-uploaded.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2716E0C23700BE4481 /* home-already-uploaded.png */; }; - CDCC0AA916E0C23700BE4481 /* home-already-uploaded@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2816E0C23700BE4481 /* home-already-uploaded@2x.png */; }; - CDCC0AAA16E0C23700BE4481 /* home-brown-arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2916E0C23700BE4481 /* home-brown-arrow.png */; }; - CDCC0AAB16E0C23700BE4481 /* home-brown-arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2A16E0C23700BE4481 /* home-brown-arrow@2x.png */; }; - CDCC0AAC16E0C23700BE4481 /* home-geo-off-sharing.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2B16E0C23700BE4481 /* home-geo-off-sharing.png */; }; - CDCC0AAD16E0C23700BE4481 /* home-geo-off-sharing@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2C16E0C23700BE4481 /* home-geo-off-sharing@2x.png */; }; - CDCC0AAE16E0C23700BE4481 /* home-geo-on-sharing.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2D16E0C23700BE4481 /* home-geo-on-sharing.png */; }; - CDCC0AAF16E0C23700BE4481 /* home-geo-on-sharing@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A2E16E0C23700BE4481 /* home-geo-on-sharing@2x.png */; }; - CDCC0AB216E0C23700BE4481 /* home-private.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3116E0C23700BE4481 /* home-private.png */; }; - CDCC0AB316E0C23700BE4481 /* home-private@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3216E0C23700BE4481 /* home-private@2x.png */; }; - CDCC0AB416E0C23700BE4481 /* home-retry.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3316E0C23700BE4481 /* home-retry.png */; }; - CDCC0AB516E0C23700BE4481 /* home-retry@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3416E0C23700BE4481 /* home-retry@2x.png */; }; - CDCC0AB616E0C23700BE4481 /* home-upload-now.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3516E0C23700BE4481 /* home-upload-now.png */; }; - CDCC0AB716E0C23700BE4481 /* home-upload-now@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3616E0C23700BE4481 /* home-upload-now@2x.png */; }; - CDCC0AB816E0C23700BE4481 /* home-uploaded.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3716E0C23700BE4481 /* home-uploaded.png */; }; - CDCC0AB916E0C23700BE4481 /* home-uploaded@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3816E0C23700BE4481 /* home-uploaded@2x.png */; }; - CDCC0ABA16E0C23700BE4481 /* home-waiting.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3916E0C23700BE4481 /* home-waiting.png */; }; - CDCC0ABB16E0C23700BE4481 /* home-waiting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3A16E0C23700BE4481 /* home-waiting@2x.png */; }; - CDCC0ABC16E0C23700BE4481 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3B16E0C23700BE4481 /* Icon.png */; }; - CDCC0ABD16E0C23700BE4481 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3C16E0C23700BE4481 /* Icon@2x.png */; }; - CDCC0ABE16E0C23700BE4481 /* login-background-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3D16E0C23700BE4481 /* login-background-568h@2x.png */; }; - CDCC0ABF16E0C23700BE4481 /* login-background.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3E16E0C23700BE4481 /* login-background.png */; }; - CDCC0AC016E0C23700BE4481 /* login-background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A3F16E0C23700BE4481 /* login-background@2x.png */; }; - CDCC0AC116E0C23700BE4481 /* login-create-account.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4016E0C23700BE4481 /* login-create-account.png */; }; - CDCC0AC216E0C23700BE4481 /* login-create-account@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4116E0C23700BE4481 /* login-create-account@2x.png */; }; - CDCC0AC316E0C23700BE4481 /* login-facebook.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4216E0C23700BE4481 /* login-facebook.png */; }; - CDCC0AC416E0C23700BE4481 /* login-facebook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4316E0C23700BE4481 /* login-facebook@2x.png */; }; - CDCC0AC516E0C23700BE4481 /* login-field-background.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4416E0C23700BE4481 /* login-field-background.png */; }; - CDCC0AC616E0C23700BE4481 /* login-field-background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4516E0C23700BE4481 /* login-field-background@2x.png */; }; - CDCC0AC716E0C23700BE4481 /* login-login-with.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4616E0C23700BE4481 /* login-login-with.png */; }; - CDCC0AC816E0C23700BE4481 /* login-login-with@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4716E0C23700BE4481 /* login-login-with@2x.png */; }; - CDCC0AC916E0C23700BE4481 /* login-login.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4816E0C23700BE4481 /* login-login.png */; }; - CDCC0ACA16E0C23700BE4481 /* login-login@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4916E0C23700BE4481 /* login-login@2x.png */; }; - CDCC0ACB16E0C23700BE4481 /* login-recover.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4A16E0C23700BE4481 /* login-recover.png */; }; - CDCC0ACC16E0C23700BE4481 /* login-recover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4B16E0C23700BE4481 /* login-recover@2x.png */; }; - CDCC0ACD16E0C23700BE4481 /* login-signup.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4C16E0C23700BE4481 /* login-signup.png */; }; - CDCC0ACE16E0C23700BE4481 /* login-signup@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4D16E0C23700BE4481 /* login-signup@2x.png */; }; - CDCC0ACF16E0C23700BE4481 /* login-using-own-domain.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4E16E0C23700BE4481 /* login-using-own-domain.png */; }; - CDCC0AD016E0C23700BE4481 /* login-using-own-domain@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A4F16E0C23700BE4481 /* login-using-own-domain@2x.png */; }; - CDCC0AD516E0C23700BE4481 /* profile-albumsico.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5416E0C23700BE4481 /* profile-albumsico.png */; }; - CDCC0AD616E0C23700BE4481 /* profile-albumsico@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5516E0C23700BE4481 /* profile-albumsico@2x.png */; }; - CDCC0AD716E0C23700BE4481 /* profile-button-upgrade-pro.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5616E0C23700BE4481 /* profile-button-upgrade-pro.png */; }; - CDCC0AD816E0C23700BE4481 /* profile-button-upgrade-pro@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5716E0C23700BE4481 /* profile-button-upgrade-pro@2x.png */; }; - CDCC0AD916E0C23700BE4481 /* profile-details-server-account.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5816E0C23700BE4481 /* profile-details-server-account.png */; }; - CDCC0ADA16E0C23700BE4481 /* profile-details-server-account@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5916E0C23700BE4481 /* profile-details-server-account@2x.png */; }; - CDCC0ADB16E0C23700BE4481 /* profile-line.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5A16E0C23700BE4481 /* profile-line.png */; }; - CDCC0ADC16E0C23700BE4481 /* profile-line@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5B16E0C23700BE4481 /* profile-line@2x.png */; }; - CDCC0ADD16E0C23700BE4481 /* profile-photosico.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5C16E0C23700BE4481 /* profile-photosico.png */; }; - CDCC0ADE16E0C23700BE4481 /* profile-photosico@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5D16E0C23700BE4481 /* profile-photosico@2x.png */; }; - CDCC0ADF16E0C23700BE4481 /* profile-storageico.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5E16E0C23700BE4481 /* profile-storageico.png */; }; - CDCC0AE016E0C23700BE4481 /* profile-storageico@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A5F16E0C23700BE4481 /* profile-storageico@2x.png */; }; - CDCC0AE116E0C23700BE4481 /* profile-tagsico.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6016E0C23700BE4481 /* profile-tagsico.png */; }; - CDCC0AE216E0C23700BE4481 /* profile-tagsico@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6116E0C23700BE4481 /* profile-tagsico@2x.png */; }; - CDCC0AE316E0C23700BE4481 /* profilepic.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6216E0C23700BE4481 /* profilepic.png */; }; - CDCC0AE416E0C23700BE4481 /* profilepic@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6316E0C23700BE4481 /* profilepic@2x.png */; }; - CDCC0AE516E0C23700BE4481 /* refresh.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6416E0C23700BE4481 /* refresh.png */; }; - CDCC0AE616E0C23700BE4481 /* refresh@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6516E0C23700BE4481 /* refresh@2x.png */; }; - CDCC0AE716E0C23700BE4481 /* register-background-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6616E0C23700BE4481 /* register-background-568h@2x.png */; }; - CDCC0AE816E0C23700BE4481 /* register-background.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6716E0C23700BE4481 /* register-background.png */; }; - CDCC0AE916E0C23700BE4481 /* register-background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6816E0C23700BE4481 /* register-background@2x.png */; }; - CDCC0AEA16E0C23700BE4481 /* settingsbtn.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6916E0C23700BE4481 /* settingsbtn.png */; }; - CDCC0AEB16E0C23700BE4481 /* settingsbtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6A16E0C23700BE4481 /* settingsbtn@2x.png */; }; - CDCC0AEC16E0C23700BE4481 /* sync-already-uploaded.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6B16E0C23700BE4481 /* sync-already-uploaded.png */; }; - CDCC0AED16E0C23700BE4481 /* sync-already-uploaded@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6C16E0C23700BE4481 /* sync-already-uploaded@2x.png */; }; - CDCC0AEE16E0C23700BE4481 /* sync-hide.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6D16E0C23700BE4481 /* sync-hide.png */; }; - CDCC0AEF16E0C23700BE4481 /* sync-hide@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6E16E0C23700BE4481 /* sync-hide@2x.png */; }; - CDCC0AF016E0C23700BE4481 /* sync-overlay.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A6F16E0C23700BE4481 /* sync-overlay.png */; }; - CDCC0AF116E0C23700BE4481 /* sync-overlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A7016E0C23700BE4481 /* sync-overlay@2x.png */; }; - CDCC0AF216E0C23700BE4481 /* sync-show.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A7116E0C23700BE4481 /* sync-show.png */; }; - CDCC0AF316E0C23700BE4481 /* sync-show@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0A7216E0C23700BE4481 /* sync-show@2x.png */; }; - CDCC0B6416E0C49D00BE4481 /* ProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0B5916E0C49D00BE4481 /* ProfileViewController.m */; }; - CDCC0B6516E0C49D00BE4481 /* ProfileViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0B5A16E0C49D00BE4481 /* ProfileViewController.xib */; }; - CDCC0B6A16E0C49D00BE4481 /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0B6316E0C49D00BE4481 /* WebViewController.m */; }; - CDCC0BEE16E0C66400BE4481 /* AuthenticationViewController5.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0BB816E0C66400BE4481 /* AuthenticationViewController5.xib */; }; - CDCC0BF016E0C66400BE4481 /* DateUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0BBC16E0C66400BE4481 /* DateUtilities.m */; }; - CDCC0BF316E0C66400BE4481 /* ImageManipulation.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0BC216E0C66400BE4481 /* ImageManipulation.m */; }; - CDCC0BF516E0C66400BE4481 /* LoginConnectViewController5.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0BC516E0C66400BE4481 /* LoginConnectViewController5.xib */; }; - CDCC0BF616E0C66400BE4481 /* LoginViewController5.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0BC616E0C66400BE4481 /* LoginViewController5.xib */; }; - CDCC0BFB16E0C66400BE4481 /* OpenPhotoIASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0BD016E0C66400BE4481 /* OpenPhotoIASKAppSettingsViewController.m */; }; - CDCC0C0216E0C66400BE4481 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0BDD16E0C66400BE4481 /* Settings.bundle */; }; - CDCC0C0716E0C66400BE4481 /* TransformationUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0BE716E0C66400BE4481 /* TransformationUtilities.m */; }; - CDCC0C0816E0C66400BE4481 /* UpdateUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0BE916E0C66400BE4481 /* UpdateUtilities.m */; }; - CDCC0CBC16E1021700BE4481 /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CB716E1021700BE4481 /* IASKAppSettingsViewController.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CBD16E1021700BE4481 /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CB916E1021700BE4481 /* IASKAppSettingsWebViewController.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CBE16E1021700BE4481 /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CBB16E1021700BE4481 /* IASKSpecifierValuesViewController.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CC916E1022400BE4481 /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CC016E1022400BE4481 /* IASKSettingsReader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CCA16E1022400BE4481 /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CC216E1022400BE4481 /* IASKSettingsStore.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CCB16E1022400BE4481 /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CC416E1022400BE4481 /* IASKSettingsStoreFile.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CCC16E1022400BE4481 /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CC616E1022400BE4481 /* IASKSettingsStoreUserDefaults.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CCD16E1022400BE4481 /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CC816E1022400BE4481 /* IASKSpecifier.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CDC16E1023200BE4481 /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CCF16E1023200BE4481 /* IASKPSSliderSpecifierViewCell.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CDD16E1023200BE4481 /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CD116E1023200BE4481 /* IASKPSTextFieldSpecifierViewCell.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CDE16E1023200BE4481 /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CD316E1023200BE4481 /* IASKPSTitleValueSpecifierViewCell.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CDF16E1023200BE4481 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CD516E1023200BE4481 /* IASKPSToggleSwitchSpecifierViewCell.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CE016E1023200BE4481 /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CD716E1023200BE4481 /* IASKSlider.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CE116E1023200BE4481 /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CD916E1023200BE4481 /* IASKSwitch.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CE216E1023200BE4481 /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCC0CDB16E1023200BE4481 /* IASKTextField.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - CDCC0CE916E1023D00BE4481 /* IASKAppSettingsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0CE316E1023D00BE4481 /* IASKAppSettingsView.xib */; }; - CDCC0CEA16E1023D00BE4481 /* IASKAppSettingsWebView.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0CE416E1023D00BE4481 /* IASKAppSettingsWebView.xib */; }; - CDCC0CEB16E1023D00BE4481 /* IASKPSSliderSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0CE516E1023D00BE4481 /* IASKPSSliderSpecifierViewCell.xib */; }; - CDCC0CEC16E1023D00BE4481 /* IASKPSTextFieldSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0CE616E1023D00BE4481 /* IASKPSTextFieldSpecifierViewCell.xib */; }; - CDCC0CED16E1023D00BE4481 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0CE716E1023D00BE4481 /* IASKPSToggleSwitchSpecifierViewCell.xib */; }; - CDCC0CEE16E1023D00BE4481 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDCC0CE816E1023D00BE4481 /* IASKSpecifierValuesView.xib */; }; - CDCF864C18036ED3002E7A39 /* MWPhotoBrowser.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CDCF864B18036ED3002E7A39 /* MWPhotoBrowser.bundle */; }; - CDCF8650180371C2002E7A39 /* DACircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = CDCF864E180371C2002E7A39 /* DACircularProgressView.m */; }; - CDD1A39C16E76E7600CDC33C /* libSSKeyChain.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2F15C416E600DC004D22FD /* libSSKeyChain.a */; }; - CDD1A3BA16E89A2600CDC33C /* menu-album.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3AA16E89A2600CDC33C /* menu-album.png */; }; - CDD1A3BB16E89A2600CDC33C /* menu-album@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3AB16E89A2600CDC33C /* menu-album@2x.png */; }; - CDD1A3BC16E89A2600CDC33C /* menu-gallery.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3AC16E89A2600CDC33C /* menu-gallery.png */; }; - CDD1A3BD16E89A2600CDC33C /* menu-gallery@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3AD16E89A2600CDC33C /* menu-gallery@2x.png */; }; - CDD1A3BE16E89A2600CDC33C /* menu-latest.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3AE16E89A2600CDC33C /* menu-latest.png */; }; - CDD1A3BF16E89A2600CDC33C /* menu-latest@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3AF16E89A2600CDC33C /* menu-latest@2x.png */; }; - CDD1A3C016E89A2600CDC33C /* menu-profile.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B016E89A2600CDC33C /* menu-profile.png */; }; - CDD1A3C116E89A2600CDC33C /* menu-profile@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B116E89A2600CDC33C /* menu-profile@2x.png */; }; - CDD1A3C216E89A2600CDC33C /* menu-search.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B216E89A2600CDC33C /* menu-search.png */; }; - CDD1A3C316E89A2600CDC33C /* menu-search@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B316E89A2600CDC33C /* menu-search@2x.png */; }; - CDD1A3C416E89A2600CDC33C /* menu-settings.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B416E89A2600CDC33C /* menu-settings.png */; }; - CDD1A3C516E89A2600CDC33C /* menu-settings@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B516E89A2600CDC33C /* menu-settings@2x.png */; }; - CDD1A3C616E89A2600CDC33C /* menu-tags.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B616E89A2600CDC33C /* menu-tags.png */; }; - CDD1A3C716E89A2600CDC33C /* menu-tags@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B716E89A2600CDC33C /* menu-tags@2x.png */; }; - CDD1A3C816E89A2600CDC33C /* menu-upload.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B816E89A2600CDC33C /* menu-upload.png */; }; - CDD1A3C916E89A2600CDC33C /* menu-upload@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDD1A3B916E89A2600CDC33C /* menu-upload@2x.png */; }; - CDD935BF17F3A55D002CE92D /* libsbjson-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CDF2F0CE16E520FC00D309B9 /* libsbjson-ios.a */; }; - CDDFDA3F1729422A00D992DC /* LoginViewControlleriPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA3E1729422A00D992DC /* LoginViewControlleriPad.xib */; }; - CDDFDA4117294A3200D992DC /* trovebox-logo-ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA4017294A3200D992DC /* trovebox-logo-ipad.png */; }; - CDDFDA49172970CB00D992DC /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA48172970CA00D992DC /* Default@2x.png */; }; - CDDFDA4B172970D300D992DC /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA4A172970D200D992DC /* Default.png */; }; - CDDFDA4D172973D700D992DC /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA4C172973D700D992DC /* Default-Portrait~ipad.png */; }; - CDDFDA4F172973DC00D992DC /* Default-Portrait@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA4E172973DC00D992DC /* Default-Portrait@2x~ipad.png */; }; - CDDFDA51172973E100D992DC /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA50172973E100D992DC /* Default-Landscape~ipad.png */; }; - CDDFDA53172973E500D992DC /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA52172973E500D992DC /* Default-Landscape@2x~ipad.png */; }; - CDDFDA551729741000D992DC /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA541729740F00D992DC /* Default-568h@2x.png */; }; - CDE4A0E517642CC8002604CC /* PhotoUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE4A0E417642CC8002604CC /* PhotoUploader.m */; }; - CDF2C4DD17EB641C006C78A9 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CDF2C4DC17EB641C006C78A9 /* Images.xcassets */; }; - CDF2F06E16E4D87A00D309B9 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDF2F06D16E4D87A00D309B9 /* MapKit.framework */; }; - CDF2F0F516E52A8D00D309B9 /* Entitlements.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = CDF2F0F416E52A8D00D309B9 /* Entitlements.entitlements */; }; - CDF2F10216E52DCC00D309B9 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDF2F10116E52DCC00D309B9 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - CDF2F10416E52DDD00D309B9 /* Accounts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDF2F10316E52DDD00D309B9 /* Accounts.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - CDF2F10616E52DF900D309B9 /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDF2F10516E52DF900D309B9 /* Social.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - CDF2F10716E52EC000D309B9 /* libSDWebImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD1CDE48162C2D2C00E57F73 /* libSDWebImage.a */; }; - CDFAF34516285495007A4FDF /* HomeTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFAF33E16285495007A4FDF /* HomeTableViewController.m */; }; - CDFAF34616285495007A4FDF /* NewestPhotoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFAF34016285495007A4FDF /* NewestPhotoCell.m */; }; - CDFAF34716285495007A4FDF /* NewestPhotoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDFAF34116285495007A4FDF /* NewestPhotoCell.xib */; }; - CDFAF34816285495007A4FDF /* UploadCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFAF34316285495007A4FDF /* UploadCell.m */; }; - CDFAF34916285495007A4FDF /* UploadCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CDFAF34416285495007A4FDF /* UploadCell.xib */; }; - CDFAF34F16285730007A4FDF /* Tag.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFAF34C16285730007A4FDF /* Tag.m */; }; - CDFAF35016285730007A4FDF /* TagViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFAF34E16285730007A4FDF /* TagViewController.m */; }; - CDFAF35D16285BC6007A4FDF /* Timeline+Methods.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFAF35B16285BC6007A4FDF /* Timeline+Methods.m */; }; - CDFAF36016285C4E007A4FDF /* Synced+Methods.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFAF35F16285C4E007A4FDF /* Synced+Methods.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 03A1DBB01730BA22004CEC1D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 03A1DBAA1730BA21004CEC1D /* GPUImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BCF1A33414DDB1EC00852800; - remoteInfo = GPUImage; - }; - 03A1DBB21730BA22004CEC1D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 03A1DBAA1730BA21004CEC1D /* GPUImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BCF1A34414DDB1EC00852800; - remoteInfo = GPUImageTests; - }; - 03A1DBB41730BA9E004CEC1D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 03A1DBAA1730BA21004CEC1D /* GPUImage.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = BCF1A33314DDB1EC00852800; - remoteInfo = GPUImage; - }; - CD1CDE47162C2D2C00E57F73 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD1CDE3E162C2D2B00E57F73 /* SDWebImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 53922D6F148C55820056699D; - remoteInfo = SDWebImage; - }; - CD1CDE4B162C2D2C00E57F73 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD1CDE3E162C2D2B00E57F73 /* SDWebImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 531041E0157EAFA400BBABC3; - remoteInfo = "SDWebImage ARC+MKAnnotation"; - }; - CD2F15B916E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 1D6058910D05DD3D006BFB54; - remoteInfo = "Demo App"; - }; - CD2F15BB16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7AB5342E1552AADD00171BCE; - remoteInfo = "Static Library"; - }; - CD2F15BD16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7AB5360F1552E26800171BCE; - remoteInfo = "Resource Bundle"; - }; - CD2F15BF16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A0F9246156BA2A0009CB40A; - remoteInfo = "Static Library Core"; - }; - CD2F15C116E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A1AFCAE160E11810086B98A; - remoteInfo = JSONKit; - }; - CD2F15C316E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A1AFCC0160E11F90086B98A; - remoteInfo = SSKeyChain; - }; - CD2F15C516E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A16F37E161340DD0019645D; - remoteInfo = OAuth; - }; - CD2F15C716E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A1AFCD1160E123C0086B98A; - remoteInfo = Reachability; - }; - CD2F15C916E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBECBE162F063F009D46E4; - remoteInfo = Print; - }; - CD2F15CB16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBECC9162F0719009D46E4; - remoteInfo = Logout; - }; - CD2F15CD16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBECD2162F0756009D46E4; - remoteInfo = Copy; - }; - CD2F15CF16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBECDB162F0779009D46E4; - remoteInfo = Email; - }; - CD2F15D116E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBECE4162F07B4009D46E4; - remoteInfo = "Open in Safari"; - }; - CD2F15D316E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBECED162F07DF009D46E4; - remoteInfo = "Save to Album"; - }; - CD2F15D516E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBECF6162F080F009D46E4; - remoteInfo = "Text Message"; - }; - CD2F15D716E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBECFF162F0835009D46E4; - remoteInfo = Kippt; - }; - CD2F15D916E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED08162F0858009D46E4; - remoteInfo = Delicious; - }; - CD2F15DB16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED11162F087F009D46E4; - remoteInfo = Diigo; - }; - CD2F15DD16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED1B162F08A3009D46E4; - remoteInfo = VKontakte; - }; - CD2F15DF16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED24162F08E6009D46E4; - remoteInfo = Evernote; - }; - CD2F15E116E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A1AFCE2160E127B0086B98A; - remoteInfo = "Evernote SDK"; - }; - CD2F15E316E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED37162F0B65009D46E4; - remoteInfo = Facebook; - }; - CD2F15E516E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED46162F0B86009D46E4; - remoteInfo = FoursquareV2; - }; - CD2F15E716E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED50162F0BA7009D46E4; - remoteInfo = Flickr; - }; - CD2F15E916E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A1AFD24160E13740086B98A; - remoteInfo = "Flickr SDK"; - }; - CD2F15EB16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED59162F0BC5009D46E4; - remoteInfo = "Google Reader"; - }; - CD2F15ED16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A16F3C216134A890019645D; - remoteInfo = Instagram; - }; - CD2F15EF16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED62162F0BE8009D46E4; - remoteInfo = Instapaper; - }; - CD2F15F116E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED6B162F0C03009D46E4; - remoteInfo = LinkedIn; - }; - CD2F15F316E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED74162F0C1A009D46E4; - remoteInfo = Pinboard; - }; - CD2F15F516E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED7D162F0C33009D46E4; - remoteInfo = "Read It Later"; - }; - CD2F15F716E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AABBED86162F0C4D009D46E4; - remoteInfo = Tumbl; - }; - CD2F15F916E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A1AFD3A160E14340086B98A; - remoteInfo = Twitter; - }; - CD2F15FB16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7AC2A3A016597F4C0089ABE8; - remoteInfo = "Sina Weibo"; - }; - CD2F15FD16E600DC004D22FD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 7A49DBC316BC193E004B7E78; - remoteInfo = Readability; - }; - CDA1852216E6019A00D617CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7AB5360E1552E26800171BCE; - remoteInfo = "Resource Bundle"; - }; - CDA1852416E6019A00D617CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7A0F91D1156BA2A0009CB40A; - remoteInfo = "Static Library Core"; - }; - CDA1852616E6019A00D617CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7A1AFC47160E11810086B98A; - remoteInfo = JSONKit; - }; - CDA1852816E6019A00D617CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7A16F36F161340DD0019645D; - remoteInfo = OAuth; - }; - CDA1852A16E6019A00D617CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = AABBECD3162F0779009D46E4; - remoteInfo = Email; - }; - CDA1852C16E6019A00D617CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = AABBED25162F0B65009D46E4; - remoteInfo = Facebook; - }; - CDA1852E16E6019A00D617CB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7A1AFD2B160E14340086B98A; - remoteInfo = Twitter; - }; - CDD1A39A16E76E6300CDC33C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 7A1AFCB1160E11F90086B98A; - remoteInfo = SSKeyChain; - }; - CDDF9285180378A800D5C509 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CD1CDE3E162C2D2B00E57F73 /* SDWebImage.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 537D95C117ECC1FE0097C263; - remoteInfo = "SDWebImage+WebP"; - }; - CDF2F0C916E520FC00D309B9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF2F0C216E520FC00D309B9 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BC12323D1391D5CC00131607; - remoteInfo = SBJson; - }; - CDF2F0CB16E520FC00D309B9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF2F0C216E520FC00D309B9 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BC1232521391D5CC00131607; - remoteInfo = SBJsonTests; - }; - CDF2F0CD16E520FC00D309B9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF2F0C216E520FC00D309B9 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BCC2626913920FC7003D9994; - remoteInfo = "sbjson-ios"; - }; - CDF2F0CF16E520FC00D309B9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = CDF2F0C216E520FC00D309B9 /* SBJson.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = BCC2627313920FC7003D9994; - remoteInfo = "sbjson-iosTests"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 03184970171146B2009C9214 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 03184972171146E0009C9214 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - 03184974171146E6009C9214 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; }; - 0318497817114965009C9214 /* DLCImagePicker.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = DLCImagePicker.xib; path = Frameworks/DLCImagePickerController/Resources/DLCImagePicker.xib; sourceTree = ""; }; - 0318497A17114966009C9214 /* 02.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = 02.acv; sourceTree = ""; }; - 0318497B17114966009C9214 /* 06.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = 06.acv; sourceTree = ""; }; - 0318497C17114966009C9214 /* 17.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = 17.acv; sourceTree = ""; }; - 0318497D17114966009C9214 /* aqua.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = aqua.acv; sourceTree = ""; }; - 0318497E17114966009C9214 /* crossprocess.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = crossprocess.acv; sourceTree = ""; }; - 0318497F17114966009C9214 /* purple-green.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = "purple-green.acv"; sourceTree = ""; }; - 0318498017114966009C9214 /* yellow-red.acv */ = {isa = PBXFileReference; lastKnownFileType = file; path = "yellow-red.acv"; sourceTree = ""; }; - 0318498B17114990009C9214 /* 1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 1.jpg; sourceTree = ""; }; - 0318498C17114990009C9214 /* 10.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 10.jpg; sourceTree = ""; }; - 0318498D17114990009C9214 /* 10@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "10@2x.jpg"; sourceTree = ""; }; - 0318498E17114990009C9214 /* 1@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "1@2x.jpg"; sourceTree = ""; }; - 0318498F17114990009C9214 /* 2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 2.jpg; sourceTree = ""; }; - 0318499017114990009C9214 /* 2@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "2@2x.jpg"; sourceTree = ""; }; - 0318499117114990009C9214 /* 3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 3.jpg; sourceTree = ""; }; - 0318499217114990009C9214 /* 3@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "3@2x.jpg"; sourceTree = ""; }; - 0318499317114990009C9214 /* 4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4.jpg; sourceTree = ""; }; - 0318499417114990009C9214 /* 4@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "4@2x.jpg"; sourceTree = ""; }; - 0318499517114990009C9214 /* 5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 5.jpg; sourceTree = ""; }; - 0318499617114990009C9214 /* 5@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "5@2x.jpg"; sourceTree = ""; }; - 0318499717114990009C9214 /* 6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6.jpg; sourceTree = ""; }; - 0318499817114990009C9214 /* 6@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "6@2x.jpg"; sourceTree = ""; }; - 0318499917114990009C9214 /* 7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 7.jpg; sourceTree = ""; }; - 0318499A17114990009C9214 /* 7@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "7@2x.jpg"; sourceTree = ""; }; - 0318499B17114990009C9214 /* 8.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 8.jpg; sourceTree = ""; }; - 0318499C17114990009C9214 /* 8@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "8@2x.jpg"; sourceTree = ""; }; - 0318499D17114990009C9214 /* 9.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 9.jpg; sourceTree = ""; }; - 0318499E17114990009C9214 /* 9@2x.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "9@2x.jpg"; sourceTree = ""; }; - 031849A017114990009C9214 /* blackframe.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = blackframe.png; sourceTree = ""; }; - 031849A117114990009C9214 /* mask.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = mask.png; sourceTree = ""; }; - 031849A317114990009C9214 /* sample1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = sample1.jpg; sourceTree = ""; }; - 031849A517114990009C9214 /* blur-on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blur-on.png"; sourceTree = ""; }; - 031849A617114990009C9214 /* blur-on@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blur-on@2x.png"; sourceTree = ""; }; - 031849A717114990009C9214 /* blur.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = blur.png; sourceTree = ""; }; - 031849A817114990009C9214 /* blur@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "blur@2x.png"; sourceTree = ""; }; - 031849A917114990009C9214 /* camera-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "camera-button.png"; sourceTree = ""; }; - 031849AA17114990009C9214 /* camera-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "camera-button@2x.png"; sourceTree = ""; }; - 031849AB17114990009C9214 /* camera-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "camera-icon.png"; sourceTree = ""; }; - 031849AC17114990009C9214 /* camera-icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "camera-icon@2x.png"; sourceTree = ""; }; - 031849AD17114990009C9214 /* close.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = close.png; sourceTree = ""; }; - 031849AE17114990009C9214 /* close@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "close@2x.png"; sourceTree = ""; }; - 031849AF17114990009C9214 /* dock_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dock_bg.png; sourceTree = ""; }; - 031849B017114990009C9214 /* dock_bg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "dock_bg@2x.png"; sourceTree = ""; }; - 031849B117114990009C9214 /* filter-close.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "filter-close.png"; sourceTree = ""; }; - 031849B217114990009C9214 /* filter-close@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "filter-close@2x.png"; sourceTree = ""; }; - 031849B317114990009C9214 /* filter-open.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "filter-open.png"; sourceTree = ""; }; - 031849B417114990009C9214 /* filter-open@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "filter-open@2x.png"; sourceTree = ""; }; - 031849B517114990009C9214 /* filter.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = filter.png; sourceTree = ""; }; - 031849B617114990009C9214 /* filter@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "filter@2x.png"; sourceTree = ""; }; - 031849B717114990009C9214 /* flash-auto.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "flash-auto.png"; sourceTree = ""; }; - 031849B817114990009C9214 /* flash-auto@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "flash-auto@2x.png"; sourceTree = ""; }; - 031849B917114990009C9214 /* flash-off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "flash-off.png"; sourceTree = ""; }; - 031849BA17114990009C9214 /* flash-off@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "flash-off@2x.png"; sourceTree = ""; }; - 031849BB17114990009C9214 /* flash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = flash.png; sourceTree = ""; }; - 031849BC17114990009C9214 /* flash@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "flash@2x.png"; sourceTree = ""; }; - 031849BD17114990009C9214 /* focus-crosshair.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "focus-crosshair.png"; sourceTree = ""; }; - 031849BE17114990009C9214 /* focus-crosshair@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "focus-crosshair@2x.png"; sourceTree = ""; }; - 031849BF17114990009C9214 /* front-camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "front-camera.png"; sourceTree = ""; }; - 031849C017114990009C9214 /* front-camera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "front-camera@2x.png"; sourceTree = ""; }; - 031849C117114990009C9214 /* library.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = library.png; sourceTree = ""; }; - 031849C217114990009C9214 /* library@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "library@2x.png"; sourceTree = ""; }; - 031849C317114990009C9214 /* micro_carbon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = micro_carbon.png; sourceTree = ""; }; - 031849C417114990009C9214 /* micro_carbon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "micro_carbon@2x.png"; sourceTree = ""; }; - 031849C517114990009C9214 /* photo_bar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = photo_bar.png; sourceTree = ""; }; - 031849C617114990009C9214 /* photo_bar@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "photo_bar@2x.png"; sourceTree = ""; }; - 03A1DBAA1730BA21004CEC1D /* GPUImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GPUImage.xcodeproj; path = Frameworks/DLCImagePickerController/GPUImage/framework/GPUImage.xcodeproj; sourceTree = ""; }; - 03EEFF5917114244008D2FDA /* BlurOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlurOverlayView.h; path = Frameworks/DLCImagePickerController/Classes/BlurOverlayView.h; sourceTree = ""; }; - 03EEFF5A17114244008D2FDA /* BlurOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BlurOverlayView.m; path = Frameworks/DLCImagePickerController/Classes/BlurOverlayView.m; sourceTree = ""; }; - 03EEFF5B17114244008D2FDA /* DLCImagePickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DLCImagePickerController.h; path = Frameworks/DLCImagePickerController/Classes/DLCImagePickerController.h; sourceTree = ""; }; - 03EEFF5C17114244008D2FDA /* DLCImagePickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DLCImagePickerController.m; path = Frameworks/DLCImagePickerController/Classes/DLCImagePickerController.m; sourceTree = ""; }; - 03EEFF5D17114244008D2FDA /* GrayscaleContrastFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrayscaleContrastFilter.h; path = Frameworks/DLCImagePickerController/Classes/GrayscaleContrastFilter.h; sourceTree = ""; }; - 03EEFF5E17114244008D2FDA /* GrayscaleContrastFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GrayscaleContrastFilter.m; path = Frameworks/DLCImagePickerController/Classes/GrayscaleContrastFilter.m; sourceTree = ""; }; - 03F119C617115A8A00EBBD45 /* UINavigationBar+Trovebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UINavigationBar+Trovebox.h"; sourceTree = ""; }; - 03F119C717115A8A00EBBD45 /* UINavigationBar+Trovebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UINavigationBar+Trovebox.m"; sourceTree = ""; }; - CD004A38161F02B7006B1C6E /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; - CD004A3A161F02C9006B1C6E /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; - CD004A3C161F02DA006B1C6E /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; - CD004A3E161F030F006B1C6E /* Twitter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Twitter.framework; path = System/Library/Frameworks/Twitter.framework; sourceTree = SDKROOT; }; - CD004A40161F0324006B1C6E /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; - CD014600170641C800FFE797 /* Synced.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Synced.h; sourceTree = ""; }; - CD014601170641C800FFE797 /* Synced.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Synced.m; sourceTree = ""; }; - CD014628170641C900FFE797 /* Photo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Photo.h; sourceTree = ""; }; - CD014629170641C900FFE797 /* Photo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Photo.m; sourceTree = ""; }; - CD043EB9180CDF79002E0524 /* 45-movie-1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "45-movie-1.png"; path = "images/45-movie-1.png"; sourceTree = ""; }; - CD043EBA180CDF79002E0524 /* 45-movie-1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "45-movie-1@2x.png"; path = "images/45-movie-1@2x.png"; sourceTree = ""; }; - CD0DE1CF171F251D0043D1DC /* Timeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timeline.h; sourceTree = ""; }; - CD0DE1D0171F251D0043D1DC /* Timeline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Timeline.m; sourceTree = ""; }; - CD0DE1F7171F31360043D1DC /* IIViewDeckController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IIViewDeckController.h; path = Frameworks/ViewDeck/IIViewDeckController.h; sourceTree = ""; }; - CD0DE1F8171F31360043D1DC /* IIViewDeckController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IIViewDeckController.m; path = Frameworks/ViewDeck/IIViewDeckController.m; sourceTree = ""; }; - CD0DE1F9171F31360043D1DC /* WrapController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WrapController.h; path = Frameworks/ViewDeck/WrapController.h; sourceTree = ""; }; - CD0DE1FA171F31360043D1DC /* WrapController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WrapController.m; path = Frameworks/ViewDeck/WrapController.m; sourceTree = ""; }; - CD128353172153A800D61DB9 /* NewestPhotoCelliPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NewestPhotoCelliPad.xib; sourceTree = ""; }; - CD15283B1628DB8500EA08FF /* Account.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Account.h; sourceTree = ""; }; - CD15283C1628DB8500EA08FF /* Account.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Account.m; sourceTree = ""; }; - CD15283F1628DB8500EA08FF /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = ""; }; - CD1528401628DB8500EA08FF /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = ""; }; - CD1528411628DB8500EA08FF /* LoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController.xib; sourceTree = ""; }; - CD1528451628DB8500EA08FF /* LoginConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginConnectViewController.h; sourceTree = ""; }; - CD1528461628DB8500EA08FF /* LoginConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginConnectViewController.m; sourceTree = ""; }; - CD1528471628DB8500EA08FF /* LoginConnectViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginConnectViewController.xib; sourceTree = ""; }; - CD1A6CD9170481190002763A /* TMPhotoQuiltViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TMPhotoQuiltViewCell.h; sourceTree = ""; }; - CD1A6CDA1704811A0002763A /* TMPhotoQuiltViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TMPhotoQuiltViewCell.m; sourceTree = ""; }; - CD1A6D071704959E0002763A /* MWCaptionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWCaptionView.h; path = mwphotobrowser/MWCaptionView.h; sourceTree = ""; }; - CD1A6D081704959E0002763A /* MWCaptionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MWCaptionView.m; path = mwphotobrowser/MWCaptionView.m; sourceTree = ""; }; - CD1A6D091704959E0002763A /* MWPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWPhoto.h; path = mwphotobrowser/MWPhoto.h; sourceTree = ""; }; - CD1A6D0A1704959E0002763A /* MWPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MWPhoto.m; path = mwphotobrowser/MWPhoto.m; sourceTree = ""; }; - CD1A6D0C1704959E0002763A /* MWPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWPhotoBrowser.h; path = mwphotobrowser/MWPhotoBrowser.h; sourceTree = ""; }; - CD1A6D0D1704959E0002763A /* MWPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MWPhotoBrowser.m; path = mwphotobrowser/MWPhotoBrowser.m; sourceTree = ""; }; - CD1A6D0E1704959E0002763A /* MWPhotoProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWPhotoProtocol.h; path = mwphotobrowser/MWPhotoProtocol.h; sourceTree = ""; }; - CD1A6D0F1704959E0002763A /* MWTapDetectingImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWTapDetectingImageView.h; path = mwphotobrowser/MWTapDetectingImageView.h; sourceTree = ""; }; - CD1A6D101704959E0002763A /* MWTapDetectingImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MWTapDetectingImageView.m; path = mwphotobrowser/MWTapDetectingImageView.m; sourceTree = ""; }; - CD1A6D111704959E0002763A /* MWTapDetectingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWTapDetectingView.h; path = mwphotobrowser/MWTapDetectingView.h; sourceTree = ""; }; - CD1A6D121704959E0002763A /* MWTapDetectingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MWTapDetectingView.m; path = mwphotobrowser/MWTapDetectingView.m; sourceTree = ""; }; - CD1A6D131704959E0002763A /* MWZoomingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MWZoomingScrollView.h; path = mwphotobrowser/MWZoomingScrollView.h; sourceTree = ""; }; - CD1A6D141704959E0002763A /* MWZoomingScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MWZoomingScrollView.m; path = mwphotobrowser/MWZoomingScrollView.m; sourceTree = ""; }; - CD1CDE37162C275F00E57F73 /* CoreDataTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreDataTableViewController.h; sourceTree = ""; }; - CD1CDE38162C275F00E57F73 /* CoreDataTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoreDataTableViewController.m; sourceTree = ""; }; - CD1CDE3A162C2AE400E57F73 /* CoreLocationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreLocationController.h; sourceTree = ""; }; - CD1CDE3B162C2AE400E57F73 /* CoreLocationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoreLocationController.m; sourceTree = ""; }; - CD1CDE3E162C2D2B00E57F73 /* SDWebImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDWebImage.xcodeproj; path = Frameworks/SDWebImage/SDWebImage.xcodeproj; sourceTree = ""; }; - CD1CDE50162C2D8300E57F73 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; - CD1D824516E9205A00877A8E /* MenuTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuTableViewCell.h; sourceTree = ""; }; - CD1D824616E9205A00877A8E /* MenuTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuTableViewCell.m; sourceTree = ""; }; - CD1D826A16E9211000877A8E /* MenuTableViewSectionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuTableViewSectionCell.h; sourceTree = ""; }; - CD1D826B16E9211000877A8E /* MenuTableViewSectionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuTableViewSectionCell.m; sourceTree = ""; }; - CD1D826D16E9213800877A8E /* MenuTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MenuTableViewCell.xib; sourceTree = ""; }; - CD1D826F16E9215600877A8E /* MenuTableViewSectionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MenuTableViewSectionCell.xib; sourceTree = ""; }; - CD1D827116E9412800877A8E /* MenuTableViewSearchCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuTableViewSearchCell.h; sourceTree = ""; }; - CD1D827216E9412800877A8E /* MenuTableViewSearchCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuTableViewSearchCell.m; sourceTree = ""; }; - CD1D827416E9413900877A8E /* MenuTableViewSearchCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MenuTableViewSearchCell.xib; sourceTree = ""; }; - CD25838D17F4C24900A62574 /* UploadStatusTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UploadStatusTableViewController.h; sourceTree = ""; }; - CD25838E17F4C24900A62574 /* UploadStatusTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UploadStatusTableViewController.m; sourceTree = ""; }; - CD2583E317FCB3B000A62574 /* ELCAssetSelectionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetSelectionDelegate.h; sourceTree = ""; }; - CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ShareKit.xcodeproj; path = Frameworks/ShareKit/ShareKit.xcodeproj; sourceTree = ""; }; - CD30D56116303E54001A0CA0 /* ELCAsset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAsset.h; sourceTree = ""; }; - CD30D56216303E54001A0CA0 /* ELCAsset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAsset.m; sourceTree = ""; }; - CD30D56316303E54001A0CA0 /* ELCAssetCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetCell.h; sourceTree = ""; }; - CD30D56416303E54001A0CA0 /* ELCAssetCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAssetCell.m; sourceTree = ""; }; - CD30D56516303E54001A0CA0 /* ELCAssetPicker.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELCAssetPicker.xib; sourceTree = ""; }; - CD30D56616303E54001A0CA0 /* ELCImagePickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCImagePickerController.h; sourceTree = ""; }; - CD30D56716303E54001A0CA0 /* ELCImagePickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCImagePickerController.m; sourceTree = ""; }; - CD30D56816303E54001A0CA0 /* ELCImagePickerController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELCImagePickerController.xib; sourceTree = ""; }; - CD30D56916303E54001A0CA0 /* SyncService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SyncService.h; sourceTree = ""; }; - CD30D56A16303E54001A0CA0 /* SyncService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SyncService.m; sourceTree = ""; }; - CD30D56B16303E54001A0CA0 /* SyncViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SyncViewController.h; sourceTree = ""; }; - CD30D56C16303E54001A0CA0 /* SyncViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SyncViewController.m; sourceTree = ""; }; - CD30D56D16303E54001A0CA0 /* SyncViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SyncViewController.xib; sourceTree = ""; }; - CD30D5F7163041A4001A0CA0 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; }; - CD30D5F916304202001A0CA0 /* AssetsLibraryUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AssetsLibraryUtilities.h; sourceTree = ""; }; - CD30D5FA16304202001A0CA0 /* AssetsLibraryUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AssetsLibraryUtilities.m; sourceTree = ""; }; - CD30D78D16317A79001A0CA0 /* JobUploaderController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JobUploaderController.h; sourceTree = ""; }; - CD30D78E16317A79001A0CA0 /* JobUploaderController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JobUploaderController.m; sourceTree = ""; }; - CD30D78F16317A79001A0CA0 /* JobUploaderDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JobUploaderDelegate.h; sourceTree = ""; }; - CD30D79016317A79001A0CA0 /* JobUploaderDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JobUploaderDelegate.m; sourceTree = ""; }; - CD30D83E16369CF1001A0CA0 /* PhotoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoViewController.h; sourceTree = ""; }; - CD30D83F16369CF1001A0CA0 /* PhotoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoViewController.m; sourceTree = ""; }; - CD30D84016369CF1001A0CA0 /* PhotoViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PhotoViewController.xib; sourceTree = ""; }; - CD30D8501636A98C001A0CA0 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - CD30D8521636A9AB001A0CA0 /* libsqlite3.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.0.dylib; path = usr/lib/libsqlite3.0.dylib; sourceTree = SDKROOT; }; - CD30D8561636A9CE001A0CA0 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; - CD30D8581636A9DA001A0CA0 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - CD31DEC017143FF90071D3E1 /* menu-album-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-album-selected.png"; path = "images/menu-album-selected.png"; sourceTree = ""; }; - CD31DEC117143FF90071D3E1 /* menu-album-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-album-selected@2x.png"; path = "images/menu-album-selected@2x.png"; sourceTree = ""; }; - CD31DEC217143FF90071D3E1 /* menu-gallery-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-gallery-selected.png"; path = "images/menu-gallery-selected.png"; sourceTree = ""; }; - CD31DEC317143FF90071D3E1 /* menu-gallery-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-gallery-selected@2x.png"; path = "images/menu-gallery-selected@2x.png"; sourceTree = ""; }; - CD31DEC417143FFA0071D3E1 /* menu-latest-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-latest-selected.png"; path = "images/menu-latest-selected.png"; sourceTree = ""; }; - CD31DEC517143FFA0071D3E1 /* menu-latest-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-latest-selected@2x.png"; path = "images/menu-latest-selected@2x.png"; sourceTree = ""; }; - CD31DEC617143FFA0071D3E1 /* menu-profile-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-profile-selected.png"; path = "images/menu-profile-selected.png"; sourceTree = ""; }; - CD31DEC717143FFA0071D3E1 /* menu-profile-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-profile-selected@2x.png"; path = "images/menu-profile-selected@2x.png"; sourceTree = ""; }; - CD31DEC817143FFA0071D3E1 /* menu-settings-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-settings-selected.png"; path = "images/menu-settings-selected.png"; sourceTree = ""; }; - CD31DEC917143FFA0071D3E1 /* menu-settings-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-settings-selected@2x.png"; path = "images/menu-settings-selected@2x.png"; sourceTree = ""; }; - CD31DECA17143FFA0071D3E1 /* menu-tags-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-tags-selected.png"; path = "images/menu-tags-selected.png"; sourceTree = ""; }; - CD31DECB17143FFA0071D3E1 /* menu-tags-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-tags-selected@2x.png"; path = "images/menu-tags-selected@2x.png"; sourceTree = ""; }; - CD31DECC17143FFA0071D3E1 /* menu-upload-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-upload-selected.png"; path = "images/menu-upload-selected.png"; sourceTree = ""; }; - CD31DECD17143FFA0071D3E1 /* menu-upload-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-upload-selected@2x.png"; path = "images/menu-upload-selected@2x.png"; sourceTree = ""; }; - CD44F002180C77560019B307 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = "Frameworks/Google Analytics SDK/libGoogleAnalyticsServices.a"; sourceTree = ""; }; - CD44F004180C77790019B307 /* GAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAI.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAI.h"; sourceTree = ""; }; - CD44F005180C77790019B307 /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAIDictionaryBuilder.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIDictionaryBuilder.h"; sourceTree = ""; }; - CD44F006180C77790019B307 /* GAIFields.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAIFields.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIFields.h"; sourceTree = ""; }; - CD44F007180C77790019B307 /* GAILogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAILogger.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAILogger.h"; sourceTree = ""; }; - CD44F008180C77790019B307 /* GAITrackedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITrackedViewController.h"; sourceTree = ""; }; - CD44F009180C77790019B307 /* GAITracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITracker.h"; sourceTree = ""; }; - CD47755817600DD7001AF36E /* button-more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-more.png"; path = "images/button-more.png"; sourceTree = ""; }; - CD47755917600DD7001AF36E /* button-more@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-more@2x.png"; path = "images/button-more@2x.png"; sourceTree = ""; }; - CD4B593C1733CD730023C199 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "images/Icon-72.png"; sourceTree = ""; }; - CD4B593D1733CD730023C199 /* Icon-Small-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small-50.png"; path = "images/Icon-Small-50.png"; sourceTree = ""; }; - CD4B593E1733CD730023C199 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small.png"; path = "images/Icon-Small.png"; sourceTree = ""; }; - CD53E2AF180D8DBA00F9DB80 /* MultiSiteSelectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiSiteSelectionViewController.h; sourceTree = ""; }; - CD53E2B0180D8DBA00F9DB80 /* MultiSiteSelectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiSiteSelectionViewController.m; sourceTree = ""; }; - CD53E2DA180D950B00F9DB80 /* Profile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Profile.h; sourceTree = ""; }; - CD53E2DB180D950B00F9DB80 /* Profile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Profile.m; sourceTree = ""; }; - CD53E2DD180DC47300F9DB80 /* Permission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Permission.h; sourceTree = ""; }; - CD53E2DE180DC47300F9DB80 /* Permission.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Permission.m; sourceTree = ""; }; - CD53E2E1180DCC4700F9DB80 /* trovebox_29.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = trovebox_29.png; sourceTree = ""; }; - CD53E2E2180DCC4700F9DB80 /* trovebox_58.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = trovebox_58.png; sourceTree = ""; }; - CD53E2E3180DCC4700F9DB80 /* trovebox_76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = trovebox_76.png; sourceTree = ""; }; - CD53E2E4180DCC4700F9DB80 /* trovebox_120.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = trovebox_120.png; sourceTree = ""; }; - CD53E2E5180DCC4700F9DB80 /* trovebox_152.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = trovebox_152.png; sourceTree = ""; }; - CD5F5E4116F20E050044427E /* Gallery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gallery.h; sourceTree = ""; }; - CD5F5E4216F20E050044427E /* Gallery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Gallery.m; sourceTree = ""; }; - CD764285161ED9BB00E0B657 /* iRate.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = iRate.bundle; path = Frameworks/iRate/iRate/iRate.bundle; sourceTree = ""; }; - CD764286161ED9BB00E0B657 /* iRate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iRate.h; path = Frameworks/iRate/iRate/iRate.h; sourceTree = ""; }; - CD764287161ED9BB00E0B657 /* iRate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iRate.m; path = Frameworks/iRate/iRate/iRate.m; sourceTree = ""; }; - CD76428B161EDAC000E0B657 /* ASIAuthenticationDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIAuthenticationDialog.h; path = Frameworks/ASIHTTPRequest/Classes/ASIAuthenticationDialog.h; sourceTree = ""; }; - CD76428C161EDAC000E0B657 /* ASIAuthenticationDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASIAuthenticationDialog.m; path = Frameworks/ASIHTTPRequest/Classes/ASIAuthenticationDialog.m; sourceTree = ""; }; - CD76428D161EDAC000E0B657 /* ASICacheDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASICacheDelegate.h; path = Frameworks/ASIHTTPRequest/Classes/ASICacheDelegate.h; sourceTree = ""; }; - CD76428E161EDAC000E0B657 /* ASIDataCompressor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIDataCompressor.h; path = Frameworks/ASIHTTPRequest/Classes/ASIDataCompressor.h; sourceTree = ""; }; - CD76428F161EDAC000E0B657 /* ASIDataCompressor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASIDataCompressor.m; path = Frameworks/ASIHTTPRequest/Classes/ASIDataCompressor.m; sourceTree = ""; }; - CD764290161EDAC000E0B657 /* ASIDataDecompressor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIDataDecompressor.h; path = Frameworks/ASIHTTPRequest/Classes/ASIDataDecompressor.h; sourceTree = ""; }; - CD764291161EDAC000E0B657 /* ASIDataDecompressor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASIDataDecompressor.m; path = Frameworks/ASIHTTPRequest/Classes/ASIDataDecompressor.m; sourceTree = ""; }; - CD764292161EDAC000E0B657 /* ASIDownloadCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIDownloadCache.h; path = Frameworks/ASIHTTPRequest/Classes/ASIDownloadCache.h; sourceTree = ""; }; - CD764293161EDAC000E0B657 /* ASIDownloadCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASIDownloadCache.m; path = Frameworks/ASIHTTPRequest/Classes/ASIDownloadCache.m; sourceTree = ""; }; - CD764294161EDAC000E0B657 /* ASIFormDataRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIFormDataRequest.h; path = Frameworks/ASIHTTPRequest/Classes/ASIFormDataRequest.h; sourceTree = ""; }; - CD764295161EDAC000E0B657 /* ASIFormDataRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASIFormDataRequest.m; path = Frameworks/ASIHTTPRequest/Classes/ASIFormDataRequest.m; sourceTree = ""; }; - CD764296161EDAC000E0B657 /* ASIHTTPRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIHTTPRequest.h; path = Frameworks/ASIHTTPRequest/Classes/ASIHTTPRequest.h; sourceTree = ""; }; - CD764297161EDAC000E0B657 /* ASIHTTPRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASIHTTPRequest.m; path = Frameworks/ASIHTTPRequest/Classes/ASIHTTPRequest.m; sourceTree = ""; }; - CD764298161EDAC000E0B657 /* ASIHTTPRequestConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIHTTPRequestConfig.h; path = Frameworks/ASIHTTPRequest/Classes/ASIHTTPRequestConfig.h; sourceTree = ""; }; - CD764299161EDAC000E0B657 /* ASIHTTPRequestDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIHTTPRequestDelegate.h; path = Frameworks/ASIHTTPRequest/Classes/ASIHTTPRequestDelegate.h; sourceTree = ""; }; - CD76429A161EDAC000E0B657 /* ASIInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIInputStream.h; path = Frameworks/ASIHTTPRequest/Classes/ASIInputStream.h; sourceTree = ""; }; - CD76429B161EDAC000E0B657 /* ASIInputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASIInputStream.m; path = Frameworks/ASIHTTPRequest/Classes/ASIInputStream.m; sourceTree = ""; }; - CD76429C161EDAC000E0B657 /* ASINetworkQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASINetworkQueue.h; path = Frameworks/ASIHTTPRequest/Classes/ASINetworkQueue.h; sourceTree = ""; }; - CD76429D161EDAC000E0B657 /* ASINetworkQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ASINetworkQueue.m; path = Frameworks/ASIHTTPRequest/Classes/ASINetworkQueue.m; sourceTree = ""; }; - CD76429E161EDAC000E0B657 /* ASIProgressDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ASIProgressDelegate.h; path = Frameworks/ASIHTTPRequest/Classes/ASIProgressDelegate.h; sourceTree = ""; }; - CD7642AB161EDB7700E0B657 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; - CD7642AD161EDB8300E0B657 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - CD7642AF161EDB8E00E0B657 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - CD7642B1161EDB9E00E0B657 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - CD7642B8161EDFE400E0B657 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; - CD7642B9161EDFE400E0B657 /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constants.m; sourceTree = ""; }; - CD7642BB161EE15E00E0B657 /* AuthenticationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthenticationViewController.h; sourceTree = ""; }; - CD7642BC161EE15E00E0B657 /* AuthenticationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuthenticationViewController.m; sourceTree = ""; }; - CD7642BD161EE15E00E0B657 /* AuthenticationViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AuthenticationViewController.xib; sourceTree = ""; }; - CD7642CF161EE27D00E0B657 /* AuthenticationService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthenticationService.h; sourceTree = ""; }; - CD7642D0161EE27D00E0B657 /* AuthenticationService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuthenticationService.m; sourceTree = ""; }; - CD7642D5161EE4B800E0B657 /* PhotoAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoAlertView.h; sourceTree = ""; }; - CD7642D6161EE4B800E0B657 /* PhotoAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoAlertView.m; sourceTree = ""; }; - CD7642D8161EF3DD00E0B657 /* SHA1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SHA1.h; sourceTree = ""; }; - CD7642D9161EF3DD00E0B657 /* SHA1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SHA1.m; sourceTree = ""; }; - CD7642DB161EF45700E0B657 /* NSDictionarySerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSDictionarySerializer.h; sourceTree = ""; }; - CD7642DC161EF45700E0B657 /* NSDictionarySerializer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSDictionarySerializer.m; sourceTree = ""; }; - CD7642DE161EF4F400E0B657 /* ContentTypeUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentTypeUtilities.h; sourceTree = ""; }; - CD7642DF161EF4F400E0B657 /* ContentTypeUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContentTypeUtilities.m; sourceTree = ""; }; - CD84B36D162D49180008FE7D /* PrivateConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivateConstants.h; sourceTree = ""; }; - CD84B36E162D49180008FE7D /* PrivateConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrivateConstants.m; sourceTree = ""; }; - CD84B3A1162D527E0008FE7D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - CD84B3A3162D58330008FE7D /* PhotoSHKConfigurator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoSHKConfigurator.h; sourceTree = ""; }; - CD84B3A4162D58330008FE7D /* PhotoSHKConfigurator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoSHKConfigurator.m; sourceTree = ""; }; - CD84B3A6162D5F140008FE7D /* InitializerService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InitializerService.h; sourceTree = ""; }; - CD84B3A7162D5F140008FE7D /* InitializerService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InitializerService.m; sourceTree = ""; }; - CD899283161F08AB00026DBB /* WebService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebService.h; sourceTree = ""; }; - CD899284161F08AB00026DBB /* WebService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebService.m; sourceTree = ""; }; - CD901279172167D000BB30EF /* UploadCelliPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UploadCelliPad.xib; sourceTree = ""; }; - CD90127D17218B0700BB30EF /* UINavigationItem+Trovebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UINavigationItem+Trovebox.h"; sourceTree = ""; }; - CD90127E17218B0700BB30EF /* UINavigationItem+Trovebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UINavigationItem+Trovebox.m"; sourceTree = ""; }; - CD9013461726C66800BB30EF /* ProfileViewControlleriPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ProfileViewControlleriPad.xib; sourceTree = ""; }; - CD91157116234A5A0099204B /* MBProgressHUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MBProgressHUD.h; path = Frameworks/MBProgressHUD/MBProgressHUD.h; sourceTree = ""; }; - CD91157216234A5A0099204B /* MBProgressHUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MBProgressHUD.m; path = Frameworks/MBProgressHUD/MBProgressHUD.m; sourceTree = ""; }; - CD91157416234A820099204B /* TSAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TSAlertView.h; path = Frameworks/TSAlertView/TSAlertView/TSAlertView.h; sourceTree = ""; }; - CD91157516234A820099204B /* TSAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSAlertView.m; path = Frameworks/TSAlertView/TSAlertView/TSAlertView.m; sourceTree = ""; }; - CD91157616234A820099204B /* TSAlertViewBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TSAlertViewBackground.png; path = Frameworks/TSAlertView/TSAlertView/TSAlertViewBackground.png; sourceTree = ""; }; - CD91157716234A820099204B /* TSAlertViewBackground2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TSAlertViewBackground2.png; path = Frameworks/TSAlertView/TSAlertView/TSAlertViewBackground2.png; sourceTree = ""; }; - CD91157816234A820099204B /* TSAlertViewButtonBackground_Highlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TSAlertViewButtonBackground_Highlighted.png; path = Frameworks/TSAlertView/TSAlertView/TSAlertViewButtonBackground_Highlighted.png; sourceTree = ""; }; - CD91157916234A820099204B /* TSAlertViewButtonBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TSAlertViewButtonBackground.png; path = Frameworks/TSAlertView/TSAlertView/TSAlertViewButtonBackground.png; sourceTree = ""; }; - CD91157A16234A820099204B /* TSAlertViewCancelButtonBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TSAlertViewCancelButtonBackground.png; path = Frameworks/TSAlertView/TSAlertView/TSAlertViewCancelButtonBackground.png; sourceTree = ""; }; - CD91157B16234A820099204B /* TSAlertViewMessageListViewShadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TSAlertViewMessageListViewShadow.png; path = Frameworks/TSAlertView/TSAlertView/TSAlertViewMessageListViewShadow.png; sourceTree = ""; }; - CD9115BB16243FCA0099204B /* Album.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Album.h; sourceTree = ""; }; - CD9115BC16243FCA0099204B /* Album.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Album.m; sourceTree = ""; }; - CD9115BE16243FE90099204B /* AlbumViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlbumViewController.h; sourceTree = ""; }; - CD9115BF16243FE90099204B /* AlbumViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlbumViewController.m; sourceTree = ""; }; - CD9380911794050300C09B9D /* KeychainItemWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeychainItemWrapper.h; sourceTree = ""; }; - CD9380921794050300C09B9D /* KeychainItemWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeychainItemWrapper.m; sourceTree = ""; }; - CD9ECD3C17C66DC900D4585B /* video-placeholder@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "video-placeholder@2x.png"; sourceTree = ""; }; - CDA1856916E61BBC00D617CB /* button-navigation-camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-navigation-camera.png"; path = "images/button-navigation-camera.png"; sourceTree = ""; }; - CDA1856A16E61BBE00D617CB /* button-navigation-camera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-navigation-camera@2x.png"; path = "images/button-navigation-camera@2x.png"; sourceTree = ""; }; - CDA1856B16E61BBF00D617CB /* button-navigation-menu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-navigation-menu.png"; path = "images/button-navigation-menu.png"; sourceTree = ""; }; - CDA1856C16E61BC000D617CB /* button-navigation-menu@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-navigation-menu@2x.png"; path = "images/button-navigation-menu@2x.png"; sourceTree = ""; }; - CDAC02AD16EF62EB00D3BB7F /* TMQuiltView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TMQuiltView.h; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltView.h; sourceTree = ""; }; - CDAC02AE16EF62EB00D3BB7F /* TMQuiltView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TMQuiltView.m; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltView.m; sourceTree = ""; }; - CDAC02AF16EF62EB00D3BB7F /* TMQuiltViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TMQuiltViewCell.h; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltViewCell.h; sourceTree = ""; }; - CDAC02B016EF62EB00D3BB7F /* TMQuiltViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TMQuiltViewCell.m; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltViewCell.m; sourceTree = ""; }; - CDAC02B116EF62EB00D3BB7F /* TMQuiltViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TMQuiltViewController.h; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltViewController.h; sourceTree = ""; }; - CDAC02B216EF62EB00D3BB7F /* TMQuiltViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TMQuiltViewController.m; path = Frameworks/TMQuiltView/TMQuiltView/TMQuiltView/TMQuiltViewController.m; sourceTree = ""; }; - CDAFB9CE16122262002D6E86 /* Trovebox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Trovebox.app; sourceTree = BUILT_PRODUCTS_DIR; }; - CDAFB9D216122262002D6E86 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - CDAFB9D416122262002D6E86 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - CDAFB9D616122262002D6E86 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - CDAFB9D816122262002D6E86 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - CDAFB9DC16122262002D6E86 /* Trovebox-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Trovebox-Info.plist"; sourceTree = ""; }; - CDAFB9DE16122262002D6E86 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - CDAFB9E016122262002D6E86 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - CDAFB9E216122263002D6E86 /* Trovebox-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Trovebox-Prefix.pch"; sourceTree = ""; }; - CDAFB9E316122263002D6E86 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - CDAFB9E416122263002D6E86 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - CDAFB9ED16122263002D6E86 /* Photo.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Photo.xcdatamodel; sourceTree = ""; }; - CDAFB9F516122263002D6E86 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; - CDB1A9141811BD660049DF8C /* multiselection-cell-bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "multiselection-cell-bg.png"; path = "images/multiselection-cell-bg.png"; sourceTree = ""; }; - CDB1A9151811BD660049DF8C /* multiselection-cell-bg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "multiselection-cell-bg@2x.png"; path = "images/multiselection-cell-bg@2x.png"; sourceTree = ""; }; - CDB1A93D1811C0BC0049DF8C /* MultiSiteSelectionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MultiSiteSelectionCell.xib; sourceTree = ""; }; - CDB1A93F1811C1150049DF8C /* MultiSiteSelectionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiSiteSelectionCell.h; sourceTree = ""; }; - CDB1A9401811C1150049DF8C /* MultiSiteSelectionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiSiteSelectionCell.m; sourceTree = ""; }; - CDB3B3A61705EA020010C38A /* home-trovebox-logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-trovebox-logo.png"; path = "images/home-trovebox-logo.png"; sourceTree = ""; }; - CDB3B3A71705EA0D0010C38A /* home-trovebox-logo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-trovebox-logo@2x.png"; path = "images/home-trovebox-logo@2x.png"; sourceTree = ""; }; - CDBD38D316F868F1007D0CC6 /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = Frameworks/Crashlytics.framework; sourceTree = ""; }; - CDC3A7E6161DF89D003FDC2E /* MenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuViewController.h; sourceTree = ""; }; - CDC3A7E7161DF89D003FDC2E /* MenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuViewController.m; sourceTree = ""; }; - CDC3A7EC161DFAEA003FDC2E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - CDC3A7EE161DFAF3003FDC2E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - CDC3A7F0161DFC37003FDC2E /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; - CDC7AE6F163EBFA300FC8BC1 /* AccountViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountViewController.h; sourceTree = ""; }; - CDC7AE8E163EC7D700FC8BC1 /* DisplayUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DisplayUtilities.h; sourceTree = ""; }; - CDC7AE8F163EC7D700FC8BC1 /* DisplayUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DisplayUtilities.m; sourceTree = ""; }; - CDC7AEDA163EDD3900FC8BC1 /* PrivateAuthenticationService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivateAuthenticationService.h; sourceTree = ""; }; - CDC7AEDB163EDD3900FC8BC1 /* PrivateAuthenticationService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrivateAuthenticationService.m; sourceTree = ""; }; - CDC7AF2B1640156400FC8BC1 /* GalleryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GalleryViewController.h; sourceTree = ""; }; - CDC7AF2C1640156400FC8BC1 /* GalleryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GalleryViewController.m; sourceTree = ""; }; - CDC7AF37164028E000FC8BC1 /* PhotoViewController5.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PhotoViewController5.xib; sourceTree = ""; }; - CDCC0A0E16E0C23700BE4481 /* appbar_empty.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = appbar_empty.png; path = images/appbar_empty.png; sourceTree = ""; }; - CDCC0A0F16E0C23700BE4481 /* appbar_empty@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "appbar_empty@2x.png"; path = "images/appbar_empty@2x.png"; sourceTree = ""; }; - CDCC0A1416E0C23700BE4481 /* button-disclosure-form.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-disclosure-form.png"; path = "images/button-disclosure-form.png"; sourceTree = ""; }; - CDCC0A1516E0C23700BE4481 /* button-disclosure-form@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-disclosure-form@2x.png"; path = "images/button-disclosure-form@2x.png"; sourceTree = ""; }; - CDCC0A1616E0C23700BE4481 /* button-upgrade.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-upgrade.png"; path = "images/button-upgrade.png"; sourceTree = ""; }; - CDCC0A1716E0C23700BE4481 /* button-upgrade@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-upgrade@2x.png"; path = "images/button-upgrade@2x.png"; sourceTree = ""; }; - CDCC0A1816E0C23700BE4481 /* button-upload-form.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-upload-form.png"; path = "images/button-upload-form.png"; sourceTree = ""; }; - CDCC0A1916E0C23700BE4481 /* button-upload-form@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-upload-form@2x.png"; path = "images/button-upload-form@2x.png"; sourceTree = ""; }; - CDCC0A1A16E0C23700BE4481 /* close_camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = close_camera.png; path = images/close_camera.png; sourceTree = ""; }; - CDCC0A1B16E0C23700BE4481 /* close_camera@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "close_camera@2x.png"; path = "images/close_camera@2x.png"; sourceTree = ""; }; - CDCC0A2116E0C23700BE4481 /* edit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = edit.png; path = images/edit.png; sourceTree = ""; }; - CDCC0A2216E0C23700BE4481 /* edit@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "edit@2x.png"; path = "images/edit@2x.png"; sourceTree = ""; }; - CDCC0A2316E0C23700BE4481 /* empty_img.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = empty_img.png; path = images/empty_img.png; sourceTree = ""; }; - CDCC0A2416E0C23700BE4481 /* empty_img@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "empty_img@2x.png"; path = "images/empty_img@2x.png"; sourceTree = ""; }; - CDCC0A2516E0C23700BE4481 /* gallery-show-tags.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gallery-show-tags.png"; path = "images/gallery-show-tags.png"; sourceTree = ""; }; - CDCC0A2616E0C23700BE4481 /* gallery-show-tags@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gallery-show-tags@2x.png"; path = "images/gallery-show-tags@2x.png"; sourceTree = ""; }; - CDCC0A2716E0C23700BE4481 /* home-already-uploaded.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-already-uploaded.png"; path = "images/home-already-uploaded.png"; sourceTree = ""; }; - CDCC0A2816E0C23700BE4481 /* home-already-uploaded@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-already-uploaded@2x.png"; path = "images/home-already-uploaded@2x.png"; sourceTree = ""; }; - CDCC0A2916E0C23700BE4481 /* home-brown-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-brown-arrow.png"; path = "images/home-brown-arrow.png"; sourceTree = ""; }; - CDCC0A2A16E0C23700BE4481 /* home-brown-arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-brown-arrow@2x.png"; path = "images/home-brown-arrow@2x.png"; sourceTree = ""; }; - CDCC0A2B16E0C23700BE4481 /* home-geo-off-sharing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-geo-off-sharing.png"; path = "images/home-geo-off-sharing.png"; sourceTree = ""; }; - CDCC0A2C16E0C23700BE4481 /* home-geo-off-sharing@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-geo-off-sharing@2x.png"; path = "images/home-geo-off-sharing@2x.png"; sourceTree = ""; }; - CDCC0A2D16E0C23700BE4481 /* home-geo-on-sharing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-geo-on-sharing.png"; path = "images/home-geo-on-sharing.png"; sourceTree = ""; }; - CDCC0A2E16E0C23700BE4481 /* home-geo-on-sharing@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-geo-on-sharing@2x.png"; path = "images/home-geo-on-sharing@2x.png"; sourceTree = ""; }; - CDCC0A3116E0C23700BE4481 /* home-private.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-private.png"; path = "images/home-private.png"; sourceTree = ""; }; - CDCC0A3216E0C23700BE4481 /* home-private@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-private@2x.png"; path = "images/home-private@2x.png"; sourceTree = ""; }; - CDCC0A3316E0C23700BE4481 /* home-retry.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-retry.png"; path = "images/home-retry.png"; sourceTree = ""; }; - CDCC0A3416E0C23700BE4481 /* home-retry@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-retry@2x.png"; path = "images/home-retry@2x.png"; sourceTree = ""; }; - CDCC0A3516E0C23700BE4481 /* home-upload-now.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-upload-now.png"; path = "images/home-upload-now.png"; sourceTree = ""; }; - CDCC0A3616E0C23700BE4481 /* home-upload-now@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-upload-now@2x.png"; path = "images/home-upload-now@2x.png"; sourceTree = ""; }; - CDCC0A3716E0C23700BE4481 /* home-uploaded.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-uploaded.png"; path = "images/home-uploaded.png"; sourceTree = ""; }; - CDCC0A3816E0C23700BE4481 /* home-uploaded@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-uploaded@2x.png"; path = "images/home-uploaded@2x.png"; sourceTree = ""; }; - CDCC0A3916E0C23700BE4481 /* home-waiting.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-waiting.png"; path = "images/home-waiting.png"; sourceTree = ""; }; - CDCC0A3A16E0C23700BE4481 /* home-waiting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "home-waiting@2x.png"; path = "images/home-waiting@2x.png"; sourceTree = ""; }; - CDCC0A3B16E0C23700BE4481 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = images/Icon.png; sourceTree = ""; }; - CDCC0A3C16E0C23700BE4481 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "images/Icon@2x.png"; sourceTree = ""; }; - CDCC0A3D16E0C23700BE4481 /* login-background-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-background-568h@2x.png"; path = "images/login-background-568h@2x.png"; sourceTree = ""; }; - CDCC0A3E16E0C23700BE4481 /* login-background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-background.png"; path = "images/login-background.png"; sourceTree = ""; }; - CDCC0A3F16E0C23700BE4481 /* login-background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-background@2x.png"; path = "images/login-background@2x.png"; sourceTree = ""; }; - CDCC0A4016E0C23700BE4481 /* login-create-account.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-create-account.png"; path = "images/login-create-account.png"; sourceTree = ""; }; - CDCC0A4116E0C23700BE4481 /* login-create-account@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-create-account@2x.png"; path = "images/login-create-account@2x.png"; sourceTree = ""; }; - CDCC0A4216E0C23700BE4481 /* login-facebook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-facebook.png"; path = "images/login-facebook.png"; sourceTree = ""; }; - CDCC0A4316E0C23700BE4481 /* login-facebook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-facebook@2x.png"; path = "images/login-facebook@2x.png"; sourceTree = ""; }; - CDCC0A4416E0C23700BE4481 /* login-field-background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-field-background.png"; path = "images/login-field-background.png"; sourceTree = ""; }; - CDCC0A4516E0C23700BE4481 /* login-field-background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-field-background@2x.png"; path = "images/login-field-background@2x.png"; sourceTree = ""; }; - CDCC0A4616E0C23700BE4481 /* login-login-with.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-login-with.png"; path = "images/login-login-with.png"; sourceTree = ""; }; - CDCC0A4716E0C23700BE4481 /* login-login-with@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-login-with@2x.png"; path = "images/login-login-with@2x.png"; sourceTree = ""; }; - CDCC0A4816E0C23700BE4481 /* login-login.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-login.png"; path = "images/login-login.png"; sourceTree = ""; }; - CDCC0A4916E0C23700BE4481 /* login-login@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-login@2x.png"; path = "images/login-login@2x.png"; sourceTree = ""; }; - CDCC0A4A16E0C23700BE4481 /* login-recover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-recover.png"; path = "images/login-recover.png"; sourceTree = ""; }; - CDCC0A4B16E0C23700BE4481 /* login-recover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-recover@2x.png"; path = "images/login-recover@2x.png"; sourceTree = ""; }; - CDCC0A4C16E0C23700BE4481 /* login-signup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-signup.png"; path = "images/login-signup.png"; sourceTree = ""; }; - CDCC0A4D16E0C23700BE4481 /* login-signup@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-signup@2x.png"; path = "images/login-signup@2x.png"; sourceTree = ""; }; - CDCC0A4E16E0C23700BE4481 /* login-using-own-domain.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-using-own-domain.png"; path = "images/login-using-own-domain.png"; sourceTree = ""; }; - CDCC0A4F16E0C23700BE4481 /* login-using-own-domain@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "login-using-own-domain@2x.png"; path = "images/login-using-own-domain@2x.png"; sourceTree = ""; }; - CDCC0A5416E0C23700BE4481 /* profile-albumsico.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-albumsico.png"; path = "images/profile-albumsico.png"; sourceTree = ""; }; - CDCC0A5516E0C23700BE4481 /* profile-albumsico@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-albumsico@2x.png"; path = "images/profile-albumsico@2x.png"; sourceTree = ""; }; - CDCC0A5616E0C23700BE4481 /* profile-button-upgrade-pro.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-button-upgrade-pro.png"; path = "images/profile-button-upgrade-pro.png"; sourceTree = ""; }; - CDCC0A5716E0C23700BE4481 /* profile-button-upgrade-pro@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-button-upgrade-pro@2x.png"; path = "images/profile-button-upgrade-pro@2x.png"; sourceTree = ""; }; - CDCC0A5816E0C23700BE4481 /* profile-details-server-account.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-details-server-account.png"; path = "images/profile-details-server-account.png"; sourceTree = ""; }; - CDCC0A5916E0C23700BE4481 /* profile-details-server-account@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-details-server-account@2x.png"; path = "images/profile-details-server-account@2x.png"; sourceTree = ""; }; - CDCC0A5A16E0C23700BE4481 /* profile-line.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-line.png"; path = "images/profile-line.png"; sourceTree = ""; }; - CDCC0A5B16E0C23700BE4481 /* profile-line@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-line@2x.png"; path = "images/profile-line@2x.png"; sourceTree = ""; }; - CDCC0A5C16E0C23700BE4481 /* profile-photosico.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-photosico.png"; path = "images/profile-photosico.png"; sourceTree = ""; }; - CDCC0A5D16E0C23700BE4481 /* profile-photosico@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-photosico@2x.png"; path = "images/profile-photosico@2x.png"; sourceTree = ""; }; - CDCC0A5E16E0C23700BE4481 /* profile-storageico.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-storageico.png"; path = "images/profile-storageico.png"; sourceTree = ""; }; - CDCC0A5F16E0C23700BE4481 /* profile-storageico@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-storageico@2x.png"; path = "images/profile-storageico@2x.png"; sourceTree = ""; }; - CDCC0A6016E0C23700BE4481 /* profile-tagsico.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-tagsico.png"; path = "images/profile-tagsico.png"; sourceTree = ""; }; - CDCC0A6116E0C23700BE4481 /* profile-tagsico@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile-tagsico@2x.png"; path = "images/profile-tagsico@2x.png"; sourceTree = ""; }; - CDCC0A6216E0C23700BE4481 /* profilepic.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = profilepic.png; path = images/profilepic.png; sourceTree = ""; }; - CDCC0A6316E0C23700BE4481 /* profilepic@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profilepic@2x.png"; path = "images/profilepic@2x.png"; sourceTree = ""; }; - CDCC0A6416E0C23700BE4481 /* refresh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = refresh.png; path = images/refresh.png; sourceTree = ""; }; - CDCC0A6516E0C23700BE4481 /* refresh@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "refresh@2x.png"; path = "images/refresh@2x.png"; sourceTree = ""; }; - CDCC0A6616E0C23700BE4481 /* register-background-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "register-background-568h@2x.png"; path = "images/register-background-568h@2x.png"; sourceTree = ""; }; - CDCC0A6716E0C23700BE4481 /* register-background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "register-background.png"; path = "images/register-background.png"; sourceTree = ""; }; - CDCC0A6816E0C23700BE4481 /* register-background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "register-background@2x.png"; path = "images/register-background@2x.png"; sourceTree = ""; }; - CDCC0A6916E0C23700BE4481 /* settingsbtn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settingsbtn.png; path = images/settingsbtn.png; sourceTree = ""; }; - CDCC0A6A16E0C23700BE4481 /* settingsbtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "settingsbtn@2x.png"; path = "images/settingsbtn@2x.png"; sourceTree = ""; }; - CDCC0A6B16E0C23700BE4481 /* sync-already-uploaded.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "sync-already-uploaded.png"; path = "images/sync-already-uploaded.png"; sourceTree = ""; }; - CDCC0A6C16E0C23700BE4481 /* sync-already-uploaded@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "sync-already-uploaded@2x.png"; path = "images/sync-already-uploaded@2x.png"; sourceTree = ""; }; - CDCC0A6D16E0C23700BE4481 /* sync-hide.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "sync-hide.png"; path = "images/sync-hide.png"; sourceTree = ""; }; - CDCC0A6E16E0C23700BE4481 /* sync-hide@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "sync-hide@2x.png"; path = "images/sync-hide@2x.png"; sourceTree = ""; }; - CDCC0A6F16E0C23700BE4481 /* sync-overlay.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "sync-overlay.png"; path = "images/sync-overlay.png"; sourceTree = ""; }; - CDCC0A7016E0C23700BE4481 /* sync-overlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "sync-overlay@2x.png"; path = "images/sync-overlay@2x.png"; sourceTree = ""; }; - CDCC0A7116E0C23700BE4481 /* sync-show.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "sync-show.png"; path = "images/sync-show.png"; sourceTree = ""; }; - CDCC0A7216E0C23700BE4481 /* sync-show@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "sync-show@2x.png"; path = "images/sync-show@2x.png"; sourceTree = ""; }; - CDCC0B5816E0C49D00BE4481 /* ProfileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileViewController.h; sourceTree = ""; }; - CDCC0B5916E0C49D00BE4481 /* ProfileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileViewController.m; sourceTree = ""; }; - CDCC0B5A16E0C49D00BE4481 /* ProfileViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ProfileViewController.xib; sourceTree = ""; }; - CDCC0B6216E0C49D00BE4481 /* WebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewController.h; sourceTree = ""; }; - CDCC0B6316E0C49D00BE4481 /* WebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewController.m; sourceTree = ""; }; - CDCC0BB816E0C66400BE4481 /* AuthenticationViewController5.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AuthenticationViewController5.xib; sourceTree = ""; }; - CDCC0BBB16E0C66400BE4481 /* DateUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateUtilities.h; sourceTree = ""; }; - CDCC0BBC16E0C66400BE4481 /* DateUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DateUtilities.m; sourceTree = ""; }; - CDCC0BC116E0C66400BE4481 /* ImageManipulation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageManipulation.h; sourceTree = ""; }; - CDCC0BC216E0C66400BE4481 /* ImageManipulation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageManipulation.m; sourceTree = ""; }; - CDCC0BC516E0C66400BE4481 /* LoginConnectViewController5.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginConnectViewController5.xib; sourceTree = ""; }; - CDCC0BC616E0C66400BE4481 /* LoginViewController5.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController5.xib; sourceTree = ""; }; - CDCC0BCF16E0C66400BE4481 /* OpenPhotoIASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenPhotoIASKAppSettingsViewController.h; sourceTree = ""; }; - CDCC0BD016E0C66400BE4481 /* OpenPhotoIASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OpenPhotoIASKAppSettingsViewController.m; sourceTree = ""; }; - CDCC0BDD16E0C66400BE4481 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; }; - CDCC0BE616E0C66400BE4481 /* TransformationUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformationUtilities.h; sourceTree = ""; }; - CDCC0BE716E0C66400BE4481 /* TransformationUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TransformationUtilities.m; sourceTree = ""; }; - CDCC0BE816E0C66400BE4481 /* UpdateUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UpdateUtilities.h; sourceTree = ""; }; - CDCC0BE916E0C66400BE4481 /* UpdateUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UpdateUtilities.m; sourceTree = ""; }; - CDCC0CB616E1021700BE4481 /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKAppSettingsViewController.h; path = Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h; sourceTree = ""; }; - CDCC0CB716E1021700BE4481 /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKAppSettingsViewController.m; path = Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m; sourceTree = ""; }; - CDCC0CB816E1021700BE4481 /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKAppSettingsWebViewController.h; path = Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h; sourceTree = ""; }; - CDCC0CB916E1021700BE4481 /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKAppSettingsWebViewController.m; path = Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.m; sourceTree = ""; }; - CDCC0CBA16E1021700BE4481 /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSpecifierValuesViewController.h; path = Frameworks/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.h; sourceTree = ""; }; - CDCC0CBB16E1021700BE4481 /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSpecifierValuesViewController.m; path = Frameworks/InAppSettingsKit/Controllers/IASKSpecifierValuesViewController.m; sourceTree = ""; }; - CDCC0CBF16E1022400BE4481 /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSettingsReader.h; path = Frameworks/InAppSettingsKit/Models/IASKSettingsReader.h; sourceTree = ""; }; - CDCC0CC016E1022400BE4481 /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSettingsReader.m; path = Frameworks/InAppSettingsKit/Models/IASKSettingsReader.m; sourceTree = ""; }; - CDCC0CC116E1022400BE4481 /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSettingsStore.h; path = Frameworks/InAppSettingsKit/Models/IASKSettingsStore.h; sourceTree = ""; }; - CDCC0CC216E1022400BE4481 /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSettingsStore.m; path = Frameworks/InAppSettingsKit/Models/IASKSettingsStore.m; sourceTree = ""; }; - CDCC0CC316E1022400BE4481 /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSettingsStoreFile.h; path = Frameworks/InAppSettingsKit/Models/IASKSettingsStoreFile.h; sourceTree = ""; }; - CDCC0CC416E1022400BE4481 /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSettingsStoreFile.m; path = Frameworks/InAppSettingsKit/Models/IASKSettingsStoreFile.m; sourceTree = ""; }; - CDCC0CC516E1022400BE4481 /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSettingsStoreUserDefaults.h; path = Frameworks/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.h; sourceTree = ""; }; - CDCC0CC616E1022400BE4481 /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSettingsStoreUserDefaults.m; path = Frameworks/InAppSettingsKit/Models/IASKSettingsStoreUserDefaults.m; sourceTree = ""; }; - CDCC0CC716E1022400BE4481 /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSpecifier.h; path = Frameworks/InAppSettingsKit/Models/IASKSpecifier.h; sourceTree = ""; }; - CDCC0CC816E1022400BE4481 /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSpecifier.m; path = Frameworks/InAppSettingsKit/Models/IASKSpecifier.m; sourceTree = ""; }; - CDCC0CCE16E1023200BE4481 /* IASKPSSliderSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKPSSliderSpecifierViewCell.h; path = Frameworks/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.h; sourceTree = ""; }; - CDCC0CCF16E1023200BE4481 /* IASKPSSliderSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKPSSliderSpecifierViewCell.m; path = Frameworks/InAppSettingsKit/Views/IASKPSSliderSpecifierViewCell.m; sourceTree = ""; }; - CDCC0CD016E1023200BE4481 /* IASKPSTextFieldSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKPSTextFieldSpecifierViewCell.h; path = Frameworks/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.h; sourceTree = ""; }; - CDCC0CD116E1023200BE4481 /* IASKPSTextFieldSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKPSTextFieldSpecifierViewCell.m; path = Frameworks/InAppSettingsKit/Views/IASKPSTextFieldSpecifierViewCell.m; sourceTree = ""; }; - CDCC0CD216E1023200BE4481 /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKPSTitleValueSpecifierViewCell.h; path = Frameworks/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h; sourceTree = ""; }; - CDCC0CD316E1023200BE4481 /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKPSTitleValueSpecifierViewCell.m; path = Frameworks/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m; sourceTree = ""; }; - CDCC0CD416E1023200BE4481 /* IASKPSToggleSwitchSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKPSToggleSwitchSpecifierViewCell.h; path = Frameworks/InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.h; sourceTree = ""; }; - CDCC0CD516E1023200BE4481 /* IASKPSToggleSwitchSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKPSToggleSwitchSpecifierViewCell.m; path = Frameworks/InAppSettingsKit/Views/IASKPSToggleSwitchSpecifierViewCell.m; sourceTree = ""; }; - CDCC0CD616E1023200BE4481 /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSlider.h; path = Frameworks/InAppSettingsKit/Views/IASKSlider.h; sourceTree = ""; }; - CDCC0CD716E1023200BE4481 /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSlider.m; path = Frameworks/InAppSettingsKit/Views/IASKSlider.m; sourceTree = ""; }; - CDCC0CD816E1023200BE4481 /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKSwitch.h; path = Frameworks/InAppSettingsKit/Views/IASKSwitch.h; sourceTree = ""; }; - CDCC0CD916E1023200BE4481 /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKSwitch.m; path = Frameworks/InAppSettingsKit/Views/IASKSwitch.m; sourceTree = ""; }; - CDCC0CDA16E1023200BE4481 /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKTextField.h; path = Frameworks/InAppSettingsKit/Views/IASKTextField.h; sourceTree = ""; }; - CDCC0CDB16E1023200BE4481 /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKTextField.m; path = Frameworks/InAppSettingsKit/Views/IASKTextField.m; sourceTree = ""; }; - CDCC0CE316E1023D00BE4481 /* IASKAppSettingsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = IASKAppSettingsView.xib; path = Frameworks/InAppSettingsKit/Xibs/IASKAppSettingsView.xib; sourceTree = ""; }; - CDCC0CE416E1023D00BE4481 /* IASKAppSettingsWebView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = IASKAppSettingsWebView.xib; path = Frameworks/InAppSettingsKit/Xibs/IASKAppSettingsWebView.xib; sourceTree = ""; }; - CDCC0CE516E1023D00BE4481 /* IASKPSSliderSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = IASKPSSliderSpecifierViewCell.xib; path = Frameworks/InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib; sourceTree = ""; }; - CDCC0CE616E1023D00BE4481 /* IASKPSTextFieldSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = IASKPSTextFieldSpecifierViewCell.xib; path = Frameworks/InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib; sourceTree = ""; }; - CDCC0CE716E1023D00BE4481 /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = IASKPSToggleSwitchSpecifierViewCell.xib; path = Frameworks/InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = ""; }; - CDCC0CE816E1023D00BE4481 /* IASKSpecifierValuesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = IASKSpecifierValuesView.xib; path = Frameworks/InAppSettingsKit/Xibs/IASKSpecifierValuesView.xib; sourceTree = ""; }; - CDCF864B18036ED3002E7A39 /* MWPhotoBrowser.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = MWPhotoBrowser.bundle; path = mwphotobrowser/MWPhotoBrowser.bundle; sourceTree = ""; }; - CDCF864D180371C2002E7A39 /* DACircularProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DACircularProgressView.h; path = mwphotobrowser/DACircularProgressView.h; sourceTree = ""; }; - CDCF864E180371C2002E7A39 /* DACircularProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DACircularProgressView.m; path = mwphotobrowser/DACircularProgressView.m; sourceTree = ""; }; - CDD1A3AA16E89A2600CDC33C /* menu-album.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-album.png"; path = "images/menu-album.png"; sourceTree = ""; }; - CDD1A3AB16E89A2600CDC33C /* menu-album@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-album@2x.png"; path = "images/menu-album@2x.png"; sourceTree = ""; }; - CDD1A3AC16E89A2600CDC33C /* menu-gallery.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-gallery.png"; path = "images/menu-gallery.png"; sourceTree = ""; }; - CDD1A3AD16E89A2600CDC33C /* menu-gallery@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-gallery@2x.png"; path = "images/menu-gallery@2x.png"; sourceTree = ""; }; - CDD1A3AE16E89A2600CDC33C /* menu-latest.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-latest.png"; path = "images/menu-latest.png"; sourceTree = ""; }; - CDD1A3AF16E89A2600CDC33C /* menu-latest@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-latest@2x.png"; path = "images/menu-latest@2x.png"; sourceTree = ""; }; - CDD1A3B016E89A2600CDC33C /* menu-profile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-profile.png"; path = "images/menu-profile.png"; sourceTree = ""; }; - CDD1A3B116E89A2600CDC33C /* menu-profile@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-profile@2x.png"; path = "images/menu-profile@2x.png"; sourceTree = ""; }; - CDD1A3B216E89A2600CDC33C /* menu-search.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-search.png"; path = "images/menu-search.png"; sourceTree = ""; }; - CDD1A3B316E89A2600CDC33C /* menu-search@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-search@2x.png"; path = "images/menu-search@2x.png"; sourceTree = ""; }; - CDD1A3B416E89A2600CDC33C /* menu-settings.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-settings.png"; path = "images/menu-settings.png"; sourceTree = ""; }; - CDD1A3B516E89A2600CDC33C /* menu-settings@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-settings@2x.png"; path = "images/menu-settings@2x.png"; sourceTree = ""; }; - CDD1A3B616E89A2600CDC33C /* menu-tags.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-tags.png"; path = "images/menu-tags.png"; sourceTree = ""; }; - CDD1A3B716E89A2600CDC33C /* menu-tags@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-tags@2x.png"; path = "images/menu-tags@2x.png"; sourceTree = ""; }; - CDD1A3B816E89A2600CDC33C /* menu-upload.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-upload.png"; path = "images/menu-upload.png"; sourceTree = ""; }; - CDD1A3B916E89A2600CDC33C /* menu-upload@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-upload@2x.png"; path = "images/menu-upload@2x.png"; sourceTree = ""; }; - CDDFDA3E1729422A00D992DC /* LoginViewControlleriPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewControlleriPad.xib; sourceTree = ""; }; - CDDFDA4017294A3200D992DC /* trovebox-logo-ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "trovebox-logo-ipad.png"; path = "images/trovebox-logo-ipad.png"; sourceTree = ""; }; - CDDFDA48172970CA00D992DC /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "../Default@2x.png"; sourceTree = ""; }; - CDDFDA4A172970D200D992DC /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = ../Default.png; sourceTree = ""; }; - CDDFDA4C172973D700D992DC /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait~ipad.png"; path = "../Default-Portrait~ipad.png"; sourceTree = ""; }; - CDDFDA4E172973DC00D992DC /* Default-Portrait@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Portrait@2x~ipad.png"; path = "../Default-Portrait@2x~ipad.png"; sourceTree = ""; }; - CDDFDA50172973E100D992DC /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "../Default-Landscape~ipad.png"; sourceTree = ""; }; - CDDFDA52172973E500D992DC /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "../Default-Landscape@2x~ipad.png"; sourceTree = ""; }; - CDDFDA541729740F00D992DC /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "../Default-568h@2x.png"; sourceTree = ""; }; - CDE4A0E317642CC8002604CC /* PhotoUploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoUploader.h; sourceTree = ""; }; - CDE4A0E417642CC8002604CC /* PhotoUploader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoUploader.m; sourceTree = ""; }; - CDF2C4DC17EB641C006C78A9 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Trovebox/Images.xcassets; sourceTree = SOURCE_ROOT; }; - CDF2F06D16E4D87A00D309B9 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; }; - CDF2F0C216E520FC00D309B9 /* SBJson.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SBJson.xcodeproj; path = "Frameworks/json-framework/SBJson.xcodeproj"; sourceTree = ""; }; - CDF2F0F416E52A8D00D309B9 /* Entitlements.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Entitlements.entitlements; sourceTree = SOURCE_ROOT; }; - CDF2F10116E52DCC00D309B9 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; - CDF2F10316E52DDD00D309B9 /* Accounts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accounts.framework; path = System/Library/Frameworks/Accounts.framework; sourceTree = SDKROOT; }; - CDF2F10516E52DF900D309B9 /* Social.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; }; - CDF2F10B16E5305800D309B9 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Reachability.h; path = ../Frameworks/Reachability/Classes/Reachability.h; sourceTree = ""; }; - CDF2F10C16E5305800D309B9 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Reachability.m; path = ../Frameworks/Reachability/Classes/Reachability.m; sourceTree = ""; }; - CDFAF33D16285495007A4FDF /* HomeTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeTableViewController.h; sourceTree = ""; }; - CDFAF33E16285495007A4FDF /* HomeTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeTableViewController.m; sourceTree = ""; }; - CDFAF33F16285495007A4FDF /* NewestPhotoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewestPhotoCell.h; sourceTree = ""; }; - CDFAF34016285495007A4FDF /* NewestPhotoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewestPhotoCell.m; sourceTree = ""; }; - CDFAF34116285495007A4FDF /* NewestPhotoCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NewestPhotoCell.xib; sourceTree = ""; }; - CDFAF34216285495007A4FDF /* UploadCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UploadCell.h; sourceTree = ""; }; - CDFAF34316285495007A4FDF /* UploadCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UploadCell.m; sourceTree = ""; }; - CDFAF34416285495007A4FDF /* UploadCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UploadCell.xib; sourceTree = ""; }; - CDFAF34B16285730007A4FDF /* Tag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Tag.h; path = Photo/Tag.h; sourceTree = ""; }; - CDFAF34C16285730007A4FDF /* Tag.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Tag.m; path = Photo/Tag.m; sourceTree = ""; }; - CDFAF34D16285730007A4FDF /* TagViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TagViewController.h; path = Photo/TagViewController.h; sourceTree = ""; }; - CDFAF34E16285730007A4FDF /* TagViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TagViewController.m; path = Photo/TagViewController.m; sourceTree = ""; }; - CDFAF35A16285BC6007A4FDF /* Timeline+Methods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Timeline+Methods.h"; sourceTree = ""; }; - CDFAF35B16285BC6007A4FDF /* Timeline+Methods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Timeline+Methods.m"; sourceTree = ""; }; - CDFAF35E16285C4E007A4FDF /* Synced+Methods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Synced+Methods.h"; sourceTree = ""; }; - CDFAF35F16285C4E007A4FDF /* Synced+Methods.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Synced+Methods.m"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - CDAFB9CB16122262002D6E86 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 03A1DBB61730BB7D004CEC1D /* libGPUImage.a in Frameworks */, - CD30D8591636A9DB001A0CA0 /* OpenGLES.framework in Frameworks */, - 03184975171146E6009C9214 /* CoreVideo.framework in Frameworks */, - 03184973171146E0009C9214 /* CoreMedia.framework in Frameworks */, - 03184971171146B3009C9214 /* AVFoundation.framework in Frameworks */, - CDD1A39C16E76E7600CDC33C /* libSSKeyChain.a in Frameworks */, - CDA1855A16E601CB00D617CB /* libEmail.a in Frameworks */, - CDA1855B16E601CB00D617CB /* libFacebook.a in Frameworks */, - CDA1855C16E601CB00D617CB /* libJSONKit.a in Frameworks */, - CDA1855D16E601CB00D617CB /* libOAuth.a in Frameworks */, - CDA1855E16E601CB00D617CB /* libShareKitCore.a in Frameworks */, - CDA1855F16E601CB00D617CB /* libTwitter.a in Frameworks */, - CDF2F10616E52DF900D309B9 /* Social.framework in Frameworks */, - CDF2F10416E52DDD00D309B9 /* Accounts.framework in Frameworks */, - CDF2F10216E52DCC00D309B9 /* AdSupport.framework in Frameworks */, - CDF2F06E16E4D87A00D309B9 /* MapKit.framework in Frameworks */, - CD30D8571636A9CE001A0CA0 /* CoreText.framework in Frameworks */, - CD30D8531636A9AB001A0CA0 /* libsqlite3.0.dylib in Frameworks */, - CD30D8511636A98C001A0CA0 /* Accelerate.framework in Frameworks */, - CD30D5F8163041A4001A0CA0 /* AssetsLibrary.framework in Frameworks */, - CD84B3A2162D527E0008FE7D /* QuartzCore.framework in Frameworks */, - CD1CDE51162C2D8300E57F73 /* ImageIO.framework in Frameworks */, - CD004A41161F0324006B1C6E /* CoreFoundation.framework in Frameworks */, - CD004A3F161F030F006B1C6E /* Twitter.framework in Frameworks */, - CD004A3D161F02DA006B1C6E /* CoreLocation.framework in Frameworks */, - CD004A3B161F02C9006B1C6E /* MessageUI.framework in Frameworks */, - CD004A39161F02B7006B1C6E /* Security.framework in Frameworks */, - CD7642B2161EDB9E00E0B657 /* libz.dylib in Frameworks */, - CD7642B0161EDB8E00E0B657 /* MobileCoreServices.framework in Frameworks */, - CD7642AE161EDB8300E0B657 /* SystemConfiguration.framework in Frameworks */, - CD7642AC161EDB7700E0B657 /* CFNetwork.framework in Frameworks */, - CDAFB9D316122262002D6E86 /* UIKit.framework in Frameworks */, - CDAFB9D516122262002D6E86 /* Foundation.framework in Frameworks */, - CDAFB9D716122262002D6E86 /* CoreGraphics.framework in Frameworks */, - CDAFB9D916122262002D6E86 /* CoreData.framework in Frameworks */, - CDF2F10716E52EC000D309B9 /* libSDWebImage.a in Frameworks */, - CDD935BF17F3A55D002CE92D /* libsbjson-ios.a in Frameworks */, - CDBD38D416F868F1007D0CC6 /* Crashlytics.framework in Frameworks */, - CD44F034180C82B30019B307 /* libGoogleAnalyticsServices.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0318497917114966009C9214 /* Filters */ = { - isa = PBXGroup; - children = ( - 0318497A17114966009C9214 /* 02.acv */, - 0318497B17114966009C9214 /* 06.acv */, - 0318497C17114966009C9214 /* 17.acv */, - 0318497D17114966009C9214 /* aqua.acv */, - 0318497E17114966009C9214 /* crossprocess.acv */, - 0318497F17114966009C9214 /* purple-green.acv */, - 0318498017114966009C9214 /* yellow-red.acv */, - ); - name = Filters; - path = Frameworks/DLCImagePickerController/Resources/Filters; - sourceTree = ""; - }; - 0318498917114990009C9214 /* Images */ = { - isa = PBXGroup; - children = ( - 0318498A17114990009C9214 /* FilterSamples */, - 0318499F17114990009C9214 /* Overlays */, - 031849A217114990009C9214 /* Samples */, - 031849A417114990009C9214 /* UI */, - ); - name = Images; - path = Frameworks/DLCImagePickerController/Images; - sourceTree = ""; - }; - 0318498A17114990009C9214 /* FilterSamples */ = { - isa = PBXGroup; - children = ( - 0318498B17114990009C9214 /* 1.jpg */, - 0318498C17114990009C9214 /* 10.jpg */, - 0318498D17114990009C9214 /* 10@2x.jpg */, - 0318498E17114990009C9214 /* 1@2x.jpg */, - 0318498F17114990009C9214 /* 2.jpg */, - 0318499017114990009C9214 /* 2@2x.jpg */, - 0318499117114990009C9214 /* 3.jpg */, - 0318499217114990009C9214 /* 3@2x.jpg */, - 0318499317114990009C9214 /* 4.jpg */, - 0318499417114990009C9214 /* 4@2x.jpg */, - 0318499517114990009C9214 /* 5.jpg */, - 0318499617114990009C9214 /* 5@2x.jpg */, - 0318499717114990009C9214 /* 6.jpg */, - 0318499817114990009C9214 /* 6@2x.jpg */, - 0318499917114990009C9214 /* 7.jpg */, - 0318499A17114990009C9214 /* 7@2x.jpg */, - 0318499B17114990009C9214 /* 8.jpg */, - 0318499C17114990009C9214 /* 8@2x.jpg */, - 0318499D17114990009C9214 /* 9.jpg */, - 0318499E17114990009C9214 /* 9@2x.jpg */, - ); - path = FilterSamples; - sourceTree = ""; - }; - 0318499F17114990009C9214 /* Overlays */ = { - isa = PBXGroup; - children = ( - 031849A017114990009C9214 /* blackframe.png */, - 031849A117114990009C9214 /* mask.png */, - ); - path = Overlays; - sourceTree = ""; - }; - 031849A217114990009C9214 /* Samples */ = { - isa = PBXGroup; - children = ( - 031849A317114990009C9214 /* sample1.jpg */, - ); - path = Samples; - sourceTree = ""; - }; - 031849A417114990009C9214 /* UI */ = { - isa = PBXGroup; - children = ( - 031849A517114990009C9214 /* blur-on.png */, - 031849A617114990009C9214 /* blur-on@2x.png */, - 031849A717114990009C9214 /* blur.png */, - 031849A817114990009C9214 /* blur@2x.png */, - 031849A917114990009C9214 /* camera-button.png */, - 031849AA17114990009C9214 /* camera-button@2x.png */, - 031849AB17114990009C9214 /* camera-icon.png */, - 031849AC17114990009C9214 /* camera-icon@2x.png */, - 031849AD17114990009C9214 /* close.png */, - 031849AE17114990009C9214 /* close@2x.png */, - 031849AF17114990009C9214 /* dock_bg.png */, - 031849B017114990009C9214 /* dock_bg@2x.png */, - 031849B117114990009C9214 /* filter-close.png */, - 031849B217114990009C9214 /* filter-close@2x.png */, - 031849B317114990009C9214 /* filter-open.png */, - 031849B417114990009C9214 /* filter-open@2x.png */, - 031849B517114990009C9214 /* filter.png */, - 031849B617114990009C9214 /* filter@2x.png */, - 031849B717114990009C9214 /* flash-auto.png */, - 031849B817114990009C9214 /* flash-auto@2x.png */, - 031849B917114990009C9214 /* flash-off.png */, - 031849BA17114990009C9214 /* flash-off@2x.png */, - 031849BB17114990009C9214 /* flash.png */, - 031849BC17114990009C9214 /* flash@2x.png */, - 031849BD17114990009C9214 /* focus-crosshair.png */, - 031849BE17114990009C9214 /* focus-crosshair@2x.png */, - 031849BF17114990009C9214 /* front-camera.png */, - 031849C017114990009C9214 /* front-camera@2x.png */, - 031849C117114990009C9214 /* library.png */, - 031849C217114990009C9214 /* library@2x.png */, - 031849C317114990009C9214 /* micro_carbon.png */, - 031849C417114990009C9214 /* micro_carbon@2x.png */, - 031849C517114990009C9214 /* photo_bar.png */, - 031849C617114990009C9214 /* photo_bar@2x.png */, - ); - path = UI; - sourceTree = ""; - }; - 03A1DBAB1730BA21004CEC1D /* Products */ = { - isa = PBXGroup; - children = ( - 03A1DBB11730BA22004CEC1D /* libGPUImage.a */, - 03A1DBB31730BA22004CEC1D /* GPUImageTests.octest */, - ); - name = Products; - sourceTree = ""; - }; - 03EEFF5117113FC7008D2FDA /* DLCImagePickerController */ = { - isa = PBXGroup; - children = ( - 0318498917114990009C9214 /* Images */, - 0318497817114965009C9214 /* DLCImagePicker.xib */, - 0318497917114966009C9214 /* Filters */, - 03EEFF5917114244008D2FDA /* BlurOverlayView.h */, - 03EEFF5A17114244008D2FDA /* BlurOverlayView.m */, - 03EEFF5B17114244008D2FDA /* DLCImagePickerController.h */, - 03EEFF5C17114244008D2FDA /* DLCImagePickerController.m */, - 03EEFF5D17114244008D2FDA /* GrayscaleContrastFilter.h */, - 03EEFF5E17114244008D2FDA /* GrayscaleContrastFilter.m */, - ); - name = DLCImagePickerController; - sourceTree = ""; - }; - 03EEFF6517114253008D2FDA /* GPUImage */ = { - isa = PBXGroup; - children = ( - 03A1DBAA1730BA21004CEC1D /* GPUImage.xcodeproj */, - ); - name = GPUImage; - sourceTree = ""; - }; - CD1CDE3D162C2B4B00E57F73 /* SDWebImage */ = { - isa = PBXGroup; - children = ( - CD1CDE3E162C2D2B00E57F73 /* SDWebImage.xcodeproj */, - ); - name = SDWebImage; - sourceTree = ""; - }; - CD1CDE3F162C2D2B00E57F73 /* Products */ = { - isa = PBXGroup; - children = ( - CD1CDE48162C2D2C00E57F73 /* libSDWebImage.a */, - CDDF9286180378A800D5C509 /* libSDWebImage+WebP.a */, - CD1CDE4C162C2D2C00E57F73 /* libSDWebImage+MKAnnotation.a */, - ); - name = Products; - sourceTree = ""; - }; - CD2F159116E600C8004D22FD /* ShareKit */ = { - isa = PBXGroup; - children = ( - CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */, - ); - name = ShareKit; - sourceTree = ""; - }; - CD2F159316E600DC004D22FD /* Products */ = { - isa = PBXGroup; - children = ( - CD2F15BA16E600DC004D22FD /* ShareKitDemo.app */, - CD2F15BC16E600DC004D22FD /* libShareKit.a */, - CD2F15BE16E600DC004D22FD /* ShareKit.bundle */, - CD2F15C016E600DC004D22FD /* libShareKitCore.a */, - CD2F15C216E600DC004D22FD /* libJSONKit.a */, - CD2F15C416E600DC004D22FD /* libSSKeyChain.a */, - CD2F15C616E600DC004D22FD /* libOAuth.a */, - CD2F15C816E600DC004D22FD /* libReachability.a */, - CD2F15CA16E600DC004D22FD /* libPrint.a */, - CD2F15CC16E600DC004D22FD /* libLogout.a */, - CD2F15CE16E600DC004D22FD /* libCopy.a */, - CD2F15D016E600DC004D22FD /* libEmail.a */, - CD2F15D216E600DC004D22FD /* libOpen in Safari.a */, - CD2F15D416E600DC004D22FD /* libSave to Album.a */, - CD2F15D616E600DC004D22FD /* libText Message.a */, - CD2F15D816E600DC004D22FD /* libKippt.a */, - CD2F15DA16E600DC004D22FD /* libDelicious.a */, - CD2F15DC16E600DC004D22FD /* libDiigo.a */, - CD2F15DE16E600DC004D22FD /* libVKontakte.a */, - CD2F15E016E600DC004D22FD /* libEvernote.a */, - CD2F15E216E600DC004D22FD /* libEvernote SDK.a */, - CD2F15E416E600DC004D22FD /* libFacebook.a */, - CD2F15E616E600DC004D22FD /* libFoursquareV2.a */, - CD2F15E816E600DC004D22FD /* libFlickr.a */, - CD2F15EA16E600DC004D22FD /* libFlickr SDK.a */, - CD2F15EC16E600DC004D22FD /* libGoogle Reader.a */, - CD2F15EE16E600DC004D22FD /* libInstagram.a */, - CD2F15F016E600DC004D22FD /* libInstapaper.a */, - CD2F15F216E600DC004D22FD /* libLinkedIn.a */, - CD2F15F416E600DC004D22FD /* libPinboard.a */, - CD2F15F616E600DC004D22FD /* libRead It Later.a */, - CD2F15F816E600DC004D22FD /* libTumblr.a */, - CD2F15FA16E600DC004D22FD /* libTwitter.a */, - CD2F15FC16E600DC004D22FD /* libSina Weibo.a */, - CD2F15FE16E600DC004D22FD /* libReadability.a */, - ); - name = Products; - sourceTree = ""; - }; - CD2FE8E01639837D0032105A /* Google Analytics SDK */ = { - isa = PBXGroup; - children = ( - CD44F004180C77790019B307 /* GAI.h */, - CD44F005180C77790019B307 /* GAIDictionaryBuilder.h */, - CD44F006180C77790019B307 /* GAIFields.h */, - CD44F007180C77790019B307 /* GAILogger.h */, - CD44F008180C77790019B307 /* GAITrackedViewController.h */, - CD44F009180C77790019B307 /* GAITracker.h */, - CD44F002180C77560019B307 /* libGoogleAnalyticsServices.a */, - ); - name = "Google Analytics SDK"; - sourceTree = ""; - }; - CD4613D2161C7A9F0028619D /* CoreData */ = { - isa = PBXGroup; - children = ( - CDFAF35E16285C4E007A4FDF /* Synced+Methods.h */, - CDFAF35F16285C4E007A4FDF /* Synced+Methods.m */, - CDFAF35A16285BC6007A4FDF /* Timeline+Methods.h */, - CDFAF35B16285BC6007A4FDF /* Timeline+Methods.m */, - CD0DE1CF171F251D0043D1DC /* Timeline.h */, - CD0DE1D0171F251D0043D1DC /* Timeline.m */, - CDAFB9EC16122263002D6E86 /* Photo.xcdatamodeld */, - CD014628170641C900FFE797 /* Photo.h */, - CD014629170641C900FFE797 /* Photo.m */, - CD014600170641C800FFE797 /* Synced.h */, - CD014601170641C800FFE797 /* Synced.m */, - CD5F5E4116F20E050044427E /* Gallery.h */, - CD5F5E4216F20E050044427E /* Gallery.m */, - ); - name = CoreData; - sourceTree = ""; - }; - CD4613D3161C7AB40028619D /* Authentication */ = { - isa = PBXGroup; - children = ( - CD15283F1628DB8500EA08FF /* LoginViewController.h */, - CD1528401628DB8500EA08FF /* LoginViewController.m */, - CD1528411628DB8500EA08FF /* LoginViewController.xib */, - CDCC0BC616E0C66400BE4481 /* LoginViewController5.xib */, - CDDFDA3E1729422A00D992DC /* LoginViewControlleriPad.xib */, - CD1528451628DB8500EA08FF /* LoginConnectViewController.h */, - CD1528461628DB8500EA08FF /* LoginConnectViewController.m */, - CD1528471628DB8500EA08FF /* LoginConnectViewController.xib */, - CDCC0BC516E0C66400BE4481 /* LoginConnectViewController5.xib */, - CD7642BB161EE15E00E0B657 /* AuthenticationViewController.h */, - CD7642BC161EE15E00E0B657 /* AuthenticationViewController.m */, - CD7642BD161EE15E00E0B657 /* AuthenticationViewController.xib */, - CDCC0BB816E0C66400BE4481 /* AuthenticationViewController5.xib */, - CD53E2AF180D8DBA00F9DB80 /* MultiSiteSelectionViewController.h */, - CD53E2B0180D8DBA00F9DB80 /* MultiSiteSelectionViewController.m */, - CDB1A93F1811C1150049DF8C /* MultiSiteSelectionCell.h */, - CDB1A9401811C1150049DF8C /* MultiSiteSelectionCell.m */, - CDB1A93D1811C0BC0049DF8C /* MultiSiteSelectionCell.xib */, - ); - name = Authentication; - sourceTree = ""; - }; - CD4613D4161C7AC00028619D /* Server */ = { - isa = PBXGroup; - children = ( - CD15283B1628DB8500EA08FF /* Account.h */, - CD15283C1628DB8500EA08FF /* Account.m */, - CD53E2DA180D950B00F9DB80 /* Profile.h */, - CD53E2DB180D950B00F9DB80 /* Profile.m */, - CD53E2DD180DC47300F9DB80 /* Permission.h */, - CD53E2DE180DC47300F9DB80 /* Permission.m */, - CD7642CF161EE27D00E0B657 /* AuthenticationService.h */, - CD7642D0161EE27D00E0B657 /* AuthenticationService.m */, - CDC7AEDA163EDD3900FC8BC1 /* PrivateAuthenticationService.h */, - CDC7AEDB163EDD3900FC8BC1 /* PrivateAuthenticationService.m */, - CD899283161F08AB00026DBB /* WebService.h */, - CD899284161F08AB00026DBB /* WebService.m */, - ); - name = Server; - sourceTree = ""; - }; - CD4613D5161C7ACB0028619D /* Home & Upload Status */ = { - isa = PBXGroup; - children = ( - CDFAF33D16285495007A4FDF /* HomeTableViewController.h */, - CDFAF33E16285495007A4FDF /* HomeTableViewController.m */, - CD25838D17F4C24900A62574 /* UploadStatusTableViewController.h */, - CD25838E17F4C24900A62574 /* UploadStatusTableViewController.m */, - CDFAF33F16285495007A4FDF /* NewestPhotoCell.h */, - CDFAF34016285495007A4FDF /* NewestPhotoCell.m */, - CDFAF34116285495007A4FDF /* NewestPhotoCell.xib */, - CD128353172153A800D61DB9 /* NewestPhotoCelliPad.xib */, - CDFAF34216285495007A4FDF /* UploadCell.h */, - CDFAF34316285495007A4FDF /* UploadCell.m */, - CDFAF34416285495007A4FDF /* UploadCell.xib */, - CD901279172167D000BB30EF /* UploadCelliPad.xib */, - ); - name = "Home & Upload Status"; - sourceTree = ""; - }; - CD4613D6161C7AEA0028619D /* Gallery */ = { - isa = PBXGroup; - children = ( - CDCF864D180371C2002E7A39 /* DACircularProgressView.h */, - CDCF864E180371C2002E7A39 /* DACircularProgressView.m */, - CDCF864B18036ED3002E7A39 /* MWPhotoBrowser.bundle */, - CD1A6D071704959E0002763A /* MWCaptionView.h */, - CD1A6D081704959E0002763A /* MWCaptionView.m */, - CD1A6D091704959E0002763A /* MWPhoto.h */, - CD1A6D0A1704959E0002763A /* MWPhoto.m */, - CD1A6D0C1704959E0002763A /* MWPhotoBrowser.h */, - CD1A6D0D1704959E0002763A /* MWPhotoBrowser.m */, - CD1A6D0E1704959E0002763A /* MWPhotoProtocol.h */, - CD1A6D0F1704959E0002763A /* MWTapDetectingImageView.h */, - CD1A6D101704959E0002763A /* MWTapDetectingImageView.m */, - CD1A6D111704959E0002763A /* MWTapDetectingView.h */, - CD1A6D121704959E0002763A /* MWTapDetectingView.m */, - CD1A6D131704959E0002763A /* MWZoomingScrollView.h */, - CD1A6D141704959E0002763A /* MWZoomingScrollView.m */, - CDC7AF2B1640156400FC8BC1 /* GalleryViewController.h */, - CDC7AF2C1640156400FC8BC1 /* GalleryViewController.m */, - CD1A6CD9170481190002763A /* TMPhotoQuiltViewCell.h */, - CD1A6CDA1704811A0002763A /* TMPhotoQuiltViewCell.m */, - ); - name = Gallery; - sourceTree = ""; - }; - CD4613D7161C7AFA0028619D /* Sync */ = { - isa = PBXGroup; - children = ( - CD2583E317FCB3B000A62574 /* ELCAssetSelectionDelegate.h */, - CD30D56116303E54001A0CA0 /* ELCAsset.h */, - CD30D56216303E54001A0CA0 /* ELCAsset.m */, - CD30D56316303E54001A0CA0 /* ELCAssetCell.h */, - CD30D56416303E54001A0CA0 /* ELCAssetCell.m */, - CD30D56516303E54001A0CA0 /* ELCAssetPicker.xib */, - CD30D56616303E54001A0CA0 /* ELCImagePickerController.h */, - CD30D56716303E54001A0CA0 /* ELCImagePickerController.m */, - CD30D56816303E54001A0CA0 /* ELCImagePickerController.xib */, - CD30D56916303E54001A0CA0 /* SyncService.h */, - CD30D56A16303E54001A0CA0 /* SyncService.m */, - CD30D56B16303E54001A0CA0 /* SyncViewController.h */, - CD30D56C16303E54001A0CA0 /* SyncViewController.m */, - CD30D56D16303E54001A0CA0 /* SyncViewController.xib */, - ); - name = Sync; - sourceTree = ""; - }; - CD4613D9161C7B0C0028619D /* Upload */ = { - isa = PBXGroup; - children = ( - CD30D83E16369CF1001A0CA0 /* PhotoViewController.h */, - CD30D83F16369CF1001A0CA0 /* PhotoViewController.m */, - CD30D84016369CF1001A0CA0 /* PhotoViewController.xib */, - CDC7AF37164028E000FC8BC1 /* PhotoViewController5.xib */, - CDE4A0E317642CC8002604CC /* PhotoUploader.h */, - CDE4A0E417642CC8002604CC /* PhotoUploader.m */, - CD30D78D16317A79001A0CA0 /* JobUploaderController.h */, - CD30D78E16317A79001A0CA0 /* JobUploaderController.m */, - CD30D78F16317A79001A0CA0 /* JobUploaderDelegate.h */, - CD30D79016317A79001A0CA0 /* JobUploaderDelegate.m */, - ); - name = Upload; - sourceTree = ""; - }; - CD4613DA161C7B190028619D /* Settings */ = { - isa = PBXGroup; - children = ( - CDCC0BCF16E0C66400BE4481 /* OpenPhotoIASKAppSettingsViewController.h */, - CDCC0BD016E0C66400BE4481 /* OpenPhotoIASKAppSettingsViewController.m */, - CDC7AE6F163EBFA300FC8BC1 /* AccountViewController.h */, - CDCC0B5816E0C49D00BE4481 /* ProfileViewController.h */, - CDCC0B5916E0C49D00BE4481 /* ProfileViewController.m */, - CDCC0B5A16E0C49D00BE4481 /* ProfileViewController.xib */, - CD9013461726C66800BB30EF /* ProfileViewControlleriPad.xib */, - CDCC0BDD16E0C66400BE4481 /* Settings.bundle */, - ); - name = Settings; - sourceTree = ""; - }; - CD4613DB161C7B3A0028619D /* Menu */ = { - isa = PBXGroup; - children = ( - CDC3A7E6161DF89D003FDC2E /* MenuViewController.h */, - CDC3A7E7161DF89D003FDC2E /* MenuViewController.m */, - CD1D824516E9205A00877A8E /* MenuTableViewCell.h */, - CD1D824616E9205A00877A8E /* MenuTableViewCell.m */, - CD1D826D16E9213800877A8E /* MenuTableViewCell.xib */, - CD1D826A16E9211000877A8E /* MenuTableViewSectionCell.h */, - CD1D826B16E9211000877A8E /* MenuTableViewSectionCell.m */, - CD1D826F16E9215600877A8E /* MenuTableViewSectionCell.xib */, - CD1D827116E9412800877A8E /* MenuTableViewSearchCell.h */, - CD1D827216E9412800877A8E /* MenuTableViewSearchCell.m */, - CD1D827416E9413900877A8E /* MenuTableViewSearchCell.xib */, - 03F119C617115A8A00EBBD45 /* UINavigationBar+Trovebox.h */, - 03F119C717115A8A00EBBD45 /* UINavigationBar+Trovebox.m */, - CD90127D17218B0700BB30EF /* UINavigationItem+Trovebox.h */, - CD90127E17218B0700BB30EF /* UINavigationItem+Trovebox.m */, - ); - name = Menu; - sourceTree = ""; - }; - CD4613DC161C7B800028619D /* Images */ = { - isa = PBXGroup; - children = ( - CD53E2E0180DCBB900F9DB80 /* icons */, - CDB1A9141811BD660049DF8C /* multiselection-cell-bg.png */, - CDB1A9151811BD660049DF8C /* multiselection-cell-bg@2x.png */, - CD043EB9180CDF79002E0524 /* 45-movie-1.png */, - CD043EBA180CDF79002E0524 /* 45-movie-1@2x.png */, - CD9ECD3C17C66DC900D4585B /* video-placeholder@2x.png */, - CD47755817600DD7001AF36E /* button-more.png */, - CD47755917600DD7001AF36E /* button-more@2x.png */, - CDDFDA541729740F00D992DC /* Default-568h@2x.png */, - CDDFDA52172973E500D992DC /* Default-Landscape@2x~ipad.png */, - CDDFDA50172973E100D992DC /* Default-Landscape~ipad.png */, - CDDFDA4E172973DC00D992DC /* Default-Portrait@2x~ipad.png */, - CDDFDA4C172973D700D992DC /* Default-Portrait~ipad.png */, - CDDFDA4A172970D200D992DC /* Default.png */, - CDDFDA48172970CA00D992DC /* Default@2x.png */, - CDDFDA4017294A3200D992DC /* trovebox-logo-ipad.png */, - CD31DEC017143FF90071D3E1 /* menu-album-selected.png */, - CD31DEC117143FF90071D3E1 /* menu-album-selected@2x.png */, - CD31DEC217143FF90071D3E1 /* menu-gallery-selected.png */, - CD31DEC317143FF90071D3E1 /* menu-gallery-selected@2x.png */, - CD31DEC417143FFA0071D3E1 /* menu-latest-selected.png */, - CD31DEC517143FFA0071D3E1 /* menu-latest-selected@2x.png */, - CD31DEC617143FFA0071D3E1 /* menu-profile-selected.png */, - CD31DEC717143FFA0071D3E1 /* menu-profile-selected@2x.png */, - CD31DEC817143FFA0071D3E1 /* menu-settings-selected.png */, - CD31DEC917143FFA0071D3E1 /* menu-settings-selected@2x.png */, - CD31DECA17143FFA0071D3E1 /* menu-tags-selected.png */, - CD31DECB17143FFA0071D3E1 /* menu-tags-selected@2x.png */, - CD31DECC17143FFA0071D3E1 /* menu-upload-selected.png */, - CD31DECD17143FFA0071D3E1 /* menu-upload-selected@2x.png */, - CDD1A3AA16E89A2600CDC33C /* menu-album.png */, - CDD1A3AB16E89A2600CDC33C /* menu-album@2x.png */, - CDD1A3AC16E89A2600CDC33C /* menu-gallery.png */, - CDD1A3AD16E89A2600CDC33C /* menu-gallery@2x.png */, - CDD1A3AE16E89A2600CDC33C /* menu-latest.png */, - CDD1A3AF16E89A2600CDC33C /* menu-latest@2x.png */, - CDD1A3B016E89A2600CDC33C /* menu-profile.png */, - CDD1A3B116E89A2600CDC33C /* menu-profile@2x.png */, - CDD1A3B216E89A2600CDC33C /* menu-search.png */, - CDD1A3B316E89A2600CDC33C /* menu-search@2x.png */, - CDD1A3B416E89A2600CDC33C /* menu-settings.png */, - CDD1A3B516E89A2600CDC33C /* menu-settings@2x.png */, - CDD1A3B616E89A2600CDC33C /* menu-tags.png */, - CDD1A3B716E89A2600CDC33C /* menu-tags@2x.png */, - CDD1A3B816E89A2600CDC33C /* menu-upload.png */, - CDD1A3B916E89A2600CDC33C /* menu-upload@2x.png */, - CDA1856916E61BBC00D617CB /* button-navigation-camera.png */, - CDA1856A16E61BBE00D617CB /* button-navigation-camera@2x.png */, - CDA1856B16E61BBF00D617CB /* button-navigation-menu.png */, - CDA1856C16E61BC000D617CB /* button-navigation-menu@2x.png */, - CDCC0A0E16E0C23700BE4481 /* appbar_empty.png */, - CDCC0A0F16E0C23700BE4481 /* appbar_empty@2x.png */, - CDCC0A1416E0C23700BE4481 /* button-disclosure-form.png */, - CDCC0A1516E0C23700BE4481 /* button-disclosure-form@2x.png */, - CDCC0A1616E0C23700BE4481 /* button-upgrade.png */, - CDCC0A1716E0C23700BE4481 /* button-upgrade@2x.png */, - CDCC0A1816E0C23700BE4481 /* button-upload-form.png */, - CDCC0A1916E0C23700BE4481 /* button-upload-form@2x.png */, - CDCC0A1A16E0C23700BE4481 /* close_camera.png */, - CDCC0A1B16E0C23700BE4481 /* close_camera@2x.png */, - CDCC0A2116E0C23700BE4481 /* edit.png */, - CDCC0A2216E0C23700BE4481 /* edit@2x.png */, - CDCC0A2316E0C23700BE4481 /* empty_img.png */, - CDCC0A2416E0C23700BE4481 /* empty_img@2x.png */, - CDCC0A2516E0C23700BE4481 /* gallery-show-tags.png */, - CDCC0A2616E0C23700BE4481 /* gallery-show-tags@2x.png */, - CDB3B3A61705EA020010C38A /* home-trovebox-logo.png */, - CDB3B3A71705EA0D0010C38A /* home-trovebox-logo@2x.png */, - CDCC0A2716E0C23700BE4481 /* home-already-uploaded.png */, - CDCC0A2816E0C23700BE4481 /* home-already-uploaded@2x.png */, - CDCC0A2916E0C23700BE4481 /* home-brown-arrow.png */, - CDCC0A2A16E0C23700BE4481 /* home-brown-arrow@2x.png */, - CDCC0A2B16E0C23700BE4481 /* home-geo-off-sharing.png */, - CDCC0A2C16E0C23700BE4481 /* home-geo-off-sharing@2x.png */, - CDCC0A2D16E0C23700BE4481 /* home-geo-on-sharing.png */, - CDCC0A2E16E0C23700BE4481 /* home-geo-on-sharing@2x.png */, - CDCC0A3116E0C23700BE4481 /* home-private.png */, - CDCC0A3216E0C23700BE4481 /* home-private@2x.png */, - CDCC0A3316E0C23700BE4481 /* home-retry.png */, - CDCC0A3416E0C23700BE4481 /* home-retry@2x.png */, - CDCC0A3516E0C23700BE4481 /* home-upload-now.png */, - CDCC0A3616E0C23700BE4481 /* home-upload-now@2x.png */, - CDCC0A3716E0C23700BE4481 /* home-uploaded.png */, - CDCC0A3816E0C23700BE4481 /* home-uploaded@2x.png */, - CDCC0A3916E0C23700BE4481 /* home-waiting.png */, - CDCC0A3A16E0C23700BE4481 /* home-waiting@2x.png */, - CDCC0A3D16E0C23700BE4481 /* login-background-568h@2x.png */, - CDCC0A3E16E0C23700BE4481 /* login-background.png */, - CDCC0A3F16E0C23700BE4481 /* login-background@2x.png */, - CDCC0A4016E0C23700BE4481 /* login-create-account.png */, - CDCC0A4116E0C23700BE4481 /* login-create-account@2x.png */, - CDCC0A4216E0C23700BE4481 /* login-facebook.png */, - CDCC0A4316E0C23700BE4481 /* login-facebook@2x.png */, - CDCC0A4416E0C23700BE4481 /* login-field-background.png */, - CDCC0A4516E0C23700BE4481 /* login-field-background@2x.png */, - CDCC0A4616E0C23700BE4481 /* login-login-with.png */, - CDCC0A4716E0C23700BE4481 /* login-login-with@2x.png */, - CDCC0A4816E0C23700BE4481 /* login-login.png */, - CDCC0A4916E0C23700BE4481 /* login-login@2x.png */, - CDCC0A4A16E0C23700BE4481 /* login-recover.png */, - CDCC0A4B16E0C23700BE4481 /* login-recover@2x.png */, - CDCC0A4C16E0C23700BE4481 /* login-signup.png */, - CDCC0A4D16E0C23700BE4481 /* login-signup@2x.png */, - CDCC0A4E16E0C23700BE4481 /* login-using-own-domain.png */, - CDCC0A4F16E0C23700BE4481 /* login-using-own-domain@2x.png */, - CDCC0A5416E0C23700BE4481 /* profile-albumsico.png */, - CDCC0A5516E0C23700BE4481 /* profile-albumsico@2x.png */, - CDCC0A5616E0C23700BE4481 /* profile-button-upgrade-pro.png */, - CDCC0A5716E0C23700BE4481 /* profile-button-upgrade-pro@2x.png */, - CDCC0A5816E0C23700BE4481 /* profile-details-server-account.png */, - CDCC0A5916E0C23700BE4481 /* profile-details-server-account@2x.png */, - CDCC0A5A16E0C23700BE4481 /* profile-line.png */, - CDCC0A5B16E0C23700BE4481 /* profile-line@2x.png */, - CDCC0A5C16E0C23700BE4481 /* profile-photosico.png */, - CDCC0A5D16E0C23700BE4481 /* profile-photosico@2x.png */, - CDCC0A5E16E0C23700BE4481 /* profile-storageico.png */, - CDCC0A5F16E0C23700BE4481 /* profile-storageico@2x.png */, - CDCC0A6016E0C23700BE4481 /* profile-tagsico.png */, - CDCC0A6116E0C23700BE4481 /* profile-tagsico@2x.png */, - CDCC0A6216E0C23700BE4481 /* profilepic.png */, - CDCC0A6316E0C23700BE4481 /* profilepic@2x.png */, - CDCC0A6416E0C23700BE4481 /* refresh.png */, - CDCC0A6516E0C23700BE4481 /* refresh@2x.png */, - CDCC0A6616E0C23700BE4481 /* register-background-568h@2x.png */, - CDCC0A6716E0C23700BE4481 /* register-background.png */, - CDCC0A6816E0C23700BE4481 /* register-background@2x.png */, - CDCC0A6916E0C23700BE4481 /* settingsbtn.png */, - CDCC0A6A16E0C23700BE4481 /* settingsbtn@2x.png */, - CDCC0A6B16E0C23700BE4481 /* sync-already-uploaded.png */, - CDCC0A6C16E0C23700BE4481 /* sync-already-uploaded@2x.png */, - CDCC0A6D16E0C23700BE4481 /* sync-hide.png */, - CDCC0A6E16E0C23700BE4481 /* sync-hide@2x.png */, - CDCC0A6F16E0C23700BE4481 /* sync-overlay.png */, - CDCC0A7016E0C23700BE4481 /* sync-overlay@2x.png */, - CDCC0A7116E0C23700BE4481 /* sync-show.png */, - CDCC0A7216E0C23700BE4481 /* sync-show@2x.png */, - ); - name = Images; - sourceTree = ""; - }; - CD53E2E0180DCBB900F9DB80 /* icons */ = { - isa = PBXGroup; - children = ( - CD53E2E1180DCC4700F9DB80 /* trovebox_29.png */, - CD53E2E2180DCC4700F9DB80 /* trovebox_58.png */, - CD53E2E3180DCC4700F9DB80 /* trovebox_76.png */, - CD53E2E4180DCC4700F9DB80 /* trovebox_120.png */, - CD53E2E5180DCC4700F9DB80 /* trovebox_152.png */, - CDCC0A3B16E0C23700BE4481 /* Icon.png */, - CDCC0A3C16E0C23700BE4481 /* Icon@2x.png */, - CD4B593C1733CD730023C199 /* Icon-72.png */, - CD4B593D1733CD730023C199 /* Icon-Small-50.png */, - CD4B593E1733CD730023C199 /* Icon-Small.png */, - ); - name = icons; - sourceTree = ""; - }; - CD764283161ED9A900E0B657 /* iRate */ = { - isa = PBXGroup; - children = ( - CD764285161ED9BB00E0B657 /* iRate.bundle */, - CD764286161ED9BB00E0B657 /* iRate.h */, - CD764287161ED9BB00E0B657 /* iRate.m */, - ); - name = iRate; - sourceTree = ""; - }; - CD76428A161ED9E600E0B657 /* ASIHTTPRequest */ = { - isa = PBXGroup; - children = ( - CD76428B161EDAC000E0B657 /* ASIAuthenticationDialog.h */, - CD76428C161EDAC000E0B657 /* ASIAuthenticationDialog.m */, - CD76428D161EDAC000E0B657 /* ASICacheDelegate.h */, - CD76428E161EDAC000E0B657 /* ASIDataCompressor.h */, - CD76428F161EDAC000E0B657 /* ASIDataCompressor.m */, - CD764290161EDAC000E0B657 /* ASIDataDecompressor.h */, - CD764291161EDAC000E0B657 /* ASIDataDecompressor.m */, - CD764292161EDAC000E0B657 /* ASIDownloadCache.h */, - CD764293161EDAC000E0B657 /* ASIDownloadCache.m */, - CD764294161EDAC000E0B657 /* ASIFormDataRequest.h */, - CD764295161EDAC000E0B657 /* ASIFormDataRequest.m */, - CD764296161EDAC000E0B657 /* ASIHTTPRequest.h */, - CD764297161EDAC000E0B657 /* ASIHTTPRequest.m */, - CD764298161EDAC000E0B657 /* ASIHTTPRequestConfig.h */, - CD764299161EDAC000E0B657 /* ASIHTTPRequestDelegate.h */, - CD76429A161EDAC000E0B657 /* ASIInputStream.h */, - CD76429B161EDAC000E0B657 /* ASIInputStream.m */, - CD76429C161EDAC000E0B657 /* ASINetworkQueue.h */, - CD76429D161EDAC000E0B657 /* ASINetworkQueue.m */, - CD76429E161EDAC000E0B657 /* ASIProgressDelegate.h */, - ); - name = ASIHTTPRequest; - sourceTree = ""; - }; - CD7642B7161EDFCA00E0B657 /* Utility */ = { - isa = PBXGroup; - children = ( - CDCC0B6216E0C49D00BE4481 /* WebViewController.h */, - CDCC0B6316E0C49D00BE4481 /* WebViewController.m */, - CDCC0BE816E0C66400BE4481 /* UpdateUtilities.h */, - CDCC0BE916E0C66400BE4481 /* UpdateUtilities.m */, - CDCC0BE616E0C66400BE4481 /* TransformationUtilities.h */, - CDCC0BE716E0C66400BE4481 /* TransformationUtilities.m */, - CDCC0BBB16E0C66400BE4481 /* DateUtilities.h */, - CDCC0BBC16E0C66400BE4481 /* DateUtilities.m */, - CDCC0BC116E0C66400BE4481 /* ImageManipulation.h */, - CDCC0BC216E0C66400BE4481 /* ImageManipulation.m */, - CD84B3A6162D5F140008FE7D /* InitializerService.h */, - CD84B3A7162D5F140008FE7D /* InitializerService.m */, - CD1CDE3A162C2AE400E57F73 /* CoreLocationController.h */, - CD1CDE3B162C2AE400E57F73 /* CoreLocationController.m */, - CD1CDE37162C275F00E57F73 /* CoreDataTableViewController.h */, - CD1CDE38162C275F00E57F73 /* CoreDataTableViewController.m */, - CD7642D5161EE4B800E0B657 /* PhotoAlertView.h */, - CD7642D6161EE4B800E0B657 /* PhotoAlertView.m */, - CD7642B8161EDFE400E0B657 /* Constants.h */, - CD7642B9161EDFE400E0B657 /* Constants.m */, - CD84B36D162D49180008FE7D /* PrivateConstants.h */, - CD84B36E162D49180008FE7D /* PrivateConstants.m */, - CD7642D8161EF3DD00E0B657 /* SHA1.h */, - CD7642D9161EF3DD00E0B657 /* SHA1.m */, - CD7642DB161EF45700E0B657 /* NSDictionarySerializer.h */, - CD7642DC161EF45700E0B657 /* NSDictionarySerializer.m */, - CD7642DE161EF4F400E0B657 /* ContentTypeUtilities.h */, - CD7642DF161EF4F400E0B657 /* ContentTypeUtilities.m */, - CD84B3A3162D58330008FE7D /* PhotoSHKConfigurator.h */, - CD84B3A4162D58330008FE7D /* PhotoSHKConfigurator.m */, - CD30D5F916304202001A0CA0 /* AssetsLibraryUtilities.h */, - CD30D5FA16304202001A0CA0 /* AssetsLibraryUtilities.m */, - CDC7AE8E163EC7D700FC8BC1 /* DisplayUtilities.h */, - CDC7AE8F163EC7D700FC8BC1 /* DisplayUtilities.m */, - CDF2F10B16E5305800D309B9 /* Reachability.h */, - CDF2F10C16E5305800D309B9 /* Reachability.m */, - CD9380911794050300C09B9D /* KeychainItemWrapper.h */, - CD9380921794050300C09B9D /* KeychainItemWrapper.m */, - ); - name = Utility; - sourceTree = ""; - }; - CD8D9CBF1623446B00A76811 /* TSAlertView */ = { - isa = PBXGroup; - children = ( - CD91157416234A820099204B /* TSAlertView.h */, - CD91157516234A820099204B /* TSAlertView.m */, - CD91157616234A820099204B /* TSAlertViewBackground.png */, - CD91157716234A820099204B /* TSAlertViewBackground2.png */, - CD91157816234A820099204B /* TSAlertViewButtonBackground_Highlighted.png */, - CD91157916234A820099204B /* TSAlertViewButtonBackground.png */, - CD91157A16234A820099204B /* TSAlertViewCancelButtonBackground.png */, - CD91157B16234A820099204B /* TSAlertViewMessageListViewShadow.png */, - ); - name = TSAlertView; - sourceTree = ""; - }; - CD8D9CC1162344A700A76811 /* MBProgressHUD */ = { - isa = PBXGroup; - children = ( - CD91157116234A5A0099204B /* MBProgressHUD.h */, - CD91157216234A5A0099204B /* MBProgressHUD.m */, - ); - name = MBProgressHUD; - sourceTree = ""; - }; - CD9115BA16243FB10099204B /* Album */ = { - isa = PBXGroup; - children = ( - CD9115BB16243FCA0099204B /* Album.h */, - CD9115BC16243FCA0099204B /* Album.m */, - CD9115BE16243FE90099204B /* AlbumViewController.h */, - CD9115BF16243FE90099204B /* AlbumViewController.m */, - ); - name = Album; - sourceTree = ""; - }; - CDAC028A16EF62C700D3BB7F /* TMQuiltView */ = { - isa = PBXGroup; - children = ( - CDAC02AD16EF62EB00D3BB7F /* TMQuiltView.h */, - CDAC02AE16EF62EB00D3BB7F /* TMQuiltView.m */, - CDAC02AF16EF62EB00D3BB7F /* TMQuiltViewCell.h */, - CDAC02B016EF62EB00D3BB7F /* TMQuiltViewCell.m */, - CDAC02B116EF62EB00D3BB7F /* TMQuiltViewController.h */, - CDAC02B216EF62EB00D3BB7F /* TMQuiltViewController.m */, - ); - name = TMQuiltView; - sourceTree = ""; - }; - CDAFB9C316122262002D6E86 = { - isa = PBXGroup; - children = ( - CDF2F0F416E52A8D00D309B9 /* Entitlements.entitlements */, - CDAFB9DA16122262002D6E86 /* Trovebox */, - CDAFB9D116122262002D6E86 /* Frameworks */, - CDAFB9CF16122262002D6E86 /* Products */, - ); - sourceTree = ""; - }; - CDAFB9CF16122262002D6E86 /* Products */ = { - isa = PBXGroup; - children = ( - CDAFB9CE16122262002D6E86 /* Trovebox.app */, - ); - name = Products; - sourceTree = ""; - }; - CDAFB9D116122262002D6E86 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 03184974171146E6009C9214 /* CoreVideo.framework */, - 03184972171146E0009C9214 /* CoreMedia.framework */, - 03184970171146B2009C9214 /* AVFoundation.framework */, - 03EEFF6517114253008D2FDA /* GPUImage */, - 03EEFF5117113FC7008D2FDA /* DLCImagePickerController */, - CDBD38D316F868F1007D0CC6 /* Crashlytics.framework */, - CDAC028A16EF62C700D3BB7F /* TMQuiltView */, - CD2F159116E600C8004D22FD /* ShareKit */, - CDF2F07C16E520AB00D309B9 /* SBJson */, - CDCC0C6516E0FD6300BE4481 /* InAppSettingsKit */, - CD2FE8E01639837D0032105A /* Google Analytics SDK */, - CD1CDE3D162C2B4B00E57F73 /* SDWebImage */, - CD8D9CC1162344A700A76811 /* MBProgressHUD */, - CD8D9CBF1623446B00A76811 /* TSAlertView */, - CD76428A161ED9E600E0B657 /* ASIHTTPRequest */, - CD764283161ED9A900E0B657 /* iRate */, - CDEC2560161C39E10062E9B0 /* ViewDeck */, - CDF2F10516E52DF900D309B9 /* Social.framework */, - CDF2F10316E52DDD00D309B9 /* Accounts.framework */, - CDF2F10116E52DCC00D309B9 /* AdSupport.framework */, - CD004A40161F0324006B1C6E /* CoreFoundation.framework */, - CD004A3E161F030F006B1C6E /* Twitter.framework */, - CD004A3C161F02DA006B1C6E /* CoreLocation.framework */, - CD004A3A161F02C9006B1C6E /* MessageUI.framework */, - CD004A38161F02B7006B1C6E /* Security.framework */, - CDAFB9D216122262002D6E86 /* UIKit.framework */, - CDAFB9D416122262002D6E86 /* Foundation.framework */, - CDF2F06D16E4D87A00D309B9 /* MapKit.framework */, - CDAFB9D616122262002D6E86 /* CoreGraphics.framework */, - CDAFB9D816122262002D6E86 /* CoreData.framework */, - CD1CDE50162C2D8300E57F73 /* ImageIO.framework */, - CD30D5F7163041A4001A0CA0 /* AssetsLibrary.framework */, - CD30D8581636A9DA001A0CA0 /* OpenGLES.framework */, - CD30D8561636A9CE001A0CA0 /* CoreText.framework */, - CD30D8521636A9AB001A0CA0 /* libsqlite3.0.dylib */, - CD30D8501636A98C001A0CA0 /* Accelerate.framework */, - CD7642B1161EDB9E00E0B657 /* libz.dylib */, - CD7642AF161EDB8E00E0B657 /* MobileCoreServices.framework */, - CD7642AD161EDB8300E0B657 /* SystemConfiguration.framework */, - CD7642AB161EDB7700E0B657 /* CFNetwork.framework */, - CD84B3A1162D527E0008FE7D /* QuartzCore.framework */, - CDAFB9F516122263002D6E86 /* SenTestingKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - CDAFB9DA16122262002D6E86 /* Trovebox */ = { - isa = PBXGroup; - children = ( - CD4613D2161C7A9F0028619D /* CoreData */, - CD4613D3161C7AB40028619D /* Authentication */, - CD4613DB161C7B3A0028619D /* Menu */, - CD4613D5161C7ACB0028619D /* Home & Upload Status */, - CD4613DA161C7B190028619D /* Settings */, - CD4613D9161C7B0C0028619D /* Upload */, - CD4613D7161C7AFA0028619D /* Sync */, - CD4613D6161C7AEA0028619D /* Gallery */, - CD9115BA16243FB10099204B /* Album */, - CDE0B11E1622DB1A00CB4FBC /* Tag */, - CD4613D4161C7AC00028619D /* Server */, - CD7642B7161EDFCA00E0B657 /* Utility */, - CDAFB9DB16122262002D6E86 /* Supporting Files */, - CDAFB9E316122263002D6E86 /* AppDelegate.h */, - CDAFB9E416122263002D6E86 /* AppDelegate.m */, - CDF2C4DC17EB641C006C78A9 /* Images.xcassets */, - ); - name = Trovebox; - path = Photo; - sourceTree = ""; - }; - CDAFB9DB16122262002D6E86 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - CDC3A7EB161DFAEA003FDC2E /* Localizable.strings */, - CD4613DC161C7B800028619D /* Images */, - CDAFB9DC16122262002D6E86 /* Trovebox-Info.plist */, - CDAFB9DD16122262002D6E86 /* InfoPlist.strings */, - CDAFB9E016122262002D6E86 /* main.m */, - CDAFB9E216122263002D6E86 /* Trovebox-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - CDCC0C6516E0FD6300BE4481 /* InAppSettingsKit */ = { - isa = PBXGroup; - children = ( - CDCC0CB616E1021700BE4481 /* IASKAppSettingsViewController.h */, - CDCC0CB716E1021700BE4481 /* IASKAppSettingsViewController.m */, - CDCC0CB816E1021700BE4481 /* IASKAppSettingsWebViewController.h */, - CDCC0CB916E1021700BE4481 /* IASKAppSettingsWebViewController.m */, - CDCC0CBA16E1021700BE4481 /* IASKSpecifierValuesViewController.h */, - CDCC0CBB16E1021700BE4481 /* IASKSpecifierValuesViewController.m */, - CDCC0CBF16E1022400BE4481 /* IASKSettingsReader.h */, - CDCC0CC016E1022400BE4481 /* IASKSettingsReader.m */, - CDCC0CC116E1022400BE4481 /* IASKSettingsStore.h */, - CDCC0CC216E1022400BE4481 /* IASKSettingsStore.m */, - CDCC0CC316E1022400BE4481 /* IASKSettingsStoreFile.h */, - CDCC0CC416E1022400BE4481 /* IASKSettingsStoreFile.m */, - CDCC0CC516E1022400BE4481 /* IASKSettingsStoreUserDefaults.h */, - CDCC0CC616E1022400BE4481 /* IASKSettingsStoreUserDefaults.m */, - CDCC0CC716E1022400BE4481 /* IASKSpecifier.h */, - CDCC0CC816E1022400BE4481 /* IASKSpecifier.m */, - CDCC0CCE16E1023200BE4481 /* IASKPSSliderSpecifierViewCell.h */, - CDCC0CCF16E1023200BE4481 /* IASKPSSliderSpecifierViewCell.m */, - CDCC0CD016E1023200BE4481 /* IASKPSTextFieldSpecifierViewCell.h */, - CDCC0CD116E1023200BE4481 /* IASKPSTextFieldSpecifierViewCell.m */, - CDCC0CD216E1023200BE4481 /* IASKPSTitleValueSpecifierViewCell.h */, - CDCC0CD316E1023200BE4481 /* IASKPSTitleValueSpecifierViewCell.m */, - CDCC0CD416E1023200BE4481 /* IASKPSToggleSwitchSpecifierViewCell.h */, - CDCC0CD516E1023200BE4481 /* IASKPSToggleSwitchSpecifierViewCell.m */, - CDCC0CD616E1023200BE4481 /* IASKSlider.h */, - CDCC0CD716E1023200BE4481 /* IASKSlider.m */, - CDCC0CD816E1023200BE4481 /* IASKSwitch.h */, - CDCC0CD916E1023200BE4481 /* IASKSwitch.m */, - CDCC0CDA16E1023200BE4481 /* IASKTextField.h */, - CDCC0CDB16E1023200BE4481 /* IASKTextField.m */, - CDCC0CE316E1023D00BE4481 /* IASKAppSettingsView.xib */, - CDCC0CE416E1023D00BE4481 /* IASKAppSettingsWebView.xib */, - CDCC0CE516E1023D00BE4481 /* IASKPSSliderSpecifierViewCell.xib */, - CDCC0CE616E1023D00BE4481 /* IASKPSTextFieldSpecifierViewCell.xib */, - CDCC0CE716E1023D00BE4481 /* IASKPSToggleSwitchSpecifierViewCell.xib */, - CDCC0CE816E1023D00BE4481 /* IASKSpecifierValuesView.xib */, - ); - name = InAppSettingsKit; - sourceTree = ""; - }; - CDE0B11E1622DB1A00CB4FBC /* Tag */ = { - isa = PBXGroup; - children = ( - CDFAF34B16285730007A4FDF /* Tag.h */, - CDFAF34C16285730007A4FDF /* Tag.m */, - CDFAF34D16285730007A4FDF /* TagViewController.h */, - CDFAF34E16285730007A4FDF /* TagViewController.m */, - ); - name = Tag; - path = ..; - sourceTree = ""; - }; - CDEC2560161C39E10062E9B0 /* ViewDeck */ = { - isa = PBXGroup; - children = ( - CD0DE1F7171F31360043D1DC /* IIViewDeckController.h */, - CD0DE1F8171F31360043D1DC /* IIViewDeckController.m */, - CD0DE1F9171F31360043D1DC /* WrapController.h */, - CD0DE1FA171F31360043D1DC /* WrapController.m */, - ); - name = ViewDeck; - sourceTree = ""; - }; - CDF2F07C16E520AB00D309B9 /* SBJson */ = { - isa = PBXGroup; - children = ( - CDF2F0C216E520FC00D309B9 /* SBJson.xcodeproj */, - ); - name = SBJson; - sourceTree = ""; - }; - CDF2F0C316E520FC00D309B9 /* Products */ = { - isa = PBXGroup; - children = ( - CDF2F0CA16E520FC00D309B9 /* SBJson.framework */, - CDF2F0CC16E520FC00D309B9 /* SBJsonTests.octest */, - CDF2F0CE16E520FC00D309B9 /* libsbjson-ios.a */, - CDF2F0D016E520FC00D309B9 /* sbjson-iosTests.octest */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - CDAFB9CD16122262002D6E86 /* Trovebox */ = { - isa = PBXNativeTarget; - buildConfigurationList = CDAFBA0716122263002D6E86 /* Build configuration list for PBXNativeTarget "Trovebox" */; - buildPhases = ( - CDAFB9CA16122262002D6E86 /* Sources */, - CDAFB9CB16122262002D6E86 /* Frameworks */, - CDAFB9CC16122262002D6E86 /* Resources */, - CDBD38B016F868AB007D0CC6 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - 03A1DBB51730BA9E004CEC1D /* PBXTargetDependency */, - CDD1A39B16E76E6300CDC33C /* PBXTargetDependency */, - CDA1852316E6019A00D617CB /* PBXTargetDependency */, - CDA1852516E6019A00D617CB /* PBXTargetDependency */, - CDA1852716E6019A00D617CB /* PBXTargetDependency */, - CDA1852916E6019A00D617CB /* PBXTargetDependency */, - CDA1852B16E6019A00D617CB /* PBXTargetDependency */, - CDA1852D16E6019A00D617CB /* PBXTargetDependency */, - CDA1852F16E6019A00D617CB /* PBXTargetDependency */, - ); - name = Trovebox; - productName = Photo; - productReference = CDAFB9CE16122262002D6E86 /* Trovebox.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - CDAFB9C516122262002D6E86 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0500; - ORGANIZATIONNAME = Trovebox; - TargetAttributes = { - CDAFB9CD16122262002D6E86 = { - DevelopmentTeam = 7396XV45JF; - SystemCapabilities = { - com.apple.InAppPurchase = { - enabled = 0; - }; - }; - }; - }; - }; - buildConfigurationList = CDAFB9C816122262002D6E86 /* Build configuration list for PBXProject "Trovebox" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - de, - fr, - pt, - "nl-BE", - "es-VE", - nl, - es, - ); - mainGroup = CDAFB9C316122262002D6E86; - productRefGroup = CDAFB9CF16122262002D6E86 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 03A1DBAB1730BA21004CEC1D /* Products */; - ProjectRef = 03A1DBAA1730BA21004CEC1D /* GPUImage.xcodeproj */; - }, - { - ProductGroup = CDF2F0C316E520FC00D309B9 /* Products */; - ProjectRef = CDF2F0C216E520FC00D309B9 /* SBJson.xcodeproj */; - }, - { - ProductGroup = CD1CDE3F162C2D2B00E57F73 /* Products */; - ProjectRef = CD1CDE3E162C2D2B00E57F73 /* SDWebImage.xcodeproj */; - }, - { - ProductGroup = CD2F159316E600DC004D22FD /* Products */; - ProjectRef = CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - CDAFB9CD16122262002D6E86 /* Trovebox */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 03A1DBB11730BA22004CEC1D /* libGPUImage.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libGPUImage.a; - remoteRef = 03A1DBB01730BA22004CEC1D /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 03A1DBB31730BA22004CEC1D /* GPUImageTests.octest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = GPUImageTests.octest; - remoteRef = 03A1DBB21730BA22004CEC1D /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD1CDE48162C2D2C00E57F73 /* libSDWebImage.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libSDWebImage.a; - remoteRef = CD1CDE47162C2D2C00E57F73 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD1CDE4C162C2D2C00E57F73 /* libSDWebImage+MKAnnotation.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libSDWebImage+MKAnnotation.a"; - remoteRef = CD1CDE4B162C2D2C00E57F73 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15BA16E600DC004D22FD /* ShareKitDemo.app */ = { - isa = PBXReferenceProxy; - fileType = wrapper.application; - path = ShareKitDemo.app; - remoteRef = CD2F15B916E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15BC16E600DC004D22FD /* libShareKit.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libShareKit.a; - remoteRef = CD2F15BB16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15BE16E600DC004D22FD /* ShareKit.bundle */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = ShareKit.bundle; - remoteRef = CD2F15BD16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15C016E600DC004D22FD /* libShareKitCore.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libShareKitCore.a; - remoteRef = CD2F15BF16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15C216E600DC004D22FD /* libJSONKit.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libJSONKit.a; - remoteRef = CD2F15C116E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15C416E600DC004D22FD /* libSSKeyChain.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libSSKeyChain.a; - remoteRef = CD2F15C316E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15C616E600DC004D22FD /* libOAuth.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libOAuth.a; - remoteRef = CD2F15C516E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15C816E600DC004D22FD /* libReachability.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libReachability.a; - remoteRef = CD2F15C716E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15CA16E600DC004D22FD /* libPrint.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libPrint.a; - remoteRef = CD2F15C916E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15CC16E600DC004D22FD /* libLogout.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libLogout.a; - remoteRef = CD2F15CB16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15CE16E600DC004D22FD /* libCopy.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libCopy.a; - remoteRef = CD2F15CD16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15D016E600DC004D22FD /* libEmail.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libEmail.a; - remoteRef = CD2F15CF16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15D216E600DC004D22FD /* libOpen in Safari.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libOpen in Safari.a"; - remoteRef = CD2F15D116E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15D416E600DC004D22FD /* libSave to Album.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libSave to Album.a"; - remoteRef = CD2F15D316E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15D616E600DC004D22FD /* libText Message.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libText Message.a"; - remoteRef = CD2F15D516E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15D816E600DC004D22FD /* libKippt.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libKippt.a; - remoteRef = CD2F15D716E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15DA16E600DC004D22FD /* libDelicious.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libDelicious.a; - remoteRef = CD2F15D916E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15DC16E600DC004D22FD /* libDiigo.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libDiigo.a; - remoteRef = CD2F15DB16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15DE16E600DC004D22FD /* libVKontakte.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libVKontakte.a; - remoteRef = CD2F15DD16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15E016E600DC004D22FD /* libEvernote.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libEvernote.a; - remoteRef = CD2F15DF16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15E216E600DC004D22FD /* libEvernote SDK.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libEvernote SDK.a"; - remoteRef = CD2F15E116E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15E416E600DC004D22FD /* libFacebook.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libFacebook.a; - remoteRef = CD2F15E316E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15E616E600DC004D22FD /* libFoursquareV2.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libFoursquareV2.a; - remoteRef = CD2F15E516E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15E816E600DC004D22FD /* libFlickr.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libFlickr.a; - remoteRef = CD2F15E716E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15EA16E600DC004D22FD /* libFlickr SDK.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libFlickr SDK.a"; - remoteRef = CD2F15E916E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15EC16E600DC004D22FD /* libGoogle Reader.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libGoogle Reader.a"; - remoteRef = CD2F15EB16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15EE16E600DC004D22FD /* libInstagram.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libInstagram.a; - remoteRef = CD2F15ED16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15F016E600DC004D22FD /* libInstapaper.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libInstapaper.a; - remoteRef = CD2F15EF16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15F216E600DC004D22FD /* libLinkedIn.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libLinkedIn.a; - remoteRef = CD2F15F116E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15F416E600DC004D22FD /* libPinboard.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libPinboard.a; - remoteRef = CD2F15F316E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15F616E600DC004D22FD /* libRead It Later.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libRead It Later.a"; - remoteRef = CD2F15F516E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15F816E600DC004D22FD /* libTumblr.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libTumblr.a; - remoteRef = CD2F15F716E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15FA16E600DC004D22FD /* libTwitter.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libTwitter.a; - remoteRef = CD2F15F916E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15FC16E600DC004D22FD /* libSina Weibo.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libSina Weibo.a"; - remoteRef = CD2F15FB16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CD2F15FE16E600DC004D22FD /* libReadability.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libReadability.a; - remoteRef = CD2F15FD16E600DC004D22FD /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDDF9286180378A800D5C509 /* libSDWebImage+WebP.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libSDWebImage+WebP.a"; - remoteRef = CDDF9285180378A800D5C509 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF2F0CA16E520FC00D309B9 /* SBJson.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = SBJson.framework; - remoteRef = CDF2F0C916E520FC00D309B9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF2F0CC16E520FC00D309B9 /* SBJsonTests.octest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = SBJsonTests.octest; - remoteRef = CDF2F0CB16E520FC00D309B9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF2F0CE16E520FC00D309B9 /* libsbjson-ios.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libsbjson-ios.a"; - remoteRef = CDF2F0CD16E520FC00D309B9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - CDF2F0D016E520FC00D309B9 /* sbjson-iosTests.octest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "sbjson-iosTests.octest"; - remoteRef = CDF2F0CF16E520FC00D309B9 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - CDAFB9CC16122262002D6E86 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CDAFB9DF16122262002D6E86 /* InfoPlist.strings in Resources */, - CDC3A7ED161DFAEA003FDC2E /* Localizable.strings in Resources */, - CD764288161ED9BB00E0B657 /* iRate.bundle in Resources */, - CD7642BF161EE15E00E0B657 /* AuthenticationViewController.xib in Resources */, - CD91157D16234A820099204B /* TSAlertViewBackground.png in Resources */, - CD91157E16234A820099204B /* TSAlertViewBackground2.png in Resources */, - CD91157F16234A820099204B /* TSAlertViewButtonBackground_Highlighted.png in Resources */, - CD91158016234A820099204B /* TSAlertViewButtonBackground.png in Resources */, - CD91158116234A820099204B /* TSAlertViewCancelButtonBackground.png in Resources */, - CD91158216234A820099204B /* TSAlertViewMessageListViewShadow.png in Resources */, - CDFAF34716285495007A4FDF /* NewestPhotoCell.xib in Resources */, - CDFAF34916285495007A4FDF /* UploadCell.xib in Resources */, - CD15284B1628DB8500EA08FF /* LoginViewController.xib in Resources */, - CD15284F1628DB8500EA08FF /* LoginConnectViewController.xib in Resources */, - CD30D57216303E54001A0CA0 /* ELCAssetPicker.xib in Resources */, - CD30D57416303E54001A0CA0 /* ELCImagePickerController.xib in Resources */, - CD30D57716303E54001A0CA0 /* SyncViewController.xib in Resources */, - CD30D84216369CF1001A0CA0 /* PhotoViewController.xib in Resources */, - CDC7AF39164028E100FC8BC1 /* PhotoViewController5.xib in Resources */, - CDCC0A8F16E0C23700BE4481 /* appbar_empty.png in Resources */, - CDCC0A9016E0C23700BE4481 /* appbar_empty@2x.png in Resources */, - CDCC0A9516E0C23700BE4481 /* button-disclosure-form.png in Resources */, - CDCC0A9616E0C23700BE4481 /* button-disclosure-form@2x.png in Resources */, - CDCC0A9716E0C23700BE4481 /* button-upgrade.png in Resources */, - CDCC0A9816E0C23700BE4481 /* button-upgrade@2x.png in Resources */, - CDCC0A9916E0C23700BE4481 /* button-upload-form.png in Resources */, - CDCC0A9A16E0C23700BE4481 /* button-upload-form@2x.png in Resources */, - CDCC0A9B16E0C23700BE4481 /* close_camera.png in Resources */, - CDCC0A9C16E0C23700BE4481 /* close_camera@2x.png in Resources */, - CDCC0AA216E0C23700BE4481 /* edit.png in Resources */, - CDCC0AA316E0C23700BE4481 /* edit@2x.png in Resources */, - CDCC0AA416E0C23700BE4481 /* empty_img.png in Resources */, - CDCC0AA516E0C23700BE4481 /* empty_img@2x.png in Resources */, - CDCC0AA616E0C23700BE4481 /* gallery-show-tags.png in Resources */, - CDCC0AA716E0C23700BE4481 /* gallery-show-tags@2x.png in Resources */, - CDCC0AA816E0C23700BE4481 /* home-already-uploaded.png in Resources */, - CDCC0AA916E0C23700BE4481 /* home-already-uploaded@2x.png in Resources */, - CDCC0AAA16E0C23700BE4481 /* home-brown-arrow.png in Resources */, - CDCC0AAB16E0C23700BE4481 /* home-brown-arrow@2x.png in Resources */, - CDCC0AAC16E0C23700BE4481 /* home-geo-off-sharing.png in Resources */, - CDCC0AAD16E0C23700BE4481 /* home-geo-off-sharing@2x.png in Resources */, - CDCC0AAE16E0C23700BE4481 /* home-geo-on-sharing.png in Resources */, - CDCC0AAF16E0C23700BE4481 /* home-geo-on-sharing@2x.png in Resources */, - CDCC0AB216E0C23700BE4481 /* home-private.png in Resources */, - CDCC0AB316E0C23700BE4481 /* home-private@2x.png in Resources */, - CDCC0AB416E0C23700BE4481 /* home-retry.png in Resources */, - CDCC0AB516E0C23700BE4481 /* home-retry@2x.png in Resources */, - CDCC0AB616E0C23700BE4481 /* home-upload-now.png in Resources */, - CDCC0AB716E0C23700BE4481 /* home-upload-now@2x.png in Resources */, - CDCC0AB816E0C23700BE4481 /* home-uploaded.png in Resources */, - CDCC0AB916E0C23700BE4481 /* home-uploaded@2x.png in Resources */, - CDCC0ABA16E0C23700BE4481 /* home-waiting.png in Resources */, - CD043EBC180CDF79002E0524 /* 45-movie-1@2x.png in Resources */, - CDCC0ABB16E0C23700BE4481 /* home-waiting@2x.png in Resources */, - CDCC0ABC16E0C23700BE4481 /* Icon.png in Resources */, - CDCC0ABD16E0C23700BE4481 /* Icon@2x.png in Resources */, - CDCC0ABE16E0C23700BE4481 /* login-background-568h@2x.png in Resources */, - CDCC0ABF16E0C23700BE4481 /* login-background.png in Resources */, - CDCC0AC016E0C23700BE4481 /* login-background@2x.png in Resources */, - CDCC0AC116E0C23700BE4481 /* login-create-account.png in Resources */, - CDCC0AC216E0C23700BE4481 /* login-create-account@2x.png in Resources */, - CDCC0AC316E0C23700BE4481 /* login-facebook.png in Resources */, - CDCC0AC416E0C23700BE4481 /* login-facebook@2x.png in Resources */, - CDCC0AC516E0C23700BE4481 /* login-field-background.png in Resources */, - CDCC0AC616E0C23700BE4481 /* login-field-background@2x.png in Resources */, - CDCC0AC716E0C23700BE4481 /* login-login-with.png in Resources */, - CDCC0AC816E0C23700BE4481 /* login-login-with@2x.png in Resources */, - CDCC0AC916E0C23700BE4481 /* login-login.png in Resources */, - CDCC0ACA16E0C23700BE4481 /* login-login@2x.png in Resources */, - CDCC0ACB16E0C23700BE4481 /* login-recover.png in Resources */, - CDCC0ACC16E0C23700BE4481 /* login-recover@2x.png in Resources */, - CDCC0ACD16E0C23700BE4481 /* login-signup.png in Resources */, - CDCC0ACE16E0C23700BE4481 /* login-signup@2x.png in Resources */, - CDCC0ACF16E0C23700BE4481 /* login-using-own-domain.png in Resources */, - CDCF864C18036ED3002E7A39 /* MWPhotoBrowser.bundle in Resources */, - CDCC0AD016E0C23700BE4481 /* login-using-own-domain@2x.png in Resources */, - CDCC0AD516E0C23700BE4481 /* profile-albumsico.png in Resources */, - CDCC0AD616E0C23700BE4481 /* profile-albumsico@2x.png in Resources */, - CDCC0AD716E0C23700BE4481 /* profile-button-upgrade-pro.png in Resources */, - CDCC0AD816E0C23700BE4481 /* profile-button-upgrade-pro@2x.png in Resources */, - CDCC0AD916E0C23700BE4481 /* profile-details-server-account.png in Resources */, - CDCC0ADA16E0C23700BE4481 /* profile-details-server-account@2x.png in Resources */, - CDCC0ADB16E0C23700BE4481 /* profile-line.png in Resources */, - CDCC0ADC16E0C23700BE4481 /* profile-line@2x.png in Resources */, - CDCC0ADD16E0C23700BE4481 /* profile-photosico.png in Resources */, - CDCC0ADE16E0C23700BE4481 /* profile-photosico@2x.png in Resources */, - CDCC0ADF16E0C23700BE4481 /* profile-storageico.png in Resources */, - CDCC0AE016E0C23700BE4481 /* profile-storageico@2x.png in Resources */, - CDCC0AE116E0C23700BE4481 /* profile-tagsico.png in Resources */, - CDCC0AE216E0C23700BE4481 /* profile-tagsico@2x.png in Resources */, - CDCC0AE316E0C23700BE4481 /* profilepic.png in Resources */, - CD043EBB180CDF79002E0524 /* 45-movie-1.png in Resources */, - CDCC0AE416E0C23700BE4481 /* profilepic@2x.png in Resources */, - CDCC0AE516E0C23700BE4481 /* refresh.png in Resources */, - CDCC0AE616E0C23700BE4481 /* refresh@2x.png in Resources */, - CDCC0AE716E0C23700BE4481 /* register-background-568h@2x.png in Resources */, - CDCC0AE816E0C23700BE4481 /* register-background.png in Resources */, - CDCC0AE916E0C23700BE4481 /* register-background@2x.png in Resources */, - CDCC0AEA16E0C23700BE4481 /* settingsbtn.png in Resources */, - CDCC0AEB16E0C23700BE4481 /* settingsbtn@2x.png in Resources */, - CDCC0AEC16E0C23700BE4481 /* sync-already-uploaded.png in Resources */, - CDCC0AED16E0C23700BE4481 /* sync-already-uploaded@2x.png in Resources */, - CDCC0AEE16E0C23700BE4481 /* sync-hide.png in Resources */, - CDCC0AEF16E0C23700BE4481 /* sync-hide@2x.png in Resources */, - CDCC0AF016E0C23700BE4481 /* sync-overlay.png in Resources */, - CD53E2E8180DCC4700F9DB80 /* trovebox_76.png in Resources */, - CDCC0AF116E0C23700BE4481 /* sync-overlay@2x.png in Resources */, - CDCC0AF216E0C23700BE4481 /* sync-show.png in Resources */, - CDCC0AF316E0C23700BE4481 /* sync-show@2x.png in Resources */, - CDCC0B6516E0C49D00BE4481 /* ProfileViewController.xib in Resources */, - CDCC0BEE16E0C66400BE4481 /* AuthenticationViewController5.xib in Resources */, - CDCC0BF516E0C66400BE4481 /* LoginConnectViewController5.xib in Resources */, - CDCC0BF616E0C66400BE4481 /* LoginViewController5.xib in Resources */, - CDCC0C0216E0C66400BE4481 /* Settings.bundle in Resources */, - CDCC0CE916E1023D00BE4481 /* IASKAppSettingsView.xib in Resources */, - CDCC0CEA16E1023D00BE4481 /* IASKAppSettingsWebView.xib in Resources */, - CDCC0CEB16E1023D00BE4481 /* IASKPSSliderSpecifierViewCell.xib in Resources */, - CDCC0CEC16E1023D00BE4481 /* IASKPSTextFieldSpecifierViewCell.xib in Resources */, - CDCC0CED16E1023D00BE4481 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */, - CDCC0CEE16E1023D00BE4481 /* IASKSpecifierValuesView.xib in Resources */, - CDA1856016E601F100D617CB /* ShareKit.bundle in Resources */, - CDF2F0F516E52A8D00D309B9 /* Entitlements.entitlements in Resources */, - CDA1856D16E61BC200D617CB /* button-navigation-camera.png in Resources */, - CDA1856E16E61BC200D617CB /* button-navigation-camera@2x.png in Resources */, - CD53E2E7180DCC4700F9DB80 /* trovebox_58.png in Resources */, - CDB1A9161811BD660049DF8C /* multiselection-cell-bg.png in Resources */, - CDA1856F16E61BC200D617CB /* button-navigation-menu.png in Resources */, - CDA1857016E61BC200D617CB /* button-navigation-menu@2x.png in Resources */, - CDD1A3BA16E89A2600CDC33C /* menu-album.png in Resources */, - CDD1A3BB16E89A2600CDC33C /* menu-album@2x.png in Resources */, - CDD1A3BC16E89A2600CDC33C /* menu-gallery.png in Resources */, - CDD1A3BD16E89A2600CDC33C /* menu-gallery@2x.png in Resources */, - CDD1A3BE16E89A2600CDC33C /* menu-latest.png in Resources */, - CDD1A3BF16E89A2600CDC33C /* menu-latest@2x.png in Resources */, - CDD1A3C016E89A2600CDC33C /* menu-profile.png in Resources */, - CDD1A3C116E89A2600CDC33C /* menu-profile@2x.png in Resources */, - CDD1A3C216E89A2600CDC33C /* menu-search.png in Resources */, - CDD1A3C316E89A2600CDC33C /* menu-search@2x.png in Resources */, - CDD1A3C416E89A2600CDC33C /* menu-settings.png in Resources */, - CDD1A3C516E89A2600CDC33C /* menu-settings@2x.png in Resources */, - CDD1A3C616E89A2600CDC33C /* menu-tags.png in Resources */, - CDD1A3C716E89A2600CDC33C /* menu-tags@2x.png in Resources */, - CDD1A3C816E89A2600CDC33C /* menu-upload.png in Resources */, - CDF2C4DD17EB641C006C78A9 /* Images.xcassets in Resources */, - CDD1A3C916E89A2600CDC33C /* menu-upload@2x.png in Resources */, - CD1D826E16E9213800877A8E /* MenuTableViewCell.xib in Resources */, - CD1D827016E9215600877A8E /* MenuTableViewSectionCell.xib in Resources */, - CD1D827516E9413A00877A8E /* MenuTableViewSearchCell.xib in Resources */, - CDB3B3A81705EA1C0010C38A /* home-trovebox-logo.png in Resources */, - CDB3B3A91705EA1C0010C38A /* home-trovebox-logo@2x.png in Resources */, - 0318498117114966009C9214 /* DLCImagePicker.xib in Resources */, - 0318498217114966009C9214 /* 02.acv in Resources */, - 0318498317114966009C9214 /* 06.acv in Resources */, - 0318498417114966009C9214 /* 17.acv in Resources */, - 0318498517114966009C9214 /* aqua.acv in Resources */, - 0318498617114966009C9214 /* crossprocess.acv in Resources */, - 0318498717114966009C9214 /* purple-green.acv in Resources */, - 0318498817114966009C9214 /* yellow-red.acv in Resources */, - 031849C717114990009C9214 /* 1.jpg in Resources */, - 031849C817114990009C9214 /* 10.jpg in Resources */, - 031849C917114990009C9214 /* 10@2x.jpg in Resources */, - 031849CA17114990009C9214 /* 1@2x.jpg in Resources */, - 031849CB17114990009C9214 /* 2.jpg in Resources */, - 031849CC17114990009C9214 /* 2@2x.jpg in Resources */, - 031849CD17114990009C9214 /* 3.jpg in Resources */, - 031849CE17114990009C9214 /* 3@2x.jpg in Resources */, - CD53E2EA180DCC4700F9DB80 /* trovebox_152.png in Resources */, - CDB1A93E1811C0BC0049DF8C /* MultiSiteSelectionCell.xib in Resources */, - 031849CF17114990009C9214 /* 4.jpg in Resources */, - 031849D017114990009C9214 /* 4@2x.jpg in Resources */, - 031849D117114990009C9214 /* 5.jpg in Resources */, - 031849D217114990009C9214 /* 5@2x.jpg in Resources */, - 031849D317114990009C9214 /* 6.jpg in Resources */, - 031849D417114990009C9214 /* 6@2x.jpg in Resources */, - 031849D517114990009C9214 /* 7.jpg in Resources */, - 031849D617114990009C9214 /* 7@2x.jpg in Resources */, - 031849D717114990009C9214 /* 8.jpg in Resources */, - 031849D817114990009C9214 /* 8@2x.jpg in Resources */, - 031849D917114990009C9214 /* 9.jpg in Resources */, - 031849DA17114990009C9214 /* 9@2x.jpg in Resources */, - 031849DB17114990009C9214 /* blackframe.png in Resources */, - 031849DC17114990009C9214 /* mask.png in Resources */, - 031849DD17114990009C9214 /* sample1.jpg in Resources */, - 031849DE17114990009C9214 /* blur-on.png in Resources */, - 031849DF17114990009C9214 /* blur-on@2x.png in Resources */, - 031849E017114990009C9214 /* blur.png in Resources */, - 031849E117114990009C9214 /* blur@2x.png in Resources */, - 031849E217114990009C9214 /* camera-button.png in Resources */, - 031849E317114990009C9214 /* camera-button@2x.png in Resources */, - 031849E417114990009C9214 /* camera-icon.png in Resources */, - 031849E517114990009C9214 /* camera-icon@2x.png in Resources */, - 031849E617114990009C9214 /* close.png in Resources */, - 031849E717114990009C9214 /* close@2x.png in Resources */, - 031849E817114990009C9214 /* dock_bg.png in Resources */, - 031849E917114990009C9214 /* dock_bg@2x.png in Resources */, - 031849EA17114990009C9214 /* filter-close.png in Resources */, - 031849EB17114990009C9214 /* filter-close@2x.png in Resources */, - 031849EC17114990009C9214 /* filter-open.png in Resources */, - 031849ED17114990009C9214 /* filter-open@2x.png in Resources */, - 031849EE17114990009C9214 /* filter.png in Resources */, - 031849EF17114990009C9214 /* filter@2x.png in Resources */, - 031849F017114991009C9214 /* flash-auto.png in Resources */, - 031849F117114991009C9214 /* flash-auto@2x.png in Resources */, - 031849F217114991009C9214 /* flash-off.png in Resources */, - 031849F317114991009C9214 /* flash-off@2x.png in Resources */, - 031849F417114991009C9214 /* flash.png in Resources */, - 031849F517114991009C9214 /* flash@2x.png in Resources */, - 031849F617114991009C9214 /* focus-crosshair.png in Resources */, - 031849F717114991009C9214 /* focus-crosshair@2x.png in Resources */, - 031849F817114991009C9214 /* front-camera.png in Resources */, - 031849F917114991009C9214 /* front-camera@2x.png in Resources */, - 031849FA17114991009C9214 /* library.png in Resources */, - 031849FB17114991009C9214 /* library@2x.png in Resources */, - 031849FC17114991009C9214 /* micro_carbon.png in Resources */, - 031849FD17114991009C9214 /* micro_carbon@2x.png in Resources */, - 031849FE17114991009C9214 /* photo_bar.png in Resources */, - 031849FF17114991009C9214 /* photo_bar@2x.png in Resources */, - CD31DECE17143FFA0071D3E1 /* menu-album-selected.png in Resources */, - CD31DECF17143FFA0071D3E1 /* menu-album-selected@2x.png in Resources */, - CDB1A9171811BD660049DF8C /* multiselection-cell-bg@2x.png in Resources */, - CD31DED017143FFA0071D3E1 /* menu-gallery-selected.png in Resources */, - CD31DED117143FFA0071D3E1 /* menu-gallery-selected@2x.png in Resources */, - CD31DED217143FFA0071D3E1 /* menu-latest-selected.png in Resources */, - CD31DED317143FFA0071D3E1 /* menu-latest-selected@2x.png in Resources */, - CD31DED417143FFA0071D3E1 /* menu-profile-selected.png in Resources */, - CD31DED517143FFA0071D3E1 /* menu-profile-selected@2x.png in Resources */, - CD31DED617143FFA0071D3E1 /* menu-settings-selected.png in Resources */, - CD31DED717143FFA0071D3E1 /* menu-settings-selected@2x.png in Resources */, - CD31DED817143FFA0071D3E1 /* menu-tags-selected.png in Resources */, - CD31DED917143FFA0071D3E1 /* menu-tags-selected@2x.png in Resources */, - CD31DEDA17143FFA0071D3E1 /* menu-upload-selected.png in Resources */, - CD31DEDB17143FFA0071D3E1 /* menu-upload-selected@2x.png in Resources */, - CD128354172153A800D61DB9 /* NewestPhotoCelliPad.xib in Resources */, - CD53E2E6180DCC4700F9DB80 /* trovebox_29.png in Resources */, - CD53E2E9180DCC4700F9DB80 /* trovebox_120.png in Resources */, - CD90127A172167D000BB30EF /* UploadCelliPad.xib in Resources */, - CD9013471726C66800BB30EF /* ProfileViewControlleriPad.xib in Resources */, - CDDFDA3F1729422A00D992DC /* LoginViewControlleriPad.xib in Resources */, - CDDFDA4117294A3200D992DC /* trovebox-logo-ipad.png in Resources */, - CDDFDA49172970CB00D992DC /* Default@2x.png in Resources */, - CDDFDA4B172970D300D992DC /* Default.png in Resources */, - CDDFDA4D172973D700D992DC /* Default-Portrait~ipad.png in Resources */, - CDDFDA4F172973DC00D992DC /* Default-Portrait@2x~ipad.png in Resources */, - CDDFDA51172973E100D992DC /* Default-Landscape~ipad.png in Resources */, - CDDFDA53172973E500D992DC /* Default-Landscape@2x~ipad.png in Resources */, - CDDFDA551729741000D992DC /* Default-568h@2x.png in Resources */, - CD4B593F1733CD730023C199 /* Icon-72.png in Resources */, - CD4B59401733CD730023C199 /* Icon-Small-50.png in Resources */, - CD4B59411733CD730023C199 /* Icon-Small.png in Resources */, - CD47755A17600DD7001AF36E /* button-more.png in Resources */, - CD47755B17600DD7001AF36E /* button-more@2x.png in Resources */, - CD9ECD3D17C66DC900D4585B /* video-placeholder@2x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - CDBD38B016F868AB007D0CC6 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 8; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 1; - shellPath = /bin/sh; - shellScript = "./Frameworks/Crashlytics.framework/run 263e33cba7a0a8804ec757ba8607fc77514dca33\n\nbuildPlist=${INFOPLIST_FILE}\n\n#Short version\nCFBundleShortVersionString=$(/usr/libexec/PlistBuddy -c \"Print CFBundleShortVersionString\" $buildPlist)\necho \"Version id = $CFBundleShortVersionString\"\n#CFBundleShortVersionString=`echo $CFBundleShortVersionString + \"0.1\" | bc`;\n/usr/libexec/PlistBuddy -c \"Set :CFBundleShortVersionString $CFBundleShortVersionString\" $buildPlist\n\n# incremental\nCFBundleVersion=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" $buildPlist)\nCFBundleVersion=$(($CFBundleVersion + 1))\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $CFBundleVersion\" $buildPlist\n\n#date\nCFBuildDate=$(date)\n/usr/libexec/PlistBuddy -c \"Set :CFBuildDate $CFBuildDate\" $buildPlist"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - CDAFB9CA16122262002D6E86 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CDAFB9E116122262002D6E86 /* main.m in Sources */, - CDAFB9E516122263002D6E86 /* AppDelegate.m in Sources */, - CD53E2DF180DC47300F9DB80 /* Permission.m in Sources */, - CDAFB9EE16122263002D6E86 /* Photo.xcdatamodeld in Sources */, - CDC3A7E9161DF89D003FDC2E /* MenuViewController.m in Sources */, - CD92F16716E5375200E071CB /* Reachability.m in Sources */, - CD764289161ED9BB00E0B657 /* iRate.m in Sources */, - CD76429F161EDAC000E0B657 /* ASIAuthenticationDialog.m in Sources */, - CD7642A0161EDAC000E0B657 /* ASIDataCompressor.m in Sources */, - CD7642A1161EDAC000E0B657 /* ASIDataDecompressor.m in Sources */, - CD7642A2161EDAC000E0B657 /* ASIDownloadCache.m in Sources */, - CD7642A3161EDAC000E0B657 /* ASIFormDataRequest.m in Sources */, - CD7642A4161EDAC000E0B657 /* ASIHTTPRequest.m in Sources */, - CD7642A5161EDAC000E0B657 /* ASIInputStream.m in Sources */, - CD7642A6161EDAC000E0B657 /* ASINetworkQueue.m in Sources */, - CD7642BA161EDFE400E0B657 /* Constants.m in Sources */, - CD7642BE161EE15E00E0B657 /* AuthenticationViewController.m in Sources */, - CD7642D1161EE27D00E0B657 /* AuthenticationService.m in Sources */, - CD7642D7161EE4B800E0B657 /* PhotoAlertView.m in Sources */, - CD7642DA161EF3DD00E0B657 /* SHA1.m in Sources */, - CD7642DD161EF45700E0B657 /* NSDictionarySerializer.m in Sources */, - CD7642E0161EF4F500E0B657 /* ContentTypeUtilities.m in Sources */, - CDB1A9411811C1150049DF8C /* MultiSiteSelectionCell.m in Sources */, - CD899287161F08AB00026DBB /* WebService.m in Sources */, - CD91157316234A5A0099204B /* MBProgressHUD.m in Sources */, - CD91157C16234A820099204B /* TSAlertView.m in Sources */, - CD9115BD16243FCA0099204B /* Album.m in Sources */, - CD9115C016243FE90099204B /* AlbumViewController.m in Sources */, - CDFAF34516285495007A4FDF /* HomeTableViewController.m in Sources */, - CDFAF34616285495007A4FDF /* NewestPhotoCell.m in Sources */, - CDFAF34816285495007A4FDF /* UploadCell.m in Sources */, - CD25838F17F4C24900A62574 /* UploadStatusTableViewController.m in Sources */, - CD53E2B1180D8DBA00F9DB80 /* MultiSiteSelectionViewController.m in Sources */, - CDFAF34F16285730007A4FDF /* Tag.m in Sources */, - CDFAF35016285730007A4FDF /* TagViewController.m in Sources */, - CDFAF35D16285BC6007A4FDF /* Timeline+Methods.m in Sources */, - CDFAF36016285C4E007A4FDF /* Synced+Methods.m in Sources */, - CD1528481628DB8500EA08FF /* Account.m in Sources */, - CD15284A1628DB8500EA08FF /* LoginViewController.m in Sources */, - CD15284E1628DB8500EA08FF /* LoginConnectViewController.m in Sources */, - CD1CDE39162C275F00E57F73 /* CoreDataTableViewController.m in Sources */, - CD1CDE3C162C2AE400E57F73 /* CoreLocationController.m in Sources */, - CD84B36F162D49180008FE7D /* PrivateConstants.m in Sources */, - CD84B3A5162D58330008FE7D /* PhotoSHKConfigurator.m in Sources */, - CD84B3A8162D5F150008FE7D /* InitializerService.m in Sources */, - CD30D57016303E54001A0CA0 /* ELCAsset.m in Sources */, - CD30D57116303E54001A0CA0 /* ELCAssetCell.m in Sources */, - CD30D57316303E54001A0CA0 /* ELCImagePickerController.m in Sources */, - CD30D57516303E54001A0CA0 /* SyncService.m in Sources */, - CD30D57616303E54001A0CA0 /* SyncViewController.m in Sources */, - CD30D5FB16304202001A0CA0 /* AssetsLibraryUtilities.m in Sources */, - CD30D79116317A79001A0CA0 /* JobUploaderController.m in Sources */, - CD30D79216317A79001A0CA0 /* JobUploaderDelegate.m in Sources */, - CD30D84116369CF1001A0CA0 /* PhotoViewController.m in Sources */, - CDC7AE90163EC7D700FC8BC1 /* DisplayUtilities.m in Sources */, - CDC7AEDC163EDD3A00FC8BC1 /* PrivateAuthenticationService.m in Sources */, - CDC7AF2E1640156400FC8BC1 /* GalleryViewController.m in Sources */, - CDCC0B6416E0C49D00BE4481 /* ProfileViewController.m in Sources */, - CDCF8650180371C2002E7A39 /* DACircularProgressView.m in Sources */, - CDCC0B6A16E0C49D00BE4481 /* WebViewController.m in Sources */, - CDCC0BF016E0C66400BE4481 /* DateUtilities.m in Sources */, - CDCC0BF316E0C66400BE4481 /* ImageManipulation.m in Sources */, - CDCC0BFB16E0C66400BE4481 /* OpenPhotoIASKAppSettingsViewController.m in Sources */, - CDCC0C0716E0C66400BE4481 /* TransformationUtilities.m in Sources */, - CDCC0C0816E0C66400BE4481 /* UpdateUtilities.m in Sources */, - CDCC0CBC16E1021700BE4481 /* IASKAppSettingsViewController.m in Sources */, - CDCC0CBD16E1021700BE4481 /* IASKAppSettingsWebViewController.m in Sources */, - CDCC0CBE16E1021700BE4481 /* IASKSpecifierValuesViewController.m in Sources */, - CDCC0CC916E1022400BE4481 /* IASKSettingsReader.m in Sources */, - CDCC0CCA16E1022400BE4481 /* IASKSettingsStore.m in Sources */, - CDCC0CCB16E1022400BE4481 /* IASKSettingsStoreFile.m in Sources */, - CDCC0CCC16E1022400BE4481 /* IASKSettingsStoreUserDefaults.m in Sources */, - CDCC0CCD16E1022400BE4481 /* IASKSpecifier.m in Sources */, - CDCC0CDC16E1023200BE4481 /* IASKPSSliderSpecifierViewCell.m in Sources */, - CDCC0CDD16E1023200BE4481 /* IASKPSTextFieldSpecifierViewCell.m in Sources */, - CDCC0CDE16E1023200BE4481 /* IASKPSTitleValueSpecifierViewCell.m in Sources */, - CDCC0CDF16E1023200BE4481 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */, - CDCC0CE016E1023200BE4481 /* IASKSlider.m in Sources */, - CDCC0CE116E1023200BE4481 /* IASKSwitch.m in Sources */, - CDCC0CE216E1023200BE4481 /* IASKTextField.m in Sources */, - CD1D824716E9205A00877A8E /* MenuTableViewCell.m in Sources */, - CD1D826C16E9211100877A8E /* MenuTableViewSectionCell.m in Sources */, - CD1D827316E9412800877A8E /* MenuTableViewSearchCell.m in Sources */, - CDAC02B316EF62EB00D3BB7F /* TMQuiltView.m in Sources */, - CDAC02B416EF62EB00D3BB7F /* TMQuiltViewCell.m in Sources */, - CDAC02B516EF62EB00D3BB7F /* TMQuiltViewController.m in Sources */, - CD5F5E4316F20E050044427E /* Gallery.m in Sources */, - CD1A6CDB1704811B0002763A /* TMPhotoQuiltViewCell.m in Sources */, - CD1A6D151704959E0002763A /* MWCaptionView.m in Sources */, - CD1A6D161704959E0002763A /* MWPhoto.m in Sources */, - CD1A6D181704959E0002763A /* MWPhotoBrowser.m in Sources */, - CD1A6D191704959E0002763A /* MWTapDetectingImageView.m in Sources */, - CD1A6D1A1704959E0002763A /* MWTapDetectingView.m in Sources */, - CD1A6D1B1704959E0002763A /* MWZoomingScrollView.m in Sources */, - CD014602170641C800FFE797 /* Synced.m in Sources */, - CD01462A170641C900FFE797 /* Photo.m in Sources */, - 03EEFF6117114244008D2FDA /* BlurOverlayView.m in Sources */, - 03EEFF6217114244008D2FDA /* DLCImagePickerController.m in Sources */, - CD53E2DC180D950B00F9DB80 /* Profile.m in Sources */, - 03EEFF6317114244008D2FDA /* GrayscaleContrastFilter.m in Sources */, - 03F119C817115A8A00EBBD45 /* UINavigationBar+Trovebox.m in Sources */, - CD0DE1D1171F251D0043D1DC /* Timeline.m in Sources */, - CD0DE1FB171F31360043D1DC /* IIViewDeckController.m in Sources */, - CD0DE1FC171F31360043D1DC /* WrapController.m in Sources */, - CD90127F17218B0700BB30EF /* UINavigationItem+Trovebox.m in Sources */, - CDE4A0E517642CC8002604CC /* PhotoUploader.m in Sources */, - CD9380931794050300C09B9D /* KeychainItemWrapper.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 03A1DBB51730BA9E004CEC1D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GPUImage; - targetProxy = 03A1DBB41730BA9E004CEC1D /* PBXContainerItemProxy */; - }; - CDA1852316E6019A00D617CB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Resource Bundle"; - targetProxy = CDA1852216E6019A00D617CB /* PBXContainerItemProxy */; - }; - CDA1852516E6019A00D617CB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Static Library Core"; - targetProxy = CDA1852416E6019A00D617CB /* PBXContainerItemProxy */; - }; - CDA1852716E6019A00D617CB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = JSONKit; - targetProxy = CDA1852616E6019A00D617CB /* PBXContainerItemProxy */; - }; - CDA1852916E6019A00D617CB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = OAuth; - targetProxy = CDA1852816E6019A00D617CB /* PBXContainerItemProxy */; - }; - CDA1852B16E6019A00D617CB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Email; - targetProxy = CDA1852A16E6019A00D617CB /* PBXContainerItemProxy */; - }; - CDA1852D16E6019A00D617CB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Facebook; - targetProxy = CDA1852C16E6019A00D617CB /* PBXContainerItemProxy */; - }; - CDA1852F16E6019A00D617CB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Twitter; - targetProxy = CDA1852E16E6019A00D617CB /* PBXContainerItemProxy */; - }; - CDD1A39B16E76E6300CDC33C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SSKeyChain; - targetProxy = CDD1A39A16E76E6300CDC33C /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - CDAFB9DD16122262002D6E86 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - CDAFB9DE16122262002D6E86 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - CDC3A7EB161DFAEA003FDC2E /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - CDC3A7EC161DFAEA003FDC2E /* de */, - CDC3A7EE161DFAF3003FDC2E /* en */, - CDC3A7F0161DFC37003FDC2E /* pt */, - ); - name = Localizable.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - CDAFBA0516122263002D6E86 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_EMPTY_BODY = 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_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - CDAFBA0616122263002D6E86 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - CDAFBA0816122263002D6E86 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/Frameworks\"", - "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Library/Frameworks\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Photo/Trovebox-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "\"$(TARGET_BUILD_DIR)/usr/local/lib/include\"", - "\"$(OBJROOT)/UninstalledProducts/include\"", - ); - INFOPLIST_FILE = "Photo/Trovebox-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "/Users/patrick/Projects/mobile-ios/Frameworks/Google\\ Conversion\\ Tracking\\ SDK", - "/Users/patrick/Projects/mobile-ios/Frameworks/Google\\ Analytics\\ SDK", - ); - OTHER_LDFLAGS = ( - "-all_load", - "-ObjC", - ); - PRODUCT_NAME = Trovebox; - PROVISIONING_PROFILE = "3D7B945D-E406-4D34-A304-9DFEC371170F"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "3D7B945D-E406-4D34-A304-9DFEC371170F"; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "Frameworks/**"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - CDAFBA0916122263002D6E86 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/Frameworks\"", - "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Library/Frameworks\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Photo/Trovebox-Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "\"$(TARGET_BUILD_DIR)/usr/local/lib/include\"", - "\"$(OBJROOT)/UninstalledProducts/include\"", - ); - INFOPLIST_FILE = "Photo/Trovebox-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "/Users/patrick/Projects/mobile-ios/Frameworks/Google\\ Conversion\\ Tracking\\ SDK", - "/Users/patrick/Projects/mobile-ios/Frameworks/Google\\ Analytics\\ SDK", - ); - OTHER_LDFLAGS = ( - "-all_load", - "-ObjC", - ); - PRODUCT_NAME = Trovebox; - PROVISIONING_PROFILE = "3D7B945D-E406-4D34-A304-9DFEC371170F"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "3D7B945D-E406-4D34-A304-9DFEC371170F"; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = "Frameworks/**"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - CDAFB9C816122262002D6E86 /* Build configuration list for PBXProject "Trovebox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CDAFBA0516122263002D6E86 /* Debug */, - CDAFBA0616122263002D6E86 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CDAFBA0716122263002D6E86 /* Build configuration list for PBXNativeTarget "Trovebox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CDAFBA0816122263002D6E86 /* Debug */, - CDAFBA0916122263002D6E86 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCVersionGroup section */ - CDAFB9EC16122263002D6E86 /* Photo.xcdatamodeld */ = { - isa = XCVersionGroup; - children = ( - CDAFB9ED16122263002D6E86 /* Photo.xcdatamodel */, - ); - currentVersion = CDAFB9ED16122263002D6E86 /* Photo.xcdatamodel */; - path = Photo.xcdatamodeld; - sourceTree = ""; - versionGroupType = wrapper.xcdatamodel; - }; -/* End XCVersionGroup section */ - }; - rootObject = CDAFB9C516122262002D6E86 /* Project object */; -} diff --git a/Trovebox/Images.xcassets/AppIcon.appiconset/Contents.json b/Trovebox/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 0647f48..0000000 --- a/Trovebox/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "57x57", - "scale" : "1x" - }, - { - "idiom" : "iphone", - "size" : "57x57", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "50x50", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "50x50", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "72x72", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "72x72", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Trovebox/Images.xcassets/LaunchImage.launchimage/Contents.json b/Trovebox/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 13d30b7..0000000 --- a/Trovebox/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default.png", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default@2x.png", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x.png", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default@2x.png", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default-568h@2x.png", - "minimum-system-version" : "7.0", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "Default-Landscape~ipad.png", - "extent" : "to-status-bar", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "Default-Landscape@2x~ipad.png", - "extent" : "to-status-bar", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "minimum-system-version" : "7.0", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "minimum-system-version" : "7.0", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "minimum-system-version" : "7.0", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "minimum-system-version" : "7.0", - "extent" : "full-screen", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png deleted file mode 100644 index 58a9043..0000000 Binary files a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png and /dev/null differ diff --git a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png b/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png deleted file mode 100644 index c083c1d..0000000 Binary files a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png and /dev/null differ diff --git a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png b/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png deleted file mode 100644 index a08c1f1..0000000 Binary files a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png and /dev/null differ diff --git a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default.png b/Trovebox/Images.xcassets/LaunchImage.launchimage/Default.png deleted file mode 100644 index 10115fd..0000000 Binary files a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default.png and /dev/null differ diff --git a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default@2x.png b/Trovebox/Images.xcassets/LaunchImage.launchimage/Default@2x.png deleted file mode 100644 index 4306b22..0000000 Binary files a/Trovebox/Images.xcassets/LaunchImage.launchimage/Default@2x.png and /dev/null differ