diff --git a/Frameworks/DLCImagePickerController b/Frameworks/DLCImagePickerController index 2d44626..525240f 160000 --- a/Frameworks/DLCImagePickerController +++ b/Frameworks/DLCImagePickerController @@ -1 +1 @@ -Subproject commit 2d446269d8a8095a6a509e2ddd6d20ce7256001e +Subproject commit 525240f6ed44b79e1d7ae8cd473ac6523aca9630 diff --git a/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAI.html b/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAI.html deleted file mode 100644 index 75ae322..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAI.html +++ /dev/null @@ -1,762 +0,0 @@ - - - - - GAI Class Reference - - - - - - - -
-
-

Google Analytics SDK for iOS

- Google Inc -
- - - -
- -
-
- - - -
- -
- - - - - - - -
Inherits fromNSObject
Declared inGAI.h
- - - - -
- -

Overview

-

Google Analytics iOS top-level class. Provides facilities to create trackers -and set behaviorial flags.

-
- - - - - -
- -

Tasks

- - - - - -
    -
  • - -   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.

    -
    - property - -
  • - -   debug -

    If true, Google Analytics debug messages will be logged with NSLog(). This is -useful for debugging calls to the Google Analytics SDK.

    -
    - property - -
  • - -   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 - -
  • - -   dispatchInterval -

    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.

    -
    - property - -
  • - -   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.

    -
    - property - -
  • - - + sharedInstance -

    Get the shared instance of the Google Analytics for iOS class.

    -
    - - -
  • - - – 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.

    -
    - - -
  • - - – dispatch -

    Dispatches any pending tracking information.

    -
    - - -
  • -
- -
- - - - - -
- -

Properties

- -
- -

debug

- - - -
-

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.

-
- - - -
@property (nonatomic, assign) id<GAITracker> defaultTracker
- - - - - - - - - -
-

Discussion

-

The GAITrackedViewController class will, by default, use this tracker instance.

-
- - - - - - - -
-

Declared In

- GAI.h
-
- - -
- -
- -

dispatchInterval

- - - -
-

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.

-
- - - -
@property (nonatomic, assign) NSTimeInterval dispatchInterval
- - - - - - - - - -
-

Discussion

-

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.

-
- - - -
@property (nonatomic, assign) BOOL trackUncaughtExceptions
- - - - - - - - - - - - - - - -
-

Declared In

- GAI.h
-
- - -
- -
- - - -
- -

Class Methods

- -
- -

sharedInstance

- - - -
-

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.

-
- - - -
- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId
- - - -
-

Parameters

- -
-
trackingId
-

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.

-
- - - - - - - - - - - -
-

Declared In

- GAI.h
-
- - -
- -
- - -
- - -
-
- - - \ No newline at end of file diff --git a/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITrackedViewController.html b/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITrackedViewController.html deleted file mode 100644 index 8e06d82..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITrackedViewController.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - GAITrackedViewController Class Reference - - - - - - - -
-
-

Google Analytics SDK for iOS

- Google Inc -
- - - -
- -
-
- - - -
- -
- - - - - - - -
Inherits fromUIViewController
Declared inGAITrackedViewController.h
- - - - -
- -

Overview

-

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.

-
- - - - - -
- -

Tasks

- - - - - -
    -
  • - -   tracker -

    The tracker on which view tracking calls are be made, or nil, in which case -[GAI defaultTracker] will be used.

    -
    - property - -
  • - -   trackedViewName -

    The view name, for purposes of Google Analytics view tracking. If this is -nil, no tracking calls will be made.

    -
    - property - -
  • -
- -
- - - - - -
- -

Properties

- -
- -

trackedViewName

- - - -
-

The view name, for purposes of Google Analytics view tracking. If this is -nil, no tracking calls will be made.

-
- - - -
@property (nonatomic, copy) NSString *trackedViewName
- - - - - - - - - - - - - - - -
-

Declared In

- GAITrackedViewController.h
-
- - -
- -
- -

tracker

- - - -
-

The tracker on which view tracking calls are be made, or nil, in which case -[GAI defaultTracker] will be used.

-
- - - -
@property (nonatomic, assign) id<GAITracker> tracker
- - - - - - - - - - - - - - - -
-

Declared In

- GAITrackedViewController.h
-
- - -
- -
- - - - - - -
- - -
-
- - - \ No newline at end of file diff --git a/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITransaction.html b/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITransaction.html deleted file mode 100644 index 4ec44d2..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITransaction.html +++ /dev/null @@ -1,783 +0,0 @@ - - - - - GAITransaction Class Reference - - - - - - - -
-
-

Google Analytics SDK for iOS

- Google Inc -
- - - -
- -
-
- - - -
- -
- - - - - - - -
Inherits fromNSObject
Declared inGAITransaction.h
- - - - -
- -

Overview

-

A simple class to hold transaction data.

-
- - - - - -
- -

Tasks

- - - - - -
    -
  • - -   transactionId -

    Transaction ID.

    -
    - property - -
  • - -   affiliation -

    Transaction affiliation.

    -
    - property - -
  • - -   revenueMicros -

    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 - -
  • - -   taxMicros -

    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 - -
  • - -   shippingMicros -

    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 - -
  • - -   items -

    Transaction items, as an immutable array.

    -
    - property - -
  • - - + transactionWithId:withAffiliation: -

    Create and initialize a transaction.

    -
    - - -
  • - - – addItem: -

    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.

    -
    - - -
  • - - – addItemWithCode:name:category:priceMicros:quantity: -

    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.

    -
    - - -
  • -
- -
- - - - - -
- -

Properties

- -
- -

affiliation

- - - -
-

Transaction affiliation.

-
- - - -
@property (nonatomic, copy, readonly) NSString *affiliation
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- -

items

- - - -
-

Transaction items, as an immutable array.

-
- - - -
@property (nonatomic, readonly) NSArray *items
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- -

revenueMicros

- - - -
-

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
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- -

shippingMicros

- - - -
-

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
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- -

taxMicros

- - - -
-

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
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- -

transactionId

- - - -
-

Transaction ID.

-
- - - -
@property (nonatomic, copy, readonly) NSString *transactionId
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- - - -
- -

Class Methods

- -
- -

transactionWithId:withAffiliation:

- - - -
-

Create and initialize a transaction.

-
- - - -
+ (GAITransaction *)transactionWithId:(NSString *)transactionId withAffiliation:(NSString *)affiliation
- - - -
-

Parameters

- -
-
transactionId
-

The transaction ID. Required (must not be nil).

-
- -
-
affiliation
-

The transaction affiliation. May be nil.

-
- -
- - - -
-

Return Value

-

A GAITransaction object with the specified transaction ID and -affiliation.

-
- - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- - - -
- -

Instance Methods

- -
- -

addItem:

- - - -
-

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.

-
- - - -
- (void)addItem:(GAITransactionItem *)item
- - - -
-

Parameters

- -
-
item
-

The GAITransactionItem to add to the transaction.

-
- -
- - - - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- -

addItemWithCode:name:category:priceMicros:quantity:

- - - -
-

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.

-
- - - -
- (void)addItemWithCode:(NSString *)productCode name:(NSString *)productName category:(NSString *)productCategory priceMicros:(int64_t)priceMicros quantity:(NSInteger)quantity
- - - -
-

Parameters

- -
-
productCode
-

The item product code; must not be nil or empty.

-
- -
-
productName
-

The item product name; may be nil.

-
- -
-
productCategory
-

The item product category; may be nil.

-
- -
-
priceMicros
-

The item price, in micros (millionths of a currency unit).

-
- -
-
quantity
-

The item quantity, as an NSInteger.

-
- -
- - - -
-

Return Value

-

The newly initialized item.

-
- - - - - - - - - - - -
-

Declared In

- GAITransaction.h
-
- - -
- -
- - -
- - -
-
- - - \ No newline at end of file diff --git a/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITransactionItem.html b/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITransactionItem.html deleted file mode 100644 index 4c65a31..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/Classes/GAITransactionItem.html +++ /dev/null @@ -1,588 +0,0 @@ - - - - - GAITransactionItem Class Reference - - - - - - - -
-
-

Google Analytics SDK for iOS

- Google Inc -
- - - -
- -
-
- - - -
- -
- - - - - - - -
Inherits fromNSObject
Declared inGAITransactionItem.h
- - - - -
- -

Overview

-

A simple class to hold transaction item data.

-
- - - - - -
- -

Tasks

- - - - - - - -
- - - - - -
- -

Properties

- -
- -

priceMicros

- - - -
-

The item price in micros (millionths of a currency unit).

-
- - - -
@property (nonatomic, assign) int64_t priceMicros
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransactionItem.h
-
- - -
- -
- -

productCategory

- - - -
-

The item variation.

-
- - - -
@property (nonatomic, copy) NSString *productCategory
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransactionItem.h
-
- - -
- -
- -

productCode

- - - -
-

The item code, as a string.

-
- - - -
@property (nonatomic, copy, readonly) NSString *productCode
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransactionItem.h
-
- - -
- -
- -

productName

- - - -
-

The item name.

-
- - - -
@property (nonatomic, copy) NSString *productName
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransactionItem.h
-
- - -
- -
- -

quantity

- - - -
-

The item quantity.

-
- - - -
@property (nonatomic, assign) NSInteger quantity
- - - - - - - - - - - - - - - -
-

Declared In

- GAITransactionItem.h
-
- - -
- -
- - - -
- -

Class Methods

- -
- -

itemWithCode:name:category:priceMicros:quantity:

- - - -
-

Create and initialize an item.

-
- - - -
+ (GAITransactionItem *)itemWithCode:(NSString *)productCode name:(NSString *)productName category:(NSString *)productCategory priceMicros:(int64_t)priceMicros quantity:(NSInteger)quantity
- - - -
-

Parameters

- -
-
productCode
-

The item product code; must not be nil or empty.

-
- -
-
productName
-

The item product name; must not be nil or empty.

-
- -
-
productCategory
-

The item product category; may be nil.

-
- -
-
priceMicros
-

The item price, in micros (millionths of a currency unit).

-
- -
-
quantity
-

The item quantity, as an NSInteger.

-
- -
- - - -
-

Return Value

-

The newly initialized item.

-
- - - - - - - - - - - -
-

Declared In

- GAITransactionItem.h
-
- - -
- -
- - - - -
- - -
-
- - - \ No newline at end of file diff --git a/Frameworks/Google Analytics SDK/Documentation/html/Protocols/GAITracker.html b/Frameworks/Google Analytics SDK/Documentation/html/Protocols/GAITracker.html deleted file mode 100644 index 0c753fa..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/Protocols/GAITracker.html +++ /dev/null @@ -1,2519 +0,0 @@ - - - - - GAITracker Protocol Reference - - - - - - - -
-
-

Google Analytics SDK for iOS

- Google Inc -
- - - -
- -
-
- - - -
- -
- - - - - - - -
Conforms toNSObject
Declared inGAITracker.h
- - - - -
- -

Overview

-

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.

-
- - - - - -
- -

Tasks

- - - - - -
    -
  • - -   trackingId -

    The tracking identifier (the string that begins with “UA-”) this tracker is -associated with.

    -
    - property - required method -
  • - -   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 - required method -
  • - -   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 - required method -
  • - -   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 - required method -
  • - -   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 - required method -
  • - -   useHttps -

    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 - required method -
  • - -   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 - required method -
  • - -   clientId -

    The client ID for the tracker.

    -
    - property - required method -
  • - -   appScreen -

    The current screen set for this tracker.

    -
    - property - required method -
  • - -   referrerUrl -

    The referrer URL for this tracker. Changing this value causes it to be sent -with the next dispatch of tracking information.

    -
    - property - required method -
  • - -   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.

    -
    - property - required method -
  • - -   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 - required method -
  • - -   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.

    -
    - property - required method -
  • - - – 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.

    -
    - - required method -
  • - - – trackView -

    This method is deprecated. See sendView.

    -
    - - required method -
  • - - – 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.

    -
    - - required method -
  • - - – trackView: -

    This method is deprecated. See sendView.

    -
    - - required method -
  • - - – sendEventWithCategory:withAction:withLabel:withValue: -

    Track an event.

    -
    - - required method -
  • - - – trackEventWithCategory:withAction:withLabel:withValue: -

    This method is deprecated. See sendEventWithCategory.

    -
    - - required method -
  • - - – sendTransaction: -

    Track a transaction.

    -
    - - required method -
  • - - – trackTransaction: -

    This method is deprecated. see sendTransaction.

    -
    - - required method -
  • - - – sendException:withDescription: -

    Track an exception.

    -
    - - required method -
  • - - – trackException:withDescription: -

    This method is deprecated. See sendException.

    -
    - - required method -
  • - - – sendException:withNSException: -

    Convenience method for tracking an NSException that passes the exception -name to trackException:withDescription:.

    -
    - - required method -
  • - - – trackException:withNSException: -

    This method is deprecated. See sendException.

    -
    - - required method -
  • - - – sendException:withNSError: -

    Convenience method for tracking an NSError that passes the domain, code, and -description to trackException:withDescription:.

    -
    - - required method -
  • - - – trackException:withNSError: -

    This method is deprecated. See sendException.

    -
    - - required method -
  • - - – sendTimingWithCategory:withValue:withName:withLabel: -

    Track user timing.

    -
    - - required method -
  • - - – trackTimingWithCategory:withValue:withName:withLabel: -

    This method is deprecated. See sendTimingWithCategory.

    -
    - - required method -
  • - - – sendSocial:withAction:withTarget: -

    Track social action.

    -
    - - required method -
  • - - – trackSocial:withAction:withTarget: -

    This method is deprecated. See sendSocial.

    -
    - - required method -
  • - - – set:value: -

    Set a tracking parameter.

    -
    - - required method -
  • - - – get: -

    Get a tracking parameter.

    -
    - - required method -
  • - - – send:params: -

    Queue tracking information with the given parameter values.

    -
    - - required method -
  • - - – setCustom:dimension: -

    Set a custom dimension value, to be sent at the next tracking call.

    -
    - - required method -
  • - - – setCustom:metric: -

    Set a custom metric value, to be sent at the next tracking call.

    -
    - - required method -
  • - - – 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.

    -
    - - 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.

-
- - - -
@property (nonatomic, copy) NSString *campaignUrl
- - - - - - - - - -
-

Discussion

-

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

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

clientId

- - - -
-

The client ID for the tracker.

-
- - - -
@property (nonatomic, copy, readonly) NSString *clientId
- - - - - - - - - -
-

Discussion

-

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.

-
- - - -
@property (nonatomic, assign) NSTimeInterval sessionTimeout
- - - - - - - - - -
-

Discussion

-

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.

-
- - - -
@property (nonatomic, copy, readonly) NSString *trackingId
- - - - - - - - - -
-

Discussion

-

This property is read-only.

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

useHttps

- - - -
-

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.

-
- - - -
- (BOOL)send:(NSString *)trackType params:(NSDictionary *)parameters
- - - -
-

Parameters

- -
-
trackType
-

The type of tracking information, e.g., @“appview”.

-
- -
-
parameters
-

A map from parameter names to parameter values which will be -set just for this piece of tracking information.

-
- -
- - - -
-

Return Value

-

YES if the tracking information was queued for submission, or NO -if an error occurred (e.g. bad track type).

-
- - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

sendEventWithCategory:withAction:withLabel:withValue:

- - - -
-

Track an event.

-
- - - -
- (BOOL)sendEventWithCategory:(NSString *)category withAction:(NSString *)action withLabel:(NSString *)label withValue:(NSNumber *)value
- - - -
-

Parameters

- -
-
category
-

The event category, or nil if none.

-
- -
-
action
-

The event action, or nil if none.

-
- -
-
label
-

The event label, or nil if none.

-
- -
-
value
-

The event value, to be interpreted as a 64-bit signed integer, or -nil if none.

-
- -
- - - -
-

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.

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

sendException:withDescription:

- - - -
-

Track an exception.

-
- - - -
- (BOOL)sendException:(BOOL)isFatal withDescription:(NSString *)format, ...
- - - -
-

Parameters

- -
-
isFatal
-

A boolean indicating whether the exception is fatal.

-
- -
-
format
-

A format string that will be used to create the exception -description.

-
- -
-
...
-

An optional list of arguments to be substituted using the format -string.

-
- -
- - - -
-

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.

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

sendException:withNSError:

- - - -
-

Convenience method for tracking an NSError that passes the domain, code, and -description to trackException:withDescription:.

-
- - - -
- (BOOL)sendException:(BOOL)isFatal withNSError:(NSError *)error
- - - -
-

Parameters

- -
-
isFatal
-

A boolean indicating whether the exception is fatal.

-
- -
-
error
-

The NSError error object.

-
- -
- - - -
-

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.

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

sendException:withNSException:

- - - -
-

Convenience method for tracking an NSException that passes the exception -name to trackException:withDescription:.

-
- - - -
- (BOOL)sendException:(BOOL)isFatal withNSException:(NSException *)exception
- - - -
-

Parameters

- -
-
isFatal
-

A boolean indicating whether the exception is fatal.

-
- -
-
exception
-

The NSException exception object.

-
- -
- - - -
-

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.

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

sendSocial:withAction:withTarget:

- - - -
-

Track social action.

-
- - - -
- (BOOL)sendSocial:(NSString *)network withAction:(NSString *)action withTarget:(NSString *)target
- - - -
-

Parameters

- -
-
network
-

A string representing social network. Must not be nil.

-
- -
-
action
-

A string representing a social action. Must not be nil.

-
- -
-
target
-

A string representing the target. May 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.

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

sendTimingWithCategory:withValue:withName:withLabel:

- - - -
-

Track user timing.

-
- - - -
- (BOOL)sendTimingWithCategory:(NSString *)category withValue:(NSTimeInterval)time withName:(NSString *)name withLabel:(NSString *)label
- - - -
-

Parameters

- -
-
category
-

A string representing a timing category.

-
- -
-
time
-

A timing value.

-
- -
-
name
-

A string representing a timing name, or nil if none.

-
- -
-
label
-

A string representing a timing variable label, or nil if none.

-
- -
- - - -
-

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.

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

sendTransaction:

- - - -
-

Track a transaction.

-
- - - -
- (BOOL)sendTransaction:(GAITransaction *)transaction
- - - -
-

Parameters

- -
-
transaction
-

The GAITransaction object.

-
- -
- - - -
-

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.

-
- - - - - - - -
-

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.

