diff --git a/External/GoogleOpenSource.framework/GoogleOpenSource b/External/GoogleOpenSource.framework/GoogleOpenSource new file mode 120000 index 00000000..aaccac7a --- /dev/null +++ b/External/GoogleOpenSource.framework/GoogleOpenSource @@ -0,0 +1 @@ +Versions/Current/GoogleOpenSource \ No newline at end of file diff --git a/External/GoogleOpenSource.framework/Headers b/External/GoogleOpenSource.framework/Headers new file mode 120000 index 00000000..a177d2a6 --- /dev/null +++ b/External/GoogleOpenSource.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/External/GoogleOpenSource.framework/Versions/A/GoogleOpenSource b/External/GoogleOpenSource.framework/Versions/A/GoogleOpenSource new file mode 100644 index 00000000..794b8a77 Binary files /dev/null and b/External/GoogleOpenSource.framework/Versions/A/GoogleOpenSource differ diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBase64.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBase64.h new file mode 100644 index 00000000..fd0a0518 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBase64.h @@ -0,0 +1,25 @@ +/* Copyright (c) 2012 Google Inc. + * + * 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 + +NSData *GTLDecodeBase64(NSString *base64Str); +NSString *GTLEncodeBase64(NSData *data); + +// "Web-safe" encoding substitutes - and _ for + and / in the encoding table, +// per http://www.ietf.org/rfc/rfc4648.txt section 5. + +NSData *GTLDecodeWebSafeBase64(NSString *base64Str); +NSString *GTLEncodeWebSafeBase64(NSData *data); diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchQuery.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchQuery.h new file mode 100644 index 00000000..d4fb1d38 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchQuery.h @@ -0,0 +1,57 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLBatchQuery.h +// + +// Batch query documentation: +// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Batch_Operations + +#import "GTLQuery.h" + +@interface GTLBatchQuery : NSObject { + @private + NSMutableArray *queries_; + NSMutableDictionary *requestIDMap_; + BOOL skipAuthorization_; + NSDictionary *additionalHTTPHeaders_; + NSDictionary *urlQueryParameters_; +} + +// Queries included in this batch. Each query should have a unique requestID. +@property (retain) NSArray *queries; + +// Clients may set this to YES to disallow authorization. Defaults to NO. +@property (assign) BOOL shouldSkipAuthorization; + +// Any additional HTTP headers for this batch. +// +// These headers override the same keys from the service object's +// additionalHTTPHeaders. +@property (copy) NSDictionary *additionalHTTPHeaders; + +// Any URL query parameters to add to the query (useful for debugging with some +// services). +@property (copy) NSDictionary *urlQueryParameters; + ++ (id)batchQuery; ++ (id)batchQueryWithQueries:(NSArray *)array; + +- (void)addQuery:(GTLQuery *)query GTL_NONNULL((1)); + +- (GTLQuery *)queryForRequestID:(NSString *)requestID GTL_NONNULL((1)); + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchResult.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchResult.h new file mode 100644 index 00000000..9675aaf7 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchResult.h @@ -0,0 +1,58 @@ +/* Copyright (c) 2011 Google Inc. +* +* 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. +*/ + +// +// GTLBatchResult.h +// + +#import "GTLObject.h" + +@interface GTLBatchResult : GTLObject { + @private + NSMutableDictionary *successes_; + NSMutableDictionary *failures_; +} + +// Dictionaries of results for all queries in the batch +// +// Dictionary keys are requestID strings; objects are results or +// GTLErrorObjects. +// +// For successes with no returned object (such as from delete operations), +// the object for the dictionary entry is NSNull. +// +// +// The original query for each result is available from the service ticket, +// for example +// +// NSDictionary *successes = batchResults.successes; +// for (NSString *requestID in successes) { +// GTLObject *obj = [successes objectForKey:requestID]; +// GTLQuery *query = [ticket queryForRequestID:requestID]; +// NSLog(@"Query %@ returned object %@", query, obj); +// } +// +// NSDictionary *failures = batchResults.failures; +// for (NSString *requestID in failures) { +// GTLErrorObject *errorObj = [failures objectForKey:requestID]; +// GTLQuery *query = [ticket queryForRequestID:requestID]; +// NSLog(@"Query %@ failed with error %@", query, errorObj); +// } +// + +@property (retain) NSMutableDictionary *successes; +@property (retain) NSMutableDictionary *failures; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLDateTime.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLDateTime.h new file mode 100644 index 00000000..f6b1ffb3 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLDateTime.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2011 Google Inc. +* +* 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. +*/ + +// +// GTLDateTime.h +// +// This is an immutable class representing a date and optionally a +// time with time zone. +// + +#import +#import "GTLDefines.h" + +@interface GTLDateTime : NSObject { + NSDateComponents *dateComponents_; + NSInteger milliseconds_; // This is only for the fraction of a second 0-999 + NSInteger offsetSeconds_; // may be NSUndefinedDateComponent + BOOL isUniversalTime_; // preserves "Z" + NSTimeZone *timeZone_; // specific time zone by name, if known +} + ++ (GTLDateTime *)dateTimeWithRFC3339String:(NSString *)str; + +// timeZone may be nil if the time zone is not known. ++ (GTLDateTime *)dateTimeWithDate:(NSDate *)date timeZone:(NSTimeZone *)tz; + +// Use this method to make a dateTime for an all-day event (date only, so +// hasTime is NO.) ++ (GTLDateTime *)dateTimeForAllDayWithDate:(NSDate *)date; + ++ (GTLDateTime *)dateTimeWithDateComponents:(NSDateComponents *)date; + +@property (nonatomic, readonly) NSDate *date; +@property (nonatomic, readonly) NSCalendar *calendar; + +@property (nonatomic, readonly) NSString *RFC3339String; +@property (nonatomic, readonly) NSString *stringValue; // same as RFC3339String + +@property (nonatomic, readonly, retain) NSTimeZone *timeZone; +@property (nonatomic, readonly, copy) NSDateComponents *dateComponents; +@property (nonatomic, readonly) NSInteger milliseconds; // This is only for the fraction of a second 0-999 + +@property (nonatomic, readonly) BOOL hasTime; +@property (nonatomic, readonly) NSInteger offsetSeconds; +@property (nonatomic, readonly, getter=isUniversalTime) BOOL universalTime; + + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLDefines.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLDefines.h new file mode 100644 index 00000000..b12eb9eb --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLDefines.h @@ -0,0 +1,144 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLDefines.h +// + +// Ensure Apple's conditionals we depend on are defined. +#import +#import + +// +// The developer may choose to define these in the project: +// +// #define GTL_TARGET_NAMESPACE Xxx // preface all GTL class names with Xxx (recommended for building plug-ins) +// #define GTL_FOUNDATION_ONLY 1 // builds without AppKit or Carbon (default for iPhone builds) +// #define STRIP_GTM_FETCH_LOGGING 1 // omit http logging code (default for iPhone release builds) +// +// Mac developers may find GTL_SIMPLE_DESCRIPTIONS and STRIP_GTM_FETCH_LOGGING useful for +// reducing code size. +// + +// Define later OS versions when building on earlier versions +#ifdef MAC_OS_X_VERSION_10_0 + #ifndef MAC_OS_X_VERSION_10_6 + #define MAC_OS_X_VERSION_10_6 1060 + #endif +#endif + + +#ifdef GTL_TARGET_NAMESPACE +// prefix all GTL class names with GTL_TARGET_NAMESPACE for this target + #import "GTLTargetNamespace.h" +#endif + +// Provide a common definition for externing constants/functions +#if defined(__cplusplus) + #define GTL_EXTERN extern "C" +#else + #define GTL_EXTERN extern +#endif + +#if TARGET_OS_IPHONE // iPhone SDK + + #define GTL_IPHONE 1 + +#endif + +#if GTL_IPHONE + + #define GTL_FOUNDATION_ONLY 1 + +#endif + +// +// GTL_ASSERT is like NSAssert, but takes a variable number of arguments: +// +// GTL_ASSERT(condition, @"Problem in argument %@", argStr); +// +// GTL_DEBUG_ASSERT is similar, but compiles in only for debug builds +// + +#ifndef GTL_ASSERT + // we directly invoke the NSAssert handler so we can pass on the varargs + #if !defined(NS_BLOCK_ASSERTIONS) + #define GTL_ASSERT(condition, ...) \ + do { \ + if (!(condition)) { \ + [[NSAssertionHandler currentHandler] \ + handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__] \ + file:[NSString stringWithUTF8String:__FILE__] \ + lineNumber:__LINE__ \ + description:__VA_ARGS__]; \ + } \ + } while(0) + #else + #define GTL_ASSERT(condition, ...) do { } while (0) + #endif // !defined(NS_BLOCK_ASSERTIONS) +#endif // GTL_ASSERT + +#ifndef GTL_DEBUG_ASSERT + #if DEBUG + #define GTL_DEBUG_ASSERT(condition, ...) GTL_ASSERT(condition, __VA_ARGS__) + #else + #define GTL_DEBUG_ASSERT(condition, ...) do { } while (0) + #endif +#endif + +#ifndef GTL_DEBUG_LOG + #if DEBUG + #define GTL_DEBUG_LOG(...) NSLog(__VA_ARGS__) + #else + #define GTL_DEBUG_LOG(...) do { } while (0) + #endif +#endif + +#ifndef STRIP_GTM_FETCH_LOGGING + #if GTL_IPHONE && !DEBUG + #define STRIP_GTM_FETCH_LOGGING 1 + #else + #define STRIP_GTM_FETCH_LOGGING 0 + #endif +#endif + +// Some support for advanced clang static analysis functionality +// See http://clang-analyzer.llvm.org/annotations.html +#ifndef __has_feature // Optional. + #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#endif +#ifndef NS_RETURNS_NOT_RETAINED + #if __has_feature(attribute_ns_returns_not_retained) + #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) + #else + #define NS_RETURNS_NOT_RETAINED + #endif +#endif + +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif + +#if 1 + // We will start using nonnull declarations once the static analyzer seems + // to support it without false positives. + #define GTL_NONNULL(x) +#else + #if __has_attribute(nonnull) + #define GTL_NONNULL(x) __attribute__((nonnull x)) + #else + #define GTL_NONNULL(x) + #endif +#endif diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLErrorObject.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLErrorObject.h new file mode 100644 index 00000000..c2ec67db --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLErrorObject.h @@ -0,0 +1,45 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLErrorObject.h +// + +#import "GTLObject.h" + +@class GTLErrorObjectData; + +@interface GTLErrorObject : GTLObject +@property (retain) NSNumber *code; +@property (retain) NSString *message; +@property (retain) NSArray *data; // of GTLErrorObjectData + +// Convenience accessor for creating an NSError from a GTLErrorObject. +@property (readonly) NSError *foundationError; + +// Convenience accessor for extracting the GTLErrorObject that was used to +// create an NSError. +// +// Returns nil if the error was not originally from a GTLErrorObject. ++ (GTLErrorObject *)underlyingObjectForError:(NSError *)foundationError; + +@end + +@interface GTLErrorObjectData : GTLObject +@property (retain) NSString *domain; +@property (retain) NSString *reason; +@property (retain) NSString *message; +@property (retain) NSString *location; +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLFramework.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLFramework.h new file mode 100644 index 00000000..106f420e --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLFramework.h @@ -0,0 +1,35 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + + +#ifndef _GTLFRAMEWORK_H_ +#define _GTLFRAMEWORK_H_ + +#import + +#import "GTLDefines.h" + + +// Returns the version of the framework. Major and minor should +// match the bundle version in the Info.plist file. +// +// Pass NULL to ignore any of the parameters. + +void GTLFrameworkVersion(NSUInteger* major, NSUInteger* minor, NSUInteger* release); + +// Returns the version in @"a.b" or @"a.b.c" format +NSString *GTLFrameworkVersionString(void); + +#endif diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLJSONParser.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLJSONParser.h new file mode 100644 index 00000000..d9715295 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLJSONParser.h @@ -0,0 +1,41 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLJSONParser.h +// + +// This class is a thin wrapper around the JSON parser. It uses +// NSJSONSerialization when available, and SBJSON otherwise. + +#import + +#import "GTLDefines.h" + +@interface GTLJSONParser : NSObject ++ (NSString*)stringWithObject:(id)value + humanReadable:(BOOL)humanReadable + error:(NSError**)error; + ++ (NSData *)dataWithObject:(id)obj + humanReadable:(BOOL)humanReadable + error:(NSError**)error; + ++ (id)objectWithString:(NSString *)jsonStr + error:(NSError **)error; + ++ (id)objectWithData:(NSData *)jsonData + error:(NSError **)error; +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLObject.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLObject.h new file mode 100644 index 00000000..43935adf --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLObject.h @@ -0,0 +1,208 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLObject.h +// + +// GTLObject documentation: +// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Objects_and_Queries + +#import + +#import "GTLDefines.h" +#import "GTLUtilities.h" +#import "GTLDateTime.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTLOBJECT_DEFINE_GLOBALS +#define _EXTERN +#define _INITIALIZE_AS(x) =x +#else +#define _EXTERN extern +#define _INITIALIZE_AS(x) +#endif + +@protocol GTLCollectionProtocol +@optional +@property (retain) NSArray *items; +@end + +@protocol GTLBatchItemCreationProtocol +- (void)createItemsWithClassMap:(NSDictionary *)batchClassMap; +@end + +@interface GTLObject : NSObject { + + @private + + NSMutableDictionary *json_; + + // Used when creating the subobjects from this one. + NSDictionary *surrogates_; + + // Any complex object hung off this object goes into the cache so the + // next fetch will get the same object back instead of having to recreate + // it. + NSMutableDictionary *childCache_; + + // Anything defined by the client; retained but not used internally; not + // copied by copyWithZone: + NSMutableDictionary *userProperties_; +} + +@property (nonatomic, retain) NSMutableDictionary *JSON; +@property (nonatomic, retain) NSDictionary *surrogates; +@property (nonatomic, retain) NSMutableDictionary *userProperties; + +/////////////////////////////////////////////////////////////////////////////// +// +// Public methods +// +// These methods are intended for users of the library +// + ++ (id)object; ++ (id)objectWithJSON:(NSMutableDictionary *)dict; + +- (id)copyWithZone:(NSZone *)zone; + +- (NSString *)JSONString; + +// generic access to json; also creates it if necessary +- (void)setJSONValue:(id)obj forKey:(NSString *)key GTL_NONNULL((2)); +- (id)JSONValueForKey:(NSString *)key; + +// Returns the list of keys in this object's JSON that aren't listed as +// properties on the object. +- (NSArray *)additionalJSONKeys; + +// Any keys in the JSON that aren't listed as @properties on the object +// are counted as "additional properties". These allow you to get/set them. +- (id)additionalPropertyForName:(NSString *)name; +- (void)setAdditionalProperty:(id)obj forName:(NSString *)name GTL_NONNULL((2)); +- (NSDictionary *)additionalProperties; + +// User properties are supported for client convenience, but are not copied by +// copyWithZone. User Properties keys beginning with _ are reserved by the library. +// +// Set nil for obj to remove the property. +- (void)setProperty:(id)obj forKey:(NSString *)key GTL_NONNULL((2)); +- (id)propertyForKey:(NSString *)key GTL_NONNULL((1)); + +// userData is stored as a property with key "_userData" +- (void)setUserData:(id)obj; +- (id)userData; + +// Makes a partial query-compatible string describing the fields present +// in this object. (Note: only the first element of any array is examined.) +// +// http://code.google.com/apis/tasks/v1/performance.html#partial +// +- (NSString *)fieldsDescription; + +// Makes an object containing only the changes needed to do a partial update +// (patch), where the patch would be to change an object from the original +// to the receiver, such as +// +// GTLSomeObject *patchObject = [newVersion patchObjectFromOriginal:oldVersion]; +// +// http://code.google.com/apis/tasks/v1/performance.html#patch +// +// NOTE: this method returns nil if there are no changes between the original +// and the receiver. +- (id)patchObjectFromOriginal:(GTLObject *)original; + +// Method creating a null value to set object properties for patch queries that +// delete fields. Do not use this except when setting an object property for +// a patch query. ++ (id)nullValue; + +/////////////////////////////////////////////////////////////////////////////// +// +// Protected methods +// +// These methods are intended for subclasses of GTLObject +// + +// class registration ("kind" strings) for subclasses ++ (Class)registeredObjectClassForKind:(NSString *)kind; ++ (void)registerObjectClassForKind:(NSString *)kind; + +// creation of objects from a JSON dictionary ++ (GTLObject *)objectForJSON:(NSMutableDictionary *)json + defaultClass:(Class)defaultClass + surrogates:(NSDictionary *)surrogates + batchClassMap:(NSDictionary *)batchClassMap; + +// property-to-key mapping (for JSON keys which are not used as method names) ++ (NSDictionary *)propertyToJSONKeyMap; + +// property-to-Class mapping for array properties (to say what is in the array) ++ (NSDictionary *)arrayPropertyToClassMap; + +// The default class for additional JSON keys ++ (Class)classForAdditionalProperties; + +@end + +// Collection objects with an "items" property should derive from GTLCollection +// object. This provides support for fast object enumeration, the +// itemAtIndex: convenience method, and indexed subscripts. +// +// Subclasses must implement the items method dynamically. +@interface GTLCollectionObject : GTLObject { + @private + NSDictionary *identifierMap_; +} + +// itemAtIndex: and objectAtIndexedSubscript: return nil when the index exceeds +// the bounds of the items array. +- (id)itemAtIndex:(NSUInteger)idx; + +- (id)objectAtIndexedSubscript:(NSInteger)idx; + +// itemForIdentifier: looks up items from the collection object by identifier, +// and returns the first one. +// +// Typically, items will have a unique identifier (with key "id" in the +// object's JSON). This method returns the first item found in the collection +// with the specified identifier. +// +// The first time this method is used, the collection will cache a map of +// identifiers to items. If the items list for the instance somehow changes, +// use the reset method below to force a new cache to be created for this +// collection. +- (id)itemForIdentifier:(NSString *)key GTL_NONNULL((1)); + +// Identifiers for all items are cached when the first one is obtained. +// This method resets the cache. It is needed only if the item list has +// changed. +- (void)resetIdentifierMap; + +@end + +@interface GTLCollectionObject (DynamicMethods) +- (NSArray *)items; +@end + +// Base object use for when an service method directly returns an array instead +// of an object. Normally methods should return an object with an 'items' +// property, but this exists for the methods not up to spec. +@interface GTLResultArray : GTLCollectionObject +// This method should only be called by subclasses. +- (NSArray *)itemsWithItemClass:(Class)itemClass; +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlus.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlus.h new file mode 100644 index 00000000..220410bb --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlus.h @@ -0,0 +1,44 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlus.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ + +#import "GTLPlusConstants.h" + +#import "GTLPlusAcl.h" +#import "GTLPlusAclentryResource.h" +#import "GTLPlusActivity.h" +#import "GTLPlusActivityFeed.h" +#import "GTLPlusComment.h" +#import "GTLPlusCommentFeed.h" +#import "GTLPlusItemScope.h" +#import "GTLPlusMoment.h" +#import "GTLPlusMomentsFeed.h" +#import "GTLPlusPeopleFeed.h" +#import "GTLPlusPerson.h" + +#import "GTLQueryPlus.h" +#import "GTLServicePlus.h" diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAcl.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAcl.h new file mode 100644 index 00000000..aad4f65e --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAcl.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusAcl.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusAcl (0 custom class methods, 3 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusAclentryResource; + +// ---------------------------------------------------------------------------- +// +// GTLPlusAcl +// + +// This class supports NSFastEnumeration over its "items" property. It also +// supports -itemAtIndex: to retrieve individual objects from "items". + +@interface GTLPlusAcl : GTLCollectionObject + +// Description of the access granted, suitable for display. +// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. +@property (copy) NSString *descriptionProperty; + +// The list of access entries. +@property (retain) NSArray *items; // of GTLPlusAclentryResource + +// Identifies this resource as a collection of access controls. Value: +// "plus#acl". +@property (copy) NSString *kind; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAclentryResource.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAclentryResource.h new file mode 100644 index 00000000..30634e8d --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAclentryResource.h @@ -0,0 +1,61 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusAclentryResource.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusAclentryResource (0 custom class methods, 3 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +// ---------------------------------------------------------------------------- +// +// GTLPlusAclentryResource +// + +@interface GTLPlusAclentryResource : GTLObject + +// A descriptive name for this entry. Suitable for display. +@property (copy) NSString *displayName; + +// The ID of the entry. For entries of type "person" or "circle", this is the ID +// of the resource. For other types, this property is not set. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The type of entry describing to whom access is granted. Possible values are: +// - "person" - Access to an individual. +// - "circle" - Access to members of a circle. +// - "myCircles" - Access to members of all the person's circles. +// - "extendedCircles" - Access to members of everyone in a person's circles, +// plus all of the people in their circles. +// - "public" - Access to anyone on the web. +@property (copy) NSString *type; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivity.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivity.h new file mode 100644 index 00000000..ce4b9417 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivity.h @@ -0,0 +1,493 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusActivity.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusActivity (0 custom class methods, 19 custom properties) +// GTLPlusActivityActor (0 custom class methods, 5 custom properties) +// GTLPlusActivityObject (0 custom class methods, 10 custom properties) +// GTLPlusActivityProvider (0 custom class methods, 1 custom properties) +// GTLPlusActivityActorImage (0 custom class methods, 1 custom properties) +// GTLPlusActivityActorName (0 custom class methods, 2 custom properties) +// GTLPlusActivityObjectActor (0 custom class methods, 4 custom properties) +// GTLPlusActivityObjectAttachmentsItem (0 custom class methods, 9 custom properties) +// GTLPlusActivityObjectPlusoners (0 custom class methods, 2 custom properties) +// GTLPlusActivityObjectReplies (0 custom class methods, 2 custom properties) +// GTLPlusActivityObjectResharers (0 custom class methods, 2 custom properties) +// GTLPlusActivityObjectActorImage (0 custom class methods, 1 custom properties) +// GTLPlusActivityObjectAttachmentsItemEmbed (0 custom class methods, 2 custom properties) +// GTLPlusActivityObjectAttachmentsItemFullImage (0 custom class methods, 4 custom properties) +// GTLPlusActivityObjectAttachmentsItemImage (0 custom class methods, 4 custom properties) +// GTLPlusActivityObjectAttachmentsItemThumbnailsItem (0 custom class methods, 3 custom properties) +// GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage (0 custom class methods, 4 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusAcl; +@class GTLPlusActivityActor; +@class GTLPlusActivityActorImage; +@class GTLPlusActivityActorName; +@class GTLPlusActivityObject; +@class GTLPlusActivityObjectActor; +@class GTLPlusActivityObjectActorImage; +@class GTLPlusActivityObjectAttachmentsItem; +@class GTLPlusActivityObjectAttachmentsItemEmbed; +@class GTLPlusActivityObjectAttachmentsItemFullImage; +@class GTLPlusActivityObjectAttachmentsItemImage; +@class GTLPlusActivityObjectAttachmentsItemThumbnailsItem; +@class GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage; +@class GTLPlusActivityObjectPlusoners; +@class GTLPlusActivityObjectReplies; +@class GTLPlusActivityObjectResharers; +@class GTLPlusActivityProvider; + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivity +// + +@interface GTLPlusActivity : GTLObject + +// Identifies who has access to see this activity. +@property (retain) GTLPlusAcl *access; + +// The person who performed this activity. +@property (retain) GTLPlusActivityActor *actor; + +// Street address where this activity occurred. +@property (copy) NSString *address; + +// Additional content added by the person who shared this activity, applicable +// only when resharing an activity. +@property (copy) NSString *annotation; + +// If this activity is a crosspost from another system, this property specifies +// the ID of the original activity. +@property (copy) NSString *crosspostSource; + +// ETag of this response for caching purposes. +@property (copy) NSString *ETag; + +// Latitude and longitude where this activity occurred. Format is latitude +// followed by longitude, space separated. +@property (copy) NSString *geocode; + +// The ID of this activity. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// Identifies this resource as an activity. Value: "plus#activity". +@property (copy) NSString *kind; + +// The object of this activity. +@property (retain) GTLPlusActivityObject *object; + +// ID of the place where this activity occurred. +@property (copy) NSString *placeId; + +// Name of the place where this activity occurred. +@property (copy) NSString *placeName; + +// The service provider that initially published this activity. +@property (retain) GTLPlusActivityProvider *provider; + +// The time at which this activity was initially published. Formatted as an RFC +// 3339 timestamp. +@property (retain) GTLDateTime *published; + +// Radius, in meters, of the region where this activity occurred, centered at +// the latitude and longitude identified in geocode. +@property (copy) NSString *radius; + +// Title of this activity. +@property (copy) NSString *title; + +// The time at which this activity was last updated. Formatted as an RFC 3339 +// timestamp. +@property (retain) GTLDateTime *updated; + +// The link to this activity. +@property (copy) NSString *url; + +// This activity's verb, indicating what action was performed. Possible values +// are: +// - "post" - Publish content to the stream. +// - "share" - Reshare an activity. +@property (copy) NSString *verb; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityActor +// + +@interface GTLPlusActivityActor : GTLObject + +// The name of the actor, suitable for display. +@property (copy) NSString *displayName; + +// The ID of the actor's person resource. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The image representation of the actor. +@property (retain) GTLPlusActivityActorImage *image; + +// An object representation of the individual components of name. +@property (retain) GTLPlusActivityActorName *name; + +// The link to the actor's Google profile. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObject +// + +@interface GTLPlusActivityObject : GTLObject + +// If this activity's object is itself another activity (for example, when a +// person reshares an activity), this property specifies the original activity's +// actor. +@property (retain) GTLPlusActivityObjectActor *actor; + +// The media objects attached to this activity. +@property (retain) NSArray *attachments; // of GTLPlusActivityObjectAttachmentsItem + +// The HTML-formatted content, suitable for display. +@property (copy) NSString *content; + +// The ID of the object. When resharing an activity, this is the ID of the +// activity being reshared. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The type of the object. Possible values are: +// - "note" - Textual content. +// - "activity" - A Google+ activity. +@property (copy) NSString *objectType; + +// The content (text) as provided by the author, stored without any HTML +// formatting. When creating or updating an activity, this value must be +// supplied as plain text in the request. +@property (copy) NSString *originalContent; + +// People who +1'd this activity. +@property (retain) GTLPlusActivityObjectPlusoners *plusoners; + +// Comments in reply to this activity. +@property (retain) GTLPlusActivityObjectReplies *replies; + +// People who reshared this activity. +@property (retain) GTLPlusActivityObjectResharers *resharers; + +// The URL that points to the linked resource. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityProvider +// + +@interface GTLPlusActivityProvider : GTLObject + +// Name of the service provider. +@property (copy) NSString *title; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityActorImage +// + +@interface GTLPlusActivityActorImage : GTLObject + +// The URL of the actor's profile photo. To re-size the image and crop it to a +// square, append the query string ?sz=x, where x is the dimension in pixels of +// each side. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityActorName +// + +@interface GTLPlusActivityActorName : GTLObject + +// The family name (last name) of the actor. +@property (copy) NSString *familyName; + +// The given name (first name) of the actor. +@property (copy) NSString *givenName; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectActor +// + +@interface GTLPlusActivityObjectActor : GTLObject + +// The original actor's name, suitable for display. +@property (copy) NSString *displayName; + +// ID of the original actor. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The image representation of the original actor. +@property (retain) GTLPlusActivityObjectActorImage *image; + +// A link to the original actor's Google profile. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectAttachmentsItem +// + +@interface GTLPlusActivityObjectAttachmentsItem : GTLObject + +// If the attachment is an article, this property contains a snippet of text +// from the article. It can also include descriptions for other types. +@property (copy) NSString *content; + +// The title of the attachment (such as a photo caption or an article title). +@property (copy) NSString *displayName; + +// If the attachment is a video, the embeddable link. +@property (retain) GTLPlusActivityObjectAttachmentsItemEmbed *embed; + +// The full image URL for photo attachments. +@property (retain) GTLPlusActivityObjectAttachmentsItemFullImage *fullImage; + +// The ID of the attachment. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The preview image for photos or videos. +@property (retain) GTLPlusActivityObjectAttachmentsItemImage *image; + +// The type of media object. Possible values are: +// - "photo" - A photo. +// - "album" - A photo album. +// - "video" - A video. +// - "article" - An article, specified by a link. +@property (copy) NSString *objectType; + +// If the attachment is an album, potential additional thumbnails from the +// album. +@property (retain) NSArray *thumbnails; // of GTLPlusActivityObjectAttachmentsItemThumbnailsItem + +// The link to the attachment, should be of type text/html. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectPlusoners +// + +@interface GTLPlusActivityObjectPlusoners : GTLObject + +// The URL for the collection of people who +1'd this activity. +@property (copy) NSString *selfLink; + +// Total number of people who +1'd this activity. +@property (retain) NSNumber *totalItems; // unsignedIntValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectReplies +// + +@interface GTLPlusActivityObjectReplies : GTLObject + +// The URL for the collection of comments in reply to this activity. +@property (copy) NSString *selfLink; + +// Total number of comments on this activity. +@property (retain) NSNumber *totalItems; // unsignedIntValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectResharers +// + +@interface GTLPlusActivityObjectResharers : GTLObject + +// The URL for the collection of resharers. +@property (copy) NSString *selfLink; + +// Total number of people who reshared this activity. +@property (retain) NSNumber *totalItems; // unsignedIntValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectActorImage +// + +@interface GTLPlusActivityObjectActorImage : GTLObject + +// A URL that points to a thumbnail photo of the original actor. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectAttachmentsItemEmbed +// + +@interface GTLPlusActivityObjectAttachmentsItemEmbed : GTLObject + +// Media type of the link. +@property (copy) NSString *type; + +// URL of the link. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectAttachmentsItemFullImage +// + +@interface GTLPlusActivityObjectAttachmentsItemFullImage : GTLObject + +// The height, in pixels, of the linked resource. +@property (retain) NSNumber *height; // unsignedIntValue + +// Media type of the link. +@property (copy) NSString *type; + +// URL to the image. +@property (copy) NSString *url; + +// The width, in pixels, of the linked resource. +@property (retain) NSNumber *width; // unsignedIntValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectAttachmentsItemImage +// + +@interface GTLPlusActivityObjectAttachmentsItemImage : GTLObject + +// The height, in pixels, of the linked resource. +@property (retain) NSNumber *height; // unsignedIntValue + +// Media type of the link. +@property (copy) NSString *type; + +// Image url. +@property (copy) NSString *url; + +// The width, in pixels, of the linked resource. +@property (retain) NSNumber *width; // unsignedIntValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectAttachmentsItemThumbnailsItem +// + +@interface GTLPlusActivityObjectAttachmentsItemThumbnailsItem : GTLObject + +// Potential name of the thumbnail. +// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. +@property (copy) NSString *descriptionProperty; + +// Image resource. +@property (retain) GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage *image; + +// URL to the webpage containing the image. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage +// + +@interface GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage : GTLObject + +// The height, in pixels, of the linked resource. +@property (retain) NSNumber *height; // unsignedIntValue + +// Media type of the link. +@property (copy) NSString *type; + +// Image url. +@property (copy) NSString *url; + +// The width, in pixels, of the linked resource. +@property (retain) NSNumber *width; // unsignedIntValue + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivityFeed.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivityFeed.h new file mode 100644 index 00000000..f99ca32f --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivityFeed.h @@ -0,0 +1,81 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusActivityFeed.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusActivityFeed (0 custom class methods, 9 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusActivity; + +// ---------------------------------------------------------------------------- +// +// GTLPlusActivityFeed +// + +// This class supports NSFastEnumeration over its "items" property. It also +// supports -itemAtIndex: to retrieve individual objects from "items". + +@interface GTLPlusActivityFeed : GTLCollectionObject + +// ETag of this response for caching purposes. +@property (copy) NSString *ETag; + +// The ID of this collection of activities. Deprecated. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The activities in this page of results. +@property (retain) NSArray *items; // of GTLPlusActivity + +// Identifies this resource as a collection of activities. Value: +// "plus#activityFeed". +@property (copy) NSString *kind; + +// Link to the next page of activities. +@property (copy) NSString *nextLink; + +// The continuation token, which is used to page through large result sets. +// Provide this value in a subsequent request to return the next page of +// results. +@property (copy) NSString *nextPageToken; + +// Link to this activity resource. +@property (copy) NSString *selfLink; + +// The title of this collection of activities. +@property (copy) NSString *title; + +// The time at which this collection of activities was last updated. Formatted +// as an RFC 3339 timestamp. +@property (retain) GTLDateTime *updated; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusComment.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusComment.h new file mode 100644 index 00000000..4698576a --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusComment.h @@ -0,0 +1,183 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusComment.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusComment (0 custom class methods, 11 custom properties) +// GTLPlusCommentActor (0 custom class methods, 4 custom properties) +// GTLPlusCommentInReplyToItem (0 custom class methods, 2 custom properties) +// GTLPlusCommentObject (0 custom class methods, 3 custom properties) +// GTLPlusCommentPlusoners (0 custom class methods, 1 custom properties) +// GTLPlusCommentActorImage (0 custom class methods, 1 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusCommentActor; +@class GTLPlusCommentActorImage; +@class GTLPlusCommentInReplyToItem; +@class GTLPlusCommentObject; +@class GTLPlusCommentPlusoners; + +// ---------------------------------------------------------------------------- +// +// GTLPlusComment +// + +@interface GTLPlusComment : GTLObject + +// The person who posted this comment. +@property (retain) GTLPlusCommentActor *actor; + +// ETag of this response for caching purposes. +@property (copy) NSString *ETag; + +// The ID of this comment. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The activity this comment replied to. +@property (retain) NSArray *inReplyTo; // of GTLPlusCommentInReplyToItem + +// Identifies this resource as a comment. Value: "plus#comment". +@property (copy) NSString *kind; + +// The object of this comment. +@property (retain) GTLPlusCommentObject *object; + +// People who +1'd this comment. +@property (retain) GTLPlusCommentPlusoners *plusoners; + +// The time at which this comment was initially published. Formatted as an RFC +// 3339 timestamp. +@property (retain) GTLDateTime *published; + +// Link to this comment resource. +@property (copy) NSString *selfLink; + +// The time at which this comment was last updated. Formatted as an RFC 3339 +// timestamp. +@property (retain) GTLDateTime *updated; + +// This comment's verb, indicating what action was performed. Possible values +// are: +// - "post" - Publish content to the stream. +@property (copy) NSString *verb; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusCommentActor +// + +@interface GTLPlusCommentActor : GTLObject + +// The name of this actor, suitable for display. +@property (copy) NSString *displayName; + +// The ID of the actor. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The image representation of this actor. +@property (retain) GTLPlusCommentActorImage *image; + +// A link to the person resource for this actor. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusCommentInReplyToItem +// + +@interface GTLPlusCommentInReplyToItem : GTLObject + +// The ID of the activity. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The URL of the activity. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusCommentObject +// + +@interface GTLPlusCommentObject : GTLObject + +// The HTML-formatted content, suitable for display. +@property (copy) NSString *content; + +// The object type of this comment. Possible values are: +// - "comment" - A comment in reply to an activity. +@property (copy) NSString *objectType; + +// The content (text) as provided by the author, stored without any HTML +// formatting. When creating or updating a comment, this value must be supplied +// as plain text in the request. +@property (copy) NSString *originalContent; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusCommentPlusoners +// + +@interface GTLPlusCommentPlusoners : GTLObject + +// Total number of people who +1'd this comment. +@property (retain) NSNumber *totalItems; // unsignedIntValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusCommentActorImage +// + +@interface GTLPlusCommentActorImage : GTLObject + +// The URL of the actor's profile photo. To re-size the image and crop it to a +// square, append the query string ?sz=x, where x is the dimension in pixels of +// each side. +@property (copy) NSString *url; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusCommentFeed.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusCommentFeed.h new file mode 100644 index 00000000..74f9be5a --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusCommentFeed.h @@ -0,0 +1,78 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusCommentFeed.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusCommentFeed (0 custom class methods, 8 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusComment; + +// ---------------------------------------------------------------------------- +// +// GTLPlusCommentFeed +// + +// This class supports NSFastEnumeration over its "items" property. It also +// supports -itemAtIndex: to retrieve individual objects from "items". + +@interface GTLPlusCommentFeed : GTLCollectionObject + +// ETag of this response for caching purposes. +@property (copy) NSString *ETag; + +// The ID of this collection of comments. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The comments in this page of results. +@property (retain) NSArray *items; // of GTLPlusComment + +// Identifies this resource as a collection of comments. Value: +// "plus#commentFeed". +@property (copy) NSString *kind; + +// Link to the next page of activities. +@property (copy) NSString *nextLink; + +// The continuation token, which is used to page through large result sets. +// Provide this value in a subsequent request to return the next page of +// results. +@property (copy) NSString *nextPageToken; + +// The title of this collection of comments. +@property (copy) NSString *title; + +// The time at which this collection of comments was last updated. Formatted as +// an RFC 3339 timestamp. +@property (retain) GTLDateTime *updated; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusConstants.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusConstants.h new file mode 100644 index 00000000..b5e87ad7 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusConstants.h @@ -0,0 +1,57 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusConstants.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ + +#import + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLDefines.h" +#else + #import "GTLDefines.h" +#endif + +// Authorization scope +// Know your name, basic info, and list of people you're connected to on Google+ +GTL_EXTERN NSString * const kGTLAuthScopePlusLogin; // "https://www.googleapis.com/auth/plus.login" +// Know who you are on Google +GTL_EXTERN NSString * const kGTLAuthScopePlusMe; // "https://www.googleapis.com/auth/plus.me" + +// Collection +GTL_EXTERN NSString * const kGTLPlusCollectionPlusoners; // "plusoners" +GTL_EXTERN NSString * const kGTLPlusCollectionPublic; // "public" +GTL_EXTERN NSString * const kGTLPlusCollectionResharers; // "resharers" +GTL_EXTERN NSString * const kGTLPlusCollectionVault; // "vault" +GTL_EXTERN NSString * const kGTLPlusCollectionVisible; // "visible" + +// OrderBy +GTL_EXTERN NSString * const kGTLPlusOrderByAlphabetical; // "alphabetical" +GTL_EXTERN NSString * const kGTLPlusOrderByBest; // "best" +GTL_EXTERN NSString * const kGTLPlusOrderByRecent; // "recent" + +// SortOrder +GTL_EXTERN NSString * const kGTLPlusSortOrderAscending; // "ascending" +GTL_EXTERN NSString * const kGTLPlusSortOrderDescending; // "descending" diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusItemScope.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusItemScope.h new file mode 100644 index 00000000..17e2b371 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusItemScope.h @@ -0,0 +1,225 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusItemScope.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusItemScope (0 custom class methods, 55 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusItemScope; + +// ---------------------------------------------------------------------------- +// +// GTLPlusItemScope +// + +@interface GTLPlusItemScope : GTLObject + +// The subject matter of the content. +@property (retain) GTLPlusItemScope *about; + +// An additional name for a Person, can be used for a middle name. +@property (retain) NSArray *additionalName; // of NSString + +// Postal address. +@property (retain) GTLPlusItemScope *address; + +// Address country. +@property (copy) NSString *addressCountry; + +// Address locality. +@property (copy) NSString *addressLocality; + +// Address region. +@property (copy) NSString *addressRegion; + +// The encoding. +@property (retain) NSArray *associatedMedia; // of GTLPlusItemScope + +// Number of attendees. +@property (retain) NSNumber *attendeeCount; // intValue + +// A person attending the event. +@property (retain) NSArray *attendees; // of GTLPlusItemScope + +// From http://schema.org/MusicRecording, the audio file. +@property (retain) GTLPlusItemScope *audio; + +// The person who created this scope. +@property (retain) NSArray *author; // of GTLPlusItemScope + +// Best possible rating value. +@property (copy) NSString *bestRating; + +// Date of birth. +@property (copy) NSString *birthDate; + +// From http://schema.org/MusicRecording, the artist that performed this +// recording. +@property (retain) GTLPlusItemScope *byArtist; + +// The caption for this object. +@property (copy) NSString *caption; + +// File size in (mega/kilo) bytes. +@property (copy) NSString *contentSize; + +// Actual bytes of the media object, for example the image file or video file. +@property (copy) NSString *contentUrl; + +// The list of contributors for this scope. +@property (retain) NSArray *contributor; // of GTLPlusItemScope + +// The date this scope was created. +@property (copy) NSString *dateCreated; + +// The date this scope was last modified. +@property (copy) NSString *dateModified; + +// The initial date this scope was published. +@property (copy) NSString *datePublished; + +// The string describing the content of this scope. +// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. +@property (copy) NSString *descriptionProperty; + +// The duration of the item (movie, audio recording, event, etc.) in ISO 8601 +// date format. +@property (copy) NSString *duration; + +// A URL pointing to a player for a specific video. In general, this is the +// information in the src element of an embed tag and should not be the same as +// the content of the loc tag. +@property (copy) NSString *embedUrl; + +// The end date and time of the event (in ISO 8601 date format). +@property (copy) NSString *endDate; + +// Family name. In the U.S., the last name of an Person. This can be used along +// with givenName instead of the Name property. +@property (copy) NSString *familyName; + +// Gender of the person. +@property (copy) NSString *gender; + +// Geo coordinates. +@property (retain) GTLPlusItemScope *geo; + +// Given name. In the U.S., the first name of a Person. This can be used along +// with familyName instead of the Name property. +@property (copy) NSString *givenName; + +// The height of the media object. +@property (copy) NSString *height; + +// The id for this item scope. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// A url to the image for this scope. +@property (copy) NSString *image; + +// From http://schema.org/MusicRecording, which album a song is in. +@property (retain) GTLPlusItemScope *inAlbum; + +// Identifies this resource as an itemScope. +@property (copy) NSString *kind; + +// Latitude. +@property (retain) NSNumber *latitude; // doubleValue + +// The location of the event or organization. +@property (retain) GTLPlusItemScope *location; + +// Longitude. +@property (retain) NSNumber *longitude; // doubleValue + +// The name of this scope. +@property (copy) NSString *name; + +// Property of http://schema.org/TVEpisode indicating which series the episode +// belongs to. +@property (retain) GTLPlusItemScope *partOfTVSeries; + +// The main performer or performers of the event-for example, a presenter, +// musician, or actor. +@property (retain) NSArray *performers; // of GTLPlusItemScope + +// Player type required-for example, Flash or Silverlight. +@property (copy) NSString *playerType; + +// Postal code. +@property (copy) NSString *postalCode; + +// Post office box number. +@property (copy) NSString *postOfficeBoxNumber; + +// Rating value. +@property (copy) NSString *ratingValue; + +// Review rating. +@property (retain) GTLPlusItemScope *reviewRating; + +// The start date and time of the event (in ISO 8601 date format). +@property (copy) NSString *startDate; + +// Street address. +@property (copy) NSString *streetAddress; + +// Comment text, review text, etc. +@property (copy) NSString *text; + +// Thumbnail image for an image or video. +@property (retain) GTLPlusItemScope *thumbnail; + +// A url to a thumbnail image for this scope. +@property (copy) NSString *thumbnailUrl; + +// The exchange traded instrument associated with a Corporation object. The +// tickerSymbol is expressed as an exchange and an instrument name separated by +// a space character. For the exchange component of the tickerSymbol attribute, +// we reccommend using the controlled vocaulary of Market Identifier Codes (MIC) +// specified in ISO15022. +@property (copy) NSString *tickerSymbol; + +// The item type. +@property (copy) NSString *type; + +// A URL for the item upon which the action was performed. +@property (copy) NSString *url; + +// The width of the media object. +@property (copy) NSString *width; + +// Worst possible rating value. +@property (copy) NSString *worstRating; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMoment.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMoment.h new file mode 100644 index 00000000..0b028c88 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMoment.h @@ -0,0 +1,65 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusMoment.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusMoment (0 custom class methods, 6 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusItemScope; + +// ---------------------------------------------------------------------------- +// +// GTLPlusMoment +// + +@interface GTLPlusMoment : GTLObject + +// The moment ID. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// Identifies this resource as a moment. +@property (copy) NSString *kind; + +// The object generated by performing the action on the item +@property (retain) GTLPlusItemScope *result; + +// Time stamp of when the action occurred in RFC3339 format. +@property (retain) GTLDateTime *startDate; + +// The object on which the action was performed. +@property (retain) GTLPlusItemScope *target; + +// The schema.org activity type. +@property (copy) NSString *type; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMomentsFeed.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMomentsFeed.h new file mode 100644 index 00000000..6cc8106b --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMomentsFeed.h @@ -0,0 +1,76 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusMomentsFeed.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusMomentsFeed (0 custom class methods, 8 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusMoment; + +// ---------------------------------------------------------------------------- +// +// GTLPlusMomentsFeed +// + +// This class supports NSFastEnumeration over its "items" property. It also +// supports -itemAtIndex: to retrieve individual objects from "items". + +@interface GTLPlusMomentsFeed : GTLCollectionObject + +// ETag of this response for caching purposes. +@property (copy) NSString *ETag; + +// The moments in this page of results. +@property (retain) NSArray *items; // of GTLPlusMoment + +// Identifies this resource as a collection of moments. Value: +// "plus#momentsFeed". +@property (copy) NSString *kind; + +// Link to the next page of moments. +@property (copy) NSString *nextLink; + +// The continuation token, which is used to page through large result sets. +// Provide this value in a subsequent request to return the next page of +// results. +@property (copy) NSString *nextPageToken; + +// Link to this page of moments. +@property (copy) NSString *selfLink; + +// The title of this collection of moments. +@property (copy) NSString *title; + +// The RFC 339 timestamp for when this collection of moments was last updated. +@property (retain) GTLDateTime *updated; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPeopleFeed.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPeopleFeed.h new file mode 100644 index 00000000..523afadd --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPeopleFeed.h @@ -0,0 +1,76 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusPeopleFeed.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusPeopleFeed (0 custom class methods, 7 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusPerson; + +// ---------------------------------------------------------------------------- +// +// GTLPlusPeopleFeed +// + +// This class supports NSFastEnumeration over its "items" property. It also +// supports -itemAtIndex: to retrieve individual objects from "items". + +@interface GTLPlusPeopleFeed : GTLCollectionObject + +// ETag of this response for caching purposes. +@property (copy) NSString *ETag; + +// The people in this page of results. Each item includes the id, displayName, +// image, and url for the person. To retrieve additional profile data, see the +// people.get method. +@property (retain) NSArray *items; // of GTLPlusPerson + +// Identifies this resource as a collection of people. Value: "plus#peopleFeed". +@property (copy) NSString *kind; + +// The continuation token, which is used to page through large result sets. +// Provide this value in a subsequent request to return the next page of +// results. +@property (copy) NSString *nextPageToken; + +// Link to this resource. +@property (copy) NSString *selfLink; + +// The title of this collection of people. +@property (copy) NSString *title; + +// The total number of people available in this list. The number of people in a +// response might be smaller due to paging. This might not be set for all +// collections. +@property (retain) NSNumber *totalItems; // intValue + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPerson.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPerson.h new file mode 100644 index 00000000..57ae94ed --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPerson.h @@ -0,0 +1,388 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLPlusPerson.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLPlusPerson (0 custom class methods, 28 custom properties) +// GTLPlusPersonAgeRange (0 custom class methods, 2 custom properties) +// GTLPlusPersonCover (0 custom class methods, 3 custom properties) +// GTLPlusPersonEmailsItem (0 custom class methods, 3 custom properties) +// GTLPlusPersonImage (0 custom class methods, 1 custom properties) +// GTLPlusPersonName (0 custom class methods, 6 custom properties) +// GTLPlusPersonOrganizationsItem (0 custom class methods, 9 custom properties) +// GTLPlusPersonPlacesLivedItem (0 custom class methods, 2 custom properties) +// GTLPlusPersonUrlsItem (0 custom class methods, 3 custom properties) +// GTLPlusPersonCoverCoverInfo (0 custom class methods, 2 custom properties) +// GTLPlusPersonCoverCoverPhoto (0 custom class methods, 3 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusPersonAgeRange; +@class GTLPlusPersonCover; +@class GTLPlusPersonCoverCoverInfo; +@class GTLPlusPersonCoverCoverPhoto; +@class GTLPlusPersonEmailsItem; +@class GTLPlusPersonImage; +@class GTLPlusPersonName; +@class GTLPlusPersonOrganizationsItem; +@class GTLPlusPersonPlacesLivedItem; +@class GTLPlusPersonUrlsItem; + +// ---------------------------------------------------------------------------- +// +// GTLPlusPerson +// + +@interface GTLPlusPerson : GTLObject + +// A short biography for this person. +@property (copy) NSString *aboutMe; + +// The age range of the person. +@property (retain) GTLPlusPersonAgeRange *ageRange; + +// The person's date of birth, represented as YYYY-MM-DD. +@property (copy) NSString *birthday; + +// The "bragging rights" line of this person. +@property (copy) NSString *braggingRights; + +// If a Google+ Page and for followers who are visible, the number of people who +// have added this page to a circle. +@property (retain) NSNumber *circledByCount; // intValue + +// The cover photo content. +@property (retain) GTLPlusPersonCover *cover; + +// The current location for this person. +@property (copy) NSString *currentLocation; + +// The name of this person, suitable for display. +@property (copy) NSString *displayName; + +// A list of email addresses for this person. +@property (retain) NSArray *emails; // of GTLPlusPersonEmailsItem + +// ETag of this response for caching purposes. +@property (copy) NSString *ETag; + +// The person's gender. Possible values are: +// - "male" - Male gender. +// - "female" - Female gender. +// - "other" - Other. +@property (copy) NSString *gender; + +// If "true", indicates that the person has installed the app that is making the +// request and has chosen to expose this install state to the caller. A value of +// "false" indicates that the install state cannot be determined (it is either +// not installed or the person has chosen to keep this information private). +@property (retain) NSNumber *hasApp; // boolValue + +// The ID of this person. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The representation of the person's profile photo. +@property (retain) GTLPlusPersonImage *image; + +// Whether this user has signed up for Google+. +@property (retain) NSNumber *isPlusUser; // boolValue + +// Identifies this resource as a person. Value: "plus#person". +@property (copy) NSString *kind; + +// The user's preferred language for rendering. +@property (copy) NSString *language; + +// An object representation of the individual components of a person's name. +@property (retain) GTLPlusPersonName *name; + +// The nickname of this person. +@property (copy) NSString *nickname; + +// Type of person within Google+. Possible values are: +// - "person" - represents an actual person. +// - "page" - represents a page. +@property (copy) NSString *objectType; + +// A list of current or past organizations with which this person is associated. +@property (retain) NSArray *organizations; // of GTLPlusPersonOrganizationsItem + +// A list of places where this person has lived. +@property (retain) NSArray *placesLived; // of GTLPlusPersonPlacesLivedItem + +// If a Google+ Page, the number of people who have +1'ed this page. +@property (retain) NSNumber *plusOneCount; // intValue + +// The person's relationship status. Possible values are: +// - "single" - Person is single. +// - "in_a_relationship" - Person is in a relationship. +// - "engaged" - Person is engaged. +// - "married" - Person is married. +// - "its_complicated" - The relationship is complicated. +// - "open_relationship" - Person is in an open relationship. +// - "widowed" - Person is widowed. +// - "in_domestic_partnership" - Person is in a domestic partnership. +// - "in_civil_union" - Person is in a civil union. +@property (copy) NSString *relationshipStatus; + +// The brief description (tagline) of this person. +@property (copy) NSString *tagline; + +// The URL of this person's profile. +@property (copy) NSString *url; + +// A list of URLs for this person. +@property (retain) NSArray *urls; // of GTLPlusPersonUrlsItem + +// Whether the person or Google+ Page has been verified. +@property (retain) NSNumber *verified; // boolValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonAgeRange +// + +@interface GTLPlusPersonAgeRange : GTLObject + +// The age range's upper bound, if any. +@property (retain) NSNumber *max; // intValue + +// The age range's lower bound, if any. +@property (retain) NSNumber *min; // intValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonCover +// + +@interface GTLPlusPersonCover : GTLObject + +// Extra information about the cover photo. +@property (retain) GTLPlusPersonCoverCoverInfo *coverInfo; + +// The person's primary cover image. +@property (retain) GTLPlusPersonCoverCoverPhoto *coverPhoto; + +// The layout of the cover art. Possible values are: +// - "banner" - One large image banner. +@property (copy) NSString *layout; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonEmailsItem +// + +@interface GTLPlusPersonEmailsItem : GTLObject + +// If "true", indicates this email address is the person's primary one. +@property (retain) NSNumber *primary; // boolValue + +// The type of address. Possible values are: +// - "home" - Home email address. +// - "work" - Work email address. +// - "other" - Other. +@property (copy) NSString *type; + +// The email address. +@property (copy) NSString *value; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonImage +// + +@interface GTLPlusPersonImage : GTLObject + +// The URL of the person's profile photo. To re-size the image and crop it to a +// square, append the query string ?sz=x, where x is the dimension in pixels of +// each side. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonName +// + +@interface GTLPlusPersonName : GTLObject + +// The family name (last name) of this person. +@property (copy) NSString *familyName; + +// The full name of this person, including middle names, suffixes, etc. +@property (copy) NSString *formatted; + +// The given name (first name) of this person. +@property (copy) NSString *givenName; + +// The honorific prefixes (such as "Dr." or "Mrs.") for this person. +@property (copy) NSString *honorificPrefix; + +// The honorific suffixes (such as "Jr.") for this person. +@property (copy) NSString *honorificSuffix; + +// The middle name of this person. +@property (copy) NSString *middleName; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonOrganizationsItem +// + +@interface GTLPlusPersonOrganizationsItem : GTLObject + +// The department within the organization. Deprecated. +@property (copy) NSString *department; + +// A short description of the person's role in this organization. Deprecated. +// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. +@property (copy) NSString *descriptionProperty; + +// The date the person left this organization. +@property (copy) NSString *endDate; + +// The location of this organization. Deprecated. +@property (copy) NSString *location; + +// The name of the organization. +@property (copy) NSString *name; + +// If "true", indicates this organization is the person's primary one (typically +// interpreted as current one). +@property (retain) NSNumber *primary; // boolValue + +// The date the person joined this organization. +@property (copy) NSString *startDate; + +// The person's job title or role within the organization. +@property (copy) NSString *title; + +// The type of organization. Possible values are: +// - "work" - Work. +// - "school" - School. +@property (copy) NSString *type; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonPlacesLivedItem +// + +@interface GTLPlusPersonPlacesLivedItem : GTLObject + +// If "true", this place of residence is this person's primary residence. +@property (retain) NSNumber *primary; // boolValue + +// A place where this person has lived. For example: "Seattle, WA", "Near +// Toronto". +@property (copy) NSString *value; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonUrlsItem +// + +@interface GTLPlusPersonUrlsItem : GTLObject + +// If "true", this URL is the person's primary URL. +@property (retain) NSNumber *primary; // boolValue + +// The type of URL. Possible values are: +// - "home" - URL for home. +// - "work" - URL for work. +// - "blog" - URL for blog. +// - "profile" - URL for profile. +// - "other" - Other. +@property (copy) NSString *type; + +// The URL value. +@property (copy) NSString *value; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonCoverCoverInfo +// + +@interface GTLPlusPersonCoverCoverInfo : GTLObject + +// The difference between the left position of the image cover and the actual +// displayed cover image. Only valid for BANNER layout. +@property (retain) NSNumber *leftImageOffset; // intValue + +// The difference between the top position of the image cover and the actual +// displayed cover image. Only valid for BANNER layout. +@property (retain) NSNumber *topImageOffset; // intValue + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonCoverCoverPhoto +// + +@interface GTLPlusPersonCoverCoverPhoto : GTLObject + +// The height to the image. +@property (retain) NSNumber *height; // intValue + +// The url to the image. +@property (copy) NSString *url; + +// The width to the image. +@property (retain) NSNumber *width; // intValue + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLQuery.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLQuery.h new file mode 100644 index 00000000..9d40887e --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLQuery.h @@ -0,0 +1,136 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLQuery.h +// + +// Query documentation: +// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Query_Operations + +#import "GTLObject.h" +#import "GTLUploadParameters.h" + +@protocol GTLQueryProtocol +- (BOOL)isBatchQuery; +- (BOOL)shouldSkipAuthorization; +- (void)executionDidStop; +- (NSDictionary *)additionalHTTPHeaders; +- (NSDictionary *)urlQueryParameters; +- (GTLUploadParameters *)uploadParameters; +@end + +@protocol GTLQueryCollectionProtocol +@optional +@property (retain) NSString *pageToken; +@property (retain) NSNumber *startIndex; +@end + +@class GTLServiceTicket; + +@interface GTLQuery : NSObject { + @private + NSString *methodName_; + NSMutableDictionary *json_; + GTLObject *bodyObject_; + NSMutableDictionary *childCache_; + NSString *requestID_; + GTLUploadParameters *uploadParameters_; + NSDictionary *urlQueryParameters_; + NSDictionary *additionalHTTPHeaders_; + Class expectedObjectClass_; + BOOL skipAuthorization_; +#if NS_BLOCKS_AVAILABLE + void (^completionBlock_)(GTLServiceTicket *ticket, id object, NSError *error); +#elif !__LP64__ + // Placeholders: for 32-bit builds, keep the size of the object's ivar section + // the same with and without blocks + id completionPlaceholder_; +#endif +} + +// The rpc method name. +@property (readonly) NSString *methodName; + +// The JSON dictionary of all the parameters set on this query. +@property (retain) NSMutableDictionary *JSON; + +// The object set to be uploaded with the query. +@property (retain) GTLObject *bodyObject; + +// Each query must have a request ID string. The user may replace the +// default assigned request ID with a custom string, provided that if +// used in a batch query, all request IDs in the batch must be unique. +@property (copy) NSString *requestID; + +// For queries which support file upload, the MIME type and file handle +// or data must be provided. +@property (copy) GTLUploadParameters *uploadParameters; + +// Any URL query parameters to add to the query (useful for debugging with some +// services). +@property (copy) NSDictionary *urlQueryParameters; + +// Any additional HTTP headers for this query. Not valid when this query +// is added to a batch. +// +// These headers override the same keys from the service object's +// additionalHTTPHeaders. +@property (copy) NSDictionary *additionalHTTPHeaders; + +// The GTLObject subclass expected for results (used if the result doesn't +// include a kind attribute). +@property (assign) Class expectedObjectClass; + +// Clients may set this to YES to disallow authorization. Defaults to NO. +@property (assign) BOOL shouldSkipAuthorization; + +#if NS_BLOCKS_AVAILABLE +// Clients may provide an optional callback block to be called immediately +// before the executeQuery: callback. +// +// The completionBlock property is particularly useful for queries executed +// in a batch. +// +// Errors passed to the completionBlock will have an "underlying" GTLErrorObject +// when the server returned an error for this specific query: +// +// GTLErrorObject *errorObj = [GTLErrorObject underlyingObjectForError:error]; +// if (errorObj) { +// // the server returned this error for this specific query +// } else { +// // the batch execution failed +// } +@property (copy) void (^completionBlock)(GTLServiceTicket *ticket, id object, NSError *error); +#endif + +// methodName is the RPC method name to use. ++ (id)queryWithMethodName:(NSString *)methodName GTL_NONNULL((1)); + +// methodName is the RPC method name to use. +- (id)initWithMethodName:(NSString *)method GTL_NONNULL((1)); + +// If you need to set a parameter that is not listed as a property for a +// query class, you can do so via this api. If you need to clear it after +// setting, pass nil for obj. +- (void)setCustomParameter:(id)obj forKey:(NSString *)key GTL_NONNULL((2)); + +// Auto-generated request IDs ++ (NSString *)nextRequestID; + +// Methods for subclasses to override. ++ (NSDictionary *)parameterNameMap; ++ (NSDictionary *)arrayPropertyToClassMap; +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLQueryPlus.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLQueryPlus.h new file mode 100644 index 00000000..44b43109 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLQueryPlus.h @@ -0,0 +1,297 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLQueryPlus.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLQueryPlus (12 custom class methods, 15 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLQuery.h" +#else + #import "GTLQuery.h" +#endif + +@class GTLPlusMoment; + +@interface GTLQueryPlus : GTLQuery + +// +// Parameters valid on all methods. +// + +// Selector specifying which fields to include in a partial response. +@property (copy) NSString *fields; + +// +// Method-specific parameters; see the comments below for more information. +// +@property (copy) NSString *activityId; +@property (copy) NSString *collection; +@property (copy) NSString *commentId; +@property (assign) BOOL debug; +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; +@property (copy) NSString *language; +@property (assign) NSUInteger maxResults; +@property (copy) NSString *orderBy; +@property (copy) NSString *pageToken; +@property (copy) NSString *query; +@property (copy) NSString *sortOrder; +@property (copy) NSString *targetUrl; +@property (copy) NSString *type; +@property (copy) NSString *userId; + +#pragma mark - +#pragma mark "activities" methods +// These create a GTLQueryPlus object. + +// Method: plus.activities.get +// Get an activity. +// Required: +// activityId: The ID of the activity to get. +// Authorization scope(s): +// kGTLAuthScopePlusLogin +// kGTLAuthScopePlusMe +// Fetches a GTLPlusActivity. ++ (id)queryForActivitiesGetWithActivityId:(NSString *)activityId; + +// Method: plus.activities.list +// List all of the activities in the specified collection for a particular user. +// Required: +// userId: The ID of the user to get activities for. The special value "me" +// can be used to indicate the authenticated user. +// collection: The collection of activities to list. +// kGTLPlusCollectionPublic: All public activities created by the specified +// user. +// Optional: +// maxResults: The maximum number of activities to include in the response, +// which is used for paging. For any response, the actual number returned +// might be less than the specified maxResults. (1..100, default 20) +// pageToken: The continuation token, which is used to page through large +// result sets. To get the next page of results, set this parameter to the +// value of "nextPageToken" from the previous response. +// Authorization scope(s): +// kGTLAuthScopePlusLogin +// kGTLAuthScopePlusMe +// Fetches a GTLPlusActivityFeed. ++ (id)queryForActivitiesListWithUserId:(NSString *)userId + collection:(NSString *)collection; + +// Method: plus.activities.search +// Search public activities. +// Required: +// query: Full-text search query string. +// Optional: +// language: Specify the preferred language to search with. See search +// language codes for available values. (Default en-US) +// maxResults: The maximum number of activities to include in the response, +// which is used for paging. For any response, the actual number returned +// might be less than the specified maxResults. (1..20, default 10) +// orderBy: Specifies how to order search results. (Default +// kGTLPlusOrderByRecent) +// kGTLPlusOrderByBest: Sort activities by relevance to the user, most +// relevant first. +// kGTLPlusOrderByRecent: Sort activities by published date, most recent +// first. +// pageToken: The continuation token, which is used to page through large +// result sets. To get the next page of results, set this parameter to the +// value of "nextPageToken" from the previous response. This token can be of +// any length. +// Authorization scope(s): +// kGTLAuthScopePlusMe +// Fetches a GTLPlusActivityFeed. ++ (id)queryForActivitiesSearchWithQuery:(NSString *)query; + +#pragma mark - +#pragma mark "comments" methods +// These create a GTLQueryPlus object. + +// Method: plus.comments.get +// Get a comment. +// Required: +// commentId: The ID of the comment to get. +// Authorization scope(s): +// kGTLAuthScopePlusMe +// Fetches a GTLPlusComment. ++ (id)queryForCommentsGetWithCommentId:(NSString *)commentId; + +// Method: plus.comments.list +// List all of the comments for an activity. +// Required: +// activityId: The ID of the activity to get comments for. +// Optional: +// maxResults: The maximum number of comments to include in the response, +// which is used for paging. For any response, the actual number returned +// might be less than the specified maxResults. (0..500, default 20) +// pageToken: The continuation token, which is used to page through large +// result sets. To get the next page of results, set this parameter to the +// value of "nextPageToken" from the previous response. +// sortOrder: The order in which to sort the list of comments. (Default +// kGTLPlusSortOrderAscending) +// kGTLPlusSortOrderAscending: Sort oldest comments first. +// kGTLPlusSortOrderDescending: Sort newest comments first. +// Authorization scope(s): +// kGTLAuthScopePlusMe +// Fetches a GTLPlusCommentFeed. ++ (id)queryForCommentsListWithActivityId:(NSString *)activityId; + +#pragma mark - +#pragma mark "moments" methods +// These create a GTLQueryPlus object. + +// Method: plus.moments.insert +// Record a moment representing a user's activity such as making a purchase or +// commenting on a blog. +// Required: +// userId: The ID of the user to record activities for. The only valid values +// are "me" and the ID of the authenticated user. +// collection: The collection to which to write moments. +// kGTLPlusCollectionVault: The default collection for writing new moments. +// Optional: +// debug: Return the moment as written. Should be used only for debugging. +// Authorization scope(s): +// kGTLAuthScopePlusLogin +// Fetches a GTLPlusMoment. ++ (id)queryForMomentsInsertWithObject:(GTLPlusMoment *)object + userId:(NSString *)userId + collection:(NSString *)collection; + +// Method: plus.moments.list +// List all of the moments for a particular user. +// Required: +// userId: The ID of the user to get moments for. The special value "me" can +// be used to indicate the authenticated user. +// collection: The collection of moments to list. +// kGTLPlusCollectionVault: All moments created by the requesting +// application for the authenticated user. +// Optional: +// maxResults: The maximum number of moments to include in the response, which +// is used for paging. For any response, the actual number returned might be +// less than the specified maxResults. (1..100, default 20) +// pageToken: The continuation token, which is used to page through large +// result sets. To get the next page of results, set this parameter to the +// value of "nextPageToken" from the previous response. +// targetUrl: Only moments containing this targetUrl will be returned. +// type: Only moments of this type will be returned. +// Authorization scope(s): +// kGTLAuthScopePlusLogin +// Fetches a GTLPlusMomentsFeed. ++ (id)queryForMomentsListWithUserId:(NSString *)userId + collection:(NSString *)collection; + +// Method: plus.moments.remove +// Delete a moment. +// Required: +// identifier: The ID of the moment to delete. +// Authorization scope(s): +// kGTLAuthScopePlusLogin ++ (id)queryForMomentsRemoveWithIdentifier:(NSString *)identifier; + +#pragma mark - +#pragma mark "people" methods +// These create a GTLQueryPlus object. + +// Method: plus.people.get +// Get a person's profile. If your app uses scope +// https://www.googleapis.com/auth/plus.login, this method is guaranteed to +// return ageRange and language. +// Required: +// userId: The ID of the person to get the profile for. The special value "me" +// can be used to indicate the authenticated user. +// Authorization scope(s): +// kGTLAuthScopePlusLogin +// kGTLAuthScopePlusMe +// Fetches a GTLPlusPerson. ++ (id)queryForPeopleGetWithUserId:(NSString *)userId; + +// Method: plus.people.list +// List all of the people in the specified collection. +// Required: +// userId: Get the collection of people for the person identified by the ID or +// use "me" to indiciated the authenticated user. +// collection: The collection of people to list. +// kGTLPlusCollectionVisible: The list of people who this user has added to +// one or more circles, limited to the circles visible to the requesting +// application. +// Optional: +// maxResults: The maximum number of people to include in the response, which +// is used for paging. For any response, the actual number returned might be +// less than the specified maxResults. (1..100, default 100) +// orderBy: The order to return people in. +// kGTLPlusOrderByAlphabetical: Order the people by their display name. +// kGTLPlusOrderByBest: Order people based on the relevence to the viewer. +// pageToken: The continuation token, which is used to page through large +// result sets. To get the next page of results, set this parameter to the +// value of "nextPageToken" from the previous response. +// Authorization scope(s): +// kGTLAuthScopePlusLogin +// Fetches a GTLPlusPeopleFeed. ++ (id)queryForPeopleListWithUserId:(NSString *)userId + collection:(NSString *)collection; + +// Method: plus.people.listByActivity +// List all of the people in the specified collection for a particular activity. +// Required: +// activityId: The ID of the activity to get the list of people for. +// collection: The collection of people to list. +// kGTLPlusCollectionPlusoners: List all people who have +1'd this +// activity. +// kGTLPlusCollectionResharers: List all people who have reshared this +// activity. +// Optional: +// maxResults: The maximum number of people to include in the response, which +// is used for paging. For any response, the actual number returned might be +// less than the specified maxResults. (1..100, default 20) +// pageToken: The continuation token, which is used to page through large +// result sets. To get the next page of results, set this parameter to the +// value of "nextPageToken" from the previous response. +// Authorization scope(s): +// kGTLAuthScopePlusMe +// Fetches a GTLPlusPeopleFeed. ++ (id)queryForPeopleListByActivityWithActivityId:(NSString *)activityId + collection:(NSString *)collection; + +// Method: plus.people.search +// Search all public profiles. +// Required: +// query: Specify a query string for full text search of public text in all +// profiles. +// Optional: +// language: Specify the preferred language to search with. See search +// language codes for available values. (Default en-US) +// maxResults: The maximum number of people to include in the response, which +// is used for paging. For any response, the actual number returned might be +// less than the specified maxResults. (1..20, default 10) +// pageToken: The continuation token, which is used to page through large +// result sets. To get the next page of results, set this parameter to the +// value of "nextPageToken" from the previous response. This token can be of +// any length. +// Authorization scope(s): +// kGTLAuthScopePlusMe +// Fetches a GTLPlusPeopleFeed. ++ (id)queryForPeopleSearchWithQuery:(NSString *)query; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLRuntimeCommon.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLRuntimeCommon.h new file mode 100644 index 00000000..28822b5e --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLRuntimeCommon.h @@ -0,0 +1,57 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLRuntimeCommon.h +// + + +#import + +#import "GTLDefines.h" + +// This protocol and support class are an internal implementation detail so +// GTLObject and GTLQuery can share some code. + +@protocol GTLRuntimeCommon +@required +// Get/Set properties +- (void)setJSONValue:(id)obj forKey:(NSString *)key; +- (id)JSONValueForKey:(NSString *)key; +// Child cache +- (void)setCacheChild:(id)obj forKey:(NSString *)key; +- (id)cacheChildForKey:(NSString *)key; +// Surrogate class mappings. +- (NSDictionary *)surrogates; +// Key map ++ (NSDictionary *)propertyToJSONKeyMapForClass:(Class)aClass; +// Array item types ++ (NSDictionary *)arrayPropertyToClassMapForClass:(Class)aClass; +// The parent class for dynamic support ++ (Class)ancestorClass; +@end + +@interface GTLRuntimeCommon : NSObject +// Wire things up. ++ (BOOL)resolveInstanceMethod:(SEL)sel onClass:(Class)onClass; +// Helpers ++ (id)objectFromJSON:(id)json + defaultClass:(Class)defaultClass + surrogates:(NSDictionary *)surrogates + isCacheable:(BOOL*)isCacheable; ++ (id)jsonFromAPIObject:(id)obj + expectedClass:(Class)expectedClass + isCacheable:(BOOL*)isCacheable; +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLService.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLService.h new file mode 100644 index 00000000..eac1dac8 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLService.h @@ -0,0 +1,607 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLService.h +// + +// Service object documentation: +// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Services_and_Tickets + +#import + +#import "GTLDefines.h" +#import "GTMHTTPFetcherService.h" +#import "GTLBatchQuery.h" +#import "GTLBatchResult.h" +#import "GTLDateTime.h" +#import "GTLErrorObject.h" +#import "GTLFramework.h" +#import "GTLJSONParser.h" +#import "GTLObject.h" +#import "GTLQuery.h" +#import "GTLUtilities.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTLSERVICE_DEFINE_GLOBALS +#define _EXTERN +#define _INITIALIZE_AS(x) =x +#else +#define _EXTERN extern +#define _INITIALIZE_AS(x) +#endif + +// Error domains +_EXTERN NSString* const kGTLServiceErrorDomain _INITIALIZE_AS(@"com.google.GTLServiceDomain"); +enum { + kGTLErrorQueryResultMissing = -3000, + kGTLErrorWaitTimedOut = -3001 +}; + +_EXTERN NSString* const kGTLJSONRPCErrorDomain _INITIALIZE_AS(@"com.google.GTLJSONRPCErrorDomain"); + +// We'll consistently store the server error string in the userInfo under +// this key +_EXTERN NSString* const kGTLServerErrorStringKey _INITIALIZE_AS(@"error"); + +_EXTERN Class const kGTLUseRegisteredClass _INITIALIZE_AS(nil); + +_EXTERN NSUInteger const kGTLStandardUploadChunkSize _INITIALIZE_AS(NSUIntegerMax); + +// When servers return us structured JSON errors, the NSError will +// contain a GTLErrorObject in the userInfo dictionary under the key +// kGTLStructuredErrorsKey +_EXTERN NSString* const kGTLStructuredErrorKey _INITIALIZE_AS(@"GTLStructuredError"); + +// When specifying an ETag for updating or deleting a single entry, use +// kGTLETagWildcard to tell the server to replace the current value +// unconditionally. Do not use this in entries in a batch feed. +_EXTERN NSString* const kGTLETagWildcard _INITIALIZE_AS(@"*"); + +// Notifications when parsing of a fetcher feed or entry begins or ends +_EXTERN NSString* const kGTLServiceTicketParsingStartedNotification _INITIALIZE_AS(@"kGTLServiceTicketParsingStartedNotification"); +_EXTERN NSString* const kGTLServiceTicketParsingStoppedNotification _INITIALIZE_AS(@"kGTLServiceTicketParsingStoppedNotification"); + +@class GTLServiceTicket; + +// Block types used for fetch callbacks +// +// These typedefs are not used in the header file method declarations +// since it's more useful when code sense expansions show the argument +// types rather than the typedefs + +#if NS_BLOCKS_AVAILABLE +typedef void (^GTLServiceCompletionHandler)(GTLServiceTicket *ticket, id object, NSError *error); + +typedef void (^GTLServiceUploadProgressBlock)(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength); +#else +typedef void *GTLServiceCompletionHandler; + +typedef void *GTLServiceUploadProgressBlock; +#endif // NS_BLOCKS_AVAILABLE + +#pragma mark - + +// +// Service base class +// + +@interface GTLService : NSObject { + @private + NSOperationQueue *parseQueue_; + NSString *userAgent_; + GTMHTTPFetcherService *fetcherService_; + NSString *userAgentAddition_; + + NSMutableDictionary *serviceProperties_; // initial values for properties in future tickets + + NSDictionary *surrogates_; // initial value for surrogates in future tickets + + SEL uploadProgressSelector_; // optional + +#if NS_BLOCKS_AVAILABLE + BOOL (^retryBlock_)(GTLServiceTicket *, BOOL, NSError *); + void (^uploadProgressBlock_)(GTLServiceTicket *ticket, + unsigned long long numberOfBytesRead, + unsigned long long dataLength); +#elif !__LP64__ + // Placeholders: for 32-bit builds, keep the size of the object's ivar section + // the same with and without blocks + id retryPlaceholder_; + id uploadProgressPlaceholder_; +#endif + + NSUInteger uploadChunkSize_; // zero when uploading via multi-part MIME http body + + BOOL isRetryEnabled_; // user allows auto-retries + SEL retrySelector_; // optional; set with setServiceRetrySelector + NSTimeInterval maxRetryInterval_; // default to 600. seconds + + BOOL shouldFetchNextPages_; + + NSString *apiKey_; + BOOL isRESTDataWrapperRequired_; + NSString *apiVersion_; + NSURL *rpcURL_; + NSURL *rpcUploadURL_; + NSDictionary *urlQueryParameters_; + NSDictionary *additionalHTTPHeaders_; +} + +#pragma mark Query Execution + +// The finishedSelector has a signature matching: +// +// - (void)serviceTicket:(GTLServiceTicket *)ticket +// finishedWithObject:(GTLObject *)object +// error:(NSError *)error +// +// If an error occurs, the error parameter will be non-nil. Otherwise, +// the object parameter will point to a GTLObject, if any was returned by +// the fetch. (Delete fetches return no object, so the second parameter will +// be nil.) +// +// If the query object is a GTLBatchQuery, the object passed to the callback +// will be a GTLBatchResult; see the batch query documentation: +// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Batch_Operations + +- (GTLServiceTicket *)executeQuery:(id)query + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)executeQuery:(id)query + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); +#endif + +// Automatic page fetches +// +// Tickets can optionally do a sequence of fetches for queries where +// repeated requests with nextPageToken or nextStartIndex values is required to +// retrieve items of all pages of the response collection. The client's +// callback is invoked only when all items have been retrieved, or an error has +// occurred. During the fetch, the items accumulated so far are available from +// the ticket. +// +// Note that the final object may be a combination of multiple page responses +// so it may not be the same as if all results had been returned in a single +// page. Some fields of the response such as total item counts may reflect only +// the final page's values. +// +// Automatic page fetches will return an error if more than 25 page fetches are +// required. For debug builds, this will log a warning to the console when more +// than 2 page fetches occur, as a reminder that the query's maxResults +// parameter should probably be increased to specify more items returned per +// page. +// +// Default value is NO. +@property (nonatomic, assign) BOOL shouldFetchNextPages; + +// Retrying; see comments on retry support at the top of GTMHTTPFetcher. +// +// Default value is NO. +@property (nonatomic, assign, getter=isRetryEnabled) BOOL retryEnabled; + +// Some services require a developer key for quotas and limits. Setting this +// will include it on all request sent to this service via a GTLQuery class. +@property (nonatomic, copy) NSString *APIKey; + +// An authorizer adds user authentication headers to the request as needed. +@property (nonatomic, retain) id authorizer; + +// Retry selector is optional for retries. +// +// If present, it should have the signature: +// -(BOOL)ticket:(GTLServiceTicket *)ticket willRetry:(BOOL)suggestedWillRetry forError:(NSError *)error +// and return YES to cause a retry. Note that unlike the GTMHTTPFetcher retry +// selector, this selector's first argument is a ticket, not a fetcher. + +@property (nonatomic, assign) SEL retrySelector; +#if NS_BLOCKS_AVAILABLE +@property (copy) BOOL (^retryBlock)(GTLServiceTicket *ticket, BOOL suggestedWillRetry, NSError *error); +#endif + +@property (nonatomic, assign) NSTimeInterval maxRetryInterval; + +// +// Fetches may be done using RPC or REST APIs, without creating +// a GTLQuery object +// + +#pragma mark RPC Fetch Methods + +// +// These methods may be used for RPC fetches without creating a GTLQuery object +// + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); +#endif + +#pragma mark REST Fetch Methods + +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchPublicObjectWithURL:(NSURL *)objectURL + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1,2)); + +- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1,2)); + +- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL + ETag:(NSString *)etagOrNil + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); + +- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); + +- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL + ETag:(NSString *)etagOrNil + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); +#endif + +#pragma mark User Properties + +// Properties and userData are supported for client convenience. +// +// Property keys beginning with _ are reserved by the library. +// +// The service properties dictionary is copied to become the initial property +// dictionary for each ticket. +- (void)setServiceProperty:(id)obj forKey:(NSString *)key GTL_NONNULL((2)); // pass nil obj to remove property +- (id)servicePropertyForKey:(NSString *)key GTL_NONNULL((1)); + +@property (nonatomic, copy) NSDictionary *serviceProperties; + +// The service userData becomes the initial value for each future ticket's +// userData. +@property (nonatomic, retain) id serviceUserData; + +#pragma mark Request Settings + +// Set the surrogates to be used for future tickets. Surrogates are subclasses +// to be used instead of standard classes when creating objects from the JSON. +// For example, this code will make the framework generate objects +// using MyCalendarItemSubclass instead of GTLItemCalendar and +// MyCalendarEventSubclass instead of GTLItemCalendarEvent. +// +// NSDictionary *surrogates = [NSDictionary dictionaryWithObjectsAndKeys: +// [MyCalendarEntrySubclass class], [GTLItemCalendar class], +// [MyCalendarEventSubclass class], [GTLItemCalendarEvent class], +// nil]; +// [calendarService setServiceSurrogates:surrogates]; +// +@property (nonatomic, retain) NSDictionary *surrogates; + +// On iOS 4 and later, the fetch may optionally continue in the background +// until finished or stopped by OS expiration. +// +// The default value is NO. +// +// For Mac OS X, background fetches are always supported, and this property +// is ignored. +@property (nonatomic, assign) BOOL shouldFetchInBackground; + +// Callbacks can be invoked on an operation queue rather than via the run loop +// starting on 10.7 and iOS 6. Do not specify both run loop modes and an +// operation queue. Specifying a delegate queue typically looks like this: +// +// service.delegateQueue = [[[NSOperationQueue alloc] init] autorelease]; +// +// Since the callbacks will be on a thread of the operation queue, the client +// may re-dispatch from the callbacks to a known dispatch queue or to the +// main queue. +@property (nonatomic, retain) NSOperationQueue *delegateQueue; + +// Run loop modes are used for scheduling NSURLConnections. +// +// The default value, nil, schedules connections using the current run +// loop mode. To use the service during a modal dialog, be sure to specify +// NSModalPanelRunLoopMode as one of the modes. +@property (nonatomic, retain) NSArray *runLoopModes; + +// Applications needing an additional identifier in the server logs may specify +// one. +@property (nonatomic, copy) NSString *userAgentAddition; + +// Applications have a default user-agent based on the application signature +// in the Info.plist settings. Most applications should not explicitly set +// this property. +@property (nonatomic, copy) NSString *userAgent; + +// The request user agent includes the library and OS version appended to the +// base userAgent, along with the optional addition string. +@property (nonatomic, readonly) NSString *requestUserAgent; + +// Applications may call requestForURL:httpMethod to get a request with the +// proper user-agent and ETag headers +// +// For http method, pass nil (for default GET method), POST, PUT, or DELETE +- (NSMutableURLRequest *)requestForURL:(NSURL *)url + ETag:(NSString *)etagOrNil + httpMethod:(NSString *)httpMethodOrNil GTL_NONNULL((1)); + +// objectRequestForURL returns an NSMutableURLRequest for a JSON GTL object +// +// The object is the object being sent to the server, or nil; +// the http method may be nil for GET, or POST, PUT, DELETE +- (NSMutableURLRequest *)objectRequestForURL:(NSURL *)url + object:(GTLObject *)object + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + isREST:(BOOL)isREST + additionalHeaders:(NSDictionary *)additionalHeaders + ticket:(GTLServiceTicket *)ticket GTL_NONNULL((1)); + +// The queue used for parsing JSON responses (previously this property +// was called operationQueue) +@property (nonatomic, retain) NSOperationQueue *parseQueue; + +// The fetcher service object issues the GTMHTTPFetcher instances +// for this API service +@property (nonatomic, retain) GTMHTTPFetcherService *fetcherService; + +// Default storage for cookies is in the service object's fetchHistory. +// +// Apps that want to share cookies between all standalone fetchers and the +// service object may specify static application-wide cookie storage, +// kGTMHTTPFetcherCookieStorageMethodStatic. +@property (nonatomic, assign) NSInteger cookieStorageMethod; + +// When sending REST style queries, should the payload be wrapped in a "data" +// element, and will the reply be wrapped in an "data" element. +@property (nonatomic, assign) BOOL isRESTDataWrapperRequired; + +// Any url query parameters to add to urls (useful for debugging with some +// services). +@property (copy) NSDictionary *urlQueryParameters; + +// Any extra http headers to set on requests for GTLObjects. +@property (copy) NSDictionary *additionalHTTPHeaders; + +// The service API version. +@property (nonatomic, copy) NSString *apiVersion; + +// The URL for sending RPC requests for this service. +@property (nonatomic, retain) NSURL *rpcURL; + +// The URL for sending RPC requests which initiate file upload. +@property (nonatomic, retain) NSURL *rpcUploadURL; + +// Set a non-zero value to enable uploading via chunked fetches +// (resumable uploads); typically this defaults to kGTLStandardUploadChunkSize +// for service subclasses that support chunked uploads +@property (nonatomic, assign) NSUInteger serviceUploadChunkSize; + +// Service subclasses may specify their own default chunk size ++ (NSUInteger)defaultServiceUploadChunkSize; + +// The service uploadProgressSelector becomes the initial value for each future +// ticket's uploadProgressSelector. +// +// The optional uploadProgressSelector will be called in the delegate as bytes +// are uploaded to the server. It should have a signature matching +// +// - (void)ticket:(GTLServiceTicket *)ticket +// hasDeliveredByteCount:(unsigned long long)numberOfBytesRead +// ofTotalByteCount:(unsigned long long)dataLength; +@property (nonatomic, assign) SEL uploadProgressSelector; + +#if NS_BLOCKS_AVAILABLE +@property (copy) void (^uploadProgressBlock)(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength); +#endif + +// Wait synchronously for fetch to complete (strongly discouraged) +// +// This just runs the current event loop until the fetch completes +// or the timout limit is reached. This may discard unexpected events +// that occur while spinning, so it's really not appropriate for use +// in serious applications. +// +// Returns true if an object was successfully fetched. If the wait +// timed out, returns false and the returned error is nil. +// +// The returned object or error, if any, will be already autoreleased +// +// This routine will likely be removed in some future releases of the library. +- (BOOL)waitForTicket:(GTLServiceTicket *)ticket + timeout:(NSTimeInterval)timeoutInSeconds + fetchedObject:(GTLObject **)outObjectOrNil + error:(NSError **)outErrorOrNil GTL_NONNULL((1)); +@end + +#pragma mark - + +// +// Ticket base class +// +@interface GTLServiceTicket : NSObject { + GTLService *service_; + + NSMutableDictionary *ticketProperties_; + NSDictionary *surrogates_; + + GTMHTTPFetcher *objectFetcher_; + SEL uploadProgressSelector_; + BOOL shouldFetchNextPages_; + BOOL isRetryEnabled_; + SEL retrySelector_; + NSTimeInterval maxRetryInterval_; + +#if NS_BLOCKS_AVAILABLE + BOOL (^retryBlock_)(GTLServiceTicket *, BOOL, NSError *); + void (^uploadProgressBlock_)(GTLServiceTicket *ticket, + unsigned long long numberOfBytesRead, + unsigned long long dataLength); +#elif !__LP64__ + // Placeholders: for 32-bit builds, keep the size of the object's ivar section + // the same with and without blocks + id retryPlaceholder_; + id uploadProgressPlaceholder_; +#endif + + GTLObject *postedObject_; + GTLObject *fetchedObject_; + id executingQuery_; + id originalQuery_; + NSError *fetchError_; + BOOL hasCalledCallback_; + NSUInteger pagesFetchedCounter_; + + NSString *apiKey_; + BOOL isREST_; + + NSOperation *parseOperation_; +} + ++ (id)ticketForService:(GTLService *)service; + +- (id)initWithService:(GTLService *)service; + +- (id)service; + +#pragma mark Execution Control +// if cancelTicket is called, the fetch is stopped if it is in progress, +// the callbacks will not be called, and the ticket will no longer be useful +// (though the client must still release the ticket if it retained the ticket) +- (void)cancelTicket; + +// chunked upload tickets may be paused +- (void)pauseUpload; +- (void)resumeUpload; +- (BOOL)isUploadPaused; + +@property (nonatomic, retain) GTMHTTPFetcher *objectFetcher; +@property (nonatomic, assign) SEL uploadProgressSelector; + +// Services which do not require an user authorization may require a developer +// API key for quota management +@property (nonatomic, copy) NSString *APIKey; + +#pragma mark User Properties + +// Properties and userData are supported for client convenience. +// +// Property keys beginning with _ are reserved by the library. +- (void)setProperty:(id)obj forKey:(NSString *)key GTL_NONNULL((1)); // pass nil obj to remove property +- (id)propertyForKey:(NSString *)key; + +@property (nonatomic, copy) NSDictionary *properties; +@property (nonatomic, retain) id userData; + +#pragma mark Payload + +@property (nonatomic, retain) GTLObject *postedObject; +@property (nonatomic, retain) GTLObject *fetchedObject; +@property (nonatomic, retain) id executingQuery; // Query currently being fetched by this ticket +@property (nonatomic, retain) id originalQuery; // Query used to create this ticket +- (GTLQuery *)queryForRequestID:(NSString *)requestID GTL_NONNULL((1)); // Returns the query from within the batch with the given id. + +@property (nonatomic, retain) NSDictionary *surrogates; + +#pragma mark Retry + +@property (nonatomic, assign, getter=isRetryEnabled) BOOL retryEnabled; +@property (nonatomic, assign) SEL retrySelector; +#if NS_BLOCKS_AVAILABLE +@property (copy) BOOL (^retryBlock)(GTLServiceTicket *ticket, BOOL suggestedWillRetry, NSError *error); +#endif +@property (nonatomic, assign) NSTimeInterval maxRetryInterval; + +#pragma mark Status + +@property (nonatomic, readonly) NSInteger statusCode; // server status from object fetch +@property (nonatomic, retain) NSError *fetchError; +@property (nonatomic, assign) BOOL hasCalledCallback; + +#pragma mark Pagination + +@property (nonatomic, assign) BOOL shouldFetchNextPages; +@property (nonatomic, assign) NSUInteger pagesFetchedCounter; + +#pragma mark Upload + +#if NS_BLOCKS_AVAILABLE +@property (copy) void (^uploadProgressBlock)(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength); +#endif + +@end + + +// Category to provide opaque access to tickets stored in fetcher properties +@interface GTMHTTPFetcher (GTLServiceTicketAdditions) +- (id)ticket; +@end + diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLServicePlus.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLServicePlus.h new file mode 100644 index 00000000..b05c4f47 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLServicePlus.h @@ -0,0 +1,61 @@ +/* Copyright (c) 2013 Google Inc. + * + * 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. + */ + +// +// GTLServicePlus.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// https://developers.google.com/+/api/ +// Classes: +// GTLServicePlus (0 custom class methods, 0 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLService.h" +#else + #import "GTLService.h" +#endif + +@interface GTLServicePlus : GTLService + +// No new methods + +// Clients should create a standard query with any of the class methods in +// GTLQueryPlus.h. The query can the be sent with GTLService's execute methods, +// +// - (GTLServiceTicket *)executeQuery:(GTLQuery *)query +// completionHandler:(void (^)(GTLServiceTicket *ticket, +// id object, NSError *error))handler; +// or +// - (GTLServiceTicket *)executeQuery:(GTLQuery *)query +// delegate:(id)delegate +// didFinishSelector:(SEL)finishedSelector; +// +// where finishedSelector has a signature of: +// +// - (void)serviceTicket:(GTLServiceTicket *)ticket +// finishedWithObject:(id)object +// error:(NSError *)error; +// +// The object passed to the completion handler or delegate method +// is a subclass of GTLObject, determined by the query method executed. + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLTargetNamespace.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLTargetNamespace.h new file mode 100644 index 00000000..9e08a9e4 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLTargetNamespace.h @@ -0,0 +1,58 @@ +// +// Makes the value of GTL_TARGET_NAMESPACE a prefix for all GTL +// library class names +// + +// +// To avoid global namespace issues, define GTL_TARGET_NAMESPACE to a short +// string in your target if you are using the GTL library in a shared-code +// environment like a plug-in. +// +// For example: -DGTL_TARGET_NAMESPACE=MyPlugin +// + +// +// com.google.GTLFramework v. 2.0 (29 classes) 2011-10-25 19:25:36 -0700 +// + +#if defined(__OBJC__) && defined(GTL_TARGET_NAMESPACE) + + #define _GTL_NS_SYMBOL_INNER(ns, symbol) ns ## _ ## symbol + #define _GTL_NS_SYMBOL_MIDDLE(ns, symbol) _GTL_NS_SYMBOL_INNER(ns, symbol) + #define _GTL_NS_SYMBOL(symbol) _GTL_NS_SYMBOL_MIDDLE(GTL_TARGET_NAMESPACE, symbol) + + #define _GTL_NS_STRING_INNER(ns) #ns + #define _GTL_NS_STRING_MIDDLE(ns) _GTL_NS_STRING_INNER(ns) + #define GTL_TARGET_NAMESPACE_STRING _GTL_NS_STRING_MIDDLE(GTL_TARGET_NAMESPACE) + + #define GTLBatchQuery _GTL_NS_SYMBOL(GTLBatchQuery) + #define GTLBatchResult _GTL_NS_SYMBOL(GTLBatchResult) + #define GTLCollectionObject _GTL_NS_SYMBOL(GTLCollectionObject) + #define GTLDateTime _GTL_NS_SYMBOL(GTLDateTime) + #define GTLErrorObject _GTL_NS_SYMBOL(GTLErrorObject) + #define GTLErrorObjectData _GTL_NS_SYMBOL(GTLErrorObjectData) + #define GTLJSONParser _GTL_NS_SYMBOL(GTLJSONParser) + #define GTLObject _GTL_NS_SYMBOL(GTLObject) + #define GTLQuery _GTL_NS_SYMBOL(GTLQuery) + #define GTLRuntimeCommon _GTL_NS_SYMBOL(GTLRuntimeCommon) + #define GTLService _GTL_NS_SYMBOL(GTLService) + #define GTLServiceTicket _GTL_NS_SYMBOL(GTLServiceTicket) + #define GTLUploadParameters _GTL_NS_SYMBOL(GTLUploadParameters) + #define GTLUtilities _GTL_NS_SYMBOL(GTLUtilities) + #define GTMCachedURLResponse _GTL_NS_SYMBOL(GTMCachedURLResponse) + #define GTMCookieStorage _GTL_NS_SYMBOL(GTMCookieStorage) + #define GTMGatherInputStream _GTL_NS_SYMBOL(GTMGatherInputStream) + #define GTMHTTPFetcher _GTL_NS_SYMBOL(GTMHTTPFetcher) + #define GTMHTTPFetcherService _GTL_NS_SYMBOL(GTMHTTPFetcherService) + #define GTMHTTPFetchHistory _GTL_NS_SYMBOL(GTMHTTPFetchHistory) + #define GTMHTTPUploadFetcher _GTL_NS_SYMBOL(GTMHTTPUploadFetcher) + #define GTMMIMEDocument _GTL_NS_SYMBOL(GTMMIMEDocument) + #define GTMMIMEPart _GTL_NS_SYMBOL(GTMMIMEPart) + #define GTMOAuth2Authentication _GTL_NS_SYMBOL(GTMOAuth2Authentication) + #define GTMOAuth2AuthorizationArgs _GTL_NS_SYMBOL(GTMOAuth2AuthorizationArgs) + #define GTMOAuth2SignIn _GTL_NS_SYMBOL(GTMOAuth2SignIn) + #define GTMOAuth2WindowController _GTL_NS_SYMBOL(GTMOAuth2WindowController) + #define GTMReadMonitorInputStream _GTL_NS_SYMBOL(GTMReadMonitorInputStream) + #define GTMURLCache _GTL_NS_SYMBOL(GTMURLCache) + +#endif diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLUploadParameters.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLUploadParameters.h new file mode 100644 index 00000000..a3c1d9dc --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLUploadParameters.h @@ -0,0 +1,60 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLUploadParameters.h +// + +// Uploading documentation: +// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Uploading_Files + +#import + +#import "GTLDefines.h" + +@interface GTLUploadParameters : NSObject { + @private + NSString *MIMEType_; + NSData *data_; + NSFileHandle *fileHandle_; + NSURL *uploadLocationURL_; + NSString *slug_; + BOOL shouldSendUploadOnly_; +} + +// Uploading requires MIME type and one of +// - data to be uploaded +// - file handle for uploading +@property (copy) NSString *MIMEType; +@property (retain) NSData *data; +@property (retain) NSFileHandle *fileHandle; + +// Resuming an in-progress upload is done with the upload location URL, +// and requires a file handle for uploading +@property (retain) NSURL *uploadLocationURL; + +// Some services need a slug (filename) header +@property (copy) NSString *slug; + +// Uploads may be done without a JSON body in the initial request +@property (assign) BOOL shouldSendUploadOnly; + ++ (GTLUploadParameters *)uploadParametersWithData:(NSData *)data + MIMEType:(NSString *)mimeType GTL_NONNULL((1,2)); + ++ (GTLUploadParameters *)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle + MIMEType:(NSString *)mimeType GTL_NONNULL((1,2)); + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTLUtilities.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLUtilities.h new file mode 100644 index 00000000..97f4bf07 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTLUtilities.h @@ -0,0 +1,93 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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 + +#ifndef SKIP_GTL_DEFINES + #import "GTLDefines.h" +#endif + +// helper functions for implementing isEqual: +BOOL GTL_AreEqualOrBothNil(id obj1, id obj2); +BOOL GTL_AreBoolsEqual(BOOL b1, BOOL b2); + +// Helper to ensure a number is a number. +// +// The GoogleAPI servers will send numbers >53 bits as strings to avoid +// bugs in some JavaScript implementations. Work around this by catching +// the string and turning it back into a number. +NSNumber *GTL_EnsureNSNumber(NSNumber *num); + +@interface GTLUtilities : NSObject + +// +// String encoding +// + +// URL encoding, different for parts of URLs and parts of URL parameters +// +// +stringByURLEncodingString just makes a string legal for a URL +// +// +stringByURLEncodingForURI also encodes some characters that are legal in +// URLs but should not be used in URIs, +// per http://bitworking.org/projects/atom/rfc5023.html#rfc.section.9.7 +// +// +stringByURLEncodingStringParameter is like +stringByURLEncodingForURI but +// replaces space characters with + characters rather than percent-escaping them +// ++ (NSString *)stringByURLEncodingString:(NSString *)str; ++ (NSString *)stringByURLEncodingForURI:(NSString *)str; ++ (NSString *)stringByURLEncodingStringParameter:(NSString *)str; + +// Percent-encoded UTF-8 ++ (NSString *)stringByPercentEncodingUTF8ForString:(NSString *)str; + +// Key-value coding searches in an array +// +// Utilities to get from an array objects having a known value (or nil) +// at a keyPath + ++ (NSArray *)objectsFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath; + ++ (id)firstObjectFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath; + +// +// Version helpers +// + ++ (NSComparisonResult)compareVersion:(NSString *)ver1 toVersion:(NSString *)ver2; + +// +// URL builder +// + +// If there are already query parameters on urlString, the new ones are simple +// appended after them. ++ (NSURL *)URLWithString:(NSString *)urlString + queryParameters:(NSDictionary *)queryParameters; + +// Allocate a global dictionary ++ (NSMutableDictionary *)newStaticDictionary; + +// Walk up the class tree merging dictionaries and return the result. ++ (NSDictionary *)mergedClassDictionaryForSelector:(SEL)selector + startClass:(Class)startClass + ancestorClass:(Class)ancestorClass + cache:(NSMutableDictionary *)cache; +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMDefines.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMDefines.h new file mode 100644 index 00000000..c2958487 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMDefines.h @@ -0,0 +1,441 @@ +// +// GTMDefines.h +// +// Copyright 2008 Google Inc. +// +// 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. +// + +// ============================================================================ + +#include +#include + +#ifdef __OBJC__ +#include +#endif // __OBJC__ + +#if TARGET_OS_IPHONE +#include +#endif // TARGET_OS_IPHONE + +// Not all MAC_OS_X_VERSION_10_X macros defined in past SDKs +#ifndef MAC_OS_X_VERSION_10_5 + #define MAC_OS_X_VERSION_10_5 1050 +#endif +#ifndef MAC_OS_X_VERSION_10_6 + #define MAC_OS_X_VERSION_10_6 1060 +#endif +#ifndef MAC_OS_X_VERSION_10_7 + #define MAC_OS_X_VERSION_10_7 1070 +#endif + +// Not all __IPHONE_X macros defined in past SDKs +#ifndef __IPHONE_3_0 + #define __IPHONE_3_0 30000 +#endif +#ifndef __IPHONE_3_1 + #define __IPHONE_3_1 30100 +#endif +#ifndef __IPHONE_3_2 + #define __IPHONE_3_2 30200 +#endif +#ifndef __IPHONE_4_0 + #define __IPHONE_4_0 40000 +#endif +#ifndef __IPHONE_4_3 + #define __IPHONE_4_3 40300 +#endif +#ifndef __IPHONE_5_0 + #define __IPHONE_5_0 50000 +#endif + +// ---------------------------------------------------------------------------- +// CPP symbols that can be overridden in a prefix to control how the toolbox +// is compiled. +// ---------------------------------------------------------------------------- + + +// By setting the GTM_CONTAINERS_VALIDATION_FAILED_LOG and +// GTM_CONTAINERS_VALIDATION_FAILED_ASSERT macros you can control what happens +// when a validation fails. If you implement your own validators, you may want +// to control their internals using the same macros for consistency. +#ifndef GTM_CONTAINERS_VALIDATION_FAILED_ASSERT + #define GTM_CONTAINERS_VALIDATION_FAILED_ASSERT 0 +#endif + +// Give ourselves a consistent way to do inlines. Apple's macros even use +// a few different actual definitions, so we're based off of the foundation +// one. +#if !defined(GTM_INLINE) + #if (defined (__GNUC__) && (__GNUC__ == 4)) || defined (__clang__) + #define GTM_INLINE static __inline__ __attribute__((always_inline)) + #else + #define GTM_INLINE static __inline__ + #endif +#endif + +// Give ourselves a consistent way of doing externs that links up nicely +// when mixing objc and objc++ +#if !defined (GTM_EXTERN) + #if defined __cplusplus + #define GTM_EXTERN extern "C" + #define GTM_EXTERN_C_BEGIN extern "C" { + #define GTM_EXTERN_C_END } + #else + #define GTM_EXTERN extern + #define GTM_EXTERN_C_BEGIN + #define GTM_EXTERN_C_END + #endif +#endif + +// Give ourselves a consistent way of exporting things if we have visibility +// set to hidden. +#if !defined (GTM_EXPORT) + #define GTM_EXPORT __attribute__((visibility("default"))) +#endif + +// Give ourselves a consistent way of declaring something as unused. This +// doesn't use __unused because that is only supported in gcc 4.2 and greater. +#if !defined (GTM_UNUSED) +#define GTM_UNUSED(x) ((void)(x)) +#endif + +// _GTMDevLog & _GTMDevAssert +// +// _GTMDevLog & _GTMDevAssert are meant to be a very lightweight shell for +// developer level errors. This implementation simply macros to NSLog/NSAssert. +// It is not intended to be a general logging/reporting system. +// +// Please see http://code.google.com/p/google-toolbox-for-mac/wiki/DevLogNAssert +// for a little more background on the usage of these macros. +// +// _GTMDevLog log some error/problem in debug builds +// _GTMDevAssert assert if conditon isn't met w/in a method/function +// in all builds. +// +// To replace this system, just provide different macro definitions in your +// prefix header. Remember, any implementation you provide *must* be thread +// safe since this could be called by anything in what ever situtation it has +// been placed in. +// + +// We only define the simple macros if nothing else has defined this. +#ifndef _GTMDevLog + +#ifdef DEBUG + #define _GTMDevLog(...) NSLog(__VA_ARGS__) +#else + #define _GTMDevLog(...) do { } while (0) +#endif + +#endif // _GTMDevLog + +#ifndef _GTMDevAssert +// we directly invoke the NSAssert handler so we can pass on the varargs +// (NSAssert doesn't have a macro we can use that takes varargs) +#if !defined(NS_BLOCK_ASSERTIONS) + #define _GTMDevAssert(condition, ...) \ + do { \ + if (!(condition)) { \ + [[NSAssertionHandler currentHandler] \ + handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__] \ + file:[NSString stringWithUTF8String:__FILE__] \ + lineNumber:__LINE__ \ + description:__VA_ARGS__]; \ + } \ + } while(0) +#else // !defined(NS_BLOCK_ASSERTIONS) + #define _GTMDevAssert(condition, ...) do { } while (0) +#endif // !defined(NS_BLOCK_ASSERTIONS) + +#endif // _GTMDevAssert + +// _GTMCompileAssert +// _GTMCompileAssert is an assert that is meant to fire at compile time if you +// want to check things at compile instead of runtime. For example if you +// want to check that a wchar is 4 bytes instead of 2 you would use +// _GTMCompileAssert(sizeof(wchar_t) == 4, wchar_t_is_4_bytes_on_OS_X) +// Note that the second "arg" is not in quotes, and must be a valid processor +// symbol in it's own right (no spaces, punctuation etc). + +// Wrapping this in an #ifndef allows external groups to define their own +// compile time assert scheme. +#ifndef _GTMCompileAssert + // We got this technique from here: + // http://unixjunkie.blogspot.com/2007/10/better-compile-time-asserts_29.html + + #define _GTMCompileAssertSymbolInner(line, msg) _GTMCOMPILEASSERT ## line ## __ ## msg + #define _GTMCompileAssertSymbol(line, msg) _GTMCompileAssertSymbolInner(line, msg) + #define _GTMCompileAssert(test, msg) \ + typedef char _GTMCompileAssertSymbol(__LINE__, msg) [ ((test) ? 1 : -1) ] +#endif // _GTMCompileAssert + +// ---------------------------------------------------------------------------- +// CPP symbols defined based on the project settings so the GTM code has +// simple things to test against w/o scattering the knowledge of project +// setting through all the code. +// ---------------------------------------------------------------------------- + +// Provide a single constant CPP symbol that all of GTM uses for ifdefing +// iPhone code. +#if TARGET_OS_IPHONE // iPhone SDK + // For iPhone specific stuff + #define GTM_IPHONE_SDK 1 + #if TARGET_IPHONE_SIMULATOR + #define GTM_IPHONE_SIMULATOR 1 + #else + #define GTM_IPHONE_DEVICE 1 + #endif // TARGET_IPHONE_SIMULATOR + // By default, GTM has provided it's own unittesting support, define this + // to use the support provided by Xcode, especially for the Xcode4 support + // for unittesting. + #ifndef GTM_IPHONE_USE_SENTEST + #define GTM_IPHONE_USE_SENTEST 0 + #endif +#else + // For MacOS specific stuff + #define GTM_MACOS_SDK 1 +#endif + +// Some of our own availability macros +#if GTM_MACOS_SDK +#define GTM_AVAILABLE_ONLY_ON_IPHONE UNAVAILABLE_ATTRIBUTE +#define GTM_AVAILABLE_ONLY_ON_MACOS +#else +#define GTM_AVAILABLE_ONLY_ON_IPHONE +#define GTM_AVAILABLE_ONLY_ON_MACOS UNAVAILABLE_ATTRIBUTE +#endif + +// GC was dropped by Apple, define the old constant incase anyone still keys +// off of it. +#ifndef GTM_SUPPORT_GC + #define GTM_SUPPORT_GC 0 +#endif + +// To simplify support for 64bit (and Leopard in general), we provide the type +// defines for non Leopard SDKs +#if !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) + // NSInteger/NSUInteger and Max/Mins + #ifndef NSINTEGER_DEFINED + #if __LP64__ || NS_BUILD_32_LIKE_64 + typedef long NSInteger; + typedef unsigned long NSUInteger; + #else + typedef int NSInteger; + typedef unsigned int NSUInteger; + #endif + #define NSIntegerMax LONG_MAX + #define NSIntegerMin LONG_MIN + #define NSUIntegerMax ULONG_MAX + #define NSINTEGER_DEFINED 1 + #endif // NSINTEGER_DEFINED + // CGFloat + #ifndef CGFLOAT_DEFINED + #if defined(__LP64__) && __LP64__ + // This really is an untested path (64bit on Tiger?) + typedef double CGFloat; + #define CGFLOAT_MIN DBL_MIN + #define CGFLOAT_MAX DBL_MAX + #define CGFLOAT_IS_DOUBLE 1 + #else /* !defined(__LP64__) || !__LP64__ */ + typedef float CGFloat; + #define CGFLOAT_MIN FLT_MIN + #define CGFLOAT_MAX FLT_MAX + #define CGFLOAT_IS_DOUBLE 0 + #endif /* !defined(__LP64__) || !__LP64__ */ + #define CGFLOAT_DEFINED 1 + #endif // CGFLOAT_DEFINED +#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 + +// Some support for advanced clang static analysis functionality +// See http://clang-analyzer.llvm.org/annotations.html +#ifndef __has_feature // Optional. + #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#endif + +#ifndef NS_RETURNS_RETAINED + #if __has_feature(attribute_ns_returns_retained) + #define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) + #else + #define NS_RETURNS_RETAINED + #endif +#endif + +#ifndef NS_RETURNS_NOT_RETAINED + #if __has_feature(attribute_ns_returns_not_retained) + #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) + #else + #define NS_RETURNS_NOT_RETAINED + #endif +#endif + +#ifndef CF_RETURNS_RETAINED + #if __has_feature(attribute_cf_returns_retained) + #define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) + #else + #define CF_RETURNS_RETAINED + #endif +#endif + +#ifndef CF_RETURNS_NOT_RETAINED + #if __has_feature(attribute_cf_returns_not_retained) + #define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) + #else + #define CF_RETURNS_NOT_RETAINED + #endif +#endif + +#ifndef NS_CONSUMED + #if __has_feature(attribute_ns_consumed) + #define NS_CONSUMED __attribute__((ns_consumed)) + #else + #define NS_CONSUMED + #endif +#endif + +#ifndef CF_CONSUMED + #if __has_feature(attribute_cf_consumed) + #define CF_CONSUMED __attribute__((cf_consumed)) + #else + #define CF_CONSUMED + #endif +#endif + +#ifndef NS_CONSUMES_SELF + #if __has_feature(attribute_ns_consumes_self) + #define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) + #else + #define NS_CONSUMES_SELF + #endif +#endif + +// Defined on 10.6 and above. +#ifndef NS_FORMAT_ARGUMENT + #define NS_FORMAT_ARGUMENT(A) +#endif + +// Defined on 10.6 and above. +#ifndef NS_FORMAT_FUNCTION + #define NS_FORMAT_FUNCTION(F,A) +#endif + +// Defined on 10.6 and above. +#ifndef CF_FORMAT_ARGUMENT + #define CF_FORMAT_ARGUMENT(A) +#endif + +// Defined on 10.6 and above. +#ifndef CF_FORMAT_FUNCTION + #define CF_FORMAT_FUNCTION(F,A) +#endif + +#ifndef GTM_NONNULL + #if defined(__has_attribute) + #if __has_attribute(nonnull) + #define GTM_NONNULL(x) __attribute__((nonnull x)) + #else + #define GTM_NONNULL(x) + #endif + #else + #define GTM_NONNULL(x) + #endif +#endif + +// Invalidates the initializer from which it's called. +#ifndef GTMInvalidateInitializer + #if __has_feature(objc_arc) + #define GTMInvalidateInitializer() \ + do { \ + [self class]; /* Avoid warning of dead store to |self|. */ \ + _GTMDevAssert(NO, @"Invalid initializer."); \ + return nil; \ + } while (0) + #else + #define GTMInvalidateInitializer() \ + do { \ + [self release]; \ + _GTMDevAssert(NO, @"Invalid initializer."); \ + return nil; \ + } while (0) + #endif +#endif + +#ifdef __OBJC__ + +// Declared here so that it can easily be used for logging tracking if +// necessary. See GTMUnitTestDevLog.h for details. +@class NSString; +GTM_EXTERN void _GTMUnitTestDevLog(NSString *format, ...) NS_FORMAT_FUNCTION(1, 2); + +// Macro to allow you to create NSStrings out of other macros. +// #define FOO foo +// NSString *fooString = GTM_NSSTRINGIFY(FOO); +#if !defined (GTM_NSSTRINGIFY) + #define GTM_NSSTRINGIFY_INNER(x) @#x + #define GTM_NSSTRINGIFY(x) GTM_NSSTRINGIFY_INNER(x) +#endif + +// Macro to allow fast enumeration when building for 10.5 or later, and +// reliance on NSEnumerator for 10.4. Remember, NSDictionary w/ FastEnumeration +// does keys, so pick the right thing, nothing is done on the FastEnumeration +// side to be sure you're getting what you wanted. +#ifndef GTM_FOREACH_OBJECT + #if TARGET_OS_IPHONE || !(MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) + #define GTM_FOREACH_ENUMEREE(element, enumeration) \ + for (element in enumeration) + #define GTM_FOREACH_OBJECT(element, collection) \ + for (element in collection) + #define GTM_FOREACH_KEY(element, collection) \ + for (element in collection) + #else + #define GTM_FOREACH_ENUMEREE(element, enumeration) \ + for (NSEnumerator *_ ## element ## _enum = enumeration; \ + (element = [_ ## element ## _enum nextObject]) != nil; ) + #define GTM_FOREACH_OBJECT(element, collection) \ + GTM_FOREACH_ENUMEREE(element, [collection objectEnumerator]) + #define GTM_FOREACH_KEY(element, collection) \ + GTM_FOREACH_ENUMEREE(element, [collection keyEnumerator]) + #endif +#endif + +// ============================================================================ + +// To simplify support for both Leopard and Snow Leopard we declare +// the Snow Leopard protocols that we need here. +#if !defined(GTM_10_6_PROTOCOLS_DEFINED) && !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) +#define GTM_10_6_PROTOCOLS_DEFINED 1 +@protocol NSConnectionDelegate +@end +@protocol NSAnimationDelegate +@end +@protocol NSImageDelegate +@end +@protocol NSTabViewDelegate +@end +#endif // !defined(GTM_10_6_PROTOCOLS_DEFINED) && !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + +// GTM_SEL_STRING is for specifying selector (usually property) names to KVC +// or KVO methods. +// In debug it will generate warnings for undeclared selectors if +// -Wunknown-selector is turned on. +// In release it will have no runtime overhead. +#ifndef GTM_SEL_STRING + #ifdef DEBUG + #define GTM_SEL_STRING(selName) NSStringFromSelector(@selector(selName)) + #else + #define GTM_SEL_STRING(selName) @#selName + #endif // DEBUG +#endif // GTM_SEL_STRING + +#endif // __OBJC__ diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMGarbageCollection.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMGarbageCollection.h new file mode 100644 index 00000000..93d4efab --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMGarbageCollection.h @@ -0,0 +1,72 @@ +// +// GTMGarbageCollection.h +// +// Copyright 2007-2008 Google Inc. +// +// 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 "GTMDefines.h" + +// This allows us to easily move our code from GC to non GC. +// They are no-ops unless we are require Leopard or above. +// See +// http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/index.html +// and +// http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcCoreFoundation.html#//apple_ref/doc/uid/TP40006687-SW1 +// for details. + +#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) && !GTM_IPHONE_SDK +// General use would be to call this through GTMCFAutorelease +// but there may be a reason the you want to make something collectable +// but not autoreleased, especially in pure GC code where you don't +// want to bother with the nop autorelease. Done as a define instead of an +// inline so that tools like Clang's scan-build don't report code as leaking. +#define GTMNSMakeCollectable(cf) ((id)NSMakeCollectable(cf)) + +// GTMNSMakeUncollectable is for global maps, etc. that we don't +// want released ever. You should still retain these in non-gc code. +GTM_INLINE void GTMNSMakeUncollectable(id object) { + [[NSGarbageCollector defaultCollector] disableCollectorForPointer:object]; +} + +// Hopefully no code really needs this, but GTMIsGarbageCollectionEnabled is +// a common way to check at runtime if GC is on. +// There are some places where GC doesn't work w/ things w/in Apple's +// frameworks, so this is here so GTM unittests and detect it, and not run +// individual tests to work around bugs in Apple's frameworks. +GTM_INLINE BOOL GTMIsGarbageCollectionEnabled(void) { + return ([NSGarbageCollector defaultCollector] != nil); +} + +#else + +#define GTMNSMakeCollectable(cf) ((id)(cf)) + +GTM_INLINE void GTMNSMakeUncollectable(id object) { +} + +GTM_INLINE BOOL GTMIsGarbageCollectionEnabled(void) { + return NO; +} + +#endif + +// GTMCFAutorelease makes a CF object collectable in GC mode, or adds it +// to the autorelease pool in non-GC mode. Either way it is taken care +// of. Done as a define instead of an inline so that tools like Clang's +// scan-build don't report code as leaking. +#define GTMCFAutorelease(cf) ([GTMNSMakeCollectable(cf) autorelease]) + diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetchHistory.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetchHistory.h new file mode 100644 index 00000000..96018f5d --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetchHistory.h @@ -0,0 +1,187 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTMHTTPFetchHistory.h +// + +// +// Users of the GTMHTTPFetcher class may optionally create and set a fetch +// history object. The fetch history provides "memory" between subsequent +// fetches, including: +// +// - For fetch responses with Etag headers, the fetch history +// remembers the response headers. Future fetcher requests to the same URL +// will be given an "If-None-Match" header, telling the server to return +// a 304 Not Modified status if the response is unchanged, reducing the +// server load and network traffic. +// +// - Optionally, the fetch history can cache the ETagged data that was returned +// in the responses that contained Etag headers. If a later fetch +// results in a 304 status, the fetcher will return the cached ETagged data +// to the client along with a 200 status, hiding the 304. +// +// - The fetch history can track cookies. +// + +#pragma once + +#import + +#import "GTMHTTPFetcher.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTMHTTPFETCHHISTORY_DEFINE_GLOBALS + #define _EXTERN + #define _INITIALIZE_AS(x) =x +#else + #if defined(__cplusplus) + #define _EXTERN extern "C" + #else + #define _EXTERN extern + #endif + #define _INITIALIZE_AS(x) +#endif + + +// default data cache size for when we're caching responses to handle "not +// modified" errors for the client +#if GTM_IPHONE +// iPhone: up to 1MB memory +_EXTERN const NSUInteger kGTMDefaultETaggedDataCacheMemoryCapacity _INITIALIZE_AS(1*1024*1024); +#else +// Mac OS X: up to 15MB memory +_EXTERN const NSUInteger kGTMDefaultETaggedDataCacheMemoryCapacity _INITIALIZE_AS(15*1024*1024); +#endif + +// forward declarations +@class GTMURLCache; +@class GTMCookieStorage; + +@interface GTMHTTPFetchHistory : NSObject { + @private + GTMURLCache *etaggedDataCache_; + BOOL shouldRememberETags_; + BOOL shouldCacheETaggedData_; // if NO, then only headers are cached + GTMCookieStorage *cookieStorage_; +} + +// With caching enabled, previously-cached data will be returned instead of +// 304 Not Modified responses when repeating a fetch of an URL that previously +// included an ETag header in its response +@property (assign) BOOL shouldRememberETags; // default: NO +@property (assign) BOOL shouldCacheETaggedData; // default: NO + +// the default ETag data cache capacity is kGTMDefaultETaggedDataCacheMemoryCapacity +@property (assign) NSUInteger memoryCapacity; + +@property (retain) GTMCookieStorage *cookieStorage; + +- (id)initWithMemoryCapacity:(NSUInteger)totalBytes + shouldCacheETaggedData:(BOOL)shouldCacheETaggedData; + +- (void)updateRequest:(NSMutableURLRequest *)request isHTTPGet:(BOOL)isHTTPGet; + +- (void)clearETaggedDataCache; +- (void)clearHistory; + +- (void)removeAllCookies; + +@end + + +// GTMURLCache and GTMCachedURLResponse have interfaces similar to their +// NSURLCache counterparts, in hopes that someday the NSURLCache versions +// can be used. But in 10.5.8, those are not reliable enough except when +// used with +setSharedURLCache. Our goal here is just to cache +// responses for handling If-None-Match requests that return +// "Not Modified" responses, not for replacing the general URL +// caches. + +@interface GTMCachedURLResponse : NSObject { + @private + NSURLResponse *response_; + NSData *data_; + NSDate *useDate_; // date this response was last saved or used + NSDate *reservationDate_; // date this response's ETag was used +} + +@property (readonly) NSURLResponse* response; +@property (readonly) NSData* data; + +// date the response was saved or last accessed +@property (retain) NSDate *useDate; + +// date the response's ETag header was last used for a fetch request +@property (retain) NSDate *reservationDate; + +- (id)initWithResponse:(NSURLResponse *)response data:(NSData *)data; +@end + +@interface GTMURLCache : NSObject { + NSMutableDictionary *responses_; // maps request URL to GTMCachedURLResponse + NSUInteger memoryCapacity_; // capacity of NSDatas in the responses + NSUInteger totalDataSize_; // sum of sizes of NSDatas of all responses + NSTimeInterval reservationInterval_; // reservation expiration interval +} + +@property (assign) NSUInteger memoryCapacity; + +- (id)initWithMemoryCapacity:(NSUInteger)totalBytes; + +- (GTMCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request; +- (void)storeCachedResponse:(GTMCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request; +- (void)removeCachedResponseForRequest:(NSURLRequest *)request; +- (void)removeAllCachedResponses; + +// for unit testing +- (void)setReservationInterval:(NSTimeInterval)secs; +- (NSDictionary *)responses; +- (NSUInteger)totalDataSize; +@end + +@interface GTMCookieStorage : NSObject { + @private + // The cookie storage object manages an array holding cookies, but the array + // is allocated externally (it may be in a fetcher object or the static + // fetcher cookie array.) See the fetcher's setCookieStorageMethod: + // for allocation of this object and assignment of its cookies array. + NSMutableArray *cookies_; +} + +// add all NSHTTPCookies in the supplied array to the storage array, +// replacing cookies in the storage array as appropriate +// Side effect: removes expired cookies from the storage array +- (void)setCookies:(NSArray *)newCookies; + +// retrieve all cookies appropriate for the given URL, considering +// domain, path, cookie name, expiration, security setting. +// Side effect: removes expired cookies from the storage array +- (NSArray *)cookiesForURL:(NSURL *)theURL; + +// return a cookie with the same name, domain, and path as the +// given cookie, or else return nil if none found +// +// Both the cookie being tested and all stored cookies should +// be valid (non-nil name, domains, paths) +- (NSHTTPCookie *)cookieMatchingCookie:(NSHTTPCookie *)cookie; + +// remove any expired cookies, excluding cookies with nil expirations +- (void)removeExpiredCookies; + +- (void)removeAllCookies; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcher.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcher.h new file mode 100644 index 00000000..a681390b --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcher.h @@ -0,0 +1,765 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTMHTTPFetcher.h +// + +// This is essentially a wrapper around NSURLConnection for POSTs and GETs. +// If setPostData: is called, then POST is assumed. +// +// When would you use this instead of NSURLConnection? +// +// - When you just want the result from a GET, POST, or PUT +// - When you want the "standard" behavior for connections (redirection handling +// an so on) +// - When you want automatic retry on failures +// - When you want to avoid cookie collisions with Safari and other applications +// - When you are fetching resources with ETags and want to avoid the overhead +// of repeated fetches of unchanged data +// - When you need to set a credential for the http operation +// +// This is assumed to be a one-shot fetch request; don't reuse the object +// for a second fetch. +// +// The fetcher may be created auto-released, in which case it will release +// itself after the fetch completion callback. The fetcher is implicitly +// retained as long as a connection is pending. +// +// But if you may need to cancel the fetcher, retain it and have the delegate +// release the fetcher in the callbacks. +// +// Sample usage: +// +// NSURLRequest *request = [NSURLRequest requestWithURL:myURL]; +// GTMHTTPFetcher* myFetcher = [GTMHTTPFetcher fetcherWithRequest:request]; +// +// // optional upload body data +// [myFetcher setPostData:[postString dataUsingEncoding:NSUTF8StringEncoding]]; +// +// [myFetcher beginFetchWithDelegate:self +// didFinishSelector:@selector(myFetcher:finishedWithData:error:)]; +// +// Upon fetch completion, the callback selector is invoked; it should have +// this signature (you can use any callback method name you want so long as +// the signature matches this): +// +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)retrievedData error:(NSError *)error; +// +// The block callback version looks like: +// +// [myFetcher beginFetchWithCompletionHandler:^(NSData *retrievedData, NSError *error) { +// if (error != nil) { +// // status code or network error +// } else { +// // succeeded +// } +// }]; + +// +// NOTE: Fetches may retrieve data from the server even though the server +// returned an error. The failure selector is called when the server +// status is >= 300, with an NSError having domain +// kGTMHTTPFetcherStatusDomain and code set to the server status. +// +// Status codes are at +// +// +// Threading and queue support: +// +// Callbacks require either that the thread used to start the fetcher have a run +// loop spinning (typically the main thread), or that an NSOperationQueue be +// provided upon which the delegate callbacks will be called. Starting with +// iOS 6 and Mac OS X 10.7, clients may simply create an operation queue for +// callbacks on a background thread: +// +// NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; +// [queue setMaxConcurrentOperationCount:1]; +// fetcher.delegateQueue = queue; +// +// or specify the main queue for callbacks on the main thread: +// +// fetcher.delegateQueue = [NSOperationQueue mainQueue]; +// +// The client may also re-dispatch from the callbacks and notifications to +// a known dispatch queue: +// +// [myFetcher beginFetchWithCompletionHandler:^(NSData *retrievedData, NSError *error) { +// if (error == nil) { +// dispatch_async(myDispatchQueue, ^{ +// ... +// }); +// } +// }]; +// +// +// +// Downloading to disk: +// +// To have downloaded data saved directly to disk, specify either a path for the +// downloadPath property, or a file handle for the downloadFileHandle property. +// When downloading to disk, callbacks will be passed a nil for the NSData* +// arguments. +// +// +// HTTP methods and headers: +// +// Alternative HTTP methods, like PUT, and custom headers can be specified by +// creating the fetcher with an appropriate NSMutableURLRequest +// +// +// Proxies: +// +// Proxy handling is invisible so long as the system has a valid credential in +// the keychain, which is normally true (else most NSURL-based apps would have +// difficulty.) But when there is a proxy authetication error, the the fetcher +// will call the failedWithError: method with the NSURLChallenge in the error's +// userInfo. The error method can get the challenge info like this: +// +// NSURLAuthenticationChallenge *challenge +// = [[error userInfo] objectForKey:kGTMHTTPFetcherErrorChallengeKey]; +// BOOL isProxyChallenge = [[challenge protectionSpace] isProxy]; +// +// If a proxy error occurs, you can ask the user for the proxy username/password +// and call fetcher's setProxyCredential: to provide those for the +// next attempt to fetch. +// +// +// Cookies: +// +// There are three supported mechanisms for remembering cookies between fetches. +// +// By default, GTMHTTPFetcher uses a mutable array held statically to track +// cookies for all instantiated fetchers. This avoids server cookies being set +// by servers for the application from interfering with Safari cookie settings, +// and vice versa. The fetcher cookies are lost when the application quits. +// +// To rely instead on WebKit's global NSHTTPCookieStorage, call +// setCookieStorageMethod: with kGTMHTTPFetcherCookieStorageMethodSystemDefault. +// +// If the fetcher is created from a GTMHTTPFetcherService object +// then the cookie storage mechanism is set to use the cookie storage in the +// service object rather than the static storage. +// +// +// Fetching for periodic checks: +// +// The fetcher object tracks ETag headers from responses and +// provide an "If-None-Match" header. This allows the server to save +// bandwidth by providing a status message instead of repeated response +// data. +// +// To get this behavior, create the fetcher from an GTMHTTPFetcherService object +// and look for a fetch callback error with code 304 +// (kGTMHTTPFetcherStatusNotModified) like this: +// +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)data error:(NSError *)error { +// if ([error code] == kGTMHTTPFetcherStatusNotModified) { +// // |data| is empty; use the data from the previous finishedWithData: for this URL +// } else { +// // handle other server status code +// } +// } +// +// +// Monitoring received data +// +// The optional received data selector can be set with setReceivedDataSelector: +// and should have the signature +// +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher receivedData:(NSData *)dataReceivedSoFar; +// +// The number bytes received so far is available as [fetcher downloadedLength]. +// This number may go down if a redirect causes the download to begin again from +// a new server. +// +// If supplied by the server, the anticipated total download size is available +// as [[myFetcher response] expectedContentLength] (and may be -1 for unknown +// download sizes.) +// +// +// Automatic retrying of fetches +// +// The fetcher can optionally create a timer and reattempt certain kinds of +// fetch failures (status codes 408, request timeout; 503, service unavailable; +// 504, gateway timeout; networking errors NSURLErrorTimedOut and +// NSURLErrorNetworkConnectionLost.) The user may set a retry selector to +// customize the type of errors which will be retried. +// +// Retries are done in an exponential-backoff fashion (that is, after 1 second, +// 2, 4, 8, and so on.) +// +// Enabling automatic retries looks like this: +// [myFetcher setRetryEnabled:YES]; +// +// With retries enabled, the success or failure callbacks are called only +// when no more retries will be attempted. Calling the fetcher's stopFetching +// method will terminate the retry timer, without the finished or failure +// selectors being invoked. +// +// Optionally, the client may set the maximum retry interval: +// [myFetcher setMaxRetryInterval:60.0]; // in seconds; default is 60 seconds +// // for downloads, 600 for uploads +// +// Also optionally, the client may provide a callback selector to determine +// if a status code or other error should be retried. +// [myFetcher setRetrySelector:@selector(myFetcher:willRetry:forError:)]; +// +// If set, the retry selector should have the signature: +// -(BOOL)fetcher:(GTMHTTPFetcher *)fetcher willRetry:(BOOL)suggestedWillRetry forError:(NSError *)error +// and return YES to set the retry timer or NO to fail without additional +// fetch attempts. +// +// The retry method may return the |suggestedWillRetry| argument to get the +// default retry behavior. Server status codes are present in the +// error argument, and have the domain kGTMHTTPFetcherStatusDomain. The +// user's method may look something like this: +// +// -(BOOL)myFetcher:(GTMHTTPFetcher *)fetcher willRetry:(BOOL)suggestedWillRetry forError:(NSError *)error { +// +// // perhaps examine [error domain] and [error code], or [fetcher retryCount] +// // +// // return YES to start the retry timer, NO to proceed to the failure +// // callback, or |suggestedWillRetry| to get default behavior for the +// // current error domain and code values. +// return suggestedWillRetry; +// } + + + +#pragma once + +#import + +#if defined(GTL_TARGET_NAMESPACE) + // we're using target namespace macros + #import "GTLDefines.h" +#elif defined(GDATA_TARGET_NAMESPACE) + #import "GDataDefines.h" +#else + #if TARGET_OS_IPHONE + #ifndef GTM_FOUNDATION_ONLY + #define GTM_FOUNDATION_ONLY 1 + #endif + #ifndef GTM_IPHONE + #define GTM_IPHONE 1 + #endif + #endif +#endif + +#if TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 40000) + #define GTM_BACKGROUND_FETCHING 1 +#endif + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTMHTTPFETCHER_DEFINE_GLOBALS + #define _EXTERN + #define _INITIALIZE_AS(x) =x +#else + #if defined(__cplusplus) + #define _EXTERN extern "C" + #else + #define _EXTERN extern + #endif + #define _INITIALIZE_AS(x) +#endif + +// notifications +// +// fetch started and stopped, and fetch retry delay started and stopped +_EXTERN NSString* const kGTMHTTPFetcherStartedNotification _INITIALIZE_AS(@"kGTMHTTPFetcherStartedNotification"); +_EXTERN NSString* const kGTMHTTPFetcherStoppedNotification _INITIALIZE_AS(@"kGTMHTTPFetcherStoppedNotification"); +_EXTERN NSString* const kGTMHTTPFetcherRetryDelayStartedNotification _INITIALIZE_AS(@"kGTMHTTPFetcherRetryDelayStartedNotification"); +_EXTERN NSString* const kGTMHTTPFetcherRetryDelayStoppedNotification _INITIALIZE_AS(@"kGTMHTTPFetcherRetryDelayStoppedNotification"); + +// callback constants +_EXTERN NSString* const kGTMHTTPFetcherErrorDomain _INITIALIZE_AS(@"com.google.GTMHTTPFetcher"); +_EXTERN NSString* const kGTMHTTPFetcherStatusDomain _INITIALIZE_AS(@"com.google.HTTPStatus"); +_EXTERN NSString* const kGTMHTTPFetcherErrorChallengeKey _INITIALIZE_AS(@"challenge"); +_EXTERN NSString* const kGTMHTTPFetcherStatusDataKey _INITIALIZE_AS(@"data"); // data returned with a kGTMHTTPFetcherStatusDomain error + +enum { + kGTMHTTPFetcherErrorDownloadFailed = -1, + kGTMHTTPFetcherErrorAuthenticationChallengeFailed = -2, + kGTMHTTPFetcherErrorChunkUploadFailed = -3, + kGTMHTTPFetcherErrorFileHandleException = -4, + kGTMHTTPFetcherErrorBackgroundExpiration = -6, + + // The code kGTMHTTPFetcherErrorAuthorizationFailed (-5) has been removed; + // look for status 401 instead. + + kGTMHTTPFetcherStatusNotModified = 304, + kGTMHTTPFetcherStatusBadRequest = 400, + kGTMHTTPFetcherStatusUnauthorized = 401, + kGTMHTTPFetcherStatusForbidden = 403, + kGTMHTTPFetcherStatusPreconditionFailed = 412 +}; + +// cookie storage methods +enum { + kGTMHTTPFetcherCookieStorageMethodStatic = 0, + kGTMHTTPFetcherCookieStorageMethodFetchHistory = 1, + kGTMHTTPFetcherCookieStorageMethodSystemDefault = 2, + kGTMHTTPFetcherCookieStorageMethodNone = 3 +}; + +#ifdef __cplusplus +extern "C" { +#endif + +void GTMAssertSelectorNilOrImplementedWithArgs(id obj, SEL sel, ...); + +// Utility functions for applications self-identifying to servers via a +// user-agent header + +// Make a proper app name without whitespace from the given string, removing +// whitespace and other characters that may be special parsed marks of +// the full user-agent string. +NSString *GTMCleanedUserAgentString(NSString *str); + +// Make an identifier like "MacOSX/10.7.1" or "iPod_Touch/4.1" +NSString *GTMSystemVersionString(void); + +// Make a generic name and version for the current application, like +// com.example.MyApp/1.2.3 relying on the bundle identifier and the +// CFBundleShortVersionString or CFBundleVersion. If no bundle ID +// is available, the process name preceded by "proc_" is used. +NSString *GTMApplicationIdentifier(NSBundle *bundle); + +#ifdef __cplusplus +} // extern "C" +#endif + +@class GTMHTTPFetcher; + +@protocol GTMCookieStorageProtocol +// This protocol allows us to call into the service without requiring +// GTMCookieStorage sources in this project +// +// The public interface for cookie handling is the GTMCookieStorage class, +// accessible from a fetcher service object's fetchHistory or from the fetcher's +// +staticCookieStorage method. +- (NSArray *)cookiesForURL:(NSURL *)theURL; +- (void)setCookies:(NSArray *)newCookies; +@end + +@protocol GTMHTTPFetchHistoryProtocol +// This protocol allows us to call the fetch history object without requiring +// GTMHTTPFetchHistory sources in this project +- (void)updateRequest:(NSMutableURLRequest *)request isHTTPGet:(BOOL)isHTTPGet; +- (BOOL)shouldCacheETaggedData; +- (NSData *)cachedDataForRequest:(NSURLRequest *)request; +- (id )cookieStorage; +- (void)updateFetchHistoryWithRequest:(NSURLRequest *)request + response:(NSURLResponse *)response + downloadedData:(NSData *)downloadedData; +- (void)removeCachedDataForRequest:(NSURLRequest *)request; +@end + +@protocol GTMHTTPFetcherServiceProtocol +// This protocol allows us to call into the service without requiring +// GTMHTTPFetcherService sources in this project + +@property (retain) NSOperationQueue *delegateQueue; + +- (BOOL)fetcherShouldBeginFetching:(GTMHTTPFetcher *)fetcher; +- (void)fetcherDidStop:(GTMHTTPFetcher *)fetcher; + +- (GTMHTTPFetcher *)fetcherWithRequest:(NSURLRequest *)request; +- (BOOL)isDelayingFetcher:(GTMHTTPFetcher *)fetcher; +@end + +@protocol GTMFetcherAuthorizationProtocol +@required +// This protocol allows us to call the authorizer without requiring its sources +// in this project. +- (void)authorizeRequest:(NSMutableURLRequest *)request + delegate:(id)delegate + didFinishSelector:(SEL)sel; + +- (void)stopAuthorization; + +- (void)stopAuthorizationForRequest:(NSURLRequest *)request; + +- (BOOL)isAuthorizingRequest:(NSURLRequest *)request; + +- (BOOL)isAuthorizedRequest:(NSURLRequest *)request; + +@property (retain, readonly) NSString *userEmail; + +@optional + +// Indicate if authorization may be attempted. Even if this succeeds, +// authorization may fail if the user's permissions have been revoked. +@property (readonly) BOOL canAuthorize; + +// For development only, allow authorization of non-SSL requests, allowing +// transmission of the bearer token unencrypted. +@property (assign) BOOL shouldAuthorizeAllRequests; + +#if NS_BLOCKS_AVAILABLE +- (void)authorizeRequest:(NSMutableURLRequest *)request + completionHandler:(void (^)(NSError *error))handler; +#endif + +@property (assign) id fetcherService; // WEAK + +- (BOOL)primeForRefresh; + +@end + +// GTMHTTPFetcher objects are used for async retrieval of an http get or post +// +// See additional comments at the beginning of this file +@interface GTMHTTPFetcher : NSObject { + @protected + NSMutableURLRequest *request_; + NSURLConnection *connection_; + NSMutableData *downloadedData_; + NSString *downloadPath_; + NSString *temporaryDownloadPath_; + NSFileHandle *downloadFileHandle_; + unsigned long long downloadedLength_; + NSURLCredential *credential_; // username & password + NSURLCredential *proxyCredential_; // credential supplied to proxy servers + NSData *postData_; + NSInputStream *postStream_; + NSMutableData *loggedStreamData_; + NSURLResponse *response_; // set in connection:didReceiveResponse: + id delegate_; + SEL finishedSel_; // should by implemented by delegate + SEL sentDataSel_; // optional, set with setSentDataSelector + SEL receivedDataSel_; // optional, set with setReceivedDataSelector +#if NS_BLOCKS_AVAILABLE + void (^completionBlock_)(NSData *, NSError *); + void (^receivedDataBlock_)(NSData *); + void (^sentDataBlock_)(NSInteger, NSInteger, NSInteger); + BOOL (^retryBlock_)(BOOL, NSError *); +#elif !__LP64__ + // placeholders: for 32-bit builds, keep the size of the object's ivar section + // the same with and without blocks + id completionPlaceholder_; + id receivedDataPlaceholder_; + id sentDataPlaceholder_; + id retryPlaceholder_; +#endif + BOOL hasConnectionEnded_; // set if the connection need not be cancelled + BOOL isCancellingChallenge_; // set only when cancelling an auth challenge + BOOL isStopNotificationNeeded_; // set when start notification has been sent + BOOL shouldFetchInBackground_; +#if GTM_BACKGROUND_FETCHING + NSUInteger backgroundTaskIdentifer_; // UIBackgroundTaskIdentifier +#endif + id userData_; // retained, if set by caller + NSMutableDictionary *properties_; // more data retained for caller + NSArray *runLoopModes_; // optional + NSOperationQueue *delegateQueue_; // optional; available iOS 6/10.7 and later + id fetchHistory_; // if supplied by the caller, used for Last-Modified-Since checks and cookies + NSInteger cookieStorageMethod_; // constant from above + id cookieStorage_; + + id authorizer_; + + // the service object that created and monitors this fetcher, if any + id service_; + NSString *serviceHost_; + NSInteger servicePriority_; + NSThread *thread_; + + BOOL isRetryEnabled_; // user wants auto-retry + SEL retrySel_; // optional; set with setRetrySelector + NSTimer *retryTimer_; + NSUInteger retryCount_; + NSTimeInterval maxRetryInterval_; // default 600 seconds + NSTimeInterval minRetryInterval_; // random between 1 and 2 seconds + NSTimeInterval retryFactor_; // default interval multiplier is 2 + NSTimeInterval lastRetryInterval_; + BOOL hasAttemptedAuthRefresh_; + + NSString *comment_; // comment for log + NSString *log_; +#if !STRIP_GTM_FETCH_LOGGING + NSString *logRequestBody_; + NSString *logResponseBody_; + BOOL shouldDeferResponseBodyLogging_; +#endif +} + +// Create a fetcher +// +// fetcherWithRequest will return an autoreleased fetcher, but if +// the connection is successfully created, the connection should retain the +// fetcher for the life of the connection as well. So the caller doesn't have +// to retain the fetcher explicitly unless they want to be able to cancel it. ++ (GTMHTTPFetcher *)fetcherWithRequest:(NSURLRequest *)request; + +// Convenience methods that make a request, like +fetcherWithRequest ++ (GTMHTTPFetcher *)fetcherWithURL:(NSURL *)requestURL; ++ (GTMHTTPFetcher *)fetcherWithURLString:(NSString *)requestURLString; + +// Designated initializer +- (id)initWithRequest:(NSURLRequest *)request; + +// Fetcher request +// +// The underlying request is mutable and may be modified by the caller +@property (retain) NSMutableURLRequest *mutableRequest; + +// Setting the credential is optional; it is used if the connection receives +// an authentication challenge +@property (retain) NSURLCredential *credential; + +// Setting the proxy credential is optional; it is used if the connection +// receives an authentication challenge from a proxy +@property (retain) NSURLCredential *proxyCredential; + +// If post data or stream is not set, then a GET retrieval method is assumed +@property (retain) NSData *postData; +@property (retain) NSInputStream *postStream; + +// The default cookie storage method is kGTMHTTPFetcherCookieStorageMethodStatic +// without a fetch history set, and kGTMHTTPFetcherCookieStorageMethodFetchHistory +// with a fetch history set +// +// Applications needing control of cookies across a sequence of fetches should +// create fetchers from a GTMHTTPFetcherService object (which encapsulates +// fetch history) for a well-defined cookie store +@property (assign) NSInteger cookieStorageMethod; + ++ (id )staticCookieStorage; + +// Object to add authorization to the request, if needed +@property (retain) id authorizer; + +// The service object that created and monitors this fetcher, if any +@property (retain) id service; + +// The host, if any, used to classify this fetcher in the fetcher service +@property (copy) NSString *serviceHost; + +// The priority, if any, used for starting fetchers in the fetcher service +// +// Lower values are higher priority; the default is 0, and values may +// be negative or positive. This priority affects only the start order of +// fetchers that are being delayed by a fetcher service. +@property (assign) NSInteger servicePriority; + +// The thread used to run this fetcher in the fetcher service when no operation +// queue is provided. +@property (retain) NSThread *thread; + +// The delegate is retained during the connection +@property (retain) id delegate; + +// On iOS 4 and later, the fetch may optionally continue while the app is in the +// background until finished or stopped by OS expiration +// +// The default value is NO +// +// For Mac OS X, background fetches are always supported, and this property +// is ignored +@property (assign) BOOL shouldFetchInBackground; + +// The delegate's optional sentData selector may be used to monitor upload +// progress. It should have a signature like: +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher +// didSendBytes:(NSInteger)bytesSent +// totalBytesSent:(NSInteger)totalBytesSent +// totalBytesExpectedToSend:(NSInteger)totalBytesExpectedToSend; +// +// +doesSupportSentDataCallback indicates if this delegate method is supported ++ (BOOL)doesSupportSentDataCallback; + +@property (assign) SEL sentDataSelector; + +// The delegate's optional receivedData selector may be used to monitor download +// progress. It should have a signature like: +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher +// receivedData:(NSData *)dataReceivedSoFar; +// +// The dataReceived argument will be nil when downloading to a path or to a +// file handle. +// +// Applications should not use this method to accumulate the received data; +// the callback method or block supplied to the beginFetch call will have +// the complete NSData received. +@property (assign) SEL receivedDataSelector; + +#if NS_BLOCKS_AVAILABLE +// The full interface to the block is provided rather than just a typedef for +// its parameter list in order to get more useful code completion in the Xcode +// editor +@property (copy) void (^sentDataBlock)(NSInteger bytesSent, NSInteger totalBytesSent, NSInteger bytesExpectedToSend); + +// The dataReceived argument will be nil when downloading to a path or to +// a file handle +@property (copy) void (^receivedDataBlock)(NSData *dataReceivedSoFar); +#endif + +// retrying; see comments at the top of the file. Calling +// setRetryEnabled(YES) resets the min and max retry intervals. +@property (assign, getter=isRetryEnabled) BOOL retryEnabled; + +// Retry selector or block is optional for retries. +// +// If present, it should have the signature: +// -(BOOL)fetcher:(GTMHTTPFetcher *)fetcher willRetry:(BOOL)suggestedWillRetry forError:(NSError *)error +// and return YES to cause a retry. See comments at the top of this file. +@property (assign) SEL retrySelector; + +#if NS_BLOCKS_AVAILABLE +@property (copy) BOOL (^retryBlock)(BOOL suggestedWillRetry, NSError *error); +#endif + +// Retry intervals must be strictly less than maxRetryInterval, else +// they will be limited to maxRetryInterval and no further retries will +// be attempted. Setting maxRetryInterval to 0.0 will reset it to the +// default value, 600 seconds. + +@property (assign) NSTimeInterval maxRetryInterval; + +// Starting retry interval. Setting minRetryInterval to 0.0 will reset it +// to a random value between 1.0 and 2.0 seconds. Clients should normally not +// call this except for unit testing. +@property (assign) NSTimeInterval minRetryInterval; + +// Multiplier used to increase the interval between retries, typically 2.0. +// Clients should not need to call this. +@property (assign) double retryFactor; + +// Number of retries attempted +@property (readonly) NSUInteger retryCount; + +// interval delay to precede next retry +@property (readonly) NSTimeInterval nextRetryInterval; + +// Begin fetching the request +// +// The delegate can optionally implement the finished selectors or pass NULL +// for it. +// +// Returns YES if the fetch is initiated. The delegate is retained between +// the beginFetch call until after the finish callback. +// +// An error is passed to the callback for server statuses 300 or +// higher, with the status stored as the error object's code. +// +// finishedSEL has a signature like: +// - (void)fetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)data error:(NSError *)error; +// +// If the application has specified a downloadPath or downloadFileHandle +// for the fetcher, the data parameter passed to the callback will be nil. + +- (BOOL)beginFetchWithDelegate:(id)delegate + didFinishSelector:(SEL)finishedSEL; + +#if NS_BLOCKS_AVAILABLE +- (BOOL)beginFetchWithCompletionHandler:(void (^)(NSData *data, NSError *error))handler; +#endif + + +// Returns YES if this is in the process of fetching a URL +- (BOOL)isFetching; + +// Cancel the fetch of the request that's currently in progress +- (void)stopFetching; + +// Return the status code from the server response +@property (readonly) NSInteger statusCode; + +// Return the http headers from the response +@property (retain, readonly) NSDictionary *responseHeaders; + +// The response, once it's been received +@property (retain) NSURLResponse *response; + +// Bytes downloaded so far +@property (readonly) unsigned long long downloadedLength; + +// Buffer of currently-downloaded data +@property (readonly, retain) NSData *downloadedData; + +// Path in which to non-atomically create a file for storing the downloaded data +// +// The path must be set before fetching begins. The download file handle +// will be created for the path, and can be used to monitor progress. If a file +// already exists at the path, it will be overwritten. +@property (copy) NSString *downloadPath; + +// If downloadFileHandle is set, data received is immediately appended to +// the file handle rather than being accumulated in the downloadedData property +// +// The file handle supplied must allow writing and support seekToFileOffset:, +// and must be set before fetching begins. Setting a download path will +// override the file handle property. +@property (retain) NSFileHandle *downloadFileHandle; + +// The optional fetchHistory object is used for a sequence of fetchers to +// remember ETags, cache ETagged data, and store cookies. Typically, this +// is set by a GTMFetcherService object when it creates a fetcher. +// +// Side effect: setting fetch history implicitly calls setCookieStorageMethod: +@property (retain) id fetchHistory; + +// userData is retained for the convenience of the caller +@property (retain) id userData; + +// Stored property values are retained for the convenience of the caller +@property (copy) NSMutableDictionary *properties; + +- (void)setProperty:(id)obj forKey:(NSString *)key; // pass nil obj to remove property +- (id)propertyForKey:(NSString *)key; + +- (void)addPropertiesFromDictionary:(NSDictionary *)dict; + +// Comments are useful for logging +@property (copy) NSString *comment; + +- (void)setCommentWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); + +// Log of request and response, if logging is enabled +@property (copy) NSString *log; + +// Callbacks can be invoked on an operation queue rather than via the run loop, +// starting on 10.7 and iOS 6. If a delegate queue is supplied. the run loop +// modes are ignored. +@property (retain) NSOperationQueue *delegateQueue; + +// Using the fetcher while a modal dialog is displayed requires setting the +// run-loop modes to include NSModalPanelRunLoopMode +@property (retain) NSArray *runLoopModes; + +// Users who wish to replace GTMHTTPFetcher's use of NSURLConnection +// can do so globally here. The replacement should be a subclass of +// NSURLConnection. ++ (Class)connectionClass; ++ (void)setConnectionClass:(Class)theClass; + +// Spin the run loop, discarding events, until the fetch has completed +// +// This is only for use in testing or in tools without a user interface. +// +// Synchronous fetches should never be done by shipping apps; they are +// sufficient reason for rejection from the app store. +- (void)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds; + +#if STRIP_GTM_FETCH_LOGGING +// if logging is stripped, provide a stub for the main method +// for controlling logging ++ (void)setLoggingEnabled:(BOOL)flag; +#endif // STRIP_GTM_FETCH_LOGGING + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcherService.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcherService.h new file mode 100644 index 00000000..9c6cd754 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcherService.h @@ -0,0 +1,125 @@ +/* Copyright (c) 2010 Google Inc. + * + * 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. + */ + +// +// GTMHTTPFetcherService.h +// + +// The fetcher service class maintains a history to be used by a sequence +// of fetchers objects generated by the service. +// +// Fetchers that do not need to share a history may be generated independently, +// like +// +// GTMHTTPFetcher* myFetcher = [GTMHTTPFetcher fetcherWithRequest:request]; +// +// Fetchers that should share cookies or an ETagged data cache should be +// generated by a common GTMHTTPFetcherService instance, like +// +// GTMHTTPFetcherService *myFetcherService = [[GTMHTTPFetcherService alloc] init]; +// GTMHTTPFetcher* myFirstFetcher = [myFetcherService fetcherWithRequest:request1]; +// GTMHTTPFetcher* mySecondFetcher = [myFetcherService fetcherWithRequest:request2]; + +#import "GTMHTTPFetcher.h" +#import "GTMHTTPFetchHistory.h" + +@interface GTMHTTPFetcherService : NSObject { + @private + NSMutableDictionary *delayedHosts_; + NSMutableDictionary *runningHosts_; + NSUInteger maxRunningFetchersPerHost_; + + GTMHTTPFetchHistory *fetchHistory_; + NSOperationQueue *delegateQueue_; + NSArray *runLoopModes_; + NSString *userAgent_; + NSTimeInterval timeout_; + NSURLCredential *credential_; // username & password + NSURLCredential *proxyCredential_; // credential supplied to proxy servers + NSInteger cookieStorageMethod_; + + BOOL shouldFetchInBackground_; + + id authorizer_; +} + +// Create a fetcher +// +// These methods will return an autoreleased fetcher, but if +// the fetcher is successfully created, the connection will retain the +// fetcher for the life of the connection as well. So the caller doesn't have +// to retain the fetcher explicitly unless they want to be able to monitor +// or cancel it. +- (GTMHTTPFetcher *)fetcherWithRequest:(NSURLRequest *)request; +- (GTMHTTPFetcher *)fetcherWithURL:(NSURL *)requestURL; +- (GTMHTTPFetcher *)fetcherWithURLString:(NSString *)requestURLString; +- (id)fetcherWithRequest:(NSURLRequest *)request + fetcherClass:(Class)fetcherClass; + +// Queues of delayed and running fetchers. Each dictionary contains arrays +// of fetchers, keyed by host +// +// A max value of 0 means no fetchers should be delayed. +// +// The default limit is 10 simultaneous fetchers targeting each host. +@property (assign) NSUInteger maxRunningFetchersPerHost; +@property (retain, readonly) NSDictionary *delayedHosts; +@property (retain, readonly) NSDictionary *runningHosts; + +- (BOOL)isDelayingFetcher:(GTMHTTPFetcher *)fetcher; + +- (NSUInteger)numberOfFetchers; // running + delayed fetchers +- (NSUInteger)numberOfRunningFetchers; +- (NSUInteger)numberOfDelayedFetchers; + +// Search for running or delayed fetchers with the specified URL. +// +// Returns an array of fetcher objects found, or nil if none found. +- (NSArray *)issuedFetchersWithRequestURL:(NSURL *)requestURL; + +- (void)stopAllFetchers; + +// Properties to be applied to each fetcher; +// see GTMHTTPFetcher.h for descriptions +@property (copy) NSString *userAgent; +@property (assign) NSTimeInterval timeout; +@property (retain) NSOperationQueue *delegateQueue; +@property (retain) NSArray *runLoopModes; +@property (retain) NSURLCredential *credential; +@property (retain) NSURLCredential *proxyCredential; +@property (assign) BOOL shouldFetchInBackground; + +// Fetch history +@property (retain) GTMHTTPFetchHistory *fetchHistory; + +@property (assign) NSInteger cookieStorageMethod; +@property (assign) BOOL shouldRememberETags; // default: NO +@property (assign) BOOL shouldCacheETaggedData; // default: NO + +- (void)clearETaggedDataCache; +- (void)clearHistory; + +@property (nonatomic, retain) id authorizer; + +// Spin the run loop, discarding events, until all running and delayed fetchers +// have completed +// +// This is only for use in testing or in tools without a user interface. +// +// Synchronous fetches should never be done by shipping apps; they are +// sufficient reason for rejection from the app store. +- (void)waitForCompletionOfAllFetchersWithTimeout:(NSTimeInterval)timeoutInSeconds; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMLogger.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMLogger.h new file mode 100644 index 00000000..c4fd1402 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMLogger.h @@ -0,0 +1,504 @@ +// +// GTMLogger.h +// +// Copyright 2007-2008 Google Inc. +// +// 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. +// + +// Key Abstractions +// ---------------- +// +// This file declares multiple classes and protocols that are used by the +// GTMLogger logging system. The 4 main abstractions used in this file are the +// following: +// +// * logger (GTMLogger) - The main logging class that users interact with. It +// has methods for logging at different levels and uses a log writer, a log +// formatter, and a log filter to get the job done. +// +// * log writer (GTMLogWriter) - Writes a given string to some log file, where +// a "log file" can be a physical file on disk, a POST over HTTP to some URL, +// or even some in-memory structure (e.g., a ring buffer). +// +// * log formatter (GTMLogFormatter) - Given a format string and arguments as +// a va_list, returns a single formatted NSString. A "formatted string" could +// be a string with the date prepended, a string with values in a CSV format, +// or even a string of XML. +// +// * log filter (GTMLogFilter) - Given a formatted log message as an NSString +// and the level at which the message is to be logged, this class will decide +// whether the given message should be logged or not. This is a flexible way +// to filter out messages logged at a certain level, messages that contain +// certain text, or filter nothing out at all. This gives the caller the +// flexibility to dynamically enable debug logging in Release builds. +// +// This file also declares some classes to handle the common log writer, log +// formatter, and log filter cases. Callers can also create their own writers, +// formatters, and filters and they can even build them on top of the ones +// declared here. Keep in mind that your custom writer/formatter/filter may be +// called from multiple threads, so it must be thread-safe. + +#import +#import "GTMDefines.h" + +// Predeclaration of used protocols that are declared later in this file. +@protocol GTMLogWriter, GTMLogFormatter, GTMLogFilter; + +// GTMLogger +// +// GTMLogger is the primary user-facing class for an object-oriented logging +// system. It is built on the concept of log formatters (GTMLogFormatter), log +// writers (GTMLogWriter), and log filters (GTMLogFilter). When a message is +// sent to a GTMLogger to log a message, the message is formatted using the log +// formatter, then the log filter is consulted to see if the message should be +// logged, and if so, the message is sent to the log writer to be written out. +// +// GTMLogger is intended to be a flexible and thread-safe logging solution. Its +// flexibility comes from the fact that GTMLogger instances can be customized +// with user defined formatters, filters, and writers. And these writers, +// filters, and formatters can be combined, stacked, and customized in arbitrary +// ways to suit the needs at hand. For example, multiple writers can be used at +// the same time, and a GTMLogger instance can even be used as another +// GTMLogger's writer. This allows for arbitrarily deep logging trees. +// +// A standard GTMLogger uses a writer that sends messages to standard out, a +// formatter that smacks a timestamp and a few other bits of interesting +// information on the message, and a filter that filters out debug messages from +// release builds. Using the standard log settings, a log message will look like +// the following: +// +// 2007-12-30 10:29:24.177 myapp[4588/0xa07d0f60] [lvl=1] foo= +// +// The output contains the date and time of the log message, the name of the +// process followed by its process ID/thread ID, the log level at which the +// message was logged (in the previous example the level was 1: +// kGTMLoggerLevelDebug), and finally, the user-specified log message itself (in +// this case, the log message was @"foo=%@", foo). +// +// Multiple instances of GTMLogger can be created, each configured their own +// way. Though GTMLogger is not a singleton (in the GoF sense), it does provide +// access to a shared (i.e., globally accessible) GTMLogger instance. This makes +// it convenient for all code in a process to use the same GTMLogger instance. +// The shared GTMLogger instance can also be configured in an arbitrary, and +// these configuration changes will affect all code that logs through the shared +// instance. + +// +// Log Levels +// ---------- +// GTMLogger has 3 different log levels: Debug, Info, and Error. GTMLogger +// doesn't take any special action based on the log level; it simply forwards +// this information on to formatters, filters, and writers, each of which may +// optionally take action based on the level. Since log level filtering is +// performed at runtime, log messages are typically not filtered out at compile +// time. The exception to this rule is that calls to the GTMLoggerDebug() macro +// *ARE* filtered out of non-DEBUG builds. This is to be backwards compatible +// with behavior that many developers are currently used to. Note that this +// means that GTMLoggerDebug(@"hi") will be compiled out of Release builds, but +// [[GTMLogger sharedLogger] logDebug:@"hi"] will NOT be compiled out. +// +// Standard loggers are created with the GTMLogLevelFilter log filter, which +// filters out certain log messages based on log level, and some other settings. +// +// In addition to the -logDebug:, -logInfo:, and -logError: methods defined on +// GTMLogger itself, there are also C macros that make usage of the shared +// GTMLogger instance very convenient. These macros are: +// +// GTMLoggerDebug(...) +// GTMLoggerInfo(...) +// GTMLoggerError(...) +// +// Again, a notable feature of these macros is that GTMLogDebug() calls *will be +// compiled out of non-DEBUG builds*. +// +// Standard Loggers +// ---------------- +// GTMLogger has the concept of "standard loggers". A standard logger is simply +// a logger that is pre-configured with some standard/common writer, formatter, +// and filter combination. Standard loggers are created using the creation +// methods beginning with "standard". The alternative to a standard logger is a +// regular logger, which will send messages to stdout, with no special +// formatting, and no filtering. +// +// How do I use GTMLogger? +// ---------------------- +// The typical way you will want to use GTMLogger is to simply use the +// GTMLogger*() macros for logging from code. That way we can easily make +// changes to the GTMLogger class and simply update the macros accordingly. Only +// your application startup code (perhaps, somewhere in main()) should use the +// GTMLogger class directly in order to configure the shared logger, which all +// of the code using the macros will be using. Again, this is just the typical +// situation. +// +// To be complete, there are cases where you may want to use GTMLogger directly, +// or even create separate GTMLogger instances for some reason. That's fine, +// too. +// +// Examples +// -------- +// The following show some common GTMLogger use cases. +// +// 1. You want to log something as simply as possible. Also, this call will only +// appear in debug builds. In non-DEBUG builds it will be completely removed. +// +// GTMLoggerDebug(@"foo = %@", foo); +// +// 2. The previous example is similar to the following. The major difference is +// that the previous call (example 1) will be compiled out of Release builds +// but this statement will not be compiled out. +// +// [[GTMLogger sharedLogger] logDebug:@"foo = %@", foo]; +// +// 3. Send all logging output from the shared logger to a file. We do this by +// creating an NSFileHandle for writing associated with a file, and setting +// that file handle as the logger's writer. +// +// NSFileHandle *f = [NSFileHandle fileHandleForWritingAtPath:@"/tmp/f.log" +// create:YES]; +// [[GTMLogger sharedLogger] setWriter:f]; +// GTMLoggerError(@"hi"); // This will be sent to /tmp/f.log +// +// 4. Create a new GTMLogger that will log to a file. This example differs from +// the previous one because here we create a new GTMLogger that is different +// from the shared logger. +// +// GTMLogger *logger = [GTMLogger standardLoggerWithPath:@"/tmp/temp.log"]; +// [logger logInfo:@"hi temp log file"]; +// +// 5. Create a logger that writes to stdout and does NOT do any formatting to +// the log message. This might be useful, for example, when writing a help +// screen for a command-line tool to standard output. +// +// GTMLogger *logger = [GTMLogger logger]; +// [logger logInfo:@"%@ version 0.1 usage", progName]; +// +// 6. Send log output to stdout AND to a log file. The trick here is that +// NSArrays function as composite log writers, which means when an array is +// set as the log writer, it forwards all logging messages to all of its +// contained GTMLogWriters. +// +// // Create array of GTMLogWriters +// NSArray *writers = [NSArray arrayWithObjects: +// [NSFileHandle fileHandleForWritingAtPath:@"/tmp/f.log" create:YES], +// [NSFileHandle fileHandleWithStandardOutput], nil]; +// +// GTMLogger *logger = [GTMLogger standardLogger]; +// [logger setWriter:writers]; +// [logger logInfo:@"hi"]; // Output goes to stdout and /tmp/f.log +// +// For futher details on log writers, formatters, and filters, see the +// documentation below. +// +// NOTE: GTMLogger is application level logging. By default it does nothing +// with _GTMDevLog/_GTMDevAssert (see GTMDefines.h). An application can choose +// to bridge _GTMDevLog/_GTMDevAssert to GTMLogger by providing macro +// definitions in its prefix header (see GTMDefines.h for how one would do +// that). +// +@interface GTMLogger : NSObject { + @private + id writer_; + id formatter_; + id filter_; +} + +// +// Accessors for the shared logger instance +// + +// Returns a shared/global standard GTMLogger instance. Callers should typically +// use this method to get a GTMLogger instance, unless they explicitly want +// their own instance to configure for their own needs. This is the only method +// that returns a shared instance; all the rest return new GTMLogger instances. ++ (id)sharedLogger; + +// Sets the shared logger instance to |logger|. Future calls to +sharedLogger +// will return |logger| instead. ++ (void)setSharedLogger:(GTMLogger *)logger; + +// +// Creation methods +// + +// Returns a new autoreleased GTMLogger instance that will log to stdout, using +// the GTMLogStandardFormatter, and the GTMLogLevelFilter filter. ++ (id)standardLogger; + +// Same as +standardLogger, but logs to stderr. ++ (id)standardLoggerWithStderr; + +// Same as +standardLogger but levels >= kGTMLoggerLevelError are routed to +// stderr, everything else goes to stdout. ++ (id)standardLoggerWithStdoutAndStderr; + +// Returns a new standard GTMLogger instance with a log writer that will +// write to the file at |path|, and will use the GTMLogStandardFormatter and +// GTMLogLevelFilter classes. If |path| does not exist, it will be created. ++ (id)standardLoggerWithPath:(NSString *)path; + +// Returns an autoreleased GTMLogger instance that will use the specified +// |writer|, |formatter|, and |filter|. ++ (id)loggerWithWriter:(id)writer + formatter:(id)formatter + filter:(id)filter; + +// Returns an autoreleased GTMLogger instance that logs to stdout, with the +// basic formatter, and no filter. The returned logger differs from the logger +// returned by +standardLogger because this one does not do any filtering and +// does not do any special log formatting; this is the difference between a +// "regular" logger and a "standard" logger. ++ (id)logger; + +// Designated initializer. This method returns a GTMLogger initialized with the +// specified |writer|, |formatter|, and |filter|. See the setter methods below +// for what values will be used if nil is passed for a parameter. +- (id)initWithWriter:(id)writer + formatter:(id)formatter + filter:(id)filter; + +// +// Logging methods +// + +// Logs a message at the debug level (kGTMLoggerLevelDebug). +- (void)logDebug:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); +// Logs a message at the info level (kGTMLoggerLevelInfo). +- (void)logInfo:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); +// Logs a message at the error level (kGTMLoggerLevelError). +- (void)logError:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); +// Logs a message at the assert level (kGTMLoggerLevelAssert). +- (void)logAssert:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); + + +// +// Accessors +// + +// Accessor methods for the log writer. If the log writer is set to nil, +// [NSFileHandle fileHandleWithStandardOutput] is used. +- (id)writer; +- (void)setWriter:(id)writer; + +// Accessor methods for the log formatter. If the log formatter is set to nil, +// GTMLogBasicFormatter is used. This formatter will format log messages in a +// plain printf style. +- (id)formatter; +- (void)setFormatter:(id)formatter; + +// Accessor methods for the log filter. If the log filter is set to nil, +// GTMLogNoFilter is used, which allows all log messages through. +- (id)filter; +- (void)setFilter:(id)filter; + +@end // GTMLogger + + +// Helper functions that are used by the convenience GTMLogger*() macros that +// enable the logging of function names. +@interface GTMLogger (GTMLoggerMacroHelpers) +- (void)logFuncDebug:(const char *)func msg:(NSString *)fmt, ... + NS_FORMAT_FUNCTION(2, 3); +- (void)logFuncInfo:(const char *)func msg:(NSString *)fmt, ... + NS_FORMAT_FUNCTION(2, 3); +- (void)logFuncError:(const char *)func msg:(NSString *)fmt, ... + NS_FORMAT_FUNCTION(2, 3); +- (void)logFuncAssert:(const char *)func msg:(NSString *)fmt, ... + NS_FORMAT_FUNCTION(2, 3); +@end // GTMLoggerMacroHelpers + + +// The convenience macros are only defined if they haven't already been defined. +#ifndef GTMLoggerInfo + +// Convenience macros that log to the shared GTMLogger instance. These macros +// are how users should typically log to GTMLogger. Notice that GTMLoggerDebug() +// calls will be compiled out of non-Debug builds. +#define GTMLoggerDebug(...) \ + [[GTMLogger sharedLogger] logFuncDebug:__func__ msg:__VA_ARGS__] +#define GTMLoggerInfo(...) \ + [[GTMLogger sharedLogger] logFuncInfo:__func__ msg:__VA_ARGS__] +#define GTMLoggerError(...) \ + [[GTMLogger sharedLogger] logFuncError:__func__ msg:__VA_ARGS__] +#define GTMLoggerAssert(...) \ + [[GTMLogger sharedLogger] logFuncAssert:__func__ msg:__VA_ARGS__] + +// If we're not in a debug build, remove the GTMLoggerDebug statements. This +// makes calls to GTMLoggerDebug "compile out" of Release builds +#ifndef DEBUG +#undef GTMLoggerDebug +#define GTMLoggerDebug(...) do {} while(0) +#endif + +#endif // !defined(GTMLoggerInfo) + +// Log levels. +typedef enum { + kGTMLoggerLevelUnknown, + kGTMLoggerLevelDebug, + kGTMLoggerLevelInfo, + kGTMLoggerLevelError, + kGTMLoggerLevelAssert, +} GTMLoggerLevel; + + +// +// Log Writers +// + +// Protocol to be implemented by a GTMLogWriter instance. +@protocol GTMLogWriter +// Writes the given log message to where the log writer is configured to write. +- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level; +@end // GTMLogWriter + + +// Simple category on NSFileHandle that makes NSFileHandles valid log writers. +// This is convenient because something like, say, +fileHandleWithStandardError +// now becomes a valid log writer. Log messages are written to the file handle +// with a newline appended. +@interface NSFileHandle (GTMFileHandleLogWriter) +// Opens the file at |path| in append mode, and creates the file with |mode| +// if it didn't previously exist. ++ (id)fileHandleForLoggingAtPath:(NSString *)path mode:(mode_t)mode; +@end // NSFileHandle + + +// This category makes NSArray a GTMLogWriter that can be composed of other +// GTMLogWriters. This is the classic Composite GoF design pattern. When the +// GTMLogWriter -logMessage:level: message is sent to the array, the array +// forwards the message to all of its elements that implement the GTMLogWriter +// protocol. +// +// This is useful in situations where you would like to send log output to +// multiple log writers at the same time. Simply create an NSArray of the log +// writers you wish to use, then set the array as the "writer" for your +// GTMLogger instance. +@interface NSArray (GTMArrayCompositeLogWriter) +@end // GTMArrayCompositeLogWriter + + +// This category adapts the GTMLogger interface so that it can be used as a log +// writer; it's an "adapter" in the GoF Adapter pattern sense. +// +// This is useful when you want to configure a logger to log to a specific +// writer with a specific formatter and/or filter. But you want to also compose +// that with a different log writer that may have its own formatter and/or +// filter. +@interface GTMLogger (GTMLoggerLogWriter) +@end // GTMLoggerLogWriter + + +// +// Log Formatters +// + +// Protocol to be implemented by a GTMLogFormatter instance. +@protocol GTMLogFormatter +// Returns a formatted string using the format specified in |fmt| and the va +// args specified in |args|. +- (NSString *)stringForFunc:(NSString *)func + withFormat:(NSString *)fmt + valist:(va_list)args + level:(GTMLoggerLevel)level NS_FORMAT_FUNCTION(2, 0); +@end // GTMLogFormatter + + +// A basic log formatter that formats a string the same way that NSLog (or +// printf) would. It does not do anything fancy, nor does it add any data of its +// own. +@interface GTMLogBasicFormatter : NSObject + +// Helper method for prettying C99 __func__ and GCC __PRETTY_FUNCTION__ +- (NSString *)prettyNameForFunc:(NSString *)func; + +@end // GTMLogBasicFormatter + + +// A log formatter that formats the log string like the basic formatter, but +// also prepends a timestamp and some basic process info to the message, as +// shown in the following sample output. +// 2007-12-30 10:29:24.177 myapp[4588/0xa07d0f60] [lvl=1] log mesage here +@interface GTMLogStandardFormatter : GTMLogBasicFormatter { + @private + NSDateFormatter *dateFormatter_; // yyyy-MM-dd HH:mm:ss.SSS + NSString *pname_; + pid_t pid_; +} +@end // GTMLogStandardFormatter + + +// +// Log Filters +// + +// Protocol to be imlemented by a GTMLogFilter instance. +@protocol GTMLogFilter +// Returns YES if |msg| at |level| should be filtered out; NO otherwise. +- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level; +@end // GTMLogFilter + + +// A log filter that filters messages at the kGTMLoggerLevelDebug level out of +// non-debug builds. Messages at the kGTMLoggerLevelInfo level are also filtered +// out of non-debug builds unless GTMVerboseLogging is set in the environment or +// the processes's defaults. Messages at the kGTMLoggerLevelError level are +// never filtered. +@interface GTMLogLevelFilter : NSObject +@end // GTMLogLevelFilter + +// A simple log filter that does NOT filter anything out; +// -filterAllowsMessage:level will always return YES. This can be a convenient +// way to enable debug-level logging in release builds (if you so desire). +@interface GTMLogNoFilter : NSObject +@end // GTMLogNoFilter + + +// Base class for custom level filters. Not for direct use, use the minimum +// or maximum level subclasses below. +@interface GTMLogAllowedLevelFilter : NSObject { + @private + NSIndexSet *allowedLevels_; +} +@end + +// A log filter that allows you to set a minimum log level. Messages below this +// level will be filtered. +@interface GTMLogMininumLevelFilter : GTMLogAllowedLevelFilter + +// Designated initializer, logs at levels < |level| will be filtered. +- (id)initWithMinimumLevel:(GTMLoggerLevel)level; + +@end + +// A log filter that allows you to set a maximum log level. Messages whose level +// exceeds this level will be filtered. This is really only useful if you have +// a composite GTMLogger that is sending the other messages elsewhere. +@interface GTMLogMaximumLevelFilter : GTMLogAllowedLevelFilter + +// Designated initializer, logs at levels > |level| will be filtered. +- (id)initWithMaximumLevel:(GTMLoggerLevel)level; + +@end + + +// For subclasses only +@interface GTMLogger (PrivateMethods) + +- (void)logInternalFunc:(const char *)func + format:(NSString *)fmt + valist:(va_list)args + level:(GTMLoggerLevel)level NS_FORMAT_FUNCTION(2, 0); + +@end + diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMMethodCheck.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMMethodCheck.h new file mode 100644 index 00000000..7b0919b0 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMMethodCheck.h @@ -0,0 +1,88 @@ +// +// GTMMethodCheck.h +// +// Copyright 2006-2008 Google Inc. +// +// 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 +#import + +/// A macro for enforcing debug time checks to make sure all required methods are linked in +// +// When using categories, it can be very easy to forget to include the +// implementation of a category. +// Let's say you had a class foo that depended on method bar of class baz, and +// method bar was implemented as a member of a category. +// You could add the following code: +// @implementation foo +// GTM_METHOD_CHECK(baz, bar) +// @end +// and the code would check to make sure baz was implemented just before main +// was called. This works for both dynamic libraries, and executables. +// +// Classes (or one of their superclasses) being checked must conform to the +// NSObject protocol. We will check this, and spit out a warning if a class does +// not conform to NSObject. +// +// This is not compiled into release builds. + +#ifdef DEBUG + +#ifdef __cplusplus +extern "C" { +#endif + +// If you get an error for GTMMethodCheckMethodChecker not being defined, +// you need to link in GTMMethodCheck.m. We keep it hidden so that we can have +// it living in several separate images without conflict. +// Functions with the ((constructor)) attribute are called after all +loads +// have been called. See "Initializing Objective-C Classes" in +// http://developer.apple.com/documentation/DeveloperTools/Conceptual/DynamicLibraries/Articles/DynamicLibraryDesignGuidelines.html#//apple_ref/doc/uid/TP40002013-DontLinkElementID_20 + +__attribute__ ((constructor, visibility("hidden"))) void GTMMethodCheckMethodChecker(void); + +#ifdef __cplusplus +}; +#endif + +// This is the "magic". +// A) we need a multi layer define here so that the stupid preprocessor +// expands __LINE__ out the way we want it. We need LINE so that each of +// out GTM_METHOD_CHECKs generates a unique class method for the class. +#define GTM_METHOD_CHECK(class, method) GTM_METHOD_CHECK_INNER(class, method, __LINE__) +#define GTM_METHOD_CHECK_INNER(class, method, line) GTM_METHOD_CHECK_INNER_INNER(class, method, line) + +// B) Create up a class method called xxGMethodCheckMethod+class+line that the +// GTMMethodCheckMethodChecker function can look for and call. We +// look for GTMMethodCheckMethodChecker to enforce linkage of +// GTMMethodCheck.m. +#define GTM_METHOD_CHECK_INNER_INNER(class, method, line) \ ++ (void)xxGTMMethodCheckMethod ## class ## line { \ + void (*addr)() = GTMMethodCheckMethodChecker; \ + if (addr && ![class instancesRespondToSelector:@selector(method)] \ + && ![class respondsToSelector:@selector(method)]) { \ + fprintf(stderr, "%s:%d: error: We need method '%s' to be linked in for class '%s'\n", \ + __FILE__, line, #method, #class); \ + exit(EX_SOFTWARE); \ + } \ +} + +#else // !DEBUG + +// Do nothing in release. +#define GTM_METHOD_CHECK(class, method) + +#endif // DEBUG diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMNSDictionary+URLArguments.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMNSDictionary+URLArguments.h new file mode 100644 index 00000000..b0944111 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMNSDictionary+URLArguments.h @@ -0,0 +1,36 @@ +// +// GTMNSDictionary+URLArguments.h +// +// Copyright 2006-2008 Google Inc. +// +// 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 + +/// Utility for building a URL or POST argument string. +@interface NSDictionary (GTMNSDictionaryURLArgumentsAdditions) + +/// Returns a dictionary of the decoded key-value pairs in a http arguments +/// string of the form key1=value1&key2=value2&...&keyN=valueN. +/// Keys and values will be unescaped automatically. +/// Only the first value for a repeated key is returned. ++ (NSDictionary *)gtm_dictionaryWithHttpArgumentsString:(NSString *)argString; + +/// Gets a string representation of the dictionary in the form +/// key1=value1&key2=value2&...&keyN=valueN, suitable for use as either +/// URL arguments (after a '?') or POST body. Keys and values will be escaped +/// automatically, so should be unescaped in the dictionary. +- (NSString *)gtm_httpArgumentsString; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h new file mode 100644 index 00000000..d4c7e09a --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h @@ -0,0 +1,41 @@ +// +// GTMNSString+URLArguments.h +// +// Copyright 2006-2008 Google Inc. +// +// 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 + +/// Utilities for encoding and decoding URL arguments. +@interface NSString (GTMNSStringURLArgumentsAdditions) + +/// Returns a string that is escaped properly to be a URL argument. +// +/// This differs from stringByAddingPercentEscapesUsingEncoding: in that it +/// will escape all the reserved characters (per RFC 3986 +/// ) which +/// stringByAddingPercentEscapesUsingEncoding would leave. +/// +/// This will also escape '%', so this should not be used on a string that has +/// already been escaped unless double-escaping is the desired result. +- (NSString*)gtm_stringByEscapingForURLArgument; + +/// Returns the unescaped version of a URL argument +// +/// This has the same behavior as stringByReplacingPercentEscapesUsingEncoding:, +/// except that it will also convert '+' to space. +- (NSString*)gtm_stringByUnescapingFromURLArgument; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2Authentication.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2Authentication.h new file mode 100644 index 00000000..8703164b --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2Authentication.h @@ -0,0 +1,356 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +// This class implements the OAuth 2 protocol for authorizing requests. +// http://tools.ietf.org/html/draft-ietf-oauth-v2 + +#import + +// GTMHTTPFetcher.h brings in GTLDefines/GDataDefines +#import "GTMHTTPFetcher.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTMOAUTH2AUTHENTICATION_DEFINE_GLOBALS + #define _EXTERN + #define _INITIALIZE_AS(x) =x +#else + #if defined(__cplusplus) + #define _EXTERN extern "C" + #else + #define _EXTERN extern + #endif + #define _INITIALIZE_AS(x) +#endif + +// Until all OAuth 2 providers are up to the same spec, we'll provide a crude +// way here to override the "Bearer" string in the Authorization header +#ifndef GTM_OAUTH2_BEARER +#define GTM_OAUTH2_BEARER "Bearer" +#endif + +// Service provider name allows stored authorization to be associated with +// the authorizing service +_EXTERN NSString* const kGTMOAuth2ServiceProviderGoogle _INITIALIZE_AS(@"Google"); + +// +// GTMOAuth2SignIn constants, included here for use by clients +// +_EXTERN NSString* const kGTMOAuth2ErrorDomain _INITIALIZE_AS(@"com.google.GTMOAuth2"); + +// Error userInfo keys +_EXTERN NSString* const kGTMOAuth2ErrorMessageKey _INITIALIZE_AS(@"error"); +_EXTERN NSString* const kGTMOAuth2ErrorRequestKey _INITIALIZE_AS(@"request"); +_EXTERN NSString* const kGTMOAuth2ErrorJSONKey _INITIALIZE_AS(@"json"); + +enum { + // Error code indicating that the window was prematurely closed + kGTMOAuth2ErrorWindowClosed = -1000, + kGTMOAuth2ErrorAuthorizationFailed = -1001, + kGTMOAuth2ErrorTokenExpired = -1002, + kGTMOAuth2ErrorTokenUnavailable = -1003, + kGTMOAuth2ErrorUnauthorizableRequest = -1004 +}; + + +// Notifications for token fetches +_EXTERN NSString* const kGTMOAuth2FetchStarted _INITIALIZE_AS(@"kGTMOAuth2FetchStarted"); +_EXTERN NSString* const kGTMOAuth2FetchStopped _INITIALIZE_AS(@"kGTMOAuth2FetchStopped"); + +_EXTERN NSString* const kGTMOAuth2FetcherKey _INITIALIZE_AS(@"fetcher"); +_EXTERN NSString* const kGTMOAuth2FetchTypeKey _INITIALIZE_AS(@"FetchType"); +_EXTERN NSString* const kGTMOAuth2FetchTypeToken _INITIALIZE_AS(@"token"); +_EXTERN NSString* const kGTMOAuth2FetchTypeRefresh _INITIALIZE_AS(@"refresh"); +_EXTERN NSString* const kGTMOAuth2FetchTypeAssertion _INITIALIZE_AS(@"assertion"); +_EXTERN NSString* const kGTMOAuth2FetchTypeUserInfo _INITIALIZE_AS(@"userInfo"); + +// Token-issuance errors +_EXTERN NSString* const kGTMOAuth2ErrorKey _INITIALIZE_AS(@"error"); +_EXTERN NSString* const kGTMOAuth2ErrorObjectKey _INITIALIZE_AS(@"kGTMOAuth2ErrorObjectKey"); + +_EXTERN NSString* const kGTMOAuth2ErrorInvalidRequest _INITIALIZE_AS(@"invalid_request"); +_EXTERN NSString* const kGTMOAuth2ErrorInvalidClient _INITIALIZE_AS(@"invalid_client"); +_EXTERN NSString* const kGTMOAuth2ErrorInvalidGrant _INITIALIZE_AS(@"invalid_grant"); +_EXTERN NSString* const kGTMOAuth2ErrorUnauthorizedClient _INITIALIZE_AS(@"unauthorized_client"); +_EXTERN NSString* const kGTMOAuth2ErrorUnsupportedGrantType _INITIALIZE_AS(@"unsupported_grant_type"); +_EXTERN NSString* const kGTMOAuth2ErrorInvalidScope _INITIALIZE_AS(@"invalid_scope"); + +// Notification that sign-in has completed, and token fetches will begin (useful +// for displaying interstitial messages after the window has closed) +_EXTERN NSString* const kGTMOAuth2UserSignedIn _INITIALIZE_AS(@"kGTMOAuth2UserSignedIn"); + +// Notification for token changes +_EXTERN NSString* const kGTMOAuth2AccessTokenRefreshed _INITIALIZE_AS(@"kGTMOAuth2AccessTokenRefreshed"); +_EXTERN NSString* const kGTMOAuth2RefreshTokenChanged _INITIALIZE_AS(@"kGTMOAuth2RefreshTokenChanged"); +_EXTERN NSString* const kGTMOAuth2AccessTokenRefreshFailed _INITIALIZE_AS(@"kGTMOAuth2AccessTokenRefreshFailed"); + +// Notification for WebView loading +_EXTERN NSString* const kGTMOAuth2WebViewStartedLoading _INITIALIZE_AS(@"kGTMOAuth2WebViewStartedLoading"); +_EXTERN NSString* const kGTMOAuth2WebViewStoppedLoading _INITIALIZE_AS(@"kGTMOAuth2WebViewStoppedLoading"); +_EXTERN NSString* const kGTMOAuth2WebViewKey _INITIALIZE_AS(@"kGTMOAuth2WebViewKey"); +_EXTERN NSString* const kGTMOAuth2WebViewStopKindKey _INITIALIZE_AS(@"kGTMOAuth2WebViewStopKindKey"); +_EXTERN NSString* const kGTMOAuth2WebViewFinished _INITIALIZE_AS(@"finished"); +_EXTERN NSString* const kGTMOAuth2WebViewFailed _INITIALIZE_AS(@"failed"); +_EXTERN NSString* const kGTMOAuth2WebViewCancelled _INITIALIZE_AS(@"cancelled"); + +// Notification for network loss during html sign-in display +_EXTERN NSString* const kGTMOAuth2NetworkLost _INITIALIZE_AS(@"kGTMOAuthNetworkLost"); +_EXTERN NSString* const kGTMOAuth2NetworkFound _INITIALIZE_AS(@"kGTMOAuthNetworkFound"); + +@interface GTMOAuth2Authentication : NSObject { + @private + NSString *clientID_; + NSString *clientSecret_; + NSString *redirectURI_; + NSMutableDictionary *parameters_; + + // authorization parameters + NSURL *tokenURL_; + NSDate *expirationDate_; + + NSString *authorizationTokenKey_; + + NSDictionary *additionalTokenRequestParameters_; + NSDictionary *additionalGrantTypeRequestParameters_; + + // queue of requests for authorization waiting for a valid access token + GTMHTTPFetcher *refreshFetcher_; + NSMutableArray *authorizationQueue_; + + id fetcherService_; // WEAK + + Class parserClass_; + + BOOL shouldAuthorizeAllRequests_; + + // arbitrary data retained for the user + id userData_; + NSMutableDictionary *properties_; +} + +// OAuth2 standard protocol parameters +// +// These should be the plain strings; any needed escaping will be provided by +// the library. + +// Request properties +@property (copy) NSString *clientID; +@property (copy) NSString *clientSecret; +@property (copy) NSString *redirectURI; +@property (retain) NSString *scope; +@property (retain) NSString *tokenType; +@property (retain) NSString *assertion; +@property (retain) NSString *refreshScope; + +// Apps may optionally add parameters here to be provided to the token +// endpoint on token requests and refreshes. +@property (retain) NSDictionary *additionalTokenRequestParameters; + +// Apps may optionally add parameters here to be provided to the token +// endpoint on specific token requests and refreshes, keyed by the grant_type. +// For example, if a different "type" parameter is required for obtaining +// the auth code and on refresh, this might be: +// +// viewController.authentication.additionalGrantTypeRequestParameters = @{ +// @"authorization_code" : @{ @"type" : @"code" }, +// @"refresh_token" : @{ @"type" : @"refresh" } +// }; +@property (retain) NSDictionary *additionalGrantTypeRequestParameters; + +// Response properties +@property (retain) NSMutableDictionary *parameters; + +@property (retain) NSString *accessToken; +@property (retain) NSString *refreshToken; +@property (retain) NSNumber *expiresIn; +@property (retain) NSString *code; +@property (retain) NSString *errorString; + +// URL for obtaining access tokens +@property (copy) NSURL *tokenURL; + +// Calculated expiration date (expiresIn seconds added to the +// time the access token was received.) +@property (copy) NSDate *expirationDate; + +// Service identifier, like "Google"; not used for authentication +// +// The provider name is just for allowing stored authorization to be associated +// with the authorizing service. +@property (copy) NSString *serviceProvider; + +// User ID; not used for authentication +@property (retain) NSString *userID; + +// User email and verified status; not used for authentication +// +// The verified string can be checked with -boolValue. If the result is false, +// then the email address is listed with the account on the server, but the +// address has not been confirmed as belonging to the owner of the account. +@property (retain) NSString *userEmail; +@property (retain) NSString *userEmailIsVerified; + +// Property indicating if this auth has a refresh or access token so is suitable +// for authorizing a request. This does not guarantee that the token is valid. +@property (readonly) BOOL canAuthorize; + +// Property indicating if this object will authorize plain http request +// (as well as any non-https requests.) Default is NO, only requests with the +// scheme https are authorized, since security may be compromised if tokens +// are sent over the wire using an unencrypted protocol like http. +@property (assign) BOOL shouldAuthorizeAllRequests; + +// userData is retained for the convenience of the caller +@property (retain) id userData; + +// Stored property values are retained for the convenience of the caller +@property (retain) NSDictionary *properties; + +// Property for the optional fetcher service instance to be used to create +// fetchers +// +// Fetcher service objects retain authorizations, so this is weak to avoid +// circular retains. +@property (assign) id fetcherService; // WEAK + +// Alternative JSON parsing class; this should implement the +// GTMOAuth2ParserClass informal protocol. If this property is +// not set, the class SBJSON must be available in the runtime. +@property (assign) Class parserClass; + +// Key for the response parameter used for the authorization header; by default, +// "access_token" is used, but some servers may expect alternatives, like +// "id_token". +@property (copy) NSString *authorizationTokenKey; + +// Convenience method for creating an authentication object ++ (id)authenticationWithServiceProvider:(NSString *)serviceProvider + tokenURL:(NSURL *)tokenURL + redirectURI:(NSString *)redirectURI + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret; + +// Clear out any authentication values, prepare for a new request fetch +- (void)reset; + +// Main authorization entry points +// +// These will refresh the access token, if necessary, add the access token to +// the request, then invoke the callback. +// +// The request argument may be nil to just force a refresh of the access token, +// if needed. +// +// NOTE: To avoid accidental leaks of bearer tokens, the request must +// be for a URL with the scheme https unless the shouldAuthorizeAllRequests +// property is set. + +// The finish selector should have a signature matching +// - (void)authentication:(GTMOAuth2Authentication *)auth +// request:(NSMutableURLRequest *)request +// finishedWithError:(NSError *)error; + +- (void)authorizeRequest:(NSMutableURLRequest *)request + delegate:(id)delegate + didFinishSelector:(SEL)sel; + +#if NS_BLOCKS_AVAILABLE +- (void)authorizeRequest:(NSMutableURLRequest *)request + completionHandler:(void (^)(NSError *error))handler; +#endif + +// Synchronous entry point; authorizing this way cannot refresh an expired +// access token +- (BOOL)authorizeRequest:(NSMutableURLRequest *)request; + +// If the authentication is waiting for a refresh to complete, spin the run +// loop, discarding events, until the fetch has completed +// +// This is only for use in testing or in tools without a user interface. +- (void)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds; + + +////////////////////////////////////////////////////////////////////////////// +// +// Internal properties and methods for use by GTMOAuth2SignIn +// + +// Pending fetcher to get a new access token, if any +@property (retain) GTMHTTPFetcher *refreshFetcher; + +// Check if a request is queued up to be authorized +- (BOOL)isAuthorizingRequest:(NSURLRequest *)request; + +// Check if a request appears to be authorized +- (BOOL)isAuthorizedRequest:(NSURLRequest *)request; + +// Stop any pending refresh fetch. This will also cancel the authorization +// for all fetch requests pending authorization. +- (void)stopAuthorization; + +// Prevents authorization callback for a given request. +- (void)stopAuthorizationForRequest:(NSURLRequest *)request; + +// OAuth fetch user-agent header value +- (NSString *)userAgent; + +// Parse and set token and token secret from response data +- (void)setKeysForResponseString:(NSString *)str; +- (void)setKeysForResponseDictionary:(NSDictionary *)dict; + +// Persistent token string for keychain storage +// +// We'll use the format "refresh_token=foo&serviceProvider=bar" so we can +// easily alter what portions of the auth data are stored +// +// Use these methods for serialization +- (NSString *)persistenceResponseString; +- (void)setKeysForPersistenceResponseString:(NSString *)str; + +// method to begin fetching an access token, used by the sign-in object +- (GTMHTTPFetcher *)beginTokenFetchWithDelegate:(id)delegate + didFinishSelector:(SEL)finishedSel; + +// Entry point to post a notification about a fetcher currently used for +// obtaining or refreshing a token; the sign-in object will also use this +// to indicate when the user's email address is being fetched. +// +// Fetch type constants are above under "notifications for token fetches" +- (void)notifyFetchIsRunning:(BOOL)isStarting + fetcher:(GTMHTTPFetcher *)fetcher + type:(NSString *)fetchType; + +// Arbitrary key-value properties retained for the user +- (void)setProperty:(id)obj forKey:(NSString *)key; +- (id)propertyForKey:(NSString *)key; + +// +// Utilities +// + ++ (NSString *)encodedOAuthValueForString:(NSString *)str; + ++ (NSString *)encodedQueryParametersForDictionary:(NSDictionary *)dict; + ++ (NSDictionary *)dictionaryWithResponseString:(NSString *)responseStr; + ++ (NSDictionary *)dictionaryWithJSONData:(NSData *)data; + ++ (NSString *)scopeWithStrings:(NSString *)firsStr, ... NS_REQUIRES_NIL_TERMINATION; +@end + +#endif // GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2SignIn.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2SignIn.h new file mode 100644 index 00000000..ded279bd --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2SignIn.h @@ -0,0 +1,187 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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 sign-in object opens and closes the web view window as needed for +// users to sign in. For signing in to Google, it also obtains +// the authenticated user's email address. +// +// Typically, this will be managed for the application by +// GTMOAuth2ViewControllerTouch or GTMOAuth2WindowController, so this +// class's interface is interesting only if +// you are creating your own window controller for sign-in. +// +// +// Delegate methods implemented by the window controller +// +// The window controller implements two methods for use by the sign-in object, +// the webRequestSelector and the finishedSelector: +// +// webRequestSelector has a signature matching +// - (void)signIn:(GTMOAuth2SignIn *)signIn displayRequest:(NSURLRequest *)request +// +// The web request selector will be invoked with a request to be displayed, or +// nil to close the window when the final callback request has been encountered. +// +// +// finishedSelector has a signature matching +// - (void)signin:(GTMOAuth2SignIn *)signin finishedWithAuth:(GTMOAuth2Authentication *)auth error:(NSError *)error +// +// The finished selector will be invoked when sign-in has completed, except +// when explicitly canceled by calling cancelSigningIn +// + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +#import +#import + +// GTMHTTPFetcher brings in GTLDefines/GDataDefines +#import "GTMHTTPFetcher.h" + +#import "GTMOAuth2Authentication.h" + +@interface GTMOAuth2SignIn : NSObject { + @private + GTMOAuth2Authentication *auth_; + + // the endpoint for displaying the sign-in page + NSURL *authorizationURL_; + NSDictionary *additionalAuthorizationParameters_; + + id delegate_; + SEL webRequestSelector_; + SEL finishedSelector_; + + BOOL hasHandledCallback_; + + GTMHTTPFetcher *pendingFetcher_; + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + BOOL shouldFetchGoogleUserEmail_; + BOOL shouldFetchGoogleUserProfile_; + NSDictionary *userProfile_; +#endif + + SCNetworkReachabilityRef reachabilityRef_; + NSTimer *networkLossTimer_; + NSTimeInterval networkLossTimeoutInterval_; + BOOL hasNotifiedNetworkLoss_; + + id userData_; +} + +@property (nonatomic, retain) GTMOAuth2Authentication *authentication; + +@property (nonatomic, retain) NSURL *authorizationURL; +@property (nonatomic, retain) NSDictionary *additionalAuthorizationParameters; + +// The delegate is released when signing in finishes or is cancelled +@property (nonatomic, retain) id delegate; +@property (nonatomic, assign) SEL webRequestSelector; +@property (nonatomic, assign) SEL finishedSelector; + +@property (nonatomic, retain) id userData; + +// By default, signing in to Google will fetch the user's email, but will not +// fetch the user's profile. +// +// The email is saved in the auth object. +// The profile is available immediately after sign-in. +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT +@property (nonatomic, assign) BOOL shouldFetchGoogleUserEmail; +@property (nonatomic, assign) BOOL shouldFetchGoogleUserProfile; +@property (nonatomic, retain, readonly) NSDictionary *userProfile; +#endif + +// The default timeout for an unreachable network during display of the +// sign-in page is 30 seconds; set this to 0 to have no timeout +@property (nonatomic, assign) NSTimeInterval networkLossTimeoutInterval; + +// The delegate is retained until sign-in has completed or been canceled +// +// designated initializer +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + delegate:(id)delegate + webRequestSelector:(SEL)webRequestSelector + finishedSelector:(SEL)finishedSelector; + +// A default authentication object for signing in to Google services +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (GTMOAuth2Authentication *)standardGoogleAuthenticationForScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret; +#endif + +#pragma mark Methods used by the Window Controller + +// Start the sequence of fetches and sign-in window display for sign-in +- (BOOL)startSigningIn; + +// Stop any pending fetches, and close the window (but don't call the +// delegate's finishedSelector) +- (void)cancelSigningIn; + +// Window controllers must tell the sign-in object about any redirect +// requested by the web view, and any changes in the webview window title +// +// If these return YES then the event was handled by the +// sign-in object (typically by closing the window) and should be ignored by +// the window controller's web view + +- (BOOL)requestRedirectedToRequest:(NSURLRequest *)redirectedRequest; +- (BOOL)titleChanged:(NSString *)title; +- (BOOL)cookiesChanged:(NSHTTPCookieStorage *)cookieStorage; +- (BOOL)loadFailedWithError:(NSError *)error; + +// Window controllers must tell the sign-in object if the window was closed +// prematurely by the user (but not by the sign-in object); this calls the +// delegate's finishedSelector +- (void)windowWasClosed; + +// Start the sequences for signing in with an authorization code. The +// authentication must contain an authorization code, otherwise the process +// will fail. +- (void)authCodeObtained; + +#pragma mark - + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT +// Revocation of an authorized token from Google ++ (void)revokeTokenForGoogleAuthentication:(GTMOAuth2Authentication *)auth; + +// Create a fetcher for obtaining the user's Google email address or profile, +// according to the current auth scopes. +// +// The auth object must have been created with appropriate scopes. +// +// The fetcher's response data can be parsed with NSJSONSerialization. ++ (GTMHTTPFetcher *)userInfoFetcherWithAuth:(GTMOAuth2Authentication *)auth; +#endif + +#pragma mark - + +// Standard authentication values ++ (NSString *)nativeClientRedirectURI; +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (NSURL *)googleAuthorizationURL; ++ (NSURL *)googleTokenURL; ++ (NSURL *)googleUserInfoURL; +#endif + +@end + +#endif // #if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2ViewControllerTouch.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2ViewControllerTouch.h new file mode 100644 index 00000000..23bb07a9 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2ViewControllerTouch.h @@ -0,0 +1,366 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTMOAuth2ViewControllerTouch.h +// +// This view controller for iPhone handles sign-in via OAuth to Google or +// other services. +// +// This controller is not reusable; create a new instance of this controller +// every time the user will sign in. +// + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +#import + +#if TARGET_OS_IPHONE + +#import + +#import "GTMOAuth2Authentication.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTMOAUTH2VIEWCONTROLLERTOUCH_DEFINE_GLOBALS +#define _EXTERN +#define _INITIALIZE_AS(x) =x +#else +#define _EXTERN extern +#define _INITIALIZE_AS(x) +#endif + +_EXTERN NSString* const kGTMOAuth2KeychainErrorDomain _INITIALIZE_AS(@"com.google.GTMOAuthKeychain"); + +@class GTMOAuth2SignIn; +@class GTMOAuth2ViewControllerTouch; + +typedef void (^GTMOAuth2ViewControllerCompletionHandler)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error); + +@interface GTMOAuth2ViewControllerTouch : UIViewController { + @private + UIButton *backButton_; + UIButton *forwardButton_; + UIActivityIndicatorView *initialActivityIndicator_; + UIView *navButtonsView_; + UIBarButtonItem *rightBarButtonItem_; + UIWebView *webView_; + + // The object responsible for the sign-in networking sequence; it holds + // onto the authentication object as well. + GTMOAuth2SignIn *signIn_; + + // the page request to load when awakeFromNib occurs + NSURLRequest *request_; + + // The user we're calling back + // + // The delegate is retained only until the callback is invoked + // or the sign-in is canceled + id delegate_; + SEL finishedSelector_; + +#if NS_BLOCKS_AVAILABLE + GTMOAuth2ViewControllerCompletionHandler completionBlock_; + + void (^popViewBlock_)(void); +#endif + + NSString *keychainItemName_; + CFTypeRef keychainItemAccessibility_; + + // if non-nil, the html string to be displayed immediately upon opening + // of the web view + NSString *initialHTMLString_; + + // set to 1 or -1 if the user sets the showsInitialActivityIndicator + // property + int mustShowActivityIndicator_; + + // if non-nil, the URL for which cookies will be deleted when the + // browser view is dismissed + NSURL *browserCookiesURL_; + + id userData_; + NSMutableDictionary *properties_; + +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 + // We delegate the decision to our owning NavigationController (if any). + // But, the NavigationController will call us back, and ask us. + // BOOL keeps us from infinite looping. + BOOL isInsideShouldAutorotateToInterfaceOrientation_; +#endif + + // YES, when view first shown in this signIn session. + BOOL isViewShown_; + + // YES, after the view has fully transitioned in. + BOOL didViewAppear_; + + // YES between sends of start and stop notifications + BOOL hasNotifiedWebViewStartedLoading_; + + // To prevent us from calling our delegate's selector more than once. + BOOL hasCalledFinished_; + + // Set in a webView callback. + BOOL hasDoneFinalRedirect_; + + // Set during the pop initiated by the sign-in object; otherwise, + // viewWillDisappear indicates that some external change of the view + // has stopped the sign-in. + BOOL didDismissSelf_; +} + +// the application and service name to use for saving the auth tokens +// to the keychain +@property (nonatomic, copy) NSString *keychainItemName; + +// the keychain item accessibility is a system constant for use +// with kSecAttrAccessible. +// +// Since it's a system constant, we do not need to retain it. +@property (nonatomic, assign) CFTypeRef keychainItemAccessibility; + +// optional html string displayed immediately upon opening the web view +// +// This string is visible just until the sign-in web page loads, and +// may be used for a "Loading..." type of message or to set the +// initial view color +@property (nonatomic, copy) NSString *initialHTMLString; + +// an activity indicator shows during initial webview load when no initial HTML +// string is specified, but the activity indicator can be forced to be shown +// with this property +@property (nonatomic, assign) BOOL showsInitialActivityIndicator; + +// the underlying object to hold authentication tokens and authorize http +// requests +@property (nonatomic, retain, readonly) GTMOAuth2Authentication *authentication; + +// the underlying object which performs the sign-in networking sequence +@property (nonatomic, retain, readonly) GTMOAuth2SignIn *signIn; + +// user interface elements +@property (nonatomic, retain) IBOutlet UIButton *backButton; +@property (nonatomic, retain) IBOutlet UIButton *forwardButton; +@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *initialActivityIndicator; +@property (nonatomic, retain) IBOutlet UIView *navButtonsView; +@property (nonatomic, retain) IBOutlet UIBarButtonItem *rightBarButtonItem; +@property (nonatomic, retain) IBOutlet UIWebView *webView; + +#if NS_BLOCKS_AVAILABLE +// An optional block to be called when the view should be popped. If not set, +// the view controller will use its navigation controller to pop the view. +@property (nonatomic, copy) void (^popViewBlock)(void); +#endif + +// the default timeout for an unreachable network during display of the +// sign-in page is 30 seconds; set this to 0 to have no timeout +@property (nonatomic, assign) NSTimeInterval networkLossTimeoutInterval; + +// if set, cookies are deleted for this URL when the view is hidden +// +// For Google sign-ins, this is set by default to https://google.com/accounts +// but it may be explicitly set to nil to disable clearing of browser cookies +@property (nonatomic, retain) NSURL *browserCookiesURL; + +// userData is retained for the convenience of the caller +@property (nonatomic, retain) id userData; + +// Stored property values are retained for the convenience of the caller +- (void)setProperty:(id)obj forKey:(NSString *)key; +- (id)propertyForKey:(NSString *)key; + +@property (nonatomic, retain) NSDictionary *properties; + +// Method for creating a controller to authenticate to Google services +// +// scope is the requested scope of authorization +// (like "http://www.google.com/m8/feeds") +// +// keychain item name is used for storing the token on the keychain, +// keychainItemName should be like "My Application: Google Latitude" +// (or set to nil if no persistent keychain storage is desired) +// +// the delegate is retained only until the finished selector is invoked +// or the sign-in is canceled +// +// If you don't like the default nibName and bundle, you can change them +// using the UIViewController properties once you've made one of these. +// +// finishedSelector is called after authentication completes. It should follow +// this signature. +// +// - (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController +// finishedWithAuth:(GTMOAuth2Authentication *)auth +// error:(NSError *)error; +// +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (id)controllerWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector; + +- (id)initWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector; + +#if NS_BLOCKS_AVAILABLE ++ (id)controllerWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; + +- (id)initWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; +#endif +#endif + +// Create a controller for authenticating to non-Google services, taking +// explicit endpoint URLs and an authentication object ++ (id)controllerWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName // may be nil + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector; + +// This is the designated initializer +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector; + +#if NS_BLOCKS_AVAILABLE ++ (id)controllerWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName // may be nil + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; + +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; +#endif + +// subclasses may override authNibName to specify a custom name ++ (NSString *)authNibName; + +// subclasses may override authNibBundle to specify a custom bundle ++ (NSBundle *)authNibBundle; + +// subclasses may override setUpNavigation to provide their own navigation +// controls +- (void)setUpNavigation; + +// apps may replace the sign-in class with their own subclass of it ++ (Class)signInClass; ++ (void)setSignInClass:(Class)theClass; + +- (void)cancelSigningIn; + +// revocation of an authorized token from Google +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (void)revokeTokenForGoogleAuthentication:(GTMOAuth2Authentication *)auth; +#endif + +// +// Keychain +// + +// create an authentication object for Google services from the access +// token and secret stored in the keychain; if no token is available, return +// an unauthorized auth object +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (GTMOAuth2Authentication *)authForGoogleFromKeychainForName:(NSString *)keychainItemName + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret; +#endif + +// add tokens from the keychain, if available, to the authentication object +// +// returns YES if the authentication object was authorized from the keychain ++ (BOOL)authorizeFromKeychainForName:(NSString *)keychainItemName + authentication:(GTMOAuth2Authentication *)auth; + +// method for deleting the stored access token and secret, useful for "signing +// out" ++ (BOOL)removeAuthFromKeychainForName:(NSString *)keychainItemName; + +// method for saving the stored access token and secret ++ (BOOL)saveParamsToKeychainForName:(NSString *)keychainItemName + accessibility:(CFTypeRef)accessibility + authentication:(GTMOAuth2Authentication *)auth; + +// older version, defaults to kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly ++ (BOOL)saveParamsToKeychainForName:(NSString *)keychainItemName + authentication:(GTMOAuth2Authentication *)auth; + +@end + +// To function, GTMOAuth2ViewControllerTouch needs a certain amount of access +// to the iPhone's keychain. To keep things simple, its keychain access is +// broken out into a helper class. We declare it here in case you'd like to use +// it too, to store passwords. + +enum { + kGTMOAuth2KeychainErrorBadArguments = -1301, + kGTMOAuth2KeychainErrorNoPassword = -1302 +}; + + +@interface GTMOAuth2Keychain : NSObject + ++ (GTMOAuth2Keychain *)defaultKeychain; + +// OK to pass nil for the error parameter. +- (NSString *)passwordForService:(NSString *)service + account:(NSString *)account + error:(NSError **)error; + +// OK to pass nil for the error parameter. +- (BOOL)removePasswordForService:(NSString *)service + account:(NSString *)account + error:(NSError **)error; + +// OK to pass nil for the error parameter. +// +// accessibility should be one of the constants for kSecAttrAccessible +// such as kSecAttrAccessibleWhenUnlocked +- (BOOL)setPassword:(NSString *)password + forService:(NSString *)service + accessibility:(CFTypeRef)accessibility + account:(NSString *)account + error:(NSError **)error; + +// For unit tests: allow setting a mock object ++ (void)setDefaultKeychain:(GTMOAuth2Keychain *)keychain; + +@end + +#endif // TARGET_OS_IPHONE + +#endif // #if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GTMObjC2Runtime.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMObjC2Runtime.h new file mode 100644 index 00000000..e4e2ac72 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GTMObjC2Runtime.h @@ -0,0 +1,113 @@ +// +// GTMObjC2Runtime.h +// +// Copyright 2007-2008 Google Inc. +// +// 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 +#import "GTMDefines.h" + +// These functions exist for code that we want to compile on both the < 10.5 +// sdks and on the >= 10.5 sdks without warnings. It basically reimplements +// certain parts of the objc2 runtime in terms of the objc1 runtime. It is not +// a complete implementation as I've only implemented the routines I know we +// use. Feel free to add more as necessary. +// These functions are not documented because they conform to the documentation +// for the ObjC2 Runtime. + +#if OBJC_API_VERSION >= 2 // Only have optional and req'd keywords in ObjC2. +#define AT_OPTIONAL @optional +#define AT_REQUIRED @required +#else +#define AT_OPTIONAL +#define AT_REQUIRED +#endif + +// The file objc-runtime.h was moved to runtime.h and in Leopard, objc-runtime.h +// was just a wrapper around runtime.h. For the iPhone SDK, this objc-runtime.h +// is removed in the iPhoneOS2.0 SDK. +// +// The |Object| class was removed in the iPhone2.0 SDK too. +#if GTM_IPHONE_SDK +#import +#import +#else +#import +#import +#endif + +#import + +#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) +#import "objc/Protocol.h" + +OBJC_EXPORT Class object_getClass(id obj); +OBJC_EXPORT const char *class_getName(Class cls); +OBJC_EXPORT BOOL class_conformsToProtocol(Class cls, Protocol *protocol); +OBJC_EXPORT BOOL class_respondsToSelector(Class cls, SEL sel); +OBJC_EXPORT Class class_getSuperclass(Class cls); +OBJC_EXPORT Method *class_copyMethodList(Class cls, unsigned int *outCount); +OBJC_EXPORT SEL method_getName(Method m); +OBJC_EXPORT void method_exchangeImplementations(Method m1, Method m2); +OBJC_EXPORT IMP method_getImplementation(Method method); +OBJC_EXPORT IMP method_setImplementation(Method method, IMP imp); +OBJC_EXPORT struct objc_method_description protocol_getMethodDescription(Protocol *p, + SEL aSel, + BOOL isRequiredMethod, + BOOL isInstanceMethod); +OBJC_EXPORT BOOL sel_isEqual(SEL lhs, SEL rhs); + +// If building for 10.4 but using the 10.5 SDK, don't include these. +#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 +// atomics +// On Leopard these are GC aware +// Intentionally did not include the non-barrier versions, because I couldn't +// come up with a case personally where you wouldn't want to use the +// barrier versions. +GTM_INLINE bool OSAtomicCompareAndSwapPtrBarrier(void *predicate, + void *replacement, + void * volatile *theValue) { +#if defined(__LP64__) && __LP64__ + return OSAtomicCompareAndSwap64Barrier((int64_t)predicate, + (int64_t)replacement, + (int64_t *)theValue); +#else // defined(__LP64__) && __LP64__ + return OSAtomicCompareAndSwap32Barrier((int32_t)predicate, + (int32_t)replacement, + (int32_t *)theValue); +#endif // defined(__LP64__) && __LP64__ +} + +#endif // MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 +#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) + +#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) + +GTM_INLINE BOOL objc_atomicCompareAndSwapGlobalBarrier(id predicate, + id replacement, + volatile id *objectLocation) { + return OSAtomicCompareAndSwapPtrBarrier(predicate, + replacement, + (void * volatile *)objectLocation); +} +GTM_INLINE BOOL objc_atomicCompareAndSwapInstanceVariableBarrier(id predicate, + id replacement, + volatile id *objectLocation) { + return OSAtomicCompareAndSwapPtrBarrier(predicate, + replacement, + (void * volatile *)objectLocation); +} +#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/GoogleOpenSource.h b/External/GoogleOpenSource.framework/Versions/A/Headers/GoogleOpenSource.h new file mode 100644 index 00000000..8703285c --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/GoogleOpenSource.h @@ -0,0 +1,44 @@ +// +// GoogleOpenSource.h +// Google+ iOS SDK +// +// Copyright 2013 Google Inc. +// +// Use of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + + +// GTM. +#import "GTMDefines.h" +#import "GTMHTTPFetcher.h" +#import "GTMHTTPFetcherService.h" +#import "GTMHTTPFetchHistory.h" +#import "GTMLogger.h" +#import "GTMMethodCheck.h" +#import "GTMNSDictionary+URLArguments.h" +#import "GTMNSString+URLArguments.h" +#import "GTMOAuth2Authentication.h" +#import "GTMOAuth2SignIn.h" +#import "GTMOAuth2ViewControllerTouch.h" +#import "GTMObjC2Runtime.h" + +// Chrome. +#import "OpenInChromeController.h" + +// GTL. +#import "GTLDefines.h" +#import "GTLBatchQuery.h" +#import "GTLBatchResult.h" +#import "GTLDateTime.h" +#import "GTLErrorObject.h" +#import "GTLObject.h" +#import "GTLQuery.h" +#import "GTLRuntimeCommon.h" +#import "GTLService.h" +#import "GTLFramework.h" +#import "GTLJSONParser.h" +#import "GTLUtilities.h" + +// GTLPlus. +#import "GTLPlus.h" diff --git a/External/GoogleOpenSource.framework/Versions/A/Headers/OpenInChromeController.h b/External/GoogleOpenSource.framework/Versions/A/Headers/OpenInChromeController.h new file mode 100644 index 00000000..35363a71 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/A/Headers/OpenInChromeController.h @@ -0,0 +1,54 @@ +// Copyright 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#import + +// This class is used to check if Google Chrome is installed in the system and +// to open a URL in Google Chrome either with or without a callback URL. +@interface OpenInChromeController : NSObject + +// Returns a shared instance of the OpenInChromeController. ++ (OpenInChromeController *)sharedInstance; + +// Returns YES if Google Chrome is installed in the user's system. +- (BOOL)isChromeInstalled; + +// Opens a URL in Google Chrome. +- (BOOL)openInChrome:(NSURL *)url; + +// Open a URL in Google Chrome providing a |callbackURL| to return to the app. +// URLs from the same app will be opened in the same tab unless |createNewTab| +// is set to YES. +// |callbackURL| can be nil. +// The return value of this method is YES if the URL is successfully opened. +- (BOOL)openInChrome:(NSURL *)url + withCallbackURL:(NSURL *)callbackURL + createNewTab:(BOOL)createNewTab; + +@end diff --git a/External/GoogleOpenSource.framework/Versions/Current b/External/GoogleOpenSource.framework/Versions/Current new file mode 120000 index 00000000..8c7e5a66 --- /dev/null +++ b/External/GoogleOpenSource.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/External/GooglePlus.framework/GooglePlus b/External/GooglePlus.framework/GooglePlus new file mode 120000 index 00000000..aa81e702 --- /dev/null +++ b/External/GooglePlus.framework/GooglePlus @@ -0,0 +1 @@ +Versions/Current/GooglePlus \ No newline at end of file diff --git a/External/GooglePlus.framework/Headers b/External/GooglePlus.framework/Headers new file mode 120000 index 00000000..a177d2a6 --- /dev/null +++ b/External/GooglePlus.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/External/GooglePlus.framework/Versions/A/GooglePlus b/External/GooglePlus.framework/Versions/A/GooglePlus new file mode 100644 index 00000000..d46ff489 Binary files /dev/null and b/External/GooglePlus.framework/Versions/A/GooglePlus differ diff --git a/External/GooglePlus.framework/Versions/A/Headers/GPPDeepLink.h b/External/GooglePlus.framework/Versions/A/Headers/GPPDeepLink.h new file mode 100644 index 00000000..991a9506 --- /dev/null +++ b/External/GooglePlus.framework/Versions/A/Headers/GPPDeepLink.h @@ -0,0 +1,59 @@ +// +// GPPDeepLink.h +// Google+ iOS SDK +// +// Copyright 2012 Google Inc. +// +// Use of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +#import + +@class GPPDeepLink; + +// A protocol optionally implemented by the client of |GPPDeepLink|. +@protocol GPPDeepLinkDelegate + +// Notifies the client that a deep link has been received either from +// |readDeepLinkAfterInstall| or |handleURL:sourceApplication:annotation:|. +- (void)didReceiveDeepLink:(GPPDeepLink *)deepLink; + +@end + +// This class handles a deep link within a share posted on Google+. +// For more information on deep links, see +// http://developers.google.com/+/mobile/ios/share . +@interface GPPDeepLink : NSObject + +// Sets the delegate to handle the deep link. ++ (void)setDelegate:(id)delegate; + +// Returns a |GPPDeepLink| for your app to handle, or |nil| if not found. The +// deep-link ID can be obtained from |GPPDeepLink|. It is stored when a user +// clicks a link to your app from a Google+ post, but hasn't yet installed your +// app. The user will be redirected to the App Store to install your app. This +// method should be called on or near your app launch to take the user to +// deep-link ID within your app. The delegate will be called if set and if a +// deep link is found. ++ (GPPDeepLink *)readDeepLinkAfterInstall; + +// This method should be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation|. Returns +// |GooglePlusDeepLink| if |GooglePlusDeepLink| handled this URL, |nil| +// otherwise. The delegate will be called if set and if a deep link is found. +// Also see |handleURL:sourceApplication:annotation:| in |GPPURLHandler|. ++ (GPPDeepLink *)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +// The deep-link ID in |GPPDeepLink| that was passed to the app. +- (NSString *)deepLinkID; + +// This instance method indicates where the user came from before arriving in +// your app. This method is provided for you to collect engagement metrics. +// For the possible values, see +// http://developers.google.com/+/mobile/ios/source-values . +- (NSString *)source; + +@end diff --git a/External/GooglePlus.framework/Versions/A/Headers/GPPShare.h b/External/GooglePlus.framework/Versions/A/Headers/GPPShare.h new file mode 100644 index 00000000..1857dc79 --- /dev/null +++ b/External/GooglePlus.framework/Versions/A/Headers/GPPShare.h @@ -0,0 +1,152 @@ +// +// GPPShare.h +// Google+ iOS SDK +// +// Copyright 2012 Google Inc. +// +// Use of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +// To allow a user to share with Google+, please follow these steps: +// +// 0. Create a project on Google API console, +// https://code.google.com/apis/console . Under "API Access", create a +// client ID as "Installed application" with the type "iOS", and +// register the bundle ID of your app. +// +// 1. Initialize the |GPPSignIn| instance with your registered client ID, +// and get the |GPPShare| instance. +// +// [[GPPSignIn shareInstance] setClientID:myClientID]; +// GPPShare *gppShare = [GPPShare sharedInstance]; +// +// 2. In the code where the share dialog will be opened, +// +// [[gppShare shareDialog] open]; +// +// you can optionally call any of the |GPPShareBuilder| methods before +// calling |open|, for example, if there is a particular URL resource to be +// shared, or if you want to set text to prefill user comment in the share +// dialog, such as: +// +// NSURL *urlToShare = [NSURL URLWithString:@"http://www.google.com/"]; +// NSString *prefillText = @"You probably already know this site..."; +// [[[[gppShare shareDialog] setURLToShare:urlToShare] +// setPrefillText:prefillText] open]; +// +// 3. In the '-info.plist' settings for your app, add a URL type to be +// handled by your app. Make the URL scheme the same as your app bundle ID. +// +// 4. In your application delegate, implement: +// - (BOOL)application:(NSString*)application +// openURL:(NSURL *)url +// sourceApplication:(NSString*)sourceApplication +// annotation:(id)annotation { +// if ([gppShare handleURL:url +// sourceApplication:sourceApplication +// annotation:annotation]) { +// return YES; +// } +// // Other handling code here... +// } +// +// 5. Optionally, if you want to be notified of the result of the share action, +// have a delegate class implement |GPPShareDelegate|, for example: +// +// @interface MyDelegateClass : NSObject; +// +// - (void)finishedSharing:(BOOL)shared { +// // The share action was successful if |shared| is YES. +// } +// +// MyDelegateClass *myDelegate = [[MyDelegateClass alloc] init]; +// gppShare.delegate = myDelegate; + +#import + +@class GPPSignIn; + +// The protocol to receive the result of the share action. +@protocol GPPShareDelegate + +// Reports the status of the share action, |shared| is |YES| if user has +// successfully shared her post, |NO| otherwise, such as if the user canceled +// the post. +- (void)finishedSharing:(BOOL)shared; + +@end + +// The builder protocol to open the share dialog. +// For more information on sharing, see +// http://developers.google.com/+/mobile/ios/share . +@protocol GPPShareBuilder + +// Sets the URL resource to be shared. +- (id)setURLToShare:(NSURL *)urlToShare; + +// Sets the text to prefill user's comment in the share dialog. +- (id)setPrefillText:(NSString *)prefillText; + +// Sets the title, description, and thumbnail URL of the shared content preview +// in the share dialog. Only set these fields if you are sharing with a content +// deep link and don't have a URL resource. |title| is required. +- (id)setTitle:(NSString *)title + description:(NSString *)description + thumbnailURL:(NSURL *)thumbnailURL; + +// Sets the content deep-link ID that takes the user straight to your shared +// content. Only set this field if you want the content deep-linking feature. +// The content deep-link ID can either be a fully qualified URI, or URI path, +// which can be up to 512 characters in length. +- (id)setContentDeepLinkID:(NSString *)contentDeepLinkID; + +// Sets the call-to-action button of the shared content preview. +// The call-to-action button consists of a label, URL, and deep-link ID. +// The |label| is a string key defined under "data-calltoactionlabel" on +// http://developers.google.com/+/web/share/interactive#button_attr_calltoactionlabel +// that maps to the actual button text. +// The |url| is where the user is taken to after tapping on the button. +// The optional |deepLinkID| is the call-to-action deep-link ID that takes the +// user straight to a specific action in your app. It can either be a fully +// qualified URI, or URI path, which can be up to 512 characters in length. +// Note: In order to set the call-to-action button: +// 1. User must have been authenticated with scopes including +// "https://www.googleapis.com/auth/plus.login". +// 2. |setURLToShare:| must also be called. +- (id)setCallToActionButtonWithLabel:(NSString *)label + URL:(NSURL *)url + deepLinkID:(NSString *)deepLinkID; + +// Opens the share dialog. Returns |NO| if there was an error, |YES| otherwise. +- (BOOL)open; + +@end + +// The primary class for the share action on Google+. +// For more information on sharing, see +// http://developers.google.com/+/mobile/ios/share . +@interface GPPShare : NSObject + +// The object to be notified when the share action has finished. +@property (nonatomic, assign) id delegate; + +// Returns a shared |GPPShare| instance. +// |[GPPSignIn sharedInstance].clientID| must be initialized with a client ID +// registered in the Google API console, https://code.google.com/apis/console/ +// with the app's bundle ID. ++ (GPPShare *)sharedInstance; + +// Returns a share dialog builder instance. Call its |open| method to +// create the dialog after setting the parameters as needed. +- (id)shareDialog; + +// This method should be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation|. Returns |YES| if +// |GPPShare| handled this URL. +// Also see |handleURL:sourceApplication:annotation:| in |GPPURLHandler|. +- (BOOL)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +@end diff --git a/External/GooglePlus.framework/Versions/A/Headers/GPPSignIn.h b/External/GooglePlus.framework/Versions/A/Headers/GPPSignIn.h new file mode 100644 index 00000000..85446a6e --- /dev/null +++ b/External/GooglePlus.framework/Versions/A/Headers/GPPSignIn.h @@ -0,0 +1,158 @@ +// +// GPPSignIn.h +// Google+ iOS SDK +// +// Copyright 2012 Google Inc. +// +// Use of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +#import + +@class GTLServicePlus; +@class GTMOAuth2Authentication; +@class GTMOAuth2ViewControllerTouch; + +// A protocol implemented by the client of |GPPSignIn| to receive a refresh +// token or an error. +@protocol GPPSignInDelegate + +// The authorization has finished and is successful if |error| is |nil|. +- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth + error:(NSError *)error; + +// Finished disconnecting user from the app. +// The operation was successful if |error| is |nil|. +@optional +- (void)didDisconnectWithError:(NSError *)error; + +@end + +// This class signs the user in with Google. It provides single sign-on +// via the Google+ app (if installed), Chrome for iOS (if installed), or Mobile +// Safari. +// +// For reference, please see "Google+ Sign-In for iOS" at +// https://developers.google.com/+/mobile/ios/sign-in . +// Here is sample code to use |GPPSignIn|: +// 1) Get a reference to the |GPPSignIn| shared instance: +// GPPSignIn *signIn = [GPPSignIn sharedInstance]; +// 2) Set the OAuth 2.0 scopes you want to request: +// [signIn setScopes:[NSArray arrayWithObject: +// @"https://www.googleapis.com/auth/plus.login"]]; +// 2) Call [signIn setDelegate:self]; +// 3) Set up delegate method |finishedWithAuth:error:|. +// 4) Call |handleURL| on the shared instance from |application:openUrl:...| +// in your app delegate. +// 5) Call [signIn authenticate]; +@interface GPPSignIn : NSObject + +// The authentication object for the current user, or |nil| if there is +// currently no logged in user. +@property (nonatomic, readonly) GTMOAuth2Authentication *authentication; + +// The Google user ID. It is only available if |shouldFetchGoogleUserID| is set +// and either |trySilentAuthentication| or |authenticate| has been completed +// successfully. +@property (nonatomic, readonly) NSString *userID; + +// The Google user's email. It is only available if |shouldFetchGoogleUserEmail| +// is set and either |trySilentAuthentication| or |authenticate| has been +// completed successfully. +@property (nonatomic, readonly) NSString *userEmail; + +// The object to be notified when authentication is finished. +@property (nonatomic, assign) id delegate; + +// All properties below are optional parameters. If they need to be set, set +// before calling |authenticate|. + +// The client ID of the app from the Google APIs console. +// Must set for sign-in to work. +@property (nonatomic, copy) NSString *clientID; + +// The API scopes requested by the app in an array of |NSString|s. +// The default value is |@[@"https://www.googleapis.com/auth/plus.login"]|. +@property (nonatomic, copy) NSArray *scopes; + +// Whether or not to attempt Single-Sign-On when signing in. +// If |attemptSSO| is true, the sign-in button tries to authenticate with the +// Google+ application if it is installed. If false, it always uses Google+ via +// Chrome for iOS, if installed, or Mobile Safari for authentication. +// The default value is |YES|. +@property (nonatomic, assign) BOOL attemptSSO; + +// The language for sign-in, in the form of ISO 639-1 language code +// optionally followed by a dash and ISO 3166-1 alpha-2 region code, +// such as |@"it"| or |@"pt-PT"|. +// Only set if different from system default. +@property (nonatomic, copy) NSString *language; + +// Name of the keychain to save the sign-in state. +// Only set if a custom name needs to be used. +@property (nonatomic, copy) NSString *keychainName; + +// An |NSString| array of moment types used by your app. Use values from the +// full list at +// https://developers.google.com/+/api/moment-types . +// such as "http://schemas.google.com/AddActivity". +// This property is required only for writing moments, with +// "https://www.googleapis.com/auth/plus.login" as a scope. +@property (nonatomic, copy) NSArray *actions; + +// Whether or not to fetch user email after signing in. The email is saved in +// the |GTMOAuth2Authentication| object. Note that using this flag automatically +// adds "https://www.googleapis.com/auth/userinfo.email" scope to the request. +@property (nonatomic, assign) BOOL shouldFetchGoogleUserEmail; + +// Whether or not to fetch user ID after signing in. The ID can be retrieved +// by |googleUserID| after user has been authenticated. +// Note, a scope, such as "https://www.googleapis.com/auth/plus.login" or +// "https://www.googleapis.com/auth/plus.me", that provides user ID must be +// included in |scopes| for this flag to work. +@property (nonatomic, assign) BOOL shouldFetchGoogleUserID; + +// Returns a shared |GPPSignIn| instance. ++ (GPPSignIn *)sharedInstance; + +// Checks whether the user has either currently signed in or has previous +// authentication saved in keychain. +- (BOOL)hasAuthInKeychain; + +// Attempts to authenticate silently without user interaction. +// Returns |YES| and calls the delegate if the user has either currently signed +// in or has previous authentication saved in keychain. +// Note that if the previous authentication was revoked by the user, this method +// still returns |YES| but |finishedWithAuth:error:| callback will indicate +// that authentication has failed. +- (BOOL)trySilentAuthentication; + +// Starts the authentication process. Set |attemptSSO| to try single sign-on. +// If |attemptSSO| is true, try to authenticate with the Google+ app, if +// installed. If false, always use Google+ via Chrome or Mobile Safari for +// authentication. The delegate will be called at the end of this process. +- (void)authenticate; + +// This method should be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation|. Returns |YES| if +// |GPPSignIn| handled this URL. +// Also see |handleURL:sourceApplication:annotation:| in |GPPURLHandler|. +- (BOOL)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +// Removes the OAuth 2.0 token from the keychain. +- (void)signOut; + +// Disconnects the user from the app and revokes previous authentication. +// If the operation succeeds, the OAuth 2.0 token is also removed from keychain. +// The token is needed to disconnect so do not call |signOut| if |disconnect| is +// to be called. +- (void)disconnect; + +// Gets a service object which can execute "queries", for example, +// to get list of people that is visible to this app. +- (GTLServicePlus *)plusService; + +@end diff --git a/External/GooglePlus.framework/Versions/A/Headers/GPPSignInButton.h b/External/GooglePlus.framework/Versions/A/Headers/GPPSignInButton.h new file mode 100644 index 00000000..ea263f8d --- /dev/null +++ b/External/GooglePlus.framework/Versions/A/Headers/GPPSignInButton.h @@ -0,0 +1,44 @@ +// +// GPPSignInButton.h +// Google+ iOS SDK +// +// Copyright 2012 Google Inc. +// +// Use of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +#import + +// The various layout styles supported by the GPPSignInButton. +// The minmum size of the button depends on the language used for text. +// The following dimensions (in points) fit for all languages: +// kGPPSignInButtonStyleStandard: 226 x 48 +// kGPPSignInButtonStyleWide: 308 x 48 +// kGPPSignInButtonStyleIconOnly: 46 x 48 (no text, fixed size) +typedef enum { + kGPPSignInButtonStyleStandard = 0, + kGPPSignInButtonStyleWide = 1, + kGPPSignInButtonStyleIconOnly = 2 +} GPPSignInButtonStyle; + +// The various color schemes supported by the GPPSignInButton. +typedef enum { + kGPPSignInButtonColorSchemeDark = 0, + kGPPSignInButtonColorSchemeLight = 1 +} GPPSignInButtonColorScheme; + +// This class provides the Google+ sign-in button. You can instantiate this +// class programmatically or from a NIB file. You should set up the +// |GPPSignIn| shared instance with your client ID and any additional scopes, +// implement the delegate methods for |GPPSignIn|, and add this button to your +// view hierarchy. +@interface GPPSignInButton : UIButton + +// Sets the sign-in button layout style. The default style is standard. +- (void)setStyle:(GPPSignInButtonStyle)style; + +// Sets the sign-in button color scheme. The default scheme is dark. +- (void)setColorScheme:(GPPSignInButtonColorScheme)colorScheme; + +@end diff --git a/External/GooglePlus.framework/Versions/A/Headers/GPPURLHandler.h b/External/GooglePlus.framework/Versions/A/Headers/GPPURLHandler.h new file mode 100644 index 00000000..0e45390f --- /dev/null +++ b/External/GooglePlus.framework/Versions/A/Headers/GPPURLHandler.h @@ -0,0 +1,25 @@ +// +// GPPURLHandler.h +// Google+ iOS SDK +// +// Copyright 2013 Google Inc. +// +// Use of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +#import + +@interface GPPURLHandler : NSObject + +// Calls |handleURL:sourceApplication:annotation:| for +// |[GPPSignIn sharedInstance]|, |[GPPShare sharedInstance]|, and +// |GPPDeepLink|, and returns |YES| if any of them handles the URL. +// This method can be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation| instead of calling +// those methods individually. ++ (BOOL)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +@end diff --git a/External/GooglePlus.framework/Versions/A/Headers/GooglePlus.h b/External/GooglePlus.framework/Versions/A/Headers/GooglePlus.h new file mode 100644 index 00000000..8134aa82 --- /dev/null +++ b/External/GooglePlus.framework/Versions/A/Headers/GooglePlus.h @@ -0,0 +1,16 @@ +// +// GooglePlus.h +// Google+ iOS SDK +// +// Copyright 2013 Google Inc. +// +// Use of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +// G+ SDK. +#import "GPPDeepLink.h" +#import "GPPShare.h" +#import "GPPSignIn.h" +#import "GPPSignInButton.h" +#import "GPPURLHandler.h" diff --git a/External/GooglePlus.framework/Versions/Current b/External/GooglePlus.framework/Versions/Current new file mode 120000 index 00000000..8c7e5a66 --- /dev/null +++ b/External/GooglePlus.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/External/Localytics/LICENSE b/External/Localytics/LICENSE index 382d0766..ad0e0d5d 100755 --- a/External/Localytics/LICENSE +++ b/External/Localytics/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009, Char Software, Inc. d/b/a Localytics +Copyright (c) 2013, Char Software, Inc. d/b/a Localytics All rights reserved. Redistribution and use in source and binary forms, with or without @@ -18,4 +18,5 @@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/External/Localytics/LocalyticsDatabase.h b/External/Localytics/LocalyticsDatabase.h index 6c6ba7da..1bd7d07f 100644 --- a/External/Localytics/LocalyticsDatabase.h +++ b/External/Localytics/LocalyticsDatabase.h @@ -18,6 +18,8 @@ sqlite3 *_databaseConnection; } +@property (nonatomic, assign, readonly) BOOL firstRun; + - (unsigned long long)databaseSize; - (int)eventCount; - (NSTimeInterval)createdTimestamp; @@ -50,6 +52,8 @@ - (BOOL)isOptedOut; - (BOOL)setOptedOut:(BOOL)optOut; +- (NSString *)appVersion; +- (BOOL)updateAppVersion:(NSString *)appVersion; - (NSString *)installId; - (NSString *)appKey; // Most recent app key-- may not be that used to open the session. diff --git a/External/Localytics/LocalyticsDatabase.m b/External/Localytics/LocalyticsDatabase.m index 05e64c8e..d1e68a08 100644 --- a/External/Localytics/LocalyticsDatabase.m +++ b/External/Localytics/LocalyticsDatabase.m @@ -29,6 +29,7 @@ - (void)upgradeToSchemaV10; - (void)upgradeToSchemaV11; - (void)upgradeToSchemaV12; +- (void)upgradeToSchemaV13; - (void)moveDbToCaches; - (NSString *)randomUUID; @end @@ -74,12 +75,12 @@ } // Check db connection, creating schema if necessary. - BOOL firstRun = NO; + _firstRun = NO; if (code == SQLITE_OK) { sqlite3_busy_timeout(_databaseConnection, BUSY_TIMEOUT); // Defaults to 0, otherwise. if ([self schemaVersion] == 0) { [self createSchema]; - firstRun = YES; + _firstRun = YES; } } @@ -117,9 +118,12 @@ if ([self schemaVersion] < 12) { [self upgradeToSchemaV12]; } + if ([self schemaVersion] < 13) { + [self upgradeToSchemaV13]; + } // Perfrorm first run actions - if(firstRun) + if(_firstRun) { [self collectFacebookAttributionIfAvailable]; } @@ -672,6 +676,29 @@ } } +- (void)upgradeToSchemaV13 +{ + int code = sqlite3_exec(_databaseConnection, "BEGIN", NULL, NULL, NULL); + + if (code == SQLITE_OK) { + code = sqlite3_exec(_databaseConnection, + "ALTER TABLE localytics_info ADD app_version CHAR(64)", + NULL, NULL, NULL); + } + + if (code == SQLITE_OK) { + code = sqlite3_exec(_databaseConnection, + "UPDATE localytics_info set schema_version = 13", + NULL, NULL, NULL); + } + + // Commit transaction. + if (code == SQLITE_OK || code == SQLITE_DONE) { + sqlite3_exec(_databaseConnection, "COMMIT", NULL, NULL, NULL); + } else { + sqlite3_exec(_databaseConnection, "ROLLBACK", NULL, NULL, NULL); + } +} - (unsigned long long)databaseSize { unsigned long long size = 0; @@ -756,6 +783,30 @@ return code == SQLITE_OK; } +- (NSString *)appVersion { + NSString *appVersion = nil; + + sqlite3_stmt *selectAppVersion; + sqlite3_prepare_v2(_databaseConnection, "SELECT app_version FROM localytics_info", -1, &selectAppVersion, NULL); + int code = sqlite3_step(selectAppVersion); + if (code == SQLITE_ROW) { + char* chars = (char *)sqlite3_column_text(selectAppVersion, 0); + if(chars) appVersion = [NSString stringWithUTF8String:chars]; + } + sqlite3_finalize(selectAppVersion); + + return appVersion; +} + +- (BOOL)updateAppVersion:(NSString *)appVersion { + sqlite3_stmt *updateAppVersion; + sqlite3_prepare_v2(_databaseConnection, "UPDATE localytics_info set app_version = ?", -1, &updateAppVersion, NULL); + sqlite3_bind_text (updateAppVersion, 1, [appVersion UTF8String], -1, SQLITE_TRANSIENT); + int code = sqlite3_step(updateAppVersion); + sqlite3_finalize(updateAppVersion); + return (code == SQLITE_DONE); +} + - (NSString *)customDimension:(int)dimension { if(dimension < 0 || dimension > 9) { return nil; diff --git a/External/Localytics/LocalyticsSession+Private.h b/External/Localytics/LocalyticsSession+Private.h index 26590c96..629715b2 100644 --- a/External/Localytics/LocalyticsSession+Private.h +++ b/External/Localytics/LocalyticsSession+Private.h @@ -40,7 +40,6 @@ NSMutableString *_screens; // Comma-delimited list of screens tagged during this session. NSTimeInterval _sessionActiveDuration; // Duration that session open. BOOL _sessionHasBeenOpen; // Whether or not this session has ever been open. - BOOL _delaySession; // Whether or not the server should delay processing on this upload LocalyticsDatabase *_db; // Localytics database reference LocalyticsUploader *_uploader; // Localytics uploader reference } @@ -60,8 +59,10 @@ @property (nonatomic, retain) NSMutableString *screens; @property (nonatomic, assign) NSTimeInterval sessionActiveDuration; @property (nonatomic, assign) BOOL sessionHasBeenOpen; -@property (nonatomic, assign) BOOL delaySession; @property (nonatomic, assign) NSInteger sessionNumber; +@property (nonatomic, assign) BOOL needsSessionStartActions; +@property (nonatomic, assign) BOOL needsFirstRunActions; +@property (nonatomic, assign) BOOL needsUpgradeActions; // Private methods. + (id)allocFactory; @@ -80,7 +81,9 @@ - (LocalyticsDatabase *)db; - (LocalyticsUploader *)uploader; - (BOOL)uploadIsNeeded; - +- (void)onStartSession; +- (void)onFirstRun; +- (void)onUpgrade; // Datapoint methods. - (NSString *)customDimensions; diff --git a/External/Localytics/LocalyticsSession.h b/External/Localytics/LocalyticsSession.h index 3601f56a..9bd51498 100644 --- a/External/Localytics/LocalyticsSession.h +++ b/External/Localytics/LocalyticsSession.h @@ -10,7 +10,7 @@ #import #import -#define CLIENT_VERSION @"2.17.3" +#define CLIENT_VERSION @"2.18.0" #define MARKETING_PLATFORM /*! diff --git a/External/Localytics/LocalyticsSession.m b/External/Localytics/LocalyticsSession.m index 7d73de6c..9abc6f77 100644 --- a/External/Localytics/LocalyticsSession.m +++ b/External/Localytics/LocalyticsSession.m @@ -49,12 +49,14 @@ static LocalyticsSession *_sharedLocalyticsSession = nil; @synthesize screens = _screens; @synthesize sessionActiveDuration = _sessionActiveDuration; @synthesize sessionHasBeenOpen = _sessionHasBeenOpen; -@synthesize delaySession = _delaySession; @synthesize sessionNumber = _sessionNumber; @synthesize enableHTTPS = _enableHTTPS; @synthesize loggingEnabled = _loggingEnabled; @synthesize localyticsDelegate = _localyticsDelegate; @synthesize facebookAttribution = _facebookAttribution; +@synthesize needsSessionStartActions = _needsSessionStartActions; +@synthesize needsFirstRunActions = _needsFirstRunActions; +@synthesize needsUpgradeActions = _needsUpgradeActions; // Stores the last location passed in to the app. CLLocationCoordinate2D lastDeviceLocation = {0,0}; @@ -91,7 +93,9 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; _queue = dispatch_queue_create("com.Localytics.operations", DISPATCH_QUEUE_SERIAL); _criticalGroup = dispatch_group_create(); _enableHTTPS = NO; - _delaySession = NO; + _needsSessionStartActions = NO; + _needsFirstRunActions = NO; + _needsUpgradeActions = NO; [_sharedLocalyticsSession db]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; @@ -135,11 +139,21 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; // Record the key for future checks. [[[LocalyticsSession shared] db] updateAppKey:appKey]; } + + // Check for first run + self.needsFirstRunActions = [[[LocalyticsSession shared] db] firstRun]; + + // Check for app upgrade + NSString *currentAppVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; + NSString *storedAppVersion = [[[LocalyticsSession shared] db] appVersion]; + if (storedAppVersion && ![currentAppVersion isEqualToString:storedAppVersion]) + self.needsUpgradeActions = YES; + if (storedAppVersion == nil || ![currentAppVersion isEqualToString:storedAppVersion]) + [[[LocalyticsSession shared] db] updateAppVersion:currentAppVersion]; self.applicationKey = appKey; self.hasInitialized = YES; self.facebookAttribution = [[[LocalyticsSession shared] db] facebookAttributionFromDb]; - self.delaySession = self.facebookAttribution != nil; LocalyticsLog("Object Initialized. Application's key is: %@", self.applicationKey); @@ -634,8 +648,6 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; } @catch (NSException * e) { } }); - - [self uploadPartnerAttributions]; } - (BOOL)uploadIsNeeded @@ -643,21 +655,11 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; return [[self db] unstagedEventCount] > 0; } -- (void)uploadPartnerAttributions -{ - dispatch_group_async(_criticalGroup, _queue, ^{ - @try { - if (!self.facebookAttribution) - return; - - [[self uploader] uploaderAttributionWithApplicationKey:self.applicationKey - attribution:self.facebookAttribution - installId:[self installationId] - advertisingIdentifier:[self advertisingIdentifier]]; - } - @catch (NSException *e) {} - }); -} +- (void)onStartSession {} + +- (void)onFirstRun {} + +- (void)onUpgrade {} #pragma mark Private Methods @@ -669,6 +671,23 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; - (void)uploadCallback:(NSDictionary*)info { #pragma unused(info) + if (self.needsFirstRunActions) + { + [self onFirstRun]; + self.needsFirstRunActions = NO; + } + + if (self.needsUpgradeActions) + { + [self onUpgrade]; + self.needsUpgradeActions = NO; + } + + if (self.needsSessionStartActions) + { + [self onStartSession]; + self.needsSessionStartActions = NO; + } } - (void)dequeueCloseEventBlobString @@ -773,6 +792,12 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; self.isSessionOpen = YES; self.sessionHasBeenOpen = YES; LocalyticsLog("Succesfully opened session. UUID is: %@", self.sessionUUID); + + // Queue up a call to onStartSession after upload + self.needsSessionStartActions = YES; + + // Upload after opening session successfully + [self upload]; } else { [db rollbackTransaction:t]; @@ -898,6 +923,13 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; [headerString appendString:[NSString stringWithFormat:@",\"%@\":%@", PARAM_JAILBROKEN, [self isDeviceJailbroken] ? @"true" : @"false"]]; [headerString appendString:[NSString stringWithFormat:@",\"%@\":%d", PARAM_TIMEZONE_OFFSET, [[NSTimeZone localTimeZone] secondsFromGMT]]]; + // >> Attribution information + // + if (self.facebookAttribution) + { + [headerString appendString:[self formatAttributeWithName:PARAM_FB_ATTRIBUTION value:self.facebookAttribution]]; + } + // Close second level - attributes [headerString appendString:@"}"]; @@ -1198,27 +1230,27 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; */ - (NSString *)installationId { - NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; - NSString *installId = [prefs stringForKey:PREFERENCES_KEY]; - - if(installId == nil) - { - LocalyticsLog("Install ID not found in preferences, checking DB"); - installId = [[self db] installId]; - } - - // If it hasn't been found yet, generate a new one. - if(installId == nil) - { - LocalyticsLog("Install ID not find one in database, generating a new one."); - installId = [self randomUUID]; - } - - // Store the newly generated installId - [prefs setObject:installId forKey:PREFERENCES_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - return installId; + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + NSString *installId = [prefs stringForKey:PREFERENCES_KEY]; + + if(installId == nil) + { + LocalyticsLog("Install ID not found in preferences, checking DB"); + installId = [[self db] installId]; + } + + // If it hasn't been found yet, generate a new one. + if(installId == nil) + { + LocalyticsLog("Install ID not find one in database, generating a new one."); + installId = [self randomUUID]; + } + + // Store the newly generated installId + [prefs setObject:installId forKey:PREFERENCES_KEY]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + return installId; } /*! @@ -1259,7 +1291,12 @@ CLLocationCoordinate2D lastDeviceLocation = {0,0}; */ - (NSString *)appVersion { - return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; + NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; + + if (version == nil || [version isEqualToString:@""]) + version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; + + return version; } - (NSString *)customDimension:(int)dimension diff --git a/External/Localytics/LocalyticsUploader.h b/External/Localytics/LocalyticsUploader.h index 256b05fa..e3fd94fe 100644 --- a/External/Localytics/LocalyticsUploader.h +++ b/External/Localytics/LocalyticsUploader.h @@ -56,16 +56,6 @@ extern NSString * const kLocalyticsKeyResponseBody; - (void)uploaderWithApplicationKey:(NSString *)localyticsApplicationKey useHTTPS:(BOOL)useHTTPS installId:(NSString *)installId libraryVersion:(NSString *)libraryVersion resultTarget:(id)target callback:(SEL)callbackMethod; -/*! - @method LocalyticsUploader - @abstract Upload attribution data to Localytics. - @param localyticsApplicationKey the Localytics application ID - @param attribution Attribution cookie captured at install time - @param installId Install id passed to the server in the x-install-id header field. - @param advertisingIdentifier The Apple 'advertisingidentifier' - */ -- (void)uploaderAttributionWithApplicationKey:(NSString *)appKey attribution:(NSString *)attribution installId:(NSString *)installId advertisingIdentifier:(NSString *)advertisingIdentifier; - /*! @method uploadTimeStamp @abstract Retrieve upload TimeStamp. diff --git a/External/Localytics/LocalyticsUploader.m b/External/Localytics/LocalyticsUploader.m index 8a71da05..58dc3aaf 100644 --- a/External/Localytics/LocalyticsUploader.m +++ b/External/Localytics/LocalyticsUploader.m @@ -22,10 +22,6 @@ #define LOCALYTICS_URL_SECURED @"https://analytics.localytics.com/api/v2/applications/%@/uploads" #endif -#ifndef LOCALYTICS_ATTRIBUTION_SERVER -#define LOCALYTICS_ATTRIBUTION_SERVER @"http://a.localytics.com/fb_install/" -#endif - NSString * const kLocalyticsKeyResponseBody = @"localytics.key.responseBody"; @interface LocalyticsUploader () @@ -178,11 +174,6 @@ NSString * const kLocalyticsKeyResponseBody = @"localytics.key.responseBody"; [submitRequest setValue:@"gzip" forHTTPHeaderField:@"Content-Encoding"]; [submitRequest setValue:[NSString stringWithFormat:@"%d", requestData.length] forHTTPHeaderField:@"Content-Length"]; - if ([LocalyticsSession shared].delaySession == YES) - { - [submitRequest setValue:@"true" forHTTPHeaderField:HEADER_DELAY_SESSION]; - } - [submitRequest setHTTPBody:requestData]; return submitRequest; @@ -196,71 +187,6 @@ NSString * const kLocalyticsKeyResponseBody = @"localytics.key.responseBody"; [[[LocalyticsSession shared] db] vacuumIfRequired]; } -- (void)uploaderAttributionWithApplicationKey:(NSString *)appKey attribution:(NSString *)attribution installId:(NSString *)installId advertisingIdentifier:(NSString *)advertisingIdentifier -{ - // Required parameters - if(!attribution) - return; - - NSString *apiUrlString = [LOCALYTICS_ATTRIBUTION_SERVER stringByAppendingString:appKey]; - NSMutableURLRequest *submitRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:apiUrlString] - cachePolicy:NSURLRequestReloadIgnoringCacheData - timeoutInterval:60.0]; - - NSMutableString *postBody = [NSMutableString string]; - [postBody appendFormat:@"%@=%@", FB_ATTRIBUTION, attribution]; - [postBody appendFormat:@"&%@=%ld", FB_ATTRIBUTION_TIME, (long)[[[LocalyticsSession shared] db] createdTimestamp]]; - - if(advertisingIdentifier) - { - [postBody appendFormat:@"&%@=%@", FB_DEVICE_ID_TYPE, @"adid"]; - [postBody appendFormat:@"&%@=%@", FB_DEVICE_ID, advertisingIdentifier]; - - } - - if(installId) - { - [postBody appendFormat:@"&%@=%@", FB_INSTALL_ID, installId]; - } - - [submitRequest setHTTPMethod:@"POST"]; - [submitRequest setHTTPBody:[postBody dataUsingEncoding:NSUTF8StringEncoding]]; - - // Perform synchronous upload in an async dispatch. This is necessary because the calling block will not persist to - // receive the response data. - dispatch_group_async([[LocalyticsSession shared] criticalGroup], [[LocalyticsSession shared] queue], ^{ - @try { - NSURLResponse *response = nil; - NSError *responseError = nil; - [NSURLConnection sendSynchronousRequest:submitRequest - returningResponse:&response - error:&responseError]; - NSInteger responseStatusCode = [(NSHTTPURLResponse *)response statusCode]; - - if (responseError) { - // On error, simply print the error and close the uploader. We have to assume the data was not transmited - // so it is not deleted. - LocalyticsLog("Error uploading Facebook attribution. Code: %d, Description: %@", - [responseError code], - [responseError localizedDescription]); - } - else - { - // While response status codes in the 5xx range leave upload rows intact, the default case is to delete. - if (responseStatusCode >= 500 && responseStatusCode < 600) { - LocalyticsLog("Facebook attribution upload unsuccessful. Response code %d", responseStatusCode); - } - else - { - LocalyticsLog("Facebook attribution upload completed successfully. Response code %d", responseStatusCode); - [[[LocalyticsSession shared] db] setFacebookAttribution:nil]; - [LocalyticsSession shared].facebookAttribution = nil; - } - } - } - @catch (NSException * e) {} - }); -} /*! @method gzipDeflatedDataWithData @abstract Deflates the provided data using gzip at the default compression level (6). diff --git a/External/Localytics/WebserviceConstants.h b/External/Localytics/WebserviceConstants.h index da62b16b..c6fc4428 100644 --- a/External/Localytics/WebserviceConstants.h +++ b/External/Localytics/WebserviceConstants.h @@ -17,7 +17,6 @@ #define HEADER_CLIENT_TIME @"x-upload-time" #define HEADER_INSTALL_ID @"x-install-id" #define HEADER_CLIENT_VERSION @"x-client-version" -#define HEADER_DELAY_SESSION @"ll-first-session" /********************* * Shared Attributes * @@ -69,6 +68,7 @@ #define PARAM_IDENTIFIERS @"ids" // Identifiers (dictionary) #define PARAM_BIRTH_TIME @"b" // Birth time (Since epoch) #define PARAM_TIMEZONE_OFFSET @"tz" // Device offset from GMT in seconds +#define PARAM_FB_ATTRIBUTION @"fbat" // Facebook attribution cookie /***************** * Session Start * @@ -119,15 +119,5 @@ #define PARAM_NEW_FLOW_EVENTS @"nw" // Events and screens encountered during this session that have NOT been staged for upload. #define PARAM_OLD_FLOW_EVENTS @"od" // Events and screens encountered during this session that HAVE been staged for upload. -/************************ - * Partner attributions * - ***********************/ -#define FB_ATTRIBUTION @"fb_attrib_first" // Facebook attribution cookie -#define FB_ATTRIBUTION_TIME @"fb_attrib_first_date" // Time original attribution cookie was collected -#define FB_ATTRIBUTION_CURRENT @"fb_attrib_current" // Facebook attribution cookie -#define FB_ATTRIBUTION_CURRENT_TIME @"fb_attrib_current_date" // Time original attribution cookie was collected -#define FB_DEVICE_ID @"dpid" // Device unique identifiers -#define FB_DEVICE_ID_TYPE @"dpid_type" // Either UDID or ADID (advertisingIdentifier) -#define FB_INSTALL_ID @"install_id" // Device install ID diff --git a/External/google-plus-ios-sdk/Changelog b/External/google-plus-ios-sdk/Changelog index f4113e83..2e3c650e 100644 --- a/External/google-plus-ios-sdk/Changelog +++ b/External/google-plus-ios-sdk/Changelog @@ -1,3 +1,7 @@ +2013-05-07 -- v1.3.0 +- Packaged as framework +- Bug fixes + 2013-02-26 -- v1.2.1 - Interactive posts on Google+ share - Improved sign-in and share APIs to use shared instances diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/GooglePlus b/External/google-plus-ios-sdk/GooglePlus.bundle/GooglePlus new file mode 100644 index 00000000..776285bb Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/GooglePlus differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/Info.plist b/External/google-plus-ios-sdk/GooglePlus.bundle/Info.plist new file mode 100644 index 00000000..61747833 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/Info.plist differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/af.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/af.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..ca57e46c Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/af.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/am.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/am.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..b8514153 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/am.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ar.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ar.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..2209904f Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/ar.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/be.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/be.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..34913f1f Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/be.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/bg.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/bg.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..924d78fe Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/bg.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ca.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ca.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..3f1cc806 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/ca.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/cs.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/cs.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..96bcf622 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/cs.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/da.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/da.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..ee2b6cc0 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/da.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/de.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/de.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..cf334d8f Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/de.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/de_AT.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/de_AT.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..cf334d8f Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/de_AT.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/de_CH.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/de_CH.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..cf334d8f Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/de_CH.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/el.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/el.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..37a9ae0d Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/el.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..8cde83d6 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/en.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_GB.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_GB.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..8cde83d6 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/en_GB.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_IE.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_IE.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..8cde83d6 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/en_IE.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_IN.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_IN.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..8cde83d6 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/en_IN.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_SG.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_SG.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..8cde83d6 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/en_SG.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_ZA.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_ZA.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..8cde83d6 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/en_ZA.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..ce133e7c Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_419.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_419.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_419.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_AR.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_AR.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_AR.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_BO.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_BO.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_BO.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_CL.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CL.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CL.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_CO.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CO.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CO.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_CR.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CR.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CR.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_DO.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_DO.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_DO.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_EC.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_EC.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_EC.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_GT.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_GT.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_GT.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_HN.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_HN.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_HN.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_MX.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_MX.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_MX.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_NI.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_NI.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_NI.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_PA.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PA.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PA.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_PE.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PE.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PE.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_PR.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PR.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PR.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_PY.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PY.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PY.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_SV.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_SV.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_SV.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_US.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_US.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_US.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_UY.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_UY.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_UY.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_VE.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_VE.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c67ec5e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/es_VE.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/et.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/et.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..40cf9ac1 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/et.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/fa.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/fa.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..94e2395c Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/fa.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/fi.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/fi.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..84ffb1ca Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/fi.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/fil.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/fil.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..a73f999d Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/fil.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/fr.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/fr.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..66cc6838 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/fr.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/fr_CH.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/fr_CH.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..66cc6838 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/fr_CH.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled.png new file mode 100644 index 00000000..bd168a3a Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled@2x.png new file mode 100644 index 00000000..21ae728e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal.png new file mode 100644 index 00000000..a4a3c12e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal@2x.png new file mode 100644 index 00000000..80fc9439 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_pressed.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_pressed.png new file mode 100644 index 00000000..3d84015d Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_pressed.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_pressed@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_pressed@2x.png new file mode 100644 index 00000000..e377195a Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_pressed@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled.png new file mode 100644 index 00000000..99986b55 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled@2x.png new file mode 100644 index 00000000..6134e917 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal.png new file mode 100644 index 00000000..71d85845 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal@2x.png new file mode 100644 index 00000000..bd1cc2e2 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed.png new file mode 100644 index 00000000..c4fa2147 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed@2x.png new file mode 100644 index 00000000..67f61b8a Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled.png new file mode 100644 index 00000000..e5d00526 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled@2x.png new file mode 100644 index 00000000..caa82993 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_normal.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_normal.png new file mode 100644 index 00000000..f95240a7 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_normal.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_normal@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_normal@2x.png new file mode 100644 index 00000000..18aed084 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_normal@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed.png new file mode 100644 index 00000000..601f6346 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed@2x.png new file mode 100644 index 00000000..4a7ac50a Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled.png new file mode 100644 index 00000000..7bbc129a Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled@2x.png new file mode 100644 index 00000000..fc6e0451 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_normal.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_normal.png new file mode 100644 index 00000000..a69703c8 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_normal.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_normal@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_normal@2x.png new file mode 100644 index 00000000..61e1dbb3 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_normal@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed.png new file mode 100644 index 00000000..962bd989 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed@2x.png new file mode 100644 index 00000000..c780c912 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed@2x.png differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gsw.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/gsw.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..cf334d8f Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/gsw.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/he.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/he.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..f603fa7d Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/he.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/hi.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/hi.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..023031f2 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/hi.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/hr.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/hr.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..eab7e25b Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/hr.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/hu.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/hu.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..5a03ce74 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/hu.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/id.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/id.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..18c0e9a1 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/id.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/in.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/in.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..18c0e9a1 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/in.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/it.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/it.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..bd15d9e6 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/it.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/iw.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/iw.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..f603fa7d Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/iw.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ja.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ja.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..c5deef23 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/ja.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ko.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ko.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..a946ea2e Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/ko.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ln.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ln.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..66cc6838 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/ln.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/lt.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/lt.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..c0b37507 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/lt.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/lv.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/lv.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..91f1515c Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/lv.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/mo.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/mo.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..a76a9b4b Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/mo.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ms.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ms.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..2f806396 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/ms.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/nb.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/nb.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..4318afbb Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/nb.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/nl.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/nl.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..de8aeeab Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/nl.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/no.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/no.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..4318afbb Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/no.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/pl.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/pl.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..63867b39 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/pl.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/pt.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/pt.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..21485026 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/pt.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/pt_BR.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/pt_BR.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..21485026 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/pt_BR.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/pt_PT.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/pt_PT.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..f0f5ee92 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/pt_PT.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ro.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ro.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..a76a9b4b Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/ro.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ru.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ru.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..59665952 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/ru.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sk.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sk.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..0cfe6156 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/sk.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sl.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sl.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..86b01769 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/sl.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sr.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sr.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..e0777f18 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/sr.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sv.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sv.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..35a393c7 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/sv.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sw.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sw.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..c5de69fd Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/sw.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/th.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/th.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..a0cd034a Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/th.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/tl.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/tl.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..a73f999d Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/tl.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/tr.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/tr.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..7c86ee3b Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/tr.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/uk.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/uk.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..58d32113 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/uk.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/vi.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/vi.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..6d0e7f56 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/vi.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zh.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zh.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..389ae378 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/zh.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zh_CN.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_CN.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..389ae378 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_CN.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zh_HK.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_HK.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..3e974a37 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_HK.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zh_TW.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_TW.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..2fe0d276 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_TW.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zu.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zu.lproj/GooglePlusPlatform.strings new file mode 100644 index 00000000..9f7d9d32 Binary files /dev/null and b/External/google-plus-ios-sdk/GooglePlus.bundle/zu.lproj/GooglePlusPlatform.strings differ diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h index 5edf1790..d4fb1d38 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h @@ -28,6 +28,7 @@ NSMutableDictionary *requestIDMap_; BOOL skipAuthorization_; NSDictionary *additionalHTTPHeaders_; + NSDictionary *urlQueryParameters_; } // Queries included in this batch. Each query should have a unique requestID. @@ -42,6 +43,10 @@ // additionalHTTPHeaders. @property (copy) NSDictionary *additionalHTTPHeaders; +// Any URL query parameters to add to the query (useful for debugging with some +// services). +@property (copy) NSDictionary *urlQueryParameters; + + (id)batchQuery; + (id)batchQueryWithQueries:(NSArray *)array; diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m index f62eaca1..c584368c 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m @@ -22,7 +22,8 @@ @implementation GTLBatchQuery @synthesize shouldSkipAuthorization = skipAuthorization_, - additionalHTTPHeaders = additionalHTTPHeaders_; + additionalHTTPHeaders = additionalHTTPHeaders_, + urlQueryParameters = urlQueryParameters_; + (id)batchQuery { GTLBatchQuery *obj = [[[self alloc] init] autorelease]; @@ -49,6 +50,7 @@ - (void)dealloc { [queries_ release]; [additionalHTTPHeaders_ release]; + [urlQueryParameters_ release]; [requestIDMap_ release]; [super dealloc]; diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h index 39d0b108..9d40887e 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h @@ -28,6 +28,7 @@ - (BOOL)shouldSkipAuthorization; - (void)executionDidStop; - (NSDictionary *)additionalHTTPHeaders; +- (NSDictionary *)urlQueryParameters; - (GTLUploadParameters *)uploadParameters; @end @@ -78,7 +79,7 @@ // or data must be provided. @property (copy) GTLUploadParameters *uploadParameters; -// Any url query parameters to add to the query (useful for debugging with some +// Any URL query parameters to add to the query (useful for debugging with some // services). @property (copy) NSDictionary *urlQueryParameters; diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m index e91e9b0c..dee1bb90 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m @@ -755,7 +755,7 @@ static NSString *ETagIfPresent(GTLObject *obj) { // Build up the array of RPC calls. NSMutableArray *rpcPayloads = [NSMutableArray arrayWithCapacity:numberOfQueries]; - NSMutableSet *requestIDs = [NSMutableSet setWithCapacity:numberOfQueries]; + NSMutableArray *requestIDs = [NSMutableSet setWithCapacity:numberOfQueries]; for (GTLQuery *query in queries) { NSString *methodName = query.methodName; NSDictionary *parameters = query.JSON; @@ -772,6 +772,10 @@ static NSString *ETagIfPresent(GTLObject *obj) { @"additionalHTTPHeaders disallowed on queries added to a batch - query %@ (%@)", requestID, methodName); + GTL_DEBUG_ASSERT(query.urlQueryParameters == nil, + @"urlQueryParameters disallowed on queries added to a batch - query %@ (%@)", + requestID, methodName); + GTL_DEBUG_ASSERT(query.uploadParameters == nil, @"uploadParameters disallowed on queries added to a batch - query %@ (%@)", requestID, methodName); @@ -802,10 +806,16 @@ static NSString *ETagIfPresent(GTLObject *obj) { BOOL mayAuthorize = (batchCopy ? !batchCopy.shouldSkipAuthorization : YES); - // urlQueryParameters on the queries are currently unsupport during a batch - // as it's not clear how to map them. - NSURL *rpcURL = self.rpcURL; + + // We'll use the batch query's URL parameters, and ignore the URL parameters + // specified on the individual queries. + NSDictionary *urlQueryParameters = batch.urlQueryParameters; + if ([urlQueryParameters count] > 0) { + rpcURL = [GTLUtilities URLWithString:[rpcURL absoluteString] + queryParameters:urlQueryParameters]; + } + GTLServiceTicket *resultTicket = [self fetchObjectWithURL:rpcURL objectClass:[GTLBatchResult class] bodyObject:nil diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h index e4977370..a681390b 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h @@ -85,7 +85,9 @@ // iOS 6 and Mac OS X 10.7, clients may simply create an operation queue for // callbacks on a background thread: // -// fetcher.delegateQueue = [[[NSOperationQueue alloc] init] autorelease]; +// NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; +// [queue setMaxConcurrentOperationCount:1]; +// fetcher.delegateQueue = queue; // // or specify the main queue for callbacks on the main thread: // @@ -383,7 +385,7 @@ NSString *GTMApplicationIdentifier(NSBundle *bundle); @protocol GTMFetcherAuthorizationProtocol @required // This protocol allows us to call the authorizer without requiring its sources -// in this project +// in this project. - (void)authorizeRequest:(NSMutableURLRequest *)request delegate:(id)delegate didFinishSelector:(SEL)sel; @@ -396,12 +398,27 @@ NSString *GTMApplicationIdentifier(NSBundle *bundle); - (BOOL)isAuthorizedRequest:(NSURLRequest *)request; -- (NSString *)userEmail; +@property (retain, readonly) NSString *userEmail; @optional + +// Indicate if authorization may be attempted. Even if this succeeds, +// authorization may fail if the user's permissions have been revoked. +@property (readonly) BOOL canAuthorize; + +// For development only, allow authorization of non-SSL requests, allowing +// transmission of the bearer token unencrypted. +@property (assign) BOOL shouldAuthorizeAllRequests; + +#if NS_BLOCKS_AVAILABLE +- (void)authorizeRequest:(NSMutableURLRequest *)request + completionHandler:(void (^)(NSError *error))handler; +#endif + @property (assign) id fetcherService; // WEAK - (BOOL)primeForRefresh; + @end // GTMHTTPFetcher objects are used for async retrieval of an http get or post diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m index a5367831..431fe66c 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m @@ -142,6 +142,11 @@ static NSString *const kCallbackError = @"error"; // Default to system default cookie storage [self setCookieStorageMethod:kGTMHTTPFetcherCookieStorageMethodSystemDefault]; } +#if !STRIP_GTM_FETCH_LOGGING + // Encourage developers to set the comment property or use + // setCommentWithFormat: by providing a default string. + comment_ = @"(No fetcher comment set)"; +#endif } return self; } @@ -345,6 +350,13 @@ static NSString *const kCallbackError = @"error"; } #endif + if (downloadFileHandle_ != nil) { + // Downloading to a file, so downloadedData_ remains nil. + } else { + self.downloadedData = [NSMutableData data]; + } + + hasConnectionEnded_ = NO; if ([runLoopModes_ count] == 0 && delegateQueue == nil) { // No custom callback modes or queue were specified, so start the connection // on the current run loop in the current mode @@ -367,19 +379,13 @@ static NSString *const kCallbackError = @"error"; } [connection_ start]; } - hasConnectionEnded_ = NO; if (!connection_) { NSAssert(connection_ != nil, @"beginFetchWithDelegate could not create a connection"); + self.downloadedData = nil; goto CannotBeginFetch; } - if (downloadFileHandle_ != nil) { - // downloading to a file, so downloadedData_ remains nil - } else { - self.downloadedData = [NSMutableData data]; - } - #if GTM_BACKGROUND_FETCHING backgroundTaskIdentifer_ = 0; // UIBackgroundTaskInvalid is 0 on iOS 4 if (shouldFetchInBackground_) { @@ -388,15 +394,22 @@ static NSString *const kCallbackError = @"error"; if ([app respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) { // Tell UIApplication that we want to continue even when the app is in the // background. - NSThread *thread = [NSThread currentThread]; + NSThread *thread = delegateQueue_ ? nil : [NSThread currentThread]; backgroundTaskIdentifer_ = [app beginBackgroundTaskWithExpirationHandler:^{ - // Callback - this block is always invoked by UIApplication on the main - // thread, but we want to run the user's callbacks on the thread used - // to start the fetch. - [self performSelector:@selector(backgroundFetchExpired) - onThread:thread - withObject:nil - waitUntilDone:YES]; + // Background task expiration callback - this block is always invoked by + // UIApplication on the main thread. + if (thread) { + // Run the user's callbacks on the thread used to start the + // fetch. + [self performSelector:@selector(backgroundFetchExpired) + onThread:thread + withObject:nil + waitUntilDone:YES]; + } else { + // backgroundFetchExpired invokes callbacks on the provided delegate + // queue. + [self backgroundFetchExpired]; + } }]; } } @@ -673,7 +686,7 @@ CannotBeginFetch: // this may be called in a callback from the connection, so use autorelease [oldConnection autorelease]; } - } + } // @synchronized(self) // send the stopped notification [self sendStopNotificationIfNeeded]; @@ -692,7 +705,7 @@ CannotBeginFetch: error:NULL]; self.temporaryDownloadPath = nil; } - } + } // @synchronized(self) [service fetcherDidStop:self]; @@ -824,7 +837,7 @@ CannotBeginFetch: [self setMutableRequest:mutable]; } return redirectRequest; - } + } // @synchronized(self) } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { @@ -900,7 +913,7 @@ didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { forAuthenticationChallenge:challenge]; return; } - } + } // @synchronized(self) // If we don't have credentials, or we've already failed auth 3x, // report the error, putting the challenge as a value in the userInfo @@ -1061,11 +1074,18 @@ totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { @synchronized(self) { #if DEBUG - // The download file handle should be set before the fetch is started, not - // after + NSAssert(!hasConnectionEnded_, @"Connection received data after ending"); + + // The download file handle should be set or the data object allocated + // before the fetch is started. NSAssert((downloadFileHandle_ == nil) != (downloadedData_ == nil), - @"received data accumulates as NSData or NSFileHandle, not both"); + @"received data accumulates as either NSData (%d) or" + @" NSFileHandle (%d)", + (downloadedData_ != nil), (downloadFileHandle_ != nil)); #endif + // Hopefully, we'll never see this execute out-of-order, receiving data + // after we've received the finished or failed callback. + if (hasConnectionEnded_) return; if (downloadFileHandle_ != nil) { // Append to file @@ -1102,7 +1122,7 @@ totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { receivedDataBlock_(downloadedData_); } #endif - } + } // @synchronized(self) } // For error 304's ("Not Modified") where we've cached the data, return @@ -1228,7 +1248,7 @@ totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { #if !STRIP_GTM_FETCH_LOGGING shouldDeferLogging = shouldDeferResponseBodyLogging_; #endif - } + } // @synchronized(self) if (shouldBeginRetryTimer) { [self beginRetryTimer]; @@ -1470,7 +1490,7 @@ totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { retryTimer_ = nil; shouldNotify = YES; } - } + } // @synchronized(self) if (shouldNotify) { NSNotificationCenter *defaultNC = [NSNotificationCenter defaultCenter]; diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h index 8a7155a3..8703164b 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h @@ -80,6 +80,7 @@ _EXTERN NSString* const kGTMOAuth2FetchTypeUserInfo _INITIALIZE_AS(@"userInfo" // Token-issuance errors _EXTERN NSString* const kGTMOAuth2ErrorKey _INITIALIZE_AS(@"error"); +_EXTERN NSString* const kGTMOAuth2ErrorObjectKey _INITIALIZE_AS(@"kGTMOAuth2ErrorObjectKey"); _EXTERN NSString* const kGTMOAuth2ErrorInvalidRequest _INITIALIZE_AS(@"invalid_request"); _EXTERN NSString* const kGTMOAuth2ErrorInvalidClient _INITIALIZE_AS(@"invalid_client"); @@ -93,8 +94,9 @@ _EXTERN NSString* const kGTMOAuth2ErrorInvalidScope _INITIALIZE_AS(@"inv _EXTERN NSString* const kGTMOAuth2UserSignedIn _INITIALIZE_AS(@"kGTMOAuth2UserSignedIn"); // Notification for token changes -_EXTERN NSString* const kGTMOAuth2AccessTokenRefreshed _INITIALIZE_AS(@"kGTMOAuth2AccessTokenRefreshed"); -_EXTERN NSString* const kGTMOAuth2RefreshTokenChanged _INITIALIZE_AS(@"kGTMOAuth2RefreshTokenChanged"); +_EXTERN NSString* const kGTMOAuth2AccessTokenRefreshed _INITIALIZE_AS(@"kGTMOAuth2AccessTokenRefreshed"); +_EXTERN NSString* const kGTMOAuth2RefreshTokenChanged _INITIALIZE_AS(@"kGTMOAuth2RefreshTokenChanged"); +_EXTERN NSString* const kGTMOAuth2AccessTokenRefreshFailed _INITIALIZE_AS(@"kGTMOAuth2AccessTokenRefreshFailed"); // Notification for WebView loading _EXTERN NSString* const kGTMOAuth2WebViewStartedLoading _INITIALIZE_AS(@"kGTMOAuth2WebViewStartedLoading"); @@ -120,7 +122,10 @@ _EXTERN NSString* const kGTMOAuth2NetworkFound _INITIALIZE_AS(@"kGTMOAuth NSURL *tokenURL_; NSDate *expirationDate_; + NSString *authorizationTokenKey_; + NSDictionary *additionalTokenRequestParameters_; + NSDictionary *additionalGrantTypeRequestParameters_; // queue of requests for authorization waiting for a valid access token GTMHTTPFetcher *refreshFetcher_; @@ -152,9 +157,20 @@ _EXTERN NSString* const kGTMOAuth2NetworkFound _INITIALIZE_AS(@"kGTMOAuth @property (retain) NSString *refreshScope; // Apps may optionally add parameters here to be provided to the token -// endpoint on token requests and refreshes +// endpoint on token requests and refreshes. @property (retain) NSDictionary *additionalTokenRequestParameters; +// Apps may optionally add parameters here to be provided to the token +// endpoint on specific token requests and refreshes, keyed by the grant_type. +// For example, if a different "type" parameter is required for obtaining +// the auth code and on refresh, this might be: +// +// viewController.authentication.additionalGrantTypeRequestParameters = @{ +// @"authorization_code" : @{ @"type" : @"code" }, +// @"refresh_token" : @{ @"type" : @"refresh" } +// }; +@property (retain) NSDictionary *additionalGrantTypeRequestParameters; + // Response properties @property (retain) NSMutableDictionary *parameters; @@ -216,6 +232,11 @@ _EXTERN NSString* const kGTMOAuth2NetworkFound _INITIALIZE_AS(@"kGTMOAuth // not set, the class SBJSON must be available in the runtime. @property (assign) Class parserClass; +// Key for the response parameter used for the authorization header; by default, +// "access_token" is used, but some servers may expect alternatives, like +// "id_token". +@property (copy) NSString *authorizationTokenKey; + // Convenience method for creating an authentication object + (id)authenticationWithServiceProvider:(NSString *)serviceProvider tokenURL:(NSURL *)tokenURL @@ -327,6 +348,8 @@ _EXTERN NSString* const kGTMOAuth2NetworkFound _INITIALIZE_AS(@"kGTMOAuth + (NSDictionary *)dictionaryWithResponseString:(NSString *)responseStr; ++ (NSDictionary *)dictionaryWithJSONData:(NSData *)data; + + (NSString *)scopeWithStrings:(NSString *)firsStr, ... NS_REQUIRES_NIL_TERMINATION; @end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m index 0ea5fd7e..7f2b0a21 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m @@ -122,6 +122,7 @@ static NSString *const kRefreshFetchArgsKey = @"requestArgs"; @interface GTMOAuth2Authentication () @property (retain) NSMutableArray *authorizationQueue; +@property (readonly) NSString *authorizationToken; - (void)setKeysForResponseJSONData:(NSData *)data; @@ -133,8 +134,6 @@ static NSString *const kRefreshFetchArgsKey = @"requestArgs"; - (void)updateExpirationDate; -- (NSDictionary *)dictionaryWithJSONData:(NSData *)data; - - (void)tokenFetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)data error:(NSError *)error; @@ -164,9 +163,11 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher clientSecret = clientSecret_, redirectURI = redirectURI_, parameters = parameters_, + authorizationTokenKey = authorizationTokenKey_, tokenURL = tokenURL_, expirationDate = expirationDate_, additionalTokenRequestParameters = additionalTokenRequestParameters_, + additionalGrantTypeRequestParameters = additionalGrantTypeRequestParameters_, refreshFetcher = refreshFetcher_, fetcherService = fetcherService_, parserClass = parserClass_, @@ -237,9 +238,11 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher [clientSecret_ release]; [redirectURI_ release]; [parameters_ release]; + [authorizationTokenKey_ release]; [tokenURL_ release]; [expirationDate_ release]; [additionalTokenRequestParameters_ release]; + [additionalGrantTypeRequestParameters_ release]; [refreshFetcher_ release]; [authorizationQueue_ release]; [userData_ release]; @@ -290,11 +293,11 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher } - (void)setKeysForResponseJSONData:(NSData *)data { - NSDictionary *dict = [self dictionaryWithJSONData:data]; + NSDictionary *dict = [[self class] dictionaryWithJSONData:data]; [self setKeysForResponseDictionary:dict]; } -- (NSDictionary *)dictionaryWithJSONData:(NSData *)data { ++ (NSDictionary *)dictionaryWithJSONData:(NSData *)data { NSMutableDictionary *obj = nil; NSError *error = nil; @@ -437,12 +440,32 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher BOOL hasAccessToken = ([self.accessToken length] > 0); + NSString *noteName; + NSDictionary *userInfo = nil; if (hasAccessToken && error == nil) { - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc postNotificationName:kGTMOAuth2AccessTokenRefreshed - object:self - userInfo:nil]; + // Successful refresh. + noteName = kGTMOAuth2AccessTokenRefreshed; + userInfo = nil; + } else { + // Google's OAuth 2 implementation returns a 400 with JSON body + // containing error key "invalid_grant" to indicate the refresh token + // is invalid or has been revoked by the user. We'll promote the + // JSON error key's value for easy inspection by the observer. + noteName = kGTMOAuth2AccessTokenRefreshFailed; + NSString *jsonErr = nil; + if ([error code] == kGTMHTTPFetcherStatusBadRequest) { + NSDictionary *json = [[error userInfo] objectForKey:kGTMOAuth2ErrorJSONKey]; + jsonErr = [json objectForKey:kGTMOAuth2ErrorMessageKey]; + } + // error and jsonErr may be nil + userInfo = [NSMutableDictionary dictionary]; + [userInfo setValue:error forKey:kGTMOAuth2ErrorObjectKey]; + [userInfo setValue:jsonErr forKey:kGTMOAuth2ErrorMessageKey]; } + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:noteName + object:self + userInfo:userInfo]; for (GTMOAuth2AuthorizationArgs *args in pendingAuthQueue) { if (!hasAccessToken && args.error == nil) { @@ -522,7 +545,8 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher #endif } - NSString *accessToken = self.accessToken; + // Get the access token. + NSString *accessToken = self.authorizationToken; if (isAuthorizableRequest && [accessToken length] > 0) { if (request) { // we have a likely valid access token @@ -620,8 +644,8 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher NSString *token = self.refreshToken; if (token == nil) { // For services which do not support refresh tokens, we'll just check - // the access token - token = self.accessToken; + // the access token. + token = self.authorizationToken; } BOOL canAuth = [token length] > 0; return canAuth; @@ -699,10 +723,11 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher NSString *refreshToken = self.refreshToken; NSString *code = self.code; NSString *assertion = self.assertion; + NSString *grantType = nil; if (refreshToken) { // We have a refresh token - [paramsDict setObject:@"refresh_token" forKey:@"grant_type"]; + grantType = @"refresh_token"; [paramsDict setObject:refreshToken forKey:@"refresh_token"]; NSString *refreshScope = self.refreshScope; @@ -713,7 +738,7 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher fetchType = kGTMOAuth2FetchTypeRefresh; } else if (code) { // We have a code string - [paramsDict setObject:@"authorization_code" forKey:@"grant_type"]; + grantType = @"authorization_code"; [paramsDict setObject:code forKey:@"code"]; NSString *redirectURI = self.redirectURI; @@ -729,9 +754,8 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher fetchType = kGTMOAuth2FetchTypeToken; } else if (assertion) { // We have an assertion string + grantType = @"http://oauth.net/grant_type/jwt/1.0/bearer"; [paramsDict setObject:assertion forKey:@"assertion"]; - [paramsDict setObject:@"http://oauth.net/grant_type/jwt/1.0/bearer" - forKey:@"grant_type"]; fetchType = kGTMOAuth2FetchTypeAssertion; } else { #if DEBUG @@ -739,7 +763,8 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher #endif return nil; } - + [paramsDict setObject:grantType forKey:@"grant_type"]; + NSString *clientID = self.clientID; if ([clientID length] > 0) { [paramsDict setObject:clientID forKey:@"client_id"]; @@ -754,6 +779,11 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher if (additionalParams) { [paramsDict addEntriesFromDictionary:additionalParams]; } + NSDictionary *grantTypeParams = + [self.additionalGrantTypeRequestParameters objectForKey:grantType]; + if (grantTypeParams) { + [paramsDict addEntriesFromDictionary:grantTypeParams]; + } NSString *paramStr = [[self class] encodedQueryParametersForDictionary:paramsDict]; NSData *paramData = [paramStr dataUsingEncoding:NSUTF8StringEncoding]; @@ -821,11 +851,11 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher BOOL hasData = ([data length] > 0); if (error) { - // Failed; if the error body is JSON, parse it and add it to the error's - // userInfo dictionary + // Failed. If the error body is JSON, parse it and add it to the error's + // userInfo dictionary. if (hasData) { if (isResponseJSON) { - NSDictionary *errorJson = [self dictionaryWithJSONData:data]; + NSDictionary *errorJson = [[self class] dictionaryWithJSONData:data]; if ([errorJson count] > 0) { #if DEBUG NSLog(@"Error %@\nError data:\n%@", error, errorJson); @@ -845,7 +875,7 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher } } } else { - // Succeeded; we have an access token + // Succeeded; we have the requested token. #if DEBUG NSAssert(hasData, @"data missing in token response"); #endif @@ -960,10 +990,24 @@ finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher self.expirationDate = nil; self.userEmail = nil; self.userEmailIsVerified = nil; + self.authorizationTokenKey = nil; } #pragma mark Accessors for Response Parameters +- (NSString *)authorizationToken { + // The token used for authorization is typically the access token unless + // the user has specified that an alternative parameter be used. + NSString *authorizationToken; + NSString *authTokenKey = self.authorizationTokenKey; + if (authTokenKey != nil) { + authorizationToken = [self.parameters objectForKey:authTokenKey]; + } else { + authorizationToken = self.accessToken; + } + return authorizationToken; +} + - (NSString *)accessToken { return [self.parameters objectForKey:kOAuth2AccessTokenKey]; } diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m index fba0222f..215f719e 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m @@ -29,10 +29,6 @@ static const NSTimeInterval kDefaultNetworkLossTimeoutInterval = 30.0; NSString *const kOOBString = @"urn:ietf:wg:oauth:2.0:oob"; -@interface GTMOAuth2Authentication (InternalMethods) -- (NSDictionary *)dictionaryWithJSONData:(NSData *)data; -@end - @interface GTMOAuth2SignIn () @property (assign) BOOL hasHandledCallback; @property (retain) GTMHTTPFetcher *pendingFetcher; @@ -68,6 +64,8 @@ finishedWithFetcher:(GTMHTTPFetcher *)fetcher - (void)reachabilityTarget:(SCNetworkReachabilityRef)reachabilityRef changedFlags:(SCNetworkConnectionFlags)flags; - (void)reachabilityTimerFired:(NSTimer *)timer; + ++ (NSData *)decodeWebSafeBase64:(NSString *)base64Str; @end @implementation GTMOAuth2SignIn @@ -559,12 +557,17 @@ finishedWithFetcher:(GTMHTTPFetcher *)fetcher NSURL *infoURL = [[self class] googleUserInfoURL]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:infoURL]; - NSString *userAgent = [auth userAgent]; - [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + if ([auth respondsToSelector:@selector(userAgent)]) { + NSString *userAgent = [auth userAgent]; + [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + } [request setValue:@"no-cache" forHTTPHeaderField:@"Cache-Control"]; GTMHTTPFetcher *fetcher; - id fetcherService = auth.fetcherService; + id fetcherService = nil; + if ([auth respondsToSelector:@selector(fetcherService)]) { + fetcherService = auth.fetcherService; + }; if (fetcherService) { fetcher = [fetcherService fetcherWithRequest:request]; } else { @@ -578,7 +581,36 @@ finishedWithFetcher:(GTMHTTPFetcher *)fetcher } - (void)fetchGoogleUserInfo { - // fetch the user's email address or profile + if (!self.shouldFetchGoogleUserProfile) { + // If we only need email and user ID, not the full profile, and we have an + // id_token, it may have the email and user ID so we won't need to fetch + // them. + GTMOAuth2Authentication *auth = self.authentication; + NSString *idToken = [auth.parameters objectForKey:@"id_token"]; + if ([idToken length] > 0) { + // The id_token has three dot-delimited parts. The second is the + // JSON profile. + // + // http://www.tbray.org/ongoing/When/201x/2013/04/04/ID-Tokens + NSArray *parts = [idToken componentsSeparatedByString:@"."]; + if ([parts count] == 3) { + NSString *part2 = [parts objectAtIndex:1]; + if ([part2 length] > 0) { + NSData *data = [[self class] decodeWebSafeBase64:part2]; + if ([data length] > 0) { + [self updateGoogleUserInfoWithData:data]; + if ([[auth userID] length] > 0 && [[auth userEmail] length] > 0) { + // We obtained user ID and email from the ID token. + [self finishSignInWithError:nil]; + return; + } + } + } + } + } + } + + // Fetch the email and profile from the userinfo endpoint. GTMOAuth2Authentication *auth = self.authentication; GTMHTTPFetcher *fetcher = [[self class] userInfoFetcherWithAuth:auth]; [fetcher beginFetchWithDelegate:self @@ -611,27 +643,40 @@ finishedWithFetcher:(GTMHTTPFetcher *)fetcher #endif } else { // We have the authenticated user's info - if (data) { - NSDictionary *profileDict = [auth dictionaryWithJSONData:data]; - if (profileDict) { - self.userProfile = profileDict; - - // Save the ID into the auth object - NSString *identifier = [profileDict objectForKey:@"id"]; - [auth setUserID:identifier]; - - // Save the email into the auth object - NSString *email = [profileDict objectForKey:@"email"]; - [auth setUserEmail:email]; - - NSNumber *verified = [profileDict objectForKey:@"verified_email"]; - [auth setUserEmailIsVerified:[verified stringValue]]; - } - } + [self updateGoogleUserInfoWithData:data]; } [self finishSignInWithError:error]; } +- (void)updateGoogleUserInfoWithData:(NSData *)data { + if (!data) return; + + GTMOAuth2Authentication *auth = self.authentication; + NSDictionary *profileDict = [[auth class] dictionaryWithJSONData:data]; + if (profileDict) { + self.userProfile = profileDict; + + // Save the ID into the auth object + NSString *identifier = [profileDict objectForKey:@"id"]; + [auth setUserID:identifier]; + + // Save the email into the auth object + NSString *email = [profileDict objectForKey:@"email"]; + [auth setUserEmail:email]; + + // The verified_email key is a boolean NSNumber in the userinfo + // endpoint response, but it is a string like "true" in the id_token. + // We want to consistently save it as a string of the boolean value, + // like @"1". + id verified = [profileDict objectForKey:@"verified_email"]; + if ([verified isKindOfClass:[NSString class]]) { + verified = [NSNumber numberWithBool:[verified boolValue]]; + } + + [auth setUserEmailIsVerified:[verified stringValue]]; + } +} + #endif // !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT - (void)finishSignInWithError:(NSError *)error { @@ -828,6 +873,62 @@ static void ReachabilityCallBack(SCNetworkReachabilityRef target, } [auth reset]; } + + +// Based on Cyrus Najmabadi's elegent little encoder and decoder from +// http://www.cocoadev.com/index.pl?BaseSixtyFour and on GTLBase64 + ++ (NSData *)decodeWebSafeBase64:(NSString *)base64Str { + static char decodingTable[128]; + static BOOL hasInited = NO; + + if (!hasInited) { + char webSafeEncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + memset(decodingTable, 0, 128); + for (unsigned int i = 0; i < sizeof(webSafeEncodingTable); i++) { + decodingTable[(unsigned int) webSafeEncodingTable[i]] = (char)i; + } + hasInited = YES; + } + + // The input string should be plain ASCII. + const char *cString = [base64Str cStringUsingEncoding:NSASCIIStringEncoding]; + if (cString == nil) return nil; + + NSInteger inputLength = (NSInteger)strlen(cString); + // Input length is not being restricted to multiples of 4. + if (inputLength == 0) return [NSData data]; + + while (inputLength > 0 && cString[inputLength - 1] == '=') { + inputLength--; + } + + NSInteger outputLength = inputLength * 3 / 4; + NSMutableData* data = [NSMutableData dataWithLength:(NSUInteger)outputLength]; + uint8_t *output = [data mutableBytes]; + + NSInteger inputPoint = 0; + NSInteger outputPoint = 0; + char *table = decodingTable; + + while (inputPoint < inputLength - 1) { + int i0 = cString[inputPoint++]; + int i1 = cString[inputPoint++]; + int i2 = inputPoint < inputLength ? cString[inputPoint++] : 'A'; // 'A' will decode to \0 + int i3 = inputPoint < inputLength ? cString[inputPoint++] : 'A'; + + output[outputPoint++] = (uint8_t)((table[i0] << 2) | (table[i1] >> 4)); + if (outputPoint < outputLength) { + output[outputPoint++] = (uint8_t)(((table[i1] & 0xF) << 4) | (table[i2] >> 2)); + } + if (outputPoint < outputLength) { + output[outputPoint++] = (uint8_t)(((table[i2] & 0x3) << 6) | table[i3]); + } + } + + return data; +} + #endif // !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT @end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h index d20b3307..23bb07a9 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h @@ -45,10 +45,11 @@ _EXTERN NSString* const kGTMOAuth2KeychainErrorDomain _INITIALIZE_AS(@"com.google.GTMOAuthKeychain"); - @class GTMOAuth2SignIn; @class GTMOAuth2ViewControllerTouch; +typedef void (^GTMOAuth2ViewControllerCompletionHandler)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error); + @interface GTMOAuth2ViewControllerTouch : UIViewController { @private UIButton *backButton_; @@ -73,7 +74,7 @@ _EXTERN NSString* const kGTMOAuth2KeychainErrorDomain _INITIALIZE_AS(@"com SEL finishedSelector_; #if NS_BLOCKS_AVAILABLE - void (^completionBlock_)(GTMOAuth2ViewControllerTouch *, GTMOAuth2Authentication *, NSError *); + GTMOAuth2ViewControllerCompletionHandler completionBlock_; void (^popViewBlock_)(void); #endif @@ -168,7 +169,7 @@ _EXTERN NSString* const kGTMOAuth2KeychainErrorDomain _INITIALIZE_AS(@"com #endif // the default timeout for an unreachable network during display of the -// sign-in page is 10 seconds; set this to 0 to have no timeout +// sign-in page is 30 seconds; set this to 0 to have no timeout @property (nonatomic, assign) NSTimeInterval networkLossTimeoutInterval; // if set, cookies are deleted for this URL when the view is hidden @@ -228,13 +229,13 @@ _EXTERN NSString* const kGTMOAuth2KeychainErrorDomain _INITIALIZE_AS(@"com clientID:(NSString *)clientID clientSecret:(NSString *)clientSecret keychainItemName:(NSString *)keychainItemName - completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler; + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; - (id)initWithScope:(NSString *)scope clientID:(NSString *)clientID clientSecret:(NSString *)clientSecret keychainItemName:(NSString *)keychainItemName - completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler; + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; #endif #endif @@ -257,12 +258,12 @@ _EXTERN NSString* const kGTMOAuth2KeychainErrorDomain _INITIALIZE_AS(@"com + (id)controllerWithAuthentication:(GTMOAuth2Authentication *)auth authorizationURL:(NSURL *)authorizationURL keychainItemName:(NSString *)keychainItemName // may be nil - completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler; + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; - (id)initWithAuthentication:(GTMOAuth2Authentication *)auth authorizationURL:(NSURL *)authorizationURL keychainItemName:(NSString *)keychainItemName - completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler; + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; #endif // subclasses may override authNibName to specify a custom name @@ -271,6 +272,10 @@ _EXTERN NSString* const kGTMOAuth2KeychainErrorDomain _INITIALIZE_AS(@"com // subclasses may override authNibBundle to specify a custom bundle + (NSBundle *)authNibBundle; +// subclasses may override setUpNavigation to provide their own navigation +// controls +- (void)setUpNavigation; + // apps may replace the sign-in class with their own subclass of it + (Class)signInClass; + (void)setSignInClass:(Class)theClass; diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m index 40cf4aee..15ce71e6 100644 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m @@ -113,7 +113,7 @@ finishedWithAuth:(GTMOAuth2Authentication *)auth clientID:(NSString *)clientID clientSecret:(NSString *)clientSecret keychainItemName:(NSString *)keychainItemName - completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler { + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler { return [[[self alloc] initWithScope:scope clientID:clientID clientSecret:clientSecret @@ -125,7 +125,7 @@ finishedWithAuth:(GTMOAuth2Authentication *)auth clientID:(NSString *)clientID clientSecret:(NSString *)clientSecret keychainItemName:(NSString *)keychainItemName - completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler { + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler { // convenient entry point for Google authentication Class signInClass = [[self class] signInClass]; @@ -206,7 +206,7 @@ finishedWithAuth:(GTMOAuth2Authentication *)auth + (id)controllerWithAuthentication:(GTMOAuth2Authentication *)auth authorizationURL:(NSURL *)authorizationURL keychainItemName:(NSString *)keychainItemName - completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler { + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler { return [[[self alloc] initWithAuthentication:auth authorizationURL:authorizationURL keychainItemName:keychainItemName @@ -216,7 +216,7 @@ finishedWithAuth:(GTMOAuth2Authentication *)auth - (id)initWithAuthentication:(GTMOAuth2Authentication *)auth authorizationURL:(NSURL *)authorizationURL keychainItemName:(NSString *)keychainItemName - completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler { + completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler { // fall back to the non-blocks init self = [self initWithAuthentication:auth authorizationURL:authorizationURL @@ -365,6 +365,10 @@ finishedWithAuth:(GTMOAuth2Authentication *)auth - (void)viewDidLoad { + [self setUpNavigation]; +} + +- (void)setUpNavigation { rightBarButtonItem_.customView = navButtonsView_; self.navigationItem.rightBarButtonItem = rightBarButtonItem_; } @@ -670,6 +674,9 @@ static Class gSignInClass = Nil; #pragma mark Protocol implementations - (void)viewWillAppear:(BOOL)animated { + // See the comment on clearBrowserCookies in viewDidDisappear. + [self clearBrowserCookies]; + if (!isViewShown_) { isViewShown_ = YES; if ([self isNavigationBarTranslucent]) { @@ -713,13 +720,18 @@ static Class gSignInClass = Nil; #endif } - // prevent the next sign-in from showing in the WebView that the user is - // already signed in - [self clearBrowserCookies]; - [super viewWillDisappear:animated]; } +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + + // prevent the next sign-in from showing in the WebView that the user is + // already signed in. It's possible for the WebView to set the cookies even + // after this, so we also clear them when the view first appears. + [self clearBrowserCookies]; +} + - (void)viewDidLayoutSubviews { // We don't call super's version of this method because // -[UIViewController viewDidLayoutSubviews] is documented as a no-op, that diff --git a/External/google-plus-ios-sdk/OpenSource/GoogleOpenSource.h b/External/google-plus-ios-sdk/OpenSource/GoogleOpenSource.h new file mode 100644 index 00000000..8703285c --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GoogleOpenSource.h @@ -0,0 +1,44 @@ +// +// GoogleOpenSource.h +// Google+ iOS SDK +// +// Copyright 2013 Google Inc. +// +// Use of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + + +// GTM. +#import "GTMDefines.h" +#import "GTMHTTPFetcher.h" +#import "GTMHTTPFetcherService.h" +#import "GTMHTTPFetchHistory.h" +#import "GTMLogger.h" +#import "GTMMethodCheck.h" +#import "GTMNSDictionary+URLArguments.h" +#import "GTMNSString+URLArguments.h" +#import "GTMOAuth2Authentication.h" +#import "GTMOAuth2SignIn.h" +#import "GTMOAuth2ViewControllerTouch.h" +#import "GTMObjC2Runtime.h" + +// Chrome. +#import "OpenInChromeController.h" + +// GTL. +#import "GTLDefines.h" +#import "GTLBatchQuery.h" +#import "GTLBatchResult.h" +#import "GTLDateTime.h" +#import "GTLErrorObject.h" +#import "GTLObject.h" +#import "GTLQuery.h" +#import "GTLRuntimeCommon.h" +#import "GTLService.h" +#import "GTLFramework.h" +#import "GTLJSONParser.h" +#import "GTLUtilities.h" + +// GTLPlus. +#import "GTLPlus.h" diff --git a/External/google-plus-ios-sdk/README b/External/google-plus-ios-sdk/README index 880c9229..a762f556 100644 --- a/External/google-plus-ios-sdk/README +++ b/External/google-plus-ios-sdk/README @@ -7,27 +7,20 @@ README -- This file. Changelog -- The versions and changes of the SDK. -lib/ -- Header files and libraries. - GPPDeepLink.h -- Header file to include for sharing with Google+ with content - deep linking. - GPPShare.h -- Header file to include for sharing with Google+. - GPPSignIn.h -- Header file to include for signing into Google+. - GPPSignInButton.h -- Header file to include for showing a button to - sign in with Google+. - libGooglePlus.a -- Static library built for iOS device to link into your app. - libGooglePlusUniversal.a -- Static library built for both iOS device and - simulator to link into your app. +GooglePlus.framework/ -- The Google+ SDK framework. -OpenSource/ -- Google open source files used by the SDK. Add all files in this - directory into your project if you're not already using them. - Also see comments for the subdirectory below. - GTL/ -- Google open source files only used by the sample app. Include them - into your project if you're going to use the same functionality, - e.g. writing user's app activities. +GooglePlus.bundle/ -- Resources that can be used in your app. + Required if |GPPSignInButton| is used. -Resources/ -- Resources that can be used in your app. - For |GPPSignInButton|, the gpp_sign_in_*.png images - are required. +GoogleOpenSource.framework/ -- A framework containing all the open source files + used by the SDK. + Either add this framework or add individual + files in OpenSource/ directory into your project. + +OpenSource/ -- Google open source files used by the SDK. + This contains the same code as in GoogleOpenSource.framework. + If you're not adding GoogleOpenSource.framework, add the files + you need from this directory into your project. SampleCode/ -- Sample code for your reference only. Do not include this in your project. diff --git a/External/google-plus-ios-sdk/SampleCode/AppDelegate.h b/External/google-plus-ios-sdk/SampleCode/AppDelegate.h new file mode 100644 index 00000000..4b7360a2 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/AppDelegate.h @@ -0,0 +1,30 @@ +// +// AppDelegate.h +// +// Copyright 2012 Google Inc. +// +// 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 + +@class GTMOAuth2Authentication; + +@interface AppDelegate : UIResponder + +// The sample app's |UIWindow|. +@property (retain, nonatomic) UIWindow *window; +// The navigation controller. +@property (retain, nonatomic) UINavigationController *navigationController; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/AppDelegate.m b/External/google-plus-ios-sdk/SampleCode/AppDelegate.m new file mode 100644 index 00000000..51c4b340 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/AppDelegate.m @@ -0,0 +1,90 @@ +// +// AppDelegate.m +// +// Copyright 2012 Google Inc. +// +// 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" + +#import +#import "MasterViewController.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + +@synthesize window = window_; +@synthesize navigationController = navigationController_; + +// DO NOT USE THIS CLIENT ID. IT WILL NOT WORK FOR YOUR APP. +// Please use the client ID created for you by Google. +static NSString * const kClientID = + @"452265719636.apps.googleusercontent.com"; + +#pragma mark Object life-cycle. + +- (void)dealloc { + [window_ release]; + [navigationController_ release]; + [super dealloc]; +} + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Set app's client ID for |GPPSignIn| and |GPPShare|. + [GPPSignIn sharedInstance].clientID = kClientID; + + self.window = [[[UIWindow alloc] + initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; + MasterViewController *masterViewController = + [[[MasterViewController alloc] initWithNibName:@"MasterViewController" + bundle:nil] autorelease]; + self.navigationController = + [[[UINavigationController alloc] + initWithRootViewController:masterViewController] autorelease]; + self.window.rootViewController = self.navigationController; + [self.window makeKeyAndVisible]; + + // Read Google+ deep-link data. + [GPPDeepLink setDelegate:self]; + [GPPDeepLink readDeepLinkAfterInstall]; + return YES; +} + +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation { + return [GPPURLHandler handleURL:url + sourceApplication:sourceApplication + annotation:annotation]; +} + +#pragma mark - GPPDeepLinkDelegate + +- (void)didReceiveDeepLink:(GPPDeepLink *)deepLink { + // An example to handle the deep link data. + UIAlertView *alert = [[[UIAlertView alloc] + initWithTitle:@"Deep-link Data" + message:[deepLink deepLinkID] + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:nil] autorelease]; + [alert show]; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist index 4c97df21..707c3762 100644 --- a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist @@ -11,6 +11,8 @@ CFBundleIconFiles Icon.png + Icon-72.png + Icon-144.png Icon@2x.png CFBundleIcons @@ -20,6 +22,8 @@ CFBundleIconFiles Icon.png + Icon-72.png + Icon-144.png Icon@2x.png diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj index 95aeba7e..d484a364 100644 --- a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj @@ -14,174 +14,31 @@ 00F70E99158007D90077799E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00F70E98158007D90077799E /* Security.framework */; }; 00F70E9B158008040077799E /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00F70E9A158008040077799E /* SystemConfiguration.framework */; }; 0C52D6F8158BAB1F001510E6 /* button_background.png in Resources */ = {isa = PBXBuildFile; fileRef = 0C52D6F7158BAB1F001510E6 /* button_background.png */; }; - D907F66B1669679000EB5273 /* GTLPlusAcl.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F65A1669679000EB5273 /* GTLPlusAcl.m */; }; - D907F66C1669679000EB5273 /* GTLPlusAclentryResource.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F65C1669679000EB5273 /* GTLPlusAclentryResource.m */; }; - D907F66D1669679000EB5273 /* GTLPlusActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F65E1669679000EB5273 /* GTLPlusActivity.m */; }; - D907F66E1669679000EB5273 /* GTLPlusActivityFeed.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F6601669679000EB5273 /* GTLPlusActivityFeed.m */; }; - D907F66F1669679000EB5273 /* GTLPlusComment.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F6621669679000EB5273 /* GTLPlusComment.m */; }; - D907F6701669679000EB5273 /* GTLPlusCommentFeed.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F6641669679000EB5273 /* GTLPlusCommentFeed.m */; }; - D907F6711669679000EB5273 /* GTLPlusMomentsFeed.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F6661669679000EB5273 /* GTLPlusMomentsFeed.m */; }; - D907F6721669679000EB5273 /* GTLPlusPeopleFeed.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F6681669679000EB5273 /* GTLPlusPeopleFeed.m */; }; - D907F6731669679000EB5273 /* GTLPlusPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = D907F66A1669679000EB5273 /* GTLPlusPerson.m */; }; + 8E47E994171CB75C003FBA75 /* GoogleOpenSource.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E47E991171CB75C003FBA75 /* GoogleOpenSource.framework */; }; + 8E47E995171CB75C003FBA75 /* GooglePlus.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8E47E992171CB75C003FBA75 /* GooglePlus.bundle */; }; + 8E47E996171CB75C003FBA75 /* GooglePlus.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E47E993171CB75C003FBA75 /* GooglePlus.framework */; }; D907F676166967D400EB5273 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D907F675166967D400EB5273 /* Icon@2x.png */; }; - D945ED39166AE4950051858C /* GooglePlusSampleListMomentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D945ED34166AE4950051858C /* GooglePlusSampleListMomentsViewController.m */; }; - D945ED3A166AE4950051858C /* GooglePlusSampleListMomentsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D945ED35166AE4950051858C /* GooglePlusSampleListMomentsViewController.xib */; }; - D945ED3B166AE4950051858C /* GooglePlusSampleListPeopleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D945ED37166AE4950051858C /* GooglePlusSampleListPeopleViewController.m */; }; - D945ED3C166AE4950051858C /* GooglePlusSampleListPeopleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D945ED38166AE4950051858C /* GooglePlusSampleListPeopleViewController.xib */; }; - D95C5B2616A08EE100EEF884 /* OpenInChromeController.m in Sources */ = {isa = PBXBuildFile; fileRef = D95C5B2516A08EE100EEF884 /* OpenInChromeController.m */; }; - D970AD4E16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC3816916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD4F16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC3B16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC3E16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC4116916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC4416916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC4716916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC4A16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC4D16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC5016916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC5316916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC5616916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC5916916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5A16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC5C16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5B16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC5F16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5C16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC6216916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5D16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC6516916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5E16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC6816916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD5F16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC6B16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC6E16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC7116916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC7416916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC7716916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC7A16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC7D16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC8016916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC8316916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC8616916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC8916916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6A16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC8C16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6B16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC8F16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6C16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC9216916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6D16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC9516916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6E16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC9816916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD6F16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC9B16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AC9E16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACA116916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACA416916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACA716916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACAA16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACAD16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACB016916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACB316916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACB616916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACB916916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7A16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACBC16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD7B16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACBE16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled.png */; }; - D970AD7C16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACBF16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled@2x.png */; }; - D970AD7D16916BBF00C7DD57 /* gpp_sign_in_dark_button_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC016916BBF00C7DD57 /* gpp_sign_in_dark_button_normal.png */; }; - D970AD7E16916BBF00C7DD57 /* gpp_sign_in_dark_button_normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC116916BBF00C7DD57 /* gpp_sign_in_dark_button_normal@2x.png */; }; - D970AD7F16916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC216916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed.png */; }; - D970AD8016916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC316916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed@2x.png */; }; - D970AD8116916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC416916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled.png */; }; - D970AD8216916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC516916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled@2x.png */; }; - D970AD8316916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC616916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal.png */; }; - D970AD8416916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC716916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal@2x.png */; }; - D970AD8516916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC816916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed.png */; }; - D970AD8616916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACC916916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed@2x.png */; }; - D970AD8716916BBF00C7DD57 /* gpp_sign_in_light_button_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACCA16916BBF00C7DD57 /* gpp_sign_in_light_button_disabled.png */; }; - D970AD8816916BBF00C7DD57 /* gpp_sign_in_light_button_disabled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACCB16916BBF00C7DD57 /* gpp_sign_in_light_button_disabled@2x.png */; }; - D970AD8916916BBF00C7DD57 /* gpp_sign_in_light_button_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACCC16916BBF00C7DD57 /* gpp_sign_in_light_button_normal.png */; }; - D970AD8A16916BBF00C7DD57 /* gpp_sign_in_light_button_normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACCD16916BBF00C7DD57 /* gpp_sign_in_light_button_normal@2x.png */; }; - D970AD8B16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACCE16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed.png */; }; - D970AD8C16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACCF16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed@2x.png */; }; - D970AD8D16916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACD016916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled.png */; }; - D970AD8E16916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACD116916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled@2x.png */; }; - D970AD8F16916BBF00C7DD57 /* gpp_sign_in_light_icon_normal.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACD216916BBF00C7DD57 /* gpp_sign_in_light_icon_normal.png */; }; - D970AD9016916BBF00C7DD57 /* gpp_sign_in_light_icon_normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACD316916BBF00C7DD57 /* gpp_sign_in_light_icon_normal@2x.png */; }; - D970AD9116916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACD416916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed.png */; }; - D970AD9216916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D970ACD516916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed@2x.png */; }; - D970AD9316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACD716916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACDA16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACDD16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACE016916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACE316916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACE616916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACE916916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9A16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACEC16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9B16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACEF16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9C16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACF216916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9D16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACF516916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9E16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACF816916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970AD9F16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACFB16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970ACFE16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD0116916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD0416916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD0716916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD0A16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD0D16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD1016916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD1316916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD1616916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADA916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD1916916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADAA16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD1C16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADAB16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD1F16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADAC16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD2216916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADAD16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD2516916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADAE16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD2816916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADAF16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD2B16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD2E16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD3116916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD3416916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD3716916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD3A16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD3D16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD4016916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD4316916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD4616916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADB916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD4916916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; - D970ADBA16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */ = {isa = PBXBuildFile; fileRef = D970AD4C16916BBF00C7DD57 /* GooglePlusPlatform.strings */; }; + D945ED39166AE4950051858C /* ListMomentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D945ED34166AE4950051858C /* ListMomentsViewController.m */; }; + D945ED3A166AE4950051858C /* ListMomentsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D945ED35166AE4950051858C /* ListMomentsViewController.xib */; }; + D945ED3B166AE4950051858C /* ListPeopleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D945ED37166AE4950051858C /* ListPeopleViewController.m */; }; + D945ED3C166AE4950051858C /* ListPeopleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D945ED38166AE4950051858C /* ListPeopleViewController.xib */; }; D973B402158ABC1F0083A4B5 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D973B401158ABC1F0083A4B5 /* MessageUI.framework */; }; D98254A915990D8D0060CA47 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = D98254A715990D8D0060CA47 /* Icon.png */; }; - D9EE748D158A8C0E00EC1D05 /* GTLBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7449158A8C0E00EC1D05 /* GTLBase64.m */; }; - D9EE748E158A8C0E00EC1D05 /* GTLBatchQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE744B158A8C0E00EC1D05 /* GTLBatchQuery.m */; }; - D9EE748F158A8C0E00EC1D05 /* GTLBatchResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE744D158A8C0E00EC1D05 /* GTLBatchResult.m */; }; - D9EE7490158A8C0E00EC1D05 /* GTLDateTime.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE744F158A8C0E00EC1D05 /* GTLDateTime.m */; }; - D9EE7491158A8C0E00EC1D05 /* GTLErrorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7452158A8C0E00EC1D05 /* GTLErrorObject.m */; }; - D9EE7492158A8C0E00EC1D05 /* GTLFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7454158A8C0E00EC1D05 /* GTLFramework.m */; }; - D9EE7493158A8C0E00EC1D05 /* GTLJSONParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7456158A8C0E00EC1D05 /* GTLJSONParser.m */; }; - D9EE7494158A8C0E00EC1D05 /* GTLObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7458158A8C0E00EC1D05 /* GTLObject.m */; }; - D9EE7495158A8C0E00EC1D05 /* GTLPlusConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE745C158A8C0E00EC1D05 /* GTLPlusConstants.m */; }; - D9EE7496158A8C0E00EC1D05 /* GTLPlusItemScope.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE745E158A8C0E00EC1D05 /* GTLPlusItemScope.m */; }; - D9EE7497158A8C0E00EC1D05 /* GTLPlusMoment.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7460158A8C0E00EC1D05 /* GTLPlusMoment.m */; }; - D9EE7499158A8C0E00EC1D05 /* GTLQueryPlus.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7464158A8C0E00EC1D05 /* GTLQueryPlus.m */; }; - D9EE749A158A8C0E00EC1D05 /* GTLServicePlus.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7466158A8C0E00EC1D05 /* GTLServicePlus.m */; }; - D9EE749B158A8C0E00EC1D05 /* GTLQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7468158A8C0E00EC1D05 /* GTLQuery.m */; }; - D9EE749C158A8C0E00EC1D05 /* GTLRuntimeCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE746A158A8C0E00EC1D05 /* GTLRuntimeCommon.m */; }; - D9EE749D158A8C0E00EC1D05 /* GTLService.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE746C158A8C0E00EC1D05 /* GTLService.m */; }; - D9EE749E158A8C0E00EC1D05 /* GTLUploadParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE746F158A8C0E00EC1D05 /* GTLUploadParameters.m */; }; - D9EE749F158A8C0E00EC1D05 /* GTLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7471158A8C0E00EC1D05 /* GTLUtilities.m */; }; - D9EE74A0158A8C0E00EC1D05 /* GTMHTTPFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7475158A8C0E00EC1D05 /* GTMHTTPFetcher.m */; }; - D9EE74A1158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7477158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m */; }; - D9EE74A2158A8C0E00EC1D05 /* GTMHTTPFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7479158A8C0E00EC1D05 /* GTMHTTPFetcherService.m */; }; - D9EE74A3158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE747B158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m */; }; - D9EE74A4158A8C0E00EC1D05 /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE747D158A8C0E00EC1D05 /* GTMLogger.m */; }; - D9EE74A5158A8C0E00EC1D05 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE747F158A8C0E00EC1D05 /* GTMMethodCheck.m */; }; - D9EE74A6158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7481158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m */; }; - D9EE74A7158A8C0E00EC1D05 /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7483158A8C0E00EC1D05 /* GTMNSString+URLArguments.m */; }; - D9EE74A8158A8C0E00EC1D05 /* GTMOAuth2Authentication.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7485158A8C0E00EC1D05 /* GTMOAuth2Authentication.m */; }; - D9EE74A9158A8C0E00EC1D05 /* GTMOAuth2SignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7487158A8C0E00EC1D05 /* GTMOAuth2SignIn.m */; }; - D9EE74AA158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7489158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m */; }; - D9EE74AB158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE748A158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib */; }; - D9EE74AC158A8C0E00EC1D05 /* GTMObjC2Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE748C158A8C0E00EC1D05 /* GTMObjC2Runtime.m */; }; - D9EE74B0158A8D1E00EC1D05 /* libGooglePlusUniversal.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D9EE74AE158A8D1E00EC1D05 /* libGooglePlusUniversal.a */; }; - D9EE74C2158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B4158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m */; }; - D9EE74C3158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B6158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m */; }; - D9EE74C4158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74B7158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib */; }; - D9EE74C5158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B9158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m */; }; - D9EE74C6158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74BA158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib */; }; - D9EE74C7158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74BC158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m */; }; - D9EE74C8158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74BD158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib */; }; - D9EE74C9158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74BF158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m */; }; - D9EE74CA158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74C0158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib */; }; + D9A49D9F1720DD5E009C6DE2 /* Default@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D9A49D9B1720DD5E009C6DE2 /* Default@2x~iphone.png */; }; + D9A49DA01720DD5E009C6DE2 /* Default~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D9A49D9C1720DD5E009C6DE2 /* Default~iphone.png */; }; + D9A49DA11720DD5E009C6DE2 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = D9A49D9D1720DD5E009C6DE2 /* Icon-72.png */; }; + D9A49DA21720DD5E009C6DE2 /* Icon-144.png in Resources */ = {isa = PBXBuildFile; fileRef = D9A49D9E1720DD5E009C6DE2 /* Icon-144.png */; }; + D9EE74C2158A8E0500EC1D05 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B4158A8E0500EC1D05 /* AppDelegate.m */; }; + D9EE74C3158A8E0500EC1D05 /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B6158A8E0500EC1D05 /* MasterViewController.m */; }; + D9EE74C4158A8E0500EC1D05 /* MasterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74B7158A8E0500EC1D05 /* MasterViewController.xib */; }; + D9EE74C5158A8E0500EC1D05 /* MomentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B9158A8E0500EC1D05 /* MomentsViewController.m */; }; + D9EE74C6158A8E0500EC1D05 /* MomentsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74BA158A8E0500EC1D05 /* MomentsViewController.xib */; }; + D9EE74C7158A8E0500EC1D05 /* ShareViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74BC158A8E0500EC1D05 /* ShareViewController.m */; }; + D9EE74C8158A8E0500EC1D05 /* ShareViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74BD158A8E0500EC1D05 /* ShareViewController.xib */; }; + D9EE74C9158A8E0500EC1D05 /* SignInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74BF158A8E0500EC1D05 /* SignInViewController.m */; }; + D9EE74CA158A8E0500EC1D05 /* SignInViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74C0158A8E0500EC1D05 /* SignInViewController.xib */; }; D9EE74CD158A8E2900EC1D05 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74CB158A8E2900EC1D05 /* InfoPlist.strings */; }; + E0681E5F171F46EB0098D356 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E0681E5E171F46EB0098D356 /* Default-568h@2x.png */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -193,234 +50,40 @@ 00F70E98158007D90077799E /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 00F70E9A158008040077799E /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; 0C52D6F7158BAB1F001510E6 /* button_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_background.png; path = Resources/button_background.png; sourceTree = SOURCE_ROOT; }; - 294FD685163B67F500A9D5CA /* GPPDeepLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPPDeepLink.h; path = ../lib/GPPDeepLink.h; sourceTree = ""; }; - D907F6591669679000EB5273 /* GTLPlusAcl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusAcl.h; sourceTree = ""; }; - D907F65A1669679000EB5273 /* GTLPlusAcl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusAcl.m; sourceTree = ""; }; - D907F65B1669679000EB5273 /* GTLPlusAclentryResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusAclentryResource.h; sourceTree = ""; }; - D907F65C1669679000EB5273 /* GTLPlusAclentryResource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusAclentryResource.m; sourceTree = ""; }; - D907F65D1669679000EB5273 /* GTLPlusActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusActivity.h; sourceTree = ""; }; - D907F65E1669679000EB5273 /* GTLPlusActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusActivity.m; sourceTree = ""; }; - D907F65F1669679000EB5273 /* GTLPlusActivityFeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusActivityFeed.h; sourceTree = ""; }; - D907F6601669679000EB5273 /* GTLPlusActivityFeed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusActivityFeed.m; sourceTree = ""; }; - D907F6611669679000EB5273 /* GTLPlusComment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusComment.h; sourceTree = ""; }; - D907F6621669679000EB5273 /* GTLPlusComment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusComment.m; sourceTree = ""; }; - D907F6631669679000EB5273 /* GTLPlusCommentFeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusCommentFeed.h; sourceTree = ""; }; - D907F6641669679000EB5273 /* GTLPlusCommentFeed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusCommentFeed.m; sourceTree = ""; }; - D907F6651669679000EB5273 /* GTLPlusMomentsFeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusMomentsFeed.h; sourceTree = ""; }; - D907F6661669679000EB5273 /* GTLPlusMomentsFeed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusMomentsFeed.m; sourceTree = ""; }; - D907F6671669679000EB5273 /* GTLPlusPeopleFeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusPeopleFeed.h; sourceTree = ""; }; - D907F6681669679000EB5273 /* GTLPlusPeopleFeed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusPeopleFeed.m; sourceTree = ""; }; - D907F6691669679000EB5273 /* GTLPlusPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusPerson.h; sourceTree = ""; }; - D907F66A1669679000EB5273 /* GTLPlusPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusPerson.m; sourceTree = ""; }; + 8E47E991171CB75C003FBA75 /* GoogleOpenSource.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleOpenSource.framework; path = ../GoogleOpenSource.framework; sourceTree = ""; }; + 8E47E992171CB75C003FBA75 /* GooglePlus.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = GooglePlus.bundle; path = ../GooglePlus.bundle; sourceTree = ""; }; + 8E47E993171CB75C003FBA75 /* GooglePlus.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GooglePlus.framework; path = ../GooglePlus.framework; sourceTree = ""; }; D907F675166967D400EB5273 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "Resources/Icon@2x.png"; sourceTree = SOURCE_ROOT; }; - D945ED33166AE4950051858C /* GooglePlusSampleListMomentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleListMomentsViewController.h; sourceTree = SOURCE_ROOT; }; - D945ED34166AE4950051858C /* GooglePlusSampleListMomentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleListMomentsViewController.m; sourceTree = SOURCE_ROOT; }; - D945ED35166AE4950051858C /* GooglePlusSampleListMomentsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleListMomentsViewController.xib; sourceTree = SOURCE_ROOT; }; - D945ED36166AE4950051858C /* GooglePlusSampleListPeopleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleListPeopleViewController.h; sourceTree = SOURCE_ROOT; }; - D945ED37166AE4950051858C /* GooglePlusSampleListPeopleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleListPeopleViewController.m; sourceTree = SOURCE_ROOT; }; - D945ED38166AE4950051858C /* GooglePlusSampleListPeopleViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleListPeopleViewController.xib; sourceTree = SOURCE_ROOT; }; - D95C5B2416A08EE100EEF884 /* OpenInChromeController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenInChromeController.h; sourceTree = ""; }; - D95C5B2516A08EE100EEF884 /* OpenInChromeController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OpenInChromeController.m; sourceTree = ""; }; - D970AC3916916BBF00C7DD57 /* af */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = af; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC3C16916BBF00C7DD57 /* am */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = am; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC3F16916BBF00C7DD57 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC4216916BBF00C7DD57 /* be */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = be; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC4516916BBF00C7DD57 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC4816916BBF00C7DD57 /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC4B16916BBF00C7DD57 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC4E16916BBF00C7DD57 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC5116916BBF00C7DD57 /* de_AT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de_AT; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC5416916BBF00C7DD57 /* de_CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de_CH; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC5716916BBF00C7DD57 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC5A16916BBF00C7DD57 /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC5D16916BBF00C7DD57 /* en_GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en_GB; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC6016916BBF00C7DD57 /* en_IE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en_IE; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC6316916BBF00C7DD57 /* en_IN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en_IN; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC6616916BBF00C7DD57 /* en_SG */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en_SG; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC6916916BBF00C7DD57 /* en_ZA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en_ZA; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC6C16916BBF00C7DD57 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC6F16916BBF00C7DD57 /* es_419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_419; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC7216916BBF00C7DD57 /* es_AR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_AR; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC7516916BBF00C7DD57 /* es_BO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_BO; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC7816916BBF00C7DD57 /* es_CL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_CL; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC7B16916BBF00C7DD57 /* es_CO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_CO; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC7E16916BBF00C7DD57 /* es_CR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_CR; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC8116916BBF00C7DD57 /* es_DO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_DO; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC8416916BBF00C7DD57 /* es_EC */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_EC; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC8716916BBF00C7DD57 /* es_GT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_GT; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC8A16916BBF00C7DD57 /* es_HN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_HN; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC8D16916BBF00C7DD57 /* es_MX */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_MX; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC9016916BBF00C7DD57 /* es_NI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_NI; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC9316916BBF00C7DD57 /* es_PA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_PA; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC9616916BBF00C7DD57 /* es_PE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_PE; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC9916916BBF00C7DD57 /* es_PR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_PR; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC9C16916BBF00C7DD57 /* es_PY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_PY; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AC9F16916BBF00C7DD57 /* es_SV */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_SV; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACA216916BBF00C7DD57 /* es_US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_US; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACA516916BBF00C7DD57 /* es_UY */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_UY; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACA816916BBF00C7DD57 /* es_VE */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es_VE; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACAB16916BBF00C7DD57 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACAE16916BBF00C7DD57 /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACB116916BBF00C7DD57 /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACB416916BBF00C7DD57 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACB716916BBF00C7DD57 /* fil */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fil; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACBA16916BBF00C7DD57 /* fr_CH */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr_CH; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACBD16916BBF00C7DD57 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACBE16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_dark_button_disabled.png; path = ../Resources/gpp_sign_in_dark_button_disabled.png; sourceTree = ""; }; - D970ACBF16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_dark_button_disabled@2x.png"; path = "../Resources/gpp_sign_in_dark_button_disabled@2x.png"; sourceTree = ""; }; - D970ACC016916BBF00C7DD57 /* gpp_sign_in_dark_button_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_dark_button_normal.png; path = ../Resources/gpp_sign_in_dark_button_normal.png; sourceTree = ""; }; - D970ACC116916BBF00C7DD57 /* gpp_sign_in_dark_button_normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_dark_button_normal@2x.png"; path = "../Resources/gpp_sign_in_dark_button_normal@2x.png"; sourceTree = ""; }; - D970ACC216916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_dark_button_pressed.png; path = ../Resources/gpp_sign_in_dark_button_pressed.png; sourceTree = ""; }; - D970ACC316916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_dark_button_pressed@2x.png"; path = "../Resources/gpp_sign_in_dark_button_pressed@2x.png"; sourceTree = ""; }; - D970ACC416916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_dark_icon_disabled.png; path = ../Resources/gpp_sign_in_dark_icon_disabled.png; sourceTree = ""; }; - D970ACC516916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_dark_icon_disabled@2x.png"; path = "../Resources/gpp_sign_in_dark_icon_disabled@2x.png"; sourceTree = ""; }; - D970ACC616916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_dark_icon_normal.png; path = ../Resources/gpp_sign_in_dark_icon_normal.png; sourceTree = ""; }; - D970ACC716916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_dark_icon_normal@2x.png"; path = "../Resources/gpp_sign_in_dark_icon_normal@2x.png"; sourceTree = ""; }; - D970ACC816916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_dark_icon_pressed.png; path = ../Resources/gpp_sign_in_dark_icon_pressed.png; sourceTree = ""; }; - D970ACC916916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_dark_icon_pressed@2x.png"; path = "../Resources/gpp_sign_in_dark_icon_pressed@2x.png"; sourceTree = ""; }; - D970ACCA16916BBF00C7DD57 /* gpp_sign_in_light_button_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_light_button_disabled.png; path = ../Resources/gpp_sign_in_light_button_disabled.png; sourceTree = ""; }; - D970ACCB16916BBF00C7DD57 /* gpp_sign_in_light_button_disabled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_light_button_disabled@2x.png"; path = "../Resources/gpp_sign_in_light_button_disabled@2x.png"; sourceTree = ""; }; - D970ACCC16916BBF00C7DD57 /* gpp_sign_in_light_button_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_light_button_normal.png; path = ../Resources/gpp_sign_in_light_button_normal.png; sourceTree = ""; }; - D970ACCD16916BBF00C7DD57 /* gpp_sign_in_light_button_normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_light_button_normal@2x.png"; path = "../Resources/gpp_sign_in_light_button_normal@2x.png"; sourceTree = ""; }; - D970ACCE16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_light_button_pressed.png; path = ../Resources/gpp_sign_in_light_button_pressed.png; sourceTree = ""; }; - D970ACCF16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_light_button_pressed@2x.png"; path = "../Resources/gpp_sign_in_light_button_pressed@2x.png"; sourceTree = ""; }; - D970ACD016916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_light_icon_disabled.png; path = ../Resources/gpp_sign_in_light_icon_disabled.png; sourceTree = ""; }; - D970ACD116916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_light_icon_disabled@2x.png"; path = "../Resources/gpp_sign_in_light_icon_disabled@2x.png"; sourceTree = ""; }; - D970ACD216916BBF00C7DD57 /* gpp_sign_in_light_icon_normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_light_icon_normal.png; path = ../Resources/gpp_sign_in_light_icon_normal.png; sourceTree = ""; }; - D970ACD316916BBF00C7DD57 /* gpp_sign_in_light_icon_normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_light_icon_normal@2x.png"; path = "../Resources/gpp_sign_in_light_icon_normal@2x.png"; sourceTree = ""; }; - D970ACD416916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gpp_sign_in_light_icon_pressed.png; path = ../Resources/gpp_sign_in_light_icon_pressed.png; sourceTree = ""; }; - D970ACD516916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gpp_sign_in_light_icon_pressed@2x.png"; path = "../Resources/gpp_sign_in_light_icon_pressed@2x.png"; sourceTree = ""; }; - D970ACD816916BBF00C7DD57 /* gsw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = gsw; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACDB16916BBF00C7DD57 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACDE16916BBF00C7DD57 /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACE116916BBF00C7DD57 /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACE416916BBF00C7DD57 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACE716916BBF00C7DD57 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACEA16916BBF00C7DD57 /* in */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = in; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACED16916BBF00C7DD57 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACF016916BBF00C7DD57 /* iw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = iw; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACF316916BBF00C7DD57 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACF616916BBF00C7DD57 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACF916916BBF00C7DD57 /* ln */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ln; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACFC16916BBF00C7DD57 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970ACFF16916BBF00C7DD57 /* lv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lv; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD0216916BBF00C7DD57 /* mo */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = mo; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD0516916BBF00C7DD57 /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD0816916BBF00C7DD57 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD0B16916BBF00C7DD57 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD0E16916BBF00C7DD57 /* no */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = no; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD1116916BBF00C7DD57 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD1416916BBF00C7DD57 /* pt_BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt_BR; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD1716916BBF00C7DD57 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt_PT; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD1A16916BBF00C7DD57 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD1D16916BBF00C7DD57 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD2016916BBF00C7DD57 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD2316916BBF00C7DD57 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD2616916BBF00C7DD57 /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD2916916BBF00C7DD57 /* sr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sr; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD2C16916BBF00C7DD57 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD2F16916BBF00C7DD57 /* sw */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sw; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD3216916BBF00C7DD57 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD3516916BBF00C7DD57 /* tl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tl; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD3816916BBF00C7DD57 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD3B16916BBF00C7DD57 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD3E16916BBF00C7DD57 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD4116916BBF00C7DD57 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_CN; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD4416916BBF00C7DD57 /* zh_HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_HK; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD4716916BBF00C7DD57 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_TW; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD4A16916BBF00C7DD57 /* zh */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh; path = GooglePlusPlatform.strings; sourceTree = ""; }; - D970AD4D16916BBF00C7DD57 /* zu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zu; path = GooglePlusPlatform.strings; sourceTree = ""; }; + D945ED33166AE4950051858C /* ListMomentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListMomentsViewController.h; sourceTree = SOURCE_ROOT; }; + D945ED34166AE4950051858C /* ListMomentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListMomentsViewController.m; sourceTree = SOURCE_ROOT; }; + D945ED35166AE4950051858C /* ListMomentsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ListMomentsViewController.xib; sourceTree = SOURCE_ROOT; }; + D945ED36166AE4950051858C /* ListPeopleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListPeopleViewController.h; sourceTree = SOURCE_ROOT; }; + D945ED37166AE4950051858C /* ListPeopleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListPeopleViewController.m; sourceTree = SOURCE_ROOT; }; + D945ED38166AE4950051858C /* ListPeopleViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ListPeopleViewController.xib; sourceTree = SOURCE_ROOT; }; D973B401158ABC1F0083A4B5 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; D98254A715990D8D0060CA47 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = Resources/Icon.png; sourceTree = SOURCE_ROOT; }; - D9EE414B16C0B96E00AC228E /* GPPURLHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPPURLHandler.h; path = ../lib/GPPURLHandler.h; sourceTree = ""; }; - D9EE7431158A8BAE00EC1D05 /* GPPShare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPPShare.h; path = ../lib/GPPShare.h; sourceTree = ""; }; - D9EE7432158A8BAE00EC1D05 /* GPPSignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPPSignIn.h; path = ../lib/GPPSignIn.h; sourceTree = ""; }; - D9EE7433158A8BAE00EC1D05 /* GPPSignInButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPPSignInButton.h; path = ../lib/GPPSignInButton.h; sourceTree = ""; }; - D9EE7448158A8C0E00EC1D05 /* GTLBase64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBase64.h; sourceTree = ""; }; - D9EE7449158A8C0E00EC1D05 /* GTLBase64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBase64.m; sourceTree = ""; }; - D9EE744A158A8C0E00EC1D05 /* GTLBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBatchQuery.h; sourceTree = ""; }; - D9EE744B158A8C0E00EC1D05 /* GTLBatchQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBatchQuery.m; sourceTree = ""; }; - D9EE744C158A8C0E00EC1D05 /* GTLBatchResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBatchResult.h; sourceTree = ""; }; - D9EE744D158A8C0E00EC1D05 /* GTLBatchResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBatchResult.m; sourceTree = ""; }; - D9EE744E158A8C0E00EC1D05 /* GTLDateTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLDateTime.h; sourceTree = ""; }; - D9EE744F158A8C0E00EC1D05 /* GTLDateTime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLDateTime.m; sourceTree = ""; }; - D9EE7450158A8C0E00EC1D05 /* GTLDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLDefines.h; sourceTree = ""; }; - D9EE7451158A8C0E00EC1D05 /* GTLErrorObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLErrorObject.h; sourceTree = ""; }; - D9EE7452158A8C0E00EC1D05 /* GTLErrorObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLErrorObject.m; sourceTree = ""; }; - D9EE7453158A8C0E00EC1D05 /* GTLFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLFramework.h; sourceTree = ""; }; - D9EE7454158A8C0E00EC1D05 /* GTLFramework.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLFramework.m; sourceTree = ""; }; - D9EE7455158A8C0E00EC1D05 /* GTLJSONParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLJSONParser.h; sourceTree = ""; }; - D9EE7456158A8C0E00EC1D05 /* GTLJSONParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLJSONParser.m; sourceTree = ""; }; - D9EE7457158A8C0E00EC1D05 /* GTLObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLObject.h; sourceTree = ""; }; - D9EE7458158A8C0E00EC1D05 /* GTLObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLObject.m; sourceTree = ""; }; - D9EE745A158A8C0E00EC1D05 /* GTLPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlus.h; sourceTree = ""; }; - D9EE745B158A8C0E00EC1D05 /* GTLPlusConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusConstants.h; sourceTree = ""; }; - D9EE745C158A8C0E00EC1D05 /* GTLPlusConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusConstants.m; sourceTree = ""; }; - D9EE745D158A8C0E00EC1D05 /* GTLPlusItemScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusItemScope.h; sourceTree = ""; }; - D9EE745E158A8C0E00EC1D05 /* GTLPlusItemScope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusItemScope.m; sourceTree = ""; }; - D9EE745F158A8C0E00EC1D05 /* GTLPlusMoment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusMoment.h; sourceTree = ""; }; - D9EE7460158A8C0E00EC1D05 /* GTLPlusMoment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusMoment.m; sourceTree = ""; }; - D9EE7463158A8C0E00EC1D05 /* GTLQueryPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLQueryPlus.h; sourceTree = ""; }; - D9EE7464158A8C0E00EC1D05 /* GTLQueryPlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLQueryPlus.m; sourceTree = ""; }; - D9EE7465158A8C0E00EC1D05 /* GTLServicePlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLServicePlus.h; sourceTree = ""; }; - D9EE7466158A8C0E00EC1D05 /* GTLServicePlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLServicePlus.m; sourceTree = ""; }; - D9EE7467158A8C0E00EC1D05 /* GTLQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLQuery.h; sourceTree = ""; }; - D9EE7468158A8C0E00EC1D05 /* GTLQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLQuery.m; sourceTree = ""; }; - D9EE7469158A8C0E00EC1D05 /* GTLRuntimeCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLRuntimeCommon.h; sourceTree = ""; }; - D9EE746A158A8C0E00EC1D05 /* GTLRuntimeCommon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLRuntimeCommon.m; sourceTree = ""; }; - D9EE746B158A8C0E00EC1D05 /* GTLService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLService.h; sourceTree = ""; }; - D9EE746C158A8C0E00EC1D05 /* GTLService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLService.m; sourceTree = ""; }; - D9EE746D158A8C0E00EC1D05 /* GTLTargetNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLTargetNamespace.h; sourceTree = ""; }; - D9EE746E158A8C0E00EC1D05 /* GTLUploadParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLUploadParameters.h; sourceTree = ""; }; - D9EE746F158A8C0E00EC1D05 /* GTLUploadParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLUploadParameters.m; sourceTree = ""; }; - D9EE7470158A8C0E00EC1D05 /* GTLUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLUtilities.h; sourceTree = ""; }; - D9EE7471158A8C0E00EC1D05 /* GTLUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLUtilities.m; sourceTree = ""; }; - D9EE7472158A8C0E00EC1D05 /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = ""; }; - D9EE7473158A8C0E00EC1D05 /* GTMGarbageCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMGarbageCollection.h; sourceTree = ""; }; - D9EE7474158A8C0E00EC1D05 /* GTMHTTPFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcher.h; sourceTree = ""; }; - D9EE7475158A8C0E00EC1D05 /* GTMHTTPFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcher.m; sourceTree = ""; }; - D9EE7476158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcherLogging.h; sourceTree = ""; }; - D9EE7477158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcherLogging.m; sourceTree = ""; }; - D9EE7478158A8C0E00EC1D05 /* GTMHTTPFetcherService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcherService.h; sourceTree = ""; }; - D9EE7479158A8C0E00EC1D05 /* GTMHTTPFetcherService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcherService.m; sourceTree = ""; }; - D9EE747A158A8C0E00EC1D05 /* GTMHTTPFetchHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetchHistory.h; sourceTree = ""; }; - D9EE747B158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetchHistory.m; sourceTree = ""; }; - D9EE747C158A8C0E00EC1D05 /* GTMLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLogger.h; sourceTree = ""; }; - D9EE747D158A8C0E00EC1D05 /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLogger.m; sourceTree = ""; }; - D9EE747E158A8C0E00EC1D05 /* GTMMethodCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMMethodCheck.h; sourceTree = ""; }; - D9EE747F158A8C0E00EC1D05 /* GTMMethodCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMMethodCheck.m; sourceTree = ""; }; - D9EE7480158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSDictionary+URLArguments.h"; sourceTree = ""; }; - D9EE7481158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+URLArguments.m"; sourceTree = ""; }; - D9EE7482158A8C0E00EC1D05 /* GTMNSString+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSString+URLArguments.h"; sourceTree = ""; }; - D9EE7483158A8C0E00EC1D05 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+URLArguments.m"; sourceTree = ""; }; - D9EE7484158A8C0E00EC1D05 /* GTMOAuth2Authentication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2Authentication.h; sourceTree = ""; }; - D9EE7485158A8C0E00EC1D05 /* GTMOAuth2Authentication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2Authentication.m; sourceTree = ""; }; - D9EE7486158A8C0E00EC1D05 /* GTMOAuth2SignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2SignIn.h; sourceTree = ""; }; - D9EE7487158A8C0E00EC1D05 /* GTMOAuth2SignIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2SignIn.m; sourceTree = ""; }; - D9EE7488158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2ViewControllerTouch.h; sourceTree = ""; }; - D9EE7489158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2ViewControllerTouch.m; sourceTree = ""; }; - D9EE748A158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GTMOAuth2ViewTouch.xib; sourceTree = ""; }; - D9EE748B158A8C0E00EC1D05 /* GTMObjC2Runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMObjC2Runtime.h; sourceTree = ""; }; - D9EE748C158A8C0E00EC1D05 /* GTMObjC2Runtime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMObjC2Runtime.m; sourceTree = ""; }; - D9EE74AD158A8D1E00EC1D05 /* libGooglePlus.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGooglePlus.a; path = ../lib/libGooglePlus.a; sourceTree = ""; }; - D9EE74AE158A8D1E00EC1D05 /* libGooglePlusUniversal.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGooglePlusUniversal.a; path = ../lib/libGooglePlusUniversal.a; sourceTree = ""; }; + D9A49D9B1720DD5E009C6DE2 /* Default@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x~iphone.png"; path = "Resources/Default@2x~iphone.png"; sourceTree = SOURCE_ROOT; }; + D9A49D9C1720DD5E009C6DE2 /* Default~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default~iphone.png"; path = "Resources/Default~iphone.png"; sourceTree = SOURCE_ROOT; }; + D9A49D9D1720DD5E009C6DE2 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "Resources/Icon-72.png"; sourceTree = SOURCE_ROOT; }; + D9A49D9E1720DD5E009C6DE2 /* Icon-144.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-144.png"; path = "Resources/Icon-144.png"; sourceTree = SOURCE_ROOT; }; D9EE74B1158A8E0500EC1D05 /* GooglePlusSample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GooglePlusSample-Info.plist"; sourceTree = SOURCE_ROOT; }; D9EE74B2158A8E0500EC1D05 /* GooglePlusSample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GooglePlusSample-Prefix.pch"; sourceTree = SOURCE_ROOT; }; - D9EE74B3158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleAppDelegate.h; sourceTree = SOURCE_ROOT; }; - D9EE74B4158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleAppDelegate.m; sourceTree = SOURCE_ROOT; }; - D9EE74B5158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleMasterViewController.h; sourceTree = SOURCE_ROOT; }; - D9EE74B6158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleMasterViewController.m; sourceTree = SOURCE_ROOT; }; - D9EE74B7158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleMasterViewController.xib; sourceTree = SOURCE_ROOT; }; - D9EE74B8158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleMomentsViewController.h; sourceTree = SOURCE_ROOT; }; - D9EE74B9158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleMomentsViewController.m; sourceTree = SOURCE_ROOT; }; - D9EE74BA158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleMomentsViewController.xib; sourceTree = SOURCE_ROOT; }; - D9EE74BB158A8E0500EC1D05 /* GooglePlusSampleShareViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleShareViewController.h; sourceTree = SOURCE_ROOT; }; - D9EE74BC158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleShareViewController.m; sourceTree = SOURCE_ROOT; }; - D9EE74BD158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleShareViewController.xib; sourceTree = SOURCE_ROOT; }; - D9EE74BE158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleSignInViewController.h; sourceTree = SOURCE_ROOT; }; - D9EE74BF158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleSignInViewController.m; sourceTree = SOURCE_ROOT; }; - D9EE74C0158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleSignInViewController.xib; sourceTree = SOURCE_ROOT; }; + D9EE74B3158A8E0500EC1D05 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; + D9EE74B4158A8E0500EC1D05 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; + D9EE74B5158A8E0500EC1D05 /* MasterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MasterViewController.h; sourceTree = SOURCE_ROOT; }; + D9EE74B6158A8E0500EC1D05 /* MasterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MasterViewController.m; sourceTree = SOURCE_ROOT; }; + D9EE74B7158A8E0500EC1D05 /* MasterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MasterViewController.xib; sourceTree = SOURCE_ROOT; }; + D9EE74B8158A8E0500EC1D05 /* MomentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MomentsViewController.h; sourceTree = SOURCE_ROOT; }; + D9EE74B9158A8E0500EC1D05 /* MomentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MomentsViewController.m; sourceTree = SOURCE_ROOT; }; + D9EE74BA158A8E0500EC1D05 /* MomentsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MomentsViewController.xib; sourceTree = SOURCE_ROOT; }; + D9EE74BB158A8E0500EC1D05 /* ShareViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShareViewController.h; sourceTree = SOURCE_ROOT; }; + D9EE74BC158A8E0500EC1D05 /* ShareViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShareViewController.m; sourceTree = SOURCE_ROOT; }; + D9EE74BD158A8E0500EC1D05 /* ShareViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ShareViewController.xib; sourceTree = SOURCE_ROOT; }; + D9EE74BE158A8E0500EC1D05 /* SignInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignInViewController.h; sourceTree = SOURCE_ROOT; }; + D9EE74BF158A8E0500EC1D05 /* SignInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignInViewController.m; sourceTree = SOURCE_ROOT; }; + D9EE74C0158A8E0500EC1D05 /* SignInViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SignInViewController.xib; sourceTree = SOURCE_ROOT; }; D9EE74CC158A8E2900EC1D05 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = SOURCE_ROOT; }; + E0681E5E171F46EB0098D356 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "Resources/Default-568h@2x.png"; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -428,13 +91,14 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D973B402158ABC1F0083A4B5 /* MessageUI.framework in Frameworks */, + 8E47E996171CB75C003FBA75 /* GooglePlus.framework in Frameworks */, + 8E47E994171CB75C003FBA75 /* GoogleOpenSource.framework in Frameworks */, 00F70E9B158008040077799E /* SystemConfiguration.framework in Frameworks */, 00F70E99158007D90077799E /* Security.framework in Frameworks */, 0043C79F1580045B000DF02E /* UIKit.framework in Frameworks */, 0043C7A11580045B000DF02E /* Foundation.framework in Frameworks */, 0043C7A31580045B000DF02E /* CoreGraphics.framework in Frameworks */, - D9EE74B0158A8D1E00EC1D05 /* libGooglePlusUniversal.a in Frameworks */, + D973B402158ABC1F0083A4B5 /* MessageUI.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -444,8 +108,6 @@ 0043C78F1580045B000DF02E = { isa = PBXGroup; children = ( - D9EE7434158A8BB500EC1D05 /* GooglePlusSDK */, - D9EE7446158A8C0E00EC1D05 /* GoogleOpenSource */, 0043C7A41580045B000DF02E /* GooglePlusSample */, 0043C79D1580045B000DF02E /* Frameworks */, 0043C79B1580045B000DF02E /* Products */, @@ -463,6 +125,9 @@ 0043C79D1580045B000DF02E /* Frameworks */ = { isa = PBXGroup; children = ( + 8E47E993171CB75C003FBA75 /* GooglePlus.framework */, + 8E47E992171CB75C003FBA75 /* GooglePlus.bundle */, + 8E47E991171CB75C003FBA75 /* GoogleOpenSource.framework */, D973B401158ABC1F0083A4B5 /* MessageUI.framework */, 00F70E9A158008040077799E /* SystemConfiguration.framework */, 00F70E98158007D90077799E /* Security.framework */, @@ -476,26 +141,26 @@ 0043C7A41580045B000DF02E /* GooglePlusSample */ = { isa = PBXGroup; children = ( - D9EE74B3158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.h */, - D9EE74B4158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m */, - D945ED33166AE4950051858C /* GooglePlusSampleListMomentsViewController.h */, - D945ED34166AE4950051858C /* GooglePlusSampleListMomentsViewController.m */, - D945ED35166AE4950051858C /* GooglePlusSampleListMomentsViewController.xib */, - D945ED36166AE4950051858C /* GooglePlusSampleListPeopleViewController.h */, - D945ED37166AE4950051858C /* GooglePlusSampleListPeopleViewController.m */, - D945ED38166AE4950051858C /* GooglePlusSampleListPeopleViewController.xib */, - D9EE74B5158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.h */, - D9EE74B6158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m */, - D9EE74B7158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib */, - D9EE74B8158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.h */, - D9EE74B9158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m */, - D9EE74BA158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib */, - D9EE74BB158A8E0500EC1D05 /* GooglePlusSampleShareViewController.h */, - D9EE74BC158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m */, - D9EE74BD158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib */, - D9EE74BE158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.h */, - D9EE74BF158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m */, - D9EE74C0158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib */, + D9EE74B3158A8E0500EC1D05 /* AppDelegate.h */, + D9EE74B4158A8E0500EC1D05 /* AppDelegate.m */, + D945ED33166AE4950051858C /* ListMomentsViewController.h */, + D945ED34166AE4950051858C /* ListMomentsViewController.m */, + D945ED35166AE4950051858C /* ListMomentsViewController.xib */, + D945ED36166AE4950051858C /* ListPeopleViewController.h */, + D945ED37166AE4950051858C /* ListPeopleViewController.m */, + D945ED38166AE4950051858C /* ListPeopleViewController.xib */, + D9EE74B5158A8E0500EC1D05 /* MasterViewController.h */, + D9EE74B6158A8E0500EC1D05 /* MasterViewController.m */, + D9EE74B7158A8E0500EC1D05 /* MasterViewController.xib */, + D9EE74B8158A8E0500EC1D05 /* MomentsViewController.h */, + D9EE74B9158A8E0500EC1D05 /* MomentsViewController.m */, + D9EE74BA158A8E0500EC1D05 /* MomentsViewController.xib */, + D9EE74BB158A8E0500EC1D05 /* ShareViewController.h */, + D9EE74BC158A8E0500EC1D05 /* ShareViewController.m */, + D9EE74BD158A8E0500EC1D05 /* ShareViewController.xib */, + D9EE74BE158A8E0500EC1D05 /* SignInViewController.h */, + D9EE74BF158A8E0500EC1D05 /* SignInViewController.m */, + D9EE74C0158A8E0500EC1D05 /* SignInViewController.xib */, D98254AB15990DBC0060CA47 /* Resources */, 0043C7A51580045B000DF02E /* Supporting Files */, ); @@ -513,1022 +178,21 @@ name = "Supporting Files"; sourceTree = ""; }; - D970AC3716916BBF00C7DD57 /* af.lproj */ = { - isa = PBXGroup; - children = ( - D970AC3816916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = af.lproj; - path = ../Resources/af.lproj; - sourceTree = ""; - }; - D970AC3A16916BBF00C7DD57 /* am.lproj */ = { - isa = PBXGroup; - children = ( - D970AC3B16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = am.lproj; - path = ../Resources/am.lproj; - sourceTree = ""; - }; - D970AC3D16916BBF00C7DD57 /* ar.lproj */ = { - isa = PBXGroup; - children = ( - D970AC3E16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = ar.lproj; - path = ../Resources/ar.lproj; - sourceTree = ""; - }; - D970AC4016916BBF00C7DD57 /* be.lproj */ = { - isa = PBXGroup; - children = ( - D970AC4116916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = be.lproj; - path = ../Resources/be.lproj; - sourceTree = ""; - }; - D970AC4316916BBF00C7DD57 /* bg.lproj */ = { - isa = PBXGroup; - children = ( - D970AC4416916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = bg.lproj; - path = ../Resources/bg.lproj; - sourceTree = ""; - }; - D970AC4616916BBF00C7DD57 /* ca.lproj */ = { - isa = PBXGroup; - children = ( - D970AC4716916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = ca.lproj; - path = ../Resources/ca.lproj; - sourceTree = ""; - }; - D970AC4916916BBF00C7DD57 /* cs.lproj */ = { - isa = PBXGroup; - children = ( - D970AC4A16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = cs.lproj; - path = ../Resources/cs.lproj; - sourceTree = ""; - }; - D970AC4C16916BBF00C7DD57 /* da.lproj */ = { - isa = PBXGroup; - children = ( - D970AC4D16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = da.lproj; - path = ../Resources/da.lproj; - sourceTree = ""; - }; - D970AC4F16916BBF00C7DD57 /* de_AT.lproj */ = { - isa = PBXGroup; - children = ( - D970AC5016916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = de_AT.lproj; - path = ../Resources/de_AT.lproj; - sourceTree = ""; - }; - D970AC5216916BBF00C7DD57 /* de_CH.lproj */ = { - isa = PBXGroup; - children = ( - D970AC5316916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = de_CH.lproj; - path = ../Resources/de_CH.lproj; - sourceTree = ""; - }; - D970AC5516916BBF00C7DD57 /* de.lproj */ = { - isa = PBXGroup; - children = ( - D970AC5616916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = de.lproj; - path = ../Resources/de.lproj; - sourceTree = ""; - }; - D970AC5816916BBF00C7DD57 /* el.lproj */ = { - isa = PBXGroup; - children = ( - D970AC5916916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = el.lproj; - path = ../Resources/el.lproj; - sourceTree = ""; - }; - D970AC5B16916BBF00C7DD57 /* en_GB.lproj */ = { - isa = PBXGroup; - children = ( - D970AC5C16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = en_GB.lproj; - path = ../Resources/en_GB.lproj; - sourceTree = ""; - }; - D970AC5E16916BBF00C7DD57 /* en_IE.lproj */ = { - isa = PBXGroup; - children = ( - D970AC5F16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = en_IE.lproj; - path = ../Resources/en_IE.lproj; - sourceTree = ""; - }; - D970AC6116916BBF00C7DD57 /* en_IN.lproj */ = { - isa = PBXGroup; - children = ( - D970AC6216916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = en_IN.lproj; - path = ../Resources/en_IN.lproj; - sourceTree = ""; - }; - D970AC6416916BBF00C7DD57 /* en_SG.lproj */ = { - isa = PBXGroup; - children = ( - D970AC6516916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = en_SG.lproj; - path = ../Resources/en_SG.lproj; - sourceTree = ""; - }; - D970AC6716916BBF00C7DD57 /* en_ZA.lproj */ = { - isa = PBXGroup; - children = ( - D970AC6816916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = en_ZA.lproj; - path = ../Resources/en_ZA.lproj; - sourceTree = ""; - }; - D970AC6A16916BBF00C7DD57 /* en.lproj */ = { - isa = PBXGroup; - children = ( - D970AC6B16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = en.lproj; - path = ../Resources/en.lproj; - sourceTree = ""; - }; - D970AC6D16916BBF00C7DD57 /* es_419.lproj */ = { - isa = PBXGroup; - children = ( - D970AC6E16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_419.lproj; - path = ../Resources/es_419.lproj; - sourceTree = ""; - }; - D970AC7016916BBF00C7DD57 /* es_AR.lproj */ = { - isa = PBXGroup; - children = ( - D970AC7116916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_AR.lproj; - path = ../Resources/es_AR.lproj; - sourceTree = ""; - }; - D970AC7316916BBF00C7DD57 /* es_BO.lproj */ = { - isa = PBXGroup; - children = ( - D970AC7416916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_BO.lproj; - path = ../Resources/es_BO.lproj; - sourceTree = ""; - }; - D970AC7616916BBF00C7DD57 /* es_CL.lproj */ = { - isa = PBXGroup; - children = ( - D970AC7716916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_CL.lproj; - path = ../Resources/es_CL.lproj; - sourceTree = ""; - }; - D970AC7916916BBF00C7DD57 /* es_CO.lproj */ = { - isa = PBXGroup; - children = ( - D970AC7A16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_CO.lproj; - path = ../Resources/es_CO.lproj; - sourceTree = ""; - }; - D970AC7C16916BBF00C7DD57 /* es_CR.lproj */ = { - isa = PBXGroup; - children = ( - D970AC7D16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_CR.lproj; - path = ../Resources/es_CR.lproj; - sourceTree = ""; - }; - D970AC7F16916BBF00C7DD57 /* es_DO.lproj */ = { - isa = PBXGroup; - children = ( - D970AC8016916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_DO.lproj; - path = ../Resources/es_DO.lproj; - sourceTree = ""; - }; - D970AC8216916BBF00C7DD57 /* es_EC.lproj */ = { - isa = PBXGroup; - children = ( - D970AC8316916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_EC.lproj; - path = ../Resources/es_EC.lproj; - sourceTree = ""; - }; - D970AC8516916BBF00C7DD57 /* es_GT.lproj */ = { - isa = PBXGroup; - children = ( - D970AC8616916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_GT.lproj; - path = ../Resources/es_GT.lproj; - sourceTree = ""; - }; - D970AC8816916BBF00C7DD57 /* es_HN.lproj */ = { - isa = PBXGroup; - children = ( - D970AC8916916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_HN.lproj; - path = ../Resources/es_HN.lproj; - sourceTree = ""; - }; - D970AC8B16916BBF00C7DD57 /* es_MX.lproj */ = { - isa = PBXGroup; - children = ( - D970AC8C16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_MX.lproj; - path = ../Resources/es_MX.lproj; - sourceTree = ""; - }; - D970AC8E16916BBF00C7DD57 /* es_NI.lproj */ = { - isa = PBXGroup; - children = ( - D970AC8F16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_NI.lproj; - path = ../Resources/es_NI.lproj; - sourceTree = ""; - }; - D970AC9116916BBF00C7DD57 /* es_PA.lproj */ = { - isa = PBXGroup; - children = ( - D970AC9216916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_PA.lproj; - path = ../Resources/es_PA.lproj; - sourceTree = ""; - }; - D970AC9416916BBF00C7DD57 /* es_PE.lproj */ = { - isa = PBXGroup; - children = ( - D970AC9516916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_PE.lproj; - path = ../Resources/es_PE.lproj; - sourceTree = ""; - }; - D970AC9716916BBF00C7DD57 /* es_PR.lproj */ = { - isa = PBXGroup; - children = ( - D970AC9816916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_PR.lproj; - path = ../Resources/es_PR.lproj; - sourceTree = ""; - }; - D970AC9A16916BBF00C7DD57 /* es_PY.lproj */ = { - isa = PBXGroup; - children = ( - D970AC9B16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_PY.lproj; - path = ../Resources/es_PY.lproj; - sourceTree = ""; - }; - D970AC9D16916BBF00C7DD57 /* es_SV.lproj */ = { - isa = PBXGroup; - children = ( - D970AC9E16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_SV.lproj; - path = ../Resources/es_SV.lproj; - sourceTree = ""; - }; - D970ACA016916BBF00C7DD57 /* es_US.lproj */ = { - isa = PBXGroup; - children = ( - D970ACA116916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_US.lproj; - path = ../Resources/es_US.lproj; - sourceTree = ""; - }; - D970ACA316916BBF00C7DD57 /* es_UY.lproj */ = { - isa = PBXGroup; - children = ( - D970ACA416916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_UY.lproj; - path = ../Resources/es_UY.lproj; - sourceTree = ""; - }; - D970ACA616916BBF00C7DD57 /* es_VE.lproj */ = { - isa = PBXGroup; - children = ( - D970ACA716916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es_VE.lproj; - path = ../Resources/es_VE.lproj; - sourceTree = ""; - }; - D970ACA916916BBF00C7DD57 /* es.lproj */ = { - isa = PBXGroup; - children = ( - D970ACAA16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = es.lproj; - path = ../Resources/es.lproj; - sourceTree = ""; - }; - D970ACAC16916BBF00C7DD57 /* et.lproj */ = { - isa = PBXGroup; - children = ( - D970ACAD16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = et.lproj; - path = ../Resources/et.lproj; - sourceTree = ""; - }; - D970ACAF16916BBF00C7DD57 /* fa.lproj */ = { - isa = PBXGroup; - children = ( - D970ACB016916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = fa.lproj; - path = ../Resources/fa.lproj; - sourceTree = ""; - }; - D970ACB216916BBF00C7DD57 /* fi.lproj */ = { - isa = PBXGroup; - children = ( - D970ACB316916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = fi.lproj; - path = ../Resources/fi.lproj; - sourceTree = ""; - }; - D970ACB516916BBF00C7DD57 /* fil.lproj */ = { - isa = PBXGroup; - children = ( - D970ACB616916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = fil.lproj; - path = ../Resources/fil.lproj; - sourceTree = ""; - }; - D970ACB816916BBF00C7DD57 /* fr_CH.lproj */ = { - isa = PBXGroup; - children = ( - D970ACB916916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = fr_CH.lproj; - path = ../Resources/fr_CH.lproj; - sourceTree = ""; - }; - D970ACBB16916BBF00C7DD57 /* fr.lproj */ = { - isa = PBXGroup; - children = ( - D970ACBC16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = fr.lproj; - path = ../Resources/fr.lproj; - sourceTree = ""; - }; - D970ACD616916BBF00C7DD57 /* gsw.lproj */ = { - isa = PBXGroup; - children = ( - D970ACD716916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = gsw.lproj; - path = ../Resources/gsw.lproj; - sourceTree = ""; - }; - D970ACD916916BBF00C7DD57 /* he.lproj */ = { - isa = PBXGroup; - children = ( - D970ACDA16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = he.lproj; - path = ../Resources/he.lproj; - sourceTree = ""; - }; - D970ACDC16916BBF00C7DD57 /* hi.lproj */ = { - isa = PBXGroup; - children = ( - D970ACDD16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = hi.lproj; - path = ../Resources/hi.lproj; - sourceTree = ""; - }; - D970ACDF16916BBF00C7DD57 /* hr.lproj */ = { - isa = PBXGroup; - children = ( - D970ACE016916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = hr.lproj; - path = ../Resources/hr.lproj; - sourceTree = ""; - }; - D970ACE216916BBF00C7DD57 /* hu.lproj */ = { - isa = PBXGroup; - children = ( - D970ACE316916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = hu.lproj; - path = ../Resources/hu.lproj; - sourceTree = ""; - }; - D970ACE516916BBF00C7DD57 /* id.lproj */ = { - isa = PBXGroup; - children = ( - D970ACE616916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = id.lproj; - path = ../Resources/id.lproj; - sourceTree = ""; - }; - D970ACE816916BBF00C7DD57 /* in.lproj */ = { - isa = PBXGroup; - children = ( - D970ACE916916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = in.lproj; - path = ../Resources/in.lproj; - sourceTree = ""; - }; - D970ACEB16916BBF00C7DD57 /* it.lproj */ = { - isa = PBXGroup; - children = ( - D970ACEC16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = it.lproj; - path = ../Resources/it.lproj; - sourceTree = ""; - }; - D970ACEE16916BBF00C7DD57 /* iw.lproj */ = { - isa = PBXGroup; - children = ( - D970ACEF16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = iw.lproj; - path = ../Resources/iw.lproj; - sourceTree = ""; - }; - D970ACF116916BBF00C7DD57 /* ja.lproj */ = { - isa = PBXGroup; - children = ( - D970ACF216916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = ja.lproj; - path = ../Resources/ja.lproj; - sourceTree = ""; - }; - D970ACF416916BBF00C7DD57 /* ko.lproj */ = { - isa = PBXGroup; - children = ( - D970ACF516916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = ko.lproj; - path = ../Resources/ko.lproj; - sourceTree = ""; - }; - D970ACF716916BBF00C7DD57 /* ln.lproj */ = { - isa = PBXGroup; - children = ( - D970ACF816916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = ln.lproj; - path = ../Resources/ln.lproj; - sourceTree = ""; - }; - D970ACFA16916BBF00C7DD57 /* lt.lproj */ = { - isa = PBXGroup; - children = ( - D970ACFB16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = lt.lproj; - path = ../Resources/lt.lproj; - sourceTree = ""; - }; - D970ACFD16916BBF00C7DD57 /* lv.lproj */ = { - isa = PBXGroup; - children = ( - D970ACFE16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = lv.lproj; - path = ../Resources/lv.lproj; - sourceTree = ""; - }; - D970AD0016916BBF00C7DD57 /* mo.lproj */ = { - isa = PBXGroup; - children = ( - D970AD0116916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = mo.lproj; - path = ../Resources/mo.lproj; - sourceTree = ""; - }; - D970AD0316916BBF00C7DD57 /* ms.lproj */ = { - isa = PBXGroup; - children = ( - D970AD0416916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = ms.lproj; - path = ../Resources/ms.lproj; - sourceTree = ""; - }; - D970AD0616916BBF00C7DD57 /* nb.lproj */ = { - isa = PBXGroup; - children = ( - D970AD0716916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = nb.lproj; - path = ../Resources/nb.lproj; - sourceTree = ""; - }; - D970AD0916916BBF00C7DD57 /* nl.lproj */ = { - isa = PBXGroup; - children = ( - D970AD0A16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = nl.lproj; - path = ../Resources/nl.lproj; - sourceTree = ""; - }; - D970AD0C16916BBF00C7DD57 /* no.lproj */ = { - isa = PBXGroup; - children = ( - D970AD0D16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = no.lproj; - path = ../Resources/no.lproj; - sourceTree = ""; - }; - D970AD0F16916BBF00C7DD57 /* pl.lproj */ = { - isa = PBXGroup; - children = ( - D970AD1016916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = pl.lproj; - path = ../Resources/pl.lproj; - sourceTree = ""; - }; - D970AD1216916BBF00C7DD57 /* pt_BR.lproj */ = { - isa = PBXGroup; - children = ( - D970AD1316916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = pt_BR.lproj; - path = ../Resources/pt_BR.lproj; - sourceTree = ""; - }; - D970AD1516916BBF00C7DD57 /* pt_PT.lproj */ = { - isa = PBXGroup; - children = ( - D970AD1616916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = pt_PT.lproj; - path = ../Resources/pt_PT.lproj; - sourceTree = ""; - }; - D970AD1816916BBF00C7DD57 /* pt.lproj */ = { - isa = PBXGroup; - children = ( - D970AD1916916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = pt.lproj; - path = ../Resources/pt.lproj; - sourceTree = ""; - }; - D970AD1B16916BBF00C7DD57 /* ro.lproj */ = { - isa = PBXGroup; - children = ( - D970AD1C16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = ro.lproj; - path = ../Resources/ro.lproj; - sourceTree = ""; - }; - D970AD1E16916BBF00C7DD57 /* ru.lproj */ = { - isa = PBXGroup; - children = ( - D970AD1F16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = ru.lproj; - path = ../Resources/ru.lproj; - sourceTree = ""; - }; - D970AD2116916BBF00C7DD57 /* sk.lproj */ = { - isa = PBXGroup; - children = ( - D970AD2216916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = sk.lproj; - path = ../Resources/sk.lproj; - sourceTree = ""; - }; - D970AD2416916BBF00C7DD57 /* sl.lproj */ = { - isa = PBXGroup; - children = ( - D970AD2516916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = sl.lproj; - path = ../Resources/sl.lproj; - sourceTree = ""; - }; - D970AD2716916BBF00C7DD57 /* sr.lproj */ = { - isa = PBXGroup; - children = ( - D970AD2816916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = sr.lproj; - path = ../Resources/sr.lproj; - sourceTree = ""; - }; - D970AD2A16916BBF00C7DD57 /* sv.lproj */ = { - isa = PBXGroup; - children = ( - D970AD2B16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = sv.lproj; - path = ../Resources/sv.lproj; - sourceTree = ""; - }; - D970AD2D16916BBF00C7DD57 /* sw.lproj */ = { - isa = PBXGroup; - children = ( - D970AD2E16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = sw.lproj; - path = ../Resources/sw.lproj; - sourceTree = ""; - }; - D970AD3016916BBF00C7DD57 /* th.lproj */ = { - isa = PBXGroup; - children = ( - D970AD3116916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = th.lproj; - path = ../Resources/th.lproj; - sourceTree = ""; - }; - D970AD3316916BBF00C7DD57 /* tl.lproj */ = { - isa = PBXGroup; - children = ( - D970AD3416916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = tl.lproj; - path = ../Resources/tl.lproj; - sourceTree = ""; - }; - D970AD3616916BBF00C7DD57 /* tr.lproj */ = { - isa = PBXGroup; - children = ( - D970AD3716916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = tr.lproj; - path = ../Resources/tr.lproj; - sourceTree = ""; - }; - D970AD3916916BBF00C7DD57 /* uk.lproj */ = { - isa = PBXGroup; - children = ( - D970AD3A16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = uk.lproj; - path = ../Resources/uk.lproj; - sourceTree = ""; - }; - D970AD3C16916BBF00C7DD57 /* vi.lproj */ = { - isa = PBXGroup; - children = ( - D970AD3D16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = vi.lproj; - path = ../Resources/vi.lproj; - sourceTree = ""; - }; - D970AD3F16916BBF00C7DD57 /* zh_CN.lproj */ = { - isa = PBXGroup; - children = ( - D970AD4016916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = zh_CN.lproj; - path = ../Resources/zh_CN.lproj; - sourceTree = ""; - }; - D970AD4216916BBF00C7DD57 /* zh_HK.lproj */ = { - isa = PBXGroup; - children = ( - D970AD4316916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = zh_HK.lproj; - path = ../Resources/zh_HK.lproj; - sourceTree = ""; - }; - D970AD4516916BBF00C7DD57 /* zh_TW.lproj */ = { - isa = PBXGroup; - children = ( - D970AD4616916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = zh_TW.lproj; - path = ../Resources/zh_TW.lproj; - sourceTree = ""; - }; - D970AD4816916BBF00C7DD57 /* zh.lproj */ = { - isa = PBXGroup; - children = ( - D970AD4916916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = zh.lproj; - path = ../Resources/zh.lproj; - sourceTree = ""; - }; - D970AD4B16916BBF00C7DD57 /* zu.lproj */ = { - isa = PBXGroup; - children = ( - D970AD4C16916BBF00C7DD57 /* GooglePlusPlatform.strings */, - ); - name = zu.lproj; - path = ../Resources/zu.lproj; - sourceTree = ""; - }; D98254AB15990DBC0060CA47 /* Resources */ = { isa = PBXGroup; children = ( - D907F675166967D400EB5273 /* Icon@2x.png */, - D98254A715990D8D0060CA47 /* Icon.png */, 0C52D6F7158BAB1F001510E6 /* button_background.png */, + E0681E5E171F46EB0098D356 /* Default-568h@2x.png */, + D9A49D9B1720DD5E009C6DE2 /* Default@2x~iphone.png */, + D9A49D9C1720DD5E009C6DE2 /* Default~iphone.png */, + D9A49D9E1720DD5E009C6DE2 /* Icon-144.png */, + D9A49D9D1720DD5E009C6DE2 /* Icon-72.png */, + D98254A715990D8D0060CA47 /* Icon.png */, + D907F675166967D400EB5273 /* Icon@2x.png */, ); name = Resources; sourceTree = ""; }; - D9EE7434158A8BB500EC1D05 /* GooglePlusSDK */ = { - isa = PBXGroup; - children = ( - D9EE7431158A8BAE00EC1D05 /* GPPShare.h */, - 294FD685163B67F500A9D5CA /* GPPDeepLink.h */, - D9EE7432158A8BAE00EC1D05 /* GPPSignIn.h */, - D9EE7433158A8BAE00EC1D05 /* GPPSignInButton.h */, - D9EE414B16C0B96E00AC228E /* GPPURLHandler.h */, - D9EE74AD158A8D1E00EC1D05 /* libGooglePlus.a */, - D9EE74AE158A8D1E00EC1D05 /* libGooglePlusUniversal.a */, - D9EE7445158A8BDB00EC1D05 /* Resources */, - ); - name = GooglePlusSDK; - sourceTree = ""; - }; - D9EE7445158A8BDB00EC1D05 /* Resources */ = { - isa = PBXGroup; - children = ( - D970ACBE16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled.png */, - D970ACBF16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled@2x.png */, - D970ACC016916BBF00C7DD57 /* gpp_sign_in_dark_button_normal.png */, - D970ACC116916BBF00C7DD57 /* gpp_sign_in_dark_button_normal@2x.png */, - D970ACC216916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed.png */, - D970ACC316916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed@2x.png */, - D970ACC416916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled.png */, - D970ACC516916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled@2x.png */, - D970ACC616916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal.png */, - D970ACC716916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal@2x.png */, - D970ACC816916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed.png */, - D970ACC916916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed@2x.png */, - D970ACCA16916BBF00C7DD57 /* gpp_sign_in_light_button_disabled.png */, - D970ACCB16916BBF00C7DD57 /* gpp_sign_in_light_button_disabled@2x.png */, - D970ACCC16916BBF00C7DD57 /* gpp_sign_in_light_button_normal.png */, - D970ACCD16916BBF00C7DD57 /* gpp_sign_in_light_button_normal@2x.png */, - D970ACCE16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed.png */, - D970ACCF16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed@2x.png */, - D970ACD016916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled.png */, - D970ACD116916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled@2x.png */, - D970ACD216916BBF00C7DD57 /* gpp_sign_in_light_icon_normal.png */, - D970ACD316916BBF00C7DD57 /* gpp_sign_in_light_icon_normal@2x.png */, - D970ACD416916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed.png */, - D970ACD516916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed@2x.png */, - D970AC3716916BBF00C7DD57 /* af.lproj */, - D970AC3A16916BBF00C7DD57 /* am.lproj */, - D970AC3D16916BBF00C7DD57 /* ar.lproj */, - D970AC4016916BBF00C7DD57 /* be.lproj */, - D970AC4316916BBF00C7DD57 /* bg.lproj */, - D970AC4616916BBF00C7DD57 /* ca.lproj */, - D970AC4916916BBF00C7DD57 /* cs.lproj */, - D970AC4C16916BBF00C7DD57 /* da.lproj */, - D970AC4F16916BBF00C7DD57 /* de_AT.lproj */, - D970AC5216916BBF00C7DD57 /* de_CH.lproj */, - D970AC5516916BBF00C7DD57 /* de.lproj */, - D970AC5816916BBF00C7DD57 /* el.lproj */, - D970AC5B16916BBF00C7DD57 /* en_GB.lproj */, - D970AC5E16916BBF00C7DD57 /* en_IE.lproj */, - D970AC6116916BBF00C7DD57 /* en_IN.lproj */, - D970AC6416916BBF00C7DD57 /* en_SG.lproj */, - D970AC6716916BBF00C7DD57 /* en_ZA.lproj */, - D970AC6A16916BBF00C7DD57 /* en.lproj */, - D970AC6D16916BBF00C7DD57 /* es_419.lproj */, - D970AC7016916BBF00C7DD57 /* es_AR.lproj */, - D970AC7316916BBF00C7DD57 /* es_BO.lproj */, - D970AC7616916BBF00C7DD57 /* es_CL.lproj */, - D970AC7916916BBF00C7DD57 /* es_CO.lproj */, - D970AC7C16916BBF00C7DD57 /* es_CR.lproj */, - D970AC7F16916BBF00C7DD57 /* es_DO.lproj */, - D970AC8216916BBF00C7DD57 /* es_EC.lproj */, - D970AC8516916BBF00C7DD57 /* es_GT.lproj */, - D970AC8816916BBF00C7DD57 /* es_HN.lproj */, - D970AC8B16916BBF00C7DD57 /* es_MX.lproj */, - D970AC8E16916BBF00C7DD57 /* es_NI.lproj */, - D970AC9116916BBF00C7DD57 /* es_PA.lproj */, - D970AC9416916BBF00C7DD57 /* es_PE.lproj */, - D970AC9716916BBF00C7DD57 /* es_PR.lproj */, - D970AC9A16916BBF00C7DD57 /* es_PY.lproj */, - D970AC9D16916BBF00C7DD57 /* es_SV.lproj */, - D970ACA016916BBF00C7DD57 /* es_US.lproj */, - D970ACA316916BBF00C7DD57 /* es_UY.lproj */, - D970ACA616916BBF00C7DD57 /* es_VE.lproj */, - D970ACA916916BBF00C7DD57 /* es.lproj */, - D970ACAC16916BBF00C7DD57 /* et.lproj */, - D970ACAF16916BBF00C7DD57 /* fa.lproj */, - D970ACB216916BBF00C7DD57 /* fi.lproj */, - D970ACB516916BBF00C7DD57 /* fil.lproj */, - D970ACB816916BBF00C7DD57 /* fr_CH.lproj */, - D970ACBB16916BBF00C7DD57 /* fr.lproj */, - D970ACD616916BBF00C7DD57 /* gsw.lproj */, - D970ACD916916BBF00C7DD57 /* he.lproj */, - D970ACDC16916BBF00C7DD57 /* hi.lproj */, - D970ACDF16916BBF00C7DD57 /* hr.lproj */, - D970ACE216916BBF00C7DD57 /* hu.lproj */, - D970ACE516916BBF00C7DD57 /* id.lproj */, - D970ACE816916BBF00C7DD57 /* in.lproj */, - D970ACEB16916BBF00C7DD57 /* it.lproj */, - D970ACEE16916BBF00C7DD57 /* iw.lproj */, - D970ACF116916BBF00C7DD57 /* ja.lproj */, - D970ACF416916BBF00C7DD57 /* ko.lproj */, - D970ACF716916BBF00C7DD57 /* ln.lproj */, - D970ACFA16916BBF00C7DD57 /* lt.lproj */, - D970ACFD16916BBF00C7DD57 /* lv.lproj */, - D970AD0016916BBF00C7DD57 /* mo.lproj */, - D970AD0316916BBF00C7DD57 /* ms.lproj */, - D970AD0616916BBF00C7DD57 /* nb.lproj */, - D970AD0916916BBF00C7DD57 /* nl.lproj */, - D970AD0C16916BBF00C7DD57 /* no.lproj */, - D970AD0F16916BBF00C7DD57 /* pl.lproj */, - D970AD1216916BBF00C7DD57 /* pt_BR.lproj */, - D970AD1516916BBF00C7DD57 /* pt_PT.lproj */, - D970AD1816916BBF00C7DD57 /* pt.lproj */, - D970AD1B16916BBF00C7DD57 /* ro.lproj */, - D970AD1E16916BBF00C7DD57 /* ru.lproj */, - D970AD2116916BBF00C7DD57 /* sk.lproj */, - D970AD2416916BBF00C7DD57 /* sl.lproj */, - D970AD2716916BBF00C7DD57 /* sr.lproj */, - D970AD2A16916BBF00C7DD57 /* sv.lproj */, - D970AD2D16916BBF00C7DD57 /* sw.lproj */, - D970AD3016916BBF00C7DD57 /* th.lproj */, - D970AD3316916BBF00C7DD57 /* tl.lproj */, - D970AD3616916BBF00C7DD57 /* tr.lproj */, - D970AD3916916BBF00C7DD57 /* uk.lproj */, - D970AD3C16916BBF00C7DD57 /* vi.lproj */, - D970AD3F16916BBF00C7DD57 /* zh_CN.lproj */, - D970AD4216916BBF00C7DD57 /* zh_HK.lproj */, - D970AD4516916BBF00C7DD57 /* zh_TW.lproj */, - D970AD4816916BBF00C7DD57 /* zh.lproj */, - D970AD4B16916BBF00C7DD57 /* zu.lproj */, - ); - name = Resources; - sourceTree = ""; - }; - D9EE7446158A8C0E00EC1D05 /* GoogleOpenSource */ = { - isa = PBXGroup; - children = ( - D9EE7447158A8C0E00EC1D05 /* GTL */, - D9EE7472158A8C0E00EC1D05 /* GTMDefines.h */, - D9EE7473158A8C0E00EC1D05 /* GTMGarbageCollection.h */, - D9EE7474158A8C0E00EC1D05 /* GTMHTTPFetcher.h */, - D9EE7475158A8C0E00EC1D05 /* GTMHTTPFetcher.m */, - D9EE7476158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.h */, - D9EE7477158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m */, - D9EE7478158A8C0E00EC1D05 /* GTMHTTPFetcherService.h */, - D9EE7479158A8C0E00EC1D05 /* GTMHTTPFetcherService.m */, - D9EE747A158A8C0E00EC1D05 /* GTMHTTPFetchHistory.h */, - D9EE747B158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m */, - D9EE747C158A8C0E00EC1D05 /* GTMLogger.h */, - D9EE747D158A8C0E00EC1D05 /* GTMLogger.m */, - D9EE747E158A8C0E00EC1D05 /* GTMMethodCheck.h */, - D9EE747F158A8C0E00EC1D05 /* GTMMethodCheck.m */, - D9EE7480158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.h */, - D9EE7481158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m */, - D9EE7482158A8C0E00EC1D05 /* GTMNSString+URLArguments.h */, - D9EE7483158A8C0E00EC1D05 /* GTMNSString+URLArguments.m */, - D9EE7484158A8C0E00EC1D05 /* GTMOAuth2Authentication.h */, - D9EE7485158A8C0E00EC1D05 /* GTMOAuth2Authentication.m */, - D9EE7486158A8C0E00EC1D05 /* GTMOAuth2SignIn.h */, - D9EE7487158A8C0E00EC1D05 /* GTMOAuth2SignIn.m */, - D9EE7488158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.h */, - D9EE7489158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m */, - D9EE748A158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib */, - D9EE748B158A8C0E00EC1D05 /* GTMObjC2Runtime.h */, - D9EE748C158A8C0E00EC1D05 /* GTMObjC2Runtime.m */, - D95C5B2416A08EE100EEF884 /* OpenInChromeController.h */, - D95C5B2516A08EE100EEF884 /* OpenInChromeController.m */, - ); - name = GoogleOpenSource; - path = ../OpenSource; - sourceTree = ""; - }; - D9EE7447158A8C0E00EC1D05 /* GTL */ = { - isa = PBXGroup; - children = ( - D9EE7459158A8C0E00EC1D05 /* GTLPlus */, - D9EE7448158A8C0E00EC1D05 /* GTLBase64.h */, - D9EE7449158A8C0E00EC1D05 /* GTLBase64.m */, - D9EE744A158A8C0E00EC1D05 /* GTLBatchQuery.h */, - D9EE744B158A8C0E00EC1D05 /* GTLBatchQuery.m */, - D9EE744C158A8C0E00EC1D05 /* GTLBatchResult.h */, - D9EE744D158A8C0E00EC1D05 /* GTLBatchResult.m */, - D9EE744E158A8C0E00EC1D05 /* GTLDateTime.h */, - D9EE744F158A8C0E00EC1D05 /* GTLDateTime.m */, - D9EE7450158A8C0E00EC1D05 /* GTLDefines.h */, - D9EE7451158A8C0E00EC1D05 /* GTLErrorObject.h */, - D9EE7452158A8C0E00EC1D05 /* GTLErrorObject.m */, - D9EE7453158A8C0E00EC1D05 /* GTLFramework.h */, - D9EE7454158A8C0E00EC1D05 /* GTLFramework.m */, - D9EE7455158A8C0E00EC1D05 /* GTLJSONParser.h */, - D9EE7456158A8C0E00EC1D05 /* GTLJSONParser.m */, - D9EE7457158A8C0E00EC1D05 /* GTLObject.h */, - D9EE7458158A8C0E00EC1D05 /* GTLObject.m */, - D9EE7467158A8C0E00EC1D05 /* GTLQuery.h */, - D9EE7468158A8C0E00EC1D05 /* GTLQuery.m */, - D9EE7469158A8C0E00EC1D05 /* GTLRuntimeCommon.h */, - D9EE746A158A8C0E00EC1D05 /* GTLRuntimeCommon.m */, - D9EE746B158A8C0E00EC1D05 /* GTLService.h */, - D9EE746C158A8C0E00EC1D05 /* GTLService.m */, - D9EE746D158A8C0E00EC1D05 /* GTLTargetNamespace.h */, - D9EE746E158A8C0E00EC1D05 /* GTLUploadParameters.h */, - D9EE746F158A8C0E00EC1D05 /* GTLUploadParameters.m */, - D9EE7470158A8C0E00EC1D05 /* GTLUtilities.h */, - D9EE7471158A8C0E00EC1D05 /* GTLUtilities.m */, - ); - path = GTL; - sourceTree = ""; - }; - D9EE7459158A8C0E00EC1D05 /* GTLPlus */ = { - isa = PBXGroup; - children = ( - D9EE745A158A8C0E00EC1D05 /* GTLPlus.h */, - D907F6591669679000EB5273 /* GTLPlusAcl.h */, - D907F65A1669679000EB5273 /* GTLPlusAcl.m */, - D907F65B1669679000EB5273 /* GTLPlusAclentryResource.h */, - D907F65C1669679000EB5273 /* GTLPlusAclentryResource.m */, - D907F65D1669679000EB5273 /* GTLPlusActivity.h */, - D907F65E1669679000EB5273 /* GTLPlusActivity.m */, - D907F65F1669679000EB5273 /* GTLPlusActivityFeed.h */, - D907F6601669679000EB5273 /* GTLPlusActivityFeed.m */, - D907F6611669679000EB5273 /* GTLPlusComment.h */, - D907F6621669679000EB5273 /* GTLPlusComment.m */, - D907F6631669679000EB5273 /* GTLPlusCommentFeed.h */, - D907F6641669679000EB5273 /* GTLPlusCommentFeed.m */, - D9EE745B158A8C0E00EC1D05 /* GTLPlusConstants.h */, - D9EE745C158A8C0E00EC1D05 /* GTLPlusConstants.m */, - D9EE745D158A8C0E00EC1D05 /* GTLPlusItemScope.h */, - D9EE745E158A8C0E00EC1D05 /* GTLPlusItemScope.m */, - D9EE745F158A8C0E00EC1D05 /* GTLPlusMoment.h */, - D9EE7460158A8C0E00EC1D05 /* GTLPlusMoment.m */, - D907F6651669679000EB5273 /* GTLPlusMomentsFeed.h */, - D907F6661669679000EB5273 /* GTLPlusMomentsFeed.m */, - D907F6671669679000EB5273 /* GTLPlusPeopleFeed.h */, - D907F6681669679000EB5273 /* GTLPlusPeopleFeed.m */, - D907F6691669679000EB5273 /* GTLPlusPerson.h */, - D907F66A1669679000EB5273 /* GTLPlusPerson.m */, - D9EE7463158A8C0E00EC1D05 /* GTLQueryPlus.h */, - D9EE7464158A8C0E00EC1D05 /* GTLQueryPlus.m */, - D9EE7465158A8C0E00EC1D05 /* GTLServicePlus.h */, - D9EE7466158A8C0E00EC1D05 /* GTLServicePlus.m */, - ); - path = GTLPlus; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1555,7 +219,7 @@ 0043C7911580045B000DF02E /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 0460; ORGANIZATIONNAME = "Google Inc"; }; buildConfigurationList = 0043C7941580045B000DF02E /* Build configuration list for PBXProject "GooglePlusSample" */; @@ -1664,126 +328,22 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D9EE74AB158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib in Resources */, - D9EE74C4158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib in Resources */, - D9EE74C6158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib in Resources */, - D9EE74C8158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib in Resources */, - D9EE74CA158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib in Resources */, + D9EE74C4158A8E0500EC1D05 /* MasterViewController.xib in Resources */, + D9EE74C6158A8E0500EC1D05 /* MomentsViewController.xib in Resources */, + D9EE74C8158A8E0500EC1D05 /* ShareViewController.xib in Resources */, + D9EE74CA158A8E0500EC1D05 /* SignInViewController.xib in Resources */, D9EE74CD158A8E2900EC1D05 /* InfoPlist.strings in Resources */, 0C52D6F8158BAB1F001510E6 /* button_background.png in Resources */, D98254A915990D8D0060CA47 /* Icon.png in Resources */, D907F676166967D400EB5273 /* Icon@2x.png in Resources */, - D945ED3A166AE4950051858C /* GooglePlusSampleListMomentsViewController.xib in Resources */, - D945ED3C166AE4950051858C /* GooglePlusSampleListPeopleViewController.xib in Resources */, - D970AD4E16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD4F16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5A16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5B16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5C16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5D16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5E16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD5F16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6A16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6B16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6C16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6D16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6E16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD6F16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7A16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD7B16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled.png in Resources */, - D970AD7C16916BBF00C7DD57 /* gpp_sign_in_dark_button_disabled@2x.png in Resources */, - D970AD7D16916BBF00C7DD57 /* gpp_sign_in_dark_button_normal.png in Resources */, - D970AD7E16916BBF00C7DD57 /* gpp_sign_in_dark_button_normal@2x.png in Resources */, - D970AD7F16916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed.png in Resources */, - D970AD8016916BBF00C7DD57 /* gpp_sign_in_dark_button_pressed@2x.png in Resources */, - D970AD8116916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled.png in Resources */, - D970AD8216916BBF00C7DD57 /* gpp_sign_in_dark_icon_disabled@2x.png in Resources */, - D970AD8316916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal.png in Resources */, - D970AD8416916BBF00C7DD57 /* gpp_sign_in_dark_icon_normal@2x.png in Resources */, - D970AD8516916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed.png in Resources */, - D970AD8616916BBF00C7DD57 /* gpp_sign_in_dark_icon_pressed@2x.png in Resources */, - D970AD8716916BBF00C7DD57 /* gpp_sign_in_light_button_disabled.png in Resources */, - D970AD8816916BBF00C7DD57 /* gpp_sign_in_light_button_disabled@2x.png in Resources */, - D970AD8916916BBF00C7DD57 /* gpp_sign_in_light_button_normal.png in Resources */, - D970AD8A16916BBF00C7DD57 /* gpp_sign_in_light_button_normal@2x.png in Resources */, - D970AD8B16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed.png in Resources */, - D970AD8C16916BBF00C7DD57 /* gpp_sign_in_light_button_pressed@2x.png in Resources */, - D970AD8D16916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled.png in Resources */, - D970AD8E16916BBF00C7DD57 /* gpp_sign_in_light_icon_disabled@2x.png in Resources */, - D970AD8F16916BBF00C7DD57 /* gpp_sign_in_light_icon_normal.png in Resources */, - D970AD9016916BBF00C7DD57 /* gpp_sign_in_light_icon_normal@2x.png in Resources */, - D970AD9116916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed.png in Resources */, - D970AD9216916BBF00C7DD57 /* gpp_sign_in_light_icon_pressed@2x.png in Resources */, - D970AD9316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9A16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9B16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9C16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9D16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9E16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970AD9F16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADA916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADAA16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADAB16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADAC16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADAD16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADAE16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADAF16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB016916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB116916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB216916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB316916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB416916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB516916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB616916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB716916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB816916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADB916916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, - D970ADBA16916BBF00C7DD57 /* GooglePlusPlatform.strings in Resources */, + D945ED3A166AE4950051858C /* ListMomentsViewController.xib in Resources */, + D945ED3C166AE4950051858C /* ListPeopleViewController.xib in Resources */, + 8E47E995171CB75C003FBA75 /* GooglePlus.bundle in Resources */, + E0681E5F171F46EB0098D356 /* Default-568h@2x.png in Resources */, + D9A49D9F1720DD5E009C6DE2 /* Default@2x~iphone.png in Resources */, + D9A49DA01720DD5E009C6DE2 /* Default~iphone.png in Resources */, + D9A49DA11720DD5E009C6DE2 /* Icon-72.png in Resources */, + D9A49DA21720DD5E009C6DE2 /* Icon-144.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1795,739 +355,19 @@ buildActionMask = 2147483647; files = ( 00F70E83158006DC0077799E /* main.m in Sources */, - D9EE748D158A8C0E00EC1D05 /* GTLBase64.m in Sources */, - D9EE748E158A8C0E00EC1D05 /* GTLBatchQuery.m in Sources */, - D9EE748F158A8C0E00EC1D05 /* GTLBatchResult.m in Sources */, - D9EE7490158A8C0E00EC1D05 /* GTLDateTime.m in Sources */, - D9EE7491158A8C0E00EC1D05 /* GTLErrorObject.m in Sources */, - D9EE7492158A8C0E00EC1D05 /* GTLFramework.m in Sources */, - D9EE7493158A8C0E00EC1D05 /* GTLJSONParser.m in Sources */, - D9EE7494158A8C0E00EC1D05 /* GTLObject.m in Sources */, - D9EE7495158A8C0E00EC1D05 /* GTLPlusConstants.m in Sources */, - D9EE7496158A8C0E00EC1D05 /* GTLPlusItemScope.m in Sources */, - D9EE7497158A8C0E00EC1D05 /* GTLPlusMoment.m in Sources */, - D9EE7499158A8C0E00EC1D05 /* GTLQueryPlus.m in Sources */, - D9EE749A158A8C0E00EC1D05 /* GTLServicePlus.m in Sources */, - D9EE749B158A8C0E00EC1D05 /* GTLQuery.m in Sources */, - D9EE749C158A8C0E00EC1D05 /* GTLRuntimeCommon.m in Sources */, - D9EE749D158A8C0E00EC1D05 /* GTLService.m in Sources */, - D9EE749E158A8C0E00EC1D05 /* GTLUploadParameters.m in Sources */, - D9EE749F158A8C0E00EC1D05 /* GTLUtilities.m in Sources */, - D9EE74A0158A8C0E00EC1D05 /* GTMHTTPFetcher.m in Sources */, - D9EE74A1158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m in Sources */, - D9EE74A2158A8C0E00EC1D05 /* GTMHTTPFetcherService.m in Sources */, - D9EE74A3158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m in Sources */, - D9EE74A4158A8C0E00EC1D05 /* GTMLogger.m in Sources */, - D9EE74A5158A8C0E00EC1D05 /* GTMMethodCheck.m in Sources */, - D9EE74A6158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m in Sources */, - D9EE74A7158A8C0E00EC1D05 /* GTMNSString+URLArguments.m in Sources */, - D9EE74A8158A8C0E00EC1D05 /* GTMOAuth2Authentication.m in Sources */, - D9EE74A9158A8C0E00EC1D05 /* GTMOAuth2SignIn.m in Sources */, - D9EE74AA158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m in Sources */, - D9EE74AC158A8C0E00EC1D05 /* GTMObjC2Runtime.m in Sources */, - D9EE74C2158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m in Sources */, - D9EE74C3158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m in Sources */, - D9EE74C5158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m in Sources */, - D9EE74C7158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m in Sources */, - D9EE74C9158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m in Sources */, - D907F66B1669679000EB5273 /* GTLPlusAcl.m in Sources */, - D907F66C1669679000EB5273 /* GTLPlusAclentryResource.m in Sources */, - D907F66D1669679000EB5273 /* GTLPlusActivity.m in Sources */, - D907F66E1669679000EB5273 /* GTLPlusActivityFeed.m in Sources */, - D907F66F1669679000EB5273 /* GTLPlusComment.m in Sources */, - D907F6701669679000EB5273 /* GTLPlusCommentFeed.m in Sources */, - D907F6711669679000EB5273 /* GTLPlusMomentsFeed.m in Sources */, - D907F6721669679000EB5273 /* GTLPlusPeopleFeed.m in Sources */, - D907F6731669679000EB5273 /* GTLPlusPerson.m in Sources */, - D945ED39166AE4950051858C /* GooglePlusSampleListMomentsViewController.m in Sources */, - D945ED3B166AE4950051858C /* GooglePlusSampleListPeopleViewController.m in Sources */, - D95C5B2616A08EE100EEF884 /* OpenInChromeController.m in Sources */, + D9EE74C2158A8E0500EC1D05 /* AppDelegate.m in Sources */, + D9EE74C3158A8E0500EC1D05 /* MasterViewController.m in Sources */, + D9EE74C5158A8E0500EC1D05 /* MomentsViewController.m in Sources */, + D9EE74C7158A8E0500EC1D05 /* ShareViewController.m in Sources */, + D9EE74C9158A8E0500EC1D05 /* SignInViewController.m in Sources */, + D945ED39166AE4950051858C /* ListMomentsViewController.m in Sources */, + D945ED3B166AE4950051858C /* ListPeopleViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - D970AC3816916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC3916916BBF00C7DD57 /* af */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC3B16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC3C16916BBF00C7DD57 /* am */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC3E16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC3F16916BBF00C7DD57 /* ar */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC4116916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC4216916BBF00C7DD57 /* be */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC4416916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC4516916BBF00C7DD57 /* bg */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC4716916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC4816916BBF00C7DD57 /* ca */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC4A16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC4B16916BBF00C7DD57 /* cs */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC4D16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC4E16916BBF00C7DD57 /* da */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC5016916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC5116916BBF00C7DD57 /* de_AT */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC5316916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC5416916BBF00C7DD57 /* de_CH */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC5616916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC5716916BBF00C7DD57 /* de */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC5916916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC5A16916BBF00C7DD57 /* el */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC5C16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC5D16916BBF00C7DD57 /* en_GB */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC5F16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC6016916BBF00C7DD57 /* en_IE */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC6216916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC6316916BBF00C7DD57 /* en_IN */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC6516916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC6616916BBF00C7DD57 /* en_SG */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC6816916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC6916916BBF00C7DD57 /* en_ZA */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC6B16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC6C16916BBF00C7DD57 /* en */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC6E16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC6F16916BBF00C7DD57 /* es_419 */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC7116916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC7216916BBF00C7DD57 /* es_AR */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC7416916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC7516916BBF00C7DD57 /* es_BO */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC7716916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC7816916BBF00C7DD57 /* es_CL */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC7A16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC7B16916BBF00C7DD57 /* es_CO */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC7D16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC7E16916BBF00C7DD57 /* es_CR */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC8016916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC8116916BBF00C7DD57 /* es_DO */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC8316916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC8416916BBF00C7DD57 /* es_EC */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC8616916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC8716916BBF00C7DD57 /* es_GT */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC8916916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC8A16916BBF00C7DD57 /* es_HN */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC8C16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC8D16916BBF00C7DD57 /* es_MX */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC8F16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC9016916BBF00C7DD57 /* es_NI */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC9216916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC9316916BBF00C7DD57 /* es_PA */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC9516916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC9616916BBF00C7DD57 /* es_PE */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC9816916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC9916916BBF00C7DD57 /* es_PR */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC9B16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC9C16916BBF00C7DD57 /* es_PY */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AC9E16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AC9F16916BBF00C7DD57 /* es_SV */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACA116916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACA216916BBF00C7DD57 /* es_US */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACA416916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACA516916BBF00C7DD57 /* es_UY */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACA716916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACA816916BBF00C7DD57 /* es_VE */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACAA16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACAB16916BBF00C7DD57 /* es */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACAD16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACAE16916BBF00C7DD57 /* et */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACB016916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACB116916BBF00C7DD57 /* fa */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACB316916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACB416916BBF00C7DD57 /* fi */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACB616916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACB716916BBF00C7DD57 /* fil */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACB916916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACBA16916BBF00C7DD57 /* fr_CH */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACBC16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACBD16916BBF00C7DD57 /* fr */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACD716916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACD816916BBF00C7DD57 /* gsw */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACDA16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACDB16916BBF00C7DD57 /* he */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACDD16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACDE16916BBF00C7DD57 /* hi */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACE016916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACE116916BBF00C7DD57 /* hr */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACE316916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACE416916BBF00C7DD57 /* hu */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACE616916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACE716916BBF00C7DD57 /* id */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACE916916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACEA16916BBF00C7DD57 /* in */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACEC16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACED16916BBF00C7DD57 /* it */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACEF16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACF016916BBF00C7DD57 /* iw */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACF216916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACF316916BBF00C7DD57 /* ja */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACF516916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACF616916BBF00C7DD57 /* ko */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACF816916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACF916916BBF00C7DD57 /* ln */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACFB16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACFC16916BBF00C7DD57 /* lt */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970ACFE16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970ACFF16916BBF00C7DD57 /* lv */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD0116916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD0216916BBF00C7DD57 /* mo */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD0416916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD0516916BBF00C7DD57 /* ms */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD0716916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD0816916BBF00C7DD57 /* nb */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD0A16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD0B16916BBF00C7DD57 /* nl */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD0D16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD0E16916BBF00C7DD57 /* no */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD1016916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD1116916BBF00C7DD57 /* pl */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD1316916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD1416916BBF00C7DD57 /* pt_BR */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD1616916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD1716916BBF00C7DD57 /* pt_PT */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD1916916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD1A16916BBF00C7DD57 /* pt */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD1C16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD1D16916BBF00C7DD57 /* ro */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD1F16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD2016916BBF00C7DD57 /* ru */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD2216916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD2316916BBF00C7DD57 /* sk */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD2516916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD2616916BBF00C7DD57 /* sl */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD2816916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD2916916BBF00C7DD57 /* sr */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD2B16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD2C16916BBF00C7DD57 /* sv */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD2E16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD2F16916BBF00C7DD57 /* sw */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD3116916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD3216916BBF00C7DD57 /* th */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD3416916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD3516916BBF00C7DD57 /* tl */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD3716916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD3816916BBF00C7DD57 /* tr */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD3A16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD3B16916BBF00C7DD57 /* uk */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD3D16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD3E16916BBF00C7DD57 /* vi */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD4016916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD4116916BBF00C7DD57 /* zh_CN */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD4316916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD4416916BBF00C7DD57 /* zh_HK */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD4616916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD4716916BBF00C7DD57 /* zh_TW */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD4916916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD4A16916BBF00C7DD57 /* zh */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; - D970AD4C16916BBF00C7DD57 /* GooglePlusPlatform.strings */ = { - isa = PBXVariantGroup; - children = ( - D970AD4D16916BBF00C7DD57 /* zu */, - ); - name = GooglePlusPlatform.strings; - sourceTree = ""; - }; D9EE74CB158A8E2900EC1D05 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -2544,6 +384,10 @@ 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; @@ -2557,6 +401,7 @@ GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 5.0; OTHER_LDFLAGS = "-ObjC"; @@ -2570,12 +415,17 @@ 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_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 5.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; @@ -2589,13 +439,16 @@ 0043C7B31580045B000DF02E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/..\"", + ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "GooglePlusSample-Prefix.pch"; INFOPLIST_FILE = "GooglePlusSample-Info.plist"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)\"", - "\"$(SRCROOT)/../lib\"", ); OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2606,13 +459,16 @@ 0043C7B41580045B000DF02E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/..\"", + ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "GooglePlusSample-Prefix.pch"; INFOPLIST_FILE = "GooglePlusSample-Info.plist"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)\"", - "\"$(SRCROOT)/../lib\"", ); OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.h b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.h new file mode 100644 index 00000000..340cfc18 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.h @@ -0,0 +1,48 @@ +// +// ListMomentsViewController.h +// +// Copyright 2012 Google Inc. +// +// 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 + +@class GTLPlusMoment; + +@interface ListMomentsViewController : UIViewController< + UITableViewDelegate, + UITableViewDataSource> { + // A map from activities to verbs used for display. + NSDictionary *verbMap_; + // An array of |GTLPlusMoment|, as the data source. + NSMutableArray *momentsData_; + // Currently selected moment in the |momentsData_| array. + GTLPlusMoment *selectedMoment_; +} + +// The table that displays the list of moments for the user. +@property (retain, nonatomic) IBOutlet UITableView *momentsTable; +// A label to display the status of selected moment, or general status. +@property (retain, nonatomic) IBOutlet UILabel *momentStatus; +// A label to display the target of selected moment. +@property (retain, nonatomic) IBOutlet UILabel *momentTarget; +// A label to display the time of selected moment. +@property (retain, nonatomic) IBOutlet UILabel *momentTime; +// A button to remove selected moment. +@property (retain, nonatomic) IBOutlet UIButton *momentRemoval; + +// Called when the remove button is pressed. +- (IBAction)removeMoment:(id)sender; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.m b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.m new file mode 100644 index 00000000..60f6bda1 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.m @@ -0,0 +1,216 @@ +// +// ListMomentsViewController.m +// +// Copyright 2012 Google Inc. +// +// 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 "ListMomentsViewController.h" + +#import +#import + +@interface ListMomentsViewController () +- (void)clearSelectedMoment; +- (void)refreshData; +- (NSString *)textForMoment:(GTLPlusMoment *)moment; +@end + +#pragma mark - View lifecycle + +@implementation ListMomentsViewController + +@synthesize momentsTable = momentsTable_; +@synthesize momentStatus = momentStatus_; +@synthesize momentTarget = momentTarget_; +@synthesize momentTime = momentTime_; +@synthesize momentRemoval = momentsRemoval_; + +#pragma mark - Object lifecycle + +- (id)initWithNibName:(NSString *)nibNameOrNil + bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + verbMap_ = [[NSDictionary dictionaryWithObjectsAndKeys: + @"Added", @"http://schemas.google.com/AddActivity", + @"Bought", @"http://schemas.google.com/BuyActivity", + @"Checked in", @"http://schemas.google.com/CheckInActivity", + @"Commented on", @"http://schemas.google.com/CommentActivity", + @"Created", @"http://schemas.google.com/CreateActivity", + @"Listened to", @"http://schemas.google.com/ListenActivity", + @"Made a reservation at", @"http://schemas.google.com/ReserveActivity", + @"Reviewed", @"http://schemas.google.com/ReviewActivity", + nil] retain]; + } + return self; +} + +- (void)dealloc { + [verbMap_ release]; + [momentsData_ release]; + [selectedMoment_ release]; + [momentsTable_ release]; + [momentStatus_ release]; + [momentTarget_ release]; + [momentTime_ release]; + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (void)viewDidLoad { + [super viewDidLoad]; + [self refreshData]; +} + +#pragma mark - UITableViewDelegate/UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView + numberOfRowsInSection:(NSInteger)section { + return momentsData_.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString * const kCellIdentifier = @"Cell"; + UITableViewCell *cell = + [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; + if (cell == nil) { + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:kCellIdentifier] + autorelease]; + cell.accessoryType = UITableViewCellAccessoryNone; + } + + // Configure the cell. + GTLPlusMoment *moment = momentsData_[indexPath.row]; + cell.textLabel.text = [self textForMoment:moment]; + return cell; +} + +- (void)tableView:(UITableView *)tableView + didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + GTLPlusMoment *moment = momentsData_[indexPath.row]; + [selectedMoment_ autorelease]; + selectedMoment_ = [moment retain]; + momentStatus_.text = [NSString stringWithFormat:@"Target for \"%@\":", + [self textForMoment:moment]]; + momentTarget_.text = moment.target.url; + momentTime_.text = [NSString stringWithFormat:@"Start time: %@", + [NSDateFormatter localizedStringFromDate:moment.startDate.date + dateStyle:kCFDateFormatterMediumStyle + timeStyle:kCFDateFormatterMediumStyle]]; + momentsRemoval_.hidden = NO; +} + +- (void)tableView:(UITableView *)tableView + didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { + [self clearSelectedMoment]; +} + +#pragma mark - IBActions + +- (IBAction)removeMoment:(id)sender { + if (!selectedMoment_) { + return; + } + + // Here is an example of removing a moment from Google+: + // 1. Create a |GTLQuery| object to remove the moment. + GTLQueryPlus *query = [GTLQueryPlus + queryForMomentsRemoveWithIdentifier:selectedMoment_.identifier]; + + // 2. Execute the query. + [[[GPPSignIn sharedInstance] plusService] executeQuery:query + completionHandler:^(GTLServiceTicket *ticket, + id object, + NSError *error) { + if (error) { + momentStatus_.text = + [NSString stringWithFormat:@"Error: %@", error]; + GTMLoggerError(@"Status: Error: %@", error); + } else { + [momentsData_ removeObject:selectedMoment_]; + [self clearSelectedMoment]; + [momentsTable_ reloadData]; + } + }]; +} + +#pragma mark - Helper methods + +- (void)clearSelectedMoment { + [selectedMoment_ autorelease]; + selectedMoment_ = nil; + momentStatus_.text = @""; + momentTarget_.text = @""; + momentTime_.text = @""; + momentsRemoval_.hidden = YES; +} + +- (void)refreshData { + GTMOAuth2Authentication *auth = [GPPSignIn sharedInstance].authentication; + if (!auth) { + // To authenticate, use Google+ sign-in button. + momentStatus_.text = @"Status: Not authenticated"; + return; + } + // Clear old moments data. + [momentsData_ autorelease]; + momentsData_ = nil; + [momentsTable_ reloadData]; + [self clearSelectedMoment]; + momentStatus_.text = @"Status: Loading"; + + // Here is an example of reading list of moments from Google+: + // 1. Create a |GTLQuery| object to list moments. + GTLQueryPlus *query = + [GTLQueryPlus queryForMomentsListWithUserId:@"me" + collection:kGTLPlusCollectionVault]; + + // 2. Execute the query. + [[[GPPSignIn sharedInstance] plusService] executeQuery:query + completionHandler:^(GTLServiceTicket *ticket, + id object, + NSError *error) { + if (error) { + momentStatus_.text = + [NSString stringWithFormat:@"Error: %@", error]; + GTMLoggerError(@"Status: Error: %@", error); + } else { + GTLPlusMomentsFeed *moments = (GTLPlusMomentsFeed *)object; + momentsData_ = + [[NSMutableArray arrayWithArray:moments.items] retain]; + momentStatus_.text = [NSString stringWithFormat: + @"Status: Loaded %d moment(s)", momentsData_.count]; + [momentsTable_ reloadData]; + } + }]; +} + +- (NSString *)textForMoment:(GTLPlusMoment *)moment { + NSString *verb = [verbMap_ objectForKey:moment.type]; + if (!verb) { + // Fallback for verbs we don't recognize. + verb = [moment.type lastPathComponent]; + } + return [NSString stringWithFormat:@"%@ %@", verb, moment.target.name]; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.xib b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.xib new file mode 100644 index 00000000..4311cda2 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.xib @@ -0,0 +1,429 @@ + + + + 1552 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 2083 + + + IBProxyObject + IBUIButton + IBUILabel + IBUITableView + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 292 + {{15, 240}, {285, 42}} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + + + 1 + MCAwIDAAA + darkTextColor + + + 0 + 2 + + 1 + 17 + + + Helvetica + 17 + 16 + + NO + 285 + + + + 292 + {{15, 359}, {89, 44}} + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + 1 + Remove + + 3 + MQA + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 292 + + + + 274 + {{20, 20}, {320, 238}} + + + + _NS:9 + + YES + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + {{-20, -20}, {360, 258}} + + + + _NS:10 + + 3 + MQA + + 2 + + + IBCocoaTouchFramework + + + + 292 + {{15, 284}, {285, 42}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + + + + 0 + 2 + + + NO + 285 + + + + 292 + {{15, 330}, {285, 21}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + + + + 0 + + + NO + + + {{0, 20}, {320, 460}} + + + + + 3 + MQA + + + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + momentRemoval + + + + 61 + + + + momentsTable + + + + 33 + + + + momentStatus + + + + 76 + + + + momentTarget + + + + 101 + + + + momentTime + + + + 107 + + + + delegate + + + + 35 + + + + dataSource + + + + 34 + + + + removeMoment: + + + 7 + + 62 + + + + + + 0 + + + + + + 1 + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 14 + + + + + + 56 + + + + + + 66 + + + + + + + + 4 + + + + + + 93 + + + + + + 103 + + + + + + + + ListMomentsViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 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 + + + + + + 151 + + + + + ListMomentsViewController + UIViewController + + removeMoment: + id + + + removeMoment: + + removeMoment: + id + + + + UIButton + UILabel + UILabel + UILabel + UITableView + + + + momentRemoval + UIButton + + + momentStatus + UILabel + + + momentTarget + UILabel + + + momentTime + UILabel + + + momentsTable + UITableView + + + + IBProjectSource + ./Classes/ListMomentsViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + 2083 + + diff --git a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.h b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.h new file mode 100644 index 00000000..61e8c1dd --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.h @@ -0,0 +1,38 @@ +// +// GooglePlusSamplePeopleListViewController.h +// +// Copyright 2012 Google Inc. +// +// 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 + +// A view controller for listing people that are visible to this sample app. +// The open-source GTLPlus libraries are required. +@interface ListPeopleViewController : UIViewController< + UITableViewDelegate, + UITableViewDataSource> + +// A label to display the result of the listing people action. +@property (retain, nonatomic) IBOutlet UILabel *peopleStatus; +// The table that displays a list of people that is visible to this sample app. +@property (retain, nonatomic) IBOutlet UITableView *peopleTable; + +// A list of people that is visible to this sample app. +@property (retain, nonatomic) NSArray *peopleList; +// A list of people profile images that we will prefetch that is +// visible to this sample app. +@property (retain, nonatomic) NSMutableArray *peopleImageList; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.m b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.m new file mode 100644 index 00000000..366253cc --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.m @@ -0,0 +1,186 @@ +// +// ListPeopleViewController.m +// +// Copyright 2012 Google Inc. +// +// 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 "ListPeopleViewController.h" + +#import +#import + +@interface ListPeopleViewController() +- (void)listPeople:(NSString *)collection; +- (void)reportAuthStatus; +- (void)fetchPeopleImages; +@end + +@implementation ListPeopleViewController + +@synthesize peopleTable = peopleTable_; +@synthesize peopleList = peopleList_; +@synthesize peopleStatus = peopleStatus_; +@synthesize peopleImageList = peopleImageList_; + +#pragma mark - Object lifecycle + +- (void)dealloc { + [peopleStatus_ release]; + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (void)viewDidLoad { + // Report whether the user is authenticated with + // https://www.googleapis.com/auth/plus.login scope. + [self reportAuthStatus]; + // Send Google+ request to get list of people that is visible to this app. + [self listPeople:kGTLPlusCollectionVisible]; + [super viewDidLoad]; +} + +- (void)viewDidUnload { + [peopleImageList_ release]; + [peopleList_ release]; + [peopleStatus_ release]; + [super viewDidUnload]; +} + +#pragma mark - UITableViewDelegate/UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView + numberOfRowsInSection:(NSInteger)section { + return peopleList_.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *const kCellIdentifier = @"Cell"; + UITableViewCell *cell = + [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; + if (cell == nil) { + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:kCellIdentifier] + autorelease]; + cell.accessoryType = UITableViewCellAccessoryNone; + } + + // Configure the cell by extracting a person's name and image from the list + // of people. + if (indexPath.row < peopleList_.count) { + GTLPlusPerson *person = peopleList_[indexPath.row]; + NSString *name = person.displayName; + cell.textLabel.text = name; + + if (indexPath.row < [peopleImageList_ count] && + ![[peopleImageList_ objectAtIndex:indexPath.row] + isEqual:[NSNull null]]) { + cell.imageView.image = + [[[UIImage alloc] + initWithData:[peopleImageList_ objectAtIndex:indexPath.row]] + autorelease]; + } else { + cell.imageView.image = nil; + } + } + + return cell; +} + +#pragma mark - Helper methods + +- (void)listPeople:(NSString *)collection { + GTMOAuth2Authentication *auth = [GPPSignIn sharedInstance].authentication; + if (!auth) { + // To authenticate, use Google+ sign-in button. + peopleStatus_.text = @"Status: Not authenticated"; + return; + } + + // 1. Create a |GTLQuery| object to list people that are visible to this + // sample app. + GTLQueryPlus *query = + [GTLQueryPlus queryForPeopleListWithUserId:@"me" + collection:collection]; + + // 2. Execute the query. + [[[GPPSignIn sharedInstance] plusService] executeQuery:query + completionHandler:^(GTLServiceTicket *ticket, + GTLPlusPeopleFeed *peopleFeed, + NSError *error) { + if (error) { + GTMLoggerError(@"Error: %@", error); + peopleStatus_.text = + [NSString stringWithFormat:@"Status: Error: %@", error]; + } else { + // Get an array of people from |GTLPlusPeopleFeed| and reload + // the table view. + peopleList_ = [peopleFeed.items retain]; + [peopleTable_ reloadData]; + + // Render the status of the Google+ request. + NSNumber *count = peopleFeed.totalItems; + if (count.intValue == 1) { + peopleStatus_.text = [NSString stringWithFormat: + @"Status: Listed 1 person"]; + } else { + peopleStatus_.text = [NSString stringWithFormat: + @"Status: Listed %@ people", count]; + } + [self fetchPeopleImages]; + } + }]; +} + +- (void)fetchPeopleImages { + NSInteger index = 0; + peopleImageList_ = + [[NSMutableArray alloc] initWithCapacity:[peopleList_ count]]; + for (GTLPlusPerson *person in peopleList_) { + NSData *imageData = nil; + NSString *imageURLString = person.image.url; + if (imageURLString) { + NSURL *imageURL = [NSURL URLWithString:imageURLString]; + imageData = [NSData dataWithContentsOfURL:imageURL]; + } + if (imageData) { + [peopleImageList_ setObject:imageData atIndexedSubscript:index]; + } else { + [peopleImageList_ setObject:[NSNull null] atIndexedSubscript:index]; + } + ++index; + } +} + +- (void)reportAuthStatus { + if (![GPPSignIn sharedInstance].authentication) { + return; + } + + if ([[GPPSignIn sharedInstance].scopes containsObject: + kGTLAuthScopePlusLogin]) { + peopleStatus_.text = @"Status: Authenticated with plus.login scope"; + } else { + // To authenticate, use Google+ sign-in button. + peopleStatus_.text = @"Status: Not authenticated with plus.login scope"; + } +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.xib b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.xib new file mode 100644 index 00000000..4d7e098a --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.xib @@ -0,0 +1,300 @@ + + + + 1552 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 2083 + + + IBProxyObject + IBUILabel + IBUITableView + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 292 + {{6, 11}, {253, 21}} + + + + _NS:9 + {250, 250} + NO + YES + 7 + NO + IBCocoaTouchFramework + People visible to this sample app: + + 1 + MCAwIDAAA + darkTextColor + + + 0 + + 1 + 17 + + + Helvetica + 17 + 16 + + NO + + + + 292 + {{6, 329}, {285, 67}} + + + + _NS:9 + NO + YES + NO + IBCocoaTouchFramework + Status: + + + 0 + 2 + + + NO + 285 + + + + 292 + + + + 274 + {{20, 20}, {320, 263}} + + + + _NS:9 + + 3 + MQA + + YES + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + {{-20, 40}, {360, 303}} + + + + _NS:10 + + 3 + MQA + + 2 + + + IBCocoaTouchFramework + + + {{0, 64}, {320, 416}} + + + + + 3 + MQA + + + + + NO + + IBCocoaTouchFramework + + + + + + + peopleStatus + + + + 55 + + + + view + + + + 56 + + + + peopleTable + + + + 54 + + + + delegate + + + + 32 + + + + dataSource + + + + 31 + + + + + + 0 + + + + + + 1 + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 10 + + + + + 34 + + + + + + 129 + + + + + + + + 3 + + + + + + + + ListPeopleViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 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 + + + + + + 157 + + + + + ListPeopleViewController + UIViewController + + UILabel + UITableView + + + + peopleStatus + UILabel + + + peopleTable + UITableView + + + + IBProjectSource + ./Classes/ListPeopleViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + 2083 + + diff --git a/External/google-plus-ios-sdk/SampleCode/MasterViewController.h b/External/google-plus-ios-sdk/SampleCode/MasterViewController.h new file mode 100644 index 00000000..073f4bad --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/MasterViewController.h @@ -0,0 +1,23 @@ +// +// MasterViewController.h +// +// Copyright 2012 Google Inc. +// +// 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 MasterViewController : UITableViewController + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/MasterViewController.m b/External/google-plus-ios-sdk/SampleCode/MasterViewController.m new file mode 100644 index 00000000..6f918072 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/MasterViewController.m @@ -0,0 +1,135 @@ +// +// MasterViewController.m +// +// Copyright 2012 Google Inc. +// +// 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 "MasterViewController.h" + +#import + +static const int kNumViewControllers = 5; +static NSString * const kMenuOptions[kNumViewControllers] = { + @"Sign in", @"Share", @"List people", @"Write moments", + @"List & remove moments" }; +static NSString * const kUnselectableMenuOptions[kNumViewControllers] = { + nil, nil, @"Sign in to list people", @"Sign in to write moments", + @"Sign in to list/remove moments" }; +static NSString * const kNibNames[kNumViewControllers] = { + @"SignInViewController", + @"ShareViewController", + @"ListPeopleViewController", + @"MomentsViewController", + @"ListMomentsViewController" }; + +@interface MasterViewController () +- (BOOL)isSelectable:(NSIndexPath *)indexPath; +@end + +@implementation MasterViewController + +- (id)initWithNibName:(NSString *)nibNameOrNil + bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + self.title = @"Google+ SDK Sample"; + UIBarButtonItem *backButton = [[[UIBarButtonItem alloc] + initWithTitle:@"Back" + style:UIBarButtonItemStylePlain + target:self + action:@selector(backPressed)] autorelease]; + self.navigationItem.backBarButtonItem = backButton; + } + return self; +} + +- (void)dealloc { + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) + interfaceOrientation { + if ([[UIDevice currentDevice] userInterfaceIdiom] == + UIUserInterfaceIdiomPhone) { + return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown; + } + return YES; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self.tableView reloadData]; +} + +#pragma mark - UITableViewDelegate/UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView + numberOfRowsInSection:(NSInteger)section { + return kNumViewControllers; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + BOOL selectable = [self isSelectable:indexPath]; + NSString * const kCellIdentifier = selectable ? @"Cell" : @"GreyCell"; + UITableViewCell *cell = + [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; + if (cell == nil) { + cell = + [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:kCellIdentifier] autorelease]; + if (selectable) { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } else { + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.textColor = [UIColor lightGrayColor]; + } + } + cell.textLabel.text = (selectable ? kMenuOptions : kUnselectableMenuOptions) + [indexPath.row]; + + return cell; +} + +- (void)tableView:(UITableView *)tableView + didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (![self isSelectable:indexPath]) { + return; + } + Class nibClass = NSClassFromString(kNibNames[indexPath.row]); + UIViewController *controller = + [[[nibClass alloc] initWithNibName:nil bundle:nil] autorelease]; + controller.navigationItem.title = kMenuOptions[indexPath.row]; + + [self.navigationController pushViewController:controller animated:YES]; +} + +#pragma mark - Helper methods + +- (BOOL)isSelectable:(NSIndexPath *)indexPath { + if (kUnselectableMenuOptions[indexPath.row]) { + // To use Google+ moments, you need to sign in. + return [GPPSignIn sharedInstance].authentication != nil; + } + return YES; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/MasterViewController.xib b/External/google-plus-ios-sdk/SampleCode/MasterViewController.xib new file mode 100644 index 00000000..236540a6 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/MasterViewController.xib @@ -0,0 +1,251 @@ + + + + 1280 + 10K549 + 1938 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 933 + + + IBUINavigationItem + IBUITableView + IBUITableViewController + IBUINavigationController + IBUINavigationBar + IBProxyObject + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + {{0, 20}, {320, 460}} + + + 3 + MQA + + YES + + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + + + 1 + 1 + + IBCocoaTouchFramework + NO + + + 256 + {0, 0} + NO + YES + YES + IBCocoaTouchFramework + + + + + + 274 + {{0, 64}, {320, 416}} + + + + + NO + YES + NO + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + + Google Plus Sample App + IBCocoaTouchFramework + + + + + 1 + 1 + + IBCocoaTouchFramework + NO + + + + + + + + + view + + + + 3 + + + + dataSource + + + + 4 + + + + delegate + + + + 5 + + + + delegate + + + + 12 + + + + dataSource + + + + 13 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + + + 6 + + + + + + + + + 7 + + + + + 10 + + + + + + + + + 11 + + + + + 14 + + + + + + + MasterViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 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 + + + + + + 14 + + + + + MasterViewController + UITableViewController + + IBProjectSource + ./Classes/MasterViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + 933 + + diff --git a/External/google-plus-ios-sdk/SampleCode/MomentsViewController.h b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.h new file mode 100644 index 00000000..b31357d1 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.h @@ -0,0 +1,47 @@ +// +// MomentsViewController.h +// +// Copyright 2012 Google Inc. +// +// 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 + +// A view controller for writing different kinds of moments to Google+. +// The open-source GTLPlus libraries are required. For more details, see +// https://developers.google.com/+/features/app-activities . +@interface MomentsViewController : UIViewController< + UITableViewDelegate, + UITableViewDataSource, + UITextFieldDelegate> { + BOOL keyboardVisible_; +} + +// A label to prompt the selection of a moment. +@property (retain, nonatomic) IBOutlet UILabel *selectionLabel; +// The table that displays the different kinds of moments available. +@property (retain, nonatomic) IBOutlet UITableView *momentsTable; +// The view for the bootom controls. +@property (retain, nonatomic) IBOutlet UIView *bottomControls; +// The target URL to associate with this moment. +@property (retain, nonatomic) IBOutlet UITextField *momentURL; +// A label to display the result of writing a moment. +@property (retain, nonatomic) IBOutlet UILabel *momentStatus; +// The "Add Moment" button. +@property (retain, nonatomic) IBOutlet UIButton *addButton; + +// Called when the user presses the "Add Moment" button. +- (IBAction)momentButton:(id)sender; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/MomentsViewController.m b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.m new file mode 100644 index 00000000..74435e9c --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.m @@ -0,0 +1,332 @@ +// +// MomentsViewController.m +// +// Copyright 2012 Google Inc. +// +// 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 "MomentsViewController.h" + +#import +#import +#import + +@interface MomentsViewController () +- (GTLPlusItemScope *)resultFor:(NSString *)selectedMoment; +- (void)animateKeyboard:(NSNotification *)notification + shouldShow:(BOOL)shouldShow; +- (NSString *)momentURLForIndex:(int)i; +- (void)reportAuthStatus; +@end + +@implementation MomentsViewController + +@synthesize selectionLabel = selectionLabel_; +@synthesize momentsTable = momentsTable_; +@synthesize bottomControls = bottomControls_; +@synthesize momentURL = momentURL_; +@synthesize momentStatus = momentStatus_; +@synthesize addButton = addButton_; + +// The different kinds of moments. +static const int kNumMomentTypes = 8; +static NSString * const kMomentTypes[kNumMomentTypes] = { + @"AddActivity", + @"BuyActivity", + @"CheckInActivity", + @"CommentActivity", + @"CreateActivity", + @"ListenActivity", + @"ReserveActivity", + @"ReviewActivity" }; +static NSString * const kMomentURLs[kNumMomentTypes] = { + @"thing", + @"a-book", + @"place", + @"blog-entry", + @"photo", + @"song", + @"restaurant", + @"widget" }; +static NSString * const kMomentURLFormat = + @"https://developers.google.com/+/plugins/snippet/examples/%@"; + +#pragma mark - Object lifecycle + +- (void)dealloc { + // Unregister for keyboard notifications while not visible. + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillHideNotification + object:nil]; + [selectionLabel_ release]; + [momentsTable_ release]; + [bottomControls_ release]; + [momentURL_ release]; + [momentStatus_ release]; + [addButton_ release]; + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (void)viewDidLoad { + // Set up "Add Moment" button. + [[addButton_ layer] setCornerRadius:5]; + [[addButton_ layer] setMasksToBounds:YES]; + CGColorRef borderColor = [[UIColor colorWithWhite:203.0/255.0 + alpha:1.0] CGColor]; + [[addButton_ layer] setBorderColor:borderColor]; + [[addButton_ layer] setBorderWidth:1.0]; + + // Set up sample view of writing moments. + int selectedRow = [[momentsTable_ indexPathForSelectedRow] row]; + momentURL_.text = [self momentURLForIndex:selectedRow]; + + [self reportAuthStatus]; + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // Register for keyboard notifications while visible. + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(keyboardWillHide:) + name:UIKeyboardWillHideNotification + object:nil]; + + // Scale the table view vertically down to its contents if necessary. + [momentsTable_ reloadData]; + CGRect frame = momentsTable_.frame; + if (frame.size.height > momentsTable_.contentSize.height) { + CGFloat shift = frame.size.height - momentsTable_.contentSize.height; + frame.size.height = momentsTable_.contentSize.height; + momentsTable_.frame = frame; + + // Also update the prompt by removing the "scroll for more" part. + selectionLabel_.text = @"Select an activity"; + + // And move the bottom view up for the same shift amount. + frame = bottomControls_.frame; + frame.origin.y -= shift; + bottomControls_.frame = frame; + } +} + +- (void)viewWillDisappear:(BOOL)animated { + // Unregister for keyboard notifications while not visible. + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillHideNotification + object:nil]; + + [super viewWillDisappear:animated]; +} + +#pragma mark - IBActions + +- (IBAction)momentButton:(id)sender { + GTMOAuth2Authentication *auth = [GPPSignIn sharedInstance].authentication; + if (!auth) { + // To authenticate, use Google+ sign-in button. + momentStatus_.text = @"Status: Not authenticated"; + return; + } + + // Here is an example of writing a moment to Google+: + // 1. Create a |GTLPlusMoment| object with required fields. For reference, see + // https://developers.google.com/+/features/app-activities . + int selectedRow = [[momentsTable_ indexPathForSelectedRow] row]; + NSString *selectedMoment = kMomentTypes[selectedRow]; + + GTLPlusMoment *moment = [[[GTLPlusMoment alloc] init] autorelease]; + moment.type = [NSString stringWithFormat:@"http://schemas.google.com/%@", + selectedMoment]; + GTLPlusItemScope *target = [[[GTLPlusItemScope alloc] init] autorelease]; + target.url = momentURL_.text; + if ([target.url isEqualToString:@""]) { + target.url = [self momentURLForIndex:selectedRow]; + } + moment.target = target; + + // CommentActivity, ReserveActivity, and ReviewActivity require setting a + // |result| field in the request. + GTLPlusItemScope *result = [self resultFor:selectedMoment]; + if (result) { + moment.result = result; + } + + // 2. Create a |GTLQuery| object to write a moment. + GTLQueryPlus *query = + [GTLQueryPlus queryForMomentsInsertWithObject:moment + userId:@"me" + collection:kGTLPlusCollectionVault]; + + // 3. Execute the query. + [[[GPPSignIn sharedInstance] plusService] executeQuery:query + completionHandler:^(GTLServiceTicket *ticket, + id object, + NSError *error) { + if (error) { + GTMLoggerError(@"Error: %@", error); + momentStatus_.text = + [NSString stringWithFormat:@"Status: Error: %@", error]; + } else { + momentStatus_.text = [NSString stringWithFormat: + @"Status: Saved to Google+ (%@)", + selectedMoment]; + } + }]; +} + +#pragma mark - UITableViewDelegate/UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView + numberOfRowsInSection:(NSInteger)section { + return kNumMomentTypes; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString * const kCellIdentifier = @"Cell"; + UITableViewCell *cell = + [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; + if (cell == nil) { + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:kCellIdentifier] + autorelease]; + cell.accessoryType = UITableViewCellAccessoryNone; + } + + // Configure the cell. + cell.textLabel.text = kMomentTypes[indexPath.row]; + return cell; +} + +- (void)tableView:(UITableView *)tableView + didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + int selectedRow = [[momentsTable_ indexPathForSelectedRow] row]; + momentURL_.text = [self momentURLForIndex:selectedRow]; +} + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + [textField resignFirstResponder]; + return YES; +} + +#pragma mark - UIKeyboard + +- (void)keyboardWillShow:(NSNotification *)notification { + [self animateKeyboard:notification shouldShow:YES]; +} + +- (void)keyboardWillHide:(NSNotification *)notification { + [self animateKeyboard:notification shouldShow:NO]; +} + +#pragma mark - Private methods + +// Helps set required result field for select moment types. +- (GTLPlusItemScope *)resultFor:(NSString *)selectedMoment { + GTLPlusItemScope *result = [[[GTLPlusItemScope alloc] init] autorelease]; + if ([selectedMoment isEqualToString:@"CommentActivity"]) { + result.type = @"http://schema.org/Comment"; + result.url = @"https://developers.google.com/+/plugins/snippet/" + @"examples/blog-entry#comment-1"; + result.name = @"This is amazing!"; + result.text = @"I can't wait to use it on my site :)"; + return result; + } else if ([selectedMoment isEqualToString:@"ReserveActivity"]) { + result.type = @"http://schemas.google.com/Reservation"; + result.startDate = @"2012-06-28T19:00:00-08:00"; + result.attendeeCount = [[[NSNumber alloc] initWithInt:3] autorelease]; + return result; + } else if ([selectedMoment isEqualToString:@"ReviewActivity"]) { + result.type = @"http://schema.org/Review"; + result.name = @"A Humble Review of Widget"; + result.url = + @"https://developers.google.com/+/plugins/snippet/examples/review"; + result.text = + @"It's amazingly effective at whatever it is that it's supposed to do."; + GTLPlusItemScope *rating = [[[GTLPlusItemScope alloc] init] autorelease]; + rating.type = @"http://schema.org/Rating"; + rating.ratingValue = @"100"; + rating.bestRating = @"100"; + rating.worstRating = @"0"; + result.reviewRating = rating; + return result; + } + return nil; +} + +// Helps animate keyboard for target URL text field. +- (void)animateKeyboard:(NSNotification *)notification + shouldShow:(BOOL)shouldShow { + NSDictionary *userInfo = [notification userInfo]; + CGFloat height = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] + CGRectValue].size.height; + CGFloat duration = [[userInfo + objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationDuration:duration]; + CGRect newFrame = self.view.frame; + if (shouldShow) { + newFrame.size.height -= height; + } else { + newFrame.size.height += height; + } + self.view.frame = newFrame; + [UIView commitAnimations]; + if (shouldShow) { + keyboardVisible_ = YES; + } else { + keyboardVisible_ = NO; + } +} + +- (NSString *)momentURLForIndex:(int)i { + return [NSString stringWithFormat:kMomentURLFormat, kMomentURLs[i]]; +} + +- (void)reportAuthStatus { + if ([GPPSignIn sharedInstance].authentication) { + momentStatus_.text = @"Status: Authenticated"; + } else { + // To authenticate, use Google+ sign-in button. + momentStatus_.text = @"Status: Not authenticated"; + } +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/MomentsViewController.xib b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.xib new file mode 100644 index 00000000..66323a9a --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.xib @@ -0,0 +1,479 @@ + + + + 1552 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 2083 + + + IBProxyObject + IBUIButton + IBUILabel + IBUITableView + IBUITextField + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 290 + {{10, 5}, {296, 21}} + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Select an activity (scroll for more) + + 1 + MCAwIDAAA + darkTextColor + + + 1 + 10 + + 1 + 17 + + + Helvetica + 17 + 16 + + + + + 274 + {{0, 32}, {320, 132}} + + + + 3 + MQA + + YES + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + + 266 + + + + 266 + {{11, 20}, {296, 21}} + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Enter a Moment URL + + + 1 + 10 + + + + + + 266 + {{11, 51}, {291, 31}} + + + NO + YES + IBCocoaTouchFramework + 0 + + 3 + + 3 + MAA + + 2 + + + YES + 17 + + IBCocoaTouchFramework + + + 1 + 14 + + + Helvetica + 14 + 16 + + + + + 264 + {{12, 113}, {142, 37}} + + + NO + IBCocoaTouchFramework + 0 + 0 + Add Moment + + 1 + MC40MzkyMTU2ODYzIDAuMTI1NDkwMTk2MSAwLjA2Mjc0NTA5ODA0AA + + + 1 + MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA + + + 3 + MC41AA + + + NSImage + button_background.png + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 266 + {{11, 180}, {290, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Status: + + + 1 + 11 + + + + + {{0, 172}, {320, 244}} + + + + IBCocoaTouchFramework + + + {{0, 64}, {320, 416}} + + + 3 + MQA + + + + + + NO + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + momentsTable + + + + 17 + + + + momentStatus + + + + 25 + + + + addButton + + + + 28 + + + + momentURL + + + + 30 + + + + selectionLabel + + + + 32 + + + + bottomControls + + + + 34 + + + + dataSource + + + + 18 + + + + delegate + + + + 19 + + + + delegate + + + + 31 + + + + momentButton: + + + 7 + + 20 + + + + + + 0 + + + + + + 1 + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 7 + + + + + + 26 + + + + + 27 + + + + + + + + + + + 13 + + + + + 12 + + + + + 16 + + + + + 22 + + + + + + + MomentsViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 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 + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 34 + + + + + MomentsViewController + UIViewController + + momentButton: + id + + + momentButton: + + momentButton: + id + + + + UIButton + UIView + UILabel + UITextField + UITableView + UILabel + + + + addButton + UIButton + + + bottomView + UIView + + + momentStatus + UILabel + + + momentURL + UITextField + + + momentsTable + UITableView + + + selectionLabel + UILabel + + + + IBProjectSource + ./Classes/MomentsViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + + button_background.png + {1, 1} + + 2083 + + diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Default-568h@2x.png b/External/google-plus-ios-sdk/SampleCode/Resources/Default-568h@2x.png new file mode 100644 index 00000000..0891b7aa Binary files /dev/null and b/External/google-plus-ios-sdk/SampleCode/Resources/Default-568h@2x.png differ diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Default@2x~iphone.png b/External/google-plus-ios-sdk/SampleCode/Resources/Default@2x~iphone.png new file mode 100644 index 00000000..2b30ecdc Binary files /dev/null and b/External/google-plus-ios-sdk/SampleCode/Resources/Default@2x~iphone.png differ diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Default~iphone.png b/External/google-plus-ios-sdk/SampleCode/Resources/Default~iphone.png new file mode 100644 index 00000000..84e942ec Binary files /dev/null and b/External/google-plus-ios-sdk/SampleCode/Resources/Default~iphone.png differ diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Icon-144.png b/External/google-plus-ios-sdk/SampleCode/Resources/Icon-144.png new file mode 100644 index 00000000..e5965380 Binary files /dev/null and b/External/google-plus-ios-sdk/SampleCode/Resources/Icon-144.png differ diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Icon-72.png b/External/google-plus-ios-sdk/SampleCode/Resources/Icon-72.png new file mode 100644 index 00000000..6a734733 Binary files /dev/null and b/External/google-plus-ios-sdk/SampleCode/Resources/Icon-72.png differ diff --git a/External/google-plus-ios-sdk/SampleCode/ShareViewController.h b/External/google-plus-ios-sdk/SampleCode/ShareViewController.h new file mode 100644 index 00000000..c3428dde --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ShareViewController.h @@ -0,0 +1,87 @@ +// +// ShareViewController.h +// +// Copyright 2012 Google Inc. +// +// 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 +#import + +// A view controller for the Google+ share dialog which contains a text field +// to prefill the user comment, and a text field for an optional URL to share. +// A Google+ share button is provided to launch the share dialog. +@interface ShareViewController : UIViewController< + UITextFieldDelegate, + UIActionSheetDelegate, + UIPickerViewDataSource, + UIPickerViewDelegate, + MFMailComposeViewControllerDelegate> { + // Whether the keyboard is visible or not. + BOOL keyboardVisible_; + // The text field being edited. + UITextField *activeField_; +} + +@property (retain, nonatomic) NSArray *callToActions; +@property (copy, nonatomic) NSString *selectedCallToAction; +@property (retain, nonatomic) UIPickerView *callToActionPickerView; +// The text to prefill the user comment in the share dialog. +@property (retain, nonatomic) IBOutlet UITextField *sharePrefillText; +// The URL resource to share in the share dialog. +@property (retain, nonatomic) IBOutlet UITextField *shareURL; +// A label to display the result of the share action. +@property (retain, nonatomic) IBOutlet UILabel *shareStatus; +// A toolbar to share via Google+ or email. +@property (retain, nonatomic) IBOutlet UIToolbar *shareToolbar; +// A switch to toggle Google+ share with content deep linking. +@property (retain, nonatomic) IBOutlet UISwitch *addContentDeepLinkSwitch; +// The content deep-link ID to be attached with the Google+ share to qualify as +// a deep-link share. +@property (retain, nonatomic) IBOutlet UITextField *contentDeepLinkID; +// The share's title. +@property (retain, nonatomic) IBOutlet UITextField *contentDeepLinkTitle; +// The share's description. +@property (retain, nonatomic) IBOutlet UITextField *contentDeepLinkDescription; +// The share's thumbnail URL. +@property (retain, nonatomic) IBOutlet UITextField *contentDeepLinkThumbnailURL; +// The share view. +@property (retain, nonatomic) IBOutlet UIScrollView *shareScrollView; +@property (retain, nonatomic) IBOutlet UIView *shareView; +// Labels for Google+ share sample. +@property (retain, nonatomic) IBOutlet UILabel *addContentDeepLinkLabel; +@property (retain, nonatomic) IBOutlet UILabel *urlToShareLabel; +@property (retain, nonatomic) IBOutlet UILabel *prefillTextLabel; +@property (retain, nonatomic) IBOutlet UILabel *contentDeepLinkIDLabel; +@property (retain, nonatomic) IBOutlet UILabel *contentDeepLinkTitleLabel; +@property (retain, nonatomic) IBOutlet UILabel *contentDeepLinkDescriptionLabel; +@property (retain, nonatomic) IBOutlet UILabel *contentDeepLinkThumbnailURLLabel; +@property (retain, nonatomic) IBOutlet UIButton *shareButton; +@property (retain, nonatomic) IBOutlet UISwitch *urlForContentDeepLinkMetadataSwitch; +@property (retain, nonatomic) IBOutlet UILabel *urlForContentDeepLinkMetadataLabel; +// The switch for adding call-to-action button. +@property (retain, nonatomic) IBOutlet UISwitch *addCallToActionButtonSwitch; +@property (retain, nonatomic) IBOutlet UILabel *addCallToActionButtonLabel; + +// Called when the switch for content deep link is toggled. +- (IBAction)contentDeepLinkSwitchToggle:(id)sender; +// Called when the switch for metadata from URL preview is toggled. +- (IBAction)urlForContentDeepLinkMetadataSwitchToggle:(id)sender; +// Called when the share button is pressed. +- (IBAction)shareButton:(id)sender; +// Called when the toolbar share button is pressed. +- (IBAction)shareToolbar:(id)sender; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/ShareViewController.m b/External/google-plus-ios-sdk/SampleCode/ShareViewController.m new file mode 100644 index 00000000..9a262414 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ShareViewController.m @@ -0,0 +1,702 @@ +// +// ShareViewController.m +// +// Copyright 2012 Google Inc. +// +// 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 "ShareViewController.h" + +#import +#import +#import + +@interface ShareViewController() +- (void)animateKeyboard:(NSNotification *)notification + shouldShow:(BOOL)shouldShow; +- (void)layout; +- (void)placeView:(UIView *)view x:(CGFloat)x y:(CGFloat)y; +- (void)populateTextFields; +@end + +@implementation ShareViewController + +@synthesize callToActions = callToActions_; +@synthesize selectedCallToAction = selectedCallToAction_; +@synthesize callToActionPickerView = callToActionPickerView_; +@synthesize addContentDeepLinkSwitch = addContentDeepLinkSwitch_; +@synthesize contentDeepLinkDescription = contentDeepLinkDescription_; +@synthesize contentDeepLinkID = contentDeepLinkID_; +@synthesize contentDeepLinkTitle = contentDeepLinkTitle_; +@synthesize contentDeepLinkThumbnailURL = contentDeepLinkThumbnailURL_; +@synthesize sharePrefillText = sharePrefillText_; +@synthesize shareURL = shareURL_; +@synthesize shareStatus = shareStatus_; +@synthesize shareToolbar = shareToolbar_; +@synthesize shareScrollView = shareScrollView_; +@synthesize shareView = shareView_; +@synthesize addContentDeepLinkLabel = addContentDeepLinkLabel_; +@synthesize urlToShareLabel = urlToShareLabel_; +@synthesize prefillTextLabel = prefillTextLabel_; +@synthesize contentDeepLinkIDLabel = contentDeepLinkIDLabel_; +@synthesize contentDeepLinkTitleLabel = contentDeepLinkTitleLabel_; +@synthesize contentDeepLinkDescriptionLabel = + contentDeepLinkDescriptionLabel_; +@synthesize contentDeepLinkThumbnailURLLabel = + contentDeepLinkThumbnailURLLabel_; +@synthesize shareButton = shareButton_; +@synthesize urlForContentDeepLinkMetadataSwitch = + urlForContentDeepLinkMetadataSwitch_; +@synthesize urlForContentDeepLinkMetadataLabel = + urlForContentDeepLinkMetadataLabel_; +@synthesize addCallToActionButtonSwitch = addCallToActionButtonSwitch_; +@synthesize addCallToActionButtonLabel = addCallToActionButtonLabel_; + +- (void)dealloc { + [callToActions_ release]; + [selectedCallToAction_ release]; + [callToActionPickerView_ release]; + [addContentDeepLinkSwitch_ release]; + [contentDeepLinkID_ release]; + [contentDeepLinkTitle_ release]; + [contentDeepLinkDescription_ release]; + [contentDeepLinkThumbnailURL_ release]; + [sharePrefillText_ release]; + [shareURL_ release]; + [shareStatus_ release]; + [shareToolbar_ release]; + [shareScrollView_ release]; + [shareView_ release]; + [addContentDeepLinkLabel_ release]; + [urlToShareLabel_ release]; + [prefillTextLabel_ release]; + [contentDeepLinkIDLabel_ release]; + [contentDeepLinkTitleLabel_ release]; + [contentDeepLinkDescriptionLabel_ release]; + [contentDeepLinkThumbnailURLLabel_ release]; + [shareButton_ release]; + [urlForContentDeepLinkMetadataSwitch_ release]; + [urlForContentDeepLinkMetadataLabel_ release]; + [addCallToActionButtonSwitch_ release]; + [addCallToActionButtonLabel_ release]; + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (void)viewDidLoad { + // Set up Google+ share dialog. + [GPPShare sharedInstance].delegate = self; + + [addCallToActionButtonSwitch_ setOn:NO]; + [addContentDeepLinkSwitch_ setOn:NO]; + if (![GPPSignIn sharedInstance].authentication || + ![[GPPSignIn sharedInstance].scopes containsObject: + kGTLAuthScopePlusLogin]) { + addCallToActionButtonLabel_.text = @"Sign in for call-to-action"; + addCallToActionButtonSwitch_.enabled = NO; + } + addCallToActionButtonLabel_.adjustsFontSizeToFitWidth = YES; + + self.callToActions = [NSArray arrayWithObjects: + @"ACCEPT", + @"ACCEPT_GIFT", + @"ADD", + @"ANSWER", + @"ADD_TO_CALENDAR", + @"APPLY", + @"ASK", + @"ATTACK", + @"BEAT", + @"BID", + @"BOOK", + @"BOOKMARK", + @"BROWSE", + @"BUY", + @"CAPTURE", + @"CHALLENGE", + @"CHANGE", + @"CHECKIN", + @"CLICK_HERE", + @"CLICK_ME", + @"COLLECT", + @"COMMENT", + @"COMPARE", + @"COMPLAIN", + @"CONFIRM", + @"CONNECT", + @"CONTRIBUTE", + @"COOK", + @"CREATE", + @"DEFEND", + @"DINE", + @"DISCOVER", + @"DISCUSS", + @"DONATE", + @"DOWNLOAD", + @"EARN", + @"EAT", + @"EXPLAIN", + @"FOLLOW", + @"GET", + @"GIFT", + @"GIVE", + @"GO", + @"HELP", + @"IDENTIFY", + @"INSTALL_APP", + @"INTRODUCE", + @"INVITE", + @"JOIN", + @"JOIN_ME", + @"LEARN", + @"LEARN_MORE", + @"LISTEN", + @"LOVE", + @"MAKE", + @"MATCH", + @"OFFER", + @"OPEN", + @"OPEN_APP", + @"OWN", + @"PAY", + @"PIN", + @"PLAN", + @"PLAY", + @"RATE", + @"READ", + @"RECOMMEND", + @"RECORD", + @"REDEEM", + @"REPLY", + @"RESERVE", + @"REVIEW", + @"RSVP", + @"SAVE", + @"SAVE_OFFER", + @"SELL", + @"SEND", + @"SHARE_X", + @"SIGN_IN", + @"SIGN_UP", + @"START", + @"ST0P", + @"TEST", + @"UPVOTE", + @"VIEW", + @"VIEW_ITEM", + @"VIEW_PROFILE", + @"VISIT", + @"VOTE", + @"WANT", + @"WATCH", + @"WRITE", + nil + ]; + self.selectedCallToAction = [callToActions_ objectAtIndex:0]; + self.callToActionPickerView = [[[UIPickerView alloc] init] autorelease]; + callToActionPickerView_.delegate = self; + callToActionPickerView_.dataSource = self; + [addCallToActionButtonSwitch_ addTarget:self + action:@selector(addCallToActionSwitched) + forControlEvents:UIControlEventValueChanged]; + + [self layout]; + [self populateTextFields]; + [super viewDidLoad]; +} + +- (void)viewDidUnload { + [GPPShare sharedInstance].delegate = nil; + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillHideNotification + object:nil]; + + [self setAddContentDeepLinkSwitch:nil]; + [self setContentDeepLinkID:nil]; + [self setContentDeepLinkTitle:nil]; + [self setContentDeepLinkDescription:nil]; + [self setContentDeepLinkThumbnailURL:nil]; + [self setShareScrollView:nil]; + [self setShareView:nil]; + [self setShareToolbar:nil]; + [self setAddContentDeepLinkLabel:nil]; + [self setUrlToShareLabel:nil]; + [self setPrefillTextLabel:nil]; + [self setContentDeepLinkIDLabel:nil]; + [self setContentDeepLinkTitleLabel:nil]; + [self setContentDeepLinkDescriptionLabel:nil]; + [self setContentDeepLinkThumbnailURLLabel:nil]; + [self setShareButton:nil]; + [self setUrlForContentDeepLinkMetadataSwitch:nil]; + [self setUrlForContentDeepLinkMetadataLabel:nil]; + [self setAddCallToActionButtonSwitch:nil]; + [self setAddCallToActionButtonLabel:nil]; + [super viewDidUnload]; +} + +- (void)viewWillAppear:(BOOL)animated { + if ([[UIDevice currentDevice] userInterfaceIdiom] + == UIUserInterfaceIdiomPad) { + shareScrollView_.frame = self.view.frame; + } + [super viewWillAppear:animated]; + + // Register for keyboard notifications while visible. + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(keyboardWillHide:) + name:UIKeyboardWillHideNotification + object:nil]; +} + +- (void)viewWillDisappear:(BOOL)animated { + // Unregister for keyboard notifications while not visible. + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillHideNotification + object:nil]; + + [super viewWillDisappear:animated]; +} + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + [textField resignFirstResponder]; + return YES; +} + +- (void)textFieldDidBeginEditing:(UITextField *)textField { + activeField_ = textField; +} + +- (void)textFieldDidEndEditing:(UITextField *)textField { + activeField_ = nil; +} + +#pragma mark - GPPShareDelegate + +- (void)finishedSharing:(BOOL)shared { + NSString *text = shared ? @"Success" : @"Canceled"; + shareStatus_.text = [NSString stringWithFormat:@"Status: %@", text]; +} + +#pragma mark - UIActionSheetDelegate + +- (void)actionSheet:(UIActionSheet *)actionSheet + didDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex == 0) { + [self shareButton:nil]; + } else if (buttonIndex == 1) { + shareStatus_.text = @"Status: Sharing..."; + MFMailComposeViewController *picker = + [[[MFMailComposeViewController alloc] init] autorelease]; + picker.mailComposeDelegate = self; + [picker setSubject:sharePrefillText_.text]; + [picker setMessageBody:shareURL_.text isHTML:NO]; + + [self presentModalViewController:picker animated:YES]; + } +} + +#pragma mark - MFMailComposeViewControllerDelegate + +- (void)mailComposeController:(MFMailComposeViewController *)controller + didFinishWithResult:(MFMailComposeResult)result + error:(NSError*)error { + NSString *text; + switch (result) { + case MFMailComposeResultCancelled: + text = @"Canceled"; + break; + case MFMailComposeResultSaved: + text = @"Saved"; + break; + case MFMailComposeResultSent: + text = @"Sent"; + break; + case MFMailComposeResultFailed: + text = @"Failed"; + break; + default: + text = @"Not sent"; + break; + } + shareStatus_.text = [NSString stringWithFormat:@"Status: %@", text]; + [self dismissModalViewControllerAnimated:YES]; +} + +#pragma mark - UIKeyboard + +- (void)keyboardWillShow:(NSNotification *)notification { + [self animateKeyboard:notification shouldShow:YES]; +} + +- (void)keyboardWillHide:(NSNotification *)notification { + [self animateKeyboard:notification shouldShow:NO]; +} + +#pragma mark - IBActions + +- (IBAction)shareButton:(id)sender { + shareStatus_.text = @"Status: Sharing..."; + id shareBuilder = [[GPPShare sharedInstance] shareDialog]; + + NSString *inputURL = shareURL_.text; + NSURL *urlToShare = [inputURL length] ? [NSURL URLWithString:inputURL] : nil; + if (urlToShare) { + [shareBuilder setURLToShare:urlToShare]; + } + + if ([contentDeepLinkID_ text]) { + [shareBuilder setContentDeepLinkID:[contentDeepLinkID_ text]]; + NSString *title = [contentDeepLinkTitle_ text]; + NSString *description = [contentDeepLinkDescription_ text]; + if (title && description) { + NSURL *thumbnailURL = + [NSURL URLWithString:[contentDeepLinkThumbnailURL_ text]]; + [shareBuilder setTitle:title + description:description + thumbnailURL:thumbnailURL]; + } + } + + NSString *inputText = sharePrefillText_.text; + NSString *text = [inputText length] ? inputText : nil; + if (text) { + [shareBuilder setPrefillText:text]; + } + + if ([addCallToActionButtonSwitch_ isOn]) { + // Please replace the URL below with your own call-to-action button URL. + NSURL *callToActionURL = [NSURL URLWithString: + @"http://developers.google.com/+/mobile/ios/"]; + [shareBuilder setCallToActionButtonWithLabel:selectedCallToAction_ + URL:callToActionURL + deepLinkID:@"call-to-action"]; + } + + if (![shareBuilder open]) { + shareStatus_.text = @"Status: Error (see console)."; + } +} + +- (IBAction)shareToolbar:(id)sender { + UIActionSheet *actionSheet = + [[[UIActionSheet alloc] initWithTitle:@"Share this post" + delegate:self + cancelButtonTitle:@"Cancel" + destructiveButtonTitle:nil + otherButtonTitles:@"Google+", @"Email", nil] + autorelease]; + [actionSheet showFromToolbar:shareToolbar_]; +} + +- (IBAction)urlForContentDeepLinkMetadataSwitchToggle:(id)sender { + [self layout]; + [self populateTextFields]; +} + +- (IBAction)contentDeepLinkSwitchToggle:(id)sender { + if (!addContentDeepLinkSwitch_.on) { + [urlForContentDeepLinkMetadataSwitch_ setOn:YES]; + } + [self layout]; + [self populateTextFields]; +} + +#pragma mark - Helper methods + +- (void)placeView:(UIView *)view x:(CGFloat)x y:(CGFloat)y { + CGSize frameSize = view.frame.size; + view.frame = CGRectMake(x, y, frameSize.width, frameSize.height); +} + +- (void)layout { + CGFloat originX = 20.0; + CGFloat originY = 10.0; + CGFloat yPadding = 10.0; + CGFloat currentY = originY; + CGFloat middleX = 150; + + // Place the switch for adding call-to-action button. + [self placeView:addCallToActionButtonLabel_ x:originX y:currentY]; + [self placeView:addCallToActionButtonSwitch_ x:middleX * 1.5 y:currentY]; + CGSize frameSize = addCallToActionButtonSwitch_.frame.size; + currentY += frameSize.height + yPadding; + + // Place the switch for attaching content deep-link data. + [self placeView:addContentDeepLinkLabel_ x:originX y:currentY]; + [self placeView:addContentDeepLinkSwitch_ x:middleX * 1.5 y:currentY]; + frameSize = addContentDeepLinkSwitch_.frame.size; + currentY += frameSize.height + yPadding; + + // Place the switch for preview URL. + if (addContentDeepLinkSwitch_.on) { + [self placeView:urlForContentDeepLinkMetadataLabel_ x:originX y:currentY]; + [self placeView:urlForContentDeepLinkMetadataSwitch_ + x:middleX * 1.5 + y:currentY]; + frameSize = urlForContentDeepLinkMetadataSwitch_.frame.size; + currentY += frameSize.height + yPadding; + urlForContentDeepLinkMetadataSwitch_.hidden = NO; + urlForContentDeepLinkMetadataLabel_.hidden = NO; + } else { + urlForContentDeepLinkMetadataSwitch_.hidden = YES; + urlForContentDeepLinkMetadataLabel_.hidden = YES; + } + + // Place the field for URL to share. + if (urlForContentDeepLinkMetadataSwitch_.on) { + [self placeView:urlToShareLabel_ x:originX y:currentY]; + frameSize = urlToShareLabel_.frame.size; + currentY += frameSize.height + 0.5 * yPadding; + + [self placeView:shareURL_ x:originX y:currentY]; + frameSize = shareURL_.frame.size; + currentY += frameSize.height + yPadding; + urlToShareLabel_.hidden = NO; + shareURL_.hidden = NO; + } else { + urlToShareLabel_.hidden = YES; + shareURL_.hidden = YES; + } + + // Place the field for prefill text. + [self placeView:prefillTextLabel_ x:originX y:currentY]; + frameSize = prefillTextLabel_.frame.size; + currentY += frameSize.height + 0.5 * yPadding; + [self placeView:sharePrefillText_ x:originX y:currentY]; + frameSize = sharePrefillText_.frame.size; + currentY += frameSize.height + yPadding; + + // Place the content deep-link ID field. + if (addContentDeepLinkSwitch_.on) { + [self placeView:contentDeepLinkIDLabel_ x:originX y:currentY]; + frameSize = contentDeepLinkIDLabel_.frame.size; + currentY += frameSize.height + 0.5 * yPadding; + [self placeView:contentDeepLinkID_ x:originX y:currentY]; + frameSize = contentDeepLinkID_.frame.size; + currentY += frameSize.height + yPadding; + contentDeepLinkIDLabel_.hidden = NO; + contentDeepLinkID_.hidden = NO; + } else { + contentDeepLinkIDLabel_.hidden = YES; + contentDeepLinkID_.hidden = YES; + } + + // Place fields for content deep-link metadata. + if (addContentDeepLinkSwitch_.on && + !urlForContentDeepLinkMetadataSwitch_.on) { + [self placeView:contentDeepLinkTitleLabel_ x:originX y:currentY]; + frameSize = contentDeepLinkTitleLabel_.frame.size; + currentY += frameSize.height + 0.5 * yPadding; + [self placeView:contentDeepLinkTitle_ x:originX y:currentY]; + frameSize = contentDeepLinkTitle_.frame.size; + currentY += frameSize.height + yPadding; + + [self placeView:contentDeepLinkDescriptionLabel_ x:originX y:currentY]; + frameSize = contentDeepLinkDescriptionLabel_.frame.size; + currentY += frameSize.height + 0.5 * yPadding; + [self placeView:contentDeepLinkDescription_ x:originX y:currentY]; + frameSize = contentDeepLinkDescription_.frame.size; + currentY += frameSize.height + yPadding; + + [self placeView:contentDeepLinkThumbnailURLLabel_ x:originX y:currentY]; + frameSize = contentDeepLinkThumbnailURLLabel_.frame.size; + currentY += frameSize.height + 0.5 * yPadding; + [self placeView:contentDeepLinkThumbnailURL_ x:originX y:currentY]; + frameSize = contentDeepLinkThumbnailURL_.frame.size; + currentY += frameSize.height + yPadding; + + contentDeepLinkTitle_.hidden = NO; + contentDeepLinkTitleLabel_.hidden = NO; + contentDeepLinkDescriptionLabel_.hidden = NO; + contentDeepLinkDescription_.hidden = NO; + contentDeepLinkThumbnailURLLabel_.hidden = NO; + contentDeepLinkThumbnailURL_.hidden = NO; + } else { + contentDeepLinkTitle_.hidden = YES; + contentDeepLinkTitleLabel_.hidden = YES; + contentDeepLinkDescriptionLabel_.hidden = YES; + contentDeepLinkDescription_.hidden = YES; + contentDeepLinkThumbnailURLLabel_.hidden = YES; + contentDeepLinkThumbnailURL_.hidden = YES; + } + + // Place the share button and status. + [[shareButton_ layer] setCornerRadius:5]; + [[shareButton_ layer] setMasksToBounds:YES]; + CGColorRef borderColor = [[UIColor colorWithWhite:203.0/255.0 + alpha:1.0] CGColor]; + [[shareButton_ layer] setBorderColor:borderColor]; + [[shareButton_ layer] setBorderWidth:1.0]; + + [self placeView:shareButton_ x:originX y:currentY + yPadding]; + frameSize = shareButton_.frame.size; + currentY += frameSize.height + yPadding * 2; + + [self placeView:shareStatus_ x:originX y:currentY]; + frameSize = shareStatus_.frame.size; + currentY += frameSize.height + yPadding; + + shareScrollView_.contentSize = + CGSizeMake(shareScrollView_.frame.size.width, currentY); +} + +- (void)populateTextFields { + // Pre-populate text fields for Google+ share sample. + if (sharePrefillText_.hidden) { + sharePrefillText_.text = @""; + } else { + sharePrefillText_.text = @"Welcome to Google+ Platform"; + } + + if (shareURL_.hidden) { + shareURL_.text = @""; + } else { + shareURL_.text = @"http://developers.google.com/+/mobile/ios/"; + } + + if (contentDeepLinkID_.hidden) { + contentDeepLinkID_.text = @""; + } else { + contentDeepLinkID_.text = @"playlist/314159265358"; + } + + if (contentDeepLinkTitle_.hidden) { + contentDeepLinkTitle_.text = @""; + } else { + contentDeepLinkTitle_.text = @"Joe's Pop Music Playlist"; + } + + if (contentDeepLinkDescription_.hidden) { + contentDeepLinkDescription_.text = @""; + } else { + contentDeepLinkDescription_.text = + @"Check out this playlist of my favorite pop songs!"; + } + + if (contentDeepLinkThumbnailURL_.hidden) { + contentDeepLinkThumbnailURL_.text = @""; + } else { + contentDeepLinkThumbnailURL_.text = + @"http://www.google.com/logos/2012/childrensday-2012-hp.jpg"; + } +} + +- (void)animateKeyboard:(NSNotification *)notification + shouldShow:(BOOL)shouldShow { + if (!shouldShow) { + UIEdgeInsets contentInsets = UIEdgeInsetsZero; + shareScrollView_.contentInset = contentInsets; + shareScrollView_.scrollIndicatorInsets = contentInsets; + return; + } + + NSDictionary *userInfo = [notification userInfo]; + CGRect kbFrame = + [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; + CGSize kbSize = kbFrame.size; + UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); + shareScrollView_.contentInset = contentInsets; + shareScrollView_.scrollIndicatorInsets = contentInsets; + + // If active text field is hidden by keyboard, scroll so it's visible. + CGRect aRect = self.view.frame; + aRect.size.height -= kbSize.height; + CGPoint bottomLeft = + CGPointMake(0.0, activeField_.frame.origin.y + + activeField_.frame.size.height + 10); + if (!CGRectContainsPoint(aRect, bottomLeft)) { + CGPoint scrollPoint = CGPointMake(0.0, bottomLeft.y - aRect.size.height); + [shareScrollView_ setContentOffset:scrollPoint animated:YES]; + } + return; +} + +- (void)addCallToActionSwitched { + if (!addCallToActionButtonSwitch_.on) { + return; + } + [self.view addSubview:callToActionPickerView_]; +} + +#pragma mark - UIPickerViewDataSource + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { + return 1; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView + numberOfRowsInComponent:(NSInteger)component { + return callToActions_.count; +} + +#pragma mark - UIPickerViewDelegate + +- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row + forComponent:(NSInteger)component reusingView:(UIView *)view { + UITableViewCell *cell = (UITableViewCell *)view; + if (cell == nil) { + cell = [[[UITableViewCell alloc] + initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:nil] autorelease]; + [cell setBackgroundColor:[UIColor clearColor]]; + [cell setBounds: CGRectMake(0, 0, cell.frame.size.width - 20 , 44)]; + UITapGestureRecognizer *singleTapGestureRecognizer = + [[[UITapGestureRecognizer alloc] + initWithTarget:self + action:@selector(toggleSelection:)] autorelease]; + singleTapGestureRecognizer.numberOfTapsRequired = 1; + [cell addGestureRecognizer:singleTapGestureRecognizer]; + } + NSString *callToAction = [callToActions_ objectAtIndex:row]; + if ([selectedCallToAction_ isEqualToString:callToAction]) { + cell.accessoryType = UITableViewCellAccessoryCheckmark; + } else { + cell.accessoryType = UITableViewCellAccessoryNone; + } + cell.textLabel.text = callToAction; + cell.textLabel.font = [UIFont systemFontOfSize:12]; + cell.tag = row; + return cell; +} + +- (void)toggleSelection:(UITapGestureRecognizer *)recognizer { + int row = recognizer.view.tag; + self.selectedCallToAction = [callToActions_ objectAtIndex:row]; + [callToActionPickerView_ removeFromSuperview]; + // Force refresh checked/unchecked marks. + [callToActionPickerView_ reloadAllComponents]; + addCallToActionButtonLabel_.text = + [NSString stringWithFormat:@"Call-to-Action: %@", selectedCallToAction_]; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/ShareViewController.xib b/External/google-plus-ios-sdk/SampleCode/ShareViewController.xib new file mode 100644 index 00000000..25fa0a57 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/ShareViewController.xib @@ -0,0 +1,1231 @@ + + + + 1536 + 12C60 + 2844 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1930 + + + IBProxyObject + IBUIBarButtonItem + IBUIButton + IBUILabel + IBUIScrollView + IBUISwitch + IBUITextField + IBUIToolbar + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 292 + + + + 292 + {{26, 126}, {280, 31}} + + + + NO + YES + IBCocoaTouchFramework + 0 + http://developers.google.com/+/mobile/ios/ + 3 + + 3 + MAA + + 2 + + + YES + 17 + + IBCocoaTouchFramework + + 3 + + 1 + 14 + + + Helvetica + 14 + 16 + + + + + 292 + {{26, 89}, {179, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + URL to share (optional) + + 1 + MCAwIDAAA + darkTextColor + + + 1 + 10 + + 1 + 17 + + + Helvetica + 17 + 16 + + + + + 292 + {{31, 261}, {112, 32}} + + + + NO + IBCocoaTouchFramework + 0 + 0 + Share + + 3 + MQA + + + 1 + MC41MjE1Njg2NTYgMC4wNTU3MzQ0MTc0NyAwLjA4MTU0NTQ3OTkzAA + + + 3 + MC41AA + + + NSImage + button_background.png + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 292 + {{26, 165}, {156, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Prefill text (optional) + + + 1 + 10 + + + + + + 290 + {{38, 312}, {268, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Status: + + + 1 + 15 + + + + + + 292 + {{208, 35}, {94, 27}} + + + + NO + IBCocoaTouchFramework + 0 + 0 + YES + + + + 292 + {{20, 38}, {172, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Add content deep link + + + 1 + 10 + + + + + + 292 + {{26, 198}, {280, 31}} + + + + NO + YES + IBCocoaTouchFramework + 0 + Welcome to Google+ Platform + 3 + + 3 + MAA + + + YES + 17 + + IBCocoaTouchFramework + + 3 + + + + + + 292 + {{26, 247}, {280, 30}} + + + + _NS:9 + NO + YES + IBCocoaTouchFramework + 0 + + 3 + + 3 + MAA + + + YES + 17 + + IBCocoaTouchFramework + + 3 + + + + + + 292 + {{26, 292}, {246, 21}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Content deep-link ID (required) + + + 0 + + + NO + + + + 292 + {{26, 335}, {171, 21}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Title (required) + + + 0 + + + NO + + + + 292 + {{26, 402}, {280, 21}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Description (optional) + + + 0 + + + NO + + + + 292 + {{24, 469}, {194, 21}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Thumbnail URL (optional) + + + 0 + + + NO + + + + 292 + {{26, 431}, {280, 30}} + + + + _NS:9 + NO + YES + IBCocoaTouchFramework + 0 + + 3 + + 3 + MAA + + + YES + 17 + + IBCocoaTouchFramework + + 3 + + + + + + 292 + {{26, 498}, {280, 30}} + + + + _NS:9 + NO + YES + IBCocoaTouchFramework + 0 + + 3 + + 3 + MAA + + + YES + 17 + + IBCocoaTouchFramework + + 3 + + + + + + 292 + {{26, 364}, {280, 30}} + + + + _NS:9 + NO + YES + IBCocoaTouchFramework + 0 + + 3 + + 3 + MAA + + + YES + 17 + + IBCocoaTouchFramework + + 3 + + + + + + 292 + {{208, 66}, {94, 27}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + YES + + + + 292 + {{20, 4530}, {172, 21}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Use URL for preview + + + 0 + + + NO + + + + 292 + {{208, 4}, {94, 27}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + YES + + + + 292 + {{20, 4}, {184, 21}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Add call-to-action button + + + 0 + + + NO + + + {320, 372} + + + + _NS:9 + YES + YES + IBCocoaTouchFramework + + + + 266 + {{0, 372}, {320, 44}} + + + NO + NO + IBCocoaTouchFramework + + + IBCocoaTouchFramework + + 5 + + + IBCocoaTouchFramework + 1 + + 9 + + + + + {{0, 64}, {320, 416}} + + + + + 3 + MQA + + + + + NO + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + shareView + + + + 42 + + + + shareToolbar + + + + 43 + + + + contentDeepLinkThumbnailURLLabel + + + + 58 + + + + addContentDeepLinkLabel + + + + 52 + + + + shareButton + + + + 59 + + + + contentDeepLinkTitle + + + + 49 + + + + urlToShareLabel + + + + 53 + + + + contentDeepLinkDescriptionLabel + + + + 57 + + + + sharePrefillText + + + + 11 + + + + contentDeepLinkTitleLabel + + + + 56 + + + + urlForContentDeepLinkMetadataLabel + + + + 64 + + + + contentDeepLinkThumbnailURL + + + + 51 + + + + shareURL + + + + 21 + + + + contentDeepLinkDescription + + + + 50 + + + + prefillTextLabel + + + + 54 + + + + addContentDeepLinkSwitch + + + + 28 + + + + shareScrollView + + + + 41 + + + + shareStatus + + + + 14 + + + + contentDeepLinkIDLabel + + + + 55 + + + + urlForContentDeepLinkMetadataSwitch + + + + 62 + + + + contentDeepLinkID + + + + 48 + + + + addCallToActionButtonLabel + + + + 68 + + + + addCallToActionButtonSwitch + + + + 69 + + + + delegate + + + + 23 + + + + delegate + + + + 22 + + + + shareButton: + + + 7 + + 10 + + + + shareToolbar: + + + + 20 + + + + contentDeepLinkSwitchToggle: + + + 13 + + 31 + + + + delegate + + + + 44 + + + + delegate + + + + 46 + + + + delegate + + + + 47 + + + + delegate + + + + 45 + + + + urlForContentDeepLinkMetadataSwitchToggle: + + + 13 + + 63 + + + + + + 0 + + + + + + 1 + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 15 + + + + + + + + + 17 + + + + + 18 + + + + + 32 + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + 8 + + + + + 5 + + + + + 39 + + + + + 37 + + + + + 38 + + + + + 36 + + + + + 40 + + + + + 9 + + + + + 13 + + + + + 26 + + + + + 29 + + + + + 7 + + + + + 34 + + + + + 35 + + + + + 60 + + + + + 61 + + + + + 33 + + + + + 65 + + + + + 66 + + + + + + + ShareViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 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 + + 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 + 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 + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 69 + + + + + ShareViewController + UIViewController + + id + id + id + id + + + + contentDeepLinkSwitchToggle: + id + + + shareButton: + id + + + shareToolbar: + id + + + urlForContentDeepLinkMetadataSwitchToggle: + id + + + + UILabel + UISwitch + UILabel + UISwitch + UITextField + UILabel + UITextField + UILabel + UITextField + UILabel + UITextField + UILabel + UILabel + UIButton + UITextField + UIScrollView + UILabel + UIToolbar + UITextField + UIView + UILabel + UISwitch + UILabel + + + + addCallToActionButtonLabel + UILabel + + + addCallToActionButtonSwitch + UISwitch + + + addContentDeepLinkLabel + UILabel + + + addContentDeepLinkSwitch + UISwitch + + + contentDeepLinkDescription + UITextField + + + contentDeepLinkDescriptionLabel + UILabel + + + contentDeepLinkID + UITextField + + + contentDeepLinkIDLabel + UILabel + + + contentDeepLinkThumbnailURL + UITextField + + + contentDeepLinkThumbnailURLLabel + UILabel + + + contentDeepLinkTitle + UITextField + + + contentDeepLinkTitleLabel + UILabel + + + prefillTextLabel + UILabel + + + shareButton + UIButton + + + sharePrefillText + UITextField + + + shareScrollView + UIScrollView + + + shareStatus + UILabel + + + shareToolbar + UIToolbar + + + shareURL + UITextField + + + shareView + UIView + + + urlForContentDeepLinkMetadataLabel + UILabel + + + urlForContentDeepLinkMetadataSwitch + UISwitch + + + urlToShareLabel + UILabel + + + + IBProjectSource + ./Classes/ShareViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + 3 + + button_background.png + {1, 1} + + 1930 + + diff --git a/External/google-plus-ios-sdk/SampleCode/SignInViewController.h b/External/google-plus-ios-sdk/SampleCode/SignInViewController.h new file mode 100644 index 00000000..4b15cff5 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/SignInViewController.h @@ -0,0 +1,51 @@ +// +// SignInViewController.h +// +// Copyright 2012 Google Inc. +// +// 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 + +@class GPPSignInButton; + +// A view controller for the Google+ sign-in button which initiates a standard +// OAuth 2.0 flow and provides an access token and a refresh token. A "Sign out" +// button is provided to allow users to sign out of this application. +@interface SignInViewController : UIViewController + +// The button that handles Google+ sign-in. +@property (retain, nonatomic) IBOutlet GPPSignInButton *signInButton; +// A label to display the result of the sign-in action. +@property (retain, nonatomic) IBOutlet UILabel *signInAuthStatus; +// A label to display the signed-in user's display name. +@property (retain, nonatomic) IBOutlet UILabel *signInDisplayName; +// A button to sign out of this application. +@property (retain, nonatomic) IBOutlet UIButton *signOutButton; +// A button to disconnect user from this application. +@property (retain, nonatomic) IBOutlet UIButton *disconnectButton; +// A switch for whether to request +// https://www.googleapis.com/auth/userinfo.email scope to get user's email +// address after the sign-in action. +@property (retain, nonatomic) IBOutlet UISwitch *userinfoEmailScope; + +// Called when the user presses the "Sign out" button. +- (IBAction)signOut:(id)sender; +// Called when the user presses the "Disconnect" button. +- (IBAction)disconnect:(id)sender; +// Called when the user toggles the +// https://www.googleapis.com/auth/userinfo.email scope. +- (IBAction)userinfoEmailScopeToggle:(id)sender; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/SignInViewController.m b/External/google-plus-ios-sdk/SampleCode/SignInViewController.m new file mode 100644 index 00000000..3f9e623c --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/SignInViewController.m @@ -0,0 +1,168 @@ +// +// SignInViewController.m +// +// Copyright 2012 Google Inc. +// +// 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 "SignInViewController.h" + +#import +#import +#import + +@interface SignInViewController () +- (void)enableSignInSettings:(BOOL)enable; +- (void)reportAuthStatus; +- (void)retrieveUserInfo; +@end + +@implementation SignInViewController + +@synthesize signInButton = signInButton_; +@synthesize signInAuthStatus = signInAuthStatus_; +@synthesize signInDisplayName = signInDisplayName_; +@synthesize signOutButton = signOutButton_; +@synthesize disconnectButton = disconnectButton_; +@synthesize userinfoEmailScope = userinfoEmailScope_; + +- (void)dealloc { + [signInButton_ release]; + [signInAuthStatus_ release]; + [signInDisplayName_ release]; + [signOutButton_ release]; + [userinfoEmailScope_ release]; + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (void)viewDidLoad { + // Make sure the GPPSignInButton class is linked in because references from + // xib file doesn't count. + [GPPSignInButton class]; + + GPPSignIn *signIn = [GPPSignIn sharedInstance]; + userinfoEmailScope_.on = + signIn.shouldFetchGoogleUserEmail; + + // Set up sign-out and disconnect buttons. + [self setUpButton:signOutButton_]; + [self setUpButton:disconnectButton_]; + + // Set up sample view of Google+ sign-in. + // The client ID has been set in the app delegate. + signIn.delegate = self; + signIn.shouldFetchGoogleUserEmail = userinfoEmailScope_.on; + signIn.actions = [NSArray arrayWithObjects: + @"http://schemas.google.com/AddActivity", + @"http://schemas.google.com/BuyActivity", + @"http://schemas.google.com/CheckInActivity", + @"http://schemas.google.com/CommentActivity", + @"http://schemas.google.com/CreateActivity", + @"http://schemas.google.com/ListenActivity", + @"http://schemas.google.com/ReserveActivity", + @"http://schemas.google.com/ReviewActivity", + nil]; + + [self reportAuthStatus]; + [signIn trySilentAuthentication]; + [super viewDidLoad]; +} + +- (void)viewDidUnload { + [self setSignInButton:nil]; + [self setSignInAuthStatus:nil]; + [self setSignInDisplayName:nil]; + [self setSignOutButton:nil]; + [self setDisconnectButton:nil]; + [self setUserinfoEmailScope:nil]; + [super viewDidUnload]; +} + +#pragma mark - GPPSignInDelegate + +- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth + error:(NSError *)error { + if (error) { + signInAuthStatus_.text = + [NSString stringWithFormat:@"Status: Authentication error: %@", error]; + return; + } + [self reportAuthStatus]; +} + +- (void)didDisconnectWithError:(NSError *)error { + if (error) { + signInAuthStatus_.text = + [NSString stringWithFormat:@"Status: Failed to disconnect: %@", error]; + } else { + signInAuthStatus_.text = + [NSString stringWithFormat:@"Status: Disconnected"]; + signInDisplayName_.text = @""; + [self enableSignInSettings:YES]; + } +} + +#pragma mark - Helper methods + +- (void)setUpButton:(UIButton *)button { + [[button layer] setCornerRadius:5]; + [[button layer] setMasksToBounds:YES]; + CGColorRef borderColor = [[UIColor colorWithWhite:203.0/255.0 + alpha:1.0] CGColor]; + [[button layer] setBorderColor:borderColor]; + [[button layer] setBorderWidth:1.0]; +} + +- (void)enableSignInSettings:(BOOL)enable { + userinfoEmailScope_.enabled = enable; +} + +- (void)reportAuthStatus { + if ([GPPSignIn sharedInstance].authentication) { + signInAuthStatus_.text = @"Status: Authenticated"; + [self retrieveUserInfo]; + [self enableSignInSettings:NO]; + } else { + // To authenticate, use Google+ sign-in button. + signInAuthStatus_.text = @"Status: Not authenticated"; + [self enableSignInSettings:YES]; + } +} + +- (void)retrieveUserInfo { + signInDisplayName_.text = [NSString stringWithFormat:@"Email: %@", + [GPPSignIn sharedInstance].authentication.userEmail]; +} + +#pragma mark - IBActions + +- (IBAction)signOut:(id)sender { + [[GPPSignIn sharedInstance] signOut]; + + [self reportAuthStatus]; + signInDisplayName_.text = @""; +} + +- (IBAction)disconnect:(id)sender { + [[GPPSignIn sharedInstance] disconnect]; +} + +- (IBAction)userinfoEmailScopeToggle:(id)sender { + [GPPSignIn sharedInstance].shouldFetchGoogleUserEmail = + userinfoEmailScope_.on; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/SignInViewController.xib b/External/google-plus-ios-sdk/SampleCode/SignInViewController.xib new file mode 100644 index 00000000..11350f6a --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/SignInViewController.xib @@ -0,0 +1,514 @@ + + + + 1552 + 12C60 + 3084 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 2083 + + + IBProxyObject + IBUIButton + IBUILabel + IBUISwitch + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 292 + {{19, 171}, {117, 35}} + + + + NO + IBCocoaTouchFramework + 0 + 0 + Sign out + + 1 + MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA + + + 1 + MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA + + + 3 + MC41AA + + + NSImage + button_background.png + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 292 + {{18, 112}, {118, 32}} + + + + + 3 + MQA + + 2 + + + IBCocoaTouchFramework + + + + 290 + {{20, 241}, {280, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Status: + + 1 + MCAwIDAAA + darkTextColor + + + 1 + 13 + + 1 + 17 + + + Helvetica + 17 + 16 + + + + + 290 + {{20, 270}, {280, 65}} + + + NO + YES + 7 + NO + IBCocoaTouchFramework + + + + 1 + 13 + 2 + + + 280 + + + + 292 + {{18, 15}, {273, 21}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Sign-in setting (sign out to change) + + + 0 + + + NO + + + + 292 + {{18, 44}, {197, 27}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + get userinfo.email scope + + + 0 + + + NO + + + + 292 + {{208, 44}, {94, 27}} + + + + _NS:9 + NO + IBCocoaTouchFramework + NO + 0 + 0 + + + + 292 + {{181, 171}, {119, 35}} + + + + NO + IBCocoaTouchFramework + 0 + 0 + Disconnect + + 1 + MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA + + + 1 + MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA + + + + + + + + {{0, 20}, {320, 460}} + + + + + 3 + MQA + + + + IBCocoaTouchFramework + + + + + + + view + + + + 4 + + + + signInButton + + + + 14 + + + + signInAuthStatus + + + + 23 + + + + signOutButton + + + + 24 + + + + signInDisplayName + + + + 28 + + + + userinfoEmailScope + + + + 39 + + + + disconnectButton + + + + 51 + + + + signOut: + + + 7 + + 26 + + + + userinfoEmailScopeToggle: + + + 13 + + 40 + + + + disconnect: + + + 7 + + 50 + + + + + + 0 + + + + + + 1 + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 7 + + + + + 6 + + + + + 22 + + + + + 27 + + + + + 37 + + + + + 38 + + + + + 30 + + + + + 48 + + + + + + + SignInViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 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 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + GPPSignInButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 51 + + + + + GPPSignInButton + UIButton + + IBProjectSource + ./Classes/GPPSignInButton.h + + + + SignInViewController + UIViewController + + id + id + id + + + + disconnect: + id + + + signOut: + id + + + userinfoEmailScopeToggle: + id + + + + UIButton + UILabel + GPPSignInButton + UILabel + UIButton + UISwitch + + + + disconnectButton + UIButton + + + signInAuthStatus + UILabel + + + signInButton + GPPSignInButton + + + signInDisplayName + UILabel + + + signOutButton + UIButton + + + userinfoEmailScope + UISwitch + + + + IBProjectSource + ./Classes/SignInViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + 3 + + button_background.png + {1, 1} + + 2083 + + diff --git a/External/google-plus-ios-sdk/SampleCode/main.m b/External/google-plus-ios-sdk/SampleCode/main.m index 98dfc495..edb0a020 100644 --- a/External/google-plus-ios-sdk/SampleCode/main.m +++ b/External/google-plus-ios-sdk/SampleCode/main.m @@ -18,11 +18,11 @@ #import -#import "GooglePlusSampleAppDelegate.h" +#import "AppDelegate.h" int main(int argc, char *argv[]) { @autoreleasepool { - return UIApplicationMain(argc, argv, nil, - NSStringFromClass([GooglePlusSampleAppDelegate class])); + return UIApplicationMain(argc, argv, nil, + NSStringFromClass([AppDelegate class])); } } diff --git a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.h b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.h index 2f63ef33..40504731 100644 --- a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.h +++ b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.h @@ -10,7 +10,7 @@ #import #import "MPAppDelegate_Shared.h" -#import "GPPShare.h" +#import @interface MPiOSAppDelegate : MPAppDelegate_Shared diff --git a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m index ec173831..6492dcc1 100644 --- a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m +++ b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m @@ -10,7 +10,7 @@ #import "MPAppDelegate_Key.h" #import "MPAppDelegate_Store.h" #import "IASKSettingsReader.h" -#import "GPPSignIn.h" +#import @interface MPiOSAppDelegate() diff --git a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj index 40736dad..25405879 100644 --- a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -38,8 +38,6 @@ DA3EF17D15A47744003ABF4E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DA4425CC1557BED40052177D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DA44260A1557D9E40052177D /* libUbiquityStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */; }; - DA497B9815E8C90E00B52167 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; - DA497C0C15E8C95700B52167 /* libGoogle+.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA497B9715E8C90E00B52167 /* libGoogle+.a */; }; DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; }; DA4DA1DA1564471F00F6F596 /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; }; DA5A09DF171A70E4005284AB /* play.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5A09DD171A70E4005284AB /* play.png */; }; @@ -238,6 +236,8 @@ DABD3FCB1712446200CF925C /* cloud@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD3FC91712446200CF925C /* cloud@2x.png */; }; DABD3FCE1714F45C00CF925C /* identity.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD3FCC1714F45B00CF925C /* identity.png */; }; DABD3FCF1714F45C00CF925C /* identity@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD3FCD1714F45B00CF925C /* identity@2x.png */; }; + DABF632417B744F900DA7E38 /* GoogleOpenSource.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DABF632217B744F900DA7E38 /* GoogleOpenSource.framework */; }; + DABF632517B744F900DA7E38 /* GooglePlus.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DABF632317B744F900DA7E38 /* GooglePlus.framework */; }; DAC6325E1486805C0075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DAC6326D148680650075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DAC632891486D9690075AEA5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC632871486D95D0075AEA5 /* Security.framework */; }; @@ -290,48 +290,6 @@ DAFC56A9172C6E8500CB5CC5 /* LocalyticsUploader.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFC569F172C6E8500CB5CC5 /* LocalyticsUploader.h */; }; DAFC56AA172C6E8500CB5CC5 /* LocalyticsUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56A0172C6E8500CB5CC5 /* LocalyticsUploader.m */; }; DAFC56AC172C6E8500CB5CC5 /* WebserviceConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFC56A1172C6E8500CB5CC5 /* WebserviceConstants.h */; }; - DAFC5779172C705D00CB5CC5 /* libGooglePlus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAFC56B3172C705C00CB5CC5 /* libGooglePlus.a */; }; - DAFC577A172C705D00CB5CC5 /* libGooglePlusUniversal.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAFC56B4172C705C00CB5CC5 /* libGooglePlusUniversal.a */; }; - DAFC577B172C705D00CB5CC5 /* GTLBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56B8172C705C00CB5CC5 /* GTLBase64.m */; }; - DAFC577C172C705D00CB5CC5 /* GTLBatchQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56BA172C705C00CB5CC5 /* GTLBatchQuery.m */; }; - DAFC577D172C705D00CB5CC5 /* GTLBatchResult.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56BC172C705C00CB5CC5 /* GTLBatchResult.m */; }; - DAFC577E172C705D00CB5CC5 /* GTLDateTime.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56BE172C705C00CB5CC5 /* GTLDateTime.m */; }; - DAFC577F172C705D00CB5CC5 /* GTLErrorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56C1172C705C00CB5CC5 /* GTLErrorObject.m */; }; - DAFC5780172C705D00CB5CC5 /* GTLFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56C3172C705C00CB5CC5 /* GTLFramework.m */; }; - DAFC5781172C705D00CB5CC5 /* GTLJSONParser.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56C5172C705C00CB5CC5 /* GTLJSONParser.m */; }; - DAFC5782172C705D00CB5CC5 /* GTLObject.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56C7172C705C00CB5CC5 /* GTLObject.m */; }; - DAFC5783172C705D00CB5CC5 /* GTLPlusAcl.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56CB172C705C00CB5CC5 /* GTLPlusAcl.m */; }; - DAFC5784172C705D00CB5CC5 /* GTLPlusAclentryResource.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56CD172C705C00CB5CC5 /* GTLPlusAclentryResource.m */; }; - DAFC5785172C705D00CB5CC5 /* GTLPlusActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56CF172C705C00CB5CC5 /* GTLPlusActivity.m */; }; - DAFC5786172C705D00CB5CC5 /* GTLPlusActivityFeed.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56D1172C705C00CB5CC5 /* GTLPlusActivityFeed.m */; }; - DAFC5787172C705D00CB5CC5 /* GTLPlusComment.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56D3172C705C00CB5CC5 /* GTLPlusComment.m */; }; - DAFC5788172C705D00CB5CC5 /* GTLPlusCommentFeed.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56D5172C705C00CB5CC5 /* GTLPlusCommentFeed.m */; }; - DAFC5789172C705D00CB5CC5 /* GTLPlusConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56D7172C705C00CB5CC5 /* GTLPlusConstants.m */; }; - DAFC578A172C705D00CB5CC5 /* GTLPlusItemScope.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56D9172C705C00CB5CC5 /* GTLPlusItemScope.m */; }; - DAFC578B172C705D00CB5CC5 /* GTLPlusMoment.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56DB172C705C00CB5CC5 /* GTLPlusMoment.m */; }; - DAFC578C172C705D00CB5CC5 /* GTLPlusMomentsFeed.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56DD172C705C00CB5CC5 /* GTLPlusMomentsFeed.m */; }; - DAFC578D172C705D00CB5CC5 /* GTLPlusPeopleFeed.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56DF172C705C00CB5CC5 /* GTLPlusPeopleFeed.m */; }; - DAFC578E172C705D00CB5CC5 /* GTLPlusPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56E1172C705C00CB5CC5 /* GTLPlusPerson.m */; }; - DAFC578F172C705D00CB5CC5 /* GTLQueryPlus.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56E3172C705C00CB5CC5 /* GTLQueryPlus.m */; }; - DAFC5790172C705D00CB5CC5 /* GTLServicePlus.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56E5172C705C00CB5CC5 /* GTLServicePlus.m */; }; - DAFC5791172C705D00CB5CC5 /* GTLQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56E7172C705C00CB5CC5 /* GTLQuery.m */; }; - DAFC5792172C705D00CB5CC5 /* GTLRuntimeCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56E9172C705C00CB5CC5 /* GTLRuntimeCommon.m */; }; - DAFC5793172C705D00CB5CC5 /* GTLService.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56EB172C705C00CB5CC5 /* GTLService.m */; }; - DAFC5794172C705D00CB5CC5 /* GTLUploadParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56EE172C705C00CB5CC5 /* GTLUploadParameters.m */; }; - DAFC5795172C705D00CB5CC5 /* GTLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56F0172C705C00CB5CC5 /* GTLUtilities.m */; }; - DAFC5796172C705D00CB5CC5 /* GTMHTTPFetchHistory.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56F4172C705C00CB5CC5 /* GTMHTTPFetchHistory.m */; }; - DAFC5797172C705D00CB5CC5 /* GTMHTTPFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56F6172C705C00CB5CC5 /* GTMHTTPFetcher.m */; }; - DAFC5798172C705D00CB5CC5 /* GTMHTTPFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56F8172C705C00CB5CC5 /* GTMHTTPFetcherLogging.m */; }; - DAFC5799172C705D00CB5CC5 /* GTMHTTPFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56FA172C705C00CB5CC5 /* GTMHTTPFetcherService.m */; }; - DAFC579A172C705D00CB5CC5 /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56FC172C705C00CB5CC5 /* GTMLogger.m */; }; - DAFC579B172C705D00CB5CC5 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC56FE172C705C00CB5CC5 /* GTMMethodCheck.m */; }; - DAFC579C172C705D00CB5CC5 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5700172C705C00CB5CC5 /* GTMNSDictionary+URLArguments.m */; }; - DAFC579D172C705D00CB5CC5 /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5702172C705C00CB5CC5 /* GTMNSString+URLArguments.m */; }; - DAFC579E172C705D00CB5CC5 /* GTMOAuth2Authentication.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5704172C705C00CB5CC5 /* GTMOAuth2Authentication.m */; }; - DAFC579F172C705D00CB5CC5 /* GTMOAuth2SignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5706172C705C00CB5CC5 /* GTMOAuth2SignIn.m */; }; - DAFC57A0172C705D00CB5CC5 /* GTMOAuth2ViewControllerTouch.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC5708172C705C00CB5CC5 /* GTMOAuth2ViewControllerTouch.m */; }; - DAFC57A1172C705D00CB5CC5 /* GTMObjC2Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC570B172C705C00CB5CC5 /* GTMObjC2Runtime.m */; }; - DAFC57A2172C705D00CB5CC5 /* OpenInChromeController.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFC570D172C705C00CB5CC5 /* OpenInChromeController.m */; }; DAFE4A1315039824003ABA7C /* NSObject+PearlExport.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFE45D815039823003ABA7C /* NSObject+PearlExport.h */; }; DAFE4A1415039824003ABA7C /* NSObject+PearlExport.m in Sources */ = {isa = PBXBuildFile; fileRef = DAFE45D915039823003ABA7C /* NSObject+PearlExport.m */; }; DAFE4A1515039824003ABA7C /* NSString+PearlNSArrayFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFE45DA15039823003ABA7C /* NSString+PearlNSArrayFormat.h */; }; @@ -424,18 +382,6 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - DA497B9515E8C90E00B52167 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/${PRODUCT_NAME}"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Indexing.m"; sourceTree = ""; }; 93D390FADEB325D8D54A957D /* PearlOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlOverlay.m; sourceTree = ""; }; @@ -467,7 +413,6 @@ DA3EF17915A47744003ABF4E /* Tests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; DA3EF17A15A47744003ABF4E /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libUbiquityStoreManager.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DA497B9715E8C90E00B52167 /* libGoogle+.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libGoogle+.a"; sourceTree = BUILT_PRODUCTS_DIR; }; DA5A09DD171A70E4005284AB /* play.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = play.png; sourceTree = ""; }; DA5A09DE171A70E4005284AB /* play@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "play@2x.png"; sourceTree = ""; }; DA5A09E8171BB0F7005284AB /* unlocked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = unlocked.png; sourceTree = ""; }; @@ -1216,6 +1161,8 @@ DABD3FC91712446200CF925C /* cloud@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cloud@2x.png"; sourceTree = ""; }; DABD3FCC1714F45B00CF925C /* identity.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = identity.png; sourceTree = ""; }; DABD3FCD1714F45B00CF925C /* identity@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "identity@2x.png"; sourceTree = ""; }; + DABF632217B744F900DA7E38 /* GoogleOpenSource.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GoogleOpenSource.framework; sourceTree = ""; }; + DABF632317B744F900DA7E38 /* GooglePlus.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GooglePlus.framework; sourceTree = ""; }; DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libuicolor-utilities.a"; sourceTree = BUILT_PRODUCTS_DIR; }; DAC6326C148680650075AEA5 /* libjrswizzle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjrswizzle.a; sourceTree = BUILT_PRODUCTS_DIR; }; DAC632871486D95D0075AEA5 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; @@ -1286,99 +1233,6 @@ DAFC569F172C6E8500CB5CC5 /* LocalyticsUploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsUploader.h; sourceTree = ""; }; DAFC56A0172C6E8500CB5CC5 /* LocalyticsUploader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalyticsUploader.m; sourceTree = ""; }; DAFC56A1172C6E8500CB5CC5 /* WebserviceConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebserviceConstants.h; sourceTree = ""; }; - DAFC56AE172C705C00CB5CC5 /* GPPDeepLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPPDeepLink.h; sourceTree = ""; }; - DAFC56AF172C705C00CB5CC5 /* GPPShare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPPShare.h; sourceTree = ""; }; - DAFC56B0172C705C00CB5CC5 /* GPPSignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPPSignIn.h; sourceTree = ""; }; - DAFC56B1172C705C00CB5CC5 /* GPPSignInButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPPSignInButton.h; sourceTree = ""; }; - DAFC56B2172C705C00CB5CC5 /* GPPURLHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPPURLHandler.h; sourceTree = ""; }; - DAFC56B3172C705C00CB5CC5 /* libGooglePlus.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGooglePlus.a; sourceTree = ""; }; - DAFC56B4172C705C00CB5CC5 /* libGooglePlusUniversal.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGooglePlusUniversal.a; sourceTree = ""; }; - DAFC56B7172C705C00CB5CC5 /* GTLBase64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBase64.h; sourceTree = ""; }; - DAFC56B8172C705C00CB5CC5 /* GTLBase64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBase64.m; sourceTree = ""; }; - DAFC56B9172C705C00CB5CC5 /* GTLBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBatchQuery.h; sourceTree = ""; }; - DAFC56BA172C705C00CB5CC5 /* GTLBatchQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBatchQuery.m; sourceTree = ""; }; - DAFC56BB172C705C00CB5CC5 /* GTLBatchResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBatchResult.h; sourceTree = ""; }; - DAFC56BC172C705C00CB5CC5 /* GTLBatchResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBatchResult.m; sourceTree = ""; }; - DAFC56BD172C705C00CB5CC5 /* GTLDateTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLDateTime.h; sourceTree = ""; }; - DAFC56BE172C705C00CB5CC5 /* GTLDateTime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLDateTime.m; sourceTree = ""; }; - DAFC56BF172C705C00CB5CC5 /* GTLDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLDefines.h; sourceTree = ""; }; - DAFC56C0172C705C00CB5CC5 /* GTLErrorObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLErrorObject.h; sourceTree = ""; }; - DAFC56C1172C705C00CB5CC5 /* GTLErrorObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLErrorObject.m; sourceTree = ""; }; - DAFC56C2172C705C00CB5CC5 /* GTLFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLFramework.h; sourceTree = ""; }; - DAFC56C3172C705C00CB5CC5 /* GTLFramework.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLFramework.m; sourceTree = ""; }; - DAFC56C4172C705C00CB5CC5 /* GTLJSONParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLJSONParser.h; sourceTree = ""; }; - DAFC56C5172C705C00CB5CC5 /* GTLJSONParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLJSONParser.m; sourceTree = ""; }; - DAFC56C6172C705C00CB5CC5 /* GTLObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLObject.h; sourceTree = ""; }; - DAFC56C7172C705C00CB5CC5 /* GTLObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLObject.m; sourceTree = ""; }; - DAFC56C9172C705C00CB5CC5 /* GTLPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlus.h; sourceTree = ""; }; - DAFC56CA172C705C00CB5CC5 /* GTLPlusAcl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusAcl.h; sourceTree = ""; }; - DAFC56CB172C705C00CB5CC5 /* GTLPlusAcl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusAcl.m; sourceTree = ""; }; - DAFC56CC172C705C00CB5CC5 /* GTLPlusAclentryResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusAclentryResource.h; sourceTree = ""; }; - DAFC56CD172C705C00CB5CC5 /* GTLPlusAclentryResource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusAclentryResource.m; sourceTree = ""; }; - DAFC56CE172C705C00CB5CC5 /* GTLPlusActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusActivity.h; sourceTree = ""; }; - DAFC56CF172C705C00CB5CC5 /* GTLPlusActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusActivity.m; sourceTree = ""; }; - DAFC56D0172C705C00CB5CC5 /* GTLPlusActivityFeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusActivityFeed.h; sourceTree = ""; }; - DAFC56D1172C705C00CB5CC5 /* GTLPlusActivityFeed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusActivityFeed.m; sourceTree = ""; }; - DAFC56D2172C705C00CB5CC5 /* GTLPlusComment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusComment.h; sourceTree = ""; }; - DAFC56D3172C705C00CB5CC5 /* GTLPlusComment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusComment.m; sourceTree = ""; }; - DAFC56D4172C705C00CB5CC5 /* GTLPlusCommentFeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusCommentFeed.h; sourceTree = ""; }; - DAFC56D5172C705C00CB5CC5 /* GTLPlusCommentFeed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusCommentFeed.m; sourceTree = ""; }; - DAFC56D6172C705C00CB5CC5 /* GTLPlusConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusConstants.h; sourceTree = ""; }; - DAFC56D7172C705C00CB5CC5 /* GTLPlusConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusConstants.m; sourceTree = ""; }; - DAFC56D8172C705C00CB5CC5 /* GTLPlusItemScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusItemScope.h; sourceTree = ""; }; - DAFC56D9172C705C00CB5CC5 /* GTLPlusItemScope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusItemScope.m; sourceTree = ""; }; - DAFC56DA172C705C00CB5CC5 /* GTLPlusMoment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusMoment.h; sourceTree = ""; }; - DAFC56DB172C705C00CB5CC5 /* GTLPlusMoment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusMoment.m; sourceTree = ""; }; - DAFC56DC172C705C00CB5CC5 /* GTLPlusMomentsFeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusMomentsFeed.h; sourceTree = ""; }; - DAFC56DD172C705C00CB5CC5 /* GTLPlusMomentsFeed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusMomentsFeed.m; sourceTree = ""; }; - DAFC56DE172C705C00CB5CC5 /* GTLPlusPeopleFeed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusPeopleFeed.h; sourceTree = ""; }; - DAFC56DF172C705C00CB5CC5 /* GTLPlusPeopleFeed.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusPeopleFeed.m; sourceTree = ""; }; - DAFC56E0172C705C00CB5CC5 /* GTLPlusPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusPerson.h; sourceTree = ""; }; - DAFC56E1172C705C00CB5CC5 /* GTLPlusPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusPerson.m; sourceTree = ""; }; - DAFC56E2172C705C00CB5CC5 /* GTLQueryPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLQueryPlus.h; sourceTree = ""; }; - DAFC56E3172C705C00CB5CC5 /* GTLQueryPlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLQueryPlus.m; sourceTree = ""; }; - DAFC56E4172C705C00CB5CC5 /* GTLServicePlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLServicePlus.h; sourceTree = ""; }; - DAFC56E5172C705C00CB5CC5 /* GTLServicePlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLServicePlus.m; sourceTree = ""; }; - DAFC56E6172C705C00CB5CC5 /* GTLQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLQuery.h; sourceTree = ""; }; - DAFC56E7172C705C00CB5CC5 /* GTLQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLQuery.m; sourceTree = ""; }; - DAFC56E8172C705C00CB5CC5 /* GTLRuntimeCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLRuntimeCommon.h; sourceTree = ""; }; - DAFC56E9172C705C00CB5CC5 /* GTLRuntimeCommon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLRuntimeCommon.m; sourceTree = ""; }; - DAFC56EA172C705C00CB5CC5 /* GTLService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLService.h; sourceTree = ""; }; - DAFC56EB172C705C00CB5CC5 /* GTLService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLService.m; sourceTree = ""; }; - DAFC56EC172C705C00CB5CC5 /* GTLTargetNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLTargetNamespace.h; sourceTree = ""; }; - DAFC56ED172C705C00CB5CC5 /* GTLUploadParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLUploadParameters.h; sourceTree = ""; }; - DAFC56EE172C705C00CB5CC5 /* GTLUploadParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLUploadParameters.m; sourceTree = ""; }; - DAFC56EF172C705C00CB5CC5 /* GTLUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLUtilities.h; sourceTree = ""; }; - DAFC56F0172C705C00CB5CC5 /* GTLUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLUtilities.m; sourceTree = ""; }; - DAFC56F1172C705C00CB5CC5 /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = ""; }; - DAFC56F2172C705C00CB5CC5 /* GTMGarbageCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMGarbageCollection.h; sourceTree = ""; }; - DAFC56F3172C705C00CB5CC5 /* GTMHTTPFetchHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetchHistory.h; sourceTree = ""; }; - DAFC56F4172C705C00CB5CC5 /* GTMHTTPFetchHistory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetchHistory.m; sourceTree = ""; }; - DAFC56F5172C705C00CB5CC5 /* GTMHTTPFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcher.h; sourceTree = ""; }; - DAFC56F6172C705C00CB5CC5 /* GTMHTTPFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcher.m; sourceTree = ""; }; - DAFC56F7172C705C00CB5CC5 /* GTMHTTPFetcherLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcherLogging.h; sourceTree = ""; }; - DAFC56F8172C705C00CB5CC5 /* GTMHTTPFetcherLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcherLogging.m; sourceTree = ""; }; - DAFC56F9172C705C00CB5CC5 /* GTMHTTPFetcherService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcherService.h; sourceTree = ""; }; - DAFC56FA172C705C00CB5CC5 /* GTMHTTPFetcherService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcherService.m; sourceTree = ""; }; - DAFC56FB172C705C00CB5CC5 /* GTMLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLogger.h; sourceTree = ""; }; - DAFC56FC172C705C00CB5CC5 /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLogger.m; sourceTree = ""; }; - DAFC56FD172C705C00CB5CC5 /* GTMMethodCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMMethodCheck.h; sourceTree = ""; }; - DAFC56FE172C705C00CB5CC5 /* GTMMethodCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMMethodCheck.m; sourceTree = ""; }; - DAFC56FF172C705C00CB5CC5 /* GTMNSDictionary+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSDictionary+URLArguments.h"; sourceTree = ""; }; - DAFC5700172C705C00CB5CC5 /* GTMNSDictionary+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+URLArguments.m"; sourceTree = ""; }; - DAFC5701172C705C00CB5CC5 /* GTMNSString+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSString+URLArguments.h"; sourceTree = ""; }; - DAFC5702172C705C00CB5CC5 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+URLArguments.m"; sourceTree = ""; }; - DAFC5703172C705C00CB5CC5 /* GTMOAuth2Authentication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2Authentication.h; sourceTree = ""; }; - DAFC5704172C705C00CB5CC5 /* GTMOAuth2Authentication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2Authentication.m; sourceTree = ""; }; - DAFC5705172C705C00CB5CC5 /* GTMOAuth2SignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2SignIn.h; sourceTree = ""; }; - DAFC5706172C705C00CB5CC5 /* GTMOAuth2SignIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2SignIn.m; sourceTree = ""; }; - DAFC5707172C705C00CB5CC5 /* GTMOAuth2ViewControllerTouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2ViewControllerTouch.h; sourceTree = ""; }; - DAFC5708172C705C00CB5CC5 /* GTMOAuth2ViewControllerTouch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2ViewControllerTouch.m; sourceTree = ""; }; - DAFC5709172C705C00CB5CC5 /* GTMOAuth2ViewTouch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GTMOAuth2ViewTouch.xib; sourceTree = ""; }; - DAFC570A172C705C00CB5CC5 /* GTMObjC2Runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMObjC2Runtime.h; sourceTree = ""; }; - DAFC570B172C705C00CB5CC5 /* GTMObjC2Runtime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMObjC2Runtime.m; sourceTree = ""; }; - DAFC570C172C705C00CB5CC5 /* OpenInChromeController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenInChromeController.h; sourceTree = ""; }; - DAFC570D172C705C00CB5CC5 /* OpenInChromeController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OpenInChromeController.m; sourceTree = ""; }; DAFE45D815039823003ABA7C /* NSObject+PearlExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+PearlExport.h"; sourceTree = ""; }; DAFE45D915039823003ABA7C /* NSObject+PearlExport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+PearlExport.m"; sourceTree = ""; }; DAFE45DA15039823003ABA7C /* NSString+PearlNSArrayFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+PearlNSArrayFormat.h"; sourceTree = ""; }; @@ -1483,16 +1337,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DA497B9415E8C90E00B52167 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DA497B9815E8C90E00B52167 /* Foundation.framework in Frameworks */, - DAFC5779172C705D00CB5CC5 /* libGooglePlus.a in Frameworks */, - DAFC577A172C705D00CB5CC5 /* libGooglePlusUniversal.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; DA5BFA41147E415C00F98B1E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1501,7 +1345,6 @@ DA6701E016406BB400B61001 /* AdSupport.framework in Frameworks */, DA6701DE16406B7300B61001 /* Social.framework in Frameworks */, DA6701B816406A4100B61001 /* Accounts.framework in Frameworks */, - DA497C0C15E8C95700B52167 /* libGoogle+.a in Frameworks */, DA829E6215984832002417D3 /* libFontReplacer.a in Frameworks */, DA44260A1557D9E40052177D /* libUbiquityStoreManager.a in Frameworks */, DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */, @@ -1520,6 +1363,8 @@ 93D399433EA75E50656040CB /* Twitter.framework in Frameworks */, DACA22191705DE28002C6C22 /* Crashlytics.framework in Frameworks */, DACA22C61705DE9D002C6C22 /* libTestFlight.a in Frameworks */, + DABF632417B744F900DA7E38 /* GoogleOpenSource.framework in Frameworks */, + DABF632517B744F900DA7E38 /* GooglePlus.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1600,7 +1445,6 @@ DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */, DA829E51159847E0002417D3 /* libFontReplacer.a */, DA3EF17915A47744003ABF4E /* Tests.octest */, - DA497B9715E8C90E00B52167 /* libGoogle+.a */, DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */, ); name = Products; @@ -2468,6 +2312,8 @@ DACA22121705DDC5002C6C22 /* External */ = { isa = PBXGroup; children = ( + DABF632217B744F900DA7E38 /* GoogleOpenSource.framework */, + DABF632317B744F900DA7E38 /* GooglePlus.framework */, DACA22181705DE28002C6C22 /* Crashlytics.framework */, DACA22131705DE13002C6C22 /* UIFont+Replacement */, DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */, @@ -2475,7 +2321,6 @@ DAC77CAF148291A600BCF976 /* Pearl */, DACA22BF1705DE9D002C6C22 /* TestFlight */, DACA22B61705DE7D002C6C22 /* UbiquityStoreManager */, - DACA221A1705DE46002C6C22 /* google-plus-ios-sdk */, ); name = External; path = ../../../External; @@ -2491,15 +2336,6 @@ path = "FontReplacer/UIFont+Replacement"; sourceTree = ""; }; - DACA221A1705DE46002C6C22 /* google-plus-ios-sdk */ = { - isa = PBXGroup; - children = ( - DAFC56AD172C705C00CB5CC5 /* lib */, - DAFC56B5172C705C00CB5CC5 /* OpenSource */, - ); - path = "google-plus-ios-sdk"; - sourceTree = ""; - }; DACA22B61705DE7D002C6C22 /* UbiquityStoreManager */ = { isa = PBXGroup; children = ( @@ -2694,129 +2530,6 @@ path = Views; sourceTree = ""; }; - DAFC56AD172C705C00CB5CC5 /* lib */ = { - isa = PBXGroup; - children = ( - DAFC56AE172C705C00CB5CC5 /* GPPDeepLink.h */, - DAFC56AF172C705C00CB5CC5 /* GPPShare.h */, - DAFC56B0172C705C00CB5CC5 /* GPPSignIn.h */, - DAFC56B1172C705C00CB5CC5 /* GPPSignInButton.h */, - DAFC56B2172C705C00CB5CC5 /* GPPURLHandler.h */, - DAFC56B3172C705C00CB5CC5 /* libGooglePlus.a */, - DAFC56B4172C705C00CB5CC5 /* libGooglePlusUniversal.a */, - ); - path = lib; - sourceTree = ""; - }; - DAFC56B5172C705C00CB5CC5 /* OpenSource */ = { - isa = PBXGroup; - children = ( - DAFC56B6172C705C00CB5CC5 /* GTL */, - DAFC56F1172C705C00CB5CC5 /* GTMDefines.h */, - DAFC56F2172C705C00CB5CC5 /* GTMGarbageCollection.h */, - DAFC56F3172C705C00CB5CC5 /* GTMHTTPFetchHistory.h */, - DAFC56F4172C705C00CB5CC5 /* GTMHTTPFetchHistory.m */, - DAFC56F5172C705C00CB5CC5 /* GTMHTTPFetcher.h */, - DAFC56F6172C705C00CB5CC5 /* GTMHTTPFetcher.m */, - DAFC56F7172C705C00CB5CC5 /* GTMHTTPFetcherLogging.h */, - DAFC56F8172C705C00CB5CC5 /* GTMHTTPFetcherLogging.m */, - DAFC56F9172C705C00CB5CC5 /* GTMHTTPFetcherService.h */, - DAFC56FA172C705C00CB5CC5 /* GTMHTTPFetcherService.m */, - DAFC56FB172C705C00CB5CC5 /* GTMLogger.h */, - DAFC56FC172C705C00CB5CC5 /* GTMLogger.m */, - DAFC56FD172C705C00CB5CC5 /* GTMMethodCheck.h */, - DAFC56FE172C705C00CB5CC5 /* GTMMethodCheck.m */, - DAFC56FF172C705C00CB5CC5 /* GTMNSDictionary+URLArguments.h */, - DAFC5700172C705C00CB5CC5 /* GTMNSDictionary+URLArguments.m */, - DAFC5701172C705C00CB5CC5 /* GTMNSString+URLArguments.h */, - DAFC5702172C705C00CB5CC5 /* GTMNSString+URLArguments.m */, - DAFC5703172C705C00CB5CC5 /* GTMOAuth2Authentication.h */, - DAFC5704172C705C00CB5CC5 /* GTMOAuth2Authentication.m */, - DAFC5705172C705C00CB5CC5 /* GTMOAuth2SignIn.h */, - DAFC5706172C705C00CB5CC5 /* GTMOAuth2SignIn.m */, - DAFC5707172C705C00CB5CC5 /* GTMOAuth2ViewControllerTouch.h */, - DAFC5708172C705C00CB5CC5 /* GTMOAuth2ViewControllerTouch.m */, - DAFC5709172C705C00CB5CC5 /* GTMOAuth2ViewTouch.xib */, - DAFC570A172C705C00CB5CC5 /* GTMObjC2Runtime.h */, - DAFC570B172C705C00CB5CC5 /* GTMObjC2Runtime.m */, - DAFC570C172C705C00CB5CC5 /* OpenInChromeController.h */, - DAFC570D172C705C00CB5CC5 /* OpenInChromeController.m */, - ); - path = OpenSource; - sourceTree = ""; - }; - DAFC56B6172C705C00CB5CC5 /* GTL */ = { - isa = PBXGroup; - children = ( - DAFC56B7172C705C00CB5CC5 /* GTLBase64.h */, - DAFC56B8172C705C00CB5CC5 /* GTLBase64.m */, - DAFC56B9172C705C00CB5CC5 /* GTLBatchQuery.h */, - DAFC56BA172C705C00CB5CC5 /* GTLBatchQuery.m */, - DAFC56BB172C705C00CB5CC5 /* GTLBatchResult.h */, - DAFC56BC172C705C00CB5CC5 /* GTLBatchResult.m */, - DAFC56BD172C705C00CB5CC5 /* GTLDateTime.h */, - DAFC56BE172C705C00CB5CC5 /* GTLDateTime.m */, - DAFC56BF172C705C00CB5CC5 /* GTLDefines.h */, - DAFC56C0172C705C00CB5CC5 /* GTLErrorObject.h */, - DAFC56C1172C705C00CB5CC5 /* GTLErrorObject.m */, - DAFC56C2172C705C00CB5CC5 /* GTLFramework.h */, - DAFC56C3172C705C00CB5CC5 /* GTLFramework.m */, - DAFC56C4172C705C00CB5CC5 /* GTLJSONParser.h */, - DAFC56C5172C705C00CB5CC5 /* GTLJSONParser.m */, - DAFC56C6172C705C00CB5CC5 /* GTLObject.h */, - DAFC56C7172C705C00CB5CC5 /* GTLObject.m */, - DAFC56C8172C705C00CB5CC5 /* GTLPlus */, - DAFC56E6172C705C00CB5CC5 /* GTLQuery.h */, - DAFC56E7172C705C00CB5CC5 /* GTLQuery.m */, - DAFC56E8172C705C00CB5CC5 /* GTLRuntimeCommon.h */, - DAFC56E9172C705C00CB5CC5 /* GTLRuntimeCommon.m */, - DAFC56EA172C705C00CB5CC5 /* GTLService.h */, - DAFC56EB172C705C00CB5CC5 /* GTLService.m */, - DAFC56EC172C705C00CB5CC5 /* GTLTargetNamespace.h */, - DAFC56ED172C705C00CB5CC5 /* GTLUploadParameters.h */, - DAFC56EE172C705C00CB5CC5 /* GTLUploadParameters.m */, - DAFC56EF172C705C00CB5CC5 /* GTLUtilities.h */, - DAFC56F0172C705C00CB5CC5 /* GTLUtilities.m */, - ); - path = GTL; - sourceTree = ""; - }; - DAFC56C8172C705C00CB5CC5 /* GTLPlus */ = { - isa = PBXGroup; - children = ( - DAFC56C9172C705C00CB5CC5 /* GTLPlus.h */, - DAFC56CA172C705C00CB5CC5 /* GTLPlusAcl.h */, - DAFC56CB172C705C00CB5CC5 /* GTLPlusAcl.m */, - DAFC56CC172C705C00CB5CC5 /* GTLPlusAclentryResource.h */, - DAFC56CD172C705C00CB5CC5 /* GTLPlusAclentryResource.m */, - DAFC56CE172C705C00CB5CC5 /* GTLPlusActivity.h */, - DAFC56CF172C705C00CB5CC5 /* GTLPlusActivity.m */, - DAFC56D0172C705C00CB5CC5 /* GTLPlusActivityFeed.h */, - DAFC56D1172C705C00CB5CC5 /* GTLPlusActivityFeed.m */, - DAFC56D2172C705C00CB5CC5 /* GTLPlusComment.h */, - DAFC56D3172C705C00CB5CC5 /* GTLPlusComment.m */, - DAFC56D4172C705C00CB5CC5 /* GTLPlusCommentFeed.h */, - DAFC56D5172C705C00CB5CC5 /* GTLPlusCommentFeed.m */, - DAFC56D6172C705C00CB5CC5 /* GTLPlusConstants.h */, - DAFC56D7172C705C00CB5CC5 /* GTLPlusConstants.m */, - DAFC56D8172C705C00CB5CC5 /* GTLPlusItemScope.h */, - DAFC56D9172C705C00CB5CC5 /* GTLPlusItemScope.m */, - DAFC56DA172C705C00CB5CC5 /* GTLPlusMoment.h */, - DAFC56DB172C705C00CB5CC5 /* GTLPlusMoment.m */, - DAFC56DC172C705C00CB5CC5 /* GTLPlusMomentsFeed.h */, - DAFC56DD172C705C00CB5CC5 /* GTLPlusMomentsFeed.m */, - DAFC56DE172C705C00CB5CC5 /* GTLPlusPeopleFeed.h */, - DAFC56DF172C705C00CB5CC5 /* GTLPlusPeopleFeed.m */, - DAFC56E0172C705C00CB5CC5 /* GTLPlusPerson.h */, - DAFC56E1172C705C00CB5CC5 /* GTLPlusPerson.m */, - DAFC56E2172C705C00CB5CC5 /* GTLQueryPlus.h */, - DAFC56E3172C705C00CB5CC5 /* GTLQueryPlus.m */, - DAFC56E4172C705C00CB5CC5 /* GTLServicePlus.h */, - DAFC56E5172C705C00CB5CC5 /* GTLServicePlus.m */, - ); - path = GTLPlus; - sourceTree = ""; - }; DAFE45D715039823003ABA7C /* Pearl */ = { isa = PBXGroup; children = ( @@ -3113,23 +2826,6 @@ productReference = DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */; productType = "com.apple.product-type.library.static"; }; - DA497B9615E8C90E00B52167 /* Google+ */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA497BA015E8C90E00B52167 /* Build configuration list for PBXNativeTarget "Google+" */; - buildPhases = ( - DA497B9315E8C90E00B52167 /* Sources */, - DA497B9415E8C90E00B52167 /* Frameworks */, - DA497B9515E8C90E00B52167 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Google+"; - productName = "Google+"; - productReference = DA497B9715E8C90E00B52167 /* libGoogle+.a */; - productType = "com.apple.product-type.library.static"; - }; DA5BFA43147E415C00F98B1E /* MasterPassword */ = { isa = PBXNativeTarget; buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */; @@ -3365,7 +3061,6 @@ DA4425CA1557BED40052177D /* UbiquityStoreManager */, DA829E50159847E0002417D3 /* FontReplacer */, DA3EF17815A47744003ABF4E /* Tests */, - DA497B9615E8C90E00B52167 /* Google+ */, DAFC5654172C573B00CB5CC5 /* InAppSettingsKit */, ); }; @@ -3605,53 +3300,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DA497B9315E8C90E00B52167 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DAFC577B172C705D00CB5CC5 /* GTLBase64.m in Sources */, - DAFC577C172C705D00CB5CC5 /* GTLBatchQuery.m in Sources */, - DAFC577D172C705D00CB5CC5 /* GTLBatchResult.m in Sources */, - DAFC577E172C705D00CB5CC5 /* GTLDateTime.m in Sources */, - DAFC577F172C705D00CB5CC5 /* GTLErrorObject.m in Sources */, - DAFC5780172C705D00CB5CC5 /* GTLFramework.m in Sources */, - DAFC5781172C705D00CB5CC5 /* GTLJSONParser.m in Sources */, - DAFC5782172C705D00CB5CC5 /* GTLObject.m in Sources */, - DAFC5783172C705D00CB5CC5 /* GTLPlusAcl.m in Sources */, - DAFC5784172C705D00CB5CC5 /* GTLPlusAclentryResource.m in Sources */, - DAFC5785172C705D00CB5CC5 /* GTLPlusActivity.m in Sources */, - DAFC5786172C705D00CB5CC5 /* GTLPlusActivityFeed.m in Sources */, - DAFC5787172C705D00CB5CC5 /* GTLPlusComment.m in Sources */, - DAFC5788172C705D00CB5CC5 /* GTLPlusCommentFeed.m in Sources */, - DAFC5789172C705D00CB5CC5 /* GTLPlusConstants.m in Sources */, - DAFC578A172C705D00CB5CC5 /* GTLPlusItemScope.m in Sources */, - DAFC578B172C705D00CB5CC5 /* GTLPlusMoment.m in Sources */, - DAFC578C172C705D00CB5CC5 /* GTLPlusMomentsFeed.m in Sources */, - DAFC578D172C705D00CB5CC5 /* GTLPlusPeopleFeed.m in Sources */, - DAFC578E172C705D00CB5CC5 /* GTLPlusPerson.m in Sources */, - DAFC578F172C705D00CB5CC5 /* GTLQueryPlus.m in Sources */, - DAFC5790172C705D00CB5CC5 /* GTLServicePlus.m in Sources */, - DAFC5791172C705D00CB5CC5 /* GTLQuery.m in Sources */, - DAFC5792172C705D00CB5CC5 /* GTLRuntimeCommon.m in Sources */, - DAFC5793172C705D00CB5CC5 /* GTLService.m in Sources */, - DAFC5794172C705D00CB5CC5 /* GTLUploadParameters.m in Sources */, - DAFC5795172C705D00CB5CC5 /* GTLUtilities.m in Sources */, - DAFC5796172C705D00CB5CC5 /* GTMHTTPFetchHistory.m in Sources */, - DAFC5797172C705D00CB5CC5 /* GTMHTTPFetcher.m in Sources */, - DAFC5798172C705D00CB5CC5 /* GTMHTTPFetcherLogging.m in Sources */, - DAFC5799172C705D00CB5CC5 /* GTMHTTPFetcherService.m in Sources */, - DAFC579A172C705D00CB5CC5 /* GTMLogger.m in Sources */, - DAFC579B172C705D00CB5CC5 /* GTMMethodCheck.m in Sources */, - DAFC579C172C705D00CB5CC5 /* GTMNSDictionary+URLArguments.m in Sources */, - DAFC579D172C705D00CB5CC5 /* GTMNSString+URLArguments.m in Sources */, - DAFC579E172C705D00CB5CC5 /* GTMOAuth2Authentication.m in Sources */, - DAFC579F172C705D00CB5CC5 /* GTMOAuth2SignIn.m in Sources */, - DAFC57A0172C705D00CB5CC5 /* GTMOAuth2ViewControllerTouch.m in Sources */, - DAFC57A1172C705D00CB5CC5 /* GTMObjC2Runtime.m in Sources */, - DAFC57A2172C705D00CB5CC5 /* OpenInChromeController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; DA5BFA40147E415C00F98B1E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3930,39 +3578,6 @@ }; name = "AppStore-iOS"; }; - DA497BA115E8C90E00B52167 /* Debug-iOS */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../../../External/google-plus-ios-sdk/lib\"", - ); - }; - name = "Debug-iOS"; - }; - DA497BA215E8C90E00B52167 /* AdHoc-iOS */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../../../External/google-plus-ios-sdk/lib\"", - ); - }; - name = "AdHoc-iOS"; - }; - DA497BA315E8C90E00B52167 /* AppStore-iOS */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../../../External/google-plus-ios-sdk/lib\"", - ); - }; - name = "AppStore-iOS"; - }; DA5BFA6B147E415C00F98B1E /* Debug-iOS */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3980,7 +3595,7 @@ COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherit)", - "\"$(SRCROOT)/../../../External\"", + "\"$(SRCROOT)/../../../External\"/**", ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_OPTIMIZATION_LEVEL = 0; @@ -4049,7 +3664,7 @@ COPY_PHASE_STRIP = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherit)", - "\"$(SRCROOT)/../../../External\"", + "\"$(SRCROOT)/../../../External\"/**", ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -4106,10 +3721,6 @@ buildSettings = { CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../../../External\"", - ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; SKIP_INSTALL = NO; @@ -4123,10 +3734,6 @@ CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Maarten Billemont"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../../../External\"", - ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "20B988BD-7A10-49E6-9FF7-367BD5714A31"; @@ -4173,7 +3780,7 @@ COPY_PHASE_STRIP = YES; FRAMEWORK_SEARCH_PATHS = ( "$(inherit)", - "\"$(SRCROOT)/../../../External\"", + "\"$(SRCROOT)/../../../External\"/**", ); GCC_C_LANGUAGE_STANDARD = gnu99; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -4231,10 +3838,6 @@ CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_ENTITLEMENTS = MasterPassword.entitlements; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Maarten Billemont"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../../../External\"", - ); GCC_PREFIX_HEADER = "MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword-Info.plist"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "3EF104A5-610A-429E-ACF0-232A2C8A7E1C"; @@ -4452,16 +4055,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = "AdHoc-iOS"; }; - DA497BA015E8C90E00B52167 /* Build configuration list for PBXNativeTarget "Google+" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA497BA115E8C90E00B52167 /* Debug-iOS */, - DA497BA215E8C90E00B52167 /* AdHoc-iOS */, - DA497BA315E8C90E00B52167 /* AppStore-iOS */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = "AdHoc-iOS"; - }; DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-iOS" */ = { isa = XCConfigurationList; buildConfigurations = (