For convenience, this class exposes a default tracker instance.
-This is initialized to nil and will be set to the first tracker that is
-instantiated in trackerWithTrackingId:. It may be overridden as desired.
When this is true, no tracking information will be gathered; tracking calls
-will effectively become no-ops. When set to true, all tracking information that
-has not yet been submitted. The value of this flag will be persisted
-automatically by the SDK. Developers can optionally use this flag to implement
-an opt-out setting in the app to allows users to opt out of Google Analytics
-tracking.
If this value is negative, tracking information must be sent manually by
-calling dispatch. If this value is zero, tracking information will
-automatically be sent as soon as possible (usually immediately if the device
-has Internet connectivity). If this value is positive, tracking information
-will be automatically dispatched every dispatchInterval seconds.
When set to true, the SDK will record the currently registered uncaught
-exception handler, and then register an uncaught exception handler which tracks
-the exceptions that occurred using defaultTracker. If defaultTracker is not
-nil, this function will track the exception on the tracker and attempt to
-dispatch any outstanding tracking information for 5 seconds. It will then call
-the previously registered exception handler, if any. When set back to false,
-the previously registered uncaught exception handler will be restored.
Create or retrieve a GAITracker implementation with the specified tracking
-ID. If the tracker for the specified tracking ID does not already exist, then
-it will be created and returned; otherwise, the existing tracker will be
-returned. If defaultTracker is not set, it will be set to the tracker instance
-returned here.
If true, Google Analytics debug messages will be logged with NSLog(). This is
-useful for debugging calls to the Google Analytics SDK.
-
-
-
-
-
@property (nonatomic, assign) BOOL debug
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
By default, this flag is set to NO.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAI.h
-
-
-
-
-
-
-
-
defaultTracker
-
-
-
-
-
For convenience, this class exposes a default tracker instance.
-This is initialized to nil and will be set to the first tracker that is
-instantiated in trackerWithTrackingId:. It may be overridden as desired.
If this value is negative, tracking information must be sent manually by
-calling dispatch. If this value is zero, tracking information will
-automatically be sent as soon as possible (usually immediately if the device
-has Internet connectivity). If this value is positive, tracking information
-will be automatically dispatched every dispatchInterval seconds.
When the dispatchInterval is non-zero, setting it to zero will cause any queued
-tracking information to be sent immediately.
-
-
By default, this is set to 120, which indicates tracking information should
-be dispatched automatically every 120 seconds.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAI.h
-
-
-
-
-
-
-
-
optOut
-
-
-
-
-
When this is true, no tracking information will be gathered; tracking calls
-will effectively become no-ops. When set to true, all tracking information that
-has not yet been submitted. The value of this flag will be persisted
-automatically by the SDK. Developers can optionally use this flag to implement
-an opt-out setting in the app to allows users to opt out of Google Analytics
-tracking.
-
-
-
-
-
@property (nonatomic, assign) BOOL optOut
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
This is set to NO the first time the Google Analytics SDK is used on a
-device, and is persisted thereafter.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAI.h
-
-
-
-
-
-
-
-
trackUncaughtExceptions
-
-
-
-
-
When set to true, the SDK will record the currently registered uncaught
-exception handler, and then register an uncaught exception handler which tracks
-the exceptions that occurred using defaultTracker. If defaultTracker is not
-nil, this function will track the exception on the tracker and attempt to
-dispatch any outstanding tracking information for 5 seconds. It will then call
-the previously registered exception handler, if any. When set back to false,
-the previously registered uncaught exception handler will be restored.
Get the shared instance of the Google Analytics for iOS class.
-
-
-
-
-
+ (GAI *)sharedInstance
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Declared In
- GAI.h
-
-
-
-
-
-
-
-
-
-
-
-
Instance Methods
-
-
-
-
dispatch
-
-
-
-
-
Dispatches any pending tracking information.
-
-
-
-
-
- (void)dispatch
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
It would be wise to call this when application is exiting to initiate the
-submission of any unsubmitted tracking information. Note that this does not
-have any effect on dispatchInterval, and can be used in conjuntion with
-periodic dispatch.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAI.h
-
-
-
-
-
-
-
-
trackerWithTrackingId:
-
-
-
-
-
Create or retrieve a GAITracker implementation with the specified tracking
-ID. If the tracker for the specified tracking ID does not already exist, then
-it will be created and returned; otherwise, the existing tracker will be
-returned. If defaultTracker is not set, it will be set to the tracker instance
-returned here.
The tracking ID (a string that begins with “UA-”). Must not
-be nil or empty.
-
-
-
-
-
-
-
-
Return Value
-
A GAITracker associated with the specified tracking ID. The tracker
-can be used to send tracking data to Google Analytics. The first time this
-method is called with a particular tracking ID, the tracker for that tracking
-ID will be returned, and subsequent calls with the same tracking ID will return
-the same instance. It is not necessary to retain the tracker because the
-tracker will be retained internally by the library.
-
-
If an error occurs or the tracker ID is not valid, this method will return
-nil.
Extends UIViewController to generate Google Analytics view tracking calls
-whenever the view appears; this is done by overriding the viewDidAppear:
-method. The view name must be set for any tracking calls to be made.
-
-
By default, this will use [GAI defaultTracker] for tracking calls, but one can
-override this by setting the tracker property.
Google Analytics tracking interface. Obtain instances of this interface from
-[GAI trackerWithTrackingId:] to track screens, events, transactions, timing,
-and exceptions. The implementation of this interface is thread-safe, and no
-calls are expected to block or take a long time. All network and disk activity
-will take place in the background.
The application name associated with this tracker. By default, this property is
-populated with the CFBundleName string from the application bundle. If you
-wish to override this property, you must do so before making any tracking
-calls.
The application identifier associated with this tracker. This should be set to
-the iTunes Connect application identifier assigned to your application. By
-default, this property is nil. If you wish to set this property, you must do
-so before making any tracking calls.
The application version associated with this tracker. By default, this property
-is populated with the CFBundleShortVersionString string from the application
-bundle. If you wish to override this property, you must do so before making any
-tracking calls.
Tracking data collected while this is true will be anonymized by the Google
-Analytics servers by zeroing out some of the least significant bits of the
-IP address.
Tracking information collected while this is true will be submitted to Google
-Analytics using HTTPS connection(s); otherwise, HTTP will be used. Note that
-there may be additional overhead when sending data using HTTPS in terms of
-processing costs and/or battery consumption.
The sampleRate parameter controls the probability that the visitor will be
-sampled. By default, sampleRate is 100, which signifies no sampling. sampleRate
-may be set to any value between 0 and 100, inclusive. A value of 90 means 90%
-of visitors should be sampled (10% of visitors to be sampled out).
The campaign URL for this tracker. This is not directly propagated to Google
-Analytics, but if there are campaign parameter(s), either manually or
-auto-tagged, present in this URL, the SDK will include those parameters in the
-next dispatch of tracking information. Google Analytics treats tracking
-information with differing campaign information as part of separate sessions.
If true, indicates the start of a new session. Note that when a tracker is
-first instantiated, this is initialized to true. To prevent this default
-behavior, set this to NO when the tracker is first obtained.
If non-negative, indicates how long, in seconds, the application must
-transition to the inactive or background state for before the tracker will
-automatically indicate the start of a new session when the app becomes active
-again by setting sessionStart to true. For example, if this is set to 30
-seconds, and the user receives a phone call that lasts for 45 seconds while
-using the app, upon returning to the app, the sessionStart parameter will be
-set to true. If the phone call instead lasted 10 seconds, sessionStart will not
-be modified.
Track that the specified view or screen was displayed. This call sets
-the appScreen property and generates tracking information to be sent to Google
-Analytics.
Close the tracker. This will mark it as closed and remove it from the list of
-trackers accessible through [GAI trackerWithTrackingId:], thus decrementing its
-reference count (and causing it to be dealloced unless it has been retained by
-the application). Once this method has been called, it is an error to call any
-of the tracking methods, and they will not result in the generation of any
-tracking information to be submitted to Google Analytics.
-
-
- required method
-
-
-
-
-
-
-
-
-
-
-
-
Properties
-
-
-
-
anonymize
-
-
-
-
-
Tracking data collected while this is true will be anonymized by the Google
-Analytics servers by zeroing out some of the least significant bits of the
-IP address.
-
-
-
-
-
@property (nonatomic, assign) BOOL anonymize
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
In the case of IPv4 addresses, the last octet is set to zero. For
-IPv6 addresses, the last 10 octets are set to zero, although this is subject to
-change in the future.
-
-
By default, this flag is false.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
appId
-
-
-
-
-
The application identifier associated with this tracker. This should be set to
-the iTunes Connect application identifier assigned to your application. By
-default, this property is nil. If you wish to set this property, you must do
-so before making any tracking calls.
-
-
-
-
-
@property (nonatomic, copy) NSString *appId
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
Note that this is not your app’s bundle id (e.g. com.example.appname), but the
-identifier used by the App Store.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
appName
-
-
-
-
-
The application name associated with this tracker. By default, this property is
-populated with the CFBundleName string from the application bundle. If you
-wish to override this property, you must do so before making any tracking
-calls.
-
-
-
-
-
@property (nonatomic, copy) NSString *appName
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
appScreen
-
-
-
-
-
The current screen set for this tracker.
-
-
-
-
-
@property (nonatomic, copy) NSString *appScreen
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
Calling trackView: will also update this property before it dispatches tracking
-information to Google Analytics. However, if you wish to update the current
-screen without sending any tracking information, set this property directly.
-The updated screen will be reflected in subsequent tracking information.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
appVersion
-
-
-
-
-
The application version associated with this tracker. By default, this property
-is populated with the CFBundleShortVersionString string from the application
-bundle. If you wish to override this property, you must do so before making any
-tracking calls.
-
-
-
-
-
@property (nonatomic, copy) NSString *appVersion
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
campaignUrl
-
-
-
-
-
The campaign URL for this tracker. This is not directly propagated to Google
-Analytics, but if there are campaign parameter(s), either manually or
-auto-tagged, present in this URL, the SDK will include those parameters in the
-next dispatch of tracking information. Google Analytics treats tracking
-information with differing campaign information as part of separate sessions.
This is a persistent unique identifier generated the first time the library is
-called and persisted unchanged thereafter. It is used to identify the client
-across multiple application sessions.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
referrerUrl
-
-
-
-
-
The referrer URL for this tracker. Changing this value causes it to be sent
-with the next dispatch of tracking information.
-
-
-
-
-
@property (nonatomic, copy) NSString *referrerUrl
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
sampleRate
-
-
-
-
-
The sampleRate parameter controls the probability that the visitor will be
-sampled. By default, sampleRate is 100, which signifies no sampling. sampleRate
-may be set to any value between 0 and 100, inclusive. A value of 90 means 90%
-of visitors should be sampled (10% of visitors to be sampled out).
-
-
-
-
-
@property (nonatomic, assign) double sampleRate
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
When a visitor is not sampled, no data is collected by Google Analytics for iOS
-library about that visitor’s activity. If your application is subject to heavy
-traffic spikes, you may wish to adjust the sample rate to ensure uninterrupted
-report tracking. Sampling in Google Analytics occurs consistently across unique
-visitors, ensuring integrity in trending and reporting even when sampling is
-enabled, because unique visitors remain included or excluded from the sample,
-as set from the initiation of sampling.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
sessionStart
-
-
-
-
-
If true, indicates the start of a new session. Note that when a tracker is
-first instantiated, this is initialized to true. To prevent this default
-behavior, set this to NO when the tracker is first obtained.
-
-
-
-
-
@property (nonatomic, assign) BOOL sessionStart
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
By itself, setting this does not send any data. If this is true, when the next
-tracking call is made, a parameter will be added to the resulting tracking
-information indicating that it is the start of a session, and this flag will be
-cleared.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
sessionTimeout
-
-
-
-
-
If non-negative, indicates how long, in seconds, the application must
-transition to the inactive or background state for before the tracker will
-automatically indicate the start of a new session when the app becomes active
-again by setting sessionStart to true. For example, if this is set to 30
-seconds, and the user receives a phone call that lasts for 45 seconds while
-using the app, upon returning to the app, the sessionStart parameter will be
-set to true. If the phone call instead lasted 10 seconds, sessionStart will not
-be modified.
To disable automatic session tracking, set this to a negative value. To
-indicate the start of a session anytime the app becomes inactive or
-backgrounded, set this to zero.
-
-
By default, this is 30 seconds.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
trackingId
-
-
-
-
-
The tracking identifier (the string that begins with “UA-”) this tracker is
-associated with.
Tracking information collected while this is true will be submitted to Google
-Analytics using HTTPS connection(s); otherwise, HTTP will be used. Note that
-there may be additional overhead when sending data using HTTPS in terms of
-processing costs and/or battery consumption.
-
-
-
-
-
@property (nonatomic, assign) BOOL useHttps
-
-
-
-
-
-
-
-
-
-
-
Discussion
-
By default, this flag is true.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Instance Methods
-
-
-
-
close
-
-
-
-
-
Close the tracker. This will mark it as closed and remove it from the list of
-trackers accessible through [GAI trackerWithTrackingId:], thus decrementing its
-reference count (and causing it to be dealloced unless it has been retained by
-the application). Once this method has been called, it is an error to call any
-of the tracking methods, and they will not result in the generation of any
-tracking information to be submitted to Google Analytics.
-
-
-
-
-
- (void)close
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
get:
-
-
-
-
-
Get a tracking parameter.
-
-
-
-
-
- (NSString *)get:(NSString *)parameterName
-
-
-
-
-
Parameters
-
-
-
parameterName
-
The parameter name.
-
-
-
-
-
-
-
-
Return Value
-
The parameter value, or nil if no value for the given parameter is
-set.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
send:params:
-
-
-
-
-
Queue tracking information with the given parameter values.
YES if the tracking information was queued for dispatch, or NO if
-there was an error (e.g. the tracker was closed).
-
-
-
-
-
-
-
-
Discussion
-
If [GAI optOut] is true, this will not generate any tracking information.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
sendView
-
-
-
-
-
Track that the current screen (as set in appScreen) was displayed. If appScreen
-has not been set, this will not generate any tracking information.
-
-
-
-
-
- (BOOL)sendView
-
-
-
-
-
-
-
Return Value
-
YES if the tracking information was queued for dispatch, or NO if
-there was an error (e.g. the tracker was closed or appScreen is not set).
-
-
-
-
-
-
-
-
Discussion
-
If [GAI optOut] is true, this will not generate any tracking information.
-
-
-
-
-
-
-
-
-
-
Declared In
- GAITracker.h
-
-
-
-
-
-
-
-
sendView:
-
-
-
-
-
Track that the specified view or screen was displayed. This call sets
-the appScreen property and generates tracking information to be sent to Google
-Analytics.
-
-
-
-
-
- (BOOL)sendView:(NSString *)screen
-
-
-
-
-
Parameters
-
-
-
screen
-
The name of the screen. Must not be nil.
-
-
-
-
-
-
-
-
Return Value
-
YES if the tracking information was queued for dispatch, or NO if
-there was an error (e.g. the tracker was closed).
-
-
-
-
-
-
-
-
Discussion
-
If [GAI optOut] is true, this will not generate any tracking information.
+ *
+ * If the caller wants to be asynchronously notified when the container is
+ * available but wants to manually specify the timeout to 0.5 seconds, then the
+ * caller should subclass TAGContainerOpenerNotifier, make the call to
+ * TAGContainerOpener::openContainerWithId:tagManager:openType:timeout:notifier:
+ * with timeout set to 0.5, and add the implementation to
+ * TAGContainerOpenerNotifier::containerAvailable: for handling the container
+ * available notification.
+ */
+@interface TAGContainerOpener : NSObject
+
+// @cond
+/**
+ * TAGContainerOpener should not be instantiated directly. Use
+ * openContainerWithId:tagManager:timeout:openType:
+ * or openContainerWithId:tagManager::timeout:openType:notifier:.
+ */
+- (id)init __attribute__((unavailable));
+// @endcond
+
+/**
+ * Waits up to timeout seconds for a container to be loaded
+ * (non default or fresh depending on the specified openType)
+ * and returns a TAGContainerFuture.
+ *
+ *
If the open type is kTAGOpenTypePreferNonDefault, a
+ * non-default (saved or retrieved from network) container is loaded and the
+ * TAGContainerFuture is unblocked as soon as one of the
+ * following happens:
+ *
+ *
a saved container is loaded.
+ *
if there is no saved container, a network container is loaded
+ * or a network error occurs.
+ *
the timer expires.
+ *
+ * If a network error occurs or the timer expires, TAGContainerFuture::get
+ * may return a default container.
+ *
+ *
If the open type is kTAGOpenTypePreferFresh, a fresh (saved
+ * or retrieved from network) container is loaded and the TAGContainerFuture is
+ * unblocked as soon as one of the following happens:
+ *
+ *
a saved fresh container is loaded.
+ *
if there is no saved container or saved container is stale, a network
+ * container is loaded or a network error occurs.
+ *
the timer expires.
+ *
+ * If a network error occurs or the timer expires, TAGContainerFuture::get
+ * may contain defaults or a stale saved container.
+ *
+ *
If you call one of the openContainer methods a second time with a
+ * given containerId, a TAGContainerFuture will be
+ * returned whose TAGContainerFuture::get will return the same container as
+ * the first call did.
+ *
+ * @param containerId The ID of the container to load.
+ * @param tagManager The TAGManager for getting the container.
+ * @param timeout The maximum number of seconds to wait to load the container
+ * from the saved store. If nil, TAGContainerOpener::defaultTimeout will be
+ * used.
+ * @param openType The choice of how to open the container.
+ * @return A TAGContainerFuture that will wait for up to timeout
+ * and return the container when it is available.
+ */
++ (id)
+ openContainerWithId:(NSString *)containerId
+ tagManager:(TAGManager *)tagManager
+ openType:(TAGOpenType)openType
+ timeout:(NSTimeInterval *)timeout;
+
+/**
+ * Waits up to timeout seconds for a container to be loaded
+ * (non default or fresh depending on the specified openType)
+ * and calls a notifier when the container is available.
+ *
+ *
If the open type is kTAGOpenTypePreferNonDefault, a
+ * non-default (saved or retrieved from network) container is loaded and passed
+ * into the notifier. The notifier is called as soon as one of the following
+ * happens:
+ *
+ *
a saved container is loaded.
+ *
if there is no saved container, a network container is loaded
+ * or a network error occurs.
+ *
the timer expires.
+ *
+ * If a network error occurs or the timer expires, the container passed into
+ * the notifier is a default container.
+ *
+ *
If the open type is kTAGOpenTypePreferFresh, a fresh (saved
+ * or retrieved from network) container is loaded and passed into the notifier.
+ * The notifier is called as soon as one of the following happens:
+ *
+ *
a saved fresh container is loaded.
+ *
if there is no saved container or saved container is stale, a network
+ * container is loaded or a network error occurs.
+ *
the timer expires.
+ *
+ * If a network error occurs or the timer expires, the container passed into
+ * the notifier may contain defaults or a stale saved container.
+ *
+ *
If you call one of the openContainer methods a second time with a
+ * given containerId, the same container returned from the
+ * previous call will be passed into the notifier as soon as
+ * it's available.
+ *
+ * @param containerId The ID of the container to load.
+ * @param tagManager The TAGManager used for getting the container.
+ * @param openType The choice of how to open the container.
+ * @param timeout The maximum number of seconds to wait to load the container
+ * from the saved store. If nil, TAGContainerOpener::defaultTimeout will be
+ * used.
+ * @param notifier An optional notifier which will be called when the
+ * container is available. It will be called with the fresh container, if
+ * available and loaded before the timeout; otherwise it'll be called with
+ * a non-fresh container. Note that the notifier may be called from a
+ * different thread.
+ */
++ (void) openContainerWithId:(NSString *)containerId
+ tagManager:(TAGManager *)tagManager
+ openType:(TAGOpenType)openType
+ timeout:(NSTimeInterval *)timeout
+ notifier:(id)notifier;
+
+/**
+ * Returns the default timeout for requesting the container.
+ *
+ * @return The default timeout in seconds.
+ */
++ (NSTimeInterval)defaultTimeout;
+
+@end
diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGDataLayer.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGDataLayer.h
new file mode 100644
index 0000000..50e8d30
--- /dev/null
+++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGDataLayer.h
@@ -0,0 +1,136 @@
+#import
+
+/**
+ * Represents an object missing in an NSArray. If the data layer currently
+ * contains:
+
+ * {
+ * myArray: [1, 2, 3]
+ * }
+
+ * and you want to update the third element to 5, while leaving other elements
+ * alone, you'd use kTAGDataLayerNotPresent as the 1st and 2nd
+ * elements (if you were to use a NSNull object,
+ * the 1st and 2nd elements would be replaced).
+ *
+ */
+extern NSObject *kTAGDataLayerObjectNotPresent;
+
+/**
+ * The data layer is a dictionary holding generic information about the
+ * application. It uses a standard set of keys so it can be read by any party
+ * that understands the specification. The data layer state is updated
+ * through its API. For example, an app might start with the following
+ * dataLayer:
+
+ * {
+ * title: "Original screen title"
+ * }
+
+ *
+ * As the state/data of an app can change, the app can update the dataLayer with a call such as:
+
Pushes happen synchronously; after the push, changes have been reflected
+ * in the model.
+ *
When an event key is pushed to the data layer, rules for tags
+ * are evaluated and any tags matching this event will fire.
+ * For example, given a container with a tag whose firing rules is that "event"
+ * is equal to "openScreen", after this push:
+
+ * that tag will fire.
+ */
+@interface TAGDataLayer : NSObject
+
+@property(readonly, nonatomic) NSDictionary *dataLayer;
+
+/**
+ * Pushes a key/value pair to the data layer. This is just a convenience
+ * method that calls push:@{key: value}.
+ */
+- (void)pushValue:(NSObject*)value forKey:(NSObject*)key;
+
+/**
+ * Merges the given update object into the existing data model,
+ * calling any listeners with the update (after the merge occurs).
+ *
+ *
It's valid for values in the dictionary (or embedded Arrays) to be
+ * of type NSNull.
+ * If you want to represent a missing value (like an empty index in a List),
+ * use the kTAGDataLayerObjectNotPresent object.
+ *
+ *
This is normally a synchronous call.
+ * However, if, while the thread is executing the push, another push happens
+ * from the same thread, then that second push is asynchronous (the second push
+ * will return before changes have been made to the data layer). This second
+ * push from the same thread can occur, for example, if a data layer push is
+ * made in response to a tag firing. However, all updates will be processed
+ * before the outermost push returns.
+ *
If the update contains the key event, rules
+ * will be evaluated and matching tags will fire.
+ *
+ * @param update The update object to process
+ */- (void)push:(NSDictionary*)update;
+
+/**
+ * Returns the object in the model associated with the given key.
+ * If key isn't present, returns nil. If
+ * key is present, but NSNull, returns
+ * NSNull.
+ *
+ *
The key can can have embedded periods. For example:
+ * a key of "a.b.c" returns the value of the "c" key in
+ * the dictionary with key "b" in the dictionary with key "a" in the model.
+ */
+- (NSObject*)get:(NSString*)key;
+
+@end
diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGLogger.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGLogger.h
new file mode 100644
index 0000000..ead415f
--- /dev/null
+++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGLogger.h
@@ -0,0 +1,84 @@
+// Copyright 2013 Google Inc. All rights reserved.
+/** @file */
+
+#import
+
+/**
+ * Log Level setting.
+ */
+typedef enum {
+ /** Log level of Verbose. */
+ kTAGLoggerLogLevelVerbose,
+
+ /** Log level of Debug. */
+ kTAGLoggerLogLevelDebug,
+
+ /** Log level of Info. */
+ kTAGLoggerLogLevelInfo,
+
+ /** Log level of Warning. */
+ kTAGLoggerLogLevelWarning,
+
+ /** Log level of Error. */
+ kTAGLoggerLogLevelError,
+
+ /** Log level of None. */
+ kTAGLoggerLogLevelNone
+} TAGLoggerLogLevelType;
+
+/**
+ * A protocol for error/warning/info/debug/verbose logging.
+ *
+ * By default, Google Tag Manager logs error/warning messages and
+ * ignores info/debug/verbose messages. You can install your own logger
+ * by setting the TAGManager::logger property.
+ */
+@protocol TAGLogger
+
+/**
+ * Logs an error message.
+ *
+ * @param message The error message to be logged.
+ */
+- (void)error:(NSString *)message;
+
+/**
+ * Logs a warning message.
+ *
+ * @param message The warning message to be logged.
+ */
+- (void)warning:(NSString *)message;
+
+/**
+ * Logs an info message.
+ *
+ * @param message The info message to be logged.
+ */
+- (void)info:(NSString *)message;
+
+/**
+ * Logs a debug message.
+ *
+ * @param message The debug message to be logged.
+ */
+- (void)debug:(NSString *)message;
+
+/**
+ * Logs a verbose message.
+ *
+ * @param message The verbose message to be logged.
+ */
+- (void)verbose:(NSString *)message;
+
+/**
+ * Sets the log level. It is up to the implementation how the log level is used,
+ * but log messages outside the log level should not be output.
+ */
+- (void)setLogLevel:(TAGLoggerLogLevelType)logLevel;
+
+/**
+ * Returns the current log level.
+ */
+- (TAGLoggerLogLevelType)logLevel;
+
+@end
diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGManager.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGManager.h
new file mode 100644
index 0000000..464d6c3
--- /dev/null
+++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGManager.h
@@ -0,0 +1,184 @@
+// Copyright 2013 Google Inc. All rights reserved.
+/** @file */
+
+#import
+#import "TAGContainer.h"
+#import "TAGLogger.h"
+
+@class TAGDataLayer;
+
+/**
+ * Mode for refreshing the container.
+ */
+typedef enum {
+ /**
+ * In this mode, containers are automatically refreshed from network every 12
+ * hours. Developers can also call TAGContainer::refresh to manually
+ * refresh containers.
+ *
+ * This is the default mode.
+ */
+ kTAGRefreshModeStandard,
+ /**
+ * In this mode, the default container is always used (the container will not load a version
+ * from network, or from disk).
+ *
+ * This mode allows developers to add new key/value pairs locally and
+ * then to use the Plist or JSON default container to test them quickly
+ * without having to add those key/value pairs to the container using
+ * the GTM UI.
+ *
+ * This mode is intended for development only and not for shipping code.
+ */
+ kTAGRefreshModeDefaultContainer,
+} TAGRefreshMode;
+
+/**
+ * A class that is the mobile implementation of Google Tag Manager (GTM).
+ *
+ * Sample usage:
+
+ *
+ * A container is a collection of macros, rules, and tags. It is created within
+ * the GTM application (http://www.google.com/tagmanager), and is assigned
+ * a container ID. This container ID is the one used within this API.
+ *
+ * The TAGContainer class provides methods for retrieving
+ * macro values given the macro name. The routines
+ * TAGContainer::booleanForKey:, TAGContainer::doubleForKey:,
+ * TAGContainer::int64ForKey:, TAGContainer::stringForKey: return the current
+ * value for the value collection macro name, depending on the rules associated with that macro
+ * in the container.
+ *
+ * As an example, if your container has a value collection macro with a key "speed" whose
+ * value is 32, and the enabling rule is Language is "en"; and another value collection macro
+ * with a key "speed" whose value is 45, and the enabling rule is Language is not "en",
+ * then making the following call:
+ *
+
+ * [container longForKey:\@"speed"]
+
+ *
+ * will return either 32 if the current language of the device is English, or
+ * 45 otherwise.
+
+ * The data layer is a map holding generic information about the application.
+ * The TAGDataLayer class provides methods to push and retrieve data from
+ * the data layer. Pushing an event key to the data layer will
+ * cause tags that match this event to fire.
+ *
+ * An initial version of the container is bundled with the application. It
+ * should be placed as a resource in the bundle with name
+ * containerId where containerId is the same container
+ * ID you will use within this API. When you call
+ * TAGManager::openContainerById:callback:, the container will be
+ * returned with those bundled rules/tags/macros. You will create the container
+ * in the UI and use the Download button to download it.
+ *
+ * You can modify the container in the UI and publish a new version. In that
+ * case, the next time the mobile app refreshes the container from the network
+ * (currently every 12 hours),
+ * it will get that new version. When you call one of the get... routines, the
+ * value will be computed using the most recent rules.
+ *
+ * The downloaded container is saved locally. When you call
+ * TAGManager::openContainerById:callback:, it will first load the default
+ * container, and will then asynchronously load any saved container. If none is
+ * found or if it is older than 12 hours, it will try to retrieve a newer version
+ * from the network. You can find the status of those asynchronous loads by
+ * passing a TAGContainerCallback to TAGManager::openContainerById:callback:.
+ *
+ * Sometimes you may want to block until either a non-default container is
+ * available, or until a recent fresh container is available. You can do that
+ * by using the callbacks in TAGManager::openContainerById:callback: or use
+ * TAGContainerOpener.
+ *
+ * When you are finished with a container, call TAGContainer::close.
+ */
+@interface TAGManager : NSObject
+
+/**
+ * The logger to use for Google Tag Manager SDK. By default, Google Tag Manager
+ * logs error/warning messages and ignores info/debug/verbose messages.
+ * You can use your own customized logger by setting this property.
+ */
+@property(nonatomic, strong) id logger;
+
+/**
+ * The refresh mode used for Google Tag Manager SDK. Setting this to
+ * @ref kTAGRefreshModeDefaultContainer allows the refresh
+ * method to use only the default container for development purposes. Default is
+ * @ref kTAGRefreshModeStandard.
+ */
+@property(nonatomic) TAGRefreshMode refreshMode;
+
+/**
+ * Call TAGDataLayer::push: method to push events and other data.
+ */
+@property(nonatomic, readonly, strong) TAGDataLayer *dataLayer;
+
+/**
+ * Returns a container.
+ * Usually the returned container will be empty, but the loading will happen
+ * asynchronously, so the returned container may be refreshed before it
+ * is returned, after it is returned, or may never be refreshed if, for example,
+ * there is no network connection during the lifetime of the container.
+ *
+ * Callback will be called as various things happen for
+ * the container. At a minimum, TAGManager::openContainerById:callback: will
+ * attempt to load a saved version of the container. If there is no saved
+ * version, or if the saved version is out of date, attempt will be made to
+ * load from the network.
+ *
+ * If TAGManager::openContainerById:callback: is called a second time for a
+ * given containerId, nil will be returned unless
+ * the previous opened container has already been closed.
+ *
+ * @param containerId The ID of the container to open.
+ * @param callback An object whose various methods will be called during the
+ * loading process. Note that the methods may be called from different
+ * threads. In addition, they may be called before
+ * TAGManager::openContainerById:callback: returns.
+ * @return The opened container.
+ */
+- (TAGContainer *)openContainerById:(NSString *)containerId
+ callback:(id )callback;
+
+/**
+ * Returns the container associated with the given containerId;
+ * returns nil if the container is not already open.
+ */
+- (TAGContainer *)getContainerById:(NSString *)containerId;
+
+/**
+ * Previews the app with the input url.
+ *
+ * The valid url must start with the following:
+
+ * tagmanager.c.\://preview/p?id=
+
+ * where <app_name> is the application name.
+ *
+ * @param url The preview url.
+ * @return YES if the url is a valid tagmanager preview url.
+ */
+- (BOOL)previewWithUrl:(NSURL *)url;
+
+/**
+ * Gets the singleton instance of the TAGManager class, creating it if
+ * necessary.
+ *
+ * @return The singleton instance of TAGManager.
+ */
++ (TAGManager *)instance;
+
+@end
diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Readme.txt b/Frameworks/Google Analytics SDK/GoogleTagManager/Readme.txt
new file mode 100644
index 0000000..d756446
--- /dev/null
+++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Readme.txt
@@ -0,0 +1,34 @@
+Google Tag Manager iOS SDK
+
+Copyright 2013 Google, Inc. All rights reserved.
+
+================================================================================
+DESCRIPTION:
+
+This SDK provides developers with the capability to use Google Tag Manager
+to do server-side rule-based customization of configuration variables.
+
+The SDK is packaged as a zip file with a directory (Examples) containing
+examples, a directory (Library) containing the headers and the static library,
+the change history (CHANGELOG) and this file (README).
+
+Details on how to use this SDK are available at:
+ http://developers.google.com/tag-manager/ios
+
+================================================================================
+BUILD REQUIREMENTS:
+
+Mac OS X 10.6 or later.
+XCode with iOS SDK 6.0 or later.
+
+================================================================================
+RUNTIME REQUIREMENTS:
+
+iOS 5.0 or later
+
+Your application must link to the following frameworks:
+ AdSupport.framework
+ CoreData.framework
+ Foundation.framework
+ SystemConfiguration.framework
+ UIKit.framework
diff --git a/Frameworks/Google Analytics SDK/Library/GAITracker.h b/Frameworks/Google Analytics SDK/Library/GAITracker.h
deleted file mode 100644
index 35a80f6..0000000
--- a/Frameworks/Google Analytics SDK/Library/GAITracker.h
+++ /dev/null
@@ -1,441 +0,0 @@
-/*!
- @header GAITracker.h
- @abstract Google Analytics iOS SDK Tracker Header
- @version 2.0
- @copyright Copyright 2011 Google Inc. All rights reserved.
-*/
-
-#import
-#import "GAITransaction.h"
-
-/*!
- Google Analytics tracking interface. Obtain instances of this interface from
- [GAI trackerWithTrackingId:] to track screens, events, transactions, timing,
- and exceptions. The implementation of this interface is thread-safe, and no
- calls are expected to block or take a long time. All network and disk activity
- will take place in the background.
- */
-@protocol GAITracker
-
-/*!
- The tracking identifier (the string that begins with "UA-") this tracker is
- associated with.
-
- This property is read-only.
- */
-@property(nonatomic, copy, readonly) NSString *trackingId;
-
-/*!
- The application name associated with this tracker. By default, this property is
- populated with the `CFBundleName` string from the application bundle. If you
- wish to override this property, you must do so before making any tracking
- calls.
- */
-@property(nonatomic, copy) NSString *appName;
-
-/*!
- The application identifier associated with this tracker. This should be set to
- the iTunes Connect application identifier assigned to your application. By
- default, this property is `nil`. If you wish to set this property, you must do
- so before making any tracking calls.
-
- Note that this is not your app's bundle id (e.g. com.example.appname), but the
- identifier used by the App Store.
- */
-@property(nonatomic, copy) NSString *appId;
-
-/*!
- The application version associated with this tracker. By default, this property
- is populated with the `CFBundleShortVersionString` string from the application
- bundle. If you wish to override this property, you must do so before making any
- tracking calls.
- */
-@property(nonatomic, copy) NSString *appVersion;
-
-/*!
- Tracking data collected while this is true will be anonymized by the Google
- Analytics servers by zeroing out some of the least significant bits of the
- IP address.
-
- In the case of IPv4 addresses, the last octet is set to zero. For
- IPv6 addresses, the last 10 octets are set to zero, although this is subject to
- change in the future.
-
- By default, this flag is false.
- */
-@property(nonatomic, assign) BOOL anonymize;
-
-/*!
- Tracking information collected while this is true will be submitted to Google
- Analytics using HTTPS connection(s); otherwise, HTTP will be used. Note that
- there may be additional overhead when sending data using HTTPS in terms of
- processing costs and/or battery consumption.
-
- By default, this flag is true.
- */
-@property(nonatomic, assign) BOOL useHttps;
-
-/*!
- The sampleRate parameter controls the probability that the visitor will be
- sampled. By default, sampleRate is 100, which signifies no sampling. sampleRate
- may be set to any value between 0 and 100, inclusive. A value of 90 means 90%
- of visitors should be sampled (10% of visitors to be sampled out).
-
- When a visitor is not sampled, no data is collected by Google Analytics for iOS
- library about that visitor's activity. If your application is subject to heavy
- traffic spikes, you may wish to adjust the sample rate to ensure uninterrupted
- report tracking. Sampling in Google Analytics occurs consistently across unique
- visitors, ensuring integrity in trending and reporting even when sampling is
- enabled, because unique visitors remain included or excluded from the sample,
- as set from the initiation of sampling.
- */
-@property(nonatomic, assign) double sampleRate;
-
-/*!
- The client ID for the tracker.
-
- This is a persistent unique identifier generated the first time the library is
- called and persisted unchanged thereafter. It is used to identify the client
- across multiple application sessions.
- */
-@property(nonatomic, copy, readonly) NSString *clientId;
-
-/*!
- The current screen set for this tracker.
-
- Calling trackView: will also update this property before it dispatches tracking
- information to Google Analytics. However, if you wish to update the current
- screen without sending any tracking information, set this property directly.
- The updated screen will be reflected in subsequent tracking information.
- */
-@property(nonatomic, copy) NSString *appScreen;
-
-/*!
- The referrer URL for this tracker. Changing this value causes it to be sent
- with the next dispatch of tracking information.
- */
-@property(nonatomic, copy) NSString *referrerUrl;
-
-/*!
- The campaign URL for this tracker. This is not directly propagated to Google
- Analytics, but if there are campaign parameter(s), either manually or
- auto-tagged, present in this URL, the SDK will include those parameters in the
- next dispatch of tracking information. Google Analytics treats tracking
- information with differing campaign information as part of separate sessions.
-
- For more information on auto-tagging, see
- http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590
-
- For more information on manual tagging, see
- http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518
- */
-@property(nonatomic, copy) NSString *campaignUrl;
-
-/*!
- If true, indicates the start of a new session. Note that when a tracker is
- first instantiated, this is initialized to true. To prevent this default
- behavior, set this to `NO` when the tracker is first obtained.
-
- By itself, setting this does not send any data. If this is true, when the next
- tracking call is made, a parameter will be added to the resulting tracking
- information indicating that it is the start of a session, and this flag will be
- cleared.
- */
-@property(nonatomic, assign) BOOL sessionStart;
-
-/*!
- If non-negative, indicates how long, in seconds, the application must
- transition to the inactive or background state for before the tracker will
- automatically indicate the start of a new session when the app becomes active
- again by setting sessionStart to true. For example, if this is set to 30
- seconds, and the user receives a phone call that lasts for 45 seconds while
- using the app, upon returning to the app, the sessionStart parameter will be
- set to true. If the phone call instead lasted 10 seconds, sessionStart will not
- be modified.
-
- To disable automatic session tracking, set this to a negative value. To
- indicate the start of a session anytime the app becomes inactive or
- backgrounded, set this to zero.
-
- By default, this is 30 seconds.
- */
-@property(nonatomic, assign) NSTimeInterval sessionTimeout;
-
-/*!
- Track that the current screen (as set in appScreen) was displayed. If appScreen
- has not been set, this will not generate any tracking information.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed or appScreen is not set).
- */
-- (BOOL)sendView;
-
-/*!
- This method is deprecated. See sendView.
- */
-- (BOOL)trackView;
-
-/*!
- Track that the specified view or screen was displayed. This call sets
- the appScreen property and generates tracking information to be sent to Google
- Analytics.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @param screen The name of the screen. Must not be `nil`.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed).
- */
-- (BOOL)sendView:(NSString *)screen;
-
-/*!
- This method is deprecated. See sendView.
- */
-- (BOOL)trackView:(NSString *)screen;
-
-/*!
- Track an event.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @param category The event category, or `nil` if none.
-
- @param action The event action, or `nil` if none.
-
- @param label The event label, or `nil` if none.
-
- @param value The event value, to be interpreted as a 64-bit signed integer, or
- `nil` if none.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed).
- */
-- (BOOL)sendEventWithCategory:(NSString *)category
- withAction:(NSString *)action
- withLabel:(NSString *)label
- withValue:(NSNumber *)value;
-
-/*!
- This method is deprecated. See sendEventWithCategory.
- */
-- (BOOL)trackEventWithCategory:(NSString *)category
- withAction:(NSString *)action
- withLabel:(NSString *)label
- withValue:(NSNumber *)value;
-
-/*!
- Track a transaction.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @param transaction The GAITransaction object.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed).
- */
-- (BOOL)sendTransaction:(GAITransaction *)transaction;
-
-/*!
- This method is deprecated. see sendTransaction.
- */
-- (BOOL)trackTransaction:(GAITransaction *)transaction;
-
-/*!
- Track an exception.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @param isFatal A boolean indicating whether the exception is fatal.
-
- @param format A format string that will be used to create the exception
- description.
-
- @param ... An optional list of arguments to be substituted using the format
- string.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed).
- */
-- (BOOL)sendException:(BOOL)isFatal
- withDescription:(NSString *)format, ...;
-
-/*!
- This method is deprecated. See sendException.
- */
-- (BOOL)trackException:(BOOL)isFatal
- withDescription:(NSString *)format, ...;
-
-/*! Convenience method for tracking an NSException that passes the exception
- name to trackException:withDescription:.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @param isFatal A boolean indicating whether the exception is fatal.
-
- @param exception The NSException exception object.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed).
- */
-- (BOOL)sendException:(BOOL)isFatal
- withNSException:(NSException *)exception;
-
-/*!
- This method is deprecated. See sendException.
- */
-- (BOOL)trackException:(BOOL)isFatal
- withNSException:(NSException *)exception;
-
-/*! Convenience method for tracking an NSError that passes the domain, code, and
- description to trackException:withDescription:.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @param isFatal A boolean indicating whether the exception is fatal.
-
- @param error The NSError error object.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed).
- */
-- (BOOL)sendException:(BOOL)isFatal
- withNSError:(NSError *)error;
-
-/*!
- This method is deprecated. See sendException.
- */
-- (BOOL)trackException:(BOOL)isFatal
- withNSError:(NSError *)error;
-
-/*!
- Track user timing.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @param category A string representing a timing category.
-
- @param time A timing value.
-
- @param name A string representing a timing name, or `nil` if none.
-
- @param label A string representing a timing variable label, or `nil` if none.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed).
- */
-- (BOOL)sendTimingWithCategory:(NSString *)category
- withValue:(NSTimeInterval)time
- withName:(NSString *)name
- withLabel:(NSString *)label;
-
-/*!
- This method is deprecated. See sendTimingWithCategory.
- */
-- (BOOL)trackTimingWithCategory:(NSString *)category
- withValue:(NSTimeInterval)time
- withName:(NSString *)name
- withLabel:(NSString *)label;
-
-/*!
- Track social action.
-
- If [GAI optOut] is true, this will not generate any tracking information.
-
- @param network A string representing social network. Must not be nil.
-
- @param action A string representing a social action. Must not be nil.
-
- @param target A string representing the target. May be nil.
-
- @return `YES` if the tracking information was queued for dispatch, or `NO` if
- there was an error (e.g. the tracker was closed).
- */
-- (BOOL)sendSocial:(NSString *)network
- withAction:(NSString *)action
- withTarget:(NSString *)target;
-
-/*!
- This method is deprecated. See sendSocial.
- */
-- (BOOL)trackSocial:(NSString *)network
- withAction:(NSString *)action
- withTarget:(NSString *)target;
-
-/*!
- Set a tracking parameter.
-
- @param parameterName The parameter name.
-
- @param value The value to set for the parameter. If this is `nil`, the
- value for the parameter will be cleared.
-
- @returns `YES` if the parameter was set to the given value, or `NO` if there
- was an error (e.g. unknown parameter).
- */
-- (BOOL)set:(NSString *)parameterName
- value:(NSString *)value;
-
-/*!
- Get a tracking parameter.
-
- @param parameterName The parameter name.
-
- @returns The parameter value, or `nil` if no value for the given parameter is
- set.
- */
-- (NSString *)get:(NSString *)parameterName;
-
-/*!
- Queue tracking information with the given parameter values.
-
- @param trackType The type of tracking information, e.g., @"appview".
-
- @param parameters A map from parameter names to parameter values which will be
- set just for this piece of tracking information.
-
- @return `YES` if the tracking information was queued for submission, or `NO`
- if an error occurred (e.g. bad track type).
- */
-- (BOOL)send:(NSString *)trackType
- params:(NSDictionary *)parameters;
-
-/*!
- Set a custom dimension value, to be sent at the next tracking call.
-
- @param index The index at which to set the dimension. Must be positive.
-
- @param dimension The dimension value, or `nil` if the dimension at the given
- index is to be cleared.
-
- @return `YES` on success, or `NO` if an error occurred.
- */
-- (BOOL)setCustom:(NSInteger)index
- dimension:(NSString *)dimension;
-
-/*!
- Set a custom metric value, to be sent at the next tracking call.
-
- @param index The index at which to set the metric. Must be positive.
-
- @param metric The metric value, which will be interpreted as a signed 64-bit
- integer, or `nil` if the metric at the given index is to be cleared.
-
- @return `YES` on success, or `NO` if an error occurred.
- */
-- (BOOL)setCustom:(NSInteger)index
- metric:(NSNumber *)metric;
-
-/*!
- Close the tracker. This will mark it as closed and remove it from the list of
- trackers accessible through [GAI trackerWithTrackingId:], thus decrementing its
- reference count (and causing it to be dealloced unless it has been retained by
- the application). Once this method has been called, it is an error to call any
- of the tracking methods, and they will not result in the generation of any
- tracking information to be submitted to Google Analytics.
- */
-- (void)close;
-
-@end
diff --git a/Frameworks/Google Analytics SDK/Library/GAITransaction.h b/Frameworks/Google Analytics SDK/Library/GAITransaction.h
deleted file mode 100644
index 9e081e3..0000000
--- a/Frameworks/Google Analytics SDK/Library/GAITransaction.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
- @header GAITransaction.h
- @abstract Google Analytics iOS SDK Transaction Header
- @version 2.0
- @copyright Copyright 2011 Google Inc. All rights reserved.
- */
-
-#import
-#import "GAITransactionItem.h"
-
-/*! A simple class to hold transaction data. */
-@interface GAITransaction : NSObject
-
-/*! Transaction ID. */
-@property(nonatomic, copy, readonly) NSString *transactionId;
-
-/*! Transaction affiliation. */
-@property(nonatomic, copy, readonly) NSString *affiliation;
-
-/*! Revenue in micros (millionths of a currency unit). Note that this must be
- set manually because it is not updated when items are added. */
-@property(nonatomic, assign) int64_t revenueMicros;
-
-/*! Tax in micros (millionths of a currency unit). Note that this must be set
- * manually because it is not updated when items are added. */
-@property(nonatomic, assign) int64_t taxMicros;
-
-/*! Shipping cost in micros (millionths of a currency unit). Note that
- this must be set manually because it is not updated when items are added. */
-@property(nonatomic, assign) int64_t shippingMicros;
-
-/*! Transaction items, as an immutable array. */
-@property(nonatomic, readonly) NSArray *items;
-
-/*!
- Create and initialize a transaction.
-
- @param transactionId The transaction ID. Required (must not be `nil`).
-
- @param affiliation The transaction affiliation. May be `nil`.
-
- @return A GAITransaction object with the specified transaction ID and
- affiliation.
- */
-+ (GAITransaction *)transactionWithId:(NSString *)transactionId
- withAffiliation:(NSString *)affiliation;
-
-/*!
- Add an item to the transaction. If an item with the same SKU already
- exists in the transaction, that item will be replaced with this one.
-
- @param item The GAITransactionItem to add to the transaction.
- */
-- (void)addItem:(GAITransactionItem *)item;
-
-/*!
- Add an item to the transaction. If an item with the same SKU already
- exists in the transaction, that item will be replaced with this one.
-
- @param productCode The item product code; must not be `nil` or empty.
-
- @param productName The item product name; may be `nil`.
-
- @param productCategory The item product category; may be `nil`.
-
- @param priceMicros The item price, in micros (millionths of a currency unit).
-
- @param quantity The item quantity, as an NSInteger.
-
- @return The newly initialized item.
- */
-- (void)addItemWithCode:(NSString *)productCode
- name:(NSString *)productName
- category:(NSString *)productCategory
- priceMicros:(int64_t)priceMicros
- quantity:(NSInteger)quantity;
-
-@end
diff --git a/Frameworks/Google Analytics SDK/Library/GAITransactionItem.h b/Frameworks/Google Analytics SDK/Library/GAITransactionItem.h
deleted file mode 100644
index e8ee3fd..0000000
--- a/Frameworks/Google Analytics SDK/Library/GAITransactionItem.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
- @header GAITransactionItem.h
- @abstract Google Analytics iOS SDK Transaction Item Header
- @version 2.0
- @copyright Copyright 2011 Google Inc. All rights reserved.
- */
-
-#import
-
-/*! A simple class to hold transaction item data. */
-@interface GAITransactionItem : NSObject
-
-/*! The item code, as a string. */
-@property(nonatomic, copy, readonly) NSString *productCode;
-
-/*! The item name. */
-@property(nonatomic, copy) NSString *productName;
-
-/*! The item variation. */
-@property(nonatomic, copy) NSString *productCategory;
-
-/*! The item price in micros (millionths of a currency unit). */
-@property(nonatomic, assign) int64_t priceMicros;
-
-/*! The item quantity. */
-@property(nonatomic, assign) NSInteger quantity;
-
-/*!
- Create and initialize an item.
-
- @param productCode The item product code; must not be `nil` or empty.
-
- @param productName The item product name; must not be `nil` or empty.
-
- @param productCategory The item product category; may be `nil`.
-
- @param priceMicros The item price, in micros (millionths of a currency unit).
-
- @param quantity The item quantity, as an NSInteger.
-
- @return The newly initialized item.
- */
-+ (GAITransactionItem *)itemWithCode:(NSString *)productCode
- name:(NSString *)productName
- category:(NSString *)productCategory
- priceMicros:(int64_t)priceMicros
- quantity:(NSInteger)quantity;
-
-@end
diff --git a/Frameworks/Google Analytics SDK/Library/libGoogleAnalytics.a b/Frameworks/Google Analytics SDK/Library/libGoogleAnalytics.a
deleted file mode 100644
index 4d3b746..0000000
Binary files a/Frameworks/Google Analytics SDK/Library/libGoogleAnalytics.a and /dev/null differ
diff --git a/Frameworks/Google Analytics SDK/Library/libGoogleAnalytics_debug.a b/Frameworks/Google Analytics SDK/Library/libGoogleAnalytics_debug.a
deleted file mode 100644
index 55fda1e..0000000
Binary files a/Frameworks/Google Analytics SDK/Library/libGoogleAnalytics_debug.a and /dev/null differ
diff --git a/Frameworks/Google Analytics SDK/ReadMe.txt b/Frameworks/Google Analytics SDK/ReadMe.txt
index 7b03fa6..7c87c05 100644
--- a/Frameworks/Google Analytics SDK/ReadMe.txt
+++ b/Frameworks/Google Analytics SDK/ReadMe.txt
@@ -1,75 +1,6 @@
-Google Analytics iOS SDK version 2.0 Beta 4
+This is a combined SDK that includes both the Google Analytics SDK
+and the Google Tag Manager SDK.
-Copyright 2009 - 2013 Google, Inc. All rights reserved.
-
-================================================================================
-DESCRIPTION:
-
-This SDK provides developers with the capability to use Google Analytics
-to track iOS application usage.
-
-The SDK is packaged as a set of header files and a static library. Get started
-by adding the header files from the Library subdirectory (GAI.h, GAITracker.h,
-GAITransaction.h, and GAITransactionItem.h) and libGoogleAnalytics.a to your
-XCode project. You must also include the CoreData framework in your project.
-
-To use a version of the library with debug symbols intact, link against
-libGoogleAnalytics_debug.a instead of libGoogleAnalytics.a. This may be useful
-if you experience exceptions or crashes originating in the SDK.
-
-See the Examples/CuteAnimals application for an illustration of how to use
-automatic screen tracking, event tracking, and uncaught exception tracking.
-
-You will need a Google Analytics tracking ID to track application usage with the
-SDK. It is recommended to create an account for each set of applications that
-are to be tracked together, and to use that account's tracking ID in each
-application. To create a new tracking ID, go to your admin panel in Google
-Analytics and select "New Account". Under "What would you like to track?",
-choose "App" and complete the remainder of the form. When you are finished,
-click "Get Tracking ID". The tracking ID will be of the form "UA-" followed by a
-sequence of numbers and dashes.
-
-You must indicate to your users, either in the app itself or in your terms of
-service, that you reserve the right to anonymously track and report a user's
-activity inside of your app.
-
-Implementation Details:
-
-Tracking information is stored in an SQLite database and dispatched to the
-Google Analytics servers in a manner set by the developer: periodically at an
-interval determined by the developer, immediately when tracking calls are made,
-or manually. A battery efficient strategy may be to initiate a dispatch when the
-application needs to access the network. Tracking information is dispatched
-using HTTP or HTTPS requests to a Google Analytics server.
-
-================================================================================
-BUILD REQUIREMENTS:
-
-Mac OS X 10.6 or later.
-XCode with iOS SDK 4.0 or later (iOS SDK 5.0 or later is required to build the
-included example application).
-
-================================================================================
-RUNTIME REQUIREMENTS:
-
-iOS 4.0 or later.
-
-Your app must link the following frameworks:
- CoreData.framework
- SystemConfiguration.framework
-
-================================================================================
-PACKAGING LIST:
-
-Library/ (contains header and library files to compile and link with)
- GAI.h
- GAITrackedViewController.h
- GAITracker.h
- GAITransaction.h
- GAITransactionItem.h
- libGoogleAnalytics.a
- libGoogleAnalytics_debug.a
-Examples/ (contains an example tracked application)
-Documentation/ (contains documentation)
-
-================================================================================
+The libGoogleAnalyticsServices.a library contains code for both.
+Within the subdirectories, you can find header files and documentation
+for each.
diff --git a/Frameworks/Google Analytics SDK/libGoogleAnalyticsServices.a b/Frameworks/Google Analytics SDK/libGoogleAnalyticsServices.a
new file mode 100644
index 0000000..7b25f1d
Binary files /dev/null and b/Frameworks/Google Analytics SDK/libGoogleAnalyticsServices.a differ
diff --git a/Frameworks/Google Conversion Tracking SDK/Changelog.txt b/Frameworks/Google Conversion Tracking SDK/Changelog.txt
deleted file mode 100644
index a369fe5..0000000
--- a/Frameworks/Google Conversion Tracking SDK/Changelog.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Version: 1.2.0
-Release Date: 4/10/2013
-Notes: Removes all references to UDID
diff --git a/Frameworks/Google Conversion Tracking SDK/GoogleConversionPing.h b/Frameworks/Google Conversion Tracking SDK/GoogleConversionPing.h
deleted file mode 100644
index f93dafe..0000000
--- a/Frameworks/Google Conversion Tracking SDK/GoogleConversionPing.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 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
-
-// This class provides a way to make easy asynchronous requests to Google for
-// conversion pings. Use the code as follows:
-// [GoogleConversionPing pingWithConversionId:@"your id here"
-// label:@"your label here"
-// value:@"your app's price here"
-// isRepeatable:YES/NO];
-// For example, to track downloads of your app, add the code to your application
-// delegate's application:didFinishLaunchingWithOptions: method.
-@interface GoogleConversionPing : NSObject
-
-// Reports a conversion to Google.
-+ (void)pingWithConversionId:(NSString *)conversionId
- label:(NSString *)label
- value:(NSString *)value
- isRepeatable:(BOOL)isRepeatable;
-
-// Returns the Google Conversion SDK version.
-+ (NSString *)sdkVersion;
-
-#pragma mark - Deprecated
-
-// UDID has been deprecated and this SDK only uses the IDFA as of version 1.2.0.
-// Setting the |idfaOnly| parameter is a no-op.
-+ (void)pingWithConversionId:(NSString *)conversionId
- label:(NSString *)label
- value:(NSString *)value
- isRepeatable:(BOOL)isRepeatable
- idfaOnly:(BOOL)idfaOnly;
-
-@end
diff --git a/Frameworks/Google Conversion Tracking SDK/libGoogleConversionTracking.a b/Frameworks/Google Conversion Tracking SDK/libGoogleConversionTracking.a
deleted file mode 100644
index 56afda0..0000000
Binary files a/Frameworks/Google Conversion Tracking SDK/libGoogleConversionTracking.a and /dev/null differ
diff --git a/Photo/AppDelegate.h b/Photo/AppDelegate.h
index 5dc1fac..150ab4b 100644
--- a/Photo/AppDelegate.h
+++ b/Photo/AppDelegate.h
@@ -35,7 +35,6 @@
#import "LoginViewController.h"
#import "AuthenticationService.h"
-#import "GAI.h"
#import
//for payment
@@ -50,8 +49,6 @@
#import "SHKConfiguration.h"
#import "FBConnect.h"
-#import "GoogleConversionPing.h"
-
@interface AppDelegate : UIResponder {
@private
diff --git a/Photo/AppDelegate.m b/Photo/AppDelegate.m
index 580f2d4..930b084 100644
--- a/Photo/AppDelegate.m
+++ b/Photo/AppDelegate.m
@@ -55,8 +55,6 @@ static const NSInteger kGANDispatchPeriodSec = 10;
[GAI sharedInstance].trackUncaughtExceptions = NO;
[GAI sharedInstance].dispatchInterval = 20;
self.tracker = [[GAI sharedInstance] trackerWithTrackingId:kPrivateGoogleAnalytics];
-
- [GoogleConversionPing pingWithConversionId:@"1000325738" label:@"QHgDCN6SygQQ6oT_3AM" value:@"0" isRepeatable:NO];
#endif
[self prepareConnectionInformation];
diff --git a/Photo/AuthenticationViewController.h b/Photo/AuthenticationViewController.h
index 123b11c..4632e75 100644
--- a/Photo/AuthenticationViewController.h
+++ b/Photo/AuthenticationViewController.h
@@ -8,9 +8,9 @@
// 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.
@@ -18,7 +18,6 @@
// limitations under the License.
#import "WebService.h"
-#import "GAI.h"
@interface AuthenticationViewController : GAITrackedViewController
@@ -26,4 +25,4 @@
@property (weak, nonatomic) IBOutlet UIImageView *backgroundServerUrl;
- (IBAction)login:(id)sender;
-@end
+@end
\ No newline at end of file
diff --git a/Photo/AuthenticationViewController.m b/Photo/AuthenticationViewController.m
index 8888ddd..1461057 100644
--- a/Photo/AuthenticationViewController.m
+++ b/Photo/AuthenticationViewController.m
@@ -50,7 +50,7 @@
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.navigationController setNavigationBarHidden:NO animated:YES];
- self.trackedViewName = @"Self-instance Login Screen";
+ self.screenName = @"Self-instance Login Screen";
}
- (void)viewDidUnload
diff --git a/Photo/ELCAssetCell.m b/Photo/ELCAssetCell.m
index e4d2210..344b893 100644
--- a/Photo/ELCAssetCell.m
+++ b/Photo/ELCAssetCell.m
@@ -124,10 +124,10 @@
asset.selected = NO;
overlayView.hidden = TRUE;
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"UI Action"
- withAction:@"buttonPress"
- withLabel:@"Sync - maximum reached"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action"
+ action:@"buttonPress"
+ label:@"Sync - maximum reached"
+ value:nil] build]];
}
// check limits
@@ -165,7 +165,7 @@
UIImageView *imageView = [_imageViewArray objectAtIndex:i];
[imageView setFrame:frame];
[self addSubview:imageView];
-
+
UIImageView *updatedView = [_uploadedViewArray objectAtIndex:i];
[updatedView setFrame:frame];
[self addSubview:updatedView];
diff --git a/Photo/HomeTableViewController.m b/Photo/HomeTableViewController.m
index c3c173d..f4ed50a 100644
--- a/Photo/HomeTableViewController.m
+++ b/Photo/HomeTableViewController.m
@@ -102,10 +102,10 @@
}
}
#ifdef GOOGLE_ANALYTICS_ENABLED
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"Screens"
- withAction:@"Loaded"
- withLabel:@"Home"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"Screens"
+ action:@"Loaded"
+ label:@"Home"
+ value:nil] build]];
#endif
// ask if user wants to enable location
@@ -509,7 +509,7 @@
#pragma mark Refresh Methods
- (void)loadingData
{
- [self loadNewestPhotosIntoCoreData];
+ [self loadNewestPhotosIntoCoreData];
}
#pragma mark -
diff --git a/Photo/LoginConnectViewController.h b/Photo/LoginConnectViewController.h
index e5a91ec..5be0309 100644
--- a/Photo/LoginConnectViewController.h
+++ b/Photo/LoginConnectViewController.h
@@ -22,8 +22,6 @@
#import "Account.h"
#import "MBProgressHUD.h"
-#import "GAI.h"
-
@interface LoginConnectViewController : GAITrackedViewController
@property (retain, nonatomic) IBOutlet UITextField *email;
diff --git a/Photo/LoginConnectViewController.m b/Photo/LoginConnectViewController.m
index 5227005..bf43b45 100644
--- a/Photo/LoginConnectViewController.m
+++ b/Photo/LoginConnectViewController.m
@@ -46,7 +46,7 @@
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.navigationController setNavigationBarHidden:NO animated:YES];
- self.trackedViewName = @"Login Screen";
+ self.screenName = @"Login Screen";
}
- (void)viewDidUnload
diff --git a/Photo/LoginCreateAccountViewController.h b/Photo/LoginCreateAccountViewController.h
index f283aa4..e1a3ebb 100644
--- a/Photo/LoginCreateAccountViewController.h
+++ b/Photo/LoginCreateAccountViewController.h
@@ -22,8 +22,6 @@
#import "Account.h"
#import "MBProgressHUD.h"
-#import "GAI.h"
-
@interface LoginCreateAccountViewController : GAITrackedViewController
@property (nonatomic, weak) IBOutlet UITextField *username;
diff --git a/Photo/LoginCreateAccountViewController.m b/Photo/LoginCreateAccountViewController.m
index 6254b9f..b828ad9 100644
--- a/Photo/LoginCreateAccountViewController.m
+++ b/Photo/LoginCreateAccountViewController.m
@@ -57,7 +57,7 @@
{
[super viewDidLoad];
[self.navigationController setNavigationBarHidden:NO animated:YES];
- self.trackedViewName = @"Create Account Screen";
+ self.screenName = @"Create Account Screen";
self.createAccountLabel.hidden = NO;
}
@@ -155,7 +155,7 @@
// direction should be -1 for go up or +1 to go down.
-(void) moveFieldsUpOrDown:(int) direction
{
-
+
if (direction != -1 && direction != +1){
// we don't allow others values
return;
diff --git a/Photo/LoginViewController.h b/Photo/LoginViewController.h
index baf0f1a..4db14fe 100644
--- a/Photo/LoginViewController.h
+++ b/Photo/LoginViewController.h
@@ -24,8 +24,6 @@
#import "Account.h"
#import "MBProgressHUD.h"
-#import "GAI.h"
-
@interface LoginViewController : GAITrackedViewController
- (IBAction)signUpWithEmail:(id)sender;
diff --git a/Photo/LoginViewController.m b/Photo/LoginViewController.m
index 6964bef..a4674aa 100644
--- a/Photo/LoginViewController.m
+++ b/Photo/LoginViewController.m
@@ -44,7 +44,7 @@
-(void) viewDidLoad{
[super viewDidLoad];
[self.navigationController setNavigationBarHidden:YES animated:YES];
- self.trackedViewName = @"Login Screen";
+ self.screenName = @"Login Screen";
[self setNeedsStatusBarAppearanceUpdate];
}
diff --git a/Photo/NewestPhotoCell.m b/Photo/NewestPhotoCell.m
index 86e04e3..9b04343 100644
--- a/Photo/NewestPhotoCell.m
+++ b/Photo/NewestPhotoCell.m
@@ -82,15 +82,16 @@
// check if photo is a private version. If it is, generate a token
if ([self.timeline.permission boolValue] == NO){
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"UI Action"
- withAction:@"buttonPress"
- withLabel:@"Share private photo"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action"
+ action:@"buttonPress"
+ label:@"Share private photo"
+ value:nil] build]];
}else{
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"UI Action"
- withAction:@"buttonPress"
- withLabel:@"Share public photo"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action"
+ action:@"buttonPress"
+ label:@"Share public photo"
+ value:nil] build]];
+
}
// create a dispatch to generate a token
diff --git a/Photo/PhotoViewController.h b/Photo/PhotoViewController.h
index ebe1c16..e15c692 100644
--- a/Photo/PhotoViewController.h
+++ b/Photo/PhotoViewController.h
@@ -22,8 +22,6 @@
#import "Synced+Methods.h"
#import "Timeline+Methods.h"
-#import "GAI.h"
-
#import "PhotoUploader.h"
@interface PhotoViewController : GAITrackedViewController
diff --git a/Photo/PhotoViewController.m b/Photo/PhotoViewController.m
index 9e76f68..6ad368e 100644
--- a/Photo/PhotoViewController.m
+++ b/Photo/PhotoViewController.m
@@ -90,7 +90,7 @@
#pragma mark - View lifecycle
- (void)viewDidLoad{
[super viewDidLoad];
- self.trackedViewName = @"Upload Screen";
+ self.screenName = @"Upload Screen";
[self.navigationItem troveboxStyle:NSLocalizedString(@"Upload", @"Title in the upload form") defaultButtons:NO viewController:nil menuViewController:nil];
@@ -137,10 +137,10 @@
- (void) cancelUploadButton{
[self dismissViewControllerAnimated:YES completion:^{
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"UI Action"
- withAction:@"buttonPress"
- withLabel:@"Cancel Upload"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action"
+ action:@"buttonPress"
+ label:@"Cancel Upload"
+ value:nil] build]];
}];
}
@@ -394,10 +394,11 @@
}
- (void)upload:(id)sender {
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"UI Action"
- withAction:@"buttonPress"
- withLabel:@"Upload"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action"
+ action:@"buttonPress"
+ label:@"Upload"
+ value:nil] build]];
+
#ifdef DEVELOPMENT_ENABLED
NSLog(@"Upload button clicked. Save all details in the database");
@@ -430,14 +431,14 @@
for ( NSURL *url in self.images){
if ( i != 1 ){
[self.uploader loadDataAndSaveEntityUploadDate:[NSDate date]
- shareFacebook:[NSNumber numberWithBool:NO]
- shareTwitter:[NSNumber numberWithBool:NO]
- permission:permission
- tags:tags
- albums:albums
- title:title
- url:url
- groupUrl:nil];
+ shareFacebook:[NSNumber numberWithBool:NO]
+ shareTwitter:[NSNumber numberWithBool:NO]
+ permission:permission
+ tags:tags
+ albums:albums
+ title:title
+ url:url
+ groupUrl:nil];
}else{
@@ -449,14 +450,14 @@
NSString *urlString = [NSString stringWithFormat: @"%@/photos/list?sortBy=dateUploaded,DESC&pageSize=%i", [standardUserDefaults valueForKey:kTroveboxServer], [self.images count]];
[self.uploader loadDataAndSaveEntityUploadDate:[NSDate date]
- shareFacebook:facebook
- shareTwitter:twitter
- permission:permission
- tags:tags
- albums:albums
- title:title
- url:url
- groupUrl:urlString];
+ shareFacebook:facebook
+ shareTwitter:twitter
+ permission:permission
+ tags:tags
+ albums:albums
+ title:title
+ url:url
+ groupUrl:urlString];
}
// decrease until the first one
@@ -465,27 +466,27 @@
}else{
// just one photo to share
[self.uploader loadDataAndSaveEntityUploadDate:[NSDate date]
- shareFacebook:facebook
- shareTwitter:twitter
- permission:permission
- tags:tags
- albums:albums
- title:title
- url:self.image
- groupUrl:nil];
+ shareFacebook:facebook
+ shareTwitter:twitter
+ permission:permission
+ tags:tags
+ albums:albums
+ title:title
+ url:self.image
+ groupUrl:nil];
}
// checkpoint
if (self.images){
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"Upload"
- withAction:@"typeImage"
- withLabel:@"Image from Sync"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"Upload"
+ action:@"typeImage"
+ label:@"Image from Sync"
+ value:nil] build]];
}else{
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"Upload"
- withAction:@"typeImage"
- withLabel:@"Image from Snapshot"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"Upload"
+ action:@"typeImage"
+ label:@"Image from Snapshot"
+ value:nil] build]];
}
// wait for 2 seconds to go to main screen
@@ -520,7 +521,7 @@
}
});
}
- });
+ });
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
hud.labelText = @"Preparing";
diff --git a/Photo/ProfileViewController.h b/Photo/ProfileViewController.h
index 83bf851..819a3d3 100644
--- a/Photo/ProfileViewController.h
+++ b/Photo/ProfileViewController.h
@@ -31,8 +31,6 @@
#import "Timeline+Methods.h"
#import
-#import "GAI.h"
-
#import
#import "WebViewController.h"
diff --git a/Photo/ProfileViewController.m b/Photo/ProfileViewController.m
index 1e00dba..9c7adff 100644
--- a/Photo/ProfileViewController.m
+++ b/Photo/ProfileViewController.m
@@ -58,7 +58,7 @@
{
[super viewDidLoad];
self.title=NSLocalizedString(@"Profile",@"Title screen Profile");
- self.trackedViewName = @"Profile Screen";
+ self.screenName = @"Profile Screen";
}
- (void)didReceiveMemoryWarning
diff --git a/Photo/SyncViewController.h b/Photo/SyncViewController.h
index 782fbd8..29f8e83 100644
--- a/Photo/SyncViewController.h
+++ b/Photo/SyncViewController.h
@@ -28,8 +28,6 @@
#import "ELCImagePickerController.h"
#import "PhotoViewController.h"
-#import "GAI.h"
-
@interface SyncViewController : GAITrackedViewController
{
ALAssetsGroup *assetGroup;
diff --git a/Photo/SyncViewController.m b/Photo/SyncViewController.m
index 59489d1..febef7f 100644
--- a/Photo/SyncViewController.m
+++ b/Photo/SyncViewController.m
@@ -35,7 +35,7 @@
{
[super viewDidLoad];
[self.tableView setAllowsSelection:NO];
- self.trackedViewName = @"Sync Screen";
+ self.screenName = @"Sync Screen";
[self.navigationController.navigationBar troveboxStyle:NO];
@@ -60,8 +60,16 @@
[button addTarget:self action:@selector(doneAction:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
+ customBarItem.title = @"Next";
self.navigationItem.rightBarButtonItem = customBarItem;
+
+ // UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
+ // temporaryBarButtonItem.title = @"Back";
+ // self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
+
+
+
// no separator
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
@@ -164,12 +172,11 @@
}
}
- [self.parent selectedAssets:selectedAssetsImages];
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"UI Action"
- withAction:@"buttonPress"
- withLabel:@"Sync - next pressed"
- withValue:nil];
-
+ [self.parent selectedAssets:selectedAssetsImages];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action"
+ action:@"buttonPress"
+ label:@"Sync - next pressed"
+ value:nil] build]];
}@catch (NSException *exception) {
PhotoAlertView *alert = [[PhotoAlertView alloc] initWithMessage:@"Error to select your photos" duration:3000];
[alert showAlert];
@@ -434,19 +441,17 @@
if (buttonIndex == 1){
// Yes
[standardUserDefaults setBool:YES forKey:kAutoSyncEnabled];
-
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"UI Action"
- withAction:@"buttonPress"
- withLabel:@"Auto Sync - select YES"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action"
+ action:@"buttonPress"
+ label:@"Auto Sync - select YES"
+ value:nil] build]];
}else{
// No
[standardUserDefaults setBool:NO forKey:kAutoSyncEnabled];
-
- [[[GAI sharedInstance] defaultTracker] sendEventWithCategory:@"UI Action"
- withAction:@"buttonPress"
- withLabel:@"Auto Sync - select NO"
- withValue:nil];
+ [[[GAI sharedInstance] defaultTracker] send:[[GAIDictionaryBuilder createEventWithCategory:@"UI Action"
+ action:@"buttonPress"
+ label:@"Auto Sync - select NO"
+ value:nil] build]];
}
// set any value in the variable that we showed the message
diff --git a/Photo/Trovebox-Info.plist b/Photo/Trovebox-Info.plist
index 5497fd0..95b9952 100644
--- a/Photo/Trovebox-Info.plist
+++ b/Photo/Trovebox-Info.plist
@@ -3,7 +3,7 @@
CFBuildDate
- 2013-10-08T00:07:37Z
+ 2013-10-09T18:12:39ZCFBundleDevelopmentRegionenCFBundleDisplayName
@@ -23,7 +23,7 @@
CFBundlePackageTypeAPPLCFBundleShortVersionString
- 13.3
+ 13.5CFBundleSignature????CFBundleURLTypes
@@ -39,7 +39,7 @@
CFBundleVersion
- 152
+ 154LSRequiresIPhoneOSUIPrerenderedIcon
diff --git a/Photo/Trovebox-Prefix.pch b/Photo/Trovebox-Prefix.pch
index dd37852..e920217 100644
--- a/Photo/Trovebox-Prefix.pch
+++ b/Photo/Trovebox-Prefix.pch
@@ -9,17 +9,20 @@
#endif
#ifdef __OBJC__
- #import
- #import
- #import
- #import
- #import "AppDelegate.h"
- #import "Constants.h"
- #import "PrivateConstants.h"
- #import "PhotoAlertView.h"
- #import "DisplayUtilities.h"
- #import "UINavigationBar+Trovebox.h"
- #import "UINavigationItem+Trovebox.h"
+#import
+#import
+#import
+#import
+#import "GAI.h"
+#import "GAIDictionaryBuilder.h"
+#import "AppDelegate.h"
+#import "Constants.h"
+#import "PrivateConstants.h"
+#import "PhotoAlertView.h"
+#import "DisplayUtilities.h"
+#import "UINavigationBar+Trovebox.h"
+#import "UINavigationItem+Trovebox.h"
+
#define SharedAppDelegate ((AppDelegate*)[[UIApplication sharedApplication] delegate])
diff --git a/Photo/TroveboxPaymentTransactionObserver.h b/Photo/TroveboxPaymentTransactionObserver.h
index b8fdb9c..525f325 100644
--- a/Photo/TroveboxPaymentTransactionObserver.h
+++ b/Photo/TroveboxPaymentTransactionObserver.h
@@ -21,8 +21,6 @@
//for payment
#import
#import "AuthenticationService.h"
-#import "GAI.h"
-#import "GAITransaction.h"
#define kInAppPurchaseManagerTransactionFailedNotification @"kInAppPurchaseManagerTransactionFailedNotification"
#define kInAppPurchaseManagerTransactionSucceededNotification @"kInAppPurchaseManagerTransactionSucceededNotification"
diff --git a/Photo/TroveboxPaymentTransactionObserver.m b/Photo/TroveboxPaymentTransactionObserver.m
index 78222b8..17dca3f 100644
--- a/Photo/TroveboxPaymentTransactionObserver.m
+++ b/Photo/TroveboxPaymentTransactionObserver.m
@@ -55,21 +55,6 @@
@try{
[AuthenticationService sendToServerReceipt:transaction.transactionReceipt forUser:[SharedAppDelegate userEmail]];
-
-
- // (NSString) Transaction ID, should be unique.
- GAITransaction *gAITransaction = [GAITransaction transactionWithId:transaction.transactionIdentifier withAffiliation:@"In-App Store"];
- //gAITransaction.taxMicros = (int64_t)(0.17 * 1000000); // (int64_t) Total tax (in micros)
- //gAITransaction.shippingMicros = (int64_t)(0); // (int64_t) Total shipping (in micros)
- //gAITransaction.revenueMicros = (int64_t)(2.16 * 1000000); // (int64_t) Total revenue (in micros)
-
- [gAITransaction addItemWithCode:@"openphoto" // (NSString) Product SKU
- name:@"Pro Upgrade" // (NSString) Product name
- category:@"Subscrption" // (NSString) Product category
- priceMicros:(int64_t)(2.99 * 1000000) // (int64_t) Product price (in micros)
- quantity:1]; // (NSInteger) Product quantity
-
- [[GAI sharedInstance].defaultTracker sendTransaction:gAITransaction]; // Send the transaction.
}@catch (NSException* exception) {
NSLog(@"Error sending receipt to server %@", [exception description]);
}
diff --git a/Trovebox.xcodeproj/project.pbxproj b/Trovebox.xcodeproj/project.pbxproj
index 3c987cd..b784cec 100644
--- a/Trovebox.xcodeproj/project.pbxproj
+++ b/Trovebox.xcodeproj/project.pbxproj
@@ -118,7 +118,6 @@
CD1D827516E9413A00877A8E /* MenuTableViewSearchCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD1D827416E9413900877A8E /* MenuTableViewSearchCell.xib */; };
CD206936163B232C00F92F8A /* LoginCreateAccountViewController5.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD206934163B232C00F92F8A /* LoginCreateAccountViewController5.xib */; };
CD25838F17F4C24900A62574 /* UploadStatusTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD25838E17F4C24900A62574 /* UploadStatusTableViewController.m */; };
- CD2FE8E3163983910032105A /* libGoogleAnalytics.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD2FE8E2163983910032105A /* libGoogleAnalytics.a */; };
CD30D57016303E54001A0CA0 /* ELCAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D56216303E54001A0CA0 /* ELCAsset.m */; };
CD30D57116303E54001A0CA0 /* ELCAssetCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CD30D56416303E54001A0CA0 /* ELCAssetCell.m */; };
CD30D57216303E54001A0CA0 /* ELCAssetPicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD30D56516303E54001A0CA0 /* ELCAssetPicker.xib */; };
@@ -152,6 +151,7 @@
CD31DED917143FFA0071D3E1 /* menu-tags-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DECB17143FFA0071D3E1 /* menu-tags-selected@2x.png */; };
CD31DEDA17143FFA0071D3E1 /* menu-upload-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DECC17143FFA0071D3E1 /* menu-upload-selected.png */; };
CD31DEDB17143FFA0071D3E1 /* menu-upload-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD31DECD17143FFA0071D3E1 /* menu-upload-selected@2x.png */; };
+ CD44F034180C82B30019B307 /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD44F002180C77560019B307 /* libGoogleAnalyticsServices.a */; };
CD47755A17600DD7001AF36E /* button-more.png in Resources */ = {isa = PBXBuildFile; fileRef = CD47755817600DD7001AF36E /* button-more.png */; };
CD47755B17600DD7001AF36E /* button-more@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CD47755917600DD7001AF36E /* button-more@2x.png */; };
CD4B593F1733CD730023C199 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = CD4B593C1733CD730023C199 /* Icon-72.png */; };
@@ -393,7 +393,6 @@
CDDFDA51172973E100D992DC /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA50172973E100D992DC /* Default-Landscape~ipad.png */; };
CDDFDA53172973E500D992DC /* Default-Landscape@2x~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA52172973E500D992DC /* Default-Landscape@2x~ipad.png */; };
CDDFDA551729741000D992DC /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CDDFDA541729740F00D992DC /* Default-568h@2x.png */; };
- CDDFDA5917297C7800D992DC /* libGoogleConversionTracking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CDDFDA5817297C7800D992DC /* libGoogleConversionTracking.a */; };
CDE4A0E517642CC8002604CC /* PhotoUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE4A0E417642CC8002604CC /* PhotoUploader.m */; };
CDF2C4DD17EB641C006C78A9 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CDF2C4DC17EB641C006C78A9 /* Images.xcassets */; };
CDF2F06E16E4D87A00D309B9 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDF2F06D16E4D87A00D309B9 /* MapKit.framework */; };
@@ -929,7 +928,6 @@
CD25838E17F4C24900A62574 /* UploadStatusTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UploadStatusTableViewController.m; sourceTree = ""; };
CD2583E317FCB3B000A62574 /* ELCAssetSelectionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetSelectionDelegate.h; sourceTree = ""; };
CD2F159216E600DC004D22FD /* ShareKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ShareKit.xcodeproj; path = Frameworks/ShareKit/ShareKit.xcodeproj; sourceTree = ""; };
- CD2FE8E2163983910032105A /* libGoogleAnalytics.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalytics.a; path = "Frameworks/Google Analytics SDK/Library/libGoogleAnalytics.a"; sourceTree = ""; };
CD30D56116303E54001A0CA0 /* ELCAsset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAsset.h; sourceTree = ""; };
CD30D56216303E54001A0CA0 /* ELCAsset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAsset.m; sourceTree = ""; };
CD30D56316303E54001A0CA0 /* ELCAssetCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetCell.h; sourceTree = ""; };
@@ -972,6 +970,13 @@
CD31DECB17143FFA0071D3E1 /* menu-tags-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-tags-selected@2x.png"; path = "images/menu-tags-selected@2x.png"; sourceTree = ""; };
CD31DECC17143FFA0071D3E1 /* menu-upload-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-upload-selected.png"; path = "images/menu-upload-selected.png"; sourceTree = ""; };
CD31DECD17143FFA0071D3E1 /* menu-upload-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menu-upload-selected@2x.png"; path = "images/menu-upload-selected@2x.png"; sourceTree = ""; };
+ CD44F002180C77560019B307 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = "Frameworks/Google Analytics SDK/libGoogleAnalyticsServices.a"; sourceTree = ""; };
+ CD44F004180C77790019B307 /* GAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAI.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAI.h"; sourceTree = ""; };
+ CD44F005180C77790019B307 /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAIDictionaryBuilder.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIDictionaryBuilder.h"; sourceTree = ""; };
+ CD44F006180C77790019B307 /* GAIFields.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAIFields.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIFields.h"; sourceTree = ""; };
+ CD44F007180C77790019B307 /* GAILogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAILogger.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAILogger.h"; sourceTree = ""; };
+ CD44F008180C77790019B307 /* GAITrackedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITrackedViewController.h"; sourceTree = ""; };
+ CD44F009180C77790019B307 /* GAITracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = "Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITracker.h"; sourceTree = ""; };
CD47755817600DD7001AF36E /* button-more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-more.png"; path = "images/button-more.png"; sourceTree = ""; };
CD47755917600DD7001AF36E /* button-more@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "button-more@2x.png"; path = "images/button-more@2x.png"; sourceTree = ""; };
CD4B593C1733CD730023C199 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "images/Icon-72.png"; sourceTree = ""; };
@@ -1211,11 +1216,6 @@
CDCC0BE716E0C66400BE4481 /* TransformationUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TransformationUtilities.m; sourceTree = ""; };
CDCC0BE816E0C66400BE4481 /* UpdateUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UpdateUtilities.h; sourceTree = ""; };
CDCC0BE916E0C66400BE4481 /* UpdateUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UpdateUtilities.m; sourceTree = ""; };
- CDCC0C0A16E0C73000BE4481 /* GAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAI.h; path = "Frameworks/Google Analytics SDK/Library/GAI.h"; sourceTree = ""; };
- CDCC0C0B16E0C73000BE4481 /* GAITrackedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = "Frameworks/Google Analytics SDK/Library/GAITrackedViewController.h"; sourceTree = ""; };
- CDCC0C0C16E0C73000BE4481 /* GAITracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = "Frameworks/Google Analytics SDK/Library/GAITracker.h"; sourceTree = ""; };
- CDCC0C0D16E0C73000BE4481 /* GAITransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITransaction.h; path = "Frameworks/Google Analytics SDK/Library/GAITransaction.h"; sourceTree = ""; };
- CDCC0C0E16E0C73000BE4481 /* GAITransactionItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITransactionItem.h; path = "Frameworks/Google Analytics SDK/Library/GAITransactionItem.h"; sourceTree = ""; };
CDCC0CB616E1021700BE4481 /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKAppSettingsViewController.h; path = Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.h; sourceTree = ""; };
CDCC0CB716E1021700BE4481 /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IASKAppSettingsViewController.m; path = Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m; sourceTree = ""; };
CDCC0CB816E1021700BE4481 /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IASKAppSettingsWebViewController.h; path = Frameworks/InAppSettingsKit/Controllers/IASKAppSettingsWebViewController.h; sourceTree = ""; };
@@ -1280,8 +1280,6 @@
CDDFDA50172973E100D992DC /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "../Default-Landscape~ipad.png"; sourceTree = ""; };
CDDFDA52172973E500D992DC /* Default-Landscape@2x~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape@2x~ipad.png"; path = "../Default-Landscape@2x~ipad.png"; sourceTree = ""; };
CDDFDA541729740F00D992DC /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "../Default-568h@2x.png"; sourceTree = ""; };
- CDDFDA5717297C7800D992DC /* GoogleConversionPing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GoogleConversionPing.h; path = "Frameworks/Google Conversion Tracking SDK/GoogleConversionPing.h"; sourceTree = ""; };
- CDDFDA5817297C7800D992DC /* libGoogleConversionTracking.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleConversionTracking.a; path = "Frameworks/Google Conversion Tracking SDK/libGoogleConversionTracking.a"; sourceTree = ""; };
CDE4A0E317642CC8002604CC /* PhotoUploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoUploader.h; sourceTree = ""; };
CDE4A0E417642CC8002604CC /* PhotoUploader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoUploader.m; sourceTree = ""; };
CDF2C4DC17EB641C006C78A9 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Trovebox/Images.xcassets; sourceTree = SOURCE_ROOT; };
@@ -1354,9 +1352,8 @@
CDAFB9D916122262002D6E86 /* CoreData.framework in Frameworks */,
CDF2F10716E52EC000D309B9 /* libSDWebImage.a in Frameworks */,
CDD935BF17F3A55D002CE92D /* libsbjson-ios.a in Frameworks */,
- CD2FE8E3163983910032105A /* libGoogleAnalytics.a in Frameworks */,
CDBD38D416F868F1007D0CC6 /* Crashlytics.framework in Frameworks */,
- CDDFDA5917297C7800D992DC /* libGoogleConversionTracking.a in Frameworks */,
+ CD44F034180C82B30019B307 /* libGoogleAnalyticsServices.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1579,12 +1576,13 @@
CD2FE8E01639837D0032105A /* Google Analytics SDK */ = {
isa = PBXGroup;
children = (
- CDCC0C0A16E0C73000BE4481 /* GAI.h */,
- CDCC0C0B16E0C73000BE4481 /* GAITrackedViewController.h */,
- CDCC0C0C16E0C73000BE4481 /* GAITracker.h */,
- CDCC0C0D16E0C73000BE4481 /* GAITransaction.h */,
- CDCC0C0E16E0C73000BE4481 /* GAITransactionItem.h */,
- CD2FE8E2163983910032105A /* libGoogleAnalytics.a */,
+ CD44F004180C77790019B307 /* GAI.h */,
+ CD44F005180C77790019B307 /* GAIDictionaryBuilder.h */,
+ CD44F006180C77790019B307 /* GAIFields.h */,
+ CD44F007180C77790019B307 /* GAILogger.h */,
+ CD44F008180C77790019B307 /* GAITrackedViewController.h */,
+ CD44F009180C77790019B307 /* GAITracker.h */,
+ CD44F002180C77560019B307 /* libGoogleAnalyticsServices.a */,
);
name = "Google Analytics SDK";
sourceTree = "";
@@ -2091,7 +2089,6 @@
CD2F159116E600C8004D22FD /* ShareKit */,
CDF2F07C16E520AB00D309B9 /* SBJson */,
CDCC0C6516E0FD6300BE4481 /* InAppSettingsKit */,
- CDDFDA5617297C3400D992DC /* Google Conversion Tracking SDK */,
CD2FE8E01639837D0032105A /* Google Analytics SDK */,
CD1CDE3D162C2B4B00E57F73 /* SDWebImage */,
CD8D9CC1162344A700A76811 /* MBProgressHUD */,
@@ -2209,15 +2206,6 @@
name = InAppSettingsKit;
sourceTree = "";
};
- CDDFDA5617297C3400D992DC /* Google Conversion Tracking SDK */ = {
- isa = PBXGroup;
- children = (
- CDDFDA5717297C7800D992DC /* GoogleConversionPing.h */,
- CDDFDA5817297C7800D992DC /* libGoogleConversionTracking.a */,
- );
- name = "Google Conversion Tracking SDK";
- sourceTree = "";
- };
CDE0B11E1622DB1A00CB4FBC /* Tag */ = {
isa = PBXGroup;
children = (
@@ -2296,7 +2284,7 @@
CDAFB9C516122262002D6E86 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0450;
+ LastUpgradeCheck = 0500;
ORGANIZATIONNAME = Trovebox;
TargetAttributes = {
CDAFB9CD16122262002D6E86 = {
@@ -3149,6 +3137,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
@@ -3196,11 +3185,11 @@
"\"$(OBJROOT)/UninstalledProducts/include\"",
);
INFOPLIST_FILE = "Photo/Trovebox-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 7.0;
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
- "\"$(SRCROOT)/Frameworks/Google Analytics SDK/Library\"",
- "\"$(SRCROOT)/Frameworks/Google Conversion Tracking SDK\"",
+ "/Users/patrick/Projects/mobile-ios/Frameworks/Google\\ Conversion\\ Tracking\\ SDK",
+ "/Users/patrick/Projects/mobile-ios/Frameworks/Google\\ Analytics\\ SDK",
);
OTHER_LDFLAGS = (
"-all_load",
@@ -3234,11 +3223,11 @@
"\"$(OBJROOT)/UninstalledProducts/include\"",
);
INFOPLIST_FILE = "Photo/Trovebox-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 7.0;
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
- "\"$(SRCROOT)/Frameworks/Google Analytics SDK/Library\"",
- "\"$(SRCROOT)/Frameworks/Google Conversion Tracking SDK\"",
+ "/Users/patrick/Projects/mobile-ios/Frameworks/Google\\ Conversion\\ Tracking\\ SDK",
+ "/Users/patrick/Projects/mobile-ios/Frameworks/Google\\ Analytics\\ SDK",
);
OTHER_LDFLAGS = (
"-all_load",