-
- - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

set:value:

- - - -
-

Set a tracking parameter.

-
- - - -
- (BOOL)set:(NSString *)parameterName value:(NSString *)value
- - - -
-

Parameters

- -
-
parameterName
-

The parameter name.

-
- -
-
value
-

The value to set for the parameter. If this is nil, the -value for the parameter will be cleared.

-
- -
- - - -
-

Return Value

-

YES if the parameter was set to the given value, or NO if there -was an error (e.g. unknown parameter).

-
- - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

setCustom:dimension:

- - - -
-

Set a custom dimension value, to be sent at the next tracking call.

-
- - - -
- (BOOL)setCustom:(NSInteger)index dimension:(NSString *)dimension
- - - -
-

Parameters

- -
-
index
-

The index at which to set the dimension. Must be positive.

-
- -
-
dimension
-

The dimension value, or nil if the dimension at the given -index is to be cleared.

-
- -
- - - -
-

Return Value

-

YES on success, or NO if an error occurred.

-
- - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

setCustom:metric:

- - - -
-

Set a custom metric value, to be sent at the next tracking call.

-
- - - -
- (BOOL)setCustom:(NSInteger)index metric:(NSNumber *)metric
- - - -
-

Parameters

- -
-
index
-

The index at which to set the metric. Must be positive.

-
- -
-
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 Value

-

YES on success, or NO if an error occurred.

-
- - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackEventWithCategory:withAction:withLabel:withValue:

- - - -
-

This method is deprecated. See sendEventWithCategory.

-
- - - -
- (BOOL)trackEventWithCategory:(NSString *)category withAction:(NSString *)action withLabel:(NSString *)label withValue:(NSNumber *)value
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackException:withDescription:

- - - -
-

This method is deprecated. See sendException.

-
- - - -
- (BOOL)trackException:(BOOL)isFatal withDescription:(NSString *)format, ...
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackException:withNSError:

- - - -
-

This method is deprecated. See sendException.

-
- - - -
- (BOOL)trackException:(BOOL)isFatal withNSError:(NSError *)error
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackException:withNSException:

- - - -
-

This method is deprecated. See sendException.

-
- - - -
- (BOOL)trackException:(BOOL)isFatal withNSException:(NSException *)exception
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackSocial:withAction:withTarget:

- - - -
-

This method is deprecated. See sendSocial.

-
- - - -
- (BOOL)trackSocial:(NSString *)network withAction:(NSString *)action withTarget:(NSString *)target
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackTimingWithCategory:withValue:withName:withLabel:

- - - -
-

This method is deprecated. See sendTimingWithCategory.

-
- - - -
- (BOOL)trackTimingWithCategory:(NSString *)category withValue:(NSTimeInterval)time withName:(NSString *)name withLabel:(NSString *)label
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackTransaction:

- - - -
-

This method is deprecated. see sendTransaction.

-
- - - -
- (BOOL)trackTransaction:(GAITransaction *)transaction
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackView

- - - -
-

This method is deprecated. See sendView.

-
- - - -
- (BOOL)trackView
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- -

trackView:

- - - -
-

This method is deprecated. See sendView.

-
- - - -
- (BOOL)trackView:(NSString *)screen
- - - - - - - - - - - - - - - -
-

Declared In

- GAITracker.h
-
- - -
- -
- - -
- - -
-
- - - \ No newline at end of file diff --git a/Frameworks/Google Analytics SDK/Documentation/html/css/styles.css b/Frameworks/Google Analytics SDK/Documentation/html/css/styles.css deleted file mode 100644 index 1ad2618..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/css/styles.css +++ /dev/null @@ -1,588 +0,0 @@ -body { - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - font-size: 13px; -} - -code { - font-family: Courier, Consolas, monospace; - font-size: 13px; - color: #666; -} - -pre { - font-family: Courier, Consolas, monospace; - font-size: 13px; - line-height: 18px; - tab-interval: 0.5em; - border: 1px solid #C7CFD5; - background-color: #F1F5F9; - color: #666; - padding: 0.3em 1em; -} - -ul { - list-style-type: square; -} - -li { - margin-bottom: 10px; -} - -a, a code { - text-decoration: none; - color: #36C; -} - -a:hover, a:hover code { - text-decoration: underline; - color: #36C; -} - -h2 { - border-bottom: 1px solid #8391A8; - color: #3C4C6C; - font-size: 187%; - font-weight: normal; - margin-top: 1.75em; - padding-bottom: 2px; -} - -table { - margin-bottom: 4em; - border-collapse:collapse; - vertical-align: middle; -} - -td { - border: 1px solid #9BB3CD; - padding: .667em; - font-size: 100%; -} - -th { - border: 1px solid #9BB3CD; - padding: .3em .667em .3em .667em; - background: #93A5BB; - font-size: 103%; - font-weight: bold; - color: white; - text-align: left; -} - -/* @group Common page elements */ - -#top_header { - height: 91px; - left: 0; - min-width: 598px; - position: absolute; - right: 0; - top: 0; - z-index: 900; -} - -#footer { - clear: both; - padding-top: 20px; - text-align: center; -} - -#contents, #overview_contents { - -webkit-overflow-scrolling: touch; - border-top: 1px solid #2B334F; - position: absolute; - top: 91px; - left: 0; - right: 0; - bottom: 0; - overflow-x: hidden; - overflow-y: auto; - padding-left: 2em; - padding-right: 2em; - padding-top: 1em; - min-width: 550px; -} - -#contents.isShowingTOC { - left: 230px; - min-width: 320px; -} - -.copyright { - font-size: 12px; -} - -.generator { - font-size: 11px; -} - -.main-navigation ul li { - display: inline; - margin-left: 15px; - list-style: none; -} - -.navigation-top { - clear: both; - float: right; -} - -.navigation-bottom { - clear: both; - float: right; - margin-top: 20px; - margin-bottom: -10px; -} - -.open > .disclosure { - background-image: url("../img/disclosure_open.png"); -} - -.disclosure { - background: url("../img/disclosure.png") no-repeat scroll 0 0; -} - -.disclosure, .nodisclosure { - display: inline-block; - height: 8px; - margin-right: 5px; - position: relative; - width: 9px; -} - -/* @end */ - -/* @group Header */ - -#top_header #library { - background: url("../img/library_background.png") repeat-x 0 0 #485E78; - background-color: #ccc; - height: 35px; - font-size: 115%; -} - -#top_header #library #libraryTitle { - color: #FFFFFF; - margin-left: 15px; - text-shadow: 0 -1px 0 #485E78; - top: 8px; - position: absolute; -} - -#libraryTitle { - left: 0; -} - -#top_header #library #developerHome { - color: #92979E; - right: 15px; - top: 8px; - position: absolute; -} - -#top_header #library a:hover { - text-decoration: none; -} - -#top_header #title { - background: url("../img/title_background.png") repeat-x 0 0 #8A98A9; - border-bottom: 1px solid #B6B6B6; - height: 25px; - overflow: hidden; -} - -#top_header h1 { - font-size: 115%; - font-weight: normal; - margin: 0; - padding: 3px 0 2px; - text-align: center; - text-shadow: 0 1px 0 #D5D5D5; - white-space: nowrap; -} - -#headerButtons { - background-color: #D8D8D8; - background-image: url("../img/button_bar_background.png"); - border-bottom: 1px solid #EDEDED; - border-top: 1px solid #2B334F; - font-size: 8pt; - height: 28px; - left: 0; - list-style: none outside none; - margin: 0; - overflow: hidden; - padding: 0; - position: absolute; - right: 0; - top: 61px; -} - -#headerButtons li { - background-repeat: no-repeat; - display: inline; - margin-top: 0; - margin-bottom: 0; - padding: 0; -} - -#toc_button button { - border-color: #ACACAC; - border-style: none solid none none; - border-width: 0 1px 0 0; - height: 28px; - margin: 0; - padding-left: 30px; - text-align: left; - width: 230px; -} - -li#jumpto_button { - left: 230px; - margin-left: 0; - position: absolute; -} - -li#jumpto_button select { - height: 22px; - margin: 5px 2px 0 10px; - max-width: 300px; -} - -/* @end */ - -/* @group Table of contents */ - -#tocContainer.isShowingTOC { - border-right: 1px solid #ACACAC; - display: block; - overflow-x: hidden; - overflow-y: auto; - padding: 0; -} - -#tocContainer { - background-color: #E4EBF7; - border-top: 1px solid #2B334F; - bottom: 0; - display: none; - left: 0; - overflow: hidden; - position: absolute; - top: 91px; - width: 229px; -} - -#tocContainer > ul#toc { - font-size: 11px; - margin: 0; - padding: 12px 0 18px; - width: 209px; - -moz-user-select: none; - -webkit-user-select: none; - user-select: none; -} - -#tocContainer > ul#toc > li { - margin: 0; - padding: 0 0 7px 30px; - text-indent: -15px; -} - -#tocContainer > ul#toc > li > .sectionName a { - color: #000000; - font-weight: bold; -} - -#tocContainer > ul#toc > li > .sectionName a:hover { - text-decoration: none; -} - -#tocContainer > ul#toc li.children > ul { - display: none; - height: 0; -} - -#tocContainer > ul#toc > li > ul { - margin: 0; - padding: 0; -} - -#tocContainer > ul#toc > li > ul, ul#toc > li > ul > li { - margin-left: 0; - margin-bottom: 0; - padding-left: 15px; -} - -#tocContainer > ul#toc > li ul { - list-style: none; - margin-right: 0; - padding-right: 0; -} - -#tocContainer > ul#toc li.children.open > ul { - display: block; - height: auto; - margin-left: -15px; - padding-left: 0; -} - -#tocContainer > ul#toc > li > ul, ul#toc > li > ul > li { - margin-left: 0; - padding-left: 15px; -} - -#tocContainer li ul li { - margin-top: 0.583em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -#tocContainer li ul li span.sectionName { - white-space: normal; -} - -#tocContainer > ul#toc > li > ul > li > .sectionName a { - font-weight: bold; -} - -#tocContainer > ul#toc > li > ul a { - color: #4F4F4F; -} - -/* @end */ - -/* @group Index formatting */ - -.index-title { - font-size: 13px; - font-weight: normal; -} - -.index-column { - float: left; - width: 30%; - min-width: 200px; - font-size: 11px; -} - -.index-column ul { - margin: 8px 0 0 0; - padding: 0; - list-style: none; -} - -.index-column ul li { - margin: 0 0 3px 0; - padding: 0; -} - -.hierarchy-column { - min-width: 400px; -} - -.hierarchy-column ul { - margin: 3px 0 0 15px; -} - -.hierarchy-column ul li { - list-style-type: square; -} - -/* @end */ - -/* @group Common formatting elements */ - -.title { - font-weight: normal; - font-size: 215%; - margin-top:0; -} - -.subtitle { - font-weight: normal; - font-size: 180%; - color: #3C4C6C; - border-bottom: 1px solid #5088C5; -} - -.subsubtitle { - font-weight: normal; - font-size: 145%; - height: 0.7em; -} - -.note { - border: 1px solid #5088C5; - background-color: white; - margin: 1.667em 0 1.75em 0; - padding: 0 .667em .083em .750em; -} - -.warning { - border: 1px solid #5088C5; - background-color: #F0F3F7; - margin-bottom: 0.5em; - padding: 0.3em 0.8em; -} - -.bug { - border: 1px solid #000; - background-color: #ffffcc; - margin-bottom: 0.5em; - padding: 0.3em 0.8em; -} - -.deprecated { - color: #F60425; -} - -/* @end */ - -/* @group Common layout */ - -.section { - margin-top: 3em; -} - -/* @end */ - -/* @group Object specification section */ - -.section-specification { - margin-left: 2.5em; - margin-right: 2.5em; - font-size: 12px; -} - -.section-specification table { - margin-bottom: 0em; - border-top: 1px solid #d6e0e5; -} - -.section-specification td { - vertical-align: top; - border-bottom: 1px solid #d6e0e5; - border-left-width: 0px; - border-right-width: 0px; - border-top-width: 0px; - padding: .6em; -} - -.section-specification .specification-title { - font-weight: bold; -} - -/* @end */ - -/* @group Tasks section */ - -.task-list { - list-style-type: none; - padding-left: 0px; -} - -.task-list li { - margin-bottom: 3px; -} - -.task-item-suffix { - color: #996; - font-size: 12px; - font-style: italic; - margin-left: 0.5em; -} - -span.tooltip span.tooltip { - font-size: 1.0em; - display: none; - padding: 0.3em; - border: 1px solid #aaa; - background-color: #fdfec8; - color: #000; - text-align: left; -} - -span.tooltip:hover span.tooltip { - display: block; - position: absolute; - margin-left: 2em; -} - -/* @end */ - -/* @group Method section */ - -.section-method { - margin-top: 2.3em; -} - -.method-title { - margin-bottom: 1.5em; -} - -.method-subtitle { - margin-top: 0.7em; - margin-bottom: 0.2em; -} - -.method-subsection p { - margin-top: 0.4em; - margin-bottom: 0.8em; -} - -.method-declaration { - margin-top:1.182em; - margin-bottom:.909em; -} - -.method-declaration code { - font:14px Courier, Consolas, monospace; - color:#000; -} - -.declaration { - color: #000; -} - -.argument-def { - margin-top: 0.3em; - margin-bottom: 0.3em; -} - -.argument-def dd { - margin-left: 1.25em; -} - -.see-also-section ul { - list-style-type: none; - padding-left: 0px; - margin-top: 0; -} - -.see-also-section li { - margin-bottom: 3px; -} - -.declared-in-ref { - color: #666; -} - -#tocContainer.hideInXcode { - display: none; - border: 0px solid black; -} - -#top_header.hideInXcode { - display: none; -} - -#contents.hideInXcode { - border: 0px solid black; - top: 0px; - left: 0px; -} - -/* @end */ - diff --git a/Frameworks/Google Analytics SDK/Documentation/html/css/stylesPrint.css b/Frameworks/Google Analytics SDK/Documentation/html/css/stylesPrint.css deleted file mode 100644 index dc54cd2..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/css/stylesPrint.css +++ /dev/null @@ -1,22 +0,0 @@ - -header { - display: none; -} - -div.main-navigation, div.navigation-top { - display: none; -} - -div#overview_contents, div#contents.isShowingTOC, div#contents { - overflow: visible; - position: relative; - top: 0px; - border: none; - left: 0; -} -#tocContainer.isShowingTOC { - display: none; -} -nav { - display: none; -} \ No newline at end of file diff --git a/Frameworks/Google Analytics SDK/Documentation/html/hierarchy.html b/Frameworks/Google Analytics SDK/Documentation/html/hierarchy.html deleted file mode 100644 index 1ead1f1..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/hierarchy.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - Google Analytics SDK for iOS Hierarchy - - - - - -
-
-

Google Analytics SDK for iOS

- Google Inc -
- - - -
-
-
- - -
- -
-

Class Hierarchy

- - - -
- - - -
- -

Protocol References

- - - -
- -
- - -
-
- - \ No newline at end of file diff --git a/Frameworks/Google Analytics SDK/Documentation/html/img/button_bar_background.png b/Frameworks/Google Analytics SDK/Documentation/html/img/button_bar_background.png deleted file mode 100644 index abea717..0000000 Binary files a/Frameworks/Google Analytics SDK/Documentation/html/img/button_bar_background.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/Documentation/html/img/disclosure.png b/Frameworks/Google Analytics SDK/Documentation/html/img/disclosure.png deleted file mode 100644 index 4c5cbf4..0000000 Binary files a/Frameworks/Google Analytics SDK/Documentation/html/img/disclosure.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/Documentation/html/img/disclosure_open.png b/Frameworks/Google Analytics SDK/Documentation/html/img/disclosure_open.png deleted file mode 100644 index 82396fe..0000000 Binary files a/Frameworks/Google Analytics SDK/Documentation/html/img/disclosure_open.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/Documentation/html/img/library_background.png b/Frameworks/Google Analytics SDK/Documentation/html/img/library_background.png deleted file mode 100644 index 7b3486b..0000000 Binary files a/Frameworks/Google Analytics SDK/Documentation/html/img/library_background.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/Documentation/html/img/title_background.png b/Frameworks/Google Analytics SDK/Documentation/html/img/title_background.png deleted file mode 100644 index 3bf0bb1..0000000 Binary files a/Frameworks/Google Analytics SDK/Documentation/html/img/title_background.png and /dev/null differ diff --git a/Frameworks/Google Analytics SDK/Documentation/html/index.html b/Frameworks/Google Analytics SDK/Documentation/html/index.html deleted file mode 100644 index b727970..0000000 --- a/Frameworks/Google Analytics SDK/Documentation/html/index.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - Google Analytics SDK for iOS Reference - - - - - -
-
-

Google Analytics SDK for iOS

- Google Inc -
- - - -
-
-
- - -
- - - - - -
-

Class References

- -
- - - -
- -

Protocol References

- - - -
- -
- - -
-
- - \ No newline at end of file diff --git a/Frameworks/Google Analytics SDK/Changelog.txt b/Frameworks/Google Analytics SDK/GoogleAnalytics/Changelog.txt similarity index 67% rename from Frameworks/Google Analytics SDK/Changelog.txt rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Changelog.txt index bc27ab5..bb5924f 100644 --- a/Frameworks/Google Analytics SDK/Changelog.txt +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Changelog.txt @@ -1,5 +1,31 @@ Google Analytics SDK for iOS Changelog +-------------------------------------------- +Version: 3.01 (September 2013) +------------------------------------------- +* Fixed link error when targeting iOS 7.0. + +-------------------------------------------- +Version: 3.00 (August 2013) +------------------------------------------- +* SDK API change to align with analytics.js. The track and + send methods have been removed. Use send and the + GAIDictionaryBuilder construct methods instead. +* Most properties on the GAITracker protocol have been removed. Use + set on the various fields instead. +* All parameters set using the set method will be persisted. Previously, + several parameters would only be set for the next send/track call. +* GAILogger protocol is available for those wanting to implement their + own custom logging for the SDK. +* Minimium system requirements have changed. See Readme.txt for details. +* All SDK activity (database and network access) is now done on a separate + thread. +* Clientid can now be read. Call [tracker get:kGAIClientId]. Note that + this call will block until the client id can be read from the database. +* SDK no longer uses POST unless the hit is larger than 2000 bytes. It + will use GET instead. +* SDK will no longer retry sending hits based off the HTTP response code. + -------------------------------------------- Version: 2.0beta4 Update (Jan 2013) -------------------------------------------- diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.h new file mode 100644 index 0000000..88d3cda --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.h @@ -0,0 +1,23 @@ +// +// AppDelegate.h +// CuteAnimals +// +// Copyright 2012 Google, Inc. All rights reserved. +// + +#import + +#import "GAI.h" + +@class RootViewController; +@class NavController; + +@interface AppDelegate : UIResponder + +@property(nonatomic, strong) UIWindow *window; +@property(nonatomic, strong) NavController *navController; +@property(nonatomic, strong) RootViewController *viewController; +@property(nonatomic, strong) id tracker; +@property(nonatomic, strong) NSDictionary *images; + +@end diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/AppDelegate.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.m similarity index 61% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/AppDelegate.m rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.m index dff255f..43741de 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/AppDelegate.m +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/AppDelegate.m @@ -11,6 +11,7 @@ /******* Set your tracking ID here *******/ static NSString *const kTrackingId = @"UA-TRACKING-ID"; +static NSString *const kAllowTracking = @"allowTracking"; @interface AppDelegate () @@ -19,51 +20,42 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID"; @end @implementation AppDelegate - -@synthesize window = window_; -@synthesize navController = navController_; -@synthesize viewController = viewController_; -@synthesize tracker = tracker_; -@synthesize images = images_; - +- (void)applicationDidBecomeActive:(UIApplication *)application { + [GAI sharedInstance].optOut = + ![[NSUserDefaults standardUserDefaults] boolForKey:kAllowTracking]; +} - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.images = [self loadImages]; - + NSDictionary *appDefaults = @{kAllowTracking: @(YES)}; + [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; + // User must be able to opt out of tracking + [GAI sharedInstance].optOut = + ![[NSUserDefaults standardUserDefaults] boolForKey:kAllowTracking]; // Initialize Google Analytics with a 120-second dispatch interval. There is a // tradeoff between battery usage and timely dispatch. - [GAI sharedInstance].debug = YES; [GAI sharedInstance].dispatchInterval = 120; [GAI sharedInstance].trackUncaughtExceptions = YES; - self.tracker = [[GAI sharedInstance] trackerWithTrackingId:kTrackingId]; + self.tracker = [[GAI sharedInstance] trackerWithName:@"CuteAnimals" + trackingId:kTrackingId]; self.window = - [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] - autorelease]; + [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.viewController = - [[[RootViewController alloc] initWithNibName:@"RootViewController" - bundle:nil] autorelease]; + [[RootViewController alloc] initWithNibName:@"RootViewController" + bundle:nil]; self.navController = - [[[NavController alloc] initWithRootViewController:self.viewController] - autorelease]; + [[NavController alloc] initWithRootViewController:self.viewController]; self.navController.delegate = self.navController; - self.viewController.navController = self.navController; self.window.rootViewController = self.navController; [self.window makeKeyAndVisible]; return YES; } -- (void)dealloc { - [tracker_ release]; - [viewController_ release]; - [navController_ release]; - [window_ release]; - [super dealloc]; -} - (NSDictionary *)loadImages { NSArray *contents = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" @@ -72,7 +64,7 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID"; NSLog(@"Failed to load directory contents"); return nil; } - NSMutableDictionary *images = [NSMutableDictionary dictionaryWithCapacity:0]; + NSMutableDictionary *images = [NSMutableDictionary dictionary]; for (NSString *file in contents) { NSArray *components = [[file lastPathComponent] componentsSeparatedByString:@"-"]; @@ -85,17 +77,16 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID"; NSLog(@"Failed to load file: %@", file); continue; } - NSString *prefix = [components objectAtIndex:0]; - NSMutableArray *categoryImages = [images objectForKey:prefix]; + NSString *prefix = components[0]; + NSMutableArray *categoryImages = images[prefix]; if (!categoryImages) { - categoryImages = [NSMutableArray arrayWithCapacity:0]; - [images setObject:categoryImages - forKey:prefix]; + categoryImages = [NSMutableArray array]; + images[prefix] = categoryImages; } [categoryImages addObject:image]; } for (NSString *cat in [images allKeys]) { - NSArray *array = [images objectForKey:cat]; + NSArray *array = images[cat]; NSLog(@"Category %@: %u image(s).", cat, array.count); } return images; diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.h similarity index 70% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController.h rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.h index 555d0e8..7e76b63 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController.h +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.h @@ -12,9 +12,8 @@ @interface CategoryViewController : GAITrackedViewController -@property(nonatomic, retain) NSString *category; -@property(nonatomic, retain) NavController *navController; -@property(nonatomic, retain) IBOutlet UITableView *tableView; +@property(nonatomic, strong) NSString *category; +@property(nonatomic, strong) IBOutlet UITableView *tableView; - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.m similarity index 62% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController.m rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.m index 35b3440..608cd97 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController.m +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController.m @@ -13,44 +13,31 @@ @interface CategoryViewController () -@property(nonatomic, retain) NSMutableArray *items; -@property(nonatomic, assign) AppDelegate *delegate; +@property(nonatomic, strong) NSMutableArray *items; +@property(nonatomic, weak) AppDelegate *delegate; @end @implementation CategoryViewController -@synthesize category = category_; -@synthesize navController = navController_; -@synthesize tableView = tableView_; -@synthesize items = items_; -@synthesize delegate = delegate_; - - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle category:(NSString *)category { self = [super initWithNibName:nibName bundle:nibBundle]; if (self) { - self.category = category; - self.trackedViewName = category; + _category = category; + _delegate = [UIApplication sharedApplication].delegate; self.title = [NSString stringWithFormat:@"Cute %@s", category]; - self.delegate = [UIApplication sharedApplication].delegate; + self.screenName = category; } return self; } -- (void)dealloc { - [category_ release]; - [navController_ release]; - [tableView_ release]; - [items_ release]; - [super dealloc]; -} - (void)viewDidLoad { [super viewDidLoad]; - self.items = [self.delegate.images objectForKey:self.category]; + self.items = (self.delegate.images)[self.category]; } - (BOOL)shouldAutorotateToInterfaceOrientation: @@ -74,14 +61,14 @@ } NSString *title = [NSString stringWithFormat:@"%@ %d", self.category, indexPath.row]; - UIImage *image = [self.items objectAtIndex:indexPath.row]; + UIImage *image = (self.items)[indexPath.row]; ImageViewController *imageViewController = - [[[ImageViewController alloc] initWithNibName:nil - bundle:nil - title:title - image:image] autorelease]; - [imageViewController.view addSubview:imageViewController.imageView]; - [self.navController pushViewController:imageViewController animated:YES]; + [[ImageViewController alloc] initWithNibName:nil + bundle:nil + title:title + image:image]; + [self.delegate.navController pushViewController:imageViewController + animated:YES]; } #pragma mark UITableViewDataSource methods @@ -101,17 +88,17 @@ static NSString *CellId = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId]; if (!cell) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle - reuseIdentifier:CellId] autorelease]; + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle + reuseIdentifier:CellId]; + cell.textLabel.font = [UIFont systemFontOfSize:14]; + cell.detailTextLabel.font = [UIFont systemFontOfSize:12]; } cell.textLabel.text = [NSString stringWithFormat:@"%@ %d", self.category, indexPath.row]; - cell.textLabel.font = [UIFont systemFontOfSize:14]; - UIImage *image = [self.items objectAtIndex:indexPath.row]; + UIImage *image = (self.items)[indexPath.row]; cell.detailTextLabel.text = [NSString stringWithFormat:@"%d x %d", (int)image.size.width, (int)image.size.height]; - cell.detailTextLabel.font = [UIFont systemFontOfSize:12]; return cell; } diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController_iPad.xib b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPad.xib similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController_iPad.xib rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPad.xib diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController_iPhone.xib b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPhone.xib similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/CategoryViewController_iPhone.xib rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CategoryViewController_iPhone.xib diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CuteAnimals-Info.plist b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Info.plist similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/CuteAnimals-Info.plist rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Info.plist diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CuteAnimals-Prefix.pch b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Prefix.pch similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/CuteAnimals-Prefix.pch rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals-Prefix.pch diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj similarity index 91% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj index ec2bb3e..1973d24 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj @@ -18,7 +18,6 @@ 113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */; }; 113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6F2A153E208D003CAC38 /* CoreData.framework */; }; 115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115686551593CE6A00A5D031 /* SystemConfiguration.framework */; }; - 11BC54011577E1F000E7D657 /* libGoogleAnalytics.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11BC53FF1577E1E000E7D657 /* libGoogleAnalytics.a */; }; 11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1C1561834700949704 /* CategoryViewController.m */; }; 11FCCC201561834700949704 /* ImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1E1561834700949704 /* ImageViewController.m */; }; 11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC22156189A600949704 /* Bunny-1.jpg */; }; @@ -39,6 +38,8 @@ 11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC31156189A600949704 /* Monkey-5.jpg */; }; 11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC32156189A600949704 /* Tiger-1.jpg */; }; 11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC33156189A600949704 /* Tiger-2.jpg */; }; + 88679A8E17A184FA00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */; }; + F7C47F21178B5B56003A7D0F /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F7C47F20178B5B55003A7D0F /* Settings.bundle */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -59,12 +60,9 @@ 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPhone.xib; sourceTree = SOURCE_ROOT; }; 113B6F2A153E208D003CAC38 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 115686551593CE6A00A5D031 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - 11BC53FF1577E1E000E7D657 /* libGoogleAnalytics.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalytics.a; path = ../../Library/libGoogleAnalytics.a; sourceTree = ""; }; 11BC54021577E24400E7D657 /* GAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAI.h; path = ../../Library/GAI.h; sourceTree = ""; }; 11BC54031577E24500E7D657 /* GAITrackedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = ../../Library/GAITrackedViewController.h; sourceTree = ""; }; 11BC54041577E24500E7D657 /* GAITracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = ../../Library/GAITracker.h; sourceTree = ""; }; - 11BC54051577E24500E7D657 /* GAITransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITransaction.h; path = ../../Library/GAITransaction.h; sourceTree = ""; }; - 11BC54061577E24500E7D657 /* GAITransactionItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITransactionItem.h; path = ../../Library/GAITransactionItem.h; sourceTree = ""; }; 11FCCC1B1561834700949704 /* CategoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CategoryViewController.h; sourceTree = SOURCE_ROOT; }; 11FCCC1C1561834700949704 /* CategoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CategoryViewController.m; sourceTree = SOURCE_ROOT; }; 11FCCC1D1561834700949704 /* ImageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageViewController.h; sourceTree = SOURCE_ROOT; }; @@ -87,6 +85,11 @@ 11FCCC31156189A600949704 /* Monkey-5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-5.jpg"; path = "Images/Monkey-5.jpg"; sourceTree = SOURCE_ROOT; }; 11FCCC32156189A600949704 /* Tiger-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-1.jpg"; path = "Images/Tiger-1.jpg"; sourceTree = SOURCE_ROOT; }; 11FCCC33156189A600949704 /* Tiger-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-2.jpg"; path = "Images/Tiger-2.jpg"; sourceTree = SOURCE_ROOT; }; + 88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = ../../../../libGoogleAnalyticsServices.a; sourceTree = ""; }; + F707E732174D7550008123BF /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAIDictionaryBuilder.h; path = ../../Library/GAIDictionaryBuilder.h; sourceTree = ""; }; + F707E733174D7550008123BF /* GAIFields.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAIFields.h; path = ../../Library/GAIFields.h; sourceTree = ""; }; + F707E734174D7550008123BF /* GAILogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAILogger.h; path = ../../Library/GAILogger.h; sourceTree = ""; }; + F7C47F20178B5B55003A7D0F /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -98,7 +101,7 @@ 113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */, 113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */, 113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */, - 11BC54011577E1F000E7D657 /* libGoogleAnalytics.a in Frameworks */, + 88679A8E17A184FA00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -160,6 +163,7 @@ 113B6EEE153E1F0B003CAC38 /* Supporting Files */ = { isa = PBXGroup; children = ( + F7C47F20178B5B55003A7D0F /* Settings.bundle */, 11FCCC211561899800949704 /* Images */, 113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */, 113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */, @@ -170,12 +174,13 @@ 113B6F1E153E1FAD003CAC38 /* Google Analytics Library */ = { isa = PBXGroup; children = ( + 88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */, + F707E732174D7550008123BF /* GAIDictionaryBuilder.h */, + F707E733174D7550008123BF /* GAIFields.h */, + F707E734174D7550008123BF /* GAILogger.h */, 11BC54021577E24400E7D657 /* GAI.h */, 11BC54031577E24500E7D657 /* GAITrackedViewController.h */, 11BC54041577E24500E7D657 /* GAITracker.h */, - 11BC54051577E24500E7D657 /* GAITransaction.h */, - 11BC54061577E24500E7D657 /* GAITransactionItem.h */, - 11BC53FF1577E1E000E7D657 /* libGoogleAnalytics.a */, ); name = "Google Analytics Library"; sourceTree = ""; @@ -231,7 +236,7 @@ 113B6EDA153E1F0B003CAC38 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0430; + LastUpgradeCheck = 0460; }; buildConfigurationList = 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */; compatibilityVersion = "Xcode 3.2"; @@ -276,6 +281,7 @@ 11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */, 11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */, 11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */, + F7C47F21178B5B56003A7D0F /* Settings.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -303,6 +309,10 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -328,6 +338,10 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -346,6 +360,7 @@ 113B6EFC153E1F0B003CAC38 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch"; INFOPLIST_FILE = "CuteAnimals-Info.plist"; @@ -353,6 +368,7 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../Library\"", + "\"$(SRCROOT)/../../..\"", ); PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; @@ -362,6 +378,7 @@ 113B6EFD153E1F0B003CAC38 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch"; INFOPLIST_FILE = "CuteAnimals-Info.plist"; @@ -369,6 +386,7 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/../../Library\"", + "\"$(SRCROOT)/../../..\"", ); PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/ImageViewController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.h similarity index 78% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/ImageViewController.h rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.h index 4c3f6bb..fe7d6f8 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/ImageViewController.h +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.h @@ -12,9 +12,6 @@ @interface ImageViewController : GAITrackedViewController -@property(nonatomic, retain) NavController *navController; -@property(nonatomic, retain) UIImageView *imageView; - - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil title:(NSString *)title diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/ImageViewController.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.m similarity index 60% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/ImageViewController.m rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.m index 91c4c41..b6d8e9a 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/ImageViewController.m +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/ImageViewController.m @@ -9,10 +9,13 @@ #import "AppDelegate.h" -@implementation ImageViewController +@interface ImageViewController () -@synthesize imageView = imageView_; -@synthesize navController = navController_; +@property(nonatomic, strong) UIImage *image; + +@end + +@implementation ImageViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil @@ -21,19 +24,18 @@ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { - self.title = self.trackedViewName = title; - self.imageView = [[[UIImageView alloc] initWithImage:image] autorelease]; - self.imageView.userInteractionEnabled = YES; - self.imageView.contentMode = UIViewContentModeScaleAspectFit; + _image = image; + self.title = self.screenName = title; } return self; } - -- (void)dealloc { - [imageView_ release]; - [navController_ release]; - [super dealloc]; +- (void)viewDidLoad { + [super viewDidLoad]; + UIImageView *imageView = [[UIImageView alloc] initWithImage:self.image]; + imageView.userInteractionEnabled = YES; + imageView.contentMode = UIViewContentModeScaleAspectFit; + [self.view addSubview:imageView]; } - (BOOL)shouldAutorotateToInterfaceOrientation: diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Bunny-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-1.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Bunny-1.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-1.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Bunny-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-2.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Bunny-2.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-2.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Bunny-3.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-3.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Bunny-3.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Bunny-3.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Cat-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-1.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Cat-1.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-1.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Cat-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-2.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Cat-2.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-2.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Cat-3.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-3.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Cat-3.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-3.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Cat-4.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-4.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Cat-4.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Cat-4.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Lion-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-1.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Lion-1.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-1.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Lion-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-2.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Lion-2.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-2.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Lion-3.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-3.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Lion-3.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-3.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Lion-4.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-4.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Lion-4.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Lion-4.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-1.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-1.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-1.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-2.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-2.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-2.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-3.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-3.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-3.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-3.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-4.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-4.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-4.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-4.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-5.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-5.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Monkey-5.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Monkey-5.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Tiger-1.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-1.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Tiger-1.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-1.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Tiger-2.jpg b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-2.jpg similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Images/Tiger-2.jpg rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Images/Tiger-2.jpg diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/NavController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.h similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/NavController.h rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.h diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/NavController.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.m similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/NavController.m rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/NavController.m diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/Readme.txt b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Readme.txt similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/Readme.txt rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Readme.txt diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/RootViewController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.h similarity index 66% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/RootViewController.h rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.h index 045e657..5b772a0 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/RootViewController.h +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.h @@ -10,7 +10,6 @@ @interface RootViewController : GAITrackedViewController -@property(nonatomic, retain) NavController *navController; -@property(nonatomic, retain) IBOutlet UITableView *tableView; +@property(nonatomic, strong) IBOutlet UITableView *tableView; @end diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/RootViewController.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.m similarity index 52% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/RootViewController.m rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.m index c40f560..255da5d 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/RootViewController.m +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.m @@ -11,59 +11,38 @@ #import "ImageViewController.h" #import "GAI.h" +#import "GAIDictionaryBuilder.h" @interface RootViewController () -@property(nonatomic, retain) NSArray *items; -@property(nonatomic, assign) AppDelegate *delegate; +@property(nonatomic, strong) NSArray *items; +@property(nonatomic, weak) AppDelegate *delegate; @end @implementation RootViewController -@synthesize tableView = tableView_; -@synthesize navController = navController_; -@synthesize items = items_; -@synthesize delegate = delegate_; - - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { self = [super initWithNibName:nibName bundle:nibBundle]; if (self) { - self.trackedViewName = @"root"; + _delegate = [UIApplication sharedApplication].delegate; self.title = @"Cute Animals"; - self.delegate = [UIApplication sharedApplication].delegate; - [self updateSecureButton]; + self.screenName = @"root"; } return self; } -- (void)dealloc { - [tableView_ release]; - [navController_ release]; - [items_ release]; - [super dealloc]; -} -- (void)updateSecureButton { - if ([GAI sharedInstance].defaultTracker.useHttps) { - self.navigationItem.leftBarButtonItem.title = @"HTTPS"; - self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone; - } else { - self.navigationItem.leftBarButtonItem.title = @"HTTP"; - self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleBordered; - } -} - -- (void)toggleSecure { - [GAI sharedInstance].defaultTracker.useHttps = - ![GAI sharedInstance].defaultTracker.useHttps; - [self updateSecureButton]; - [[GAI sharedInstance].defaultTracker sendEventWithCategory:@"secureDispatch" - withAction:@"toggle" - withLabel:nil - withValue:nil]; +- (void)dispatch { + NSMutableDictionary *event = + [[GAIDictionaryBuilder createEventWithCategory:@"UI" + action:@"buttonPress" + label:@"dispatch" + value:nil] build]; + [[GAI sharedInstance].defaultTracker send:event]; + [[GAI sharedInstance] dispatch]; } - (void)crash { @@ -74,17 +53,15 @@ - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.leftBarButtonItem = - [[[UIBarButtonItem alloc] - initWithTitle:@"HTTP" - style:UIBarButtonItemStyleBordered - target:self - action:@selector(toggleSecure)] autorelease]; + [[UIBarButtonItem alloc] initWithTitle:@"Dispatch" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(dispatch)]; self.navigationItem.rightBarButtonItem = - [[[UIBarButtonItem alloc] - initWithTitle:@"Crash" - style:UIBarButtonItemStyleBordered - target:self - action:@selector(crash)] autorelease]; + [[UIBarButtonItem alloc] initWithTitle:@"Crash" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(crash)]; self.items = [[self.delegate.images allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; @@ -106,16 +83,16 @@ return; } - NSString *category = [self.items objectAtIndex:indexPath.row]; + NSString *category = (self.items)[indexPath.row]; NSString *nib = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ? @"CategoryViewController_iPhone" : @"CategoryViewController_iPad"; CategoryViewController *categoryController = - [[[CategoryViewController alloc] initWithNibName:nib + [[CategoryViewController alloc] initWithNibName:nib bundle:nil - category:category] autorelease]; - categoryController.navController = self.navController; - [self.navController pushViewController:categoryController animated:YES]; + category:category]; + [self.delegate.navController pushViewController:categoryController + animated:YES]; } #pragma mark UITableViewDataSource methods @@ -131,23 +108,22 @@ NSLog(@"IndexPath %d out of bounds!", indexPath.row); return nil; } - NSString *category = [self.items objectAtIndex:indexPath.row]; + NSString *category = (self.items)[indexPath.row]; static NSString *CellId = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId]; if (!cell) { - cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle - reuseIdentifier:CellId] autorelease]; + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle + reuseIdentifier:CellId]; + cell.textLabel.font = [UIFont systemFontOfSize:14]; + cell.detailTextLabel.font = [UIFont systemFontOfSize:12]; } NSString *label = [NSString stringWithFormat:@"Cute %@ Pictures!", category]; cell.textLabel.text = label; - cell.textLabel.font = [UIFont systemFontOfSize:14]; - NSUInteger imageCount = - [(NSArray *)[self.delegate.images objectForKey:category] count]; + NSUInteger imageCount = [(self.delegate.images)[category] count]; cell.detailTextLabel.text = [NSString stringWithFormat:@"%u image(s).", imageCount]; - cell.detailTextLabel.font = [UIFont systemFontOfSize:12]; return cell; } diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/RootViewController.xib b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.xib similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/RootViewController.xib rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/RootViewController.xib diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/Root.plist b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/Root.plist new file mode 100644 index 0000000..d845463 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/Root.plist @@ -0,0 +1,21 @@ + + + + + PreferenceSpecifiers + + + DefaultValue + + Key + allowTracking + Title + Allow analytics + Type + PSToggleSwitchSpecifier + + + StringsTable + Root + + diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/en.lproj/Root.strings b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/en.lproj/Root.strings new file mode 100644 index 0000000..8cd87b9 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/Settings.bundle/en.lproj/Root.strings differ diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/main.m b/Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/main.m similarity index 100% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/main.m rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Examples/CuteAnimals/main.m diff --git a/Frameworks/Google Analytics SDK/Library/GAI.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAI.h similarity index 53% rename from Frameworks/Google Analytics SDK/Library/GAI.h rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAI.h index f900201..d9e60e4 100644 --- a/Frameworks/Google Analytics SDK/Library/GAI.h +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAI.h @@ -1,11 +1,12 @@ /*! @header GAI.h @abstract Google Analytics iOS SDK Header - @version 2.0 - @copyright Copyright 2011 Google Inc. All rights reserved. + @version 3.0 + @copyright Copyright 2013 Google Inc. All rights reserved. */ #import +#import "GAILogger.h" #import "GAITracker.h" #import "GAITrackedViewController.h" @@ -49,11 +50,9 @@ typedef enum { @property(nonatomic, assign) id defaultTracker; /*! - If true, Google Analytics debug messages will be logged with `NSLog()`. This is - useful for debugging calls to the Google Analytics SDK. - - By default, this flag is set to `NO`. */ -@property(nonatomic, assign) BOOL debug; + The GAILogger to use. + */ +@property(nonatomic, retain) id logger; /*! When this is true, no tracking information will be gathered; tracking calls @@ -69,14 +68,9 @@ typedef enum { @property(nonatomic, assign) BOOL optOut; /*! - 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. + If this value is positive, tracking information will be automatically + dispatched every dispatchInterval seconds. Otherwise, tracking information must + be sent manually by calling dispatch. By default, this is set to `120`, which indicates tracking information should be dispatched automatically every 120 seconds. @@ -94,31 +88,72 @@ typedef enum { */ @property(nonatomic, assign) BOOL trackUncaughtExceptions; +/*! + When this is 'YES', no tracking information will be sent. Defaults to 'NO'. + */ +@property(nonatomic, assign) BOOL dryRun; + /*! Get the shared instance of the Google Analytics for iOS class. */ + (GAI *)sharedInstance; /*! - Create or retrieve a GAITracker implementation with the specified tracking - ID. If the tracker for the specified tracking ID does not already exist, then + Creates or retrieves a GAITracker implementation with the specified name and + tracking ID. If the tracker for the specified name does not already exist, then it will be created and returned; otherwise, the existing tracker will be - returned. If defaultTracker is not set, it will be set to the tracker instance - returned here. + returned. If the existing tracker for the respective name has a different + tracking ID, that tracking ID is not changed by this method. If defaultTracker + is not set, it will be set to the tracker instance returned here. - @param trackingId The tracking ID (a string that begins with "UA-"). Must not - be `nil` or empty. + @param name The name of this tracker. Must not be `nil` or empty. - @return A GAITracker associated with the specified tracking ID. The tracker + @param trackingID The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. + + @return A GAITracker associated with the specified name. The tracker can be used to send tracking data to Google Analytics. The first time this - method is called with a particular 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. + method is called with a particular name, the tracker for that name will be + returned, and subsequent calls with the same name will return the same + instance. It is not necessary to retain the tracker because the tracker will be + retained internally by the library. - If an error occurs or the tracker ID is not valid, this method will return + If an error occurs or the name is not valid, this method will return + `nil`. + */ +- (id)trackerWithName:(NSString *)name + trackingId:(NSString *)trackingId; + +/*! + Creates or retrieves a GAITracker implementation with name equal to + the specified tracking ID. If the tracker for the respective name does not + already exist, it is created, has it's tracking ID set to |trackingId|, + and is returned; otherwise, the existing tracker is returned. If the existing + tracker for the respective name has a different tracking ID, that tracking ID + is not changed by this method. If defaultTracker is not set, it is set to the + tracker instance returned here. + + @param trackingID The tracking ID to use for this tracker. It should be of + the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID. + + @return A GAITracker associated with the specified trackingID. The tracker + can be used to send tracking data to Google Analytics. The first time this + method is called with a particular trackingID, the tracker for the respective + name will be returned, and subsequent calls with the same trackingID + will return the same instance. It is not necessary to retain the tracker + because the tracker will be retained internally by the library. + + If an error occurs or the trackingId is not valid, this method will return `nil`. */ - (id)trackerWithTrackingId:(NSString *)trackingId; +/*! + Remove a tracker from the trackers dictionary. If it is the default tracker, + clears the default tracker as well. + + @param name The name of the tracker. + */ +- (void)removeTrackerByName:(NSString *)name; + /*! Dispatches any pending tracking information. diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIDictionaryBuilder.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIDictionaryBuilder.h new file mode 100644 index 0000000..24c5a95 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIDictionaryBuilder.h @@ -0,0 +1,178 @@ +/*! + @header GAIDictionaryBuilder.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import + +/*! + * Helper class to build a dictionary of hit parameters and values. + *
+ * Examples: + * + * id t = // get a tracker. + * [t send:[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory" + * action:@"EventAction" + * label:nil + * value:nil] + * set:@"dimension1" forKey:[GAIFields CustomDimension:1] build]]; + * + * This will send an event hit type with the specified parameters + * and a custom dimension parameter. + *
+ * If you want to send a parameter with all hits, set it on GAITracker directly. + * + * [t set:kGAIScreenName value:@"Home"]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"PlusOne" + * target:@"SOME_URL"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"Share" + * target:@"SOME_POST"] build]]; + * [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+" + * action:@"HangOut" + * target:@"SOME_CIRCLE"] + * build]]; + * + * You can override a value set on the tracker by adding it to the dictionary. + * + * [t set:kGAIScreenName value:@"Home"]; + * [t send:...]; + * [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click" + * action:@"popup" + * label:nil + * value:nil] + * set:@"popup title" forKey:kGAIScreenName] build]]; + * + * The values set via [GAIDictionaryBuilder set] or + * [GAIDictionaryBuilder setAll] will override any existing values in the + * GAIDictionaryBuilder object (i.e. initialized by + * [GAIDictionaryBuilder createXYZ]). e.g. + * + * GAIDictionaryBuilder *m = + * GAIDictionaryBuilder createTimingWithCategory:@"category" + * interval:@0 + * name:@"name" + * label:nil]; + * [t send:[m.set:@"10" forKey:kGAITimingVar] build]; + * [t send:[m.set:@"20" forKey:kGAITimingVar] build]; + * + */ +@interface GAIDictionaryBuilder : NSObject + +- (GAIDictionaryBuilder *)set:(NSString *)value + forKey:(NSString *)key; + +/*! + * Copies all the name-value pairs from params into this object, ignoring any + * keys that are not NSString and any values that are neither NSString or + * NSNull. + */ +- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params; + +/*! + * Returns the value for the input parameter paramName, or nil if paramName + * is not present. + */ +- (NSString *)get:(NSString *)paramName; + +/*! + * Return an NSMutableDictionary object with all the parameters set in this + */ +- (NSMutableDictionary *)build; + +/*! + * Parses and translates utm campaign parameters to analytics campaign param + * and returns them as a map. + * + * @param params url containing utm campaign parameters. + * + * Valid campaign parameters are: + *
    + *
  • utm_id
  • + *
  • utm_campaign
  • + *
  • utm_content
  • + *
  • utm_medium
  • + *
  • utm_source
  • + *
  • utm_term
  • + *
  • dclid
  • + *
  • gclid
  • + *
  • gmob_t
  • + *
+ *

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

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

+ * For more information on manual tagging, see + * http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518 + */ +- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an appview + hit. + + Note that using this method will not set the screen name for followon hits. To + do that you need to call set:kGAIDescription value: on the + GAITracker instance. + */ ++ (GAIDictionaryBuilder *)createAppView; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an event hit. + */ ++ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category + action:(NSString *)action + label:(NSString *)label + value:(NSNumber *)value; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an exception + hit. + */ ++ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description + withFatal:(NSNumber *)fatal; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to an item hit. + */ ++ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId + name:(NSString *)name + sku:(NSString *)sku + category:(NSString *)category + price:(NSNumber *)price + quantity:(NSNumber *)quantity + currencyCode:(NSString *)currencyCode; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a social hit. + */ ++ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network + action:(NSString *)action + target:(NSString *)target; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a timing hit. + */ ++ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category + interval:(NSNumber *)intervalMillis + name:(NSString *)name + label:(NSString *)label; + +/*! + Returns a GAIDictionaryBuilder object with parameters specific to a transaction + hit. + */ ++ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId + affiliation:(NSString *)affiliation + revenue:(NSNumber *)revenue + tax:(NSNumber *)tax + shipping:(NSNumber *)shipping + currencyCode:(NSString *)currencyCode; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIFields.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIFields.h new file mode 100644 index 0000000..868baae --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAIFields.h @@ -0,0 +1,123 @@ +/*! + @header GAIFields.h + @abstract Google Analytics iOS SDK Hit Format Header + @copyright Copyright 2013 Google Inc. All rights reserved. + */ + +#import + +/*! + These fields can be used for the wire format parameter names required by + the |GAITracker| get, set and send methods as well as the set methods in the + |GAIDictionaryBuilder| class. + */ +extern NSString *const kGAIUseSecure; + +extern NSString *const kGAIHitType; +extern NSString *const kGAITrackingId; +extern NSString *const kGAIClientId; +extern NSString *const kGAIAnonymizeIp; +extern NSString *const kGAISessionControl; +extern NSString *const kGAIScreenResolution; +extern NSString *const kGAIViewportSize; +extern NSString *const kGAIEncoding; +extern NSString *const kGAIScreenColors; +extern NSString *const kGAILanguage; +extern NSString *const kGAIJavaEnabled; +extern NSString *const kGAIFlashVersion; +extern NSString *const kGAINonInteraction; +extern NSString *const kGAIReferrer; +extern NSString *const kGAILocation; +extern NSString *const kGAIHostname; +extern NSString *const kGAIPage; +extern NSString *const kGAIDescription; // synonym for kGAIScreenName +extern NSString *const kGAIScreenName; // synonym for kGAIDescription +extern NSString *const kGAITitle; +extern NSString *const kGAIAppName; +extern NSString *const kGAIAppVersion; +extern NSString *const kGAIAppId; +extern NSString *const kGAIAppInstallerId; + +extern NSString *const kGAIEventCategory; +extern NSString *const kGAIEventAction; +extern NSString *const kGAIEventLabel; +extern NSString *const kGAIEventValue; + +extern NSString *const kGAISocialNetwork; +extern NSString *const kGAISocialAction; +extern NSString *const kGAISocialTarget; + +extern NSString *const kGAITransactionId; +extern NSString *const kGAITransactionAffiliation; +extern NSString *const kGAITransactionRevenue; +extern NSString *const kGAITransactionShipping; +extern NSString *const kGAITransactionTax; +extern NSString *const kGAICurrencyCode; + +extern NSString *const kGAIItemPrice; +extern NSString *const kGAIItemQuantity; +extern NSString *const kGAIItemSku; +extern NSString *const kGAIItemName; +extern NSString *const kGAIItemCategory; + +extern NSString *const kGAICampaignSource; +extern NSString *const kGAICampaignMedium; +extern NSString *const kGAICampaignName; +extern NSString *const kGAICampaignKeyword; +extern NSString *const kGAICampaignContent; +extern NSString *const kGAICampaignId; + +extern NSString *const kGAITimingCategory; +extern NSString *const kGAITimingVar; +extern NSString *const kGAITimingValue; +extern NSString *const kGAITimingLabel; + +extern NSString *const kGAIExDescription; +extern NSString *const kGAIExFatal; + +extern NSString *const kGAISampleRate; + +// hit types +extern NSString *const kGAIAppView; +extern NSString *const kGAIEvent; +extern NSString *const kGAISocial; +extern NSString *const kGAITransaction; +extern NSString *const kGAIItem; +extern NSString *const kGAIException; +extern NSString *const kGAITiming; + +/*! + This class provides several fields and methods useful as wire format parameter + names. The methods are used for wire format parameter names that are indexed. + */ + +@interface GAIFields : NSObject + +/*! + Generates the correct parameter name for a content group with an index. + + @param index the index of the content group. + + @return an NSString representing the content group parameter for the index. + */ ++ (NSString *)contentGroupForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custon dimension with an index. + + @param index the index of the custom dimension. + + @return an NSString representing the custom dimension parameter for the index. + */ ++ (NSString *)customDimensionForIndex:(NSUInteger)index; + +/*! + Generates the correct parameter name for a custom metric with an index. + + @param index the index of the custom metric. + + @return an NSString representing the custom metric parameter for the index. + */ ++ (NSString *)customMetricForIndex:(NSUInteger)index; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAILogger.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAILogger.h new file mode 100644 index 0000000..06291f2 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAILogger.h @@ -0,0 +1,49 @@ +/*! + @header GAILogger.h + @abstract Google Analytics iOS SDK Source + @copyright Copyright 2011 Google Inc. All rights reserved. + */ + +#import + +typedef NS_ENUM(NSUInteger, GAILogLevel) { + kGAILogLevelNone = 0, + kGAILogLevelError = 1, + kGAILogLevelWarning = 2, + kGAILogLevelInfo = 3, + kGAILogLevelVerbose = 4 +}; + +/*! + Protocol to be used for logging debug and informational messages from the SDK. + Implementations of this protocol can be provided to the |GAI| class, + to be used as the logger by the SDK. See the |logger| property in GAI.h. + */ +@protocol GAILogger +@required + +/*! + Only messages of |logLevel| and below are logged. + */ +@property (nonatomic, assign) GAILogLevel logLevel; + +/*! + Logs message with log level |kGAILogLevelVerbose|. + */ +- (void)verbose:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelInfo|. + */ +- (void)info:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelWarning|. + */ +- (void)warning:(NSString *)message; + +/*! + Logs message with log level |kGAILogLevelError|. + */ +- (void)error:(NSString *)message; +@end diff --git a/Frameworks/Google Analytics SDK/Library/GAITrackedViewController.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITrackedViewController.h similarity index 60% rename from Frameworks/Google Analytics SDK/Library/GAITrackedViewController.h rename to Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITrackedViewController.h index 0a10070..5cbabdd 100644 --- a/Frameworks/Google Analytics SDK/Library/GAITrackedViewController.h +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITrackedViewController.h @@ -11,18 +11,14 @@ @protocol GAITracker; /*! - Extends UIViewController to generate Google Analytics view tracking calls + Extends UIViewController to generate Google Analytics appview 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. + method. The screen name must be set for any tracking calls to be made. By default, this will use [GAI defaultTracker] for tracking calls, but one can override this by setting the tracker property. */ -@interface GAITrackedViewController : UIViewController { - @private - id tracker_; - NSString *trackedViewName_; -} +@interface GAITrackedViewController : UIViewController /*! The tracker on which view tracking calls are be made, or `nil`, in which case @@ -30,9 +26,9 @@ */ @property(nonatomic, assign) id tracker; /*! - The view name, for purposes of Google Analytics view tracking. If this is - `nil`, no tracking calls will be made. + The screen name, for purposes of Google Analytics tracking. If this is `nil`, + no tracking calls will be made. */ -@property(nonatomic, copy) NSString *trackedViewName; +@property(nonatomic, copy) NSString *screenName; @end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITracker.h b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITracker.h new file mode 100644 index 0000000..43b5e20 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/GAITracker.h @@ -0,0 +1,53 @@ +/*! + @header GAITracker.h + @abstract Google Analytics iOS SDK Tracker Header + @version 3.0 + @copyright Copyright 2013 Google Inc. All rights reserved. +*/ + +#import + +/*! + Google Analytics tracking interface. Obtain instances of this interface from + [GAI trackerWithTrackingId:] to track screens, events, transactions, timing, + and exceptions. The implementation of this interface is thread-safe, and no + calls are expected to block or take a long time. All network and disk activity + will take place in the background. + */ +@protocol GAITracker + +/*! + Name of this tracker. + */ +@property(nonatomic, readonly) NSString *name; + +/*! + Set a tracking parameter. + + @param parameterName The parameter name. + + @param value The value to set for the parameter. If this is nil, the + value for the parameter will be cleared. + */ +- (void)set:(NSString *)parameterName + value:(NSString *)value; + +/*! + Get a tracking parameter. + + @param parameterName The parameter name. + + @returns The parameter value, or nil if no value for the given parameter is + set. + */ +- (NSString *)get:(NSString *)parameterName; + +/*! + Queue tracking information with the given parameter values. + + @param parameters A map from parameter names to parameter values which will be + set just for this piece of tracking information, or nil for none. + */ +- (void)send:(NSDictionary *)parameters; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/libGoogleAnalytics_debug.a b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/libGoogleAnalytics_debug.a new file mode 100644 index 0000000..36773f2 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleAnalytics/Library/libGoogleAnalytics_debug.a differ diff --git a/Frameworks/Google Analytics SDK/GoogleAnalytics/Readme.txt b/Frameworks/Google Analytics SDK/GoogleAnalytics/Readme.txt new file mode 100644 index 0000000..bf1a825 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleAnalytics/Readme.txt @@ -0,0 +1,75 @@ +Google Analytics iOS SDK version 3.01 +Copyright 2009 - 2013 Google, Inc. All rights reserved. + +================================================================================ +DESCRIPTION: + +This SDK provides developers with the capability to use Google Analytics +to track iOS application usage. + +The SDK is packaged as a set of header files and a static library. Get started +by adding the header files from the Library subdirectory (GAI.h, +GAIDictionaryBuilder.h, GAIFields.h, GAILogger.h, GAITrackedViewController.h +and GAITracker.h) and libGoogleAnalyticsV3(?).a to your XCode project. You must +also include the CoreData framework in your project. + +To use a version of the library with debug symbols intact, link against +libGoogleAnalytics_debug.a instead of libGoogleAnalyticsServices.a. This may be +useful if you experience exceptions or crashes originating in the SDK. + +See the Examples/CuteAnimals application for an illustration of how to use +automatic screen tracking, event tracking, and uncaught exception tracking. + +You will need a Google Analytics tracking ID to track application usage with the +SDK. It is recommended to create an account for each set of applications that +are to be tracked together, and to use that account's tracking ID in each +application. To create a new tracking ID, go to your admin panel in Google +Analytics and select "New Account". Under "What would you like to track?", +choose "App" and complete the remainder of the form. When you are finished, +click "Get Tracking ID". The tracking ID will be of the form "UA-" followed by a +sequence of numbers and dashes. + +You must indicate to your users, either in the app itself or in your terms of +service, that you reserve the right to anonymously track and report a user's +activity inside of your app. + +Implementation Details: + +Tracking information is stored in an SQLite database and dispatched to the +Google Analytics servers in a manner set by the developer: periodically at an +interval determined by the developer, immediately when tracking calls are made, +or manually. A battery efficient strategy may be to initiate a dispatch when the +application needs to access the network. Tracking information is dispatched +using HTTP or HTTPS requests to a Google Analytics server. + +================================================================================ +BUILD REQUIREMENTS: + +Mac OS X 10.6 or later. +XCode with iOS SDK 5.0 or later. + +================================================================================ +RUNTIME REQUIREMENTS: + +iOS 5.0 or later. + +Your app must link the following frameworks: + CoreData.framework + SystemConfiguration.framework + +================================================================================ +PACKAGING LIST: + +Library/ (contains header and library files to compile and link with) + GAI.h + GAIDictionaryBuilder.h + GAIFields.h + GAILogger.h + GAITrackedViewController.h + GAITracker.h + libGoogleAnalytics.a + libGoogleAnalytics_debug.a +Examples/ (contains an example tracked application) +Documentation/ (contains documentation) + +================================================================================ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Changelog.txt b/Frameworks/Google Analytics SDK/GoogleTagManager/Changelog.txt new file mode 100644 index 0000000..e4b4529 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Changelog.txt @@ -0,0 +1,90 @@ +Google Tag Manager SDK for iOS Change Log + +-------------------------------------------- +Version: 3.01 (September, 2013) +-------------------------------------------- +* Fixed link error when targeting iOS 7.0 + +-------------------------------------------- +Version: 3.0 (August 16, 2013) +-------------------------------------------- +* Added support for AdWords Conversion Tracking Tag, AdWords Remarketing Tag, + and Custom Image Tag. + +* Added Advertising Enabled Macro, Application ID Macro, and ID for + Advertising Macro. + +* Pushing a link to the data layer as "gtm.url" will now cache the + Click Referrer for AdWords Tags. + +* Updated cuteAnimals sample app to demonstrate how to use Function Call Macro + and Function Call Tag. + +-------------------------------------------- +Version: 3.0b1 (July 26, 2013) +-------------------------------------------- +* libGoogleAnalyticsServices.a replaces libTagManager.a in the + downloaded SDK. libGoogleAnalyticsServices.a includes all functions + in libTagManager.a plus version 3 of the Google Analytics SDK. + Note that an application can't include both libGoogleAnalyticsServices.a + and the old libGoogleAnalytics.a or libTagManager.a file. + An application that wants to use GTM and also do analytics tracking should + either update their GA calls to use version 3 of the SDK, or replace GA + calls with data layer push calls and add appropriate rules to their + container to fire Universal Analytics hits. + +* Added Tag support in SDK. There are 2 types of tags currently supported: + Universal Analytics (beta) tag and Custom Function Tag. + +* Added DataLayer support to hold generic information about the application. + An app can obtain the DataLayer object by calling TagManager::dataLayer. + +* Added 2 new macros: data layer variable macro and custom event macro. + +* Added LogLevel support into Logger. This allows adjusting the threshold of + what gets logged without having to write a new logger. + +* Added preview exit link support to allow exiting preview mode of a container + without killing the app. + +* Fixed a bug that prevented developers from using both GTM and open-sourced + proto buffer library. + +* Modified the cuteAnimals example to show how to instrument an application + by pushing events to the data layer. A sample container is provided that + uses the pushed events to fire Google Universal Analytics tag. + +-------------------------------------------- +Version: 1.0b3 (June 26, 2013) +-------------------------------------------- +* TagManager::openContainer no longer allows opening multiple containers with + the same container ID. + +* ContainerOpener no longer has the two methods + openNonDefaultContainerWithId:tagManager:timeout:notifier and + openFreshContainerWithId:tagManager:timeout:notifier:. + Instead, there are now two openContainer methods: + openContainerWithId:tagManager:openType:timeout: and + openContainerWithId:tagManager:openType:timeout:notifier. + The first returns a TAGContainerFuture, while the other takes a notifier. + Both of these methods take a parameter specifying how the container should + be opened (kTAGPreferNonDefault or kTAGPreferFresh). This should reduce + confusion as to how TAGContainerFutures and notifiers interact. + + These two new methods can be called more than once with the same + container ID; if the container is already open, it'll be returned (via the + future or notifier). + +* In container preview mode, containers that are already open will be + auto-updated (was just updating the container on the next open). + +-------------------------------------------- +Version: 1.0b2 (June 3, 2013) +-------------------------------------------- +* Initial beta release. + +-------------------------------------------- +Version: 1.0b1 +-------------------------------------------- +* Unreleased internal version. + diff --git a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/AppDelegate.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.h similarity index 67% rename from Frameworks/Google Analytics SDK/Examples/CuteAnimals/AppDelegate.h rename to Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.h index 88038bc..909e219 100644 --- a/Frameworks/Google Analytics SDK/Examples/CuteAnimals/AppDelegate.h +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.h @@ -2,22 +2,23 @@ // AppDelegate.h // CuteAnimals // -// Copyright 2012 Google, Inc. All rights reserved. +// Copyright 2013 Google, Inc. All rights reserved. // #import -#import "GAI.h" - @class RootViewController; @class NavController; +@class TAGManager; +@class TAGContainer; @interface AppDelegate : UIResponder @property(nonatomic, retain) UIWindow *window; @property(nonatomic, retain) NavController *navController; @property(nonatomic, retain) RootViewController *viewController; -@property(nonatomic, retain) id tracker; @property(nonatomic, retain) NSDictionary *images; +@property(nonatomic, retain) TAGManager *tagManager; +@property(nonatomic, retain) TAGContainer *container; @end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.m new file mode 100644 index 0000000..1efcbeb --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/AppDelegate.m @@ -0,0 +1,135 @@ +// +// AppDelegate.m +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "AppDelegate.h" +#import "CustomMacroHandler.h" +#import "CustomTagHandler.h" +#import "NavController.h" +#import "RootViewController.h" +#import "TAGContainer.h" +#import "TAGContainerOpener.h" +#import "TAGLogger.h" +#import "TAGManager.h" + +@interface AppDelegate () + +- (NSDictionary *)loadImages; + +@end + +@implementation AppDelegate + +@synthesize window = _window; +@synthesize navController = _navController; +@synthesize viewController = _viewController; +@synthesize images = _images; +@synthesize tagManager = _tagManager; +@synthesize container = _container; + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + self.tagManager = [TAGManager instance]; + + // Modify the log level of the logger to print out not only + // warning and error messages, but also verbose, debug, info messages. + [self.tagManager.logger setLogLevel:kTAGLoggerLogLevelVerbose]; + + // Following provides ability to support preview from Tag Manager. + // You need to make these calls before opening a container to make + // preview works. + NSURL *url = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey]; + if (url != nil) { + [self.tagManager previewWithUrl:url]; + } + + // Open a container. + id future = + [TAGContainerOpener openContainerWithId:@"GTM-XXXX" + tagManager:self.tagManager + openType:kTAGOpenTypePreferNonDefault + timeout:nil]; + + self.images = [self loadImages]; + + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + + self.container = [future get]; + // Register two custom function call macros to the container. + [self.container registerFunctionCallMacroHandler:[[CustomMacroHandler alloc] init] + forMacro:@"increment"]; + [self.container registerFunctionCallMacroHandler:[[CustomMacroHandler alloc] init] + forMacro:@"mod"]; + // Register a custom function call tag to the container. + [self.container registerFunctionCallTagHandler:[[CustomTagHandler alloc] init] + forTag:@"custom_tag"]; + + self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" + bundle:nil]; + + self.navController = [[NavController alloc] initWithRootViewController:self.viewController]; + self.navController.delegate = self.navController; + + self.viewController.navController = self.navController; + self.window.rootViewController = self.navController; + [self.window makeKeyAndVisible]; + + return YES; +} + +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation { + if ([self.tagManager previewWithUrl:url]) { + return YES; + } + + // Code to handle other urls. + + return NO; +} + +- (NSDictionary *)loadImages { + NSArray *contents = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" + inDirectory:nil]; + if (!contents) { + NSLog(@"Failed to load directory contents"); + return nil; + } + NSMutableDictionary *images = [NSMutableDictionary dictionaryWithCapacity:0]; + for (NSString *file in contents) { + NSArray *components = [[file lastPathComponent] componentsSeparatedByString:@"-"]; + if (components.count == 0) { + NSLog(@"Filename doesn't contain dash: %@", file); + continue; + } + UIImage *image = [UIImage imageWithContentsOfFile:file]; + if (!image) { + NSLog(@"Failed to load file: %@", file); + continue; + } + NSString *prefix = [components objectAtIndex:0]; + NSMutableArray *categoryImages = [images objectForKey:prefix]; + if (!categoryImages) { + categoryImages = [NSMutableArray arrayWithCapacity:0]; + [images setObject:categoryImages + forKey:prefix]; + } + [categoryImages addObject:image]; + } + for (NSString *cat in [images allKeys]) { + NSArray *array = [images objectForKey:cat]; + NSLog(@"Category %@: %u image(s).", cat, array.count); + } + return images; +} + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.h new file mode 100644 index 0000000..1b90fcc --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.h @@ -0,0 +1,22 @@ +// +// CategoryViewController.h +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#import + +#import "NavController.h" + +@interface CategoryViewController : UIViewController + +@property(nonatomic, retain) NSString *category; +@property(nonatomic, retain) NavController *navController; +@property(nonatomic, retain) IBOutlet UITableView *tableView; + +- (id)initWithNibName:(NSString *)nibName + bundle:(NSBundle *)nibBundle + category:(NSString *)category; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.m new file mode 100644 index 0000000..3c1b839 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController.m @@ -0,0 +1,130 @@ +// +// CategoryViewController.m +// CuteAnimals +// +// Copyright 2012 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "AppDelegate.h" +#import "CategoryViewController.h" +#import "ImageViewController.h" +#import "TAGContainer.h" +#import "TAGDataLayer.h" +#import "TAGManager.h" +#import "Utils.h" + +@interface CategoryViewController () + +@property(nonatomic, retain) NSMutableArray *items; +@property(nonatomic, assign) AppDelegate *delegate; + +@end + +@implementation CategoryViewController + +@synthesize category = _category; +@synthesize navController = _navController; +@synthesize tableView = _tableView; +@synthesize items = _items; +@synthesize delegate = _delegate; + +- (id)initWithNibName:(NSString *)nibName + bundle:(NSBundle *)nibBundle + category:(NSString *)category { + self = [super initWithNibName:nibName + bundle:nibBundle]; + if (self) { + self.category = category; + self.delegate = [UIApplication sharedApplication].delegate; + NSString *adjective = [self.delegate.container stringForKey:@"Adjective"]; + self.title = [NSString stringWithFormat:@"%@ %@s", adjective, category]; + } + return self; +} + +// Override +- (void)viewDidLoad { + [super viewDidLoad]; + self.items = [self.delegate.images objectForKey:self.category]; + // Put the category_name into the data layer for future use. + [self.delegate.tagManager.dataLayer pushValue:self.category + forKey:@"category_name"]; +} + +// Override +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [Utils pushOpenScreenEventWithScreenName:@"CategoryViewScreen"]; +} + +// Override +- (void)viewWillDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + [Utils pushCloseScreenEventWithScreenName:@"CategoryViewScreen"]; +} + +// Override +- (BOOL)shouldAutorotateToInterfaceOrientation: + (UIInterfaceOrientation)interfaceOrientation { + if ([[UIDevice currentDevice] userInterfaceIdiom] == + UIUserInterfaceIdiomPhone) { + return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); + } else { + return YES; + } +} + +#pragma mark UITableViewDelegate methods + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:NO]; + if (indexPath.row < 0 || indexPath.row >= self.items.count) { + NSLog(@"IndexPath %d out of bounds!", indexPath.row); + return; + } + NSString *title = [NSString stringWithFormat:@"%@ %d", self.category, indexPath.row]; + UIImage *image = [self.items objectAtIndex:indexPath.row]; + ImageViewController *imageViewController = + [[ImageViewController alloc] initWithNibName:nil + bundle:nil + title:title + image:image]; + [imageViewController.view addSubview:imageViewController.imageView]; + [self.navController pushViewController:imageViewController animated:YES]; +} + +#pragma mark UITableViewDataSource methods + +- (NSInteger)tableView:(UITableView *)tableView + numberOfRowsInSection:(NSInteger)section { + return self.items.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.row < 0 || indexPath.row >= self.items.count) { + NSLog(@"IndexPath %d out of bounds!", indexPath.row); + return nil; + } + + static NSString *CellId = @"Cell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle + reuseIdentifier:CellId]; + } + + cell.textLabel.text = [NSString stringWithFormat:@"%@ %d", self.category, indexPath.row]; + cell.textLabel.font = [UIFont systemFontOfSize:14]; + UIImage *image = [self.items objectAtIndex:indexPath.row]; + cell.detailTextLabel.text = [NSString stringWithFormat:@"%d x %d", + (int)image.size.width, (int)image.size.height]; + cell.detailTextLabel.font = [UIFont systemFontOfSize:12]; + return cell; +} + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPad.xib b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPad.xib new file mode 100644 index 0000000..f5f5876 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPad.xib @@ -0,0 +1,167 @@ + + + + 1296 + 11D50b + 2182 + 1138.32 + 568.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1181 + + + IBProxyObject + IBUIView + IBUITableView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 274 + + + + 274 + {768, 1004} + + _NS:9 + + 3 + MQA + + YES + IBIPadFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + {{0, 20}, {768, 1004}} + + 3 + MQA + + 2 + + + + 2 + + IBIPadFramework + + + + + + + view + + + + 3 + + + + tableView + + + + 8 + + + + dataSource + + + + 9 + + + + delegate + + + + 10 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + + + + + + 4 + + + + + + + CategoryViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 10 + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + 3 + 1181 + + diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPhone.xib b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPhone.xib new file mode 100644 index 0000000..d9c51c6 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CategoryViewController_iPhone.xib @@ -0,0 +1,193 @@ + + + + 1536 + 12C2034 + 2844 + 1187.34 + 625.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1930 + + + IBProxyObject + IBUITableView + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 274 + {320, 460} + + + + _NS:9 + + 3 + MQA + + YES + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + {{0, 20}, {320, 460}} + + + + + 3 + MC43NQA + + 2 + + + NO + + IBCocoaTouchFramework + + + + + + + view + + + + 7 + + + + tableView + + + + 11 + + + + dataSource + + + + 12 + + + + delegate + + + + 13 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 6 + + + + + + + + 8 + + + + + + + CategoryViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 29 + + + + + CategoryViewController + UIViewController + + tableView + UITableView + + + tableView + + tableView + UITableView + + + + IBProjectSource + ./Classes/CategoryViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + 3 + 1930 + + diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.h new file mode 100644 index 0000000..7f45f8c --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.h @@ -0,0 +1,14 @@ +// +// CustomMacroHandler.h +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#import "TAGContainer.h" + +@interface CustomMacroHandler : NSObject + +@property(nonatomic) NSUInteger numOfCalls; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.m new file mode 100644 index 0000000..e967430 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomMacroHandler.m @@ -0,0 +1,34 @@ +// +// CustomMacroHandler.m +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "CustomMacroHandler.h" + +@implementation CustomMacroHandler + +- (id)valueForMacro:(NSString *)macroName + parameters:(NSDictionary *)parameters { + if ([macroName isEqual:@"increment"]) { + self.numOfCalls++; + return [NSString stringWithFormat:@"%d", self.numOfCalls]; + } else if ([macroName isEqual:@"mod"]) { + NSString *value1 = parameters[@"key1"]; + NSString *value2 = parameters[@"key2"]; + return [NSNumber numberWithInt:([value1 intValue] % [value2 intValue])]; + } else { + NSString *message = + [NSString stringWithFormat:@"Custom macro name: %@ is not supported", macroName]; + @throw [NSException exceptionWithName:@"IllegalArgumentException" + reason:message + userInfo:nil]; + } +} + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.h new file mode 100644 index 0000000..1ba3f67 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.h @@ -0,0 +1,12 @@ +// +// CustomTagHandler.h +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#import "TAGContainer.h" + +@interface CustomTagHandler : NSObject + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.m new file mode 100644 index 0000000..481ade2 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CustomTagHandler.m @@ -0,0 +1,21 @@ +// +// CustomTagHandler.m +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "CustomTagHandler.h" + +@implementation CustomTagHandler + +- (void)execute:(NSString *)tagName parameters:(NSDictionary *)parameters { + NSLog(@"Custom function call tag :%@ is fired", tagName); + // Other code firing this custom tag. +} + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Info.plist b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Info.plist new file mode 100644 index 0000000..0cae901 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Info.plist @@ -0,0 +1,56 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.google.tagmanager.example.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLName + com.companyname.appname + CFBundleURLSchemes + + tagmanager.c.com.google.tagmanager.example.cuteAnimals + + + + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Prefix.pch b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Prefix.pch new file mode 100644 index 0000000..1c20531 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals-Prefix.pch @@ -0,0 +1,10 @@ +#import + +#ifndef __IPHONE_4_0 +#warning "This project uses features only available in iOS SDK 4.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj new file mode 100644 index 0000000..f5745f6 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/CuteAnimals.xcodeproj/project.pbxproj @@ -0,0 +1,449 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6EE7153E1F0B003CAC38 /* UIKit.framework */; }; + 113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6EE9153E1F0B003CAC38 /* Foundation.framework */; }; + 113B6F10153E1F99003CAC38 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F03153E1F99003CAC38 /* AppDelegate.m */; }; + 113B6F11153E1F99003CAC38 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F04153E1F99003CAC38 /* main.m */; }; + 113B6F12153E1F99003CAC38 /* NavController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F06153E1F99003CAC38 /* NavController.m */; }; + 113B6F13153E1F99003CAC38 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113B6F08153E1F99003CAC38 /* RootViewController.m */; }; + 113B6F14153E1F99003CAC38 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F09153E1F99003CAC38 /* RootViewController.xib */; }; + 113B6F15153E1F99003CAC38 /* CategoryViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */; }; + 113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */; }; + 113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6F2A153E208D003CAC38 /* CoreData.framework */; }; + 115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115686551593CE6A00A5D031 /* SystemConfiguration.framework */; }; + 11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1C1561834700949704 /* CategoryViewController.m */; }; + 11FCCC201561834700949704 /* ImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1E1561834700949704 /* ImageViewController.m */; }; + 11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC22156189A600949704 /* Bunny-1.jpg */; }; + 11FCCC35156189A600949704 /* Bunny-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC23156189A600949704 /* Bunny-2.jpg */; }; + 11FCCC36156189A600949704 /* Bunny-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC24156189A600949704 /* Bunny-3.jpg */; }; + 11FCCC37156189A600949704 /* Cat-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC25156189A600949704 /* Cat-1.jpg */; }; + 11FCCC38156189A600949704 /* Cat-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC26156189A600949704 /* Cat-2.jpg */; }; + 11FCCC39156189A600949704 /* Cat-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC27156189A600949704 /* Cat-3.jpg */; }; + 11FCCC3A156189A600949704 /* Cat-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC28156189A600949704 /* Cat-4.jpg */; }; + 11FCCC3B156189A600949704 /* Lion-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC29156189A600949704 /* Lion-1.jpg */; }; + 11FCCC3C156189A600949704 /* Lion-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2A156189A600949704 /* Lion-2.jpg */; }; + 11FCCC3D156189A600949704 /* Lion-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2B156189A600949704 /* Lion-3.jpg */; }; + 11FCCC3E156189A600949704 /* Lion-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2C156189A600949704 /* Lion-4.jpg */; }; + 11FCCC3F156189A600949704 /* Monkey-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2D156189A600949704 /* Monkey-1.jpg */; }; + 11FCCC40156189A600949704 /* Monkey-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2E156189A600949704 /* Monkey-2.jpg */; }; + 11FCCC41156189A600949704 /* Monkey-3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC2F156189A600949704 /* Monkey-3.jpg */; }; + 11FCCC42156189A600949704 /* Monkey-4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC30156189A600949704 /* Monkey-4.jpg */; }; + 11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC31156189A600949704 /* Monkey-5.jpg */; }; + 11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC32156189A600949704 /* Tiger-1.jpg */; }; + 11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC33156189A600949704 /* Tiger-2.jpg */; }; + 47CD7CE717BAA2B1008840A0 /* CustomTagHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CD7CE617BAA2B1008840A0 /* CustomTagHandler.m */; }; + 47CD7CED17BAA447008840A0 /* CustomMacroHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 47CD7CEC17BAA447008840A0 /* CustomMacroHandler.m */; }; + 47CD7CF117BACB30008840A0 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47CD7CF017BACB30008840A0 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 47EC965217A19FDD00D685C9 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 47EC965117A19FDD00D685C9 /* Utils.m */; }; + 47EC965417A1C9EB00D685C9 /* GTM-XXXX in Resources */ = {isa = PBXBuildFile; fileRef = 47EC965317A1C9EB00D685C9 /* GTM-XXXX */; }; + 47EC965A17A1CCDE00D685C9 /* Container.png in Resources */ = {isa = PBXBuildFile; fileRef = 47EC965917A1CCDE00D685C9 /* Container.png */; }; + 88679A8C17A1841C00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88679A8B17A1841C00F476D5 /* libGoogleAnalyticsServices.a */; }; + F4FE3F5617555573000A691A /* GTM-XXXX.plist in Resources */ = {isa = PBXBuildFile; fileRef = F4FE3F5517555573000A691A /* GTM-XXXX.plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CuteAnimals.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 113B6EE7153E1F0B003CAC38 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 113B6EE9153E1F0B003CAC38 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CuteAnimals-Info.plist"; sourceTree = ""; }; + 113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CuteAnimals-Prefix.pch"; sourceTree = ""; }; + 113B6F02153E1F99003CAC38 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; + 113B6F03153E1F99003CAC38 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; + 113B6F04153E1F99003CAC38 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; }; + 113B6F05153E1F99003CAC38 /* NavController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavController.h; sourceTree = SOURCE_ROOT; }; + 113B6F06153E1F99003CAC38 /* NavController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NavController.m; sourceTree = SOURCE_ROOT; }; + 113B6F07153E1F99003CAC38 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = SOURCE_ROOT; }; + 113B6F08153E1F99003CAC38 /* RootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = SOURCE_ROOT; }; + 113B6F09153E1F99003CAC38 /* RootViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RootViewController.xib; sourceTree = SOURCE_ROOT; }; + 113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPad.xib; sourceTree = SOURCE_ROOT; }; + 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPhone.xib; sourceTree = SOURCE_ROOT; }; + 113B6F2A153E208D003CAC38 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 115686551593CE6A00A5D031 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 11FCCC1B1561834700949704 /* CategoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CategoryViewController.h; sourceTree = SOURCE_ROOT; }; + 11FCCC1C1561834700949704 /* CategoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CategoryViewController.m; sourceTree = SOURCE_ROOT; }; + 11FCCC1D1561834700949704 /* ImageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageViewController.h; sourceTree = SOURCE_ROOT; }; + 11FCCC1E1561834700949704 /* ImageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageViewController.m; sourceTree = SOURCE_ROOT; }; + 11FCCC22156189A600949704 /* Bunny-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-1.jpg"; path = "Images/Bunny-1.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC23156189A600949704 /* Bunny-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-2.jpg"; path = "Images/Bunny-2.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC24156189A600949704 /* Bunny-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-3.jpg"; path = "Images/Bunny-3.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC25156189A600949704 /* Cat-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-1.jpg"; path = "Images/Cat-1.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC26156189A600949704 /* Cat-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-2.jpg"; path = "Images/Cat-2.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC27156189A600949704 /* Cat-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-3.jpg"; path = "Images/Cat-3.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC28156189A600949704 /* Cat-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-4.jpg"; path = "Images/Cat-4.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC29156189A600949704 /* Lion-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-1.jpg"; path = "Images/Lion-1.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC2A156189A600949704 /* Lion-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-2.jpg"; path = "Images/Lion-2.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC2B156189A600949704 /* Lion-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-3.jpg"; path = "Images/Lion-3.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC2C156189A600949704 /* Lion-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-4.jpg"; path = "Images/Lion-4.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC2D156189A600949704 /* Monkey-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-1.jpg"; path = "Images/Monkey-1.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC2E156189A600949704 /* Monkey-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-2.jpg"; path = "Images/Monkey-2.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC2F156189A600949704 /* Monkey-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-3.jpg"; path = "Images/Monkey-3.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC30156189A600949704 /* Monkey-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-4.jpg"; path = "Images/Monkey-4.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC31156189A600949704 /* Monkey-5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-5.jpg"; path = "Images/Monkey-5.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC32156189A600949704 /* Tiger-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-1.jpg"; path = "Images/Tiger-1.jpg"; sourceTree = SOURCE_ROOT; }; + 11FCCC33156189A600949704 /* Tiger-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-2.jpg"; path = "Images/Tiger-2.jpg"; sourceTree = SOURCE_ROOT; }; + 47CD7CE517BAA2B1008840A0 /* CustomTagHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTagHandler.h; sourceTree = SOURCE_ROOT; }; + 47CD7CE617BAA2B1008840A0 /* CustomTagHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTagHandler.m; sourceTree = SOURCE_ROOT; }; + 47CD7CEB17BAA447008840A0 /* CustomMacroHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomMacroHandler.h; sourceTree = SOURCE_ROOT; }; + 47CD7CEC17BAA447008840A0 /* CustomMacroHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomMacroHandler.m; sourceTree = SOURCE_ROOT; }; + 47CD7CF017BACB30008840A0 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; + 47EC964F17A19FC900D685C9 /* TAGDataLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGDataLayer.h; sourceTree = ""; }; + 47EC965017A19FDD00D685C9 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utils.h; sourceTree = SOURCE_ROOT; }; + 47EC965117A19FDD00D685C9 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utils.m; sourceTree = SOURCE_ROOT; }; + 47EC965317A1C9EB00D685C9 /* GTM-XXXX */ = {isa = PBXFileReference; lastKnownFileType = file; path = "GTM-XXXX"; sourceTree = SOURCE_ROOT; }; + 47EC965917A1CCDE00D685C9 /* Container.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Container.png; path = Images/Container.png; sourceTree = SOURCE_ROOT; }; + 88679A8B17A1841C00F476D5 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = ../../libGoogleAnalyticsServices.a; sourceTree = ""; }; + F41DE61E171DB8A500960CB7 /* TAGContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGContainer.h; sourceTree = ""; }; + F41DE620171DB8A500960CB7 /* TAGManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGManager.h; sourceTree = ""; }; + F431344E174E8F96003C1079 /* TAGContainerOpener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGContainerOpener.h; sourceTree = ""; }; + F431344F174E8F96003C1079 /* TAGLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGLogger.h; sourceTree = ""; }; + F4FE3F5517555573000A691A /* GTM-XXXX.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GTM-XXXX.plist"; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 113B6EE0153E1F0B003CAC38 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 47CD7CF117BACB30008840A0 /* AdSupport.framework in Frameworks */, + 115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */, + 113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */, + 113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */, + 113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */, + 88679A8C17A1841C00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 113B6ED8153E1F0B003CAC38 = { + isa = PBXGroup; + children = ( + 113B6EED153E1F0B003CAC38 /* CuteAnimals */, + F41DE61B171DB8A500960CB7 /* TagManager SDK */, + 113B6EE6153E1F0B003CAC38 /* Frameworks */, + 113B6EE4153E1F0B003CAC38 /* Products */, + ); + sourceTree = ""; + }; + 113B6EE4153E1F0B003CAC38 /* Products */ = { + isa = PBXGroup; + children = ( + 113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */, + ); + name = Products; + sourceTree = ""; + }; + 113B6EE6153E1F0B003CAC38 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 47CD7CF017BACB30008840A0 /* AdSupport.framework */, + 115686551593CE6A00A5D031 /* SystemConfiguration.framework */, + 113B6F2A153E208D003CAC38 /* CoreData.framework */, + 113B6EE7153E1F0B003CAC38 /* UIKit.framework */, + 113B6EE9153E1F0B003CAC38 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 113B6EED153E1F0B003CAC38 /* CuteAnimals */ = { + isa = PBXGroup; + children = ( + 113B6F02153E1F99003CAC38 /* AppDelegate.h */, + 113B6F03153E1F99003CAC38 /* AppDelegate.m */, + 11FCCC1B1561834700949704 /* CategoryViewController.h */, + 11FCCC1C1561834700949704 /* CategoryViewController.m */, + 113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */, + 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */, + 47CD7CEB17BAA447008840A0 /* CustomMacroHandler.h */, + 47CD7CEC17BAA447008840A0 /* CustomMacroHandler.m */, + 47CD7CE517BAA2B1008840A0 /* CustomTagHandler.h */, + 47CD7CE617BAA2B1008840A0 /* CustomTagHandler.m */, + 11FCCC1D1561834700949704 /* ImageViewController.h */, + 11FCCC1E1561834700949704 /* ImageViewController.m */, + 113B6F04153E1F99003CAC38 /* main.m */, + 113B6F05153E1F99003CAC38 /* NavController.h */, + 113B6F06153E1F99003CAC38 /* NavController.m */, + 113B6F07153E1F99003CAC38 /* RootViewController.h */, + 113B6F08153E1F99003CAC38 /* RootViewController.m */, + 113B6F09153E1F99003CAC38 /* RootViewController.xib */, + 113B6EEE153E1F0B003CAC38 /* Supporting Files */, + 47EC965017A19FDD00D685C9 /* Utils.h */, + 47EC965117A19FDD00D685C9 /* Utils.m */, + ); + name = CuteAnimals; + path = .; + sourceTree = ""; + }; + 113B6EEE153E1F0B003CAC38 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 11FCCC211561899800949704 /* Images */, + 113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */, + 113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */, + 47EC965317A1C9EB00D685C9 /* GTM-XXXX */, + F4FE3F5517555573000A691A /* GTM-XXXX.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 11FCCC211561899800949704 /* Images */ = { + isa = PBXGroup; + children = ( + 47EC965917A1CCDE00D685C9 /* Container.png */, + 11FCCC22156189A600949704 /* Bunny-1.jpg */, + 11FCCC23156189A600949704 /* Bunny-2.jpg */, + 11FCCC24156189A600949704 /* Bunny-3.jpg */, + 11FCCC25156189A600949704 /* Cat-1.jpg */, + 11FCCC26156189A600949704 /* Cat-2.jpg */, + 11FCCC27156189A600949704 /* Cat-3.jpg */, + 11FCCC28156189A600949704 /* Cat-4.jpg */, + 11FCCC29156189A600949704 /* Lion-1.jpg */, + 11FCCC2A156189A600949704 /* Lion-2.jpg */, + 11FCCC2B156189A600949704 /* Lion-3.jpg */, + 11FCCC2C156189A600949704 /* Lion-4.jpg */, + 11FCCC2D156189A600949704 /* Monkey-1.jpg */, + 11FCCC2E156189A600949704 /* Monkey-2.jpg */, + 11FCCC2F156189A600949704 /* Monkey-3.jpg */, + 11FCCC30156189A600949704 /* Monkey-4.jpg */, + 11FCCC31156189A600949704 /* Monkey-5.jpg */, + 11FCCC32156189A600949704 /* Tiger-1.jpg */, + 11FCCC33156189A600949704 /* Tiger-2.jpg */, + ); + name = Images; + sourceTree = ""; + }; + F41DE61B171DB8A500960CB7 /* TagManager SDK */ = { + isa = PBXGroup; + children = ( + 88679A8B17A1841C00F476D5 /* libGoogleAnalyticsServices.a */, + 47EC964F17A19FC900D685C9 /* TAGDataLayer.h */, + F41DE61E171DB8A500960CB7 /* TAGContainer.h */, + F431344E174E8F96003C1079 /* TAGContainerOpener.h */, + F431344F174E8F96003C1079 /* TAGLogger.h */, + F41DE620171DB8A500960CB7 /* TAGManager.h */, + ); + name = "TagManager SDK"; + path = ../../Library; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 113B6EE2153E1F0B003CAC38 /* CuteAnimals */ = { + isa = PBXNativeTarget; + buildConfigurationList = 113B6EFB153E1F0B003CAC38 /* Build configuration list for PBXNativeTarget "CuteAnimals" */; + buildPhases = ( + 113B6EDF153E1F0B003CAC38 /* Sources */, + 113B6EE0153E1F0B003CAC38 /* Frameworks */, + 113B6EE1153E1F0B003CAC38 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CuteAnimals; + productName = CuteAnimals; + productReference = 113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 113B6EDA153E1F0B003CAC38 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0460; + }; + buildConfigurationList = 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 113B6ED8153E1F0B003CAC38; + productRefGroup = 113B6EE4153E1F0B003CAC38 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 113B6EE2153E1F0B003CAC38 /* CuteAnimals */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 113B6EE1153E1F0B003CAC38 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 113B6F14153E1F99003CAC38 /* RootViewController.xib in Resources */, + 113B6F15153E1F99003CAC38 /* CategoryViewController_iPad.xib in Resources */, + 113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */, + 11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */, + 11FCCC35156189A600949704 /* Bunny-2.jpg in Resources */, + 11FCCC36156189A600949704 /* Bunny-3.jpg in Resources */, + 11FCCC37156189A600949704 /* Cat-1.jpg in Resources */, + 11FCCC38156189A600949704 /* Cat-2.jpg in Resources */, + 11FCCC39156189A600949704 /* Cat-3.jpg in Resources */, + 11FCCC3A156189A600949704 /* Cat-4.jpg in Resources */, + 11FCCC3B156189A600949704 /* Lion-1.jpg in Resources */, + 11FCCC3C156189A600949704 /* Lion-2.jpg in Resources */, + 11FCCC3D156189A600949704 /* Lion-3.jpg in Resources */, + 11FCCC3E156189A600949704 /* Lion-4.jpg in Resources */, + 11FCCC3F156189A600949704 /* Monkey-1.jpg in Resources */, + 11FCCC40156189A600949704 /* Monkey-2.jpg in Resources */, + 11FCCC41156189A600949704 /* Monkey-3.jpg in Resources */, + 11FCCC42156189A600949704 /* Monkey-4.jpg in Resources */, + 11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */, + 11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */, + 11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */, + F4FE3F5617555573000A691A /* GTM-XXXX.plist in Resources */, + 47EC965417A1C9EB00D685C9 /* GTM-XXXX in Resources */, + 47EC965A17A1CCDE00D685C9 /* Container.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 113B6EDF153E1F0B003CAC38 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 113B6F10153E1F99003CAC38 /* AppDelegate.m in Sources */, + 113B6F11153E1F99003CAC38 /* main.m in Sources */, + 113B6F12153E1F99003CAC38 /* NavController.m in Sources */, + 113B6F13153E1F99003CAC38 /* RootViewController.m in Sources */, + 11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */, + 11FCCC201561834700949704 /* ImageViewController.m in Sources */, + 47EC965217A19FDD00D685C9 /* Utils.m in Sources */, + 47CD7CE717BAA2B1008840A0 /* CustomTagHandler.m in Sources */, + 47CD7CED17BAA447008840A0 /* CustomMacroHandler.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 113B6EF9153E1F0B003CAC38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 113B6EFA153E1F0B003CAC38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 113B6EFC153E1F0B003CAC38 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch"; + INFOPLIST_FILE = "CuteAnimals-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../Library\"", + "\"$(SRCROOT)/../../..\"", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 113B6EFD153E1F0B003CAC38 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch"; + INFOPLIST_FILE = "CuteAnimals-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../../Library\"", + "\"$(SRCROOT)/../../..\"", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 113B6EF9153E1F0B003CAC38 /* Debug */, + 113B6EFA153E1F0B003CAC38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 113B6EFB153E1F0B003CAC38 /* Build configuration list for PBXNativeTarget "CuteAnimals" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 113B6EFC153E1F0B003CAC38 /* Debug */, + 113B6EFD153E1F0B003CAC38 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 113B6EDA153E1F0B003CAC38 /* Project object */; +} diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX new file mode 100644 index 0000000..f236b3a Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX.plist b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX.plist new file mode 100644 index 0000000..b450d8c --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/GTM-XXXX.plist @@ -0,0 +1,10 @@ + + + + + Adjective + Cute + Title + Cute Animals + + diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.h new file mode 100644 index 0000000..cee7fe6 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.h @@ -0,0 +1,22 @@ +// +// ImageViewController.h +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#import + +#import "NavController.h" + +@interface ImageViewController : UIViewController + +@property(nonatomic, retain) NavController *navController; +@property(nonatomic, retain) UIImageView *imageView; + +- (id)initWithNibName:(NSString *)nibNameOrNil + bundle:(NSBundle *)nibBundleOrNil + title:(NSString *)title + image:(UIImage *)image; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.m new file mode 100644 index 0000000..e34af30 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/ImageViewController.m @@ -0,0 +1,71 @@ +// +// ImageViewController.m +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "ImageViewController.h" + +#import "AppDelegate.h" +#import "TAGDataLayer.h" +#import "TAGManager.h" +#import "Utils.h" + +@interface ImageViewController () + +@property(nonatomic, assign) AppDelegate *delegate; + +@end + +@implementation ImageViewController + +@synthesize imageView = _imageView; +@synthesize navController = _navController; + +- (id)initWithNibName:(NSString *)nibNameOrNil + bundle:(NSBundle *)nibBundleOrNil + title:(NSString *)title + image:(UIImage *)image { + self = [super initWithNibName:nibNameOrNil + bundle:nibBundleOrNil]; + if (self) { + self.title = title; + self.imageView = [[UIImageView alloc] initWithImage:image]; + self.imageView.userInteractionEnabled = YES; + self.imageView.contentMode = UIViewContentModeScaleAspectFit; + } + return self; +} + +// Override +- (void)viewDidLoad { + [super viewDidLoad]; + // Put the image_name into the data layer for future use. + [self.delegate.tagManager.dataLayer pushValue:self.title + forKey:@"category_name"]; +} + +// Override +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [Utils pushOpenScreenEventWithScreenName:@"ImageViewScreen"]; +} + +// Override +- (void)viewWillDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + [Utils pushCloseScreenEventWithScreenName:@"ImageViewScreen"]; +} + +// Override +- (BOOL)shouldAutorotateToInterfaceOrientation: + (UIInterfaceOrientation)interfaceOrientation { + return YES; +} + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-1.jpg new file mode 100644 index 0000000..bc737ba Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-1.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-2.jpg new file mode 100644 index 0000000..1f51132 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-2.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-3.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-3.jpg new file mode 100644 index 0000000..0bc89dd Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Bunny-3.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-1.jpg new file mode 100644 index 0000000..a30d8ba Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-1.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-2.jpg new file mode 100644 index 0000000..8bbe219 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-2.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-3.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-3.jpg new file mode 100644 index 0000000..eb6ffa6 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-3.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-4.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-4.jpg new file mode 100644 index 0000000..8bc2496 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Cat-4.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Container.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Container.png new file mode 100644 index 0000000..77624f3 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Container.png differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/CustomTag.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/CustomTag.png new file mode 100644 index 0000000..ac42856 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/CustomTag.png differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-1.jpg new file mode 100644 index 0000000..be042e4 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-1.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-2.jpg new file mode 100644 index 0000000..4f75994 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-2.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-3.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-3.jpg new file mode 100644 index 0000000..01d68c2 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-3.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-4.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-4.jpg new file mode 100644 index 0000000..4ccc3c0 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Lion-4.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-1.jpg new file mode 100644 index 0000000..bdb40ee Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-1.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-2.jpg new file mode 100644 index 0000000..169c000 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-2.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-3.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-3.jpg new file mode 100644 index 0000000..6435ba0 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-3.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-4.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-4.jpg new file mode 100644 index 0000000..8fb9ad6 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-4.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-5.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-5.jpg new file mode 100644 index 0000000..44e3ae0 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Monkey-5.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/NumRefreshesMod5.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/NumRefreshesMod5.png new file mode 100644 index 0000000..0bf79e4 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/NumRefreshesMod5.png differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEvent.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEvent.png new file mode 100644 index 0000000..a2f43bf Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEvent.png differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEventTag.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEventTag.png new file mode 100644 index 0000000..abd1519 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/RefreshEventTag.png differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenClosedTag.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenClosedTag.png new file mode 100644 index 0000000..8fc2a34 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenClosedTag.png differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenOpenTag.png b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenOpenTag.png new file mode 100644 index 0000000..1da15c0 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/ScreenOpenTag.png differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-1.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-1.jpg new file mode 100644 index 0000000..9d5e12e Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-1.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-2.jpg b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-2.jpg new file mode 100644 index 0000000..8469e10 Binary files /dev/null and b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Images/Tiger-2.jpg differ diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.h new file mode 100644 index 0000000..d3f1d06 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.h @@ -0,0 +1,13 @@ +// +// NavController.h +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#import + +@interface NavController : + UINavigationController + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.m new file mode 100644 index 0000000..3e09d1e --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/NavController.m @@ -0,0 +1,35 @@ +// +// NavController.m +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "NavController.h" + +@implementation NavController + +- (BOOL)shouldAutorotateToInterfaceOrientation: + (UIInterfaceOrientation)interfaceOrientation { + return YES; +} + +#pragma mark UINavigationControllerDelegate methods + +- (void)navigationController:(UINavigationController *)navigationController + willShowViewController:(UIViewController *)viewController + animated:(BOOL)animated { + // NSLog(@"navigationController:willShowViewController:animated:"); +} + +- (void)navigationController:(UINavigationController *)navigationController + didShowViewController:(UIViewController *)viewController + animated:(BOOL)animated { + // NSLog(@"navigationController:didShowViewController:animated:"); +} + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/README b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/README new file mode 100644 index 0000000..0e222ac --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/README @@ -0,0 +1,72 @@ +To build this example: + + 1. Open CuteAnimals.xcodeproj in XCode. + 2. Select the desired platform from the scheme in the toolbar (or from the + menu "Product->Destination"). + 3. Run the sample by clicking "Run" in the toolbar (or selecting "Product/Run" + from the menu). + +This sample uses a container ID for a non-existent container: "GTM-XXXX". +There are two corresponding files: "GTM-XXXX" and "GTM-XXXX.plist" which +are used as default containers. + +GTM-XXXX.plist contains default key-value pairs. It is limited to representing +the key-value pairs representable in value collection macros and is ignored if +a GTM-XXXX container is present. + +GTM-XXXX is a full-featured default container. It contains the same default +key-value pairs as GTM-XXXX.plist plus the configuration of how to trigger +Universal Analytics tags and a custom function call tag. Here is a summary of +the container (more details can be seen in the snapshot at Images/Container.png) + 8 Macros: + * "app name": the pre-populated application name macro. + * "app version": the pre-populated app version macro. + * "Cute Animals IOS": a value collection macro containing key/value pairs + as GTM-XXXX.plist. + * "event": an event macro. + * "numRefreshes": a custom function call macro which records how many + times the "Refresh" button is clicked. + * "numRefreshesMod5": a custom function call macro whose value is equal + to "numRefreshes" mod 5. See images/NumRefreshesMod5.png for more + details. + * "screen name": a data layer macro whose data layer variable name + is "screenName". + * "true": the pre-populated constant string macro whose value is equal to + "true". + 5 Rules: + * "CustomTagFires": the value of the event macro is equal to 'custom_tag'. + * "CloseScreenEvent": the value of the event macro is equal to + 'closeScreen'. + * "OpenScreenEvent": the value of the event macro is equal to + 'openScreen'. + * "RefreshEvent": the value of the event macro is equal to 'refresh' and + the value of the numRefreshesMod5 macro is equal to 1. See + images/RefreshEvent.png for more details. + * "Always": the pre-populated rule which is always evaluated to true. + 4 Tags: + * "CustomTag": a custom function call tag with the firing rule: + CustomTagFires is true. See images/CustomTag.png for more details. + * "RefreshEvent": a Universal Analytics tag with the firing rule: + RefreshEvent is true. See Images/RefreshEventTag.png for more details. + * "ScreenClosed": a Universal Analytics tag with the firing rule: + CloseScreenEvent is true. See Images/ScreenClosedTag.png for more + details. + * "ScreenOpen": a Universal Analytics tag with the firing rule: + OpenScreenEvent is true. See Images/ScreenOpenTag.png for more + details. + +Although the app will run and use the values specified in the GTM-XXXX (or +GTM-XXXX.plist if you delete GTM-XXXX from your local machine), there's +no way to dynamically update those values, since this is a non-existent +container. + +To use real values, create a container in the Tag Manager UI and note the +resulting container ID: + + 1. Download the container from the Tag Manager UI and rename it to + GTM-1234 (where GTM-1234 is the container ID for the new container). + Put GTM-1234 into the same directory with GTM-XXXX.plist file. + 2. In AppDelegate.m, update the parameter for openContainerById with the + new container ID. + 3. Optional: delete GTM-XXXX and GTM-XXXX.plist files. + diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.h new file mode 100644 index 0000000..4453d49 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.h @@ -0,0 +1,20 @@ +// +// RootViewController.h +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import + +@interface RootViewController : + UIViewController + +@property(nonatomic, retain) NavController *navController; +@property(nonatomic, retain) IBOutlet UITableView *tableView; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.m new file mode 100644 index 0000000..f8ae396 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.m @@ -0,0 +1,140 @@ +// +// RootViewController.m +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "AppDelegate.h" +#import "RootViewController.h" +#import "CategoryViewController.h" +#import "ImageViewController.h" +#import "TAGContainer.h" +#import "TAGDataLayer.h" +#import "TAGManager.h" +#import "Utils.h" + +@interface RootViewController () + +@property(nonatomic, retain) NSArray *items; +@property(nonatomic, assign) AppDelegate *delegate; + +@end + +@implementation RootViewController + +@synthesize tableView = _tableView; +@synthesize navController = _navController; +@synthesize items = _items; +@synthesize delegate = _delegate; + +- (id)initWithNibName:(NSString *)nibName + bundle:(NSBundle *)nibBundle { + self = [super initWithNibName:nibName + bundle:nibBundle]; + if (self) { + self.delegate = [UIApplication sharedApplication].delegate; + self.title = [self.delegate.container stringForKey:@"Title"]; + } + return self; +} + +- (void)refresh { + [self.delegate.container refresh]; + // Push a "refresh" event. Tags that match that event will fire. + [self.delegate.tagManager.dataLayer pushValue:@"refresh" forKey:@"event"]; + // Push the "custom tag" event to trigger firing a custom function call tag. + [self.delegate.tagManager.dataLayer pushValue:@"custom_tag" forKey:@"event"]; +} + +// Override +- (void)viewDidLoad { + [super viewDidLoad]; + self.navigationItem.rightBarButtonItem = + [[UIBarButtonItem alloc] initWithTitle:@"Refresh" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(refresh)]; + self.items = + [[self.delegate.images allKeys] + sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; + [self.tableView reloadData]; +} + +// Override +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + [Utils pushOpenScreenEventWithScreenName:@"MainScreen"]; +} + +// Override +- (void)viewWillDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + [Utils pushCloseScreenEventWithScreenName:@"MainScreen"]; +} + +// Override +- (BOOL)shouldAutorotateToInterfaceOrientation: + (UIInterfaceOrientation)interfaceOrientation { + return NO; +} + +#pragma mark UITableViewDelegate methods + +- (void)tableView:(UITableView *)tableView + didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:NO]; + if (indexPath.row < 0 || indexPath.row >= self.items.count) { + NSLog(@"IndexPath %d out of bounds!", indexPath.row); + return; + } + + NSString *category = [self.items objectAtIndex:indexPath.row]; + NSString *nib = + ([[UIDevice currentDevice] userInterfaceIdiom] == + UIUserInterfaceIdiomPhone) ? + @"CategoryViewController_iPhone" : @"CategoryViewController_iPad"; + CategoryViewController *categoryController = + [[CategoryViewController alloc] initWithNibName:nib + bundle:nil + category:category]; + categoryController.navController = self.navController; + [self.navController pushViewController:categoryController animated:YES]; +} + +#pragma mark UITableViewDataSource methods + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.items.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.row < 0 || indexPath.row >= self.items.count) { + NSLog(@"IndexPath %d out of bounds!", indexPath.row); + return nil; + } + NSString *category = [self.items objectAtIndex:indexPath.row]; + + static NSString *CellId = @"Cell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle + reuseIdentifier:CellId]; + } + + NSString *adjective = [self.delegate.container stringForKey:@"Adjective"]; + NSString *label = [NSString stringWithFormat:@"%@ %@ Pictures!", adjective, category]; + cell.textLabel.text = label; + cell.textLabel.font = [UIFont systemFontOfSize:14]; + NSUInteger imageCount = [(NSArray *)[self.delegate.images objectForKey:category] count]; + cell.detailTextLabel.text = [NSString stringWithFormat:@"%u image(s).", imageCount]; + cell.detailTextLabel.font = [UIFont systemFontOfSize:12]; + return cell; +} + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.xib b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.xib new file mode 100644 index 0000000..e9debf9 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/RootViewController.xib @@ -0,0 +1,193 @@ + + + + 1296 + 11D50b + 2182 + 1138.32 + 568.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1181 + + + IBProxyObject + IBUIView + IBUITableView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 292 + + + + 274 + {768, 1004} + + + _NS:9 + + 3 + MQA + + YES + IBIPadFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + {{0, 20}, {768, 1004}} + + + + 3 + MQA + + 2 + + + NO + + 2 + + IBIPadFramework + + + + + + + view + + + + 3 + + + + tableView + + + + 7 + + + + dataSource + + + + 5 + + + + delegate + + + + 6 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + + + + + + 4 + + + + + + + RootViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 7 + + + + + RootViewController + UIViewController + + tableView + UITableView + + + tableView + + tableView + UITableView + + + + IBProjectSource + ./Classes/RootViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + 3 + 1181 + + diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.h new file mode 100644 index 0000000..d45e23a --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.h @@ -0,0 +1,24 @@ +// +// Utils.h +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#import + +@interface Utils : NSObject + +/** + * Push an "openScreen" event with the given screen name. Tags that + * match that event will fire. + */ ++ (void)pushOpenScreenEventWithScreenName:(NSString *)screenName; + +/** + * Push a "closeScreen" event with the given screen name. Tags that + * match that event will fire. + */ ++ (void)pushCloseScreenEventWithScreenName:(NSString *)screenName; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.m new file mode 100644 index 0000000..f1b2306 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/Utils.m @@ -0,0 +1,31 @@ +// +// Utils.m +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "AppDelegate.h" +#import "TAGDataLayer.h" +#import "TAGManager.h" +#import "Utils.h" + +@implementation Utils + ++ (void)pushOpenScreenEventWithScreenName:(NSString *)screenName { + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + [delegate.tagManager.dataLayer push:@{@"event": @"openScreen", + @"screenName": screenName}]; +} + ++ (void)pushCloseScreenEventWithScreenName:(NSString *)screenName { + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + [delegate.tagManager.dataLayer push:@{@"event": @"closeScreen", + @"screenName": screenName}]; +} + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/main.m b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/main.m new file mode 100644 index 0000000..6c23d78 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Examples/CuteAnimals/main.m @@ -0,0 +1,21 @@ +// +// main.m +// CuteAnimals +// +// Copyright 2013 Google, Inc. All rights reserved. +// + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import + +#import "AppDelegate.h" + +int main(int argc, char *argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, + NSStringFromClass([AppDelegate class])); + } +} diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainer.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainer.h new file mode 100644 index 0000000..d123389 --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainer.h @@ -0,0 +1,252 @@ +// Copyright 2013 Google Inc. All rights reserved. +/** @file */ + +#import + +@class TAGContainer; + +/** + * Refresh types for container callback. + */ +typedef enum { + /** Refresh from a saved container. */ + kTAGContainerCallbackRefreshTypeSaved, + + /** Refresh from the network. */ + kTAGContainerCallbackRefreshTypeNetwork, +} TAGContainerCallbackRefreshType; + +/** + * Ways in which a refresh can fail. + */ +typedef enum { + /** There is no saved container. */ + kTAGContainerCallbackRefreshFailureNoSavedContainer, + + /** An I/O error prevented refreshing the container. */ + kTAGContainerCallbackRefreshFailureIoError, + + /** No network is available. */ + kTAGContainerCallbackRefreshFailureNoNetwork, + + /** A network error has occurred. */ + kTAGContainerCallbackRefreshFailureNetworkError, + + /** An error on the server. */ + kTAGContainerCallbackRefreshFailureServerError, + + /** An error that cannot be categorized. */ + kTAGContainerCallbackRefreshFailureUnknownError +} TAGContainerCallbackRefreshFailure; + +/** + * A protocol implemented by the application to execute a custom tag. + */ +@protocol TAGFunctionCallTagHandler + /** + * Handler is given the tag name and a dictionary of named parameters. + * + * @param tagName The same name by which the handler was registered. It + * is provided as a convenience to allow a single handler to be registered + * for multiple function call tags. + * @param parameters The named parameters for the function call. The + * dictionary may contain NSString, NSNumber + * (double, int, or boolean), NSDictionary, or + * NSArray. + * @return The evaluated result, which can be an NSString or + * NSNumber. + */ +- (void)execute:(NSString *)tagName parameters:(NSDictionary *)parameters; + +@end + +/** + * A protocol implemented by the application to calculate the value of a + * function call macro. + */ +@protocol TAGFunctionCallMacroHandler +/** + * Returns an object which is the calculated value of the macro. + * Handler is given the macro name and a dictionary of named parameters. + * + * @param macroName The same name by which the handler was registered. It + * is provided as a convenience to allow a single handler to be registered + * for multiple function call macros. + * @param parameters The named parameters for the function call. The + * dictionary may contain NSString, NSNumber + * (double, int, or boolean), NSDictionary, or + * NSArray. + * @return The evaluated result, which can be an NSString or + * NSNumber. + */ +- (id)valueForMacro:(NSString *)macroName parameters:(NSDictionary *)parameters; + +@end + +/** + * A protocol that a client may implement to receive + * information when the contents of the container has been successfully + * loaded or failed to load. + * + * You may rely on the fact that + * TAGContainerCallback::containerRefreshBegin:refreshType: + * will be called for a given @ref TAGContainerCallbackRefreshType before its + * associated TAGContainerCallback::containerRefreshSuccess:refreshType: or + * TAGContainerCallback::containerRefreshFailure:failure:refreshType:, but + * shouldn't make any other assumptions about ordering. In particular, there + * may be two refreshes outstanding at once + * (both @ref kTAGContainerCallbackRefreshTypeSaved and + * @ref kTAGContainerCallbackRefreshTypeNetwork), or a + * @ref kTAGContainerCallbackRefreshTypeSaved refresh + * may occur before a @ref kTAGContainerCallbackRefreshTypeNetwork refresh. + */ +@protocol TAGContainerCallback + +/** + * Called before the refresh is about to begin. + * + * @param container The container being refreshed. + * @param refreshType The type of refresh which is starting. + */ +- (void)containerRefreshBegin:(TAGContainer *)container + refreshType:(TAGContainerCallbackRefreshType)refreshType; + +/** + * Called when a refresh has successfully completed for the given refresh type. + * + * @param container The container being refreshed. + * @param refreshType The type of refresh which completed successfully. + */ +- (void)containerRefreshSuccess:(TAGContainer *)container + refreshType:(TAGContainerCallbackRefreshType)refreshType; + +/** + * Called when a refresh has failed to complete for the given refresh type. + * + * @param container The container being refreshed. + * @param failure The reason for the refresh failure. + * @param refreshType The type of refresh which failed. + */ +- (void)containerRefreshFailure:(TAGContainer *)container + failure:(TAGContainerCallbackRefreshFailure)failure + refreshType:(TAGContainerCallbackRefreshType)refreshType; + +@end + +/** + * A class that provides access to container values. + * Container objects must be created via @ref TAGManager. + * Once a container is created, it can be queried for key values which + * may depend on rules established for the container. + * A container is automatically refreshed periodically (every 12 hours), but + * can also be manually refreshed with TAGContainer::refresh. + */ +@interface TAGContainer : NSObject + +/** + * The ID for this container. + */ +@property(readonly, nonatomic, copy) NSString *containerId; + +/** + * The last time (in milliseconds since midnight Jan 1, 1970 UTC) that this + * container was refreshed from the network. + */ +@property(atomic, readonly) double lastRefreshTime; + +// @cond +/** + * Containers should be instantiated through TAGManager or TAGContainerOpener. + */ +- (id)init __attribute__((unavailable)); +// @endcond + +/** + * Returns a BOOL representing the configuration value for the + * given key. If the container has no value for this key, NO will be returned. + * + * @param key The key to lookup for the configuration value. + */ +- (BOOL)booleanForKey:(NSString *)key; + +/** + * Returns a double representing the configuration value for the + * given key. If the container has no value for this key, 0.0 will be returned. + * + * @param key The key to lookup for the configuration value. + */ +- (double)doubleForKey:(NSString *)key; + +/** + * Returns an int64_t representing the configuration value for the + * given key. If the container has no value for this key, 0 will be returned. + * + * @param key The key to lookup for the configuration value. + */ +- (int64_t)int64ForKey:(NSString *)key; + +/** + * Returns an NSString to represent the configuration value for the + * given key. If the container has no value for this key, an empty string + * will be returned. + * + * @param key The key to lookup for the configuration value. + */ +- (NSString *)stringForKey:(NSString *)key; + +/** + * Requests that this container be refreshed from the network. + * This call is asynchronous, so the refresh may take place on another thread. + */ +- (void)refresh; + +/** + * Closes this container so that it will no longer be refreshed. + * After closing, don't make any other calls to the container. + */ +- (void)close; + +/** + * Returns whether this is a default container, or one refreshed from the + * server. + */ +- (BOOL)isDefault; + +/** + * Registers the given macro handler to handle a given function call macro. + * + * @param handler The handler for the macro. If the parameter is + * nil, the method unregisters any existing handler for that macro. + * @param macroName The name of the macro which is being registered. + */ +- (void)registerFunctionCallMacroHandler:(id)handler + forMacro:(NSString *)macroName; + +/** + * Given the name of a function call macro, returns the handler registered for + * the macro. + * + * @return The handler registered for the macro. + */ +- (id) + functionCallMacroHandlerForMacro:(NSString *)functionCallMacroName; + +/** + * Registers the given tag handler to handle a given function call tag. + * + * @param handler The handler for the tag. If the parameter is + * nil, the method unregisters any existing handler for that tag. + * @param tagName The name of the tag which is being registered. + */ +- (void)registerFunctionCallTagHandler:(id)handler + forTag:(NSString *)tagName; + +/** + * Given the name of a function call tag, returns the handler registered for + * the tag. + * + * @return The handler registered for the tag. + */ +- (id)functionCallTagHandlerForTag:(NSString *)functionCallTagName; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainerOpener.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainerOpener.h new file mode 100644 index 0000000..113efbe --- /dev/null +++ b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGContainerOpener.h @@ -0,0 +1,218 @@ +// Copyright 2013 Google Inc. All rights reserved. +/** @file */ + +#import + +@class TAGContainer; +@class TAGManager; + +/** The choices of how to open a container. */ +typedef enum { + /** + * Specifies that opening a non-default container (saved or retreived from + * the network) is preferred, including stale containers (ones that + * haven't been recently refreshed from the server). + */ + kTAGOpenTypePreferNonDefault, + /** + * Specifies that opening a fresh version of the container (one that has been + * recently refreshed from the server) is preferred. + */ + kTAGOpenTypePreferFresh +} TAGOpenType; + +/** + * A class that implements this protocol waits for the container to be available and + * provides access to the container. + */ +@protocol TAGContainerFuture + +/** + * Waits for the container to be available and returns the requested container. + * This method will block until the container is available. The dispatch queue + * will continue to run while the call is blocked. + * + * @return The requested container. + * @see TAGContainerOpener::openContainerWithId:tagManager:openType:timeout: + */ +- (TAGContainer *)get; + +/** + * Returns whether the container is available. This container could be the + * default container. To check if it is the default container, use + * TAGContainer::isDefault. + * + * @return YES if the container is available. NO if TAGContainerFuture::get: + * will block and wait for the container to be available. + */ +- (BOOL)isDone; + +@end + +/** + * A class that implements this protocol will receive a notification when a + * container is available for use. Developers can pass an instance of a class that implements + * this protocol to + * TAGContainerOpener::openContainerWithId:tagManager:openType:timeout:notifier: + */ +@protocol TAGContainerOpenerNotifier + +/** + * Called when the container is available. + * + * @param container The requested container. + */ +- (void)containerAvailable:(TAGContainer *)container; + +@end + +/** + * A helper class for opening containers. + * + * This is a wrapper around TAGManager::openContainerById:callback: method for + * callers that provides support for timeouts. + * + * The following is a sample showing waiting up to 0.1 seconds for the container + * to be loaded before reverting to the default container: + * +
+ *     NSTimeInterval timeout = 0.1;
+ *     TagManager *tagManager = [TagManager instance];
+ *     TAGContainerFuture *future =
+ *         [TAGContainerOpener openContainerWithId:@"GTM-XXXX"
+ *                                      tagManager:tagManager
+ *                                        openType:kTAGOpenTypePreferNonDefault
+ *                                         timeout:&timeout];
+ *     TAGContainer *container = [future get];
+ 
+ * + * If the caller wants to be asynchronously notified when the container is + * available but wants to manually specify the timeout to 0.5 seconds, then the + * caller should subclass TAGContainerOpenerNotifier, make the call to + * TAGContainerOpener::openContainerWithId:tagManager:openType:timeout:notifier: + * with timeout set to 0.5, and add the implementation to + * TAGContainerOpenerNotifier::containerAvailable: for handling the container + * available notification. + */ +@interface TAGContainerOpener : NSObject + +// @cond +/** + * TAGContainerOpener should not be instantiated directly. Use + * openContainerWithId:tagManager:timeout:openType: + * or openContainerWithId:tagManager::timeout:openType:notifier:. + */ +- (id)init __attribute__((unavailable)); +// @endcond + +/** + * Waits up to timeout seconds for a container to be loaded + * (non default or fresh depending on the specified openType) + * and returns a TAGContainerFuture. + * + *

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

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

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

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

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

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

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

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

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

If you call one of the openContainer methods a second time with a + * given containerId, the same container returned from the + * previous call will be passed into the notifier as soon as + * it's available. + * + * @param containerId The ID of the container to load. + * @param tagManager The TAGManager used for getting the container. + * @param openType The choice of how to open the container. + * @param timeout The maximum number of seconds to wait to load the container + * from the saved store. If nil, TAGContainerOpener::defaultTimeout will be + * used. + * @param notifier An optional notifier which will be called when the + * container is available. It will be called with the fresh container, if + * available and loaded before the timeout; otherwise it'll be called with + * a non-fresh container. Note that the notifier may be called from a + * different thread. + */ ++ (void) openContainerWithId:(NSString *)containerId + tagManager:(TAGManager *)tagManager + openType:(TAGOpenType)openType + timeout:(NSTimeInterval *)timeout + notifier:(id)notifier; + +/** + * Returns the default timeout for requesting the container. + * + * @return The default timeout in seconds. + */ ++ (NSTimeInterval)defaultTimeout; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGDataLayer.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGDataLayer.h 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). + *

+ * So, after executing: +

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

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

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

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

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

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

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

The key can can have embedded periods. For example: + * a key of "a.b.c" returns the value of the "c" key in + * the dictionary with key "b" in the dictionary with key "a" in the model. + */ +- (NSObject*)get:(NSString*)key; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGLogger.h b/Frameworks/Google Analytics SDK/GoogleTagManager/Library/TAGLogger.h 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: +

+ *      TAGContainer *container =
+ *          [[TAGManager instance] openContainerById:myContainerId];
+ *      NSString *value = [container stringForKey:@"myKey"];
+ *
+ *      TAGDataLayer *dataLayer =
+ *          [[TAGManager instance] dataLayer];
+ *      [dataLayer push:@{@"event": @"openScreen",
+ *                        @"screenName": @"Main Page"}];
+
+ * + * A container is a collection of macros, rules, and tags. It is created within + * the GTM application (http://www.google.com/tagmanager), and is assigned + * a container ID. This container ID is the one used within this API. + * + * The TAGContainer class provides methods for retrieving + * macro values given the macro name. The routines + * TAGContainer::booleanForKey:, TAGContainer::doubleForKey:, + * TAGContainer::int64ForKey:, TAGContainer::stringForKey: return the current + * value for the value collection macro name, depending on the rules associated with that macro + * in the container. + * + * As an example, if your container has a value collection macro with a key "speed" whose + * value is 32, and the enabling rule is Language is "en"; and another value collection macro + * with a key "speed" whose value is 45, and the enabling rule is Language is not "en", + * then making the following call: + * +
+ *     [container longForKey:\@"speed"]
+ 
+ * + * will return either 32 if the current language of the device is English, or + * 45 otherwise. + + * The data layer is a map holding generic information about the application. + * The TAGDataLayer class provides methods to push and retrieve data from + * the data layer. Pushing an event key to the data layer will + * cause tags that match this event to fire. + * + * An initial version of the container is bundled with the application. It + * should be placed as a resource in the bundle with name + * containerId where containerId is the same container + * ID you will use within this API. When you call + * TAGManager::openContainerById:callback:, the container will be + * returned with those bundled rules/tags/macros. You will create the container + * in the UI and use the Download button to download it. + * + * You can modify the container in the UI and publish a new version. In that + * case, the next time the mobile app refreshes the container from the network + * (currently every 12 hours), + * it will get that new version. When you call one of the get... routines, the + * value will be computed using the most recent rules. + * + * The downloaded container is saved locally. When you call + * TAGManager::openContainerById:callback:, it will first load the default + * container, and will then asynchronously load any saved container. If none is + * found or if it is older than 12 hours, it will try to retrieve a newer version + * from the network. You can find the status of those asynchronous loads by + * passing a TAGContainerCallback to TAGManager::openContainerById:callback:. + * + * Sometimes you may want to block until either a non-default container is + * available, or until a recent fresh container is available. You can do that + * by using the callbacks in TAGManager::openContainerById:callback: or use + * TAGContainerOpener. + * + * When you are finished with a container, call TAGContainer::close. + */ +@interface TAGManager : NSObject + +/** + * The logger to use for Google Tag Manager SDK. By default, Google Tag Manager + * logs error/warning messages and ignores info/debug/verbose messages. + * You can use your own customized logger by setting this property. + */ +@property(nonatomic, strong) id logger; + +/** + * The refresh mode used for Google Tag Manager SDK. Setting this to + * @ref kTAGRefreshModeDefaultContainer allows the refresh + * method to use only the default container for development purposes. Default is + * @ref kTAGRefreshModeStandard. + */ +@property(nonatomic) TAGRefreshMode refreshMode; + +/** + * Call TAGDataLayer::push: method to push events and other data. + */ +@property(nonatomic, readonly, strong) TAGDataLayer *dataLayer; + +/** + * Returns a container. + * Usually the returned container will be empty, but the loading will happen + * asynchronously, so the returned container may be refreshed before it + * is returned, after it is returned, or may never be refreshed if, for example, + * there is no network connection during the lifetime of the container. + * + * Callback will be called as various things happen for + * the container. At a minimum, TAGManager::openContainerById:callback: will + * attempt to load a saved version of the container. If there is no saved + * version, or if the saved version is out of date, attempt will be made to + * load from the network. + * + * If TAGManager::openContainerById:callback: is called a second time for a + * given containerId, nil will be returned unless + * the previous opened container has already been closed. + * + * @param containerId The ID of the container to open. + * @param callback An object whose various methods will be called during the + * loading process. Note that the methods may be called from different + * threads. In addition, they may be called before + * TAGManager::openContainerById:callback: returns. + * @return The opened container. + */ +- (TAGContainer *)openContainerById:(NSString *)containerId + callback:(id )callback; + +/** + * Returns the container associated with the given containerId; + * returns nil if the container is not already open. + */ +- (TAGContainer *)getContainerById:(NSString *)containerId; + +/** + * Previews the app with the input url. + * + * The valid url must start with the following: +
+ * tagmanager.c.\://preview/p?id=
+
+ * where <app_name> is the application name. + * + * @param url The preview url. + * @return YES if the url is a valid tagmanager preview url. + */ +- (BOOL)previewWithUrl:(NSURL *)url; + +/** + * Gets the singleton instance of the TAGManager class, creating it if + * necessary. + * + * @return The singleton instance of TAGManager. + */ ++ (TAGManager *)instance; + +@end diff --git a/Frameworks/Google Analytics SDK/GoogleTagManager/Readme.txt b/Frameworks/Google Analytics SDK/GoogleTagManager/Readme.txt 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:39Z CFBundleDevelopmentRegion en CFBundleDisplayName @@ -23,7 +23,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 13.3 + 13.5 CFBundleSignature ???? CFBundleURLTypes @@ -39,7 +39,7 @@ CFBundleVersion - 152 + 154 LSRequiresIPhoneOS UIPrerenderedIcon 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",