#324: update GA to latest version to fix problem with SDK 7
|
@ -1 +1 @@
|
||||||
Subproject commit 2d446269d8a8095a6a509e2ddd6d20ce7256001e
|
Subproject commit 525240f6ed44b79e1d7ae8cd473ac6523aca9630
|
|
@ -1,762 +0,0 @@
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
|
|
||||||
<title>GAI Class Reference</title>
|
|
||||||
<meta id="xcode-display" name="xcode-display" content="render"/>
|
|
||||||
<meta name="viewport" content="width=550" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
|
|
||||||
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
|
|
||||||
<meta name="generator" content="appledoc 2.1 (build 858)" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header id="top_header">
|
|
||||||
<div id="library" class="hideInXcode">
|
|
||||||
<h1><a id="libraryTitle" href="../index.html">Google Analytics SDK for iOS </a></h1>
|
|
||||||
<a id="developerHome" href="../index.html">Google Inc</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="title" role="banner">
|
|
||||||
<h1 class="hideInXcode">GAI Class Reference</h1>
|
|
||||||
</div>
|
|
||||||
<ul id="headerButtons" role="toolbar">
|
|
||||||
<li id="toc_button">
|
|
||||||
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
|
|
||||||
</li>
|
|
||||||
<li id="jumpto_button" role="navigation">
|
|
||||||
<select id="jumpTo">
|
|
||||||
<option value="top">Jump To…</option>
|
|
||||||
|
|
||||||
<option value="overview">Overview</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="tasks">Tasks</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="properties">Properties</option>
|
|
||||||
|
|
||||||
<option value="//api/name/debug"> debug</option>
|
|
||||||
|
|
||||||
<option value="//api/name/defaultTracker"> defaultTracker</option>
|
|
||||||
|
|
||||||
<option value="//api/name/dispatchInterval"> dispatchInterval</option>
|
|
||||||
|
|
||||||
<option value="//api/name/optOut"> optOut</option>
|
|
||||||
|
|
||||||
<option value="//api/name/trackUncaughtExceptions"> trackUncaughtExceptions</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="class_methods">Class Methods</option>
|
|
||||||
|
|
||||||
<option value="//api/name/sharedInstance"> + sharedInstance</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="instance_methods">Instance Methods</option>
|
|
||||||
|
|
||||||
<option value="//api/name/dispatch"> - dispatch</option>
|
|
||||||
|
|
||||||
<option value="//api/name/trackerWithTrackingId:"> - trackerWithTrackingId:</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</select>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</header>
|
|
||||||
<nav id="tocContainer" class="isShowingTOC">
|
|
||||||
<ul id="toc" role="tree">
|
|
||||||
|
|
||||||
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/debug">debug</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/defaultTracker">defaultTracker</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/dispatchInterval">dispatchInterval</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/optOut">optOut</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/trackUncaughtExceptions">trackUncaughtExceptions</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#class_methods">Class Methods</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/sharedInstance">sharedInstance</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/dispatch">dispatch</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/trackerWithTrackingId:">trackerWithTrackingId:</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<article>
|
|
||||||
<div id="contents" class="isShowingTOC" role="main">
|
|
||||||
<a title="GAI Class Reference" name="top"></a>
|
|
||||||
<div class="main-navigation navigation-top">
|
|
||||||
<ul>
|
|
||||||
<li><a href="../index.html">Index</a></li>
|
|
||||||
<li><a href="../hierarchy.html">Hierarchy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="header">
|
|
||||||
<div class="section-header">
|
|
||||||
<h1 class="title title-header">GAI Class Reference</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="container">
|
|
||||||
|
|
||||||
<div class="section section-specification"><table cellspacing="0"><tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="specification-title">Inherits from</td>
|
|
||||||
<td class="specification-value">NSObject</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td class="specification-title">Declared in</td>
|
|
||||||
<td class="specification-value">GAI.h</td>
|
|
||||||
</tr>
|
|
||||||
</tbody></table></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-overview">
|
|
||||||
<a title="Overview" name="overview"></a>
|
|
||||||
<h2 class="subtitle subtitle-overview">Overview</h2>
|
|
||||||
<p>Google Analytics iOS top-level class. Provides facilities to create trackers
|
|
||||||
and set behaviorial flags.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-tasks">
|
|
||||||
<a title="Tasks" name="tasks"></a>
|
|
||||||
<h2 class="subtitle subtitle-tasks">Tasks</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul class="task-list">
|
|
||||||
<li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/defaultTracker"> defaultTracker</a></code>
|
|
||||||
<span class="tooltip"><p>For convenience, this class exposes a default tracker instance.
|
|
||||||
This is initialized to <code>nil</code> and will be set to the first tracker that is
|
|
||||||
instantiated in <a href="#//api/name/trackerWithTrackingId:">trackerWithTrackingId:</a>. It may be overridden as desired.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/debug"> debug</a></code>
|
|
||||||
<span class="tooltip"><p>If true, Google Analytics debug messages will be logged with <code>NSLog()</code>. This is
|
|
||||||
useful for debugging calls to the Google Analytics SDK.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/optOut"> optOut</a></code>
|
|
||||||
<span class="tooltip"><p>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.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/dispatchInterval"> dispatchInterval</a></code>
|
|
||||||
<span class="tooltip"><p>If this value is negative, tracking information must be sent manually by
|
|
||||||
calling <a href="#//api/name/dispatch">dispatch</a>. 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.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/trackUncaughtExceptions"> trackUncaughtExceptions</a></code>
|
|
||||||
<span class="tooltip"><p>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 <a href="#//api/name/defaultTracker">defaultTracker</a>. If <a href="#//api/name/defaultTracker">defaultTracker</a> is not
|
|
||||||
<code>nil</code>, this function will track the exception on the tracker and attempt to
|
|
||||||
<a href="#//api/name/dispatch">dispatch</a> 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.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/sharedInstance">+ sharedInstance</a></code>
|
|
||||||
<span class="tooltip"><p>Get the shared instance of the Google Analytics for iOS class.</p></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/trackerWithTrackingId:">– trackerWithTrackingId:</a></code>
|
|
||||||
<span class="tooltip"><p>Create or retrieve a <a href="../Protocols/GAITracker.html">GAITracker</a> 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 <a href="#//api/name/defaultTracker">defaultTracker</a> is not set, it will be set to the tracker instance
|
|
||||||
returned here.</p></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/dispatch">– dispatch</a></code>
|
|
||||||
<span class="tooltip"><p>Dispatches any pending tracking information.</p></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Properties" name="properties"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Properties</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/debug" title="debug"></a>
|
|
||||||
<h3 class="subsubtitle method-title">debug</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>If true, Google Analytics debug messages will be logged with <code>NSLog()</code>. This is
|
|
||||||
useful for debugging calls to the Google Analytics SDK.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL debug</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection discussion-section">
|
|
||||||
<h4 class="method-subtitle">Discussion</h4>
|
|
||||||
<p>By default, this flag is set to <code>NO</code>.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAI.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/defaultTracker" title="defaultTracker"></a>
|
|
||||||
<h3 class="subsubtitle method-title">defaultTracker</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>For convenience, this class exposes a default tracker instance.
|
|
||||||
This is initialized to <code>nil</code> and will be set to the first tracker that is
|
|
||||||
instantiated in <a href="#//api/name/trackerWithTrackingId:">trackerWithTrackingId:</a>. It may be overridden as desired.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) id<GAITracker> defaultTracker</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection discussion-section">
|
|
||||||
<h4 class="method-subtitle">Discussion</h4>
|
|
||||||
<p>The <a href="../Classes/GAITrackedViewController.html">GAITrackedViewController</a> class will, by default, use this tracker instance.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAI.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/dispatchInterval" title="dispatchInterval"></a>
|
|
||||||
<h3 class="subsubtitle method-title">dispatchInterval</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>If this value is negative, tracking information must be sent manually by
|
|
||||||
calling <a href="#//api/name/dispatch">dispatch</a>. 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.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) NSTimeInterval dispatchInterval</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection discussion-section">
|
|
||||||
<h4 class="method-subtitle">Discussion</h4>
|
|
||||||
<p>When the dispatchInterval is non-zero, setting it to zero will cause any queued
|
|
||||||
tracking information to be sent immediately.</p>
|
|
||||||
|
|
||||||
<p>By default, this is set to <code>120</code>, which indicates tracking information should
|
|
||||||
be dispatched automatically every 120 seconds.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAI.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/optOut" title="optOut"></a>
|
|
||||||
<h3 class="subsubtitle method-title">optOut</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>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.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL optOut</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection discussion-section">
|
|
||||||
<h4 class="method-subtitle">Discussion</h4>
|
|
||||||
<p>This is set to <code>NO</code> the first time the Google Analytics SDK is used on a
|
|
||||||
device, and is persisted thereafter.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAI.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/trackUncaughtExceptions" title="trackUncaughtExceptions"></a>
|
|
||||||
<h3 class="subsubtitle method-title">trackUncaughtExceptions</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>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 <a href="#//api/name/defaultTracker">defaultTracker</a>. If <a href="#//api/name/defaultTracker">defaultTracker</a> is not
|
|
||||||
<code>nil</code>, this function will track the exception on the tracker and attempt to
|
|
||||||
<a href="#//api/name/dispatch">dispatch</a> 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.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) BOOL trackUncaughtExceptions</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAI.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Class Methods" name="class_methods"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Class Methods</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/sharedInstance" title="sharedInstance"></a>
|
|
||||||
<h3 class="subsubtitle method-title">sharedInstance</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Get the shared instance of the Google Analytics for iOS class.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>+ (GAI *)sharedInstance</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAI.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Instance Methods" name="instance_methods"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/dispatch" title="dispatch"></a>
|
|
||||||
<h3 class="subsubtitle method-title">dispatch</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Dispatches any pending tracking information.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>- (void)dispatch</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection discussion-section">
|
|
||||||
<h4 class="method-subtitle">Discussion</h4>
|
|
||||||
<p>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 <a href="#//api/name/dispatchInterval">dispatchInterval</a>, and can be used in conjuntion with
|
|
||||||
periodic dispatch.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAI.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/trackerWithTrackingId:" title="trackerWithTrackingId:"></a>
|
|
||||||
<h3 class="subsubtitle method-title">trackerWithTrackingId:</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Create or retrieve a <a href="../Protocols/GAITracker.html">GAITracker</a> 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 <a href="#//api/name/defaultTracker">defaultTracker</a> is not set, it will be set to the tracker instance
|
|
||||||
returned here.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>- (id<GAITracker>)trackerWithTrackingId:(NSString *)<em>trackingId</em></code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection arguments-section parameters">
|
|
||||||
<h4 class="method-subtitle parameter-title">Parameters</h4>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>trackingId</em></dt>
|
|
||||||
<dd><p>The tracking ID (a string that begins with “UA-”). Must not
|
|
||||||
be <code>nil</code> or empty.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection return">
|
|
||||||
<h4 class="method-subtitle parameter-title">Return Value</h4>
|
|
||||||
<p>A <a href="../Protocols/GAITracker.html">GAITracker</a> 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.</p>
|
|
||||||
|
|
||||||
<p>If an error occurs or the tracker ID is not valid, this method will return
|
|
||||||
<code>nil</code>.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAI.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="main-navigation navigation-bottom">
|
|
||||||
<ul>
|
|
||||||
<li><a href="../index.html">Index</a></li>
|
|
||||||
<li><a href="../hierarchy.html">Hierarchy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
<hr />
|
|
||||||
<div class="footer-copyright">
|
|
||||||
<p><span class="copyright">© 2013 Google Inc. All rights reserved. (Last updated: 2013-01-08)</span><br />
|
|
||||||
|
|
||||||
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.1 (build 858)</a>.</span></p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
<script type="text/javascript">
|
|
||||||
function jumpToChange()
|
|
||||||
{
|
|
||||||
window.location.hash = this.options[this.selectedIndex].value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTOC()
|
|
||||||
{
|
|
||||||
var contents = document.getElementById('contents');
|
|
||||||
var tocContainer = document.getElementById('tocContainer');
|
|
||||||
|
|
||||||
if (this.getAttribute('class') == 'open')
|
|
||||||
{
|
|
||||||
this.setAttribute('class', '');
|
|
||||||
contents.setAttribute('class', '');
|
|
||||||
tocContainer.setAttribute('class', '');
|
|
||||||
|
|
||||||
window.name = "hideTOC";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.setAttribute('class', 'open');
|
|
||||||
contents.setAttribute('class', 'isShowingTOC');
|
|
||||||
tocContainer.setAttribute('class', 'isShowingTOC');
|
|
||||||
|
|
||||||
window.name = "";
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTOCEntryChildren(e)
|
|
||||||
{
|
|
||||||
e.stopPropagation();
|
|
||||||
var currentClass = this.getAttribute('class');
|
|
||||||
if (currentClass == 'children') {
|
|
||||||
this.setAttribute('class', 'children open');
|
|
||||||
}
|
|
||||||
else if (currentClass == 'children open') {
|
|
||||||
this.setAttribute('class', 'children');
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tocEntryClick(e)
|
|
||||||
{
|
|
||||||
e.stopPropagation();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function init()
|
|
||||||
{
|
|
||||||
var selectElement = document.getElementById('jumpTo');
|
|
||||||
selectElement.addEventListener('change', jumpToChange, false);
|
|
||||||
|
|
||||||
var tocButton = document.getElementById('table_of_contents');
|
|
||||||
tocButton.addEventListener('click', toggleTOC, false);
|
|
||||||
|
|
||||||
var taskTreeItem = document.getElementById('task_treeitem');
|
|
||||||
if (taskTreeItem.getElementsByTagName('li').length > 0)
|
|
||||||
{
|
|
||||||
taskTreeItem.setAttribute('class', 'children');
|
|
||||||
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
|
|
||||||
}
|
|
||||||
|
|
||||||
var tocList = document.getElementById('toc');
|
|
||||||
|
|
||||||
var tocEntries = tocList.getElementsByTagName('li');
|
|
||||||
for (var i = 0; i < tocEntries.length; i++) {
|
|
||||||
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
var tocLinks = tocList.getElementsByTagName('a');
|
|
||||||
for (var i = 0; i < tocLinks.length; i++) {
|
|
||||||
tocLinks[i].addEventListener('click', tocEntryClick, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.name == "hideTOC") {
|
|
||||||
toggleTOC.call(tocButton);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onload = init;
|
|
||||||
|
|
||||||
// If showing in Xcode, hide the TOC and Header
|
|
||||||
if (navigator.userAgent.match(/xcode/i)) {
|
|
||||||
document.getElementById("contents").className = "hideInXcode"
|
|
||||||
document.getElementById("tocContainer").className = "hideInXcode"
|
|
||||||
document.getElementById("top_header").className = "hideInXcode"
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,361 +0,0 @@
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
|
|
||||||
<title>GAITrackedViewController Class Reference</title>
|
|
||||||
<meta id="xcode-display" name="xcode-display" content="render"/>
|
|
||||||
<meta name="viewport" content="width=550" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
|
|
||||||
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
|
|
||||||
<meta name="generator" content="appledoc 2.1 (build 858)" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header id="top_header">
|
|
||||||
<div id="library" class="hideInXcode">
|
|
||||||
<h1><a id="libraryTitle" href="../index.html">Google Analytics SDK for iOS </a></h1>
|
|
||||||
<a id="developerHome" href="../index.html">Google Inc</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="title" role="banner">
|
|
||||||
<h1 class="hideInXcode">GAITrackedViewController Class Reference</h1>
|
|
||||||
</div>
|
|
||||||
<ul id="headerButtons" role="toolbar">
|
|
||||||
<li id="toc_button">
|
|
||||||
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
|
|
||||||
</li>
|
|
||||||
<li id="jumpto_button" role="navigation">
|
|
||||||
<select id="jumpTo">
|
|
||||||
<option value="top">Jump To…</option>
|
|
||||||
|
|
||||||
<option value="overview">Overview</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="tasks">Tasks</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="properties">Properties</option>
|
|
||||||
|
|
||||||
<option value="//api/name/trackedViewName"> trackedViewName</option>
|
|
||||||
|
|
||||||
<option value="//api/name/tracker"> tracker</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</select>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</header>
|
|
||||||
<nav id="tocContainer" class="isShowingTOC">
|
|
||||||
<ul id="toc" role="tree">
|
|
||||||
|
|
||||||
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/trackedViewName">trackedViewName</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/tracker">tracker</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<article>
|
|
||||||
<div id="contents" class="isShowingTOC" role="main">
|
|
||||||
<a title="GAITrackedViewController Class Reference" name="top"></a>
|
|
||||||
<div class="main-navigation navigation-top">
|
|
||||||
<ul>
|
|
||||||
<li><a href="../index.html">Index</a></li>
|
|
||||||
<li><a href="../hierarchy.html">Hierarchy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="header">
|
|
||||||
<div class="section-header">
|
|
||||||
<h1 class="title title-header">GAITrackedViewController Class Reference</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="container">
|
|
||||||
|
|
||||||
<div class="section section-specification"><table cellspacing="0"><tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="specification-title">Inherits from</td>
|
|
||||||
<td class="specification-value">UIViewController</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td class="specification-title">Declared in</td>
|
|
||||||
<td class="specification-value">GAITrackedViewController.h</td>
|
|
||||||
</tr>
|
|
||||||
</tbody></table></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-overview">
|
|
||||||
<a title="Overview" name="overview"></a>
|
|
||||||
<h2 class="subtitle subtitle-overview">Overview</h2>
|
|
||||||
<p>Extends UIViewController to generate Google Analytics view tracking calls
|
|
||||||
whenever the view appears; this is done by overriding the <code>viewDidAppear:</code>
|
|
||||||
method. The view name must be set for any tracking calls to be made.</p>
|
|
||||||
|
|
||||||
<p>By default, this will use <a href="../Classes/GAI.html#//api/name/defaultTracker">[GAI defaultTracker]</a> for tracking calls, but one can
|
|
||||||
override this by setting the <a href="#//api/name/tracker">tracker</a> property.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-tasks">
|
|
||||||
<a title="Tasks" name="tasks"></a>
|
|
||||||
<h2 class="subtitle subtitle-tasks">Tasks</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul class="task-list">
|
|
||||||
<li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/tracker"> tracker</a></code>
|
|
||||||
<span class="tooltip"><p>The tracker on which view tracking calls are be made, or <code>nil</code>, in which case
|
|
||||||
<a href="../Classes/GAI.html#//api/name/defaultTracker">[GAI defaultTracker]</a> will be used.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/trackedViewName"> trackedViewName</a></code>
|
|
||||||
<span class="tooltip"><p>The view name, for purposes of Google Analytics view tracking. If this is
|
|
||||||
<code>nil</code>, no tracking calls will be made.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Properties" name="properties"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Properties</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/trackedViewName" title="trackedViewName"></a>
|
|
||||||
<h3 class="subsubtitle method-title">trackedViewName</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>The view name, for purposes of Google Analytics view tracking. If this is
|
|
||||||
<code>nil</code>, no tracking calls will be made.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, copy) NSString *trackedViewName</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITrackedViewController.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/tracker" title="tracker"></a>
|
|
||||||
<h3 class="subsubtitle method-title">tracker</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>The tracker on which view tracking calls are be made, or <code>nil</code>, in which case
|
|
||||||
<a href="../Classes/GAI.html#//api/name/defaultTracker">[GAI defaultTracker]</a> will be used.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) id<GAITracker> tracker</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITrackedViewController.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="main-navigation navigation-bottom">
|
|
||||||
<ul>
|
|
||||||
<li><a href="../index.html">Index</a></li>
|
|
||||||
<li><a href="../hierarchy.html">Hierarchy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
<hr />
|
|
||||||
<div class="footer-copyright">
|
|
||||||
<p><span class="copyright">© 2013 Google Inc. All rights reserved. (Last updated: 2013-01-08)</span><br />
|
|
||||||
|
|
||||||
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.1 (build 858)</a>.</span></p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
<script type="text/javascript">
|
|
||||||
function jumpToChange()
|
|
||||||
{
|
|
||||||
window.location.hash = this.options[this.selectedIndex].value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTOC()
|
|
||||||
{
|
|
||||||
var contents = document.getElementById('contents');
|
|
||||||
var tocContainer = document.getElementById('tocContainer');
|
|
||||||
|
|
||||||
if (this.getAttribute('class') == 'open')
|
|
||||||
{
|
|
||||||
this.setAttribute('class', '');
|
|
||||||
contents.setAttribute('class', '');
|
|
||||||
tocContainer.setAttribute('class', '');
|
|
||||||
|
|
||||||
window.name = "hideTOC";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.setAttribute('class', 'open');
|
|
||||||
contents.setAttribute('class', 'isShowingTOC');
|
|
||||||
tocContainer.setAttribute('class', 'isShowingTOC');
|
|
||||||
|
|
||||||
window.name = "";
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTOCEntryChildren(e)
|
|
||||||
{
|
|
||||||
e.stopPropagation();
|
|
||||||
var currentClass = this.getAttribute('class');
|
|
||||||
if (currentClass == 'children') {
|
|
||||||
this.setAttribute('class', 'children open');
|
|
||||||
}
|
|
||||||
else if (currentClass == 'children open') {
|
|
||||||
this.setAttribute('class', 'children');
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tocEntryClick(e)
|
|
||||||
{
|
|
||||||
e.stopPropagation();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function init()
|
|
||||||
{
|
|
||||||
var selectElement = document.getElementById('jumpTo');
|
|
||||||
selectElement.addEventListener('change', jumpToChange, false);
|
|
||||||
|
|
||||||
var tocButton = document.getElementById('table_of_contents');
|
|
||||||
tocButton.addEventListener('click', toggleTOC, false);
|
|
||||||
|
|
||||||
var taskTreeItem = document.getElementById('task_treeitem');
|
|
||||||
if (taskTreeItem.getElementsByTagName('li').length > 0)
|
|
||||||
{
|
|
||||||
taskTreeItem.setAttribute('class', 'children');
|
|
||||||
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
|
|
||||||
}
|
|
||||||
|
|
||||||
var tocList = document.getElementById('toc');
|
|
||||||
|
|
||||||
var tocEntries = tocList.getElementsByTagName('li');
|
|
||||||
for (var i = 0; i < tocEntries.length; i++) {
|
|
||||||
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
var tocLinks = tocList.getElementsByTagName('a');
|
|
||||||
for (var i = 0; i < tocLinks.length; i++) {
|
|
||||||
tocLinks[i].addEventListener('click', tocEntryClick, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.name == "hideTOC") {
|
|
||||||
toggleTOC.call(tocButton);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onload = init;
|
|
||||||
|
|
||||||
// If showing in Xcode, hide the TOC and Header
|
|
||||||
if (navigator.userAgent.match(/xcode/i)) {
|
|
||||||
document.getElementById("contents").className = "hideInXcode"
|
|
||||||
document.getElementById("tocContainer").className = "hideInXcode"
|
|
||||||
document.getElementById("top_header").className = "hideInXcode"
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,783 +0,0 @@
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
|
|
||||||
<title>GAITransaction Class Reference</title>
|
|
||||||
<meta id="xcode-display" name="xcode-display" content="render"/>
|
|
||||||
<meta name="viewport" content="width=550" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
|
|
||||||
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
|
|
||||||
<meta name="generator" content="appledoc 2.1 (build 858)" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header id="top_header">
|
|
||||||
<div id="library" class="hideInXcode">
|
|
||||||
<h1><a id="libraryTitle" href="../index.html">Google Analytics SDK for iOS </a></h1>
|
|
||||||
<a id="developerHome" href="../index.html">Google Inc</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="title" role="banner">
|
|
||||||
<h1 class="hideInXcode">GAITransaction Class Reference</h1>
|
|
||||||
</div>
|
|
||||||
<ul id="headerButtons" role="toolbar">
|
|
||||||
<li id="toc_button">
|
|
||||||
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
|
|
||||||
</li>
|
|
||||||
<li id="jumpto_button" role="navigation">
|
|
||||||
<select id="jumpTo">
|
|
||||||
<option value="top">Jump To…</option>
|
|
||||||
|
|
||||||
<option value="overview">Overview</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="tasks">Tasks</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="properties">Properties</option>
|
|
||||||
|
|
||||||
<option value="//api/name/affiliation"> affiliation</option>
|
|
||||||
|
|
||||||
<option value="//api/name/items"> items</option>
|
|
||||||
|
|
||||||
<option value="//api/name/revenueMicros"> revenueMicros</option>
|
|
||||||
|
|
||||||
<option value="//api/name/shippingMicros"> shippingMicros</option>
|
|
||||||
|
|
||||||
<option value="//api/name/taxMicros"> taxMicros</option>
|
|
||||||
|
|
||||||
<option value="//api/name/transactionId"> transactionId</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="class_methods">Class Methods</option>
|
|
||||||
|
|
||||||
<option value="//api/name/transactionWithId:withAffiliation:"> + transactionWithId:withAffiliation:</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="instance_methods">Instance Methods</option>
|
|
||||||
|
|
||||||
<option value="//api/name/addItem:"> - addItem:</option>
|
|
||||||
|
|
||||||
<option value="//api/name/addItemWithCode:name:category:priceMicros:quantity:"> - addItemWithCode:name:category:priceMicros:quantity:</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</select>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</header>
|
|
||||||
<nav id="tocContainer" class="isShowingTOC">
|
|
||||||
<ul id="toc" role="tree">
|
|
||||||
|
|
||||||
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/affiliation">affiliation</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/items">items</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/revenueMicros">revenueMicros</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/shippingMicros">shippingMicros</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/taxMicros">taxMicros</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/transactionId">transactionId</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#class_methods">Class Methods</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/transactionWithId:withAffiliation:">transactionWithId:withAffiliation:</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#instance_methods">Instance Methods</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/addItem:">addItem:</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/addItemWithCode:name:category:priceMicros:quantity:">addItemWithCode:name:category:priceMicros:quantity:</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<article>
|
|
||||||
<div id="contents" class="isShowingTOC" role="main">
|
|
||||||
<a title="GAITransaction Class Reference" name="top"></a>
|
|
||||||
<div class="main-navigation navigation-top">
|
|
||||||
<ul>
|
|
||||||
<li><a href="../index.html">Index</a></li>
|
|
||||||
<li><a href="../hierarchy.html">Hierarchy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="header">
|
|
||||||
<div class="section-header">
|
|
||||||
<h1 class="title title-header">GAITransaction Class Reference</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="container">
|
|
||||||
|
|
||||||
<div class="section section-specification"><table cellspacing="0"><tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="specification-title">Inherits from</td>
|
|
||||||
<td class="specification-value">NSObject</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td class="specification-title">Declared in</td>
|
|
||||||
<td class="specification-value">GAITransaction.h</td>
|
|
||||||
</tr>
|
|
||||||
</tbody></table></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-overview">
|
|
||||||
<a title="Overview" name="overview"></a>
|
|
||||||
<h2 class="subtitle subtitle-overview">Overview</h2>
|
|
||||||
<p>A simple class to hold transaction data.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-tasks">
|
|
||||||
<a title="Tasks" name="tasks"></a>
|
|
||||||
<h2 class="subtitle subtitle-tasks">Tasks</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul class="task-list">
|
|
||||||
<li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/transactionId"> transactionId</a></code>
|
|
||||||
<span class="tooltip"><p>Transaction ID.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/affiliation"> affiliation</a></code>
|
|
||||||
<span class="tooltip"><p>Transaction affiliation.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/revenueMicros"> revenueMicros</a></code>
|
|
||||||
<span class="tooltip"><p>Revenue in micros (millionths of a currency unit). Note that this must be
|
|
||||||
set manually because it is not updated when <a href="#//api/name/items">items</a> are added.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/taxMicros"> taxMicros</a></code>
|
|
||||||
<span class="tooltip"><p>Tax in micros (millionths of a currency unit). Note that this must be set
|
|
||||||
manually because it is not updated when <a href="#//api/name/items">items</a> are added.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/shippingMicros"> shippingMicros</a></code>
|
|
||||||
<span class="tooltip"><p>Shipping cost in micros (millionths of a currency unit). Note that
|
|
||||||
this must be set manually because it is not updated when <a href="#//api/name/items">items</a> are added.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/items"> items</a></code>
|
|
||||||
<span class="tooltip"><p>Transaction items, as an immutable array.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/transactionWithId:withAffiliation:">+ transactionWithId:withAffiliation:</a></code>
|
|
||||||
<span class="tooltip"><p>Create and initialize a transaction.</p></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/addItem:">– addItem:</a></code>
|
|
||||||
<span class="tooltip"><p>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.</p></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/addItemWithCode:name:category:priceMicros:quantity:">– addItemWithCode:name:category:priceMicros:quantity:</a></code>
|
|
||||||
<span class="tooltip"><p>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.</p></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Properties" name="properties"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Properties</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/affiliation" title="affiliation"></a>
|
|
||||||
<h3 class="subsubtitle method-title">affiliation</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Transaction affiliation.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, copy, readonly) NSString *affiliation</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/items" title="items"></a>
|
|
||||||
<h3 class="subsubtitle method-title">items</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Transaction items, as an immutable array.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, readonly) NSArray *items</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/revenueMicros" title="revenueMicros"></a>
|
|
||||||
<h3 class="subsubtitle method-title">revenueMicros</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Revenue in micros (millionths of a currency unit). Note that this must be
|
|
||||||
set manually because it is not updated when <a href="#//api/name/items">items</a> are added.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) int64_t revenueMicros</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/shippingMicros" title="shippingMicros"></a>
|
|
||||||
<h3 class="subsubtitle method-title">shippingMicros</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Shipping cost in micros (millionths of a currency unit). Note that
|
|
||||||
this must be set manually because it is not updated when <a href="#//api/name/items">items</a> are added.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) int64_t shippingMicros</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/taxMicros" title="taxMicros"></a>
|
|
||||||
<h3 class="subsubtitle method-title">taxMicros</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Tax in micros (millionths of a currency unit). Note that this must be set
|
|
||||||
manually because it is not updated when <a href="#//api/name/items">items</a> are added.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) int64_t taxMicros</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/transactionId" title="transactionId"></a>
|
|
||||||
<h3 class="subsubtitle method-title">transactionId</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Transaction ID.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, copy, readonly) NSString *transactionId</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Class Methods" name="class_methods"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Class Methods</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/transactionWithId:withAffiliation:" title="transactionWithId:withAffiliation:"></a>
|
|
||||||
<h3 class="subsubtitle method-title">transactionWithId:withAffiliation:</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Create and initialize a transaction.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>+ (GAITransaction *)transactionWithId:(NSString *)<em>transactionId</em> withAffiliation:(NSString *)<em>affiliation</em></code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection arguments-section parameters">
|
|
||||||
<h4 class="method-subtitle parameter-title">Parameters</h4>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>transactionId</em></dt>
|
|
||||||
<dd><p>The transaction ID. Required (must not be <code>nil</code>).</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>affiliation</em></dt>
|
|
||||||
<dd><p>The transaction <a href="#//api/name/affiliation">affiliation</a>. May be <code>nil</code>.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection return">
|
|
||||||
<h4 class="method-subtitle parameter-title">Return Value</h4>
|
|
||||||
<p>A GAITransaction object with the specified transaction ID and
|
|
||||||
<a href="#//api/name/affiliation">affiliation</a>.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Instance Methods" name="instance_methods"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Instance Methods</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/addItem:" title="addItem:"></a>
|
|
||||||
<h3 class="subsubtitle method-title">addItem:</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>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.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>- (void)addItem:(GAITransactionItem *)<em>item</em></code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection arguments-section parameters">
|
|
||||||
<h4 class="method-subtitle parameter-title">Parameters</h4>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>item</em></dt>
|
|
||||||
<dd><p>The <a href="../Classes/GAITransactionItem.html">GAITransactionItem</a> to add to the transaction.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/addItemWithCode:name:category:priceMicros:quantity:" title="addItemWithCode:name:category:priceMicros:quantity:"></a>
|
|
||||||
<h3 class="subsubtitle method-title">addItemWithCode:name:category:priceMicros:quantity:</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>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.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>- (void)addItemWithCode:(NSString *)<em>productCode</em> name:(NSString *)<em>productName</em> category:(NSString *)<em>productCategory</em> priceMicros:(int64_t)<em>priceMicros</em> quantity:(NSInteger)<em>quantity</em></code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection arguments-section parameters">
|
|
||||||
<h4 class="method-subtitle parameter-title">Parameters</h4>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>productCode</em></dt>
|
|
||||||
<dd><p>The item product code; must not be <code>nil</code> or empty.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>productName</em></dt>
|
|
||||||
<dd><p>The item product name; may be <code>nil</code>.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>productCategory</em></dt>
|
|
||||||
<dd><p>The item product category; may be <code>nil</code>.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>priceMicros</em></dt>
|
|
||||||
<dd><p>The item price, in micros (millionths of a currency unit).</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>quantity</em></dt>
|
|
||||||
<dd><p>The item quantity, as an NSInteger.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection return">
|
|
||||||
<h4 class="method-subtitle parameter-title">Return Value</h4>
|
|
||||||
<p>The newly initialized item.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransaction.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="main-navigation navigation-bottom">
|
|
||||||
<ul>
|
|
||||||
<li><a href="../index.html">Index</a></li>
|
|
||||||
<li><a href="../hierarchy.html">Hierarchy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
<hr />
|
|
||||||
<div class="footer-copyright">
|
|
||||||
<p><span class="copyright">© 2013 Google Inc. All rights reserved. (Last updated: 2013-01-08)</span><br />
|
|
||||||
|
|
||||||
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.1 (build 858)</a>.</span></p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
<script type="text/javascript">
|
|
||||||
function jumpToChange()
|
|
||||||
{
|
|
||||||
window.location.hash = this.options[this.selectedIndex].value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTOC()
|
|
||||||
{
|
|
||||||
var contents = document.getElementById('contents');
|
|
||||||
var tocContainer = document.getElementById('tocContainer');
|
|
||||||
|
|
||||||
if (this.getAttribute('class') == 'open')
|
|
||||||
{
|
|
||||||
this.setAttribute('class', '');
|
|
||||||
contents.setAttribute('class', '');
|
|
||||||
tocContainer.setAttribute('class', '');
|
|
||||||
|
|
||||||
window.name = "hideTOC";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.setAttribute('class', 'open');
|
|
||||||
contents.setAttribute('class', 'isShowingTOC');
|
|
||||||
tocContainer.setAttribute('class', 'isShowingTOC');
|
|
||||||
|
|
||||||
window.name = "";
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTOCEntryChildren(e)
|
|
||||||
{
|
|
||||||
e.stopPropagation();
|
|
||||||
var currentClass = this.getAttribute('class');
|
|
||||||
if (currentClass == 'children') {
|
|
||||||
this.setAttribute('class', 'children open');
|
|
||||||
}
|
|
||||||
else if (currentClass == 'children open') {
|
|
||||||
this.setAttribute('class', 'children');
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tocEntryClick(e)
|
|
||||||
{
|
|
||||||
e.stopPropagation();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function init()
|
|
||||||
{
|
|
||||||
var selectElement = document.getElementById('jumpTo');
|
|
||||||
selectElement.addEventListener('change', jumpToChange, false);
|
|
||||||
|
|
||||||
var tocButton = document.getElementById('table_of_contents');
|
|
||||||
tocButton.addEventListener('click', toggleTOC, false);
|
|
||||||
|
|
||||||
var taskTreeItem = document.getElementById('task_treeitem');
|
|
||||||
if (taskTreeItem.getElementsByTagName('li').length > 0)
|
|
||||||
{
|
|
||||||
taskTreeItem.setAttribute('class', 'children');
|
|
||||||
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
|
|
||||||
}
|
|
||||||
|
|
||||||
var tocList = document.getElementById('toc');
|
|
||||||
|
|
||||||
var tocEntries = tocList.getElementsByTagName('li');
|
|
||||||
for (var i = 0; i < tocEntries.length; i++) {
|
|
||||||
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
var tocLinks = tocList.getElementsByTagName('a');
|
|
||||||
for (var i = 0; i < tocLinks.length; i++) {
|
|
||||||
tocLinks[i].addEventListener('click', tocEntryClick, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.name == "hideTOC") {
|
|
||||||
toggleTOC.call(tocButton);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onload = init;
|
|
||||||
|
|
||||||
// If showing in Xcode, hide the TOC and Header
|
|
||||||
if (navigator.userAgent.match(/xcode/i)) {
|
|
||||||
document.getElementById("contents").className = "hideInXcode"
|
|
||||||
document.getElementById("tocContainer").className = "hideInXcode"
|
|
||||||
document.getElementById("top_header").className = "hideInXcode"
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,588 +0,0 @@
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
|
|
||||||
<title>GAITransactionItem Class Reference</title>
|
|
||||||
<meta id="xcode-display" name="xcode-display" content="render"/>
|
|
||||||
<meta name="viewport" content="width=550" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
|
|
||||||
<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
|
|
||||||
<meta name="generator" content="appledoc 2.1 (build 858)" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header id="top_header">
|
|
||||||
<div id="library" class="hideInXcode">
|
|
||||||
<h1><a id="libraryTitle" href="../index.html">Google Analytics SDK for iOS </a></h1>
|
|
||||||
<a id="developerHome" href="../index.html">Google Inc</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="title" role="banner">
|
|
||||||
<h1 class="hideInXcode">GAITransactionItem Class Reference</h1>
|
|
||||||
</div>
|
|
||||||
<ul id="headerButtons" role="toolbar">
|
|
||||||
<li id="toc_button">
|
|
||||||
<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
|
|
||||||
</li>
|
|
||||||
<li id="jumpto_button" role="navigation">
|
|
||||||
<select id="jumpTo">
|
|
||||||
<option value="top">Jump To…</option>
|
|
||||||
|
|
||||||
<option value="overview">Overview</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="tasks">Tasks</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="properties">Properties</option>
|
|
||||||
|
|
||||||
<option value="//api/name/priceMicros"> priceMicros</option>
|
|
||||||
|
|
||||||
<option value="//api/name/productCategory"> productCategory</option>
|
|
||||||
|
|
||||||
<option value="//api/name/productCode"> productCode</option>
|
|
||||||
|
|
||||||
<option value="//api/name/productName"> productName</option>
|
|
||||||
|
|
||||||
<option value="//api/name/quantity"> quantity</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<option value="class_methods">Class Methods</option>
|
|
||||||
|
|
||||||
<option value="//api/name/itemWithCode:name:category:priceMicros:quantity:"> + itemWithCode:name:category:priceMicros:quantity:</option>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</select>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</header>
|
|
||||||
<nav id="tocContainer" class="isShowingTOC">
|
|
||||||
<ul id="toc" role="tree">
|
|
||||||
|
|
||||||
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/priceMicros">priceMicros</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/productCategory">productCategory</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/productCode">productCode</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/productName">productName</a></span></li>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/quantity">quantity</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#class_methods">Class Methods</a></span><ul>
|
|
||||||
|
|
||||||
<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/itemWithCode:name:category:priceMicros:quantity:">itemWithCode:name:category:priceMicros:quantity:</a></span></li>
|
|
||||||
|
|
||||||
</ul></li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
<article>
|
|
||||||
<div id="contents" class="isShowingTOC" role="main">
|
|
||||||
<a title="GAITransactionItem Class Reference" name="top"></a>
|
|
||||||
<div class="main-navigation navigation-top">
|
|
||||||
<ul>
|
|
||||||
<li><a href="../index.html">Index</a></li>
|
|
||||||
<li><a href="../hierarchy.html">Hierarchy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="header">
|
|
||||||
<div class="section-header">
|
|
||||||
<h1 class="title title-header">GAITransactionItem Class Reference</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="container">
|
|
||||||
|
|
||||||
<div class="section section-specification"><table cellspacing="0"><tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="specification-title">Inherits from</td>
|
|
||||||
<td class="specification-value">NSObject</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td class="specification-title">Declared in</td>
|
|
||||||
<td class="specification-value">GAITransactionItem.h</td>
|
|
||||||
</tr>
|
|
||||||
</tbody></table></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-overview">
|
|
||||||
<a title="Overview" name="overview"></a>
|
|
||||||
<h2 class="subtitle subtitle-overview">Overview</h2>
|
|
||||||
<p>A simple class to hold transaction item data.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-tasks">
|
|
||||||
<a title="Tasks" name="tasks"></a>
|
|
||||||
<h2 class="subtitle subtitle-tasks">Tasks</h2>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<ul class="task-list">
|
|
||||||
<li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/productCode"> productCode</a></code>
|
|
||||||
<span class="tooltip"><p>The item code, as a string.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/productName"> productName</a></code>
|
|
||||||
<span class="tooltip"><p>The item name.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/productCategory"> productCategory</a></code>
|
|
||||||
<span class="tooltip"><p>The item variation.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/priceMicros"> priceMicros</a></code>
|
|
||||||
<span class="tooltip"><p>The item price in micros (millionths of a currency unit).</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/quantity"> quantity</a></code>
|
|
||||||
<span class="tooltip"><p>The item quantity.</p></span>
|
|
||||||
</span>
|
|
||||||
<span class="task-item-suffix">property</span>
|
|
||||||
|
|
||||||
</li><li>
|
|
||||||
<span class="tooltip">
|
|
||||||
<code><a href="#//api/name/itemWithCode:name:category:priceMicros:quantity:">+ itemWithCode:name:category:priceMicros:quantity:</a></code>
|
|
||||||
<span class="tooltip"><p>Create and initialize an item.</p></span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Properties" name="properties"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Properties</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/priceMicros" title="priceMicros"></a>
|
|
||||||
<h3 class="subsubtitle method-title">priceMicros</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>The item price in micros (millionths of a currency unit).</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) int64_t priceMicros</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransactionItem.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/productCategory" title="productCategory"></a>
|
|
||||||
<h3 class="subsubtitle method-title">productCategory</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>The item variation.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, copy) NSString *productCategory</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransactionItem.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/productCode" title="productCode"></a>
|
|
||||||
<h3 class="subsubtitle method-title">productCode</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>The item code, as a string.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, copy, readonly) NSString *productCode</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransactionItem.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/productName" title="productName"></a>
|
|
||||||
<h3 class="subsubtitle method-title">productName</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>The item name.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, copy) NSString *productName</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransactionItem.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/quantity" title="quantity"></a>
|
|
||||||
<h3 class="subsubtitle method-title">quantity</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>The item quantity.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>@property (nonatomic, assign) NSInteger quantity</code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransactionItem.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="section section-methods">
|
|
||||||
<a title="Class Methods" name="class_methods"></a>
|
|
||||||
<h2 class="subtitle subtitle-methods">Class Methods</h2>
|
|
||||||
|
|
||||||
<div class="section-method">
|
|
||||||
<a name="//api/name/itemWithCode:name:category:priceMicros:quantity:" title="itemWithCode:name:category:priceMicros:quantity:"></a>
|
|
||||||
<h3 class="subsubtitle method-title">itemWithCode:name:category:priceMicros:quantity:</h3>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection brief-description">
|
|
||||||
<p>Create and initialize an item.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection method-declaration"><code>+ (GAITransactionItem *)itemWithCode:(NSString *)<em>productCode</em> name:(NSString *)<em>productName</em> category:(NSString *)<em>productCategory</em> priceMicros:(int64_t)<em>priceMicros</em> quantity:(NSInteger)<em>quantity</em></code></div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection arguments-section parameters">
|
|
||||||
<h4 class="method-subtitle parameter-title">Parameters</h4>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>productCode</em></dt>
|
|
||||||
<dd><p>The item product code; must not be <code>nil</code> or empty.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>productName</em></dt>
|
|
||||||
<dd><p>The item product name; must not be <code>nil</code> or empty.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>productCategory</em></dt>
|
|
||||||
<dd><p>The item product category; may be <code>nil</code>.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>priceMicros</em></dt>
|
|
||||||
<dd><p>The item price, in micros (millionths of a currency unit).</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<dl class="argument-def parameter-def">
|
|
||||||
<dt><em>quantity</em></dt>
|
|
||||||
<dd><p>The item <a href="#//api/name/quantity">quantity</a>, as an NSInteger.</p></dd>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection return">
|
|
||||||
<h4 class="method-subtitle parameter-title">Return Value</h4>
|
|
||||||
<p>The newly initialized item.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="method-subsection declared-in-section">
|
|
||||||
<h4 class="method-subtitle">Declared In</h4>
|
|
||||||
<code class="declared-in-ref">GAITransactionItem.h</code><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="main-navigation navigation-bottom">
|
|
||||||
<ul>
|
|
||||||
<li><a href="../index.html">Index</a></li>
|
|
||||||
<li><a href="../hierarchy.html">Hierarchy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
<hr />
|
|
||||||
<div class="footer-copyright">
|
|
||||||
<p><span class="copyright">© 2013 Google Inc. All rights reserved. (Last updated: 2013-01-08)</span><br />
|
|
||||||
|
|
||||||
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.1 (build 858)</a>.</span></p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
<script type="text/javascript">
|
|
||||||
function jumpToChange()
|
|
||||||
{
|
|
||||||
window.location.hash = this.options[this.selectedIndex].value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTOC()
|
|
||||||
{
|
|
||||||
var contents = document.getElementById('contents');
|
|
||||||
var tocContainer = document.getElementById('tocContainer');
|
|
||||||
|
|
||||||
if (this.getAttribute('class') == 'open')
|
|
||||||
{
|
|
||||||
this.setAttribute('class', '');
|
|
||||||
contents.setAttribute('class', '');
|
|
||||||
tocContainer.setAttribute('class', '');
|
|
||||||
|
|
||||||
window.name = "hideTOC";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.setAttribute('class', 'open');
|
|
||||||
contents.setAttribute('class', 'isShowingTOC');
|
|
||||||
tocContainer.setAttribute('class', 'isShowingTOC');
|
|
||||||
|
|
||||||
window.name = "";
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleTOCEntryChildren(e)
|
|
||||||
{
|
|
||||||
e.stopPropagation();
|
|
||||||
var currentClass = this.getAttribute('class');
|
|
||||||
if (currentClass == 'children') {
|
|
||||||
this.setAttribute('class', 'children open');
|
|
||||||
}
|
|
||||||
else if (currentClass == 'children open') {
|
|
||||||
this.setAttribute('class', 'children');
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tocEntryClick(e)
|
|
||||||
{
|
|
||||||
e.stopPropagation();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function init()
|
|
||||||
{
|
|
||||||
var selectElement = document.getElementById('jumpTo');
|
|
||||||
selectElement.addEventListener('change', jumpToChange, false);
|
|
||||||
|
|
||||||
var tocButton = document.getElementById('table_of_contents');
|
|
||||||
tocButton.addEventListener('click', toggleTOC, false);
|
|
||||||
|
|
||||||
var taskTreeItem = document.getElementById('task_treeitem');
|
|
||||||
if (taskTreeItem.getElementsByTagName('li').length > 0)
|
|
||||||
{
|
|
||||||
taskTreeItem.setAttribute('class', 'children');
|
|
||||||
taskTreeItem.firstChild.setAttribute('class', 'disclosure');
|
|
||||||
}
|
|
||||||
|
|
||||||
var tocList = document.getElementById('toc');
|
|
||||||
|
|
||||||
var tocEntries = tocList.getElementsByTagName('li');
|
|
||||||
for (var i = 0; i < tocEntries.length; i++) {
|
|
||||||
tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
var tocLinks = tocList.getElementsByTagName('a');
|
|
||||||
for (var i = 0; i < tocLinks.length; i++) {
|
|
||||||
tocLinks[i].addEventListener('click', tocEntryClick, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.name == "hideTOC") {
|
|
||||||
toggleTOC.call(tocButton);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onload = init;
|
|
||||||
|
|
||||||
// If showing in Xcode, hide the TOC and Header
|
|
||||||
if (navigator.userAgent.match(/xcode/i)) {
|
|
||||||
document.getElementById("contents").className = "hideInXcode"
|
|
||||||
document.getElementById("tocContainer").className = "hideInXcode"
|
|
||||||
document.getElementById("top_header").className = "hideInXcode"
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -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 */
|
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
|
@ -1,94 +0,0 @@
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Google Analytics SDK for iOS Hierarchy</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/styles.css" media="all" />
|
|
||||||
<link rel="stylesheet" type="text/css" media="print" href="css/stylesPrint.css" />
|
|
||||||
<meta name="generator" content="appledoc 2.1 (build 858)" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header id="top_header">
|
|
||||||
<div id="library" class="hideInXcode">
|
|
||||||
<h1><a id="libraryTitle" href="index.html">Google Analytics SDK for iOS </a></h1>
|
|
||||||
<a id="developerHome" href="index.html">Google Inc</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="title" role="banner">
|
|
||||||
<h1 class="hideInXcode">Google Analytics SDK for iOS Hierarchy</h1>
|
|
||||||
</div>
|
|
||||||
<ul id="headerButtons" role="toolbar"></ul>
|
|
||||||
</header>
|
|
||||||
<article>
|
|
||||||
<div id="overview_contents" role="main">
|
|
||||||
<div class="main-navigation navigation-top">
|
|
||||||
<a href="index.html">Previous</a>
|
|
||||||
</div>
|
|
||||||
<div id="header">
|
|
||||||
<div class="section-header">
|
|
||||||
<h1 class="title title-header">Google Analytics SDK for iOS Hierarchy</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="container">
|
|
||||||
|
|
||||||
<div class="index-column hierarchy-column">
|
|
||||||
<h2 class="index-title">Class Hierarchy</h2>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li>NSObject
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li><a href="Classes/GAI.html">GAI</a></li>
|
|
||||||
|
|
||||||
<li><a href="Classes/GAITransaction.html">GAITransaction</a></li>
|
|
||||||
|
|
||||||
<li><a href="Classes/GAITransactionItem.html">GAITransactionItem</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>UIViewController
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li><a href="Classes/GAITrackedViewController.html">GAITrackedViewController</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="index-column">
|
|
||||||
|
|
||||||
<h2 class="index-title">Protocol References</h2>
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li><a href="Protocols/GAITracker.html">GAITracker</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="main-navigation navigation-bottom">
|
|
||||||
<a href="index.html">Previous</a>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
<hr />
|
|
||||||
<div class="footer-copyright">
|
|
||||||
<p><span class="copyright">© 2013 Google Inc. All rights reserved. (Last updated: 2013-01-08)</span><br />
|
|
||||||
|
|
||||||
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.1 (build 858)</a>.</span></p>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 95 B |
Before Width: | Height: | Size: 115 B |
Before Width: | Height: | Size: 131 B |
Before Width: | Height: | Size: 119 B |
Before Width: | Height: | Size: 101 B |
|
@ -1,84 +0,0 @@
|
||||||
<!DOCTYPE HTML>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Google Analytics SDK for iOS Reference</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="css/styles.css" media="all" />
|
|
||||||
<link rel="stylesheet" type="text/css" media="print" href="css/stylesPrint.css" />
|
|
||||||
<meta name="generator" content="appledoc 2.1 (build 858)" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header id="top_header">
|
|
||||||
<div id="library" class="hideInXcode">
|
|
||||||
<h1><a id="libraryTitle" href="index.html">Google Analytics SDK for iOS </a></h1>
|
|
||||||
<a id="developerHome" href="index.html">Google Inc</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="title" role="banner">
|
|
||||||
<h1 class="hideInXcode">Google Analytics SDK for iOS Reference</h1>
|
|
||||||
</div>
|
|
||||||
<ul id="headerButtons" role="toolbar"></ul>
|
|
||||||
</header>
|
|
||||||
<article>
|
|
||||||
<div id="overview_contents" role="main">
|
|
||||||
<div class="main-navigation navigation-top">
|
|
||||||
<a href="hierarchy.html">Next</a>
|
|
||||||
</div>
|
|
||||||
<div id="header">
|
|
||||||
<div class="section-header">
|
|
||||||
<h1 class="title title-header">Google Analytics SDK for iOS Reference</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="container">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="index-column">
|
|
||||||
<h2 class="index-title">Class References</h2>
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li><a href="Classes/GAI.html">GAI</a></li>
|
|
||||||
|
|
||||||
<li><a href="Classes/GAITrackedViewController.html">GAITrackedViewController</a></li>
|
|
||||||
|
|
||||||
<li><a href="Classes/GAITransaction.html">GAITransaction</a></li>
|
|
||||||
|
|
||||||
<li><a href="Classes/GAITransactionItem.html">GAITransactionItem</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="index-column">
|
|
||||||
|
|
||||||
<h2 class="index-title">Protocol References</h2>
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li><a href="Protocols/GAITracker.html">GAITracker</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="main-navigation navigation-bottom">
|
|
||||||
<a href="hierarchy.html">Next</a>
|
|
||||||
</div>
|
|
||||||
<div id="footer">
|
|
||||||
<hr />
|
|
||||||
<div class="footer-copyright">
|
|
||||||
<p><span class="copyright">© 2013 Google Inc. All rights reserved. (Last updated: 2013-01-08)</span><br />
|
|
||||||
|
|
||||||
<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.1 (build 858)</a>.</span></p>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</article>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,5 +1,31 @@
|
||||||
Google Analytics SDK for iOS Changelog
|
Google Analytics SDK for iOS Changelog
|
||||||
|
|
||||||
|
--------------------------------------------
|
||||||
|
Version: 3.01 (September 2013)
|
||||||
|
-------------------------------------------
|
||||||
|
* Fixed link error when targeting iOS 7.0.
|
||||||
|
|
||||||
|
--------------------------------------------
|
||||||
|
Version: 3.00 (August 2013)
|
||||||
|
-------------------------------------------
|
||||||
|
* SDK API change to align with analytics.js. The track<hittype> and
|
||||||
|
send<hittype> methods have been removed. Use send and the
|
||||||
|
GAIDictionaryBuilder construct methods instead.
|
||||||
|
* Most properties on the GAITracker protocol have been removed. Use
|
||||||
|
set on the various fields instead.
|
||||||
|
* All parameters set using the set method will be persisted. Previously,
|
||||||
|
several parameters would only be set for the next send/track call.
|
||||||
|
* GAILogger protocol is available for those wanting to implement their
|
||||||
|
own custom logging for the SDK.
|
||||||
|
* Minimium system requirements have changed. See Readme.txt for details.
|
||||||
|
* All SDK activity (database and network access) is now done on a separate
|
||||||
|
thread.
|
||||||
|
* Clientid can now be read. Call [tracker get:kGAIClientId]. Note that
|
||||||
|
this call will block until the client id can be read from the database.
|
||||||
|
* SDK no longer uses POST unless the hit is larger than 2000 bytes. It
|
||||||
|
will use GET instead.
|
||||||
|
* SDK will no longer retry sending hits based off the HTTP response code.
|
||||||
|
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
Version: 2.0beta4 Update (Jan 2013)
|
Version: 2.0beta4 Update (Jan 2013)
|
||||||
--------------------------------------------
|
--------------------------------------------
|
|
@ -0,0 +1,23 @@
|
||||||
|
//
|
||||||
|
// AppDelegate.h
|
||||||
|
// CuteAnimals
|
||||||
|
//
|
||||||
|
// Copyright 2012 Google, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import "GAI.h"
|
||||||
|
|
||||||
|
@class RootViewController;
|
||||||
|
@class NavController;
|
||||||
|
|
||||||
|
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||||
|
|
||||||
|
@property(nonatomic, strong) UIWindow *window;
|
||||||
|
@property(nonatomic, strong) NavController *navController;
|
||||||
|
@property(nonatomic, strong) RootViewController *viewController;
|
||||||
|
@property(nonatomic, strong) id<GAITracker> tracker;
|
||||||
|
@property(nonatomic, strong) NSDictionary *images;
|
||||||
|
|
||||||
|
@end
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
/******* Set your tracking ID here *******/
|
/******* Set your tracking ID here *******/
|
||||||
static NSString *const kTrackingId = @"UA-TRACKING-ID";
|
static NSString *const kTrackingId = @"UA-TRACKING-ID";
|
||||||
|
static NSString *const kAllowTracking = @"allowTracking";
|
||||||
|
|
||||||
@interface AppDelegate ()
|
@interface AppDelegate ()
|
||||||
|
|
||||||
|
@ -19,51 +20,42 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID";
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
|
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
||||||
@synthesize window = window_;
|
[GAI sharedInstance].optOut =
|
||||||
@synthesize navController = navController_;
|
![[NSUserDefaults standardUserDefaults] boolForKey:kAllowTracking];
|
||||||
@synthesize viewController = viewController_;
|
}
|
||||||
@synthesize tracker = tracker_;
|
|
||||||
@synthesize images = images_;
|
|
||||||
|
|
||||||
- (BOOL)application:(UIApplication *)application
|
- (BOOL)application:(UIApplication *)application
|
||||||
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||||
self.images = [self loadImages];
|
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
|
// Initialize Google Analytics with a 120-second dispatch interval. There is a
|
||||||
// tradeoff between battery usage and timely dispatch.
|
// tradeoff between battery usage and timely dispatch.
|
||||||
[GAI sharedInstance].debug = YES;
|
|
||||||
[GAI sharedInstance].dispatchInterval = 120;
|
[GAI sharedInstance].dispatchInterval = 120;
|
||||||
[GAI sharedInstance].trackUncaughtExceptions = YES;
|
[GAI sharedInstance].trackUncaughtExceptions = YES;
|
||||||
self.tracker = [[GAI sharedInstance] trackerWithTrackingId:kTrackingId];
|
self.tracker = [[GAI sharedInstance] trackerWithName:@"CuteAnimals"
|
||||||
|
trackingId:kTrackingId];
|
||||||
|
|
||||||
self.window =
|
self.window =
|
||||||
[[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]
|
[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||||
autorelease];
|
|
||||||
// Override point for customization after application launch.
|
// Override point for customization after application launch.
|
||||||
self.viewController =
|
self.viewController =
|
||||||
[[[RootViewController alloc] initWithNibName:@"RootViewController"
|
[[RootViewController alloc] initWithNibName:@"RootViewController"
|
||||||
bundle:nil] autorelease];
|
bundle:nil];
|
||||||
|
|
||||||
self.navController =
|
self.navController =
|
||||||
[[[NavController alloc] initWithRootViewController:self.viewController]
|
[[NavController alloc] initWithRootViewController:self.viewController];
|
||||||
autorelease];
|
|
||||||
self.navController.delegate = self.navController;
|
self.navController.delegate = self.navController;
|
||||||
|
|
||||||
self.viewController.navController = self.navController;
|
|
||||||
self.window.rootViewController = self.navController;
|
self.window.rootViewController = self.navController;
|
||||||
[self.window makeKeyAndVisible];
|
[self.window makeKeyAndVisible];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
[tracker_ release];
|
|
||||||
[viewController_ release];
|
|
||||||
[navController_ release];
|
|
||||||
[window_ release];
|
|
||||||
[super dealloc];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSDictionary *)loadImages {
|
- (NSDictionary *)loadImages {
|
||||||
NSArray *contents = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg"
|
NSArray *contents = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg"
|
||||||
|
@ -72,7 +64,7 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID";
|
||||||
NSLog(@"Failed to load directory contents");
|
NSLog(@"Failed to load directory contents");
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
NSMutableDictionary *images = [NSMutableDictionary dictionaryWithCapacity:0];
|
NSMutableDictionary *images = [NSMutableDictionary dictionary];
|
||||||
for (NSString *file in contents) {
|
for (NSString *file in contents) {
|
||||||
NSArray *components = [[file lastPathComponent]
|
NSArray *components = [[file lastPathComponent]
|
||||||
componentsSeparatedByString:@"-"];
|
componentsSeparatedByString:@"-"];
|
||||||
|
@ -85,17 +77,16 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID";
|
||||||
NSLog(@"Failed to load file: %@", file);
|
NSLog(@"Failed to load file: %@", file);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
NSString *prefix = [components objectAtIndex:0];
|
NSString *prefix = components[0];
|
||||||
NSMutableArray *categoryImages = [images objectForKey:prefix];
|
NSMutableArray *categoryImages = images[prefix];
|
||||||
if (!categoryImages) {
|
if (!categoryImages) {
|
||||||
categoryImages = [NSMutableArray arrayWithCapacity:0];
|
categoryImages = [NSMutableArray array];
|
||||||
[images setObject:categoryImages
|
images[prefix] = categoryImages;
|
||||||
forKey:prefix];
|
|
||||||
}
|
}
|
||||||
[categoryImages addObject:image];
|
[categoryImages addObject:image];
|
||||||
}
|
}
|
||||||
for (NSString *cat in [images allKeys]) {
|
for (NSString *cat in [images allKeys]) {
|
||||||
NSArray *array = [images objectForKey:cat];
|
NSArray *array = images[cat];
|
||||||
NSLog(@"Category %@: %u image(s).", cat, array.count);
|
NSLog(@"Category %@: %u image(s).", cat, array.count);
|
||||||
}
|
}
|
||||||
return images;
|
return images;
|
|
@ -12,9 +12,8 @@
|
||||||
@interface CategoryViewController :
|
@interface CategoryViewController :
|
||||||
GAITrackedViewController<UITableViewDelegate, UITableViewDataSource>
|
GAITrackedViewController<UITableViewDelegate, UITableViewDataSource>
|
||||||
|
|
||||||
@property(nonatomic, retain) NSString *category;
|
@property(nonatomic, strong) NSString *category;
|
||||||
@property(nonatomic, retain) NavController *navController;
|
@property(nonatomic, strong) IBOutlet UITableView *tableView;
|
||||||
@property(nonatomic, retain) IBOutlet UITableView *tableView;
|
|
||||||
|
|
||||||
- (id)initWithNibName:(NSString *)nibName
|
- (id)initWithNibName:(NSString *)nibName
|
||||||
bundle:(NSBundle *)nibBundle
|
bundle:(NSBundle *)nibBundle
|
|
@ -13,44 +13,31 @@
|
||||||
|
|
||||||
@interface CategoryViewController ()
|
@interface CategoryViewController ()
|
||||||
|
|
||||||
@property(nonatomic, retain) NSMutableArray *items;
|
@property(nonatomic, strong) NSMutableArray *items;
|
||||||
@property(nonatomic, assign) AppDelegate *delegate;
|
@property(nonatomic, weak) AppDelegate *delegate;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation CategoryViewController
|
@implementation CategoryViewController
|
||||||
|
|
||||||
@synthesize category = category_;
|
|
||||||
@synthesize navController = navController_;
|
|
||||||
@synthesize tableView = tableView_;
|
|
||||||
@synthesize items = items_;
|
|
||||||
@synthesize delegate = delegate_;
|
|
||||||
|
|
||||||
- (id)initWithNibName:(NSString *)nibName
|
- (id)initWithNibName:(NSString *)nibName
|
||||||
bundle:(NSBundle *)nibBundle
|
bundle:(NSBundle *)nibBundle
|
||||||
category:(NSString *)category {
|
category:(NSString *)category {
|
||||||
self = [super initWithNibName:nibName
|
self = [super initWithNibName:nibName
|
||||||
bundle:nibBundle];
|
bundle:nibBundle];
|
||||||
if (self) {
|
if (self) {
|
||||||
self.category = category;
|
_category = category;
|
||||||
self.trackedViewName = category;
|
_delegate = [UIApplication sharedApplication].delegate;
|
||||||
self.title = [NSString stringWithFormat:@"Cute %@s", category];
|
self.title = [NSString stringWithFormat:@"Cute %@s", category];
|
||||||
self.delegate = [UIApplication sharedApplication].delegate;
|
self.screenName = category;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
[category_ release];
|
|
||||||
[navController_ release];
|
|
||||||
[tableView_ release];
|
|
||||||
[items_ release];
|
|
||||||
[super dealloc];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
self.items = [self.delegate.images objectForKey:self.category];
|
self.items = (self.delegate.images)[self.category];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)shouldAutorotateToInterfaceOrientation:
|
- (BOOL)shouldAutorotateToInterfaceOrientation:
|
||||||
|
@ -74,14 +61,14 @@
|
||||||
}
|
}
|
||||||
NSString *title =
|
NSString *title =
|
||||||
[NSString stringWithFormat:@"%@ %d", self.category, indexPath.row];
|
[NSString stringWithFormat:@"%@ %d", self.category, indexPath.row];
|
||||||
UIImage *image = [self.items objectAtIndex:indexPath.row];
|
UIImage *image = (self.items)[indexPath.row];
|
||||||
ImageViewController *imageViewController =
|
ImageViewController *imageViewController =
|
||||||
[[[ImageViewController alloc] initWithNibName:nil
|
[[ImageViewController alloc] initWithNibName:nil
|
||||||
bundle:nil
|
bundle:nil
|
||||||
title:title
|
title:title
|
||||||
image:image] autorelease];
|
image:image];
|
||||||
[imageViewController.view addSubview:imageViewController.imageView];
|
[self.delegate.navController pushViewController:imageViewController
|
||||||
[self.navController pushViewController:imageViewController animated:YES];
|
animated:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark UITableViewDataSource methods
|
#pragma mark UITableViewDataSource methods
|
||||||
|
@ -101,17 +88,17 @@
|
||||||
static NSString *CellId = @"Cell";
|
static NSString *CellId = @"Cell";
|
||||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
|
||||||
if (!cell) {
|
if (!cell) {
|
||||||
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
|
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
|
||||||
reuseIdentifier:CellId] autorelease];
|
reuseIdentifier:CellId];
|
||||||
|
cell.textLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
|
||||||
}
|
}
|
||||||
|
|
||||||
cell.textLabel.text = [NSString stringWithFormat:@"%@ %d",
|
cell.textLabel.text = [NSString stringWithFormat:@"%@ %d",
|
||||||
self.category, indexPath.row];
|
self.category, indexPath.row];
|
||||||
cell.textLabel.font = [UIFont systemFontOfSize:14];
|
UIImage *image = (self.items)[indexPath.row];
|
||||||
UIImage *image = [self.items objectAtIndex:indexPath.row];
|
|
||||||
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d x %d",
|
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d x %d",
|
||||||
(int)image.size.width, (int)image.size.height];
|
(int)image.size.width, (int)image.size.height];
|
||||||
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
|
|
||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.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 */; };
|
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6F2A153E208D003CAC38 /* CoreData.framework */; };
|
||||||
115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115686551593CE6A00A5D031 /* SystemConfiguration.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 */; };
|
11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1C1561834700949704 /* CategoryViewController.m */; };
|
||||||
11FCCC201561834700949704 /* ImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1E1561834700949704 /* ImageViewController.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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
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 */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference 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; };
|
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; };
|
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; };
|
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 = "<group>"; };
|
|
||||||
11BC54021577E24400E7D657 /* GAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAI.h; path = ../../Library/GAI.h; sourceTree = "<group>"; };
|
11BC54021577E24400E7D657 /* GAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAI.h; path = ../../Library/GAI.h; sourceTree = "<group>"; };
|
||||||
11BC54031577E24500E7D657 /* GAITrackedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = ../../Library/GAITrackedViewController.h; sourceTree = "<group>"; };
|
11BC54031577E24500E7D657 /* GAITrackedViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITrackedViewController.h; path = ../../Library/GAITrackedViewController.h; sourceTree = "<group>"; };
|
||||||
11BC54041577E24500E7D657 /* GAITracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = ../../Library/GAITracker.h; sourceTree = "<group>"; };
|
11BC54041577E24500E7D657 /* GAITracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITracker.h; path = ../../Library/GAITracker.h; sourceTree = "<group>"; };
|
||||||
11BC54051577E24500E7D657 /* GAITransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITransaction.h; path = ../../Library/GAITransaction.h; sourceTree = "<group>"; };
|
|
||||||
11BC54061577E24500E7D657 /* GAITransactionItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GAITransactionItem.h; path = ../../Library/GAITransactionItem.h; sourceTree = "<group>"; };
|
|
||||||
11FCCC1B1561834700949704 /* CategoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CategoryViewController.h; sourceTree = SOURCE_ROOT; };
|
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; };
|
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; };
|
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; };
|
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; };
|
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; };
|
11FCCC33156189A600949704 /* Tiger-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-2.jpg"; path = "Images/Tiger-2.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = ../../../../libGoogleAnalyticsServices.a; sourceTree = "<group>"; };
|
||||||
|
F707E732174D7550008123BF /* GAIDictionaryBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAIDictionaryBuilder.h; path = ../../Library/GAIDictionaryBuilder.h; sourceTree = "<group>"; };
|
||||||
|
F707E733174D7550008123BF /* GAIFields.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAIFields.h; path = ../../Library/GAIFields.h; sourceTree = "<group>"; };
|
||||||
|
F707E734174D7550008123BF /* GAILogger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GAILogger.h; path = ../../Library/GAILogger.h; sourceTree = "<group>"; };
|
||||||
|
F7C47F20178B5B55003A7D0F /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = SOURCE_ROOT; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -98,7 +101,7 @@
|
||||||
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */,
|
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */,
|
||||||
113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */,
|
113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */,
|
||||||
113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */,
|
113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */,
|
||||||
11BC54011577E1F000E7D657 /* libGoogleAnalytics.a in Frameworks */,
|
88679A8E17A184FA00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -160,6 +163,7 @@
|
||||||
113B6EEE153E1F0B003CAC38 /* Supporting Files */ = {
|
113B6EEE153E1F0B003CAC38 /* Supporting Files */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F7C47F20178B5B55003A7D0F /* Settings.bundle */,
|
||||||
11FCCC211561899800949704 /* Images */,
|
11FCCC211561899800949704 /* Images */,
|
||||||
113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */,
|
113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */,
|
||||||
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */,
|
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */,
|
||||||
|
@ -170,12 +174,13 @@
|
||||||
113B6F1E153E1FAD003CAC38 /* Google Analytics Library */ = {
|
113B6F1E153E1FAD003CAC38 /* Google Analytics Library */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */,
|
||||||
|
F707E732174D7550008123BF /* GAIDictionaryBuilder.h */,
|
||||||
|
F707E733174D7550008123BF /* GAIFields.h */,
|
||||||
|
F707E734174D7550008123BF /* GAILogger.h */,
|
||||||
11BC54021577E24400E7D657 /* GAI.h */,
|
11BC54021577E24400E7D657 /* GAI.h */,
|
||||||
11BC54031577E24500E7D657 /* GAITrackedViewController.h */,
|
11BC54031577E24500E7D657 /* GAITrackedViewController.h */,
|
||||||
11BC54041577E24500E7D657 /* GAITracker.h */,
|
11BC54041577E24500E7D657 /* GAITracker.h */,
|
||||||
11BC54051577E24500E7D657 /* GAITransaction.h */,
|
|
||||||
11BC54061577E24500E7D657 /* GAITransactionItem.h */,
|
|
||||||
11BC53FF1577E1E000E7D657 /* libGoogleAnalytics.a */,
|
|
||||||
);
|
);
|
||||||
name = "Google Analytics Library";
|
name = "Google Analytics Library";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -231,7 +236,7 @@
|
||||||
113B6EDA153E1F0B003CAC38 /* Project object */ = {
|
113B6EDA153E1F0B003CAC38 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0430;
|
LastUpgradeCheck = 0460;
|
||||||
};
|
};
|
||||||
buildConfigurationList = 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */;
|
buildConfigurationList = 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */;
|
||||||
compatibilityVersion = "Xcode 3.2";
|
compatibilityVersion = "Xcode 3.2";
|
||||||
|
@ -276,6 +281,7 @@
|
||||||
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */,
|
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */,
|
||||||
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */,
|
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */,
|
||||||
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */,
|
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */,
|
||||||
|
F7C47F21178B5B56003A7D0F /* Settings.bundle in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -303,6 +309,10 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
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";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
@ -328,6 +338,10 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
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";
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
@ -346,6 +360,7 @@
|
||||||
113B6EFC153E1F0B003CAC38 /* Debug */ = {
|
113B6EFC153E1F0B003CAC38 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
|
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
|
||||||
INFOPLIST_FILE = "CuteAnimals-Info.plist";
|
INFOPLIST_FILE = "CuteAnimals-Info.plist";
|
||||||
|
@ -353,6 +368,7 @@
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"\"$(SRCROOT)/../../Library\"",
|
"\"$(SRCROOT)/../../Library\"",
|
||||||
|
"\"$(SRCROOT)/../../..\"",
|
||||||
);
|
);
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
|
@ -362,6 +378,7 @@
|
||||||
113B6EFD153E1F0B003CAC38 /* Release */ = {
|
113B6EFD153E1F0B003CAC38 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
|
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
|
||||||
INFOPLIST_FILE = "CuteAnimals-Info.plist";
|
INFOPLIST_FILE = "CuteAnimals-Info.plist";
|
||||||
|
@ -369,6 +386,7 @@
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"\"$(SRCROOT)/../../Library\"",
|
"\"$(SRCROOT)/../../Library\"",
|
||||||
|
"\"$(SRCROOT)/../../..\"",
|
||||||
);
|
);
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
|
@ -12,9 +12,6 @@
|
||||||
|
|
||||||
@interface ImageViewController : GAITrackedViewController
|
@interface ImageViewController : GAITrackedViewController
|
||||||
|
|
||||||
@property(nonatomic, retain) NavController *navController;
|
|
||||||
@property(nonatomic, retain) UIImageView *imageView;
|
|
||||||
|
|
||||||
- (id)initWithNibName:(NSString *)nibNameOrNil
|
- (id)initWithNibName:(NSString *)nibNameOrNil
|
||||||
bundle:(NSBundle *)nibBundleOrNil
|
bundle:(NSBundle *)nibBundleOrNil
|
||||||
title:(NSString *)title
|
title:(NSString *)title
|
|
@ -9,10 +9,13 @@
|
||||||
|
|
||||||
#import "AppDelegate.h"
|
#import "AppDelegate.h"
|
||||||
|
|
||||||
@implementation ImageViewController
|
@interface ImageViewController ()
|
||||||
|
|
||||||
@synthesize imageView = imageView_;
|
@property(nonatomic, strong) UIImage *image;
|
||||||
@synthesize navController = navController_;
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation ImageViewController
|
||||||
|
|
||||||
- (id)initWithNibName:(NSString *)nibNameOrNil
|
- (id)initWithNibName:(NSString *)nibNameOrNil
|
||||||
bundle:(NSBundle *)nibBundleOrNil
|
bundle:(NSBundle *)nibBundleOrNil
|
||||||
|
@ -21,19 +24,18 @@
|
||||||
self = [super initWithNibName:nibNameOrNil
|
self = [super initWithNibName:nibNameOrNil
|
||||||
bundle:nibBundleOrNil];
|
bundle:nibBundleOrNil];
|
||||||
if (self) {
|
if (self) {
|
||||||
self.title = self.trackedViewName = title;
|
_image = image;
|
||||||
self.imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
|
self.title = self.screenName = title;
|
||||||
self.imageView.userInteractionEnabled = YES;
|
|
||||||
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
|
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)viewDidLoad {
|
||||||
- (void)dealloc {
|
[super viewDidLoad];
|
||||||
[imageView_ release];
|
UIImageView *imageView = [[UIImageView alloc] initWithImage:self.image];
|
||||||
[navController_ release];
|
imageView.userInteractionEnabled = YES;
|
||||||
[super dealloc];
|
imageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||||
|
[self.view addSubview:imageView];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)shouldAutorotateToInterfaceOrientation:
|
- (BOOL)shouldAutorotateToInterfaceOrientation:
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
@ -10,7 +10,6 @@
|
||||||
@interface RootViewController :
|
@interface RootViewController :
|
||||||
GAITrackedViewController<UITableViewDelegate, UITableViewDataSource>
|
GAITrackedViewController<UITableViewDelegate, UITableViewDataSource>
|
||||||
|
|
||||||
@property(nonatomic, retain) NavController *navController;
|
@property(nonatomic, strong) IBOutlet UITableView *tableView;
|
||||||
@property(nonatomic, retain) IBOutlet UITableView *tableView;
|
|
||||||
|
|
||||||
@end
|
@end
|
|
@ -11,59 +11,38 @@
|
||||||
#import "ImageViewController.h"
|
#import "ImageViewController.h"
|
||||||
|
|
||||||
#import "GAI.h"
|
#import "GAI.h"
|
||||||
|
#import "GAIDictionaryBuilder.h"
|
||||||
|
|
||||||
@interface RootViewController ()
|
@interface RootViewController ()
|
||||||
|
|
||||||
@property(nonatomic, retain) NSArray *items;
|
@property(nonatomic, strong) NSArray *items;
|
||||||
@property(nonatomic, assign) AppDelegate *delegate;
|
@property(nonatomic, weak) AppDelegate *delegate;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation RootViewController
|
@implementation RootViewController
|
||||||
|
|
||||||
@synthesize tableView = tableView_;
|
|
||||||
@synthesize navController = navController_;
|
|
||||||
@synthesize items = items_;
|
|
||||||
@synthesize delegate = delegate_;
|
|
||||||
|
|
||||||
- (id)initWithNibName:(NSString *)nibName
|
- (id)initWithNibName:(NSString *)nibName
|
||||||
bundle:(NSBundle *)nibBundle {
|
bundle:(NSBundle *)nibBundle {
|
||||||
self = [super initWithNibName:nibName
|
self = [super initWithNibName:nibName
|
||||||
bundle:nibBundle];
|
bundle:nibBundle];
|
||||||
if (self) {
|
if (self) {
|
||||||
self.trackedViewName = @"root";
|
_delegate = [UIApplication sharedApplication].delegate;
|
||||||
self.title = @"Cute Animals";
|
self.title = @"Cute Animals";
|
||||||
self.delegate = [UIApplication sharedApplication].delegate;
|
self.screenName = @"root";
|
||||||
[self updateSecureButton];
|
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
[tableView_ release];
|
|
||||||
[navController_ release];
|
|
||||||
[items_ release];
|
|
||||||
[super dealloc];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)updateSecureButton {
|
- (void)dispatch {
|
||||||
if ([GAI sharedInstance].defaultTracker.useHttps) {
|
NSMutableDictionary *event =
|
||||||
self.navigationItem.leftBarButtonItem.title = @"HTTPS";
|
[[GAIDictionaryBuilder createEventWithCategory:@"UI"
|
||||||
self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone;
|
action:@"buttonPress"
|
||||||
} else {
|
label:@"dispatch"
|
||||||
self.navigationItem.leftBarButtonItem.title = @"HTTP";
|
value:nil] build];
|
||||||
self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleBordered;
|
[[GAI sharedInstance].defaultTracker send:event];
|
||||||
}
|
[[GAI sharedInstance] dispatch];
|
||||||
}
|
|
||||||
|
|
||||||
- (void)toggleSecure {
|
|
||||||
[GAI sharedInstance].defaultTracker.useHttps =
|
|
||||||
![GAI sharedInstance].defaultTracker.useHttps;
|
|
||||||
[self updateSecureButton];
|
|
||||||
[[GAI sharedInstance].defaultTracker sendEventWithCategory:@"secureDispatch"
|
|
||||||
withAction:@"toggle"
|
|
||||||
withLabel:nil
|
|
||||||
withValue:nil];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)crash {
|
- (void)crash {
|
||||||
|
@ -74,17 +53,15 @@
|
||||||
- (void)viewDidLoad {
|
- (void)viewDidLoad {
|
||||||
[super viewDidLoad];
|
[super viewDidLoad];
|
||||||
self.navigationItem.leftBarButtonItem =
|
self.navigationItem.leftBarButtonItem =
|
||||||
[[[UIBarButtonItem alloc]
|
[[UIBarButtonItem alloc] initWithTitle:@"Dispatch"
|
||||||
initWithTitle:@"HTTP"
|
|
||||||
style:UIBarButtonItemStyleBordered
|
style:UIBarButtonItemStyleBordered
|
||||||
target:self
|
target:self
|
||||||
action:@selector(toggleSecure)] autorelease];
|
action:@selector(dispatch)];
|
||||||
self.navigationItem.rightBarButtonItem =
|
self.navigationItem.rightBarButtonItem =
|
||||||
[[[UIBarButtonItem alloc]
|
[[UIBarButtonItem alloc] initWithTitle:@"Crash"
|
||||||
initWithTitle:@"Crash"
|
|
||||||
style:UIBarButtonItemStyleBordered
|
style:UIBarButtonItemStyleBordered
|
||||||
target:self
|
target:self
|
||||||
action:@selector(crash)] autorelease];
|
action:@selector(crash)];
|
||||||
self.items =
|
self.items =
|
||||||
[[self.delegate.images allKeys]
|
[[self.delegate.images allKeys]
|
||||||
sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
|
sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
|
||||||
|
@ -106,16 +83,16 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSString *category = [self.items objectAtIndex:indexPath.row];
|
NSString *category = (self.items)[indexPath.row];
|
||||||
NSString *nib = ([[UIDevice currentDevice] userInterfaceIdiom] ==
|
NSString *nib = ([[UIDevice currentDevice] userInterfaceIdiom] ==
|
||||||
UIUserInterfaceIdiomPhone) ? @"CategoryViewController_iPhone" :
|
UIUserInterfaceIdiomPhone) ? @"CategoryViewController_iPhone" :
|
||||||
@"CategoryViewController_iPad";
|
@"CategoryViewController_iPad";
|
||||||
CategoryViewController *categoryController =
|
CategoryViewController *categoryController =
|
||||||
[[[CategoryViewController alloc] initWithNibName:nib
|
[[CategoryViewController alloc] initWithNibName:nib
|
||||||
bundle:nil
|
bundle:nil
|
||||||
category:category] autorelease];
|
category:category];
|
||||||
categoryController.navController = self.navController;
|
[self.delegate.navController pushViewController:categoryController
|
||||||
[self.navController pushViewController:categoryController animated:YES];
|
animated:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark UITableViewDataSource methods
|
#pragma mark UITableViewDataSource methods
|
||||||
|
@ -131,23 +108,22 @@
|
||||||
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
|
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
NSString *category = [self.items objectAtIndex:indexPath.row];
|
NSString *category = (self.items)[indexPath.row];
|
||||||
|
|
||||||
static NSString *CellId = @"Cell";
|
static NSString *CellId = @"Cell";
|
||||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
|
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
|
||||||
if (!cell) {
|
if (!cell) {
|
||||||
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
|
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
|
||||||
reuseIdentifier:CellId] autorelease];
|
reuseIdentifier:CellId];
|
||||||
|
cell.textLabel.font = [UIFont systemFontOfSize:14];
|
||||||
|
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
|
||||||
}
|
}
|
||||||
|
|
||||||
NSString *label = [NSString stringWithFormat:@"Cute %@ Pictures!", category];
|
NSString *label = [NSString stringWithFormat:@"Cute %@ Pictures!", category];
|
||||||
cell.textLabel.text = label;
|
cell.textLabel.text = label;
|
||||||
cell.textLabel.font = [UIFont systemFontOfSize:14];
|
NSUInteger imageCount = [(self.delegate.images)[category] count];
|
||||||
NSUInteger imageCount =
|
|
||||||
[(NSArray *)[self.delegate.images objectForKey:category] count];
|
|
||||||
cell.detailTextLabel.text = [NSString stringWithFormat:@"%u image(s).",
|
cell.detailTextLabel.text = [NSString stringWithFormat:@"%u image(s).",
|
||||||
imageCount];
|
imageCount];
|
||||||
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
|
|
||||||
return cell;
|
return cell;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>PreferenceSpecifiers</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>DefaultValue</key>
|
||||||
|
<true/>
|
||||||
|
<key>Key</key>
|
||||||
|
<string>allowTracking</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>Allow analytics</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSToggleSwitchSpecifier</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>StringsTable</key>
|
||||||
|
<string>Root</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -1,11 +1,12 @@
|
||||||
/*!
|
/*!
|
||||||
@header GAI.h
|
@header GAI.h
|
||||||
@abstract Google Analytics iOS SDK Header
|
@abstract Google Analytics iOS SDK Header
|
||||||
@version 2.0
|
@version 3.0
|
||||||
@copyright Copyright 2011 Google Inc. All rights reserved.
|
@copyright Copyright 2013 Google Inc. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
#import "GAILogger.h"
|
||||||
#import "GAITracker.h"
|
#import "GAITracker.h"
|
||||||
#import "GAITrackedViewController.h"
|
#import "GAITrackedViewController.h"
|
||||||
|
|
||||||
|
@ -49,11 +50,9 @@ typedef enum {
|
||||||
@property(nonatomic, assign) id<GAITracker> defaultTracker;
|
@property(nonatomic, assign) id<GAITracker> defaultTracker;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
If true, Google Analytics debug messages will be logged with `NSLog()`. This is
|
The GAILogger to use.
|
||||||
useful for debugging calls to the Google Analytics SDK.
|
*/
|
||||||
|
@property(nonatomic, retain) id<GAILogger> logger;
|
||||||
By default, this flag is set to `NO`. */
|
|
||||||
@property(nonatomic, assign) BOOL debug;
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
When this is true, no tracking information will be gathered; tracking calls
|
When this is true, no tracking information will be gathered; tracking calls
|
||||||
|
@ -69,14 +68,9 @@ typedef enum {
|
||||||
@property(nonatomic, assign) BOOL optOut;
|
@property(nonatomic, assign) BOOL optOut;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
If this value is negative, tracking information must be sent manually by
|
If this value is positive, tracking information will be automatically
|
||||||
calling dispatch. If this value is zero, tracking information will
|
dispatched every dispatchInterval seconds. Otherwise, tracking information must
|
||||||
automatically be sent as soon as possible (usually immediately if the device
|
be sent manually by calling dispatch.
|
||||||
has Internet connectivity). If this value is positive, tracking information
|
|
||||||
will be automatically dispatched every dispatchInterval seconds.
|
|
||||||
|
|
||||||
When the dispatchInterval is non-zero, setting it to zero will cause any queued
|
|
||||||
tracking information to be sent immediately.
|
|
||||||
|
|
||||||
By default, this is set to `120`, which indicates tracking information should
|
By default, this is set to `120`, which indicates tracking information should
|
||||||
be dispatched automatically every 120 seconds.
|
be dispatched automatically every 120 seconds.
|
||||||
|
@ -94,31 +88,72 @@ typedef enum {
|
||||||
*/
|
*/
|
||||||
@property(nonatomic, assign) BOOL trackUncaughtExceptions;
|
@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. */
|
/*! Get the shared instance of the Google Analytics for iOS class. */
|
||||||
+ (GAI *)sharedInstance;
|
+ (GAI *)sharedInstance;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Create or retrieve a GAITracker implementation with the specified tracking
|
Creates or retrieves a GAITracker implementation with the specified name and
|
||||||
ID. If the tracker for the specified tracking ID does not already exist, then
|
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
|
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. If the existing tracker for the respective name has a different
|
||||||
returned here.
|
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
|
@param name The name of this tracker. Must not be `nil` or empty.
|
||||||
be `nil` or empty.
|
|
||||||
|
@param trackingID The tracking ID to use for this tracker. It should be of
|
||||||
|
the form `UA-xxxxx-y`.
|
||||||
|
|
||||||
|
@return A GAITracker associated with the specified name. The tracker
|
||||||
|
can be used to send tracking data to Google Analytics. The first time this
|
||||||
|
method is called with a particular name, the tracker for that name will be
|
||||||
|
returned, and subsequent calls with the same name will return the same
|
||||||
|
instance. It is not necessary to retain the tracker because the tracker will be
|
||||||
|
retained internally by the library.
|
||||||
|
|
||||||
|
If an error occurs or the name is not valid, this method will return
|
||||||
|
`nil`.
|
||||||
|
*/
|
||||||
|
- (id<GAITracker>)trackerWithName:(NSString *)name
|
||||||
|
trackingId:(NSString *)trackingId;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Creates or retrieves a GAITracker implementation with name equal to
|
||||||
|
the specified tracking ID. If the tracker for the respective name does not
|
||||||
|
already exist, it is created, has it's tracking ID set to |trackingId|,
|
||||||
|
and is returned; otherwise, the existing tracker is returned. If the existing
|
||||||
|
tracker for the respective name has a different tracking ID, that tracking ID
|
||||||
|
is not changed by this method. If defaultTracker is not set, it is set to the
|
||||||
|
tracker instance returned here.
|
||||||
|
|
||||||
|
@param trackingID The tracking ID to use for this tracker. It should be of
|
||||||
|
the form `UA-xxxxx-y`. The name of the tracker will be the same as trackingID.
|
||||||
|
|
||||||
@return A GAITracker associated with the specified trackingID. The tracker
|
@return A GAITracker associated with the specified trackingID. The tracker
|
||||||
can be used to send tracking data to Google Analytics. The first time this
|
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
|
method is called with a particular trackingID, the tracker for the respective
|
||||||
ID will be returned, and subsequent calls with the same tracking ID will return
|
name will be returned, and subsequent calls with the same trackingID
|
||||||
the same instance. It is not necessary to retain the tracker because the
|
will return the same instance. It is not necessary to retain the tracker
|
||||||
tracker will be retained internally by the library.
|
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 trackingId is not valid, this method will return
|
||||||
`nil`.
|
`nil`.
|
||||||
*/
|
*/
|
||||||
- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId;
|
- (id<GAITracker>)trackerWithTrackingId:(NSString *)trackingId;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Remove a tracker from the trackers dictionary. If it is the default tracker,
|
||||||
|
clears the default tracker as well.
|
||||||
|
|
||||||
|
@param name The name of the tracker.
|
||||||
|
*/
|
||||||
|
- (void)removeTrackerByName:(NSString *)name;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Dispatches any pending tracking information.
|
Dispatches any pending tracking information.
|
||||||
|
|
|
@ -0,0 +1,178 @@
|
||||||
|
/*!
|
||||||
|
@header GAIDictionaryBuilder.h
|
||||||
|
@abstract Google Analytics iOS SDK Hit Format Header
|
||||||
|
@copyright Copyright 2013 Google Inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Helper class to build a dictionary of hit parameters and values.
|
||||||
|
* <br>
|
||||||
|
* Examples:
|
||||||
|
* <code>
|
||||||
|
* id<GAITracker> t = // get a tracker.
|
||||||
|
* [t send:[[GAIDictionaryBuilder createEventWithCategory:@"EventCategory"
|
||||||
|
* action:@"EventAction"
|
||||||
|
* label:nil
|
||||||
|
* value:nil]
|
||||||
|
* set:@"dimension1" forKey:[GAIFields CustomDimension:1] build]];
|
||||||
|
* </code>
|
||||||
|
* This will send an event hit type with the specified parameters
|
||||||
|
* and a custom dimension parameter.
|
||||||
|
* <br>
|
||||||
|
* If you want to send a parameter with all hits, set it on GAITracker directly.
|
||||||
|
* <code>
|
||||||
|
* [t set:kGAIScreenName value:@"Home"];
|
||||||
|
* [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
|
||||||
|
* action:@"PlusOne"
|
||||||
|
* target:@"SOME_URL"] build]];
|
||||||
|
* [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
|
||||||
|
* action:@"Share"
|
||||||
|
* target:@"SOME_POST"] build]];
|
||||||
|
* [t send:[[GAIDictionaryBuilder createSocialWithNetwork:@"Google+"
|
||||||
|
* action:@"HangOut"
|
||||||
|
* target:@"SOME_CIRCLE"]
|
||||||
|
* build]];
|
||||||
|
* </code>
|
||||||
|
* You can override a value set on the tracker by adding it to the dictionary.
|
||||||
|
* <code>
|
||||||
|
* [t set:kGAIScreenName value:@"Home"];
|
||||||
|
* [t send:...];
|
||||||
|
* [t send[[[GAIDictionaryBuilder createEventWithCategory:@"click"
|
||||||
|
* action:@"popup"
|
||||||
|
* label:nil
|
||||||
|
* value:nil]
|
||||||
|
* set:@"popup title" forKey:kGAIScreenName] build]];
|
||||||
|
* </code>
|
||||||
|
* The values set via [GAIDictionaryBuilder set] or
|
||||||
|
* [GAIDictionaryBuilder setAll] will override any existing values in the
|
||||||
|
* GAIDictionaryBuilder object (i.e. initialized by
|
||||||
|
* [GAIDictionaryBuilder createXYZ]). e.g.
|
||||||
|
* <code>
|
||||||
|
* GAIDictionaryBuilder *m =
|
||||||
|
* GAIDictionaryBuilder createTimingWithCategory:@"category"
|
||||||
|
* interval:@0
|
||||||
|
* name:@"name"
|
||||||
|
* label:nil];
|
||||||
|
* [t send:[m.set:@"10" forKey:kGAITimingVar] build];
|
||||||
|
* [t send:[m.set:@"20" forKey:kGAITimingVar] build];
|
||||||
|
* </code>
|
||||||
|
*/
|
||||||
|
@interface GAIDictionaryBuilder : NSObject
|
||||||
|
|
||||||
|
- (GAIDictionaryBuilder *)set:(NSString *)value
|
||||||
|
forKey:(NSString *)key;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Copies all the name-value pairs from params into this object, ignoring any
|
||||||
|
* keys that are not NSString and any values that are neither NSString or
|
||||||
|
* NSNull.
|
||||||
|
*/
|
||||||
|
- (GAIDictionaryBuilder *)setAll:(NSDictionary *)params;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Returns the value for the input parameter paramName, or nil if paramName
|
||||||
|
* is not present.
|
||||||
|
*/
|
||||||
|
- (NSString *)get:(NSString *)paramName;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Return an NSMutableDictionary object with all the parameters set in this
|
||||||
|
*/
|
||||||
|
- (NSMutableDictionary *)build;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Parses and translates utm campaign parameters to analytics campaign param
|
||||||
|
* and returns them as a map.
|
||||||
|
*
|
||||||
|
* @param params url containing utm campaign parameters.
|
||||||
|
*
|
||||||
|
* Valid campaign parameters are:
|
||||||
|
* <ul>
|
||||||
|
* <li>utm_id</li>
|
||||||
|
* <li>utm_campaign</li>
|
||||||
|
* <li>utm_content</li>
|
||||||
|
* <li>utm_medium</li>
|
||||||
|
* <li>utm_source</li>
|
||||||
|
* <li>utm_term</li>
|
||||||
|
* <li>dclid</li>
|
||||||
|
* <li>gclid</li>
|
||||||
|
* <li>gmob_t</li>
|
||||||
|
* </ul>
|
||||||
|
* <p>
|
||||||
|
* Example:
|
||||||
|
* http://my.site.com/index.html?utm_campaign=wow&utm_source=source
|
||||||
|
* utm_campaign=wow&utm_source=source.
|
||||||
|
* <p>
|
||||||
|
* For more information on auto-tagging, see
|
||||||
|
* http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55590
|
||||||
|
* <p>
|
||||||
|
* For more information on manual tagging, see
|
||||||
|
* http://support.google.com/googleanalytics/bin/answer.py?hl=en&answer=55518
|
||||||
|
*/
|
||||||
|
- (GAIDictionaryBuilder *)setCampaignParametersFromUrl:(NSString *)urlString;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a GAIDictionaryBuilder object with parameters specific to an appview
|
||||||
|
hit.
|
||||||
|
|
||||||
|
Note that using this method will not set the screen name for followon hits. To
|
||||||
|
do that you need to call set:kGAIDescription value:<screenName> on the
|
||||||
|
GAITracker instance.
|
||||||
|
*/
|
||||||
|
+ (GAIDictionaryBuilder *)createAppView;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a GAIDictionaryBuilder object with parameters specific to an event hit.
|
||||||
|
*/
|
||||||
|
+ (GAIDictionaryBuilder *)createEventWithCategory:(NSString *)category
|
||||||
|
action:(NSString *)action
|
||||||
|
label:(NSString *)label
|
||||||
|
value:(NSNumber *)value;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a GAIDictionaryBuilder object with parameters specific to an exception
|
||||||
|
hit.
|
||||||
|
*/
|
||||||
|
+ (GAIDictionaryBuilder *)createExceptionWithDescription:(NSString *)description
|
||||||
|
withFatal:(NSNumber *)fatal;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a GAIDictionaryBuilder object with parameters specific to an item hit.
|
||||||
|
*/
|
||||||
|
+ (GAIDictionaryBuilder *)createItemWithTransactionId:(NSString *)transactionId
|
||||||
|
name:(NSString *)name
|
||||||
|
sku:(NSString *)sku
|
||||||
|
category:(NSString *)category
|
||||||
|
price:(NSNumber *)price
|
||||||
|
quantity:(NSNumber *)quantity
|
||||||
|
currencyCode:(NSString *)currencyCode;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a GAIDictionaryBuilder object with parameters specific to a social hit.
|
||||||
|
*/
|
||||||
|
+ (GAIDictionaryBuilder *)createSocialWithNetwork:(NSString *)network
|
||||||
|
action:(NSString *)action
|
||||||
|
target:(NSString *)target;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a GAIDictionaryBuilder object with parameters specific to a timing hit.
|
||||||
|
*/
|
||||||
|
+ (GAIDictionaryBuilder *)createTimingWithCategory:(NSString *)category
|
||||||
|
interval:(NSNumber *)intervalMillis
|
||||||
|
name:(NSString *)name
|
||||||
|
label:(NSString *)label;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Returns a GAIDictionaryBuilder object with parameters specific to a transaction
|
||||||
|
hit.
|
||||||
|
*/
|
||||||
|
+ (GAIDictionaryBuilder *)createTransactionWithId:(NSString *)transactionId
|
||||||
|
affiliation:(NSString *)affiliation
|
||||||
|
revenue:(NSNumber *)revenue
|
||||||
|
tax:(NSNumber *)tax
|
||||||
|
shipping:(NSNumber *)shipping
|
||||||
|
currencyCode:(NSString *)currencyCode;
|
||||||
|
|
||||||
|
@end
|
|
@ -0,0 +1,123 @@
|
||||||
|
/*!
|
||||||
|
@header GAIFields.h
|
||||||
|
@abstract Google Analytics iOS SDK Hit Format Header
|
||||||
|
@copyright Copyright 2013 Google Inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
These fields can be used for the wire format parameter names required by
|
||||||
|
the |GAITracker| get, set and send methods as well as the set methods in the
|
||||||
|
|GAIDictionaryBuilder| class.
|
||||||
|
*/
|
||||||
|
extern NSString *const kGAIUseSecure;
|
||||||
|
|
||||||
|
extern NSString *const kGAIHitType;
|
||||||
|
extern NSString *const kGAITrackingId;
|
||||||
|
extern NSString *const kGAIClientId;
|
||||||
|
extern NSString *const kGAIAnonymizeIp;
|
||||||
|
extern NSString *const kGAISessionControl;
|
||||||
|
extern NSString *const kGAIScreenResolution;
|
||||||
|
extern NSString *const kGAIViewportSize;
|
||||||
|
extern NSString *const kGAIEncoding;
|
||||||
|
extern NSString *const kGAIScreenColors;
|
||||||
|
extern NSString *const kGAILanguage;
|
||||||
|
extern NSString *const kGAIJavaEnabled;
|
||||||
|
extern NSString *const kGAIFlashVersion;
|
||||||
|
extern NSString *const kGAINonInteraction;
|
||||||
|
extern NSString *const kGAIReferrer;
|
||||||
|
extern NSString *const kGAILocation;
|
||||||
|
extern NSString *const kGAIHostname;
|
||||||
|
extern NSString *const kGAIPage;
|
||||||
|
extern NSString *const kGAIDescription; // synonym for kGAIScreenName
|
||||||
|
extern NSString *const kGAIScreenName; // synonym for kGAIDescription
|
||||||
|
extern NSString *const kGAITitle;
|
||||||
|
extern NSString *const kGAIAppName;
|
||||||
|
extern NSString *const kGAIAppVersion;
|
||||||
|
extern NSString *const kGAIAppId;
|
||||||
|
extern NSString *const kGAIAppInstallerId;
|
||||||
|
|
||||||
|
extern NSString *const kGAIEventCategory;
|
||||||
|
extern NSString *const kGAIEventAction;
|
||||||
|
extern NSString *const kGAIEventLabel;
|
||||||
|
extern NSString *const kGAIEventValue;
|
||||||
|
|
||||||
|
extern NSString *const kGAISocialNetwork;
|
||||||
|
extern NSString *const kGAISocialAction;
|
||||||
|
extern NSString *const kGAISocialTarget;
|
||||||
|
|
||||||
|
extern NSString *const kGAITransactionId;
|
||||||
|
extern NSString *const kGAITransactionAffiliation;
|
||||||
|
extern NSString *const kGAITransactionRevenue;
|
||||||
|
extern NSString *const kGAITransactionShipping;
|
||||||
|
extern NSString *const kGAITransactionTax;
|
||||||
|
extern NSString *const kGAICurrencyCode;
|
||||||
|
|
||||||
|
extern NSString *const kGAIItemPrice;
|
||||||
|
extern NSString *const kGAIItemQuantity;
|
||||||
|
extern NSString *const kGAIItemSku;
|
||||||
|
extern NSString *const kGAIItemName;
|
||||||
|
extern NSString *const kGAIItemCategory;
|
||||||
|
|
||||||
|
extern NSString *const kGAICampaignSource;
|
||||||
|
extern NSString *const kGAICampaignMedium;
|
||||||
|
extern NSString *const kGAICampaignName;
|
||||||
|
extern NSString *const kGAICampaignKeyword;
|
||||||
|
extern NSString *const kGAICampaignContent;
|
||||||
|
extern NSString *const kGAICampaignId;
|
||||||
|
|
||||||
|
extern NSString *const kGAITimingCategory;
|
||||||
|
extern NSString *const kGAITimingVar;
|
||||||
|
extern NSString *const kGAITimingValue;
|
||||||
|
extern NSString *const kGAITimingLabel;
|
||||||
|
|
||||||
|
extern NSString *const kGAIExDescription;
|
||||||
|
extern NSString *const kGAIExFatal;
|
||||||
|
|
||||||
|
extern NSString *const kGAISampleRate;
|
||||||
|
|
||||||
|
// hit types
|
||||||
|
extern NSString *const kGAIAppView;
|
||||||
|
extern NSString *const kGAIEvent;
|
||||||
|
extern NSString *const kGAISocial;
|
||||||
|
extern NSString *const kGAITransaction;
|
||||||
|
extern NSString *const kGAIItem;
|
||||||
|
extern NSString *const kGAIException;
|
||||||
|
extern NSString *const kGAITiming;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
This class provides several fields and methods useful as wire format parameter
|
||||||
|
names. The methods are used for wire format parameter names that are indexed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@interface GAIFields : NSObject
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Generates the correct parameter name for a content group with an index.
|
||||||
|
|
||||||
|
@param index the index of the content group.
|
||||||
|
|
||||||
|
@return an NSString representing the content group parameter for the index.
|
||||||
|
*/
|
||||||
|
+ (NSString *)contentGroupForIndex:(NSUInteger)index;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Generates the correct parameter name for a custon dimension with an index.
|
||||||
|
|
||||||
|
@param index the index of the custom dimension.
|
||||||
|
|
||||||
|
@return an NSString representing the custom dimension parameter for the index.
|
||||||
|
*/
|
||||||
|
+ (NSString *)customDimensionForIndex:(NSUInteger)index;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Generates the correct parameter name for a custom metric with an index.
|
||||||
|
|
||||||
|
@param index the index of the custom metric.
|
||||||
|
|
||||||
|
@return an NSString representing the custom metric parameter for the index.
|
||||||
|
*/
|
||||||
|
+ (NSString *)customMetricForIndex:(NSUInteger)index;
|
||||||
|
|
||||||
|
@end
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*!
|
||||||
|
@header GAILogger.h
|
||||||
|
@abstract Google Analytics iOS SDK Source
|
||||||
|
@copyright Copyright 2011 Google Inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
typedef NS_ENUM(NSUInteger, GAILogLevel) {
|
||||||
|
kGAILogLevelNone = 0,
|
||||||
|
kGAILogLevelError = 1,
|
||||||
|
kGAILogLevelWarning = 2,
|
||||||
|
kGAILogLevelInfo = 3,
|
||||||
|
kGAILogLevelVerbose = 4
|
||||||
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Protocol to be used for logging debug and informational messages from the SDK.
|
||||||
|
Implementations of this protocol can be provided to the |GAI| class,
|
||||||
|
to be used as the logger by the SDK. See the |logger| property in GAI.h.
|
||||||
|
*/
|
||||||
|
@protocol GAILogger<NSObject>
|
||||||
|
@required
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Only messages of |logLevel| and below are logged.
|
||||||
|
*/
|
||||||
|
@property (nonatomic, assign) GAILogLevel logLevel;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Logs message with log level |kGAILogLevelVerbose|.
|
||||||
|
*/
|
||||||
|
- (void)verbose:(NSString *)message;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Logs message with log level |kGAILogLevelInfo|.
|
||||||
|
*/
|
||||||
|
- (void)info:(NSString *)message;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Logs message with log level |kGAILogLevelWarning|.
|
||||||
|
*/
|
||||||
|
- (void)warning:(NSString *)message;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Logs message with log level |kGAILogLevelError|.
|
||||||
|
*/
|
||||||
|
- (void)error:(NSString *)message;
|
||||||
|
@end
|
|
@ -11,18 +11,14 @@
|
||||||
@protocol GAITracker;
|
@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:`
|
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
|
By default, this will use [GAI defaultTracker] for tracking calls, but one can
|
||||||
override this by setting the tracker property.
|
override this by setting the tracker property.
|
||||||
*/
|
*/
|
||||||
@interface GAITrackedViewController : UIViewController {
|
@interface GAITrackedViewController : UIViewController
|
||||||
@private
|
|
||||||
id<GAITracker> tracker_;
|
|
||||||
NSString *trackedViewName_;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
The tracker on which view tracking calls are be made, or `nil`, in which case
|
The tracker on which view tracking calls are be made, or `nil`, in which case
|
||||||
|
@ -30,9 +26,9 @@
|
||||||
*/
|
*/
|
||||||
@property(nonatomic, assign) id<GAITracker> tracker;
|
@property(nonatomic, assign) id<GAITracker> tracker;
|
||||||
/*!
|
/*!
|
||||||
The view name, for purposes of Google Analytics view tracking. If this is
|
The screen name, for purposes of Google Analytics tracking. If this is `nil`,
|
||||||
`nil`, no tracking calls will be made.
|
no tracking calls will be made.
|
||||||
*/
|
*/
|
||||||
@property(nonatomic, copy) NSString *trackedViewName;
|
@property(nonatomic, copy) NSString *screenName;
|
||||||
|
|
||||||
@end
|
@end
|
|
@ -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 <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Google Analytics tracking interface. Obtain instances of this interface from
|
||||||
|
[GAI trackerWithTrackingId:] to track screens, events, transactions, timing,
|
||||||
|
and exceptions. The implementation of this interface is thread-safe, and no
|
||||||
|
calls are expected to block or take a long time. All network and disk activity
|
||||||
|
will take place in the background.
|
||||||
|
*/
|
||||||
|
@protocol GAITracker<NSObject>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Name of this tracker.
|
||||||
|
*/
|
||||||
|
@property(nonatomic, readonly) NSString *name;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Set a tracking parameter.
|
||||||
|
|
||||||
|
@param parameterName The parameter name.
|
||||||
|
|
||||||
|
@param value The value to set for the parameter. If this is nil, the
|
||||||
|
value for the parameter will be cleared.
|
||||||
|
*/
|
||||||
|
- (void)set:(NSString *)parameterName
|
||||||
|
value:(NSString *)value;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get a tracking parameter.
|
||||||
|
|
||||||
|
@param parameterName The parameter name.
|
||||||
|
|
||||||
|
@returns The parameter value, or nil if no value for the given parameter is
|
||||||
|
set.
|
||||||
|
*/
|
||||||
|
- (NSString *)get:(NSString *)parameterName;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Queue tracking information with the given parameter values.
|
||||||
|
|
||||||
|
@param parameters A map from parameter names to parameter values which will be
|
||||||
|
set just for this piece of tracking information, or nil for none.
|
||||||
|
*/
|
||||||
|
- (void)send:(NSDictionary *)parameters;
|
||||||
|
|
||||||
|
@end
|
75
Frameworks/Google Analytics SDK/GoogleAnalytics/Readme.txt
Normal file
|
@ -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)
|
||||||
|
|
||||||
|
================================================================================
|
|
@ -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.
|
||||||
|
|
|
@ -2,22 +2,23 @@
|
||||||
// AppDelegate.h
|
// AppDelegate.h
|
||||||
// CuteAnimals
|
// CuteAnimals
|
||||||
//
|
//
|
||||||
// Copyright 2012 Google, Inc. All rights reserved.
|
// Copyright 2013 Google, Inc. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
#import "GAI.h"
|
|
||||||
|
|
||||||
@class RootViewController;
|
@class RootViewController;
|
||||||
@class NavController;
|
@class NavController;
|
||||||
|
@class TAGManager;
|
||||||
|
@class TAGContainer;
|
||||||
|
|
||||||
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
@interface AppDelegate : UIResponder <UIApplicationDelegate>
|
||||||
|
|
||||||
@property(nonatomic, retain) UIWindow *window;
|
@property(nonatomic, retain) UIWindow *window;
|
||||||
@property(nonatomic, retain) NavController *navController;
|
@property(nonatomic, retain) NavController *navController;
|
||||||
@property(nonatomic, retain) RootViewController *viewController;
|
@property(nonatomic, retain) RootViewController *viewController;
|
||||||
@property(nonatomic, retain) id<GAITracker> tracker;
|
|
||||||
@property(nonatomic, retain) NSDictionary *images;
|
@property(nonatomic, retain) NSDictionary *images;
|
||||||
|
@property(nonatomic, retain) TAGManager *tagManager;
|
||||||
|
@property(nonatomic, retain) TAGContainer *container;
|
||||||
|
|
||||||
@end
|
@end
|
|
@ -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<TAGContainerFuture> future =
|
||||||
|
[TAGContainerOpener openContainerWithId:@"GTM-XXXX"
|
||||||
|
tagManager:self.tagManager
|
||||||
|
openType:kTAGOpenTypePreferNonDefault
|
||||||
|
timeout:nil];
|
||||||
|
|
||||||
|
self.images = [self loadImages];
|
||||||
|
|
||||||
|
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||||
|
|
||||||
|
self.container = [future get];
|
||||||
|
// Register two custom function call macros to the container.
|
||||||
|
[self.container registerFunctionCallMacroHandler:[[CustomMacroHandler alloc] init]
|
||||||
|
forMacro:@"increment"];
|
||||||
|
[self.container registerFunctionCallMacroHandler:[[CustomMacroHandler alloc] init]
|
||||||
|
forMacro:@"mod"];
|
||||||
|
// Register a custom function call tag to the container.
|
||||||
|
[self.container registerFunctionCallTagHandler:[[CustomTagHandler alloc] init]
|
||||||
|
forTag:@"custom_tag"];
|
||||||
|
|
||||||
|
self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController"
|
||||||
|
bundle:nil];
|
||||||
|
|
||||||
|
self.navController = [[NavController alloc] initWithRootViewController:self.viewController];
|
||||||
|
self.navController.delegate = self.navController;
|
||||||
|
|
||||||
|
self.viewController.navController = self.navController;
|
||||||
|
self.window.rootViewController = self.navController;
|
||||||
|
[self.window makeKeyAndVisible];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)application:(UIApplication *)application
|
||||||
|
openURL:(NSURL *)url
|
||||||
|
sourceApplication:(NSString *)sourceApplication
|
||||||
|
annotation:(id)annotation {
|
||||||
|
if ([self.tagManager previewWithUrl:url]) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Code to handle other urls.
|
||||||
|
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDictionary *)loadImages {
|
||||||
|
NSArray *contents = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg"
|
||||||
|
inDirectory:nil];
|
||||||
|
if (!contents) {
|
||||||
|
NSLog(@"Failed to load directory contents");
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
NSMutableDictionary *images = [NSMutableDictionary dictionaryWithCapacity:0];
|
||||||
|
for (NSString *file in contents) {
|
||||||
|
NSArray *components = [[file lastPathComponent] componentsSeparatedByString:@"-"];
|
||||||
|
if (components.count == 0) {
|
||||||
|
NSLog(@"Filename doesn't contain dash: %@", file);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
UIImage *image = [UIImage imageWithContentsOfFile:file];
|
||||||
|
if (!image) {
|
||||||
|
NSLog(@"Failed to load file: %@", file);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
NSString *prefix = [components objectAtIndex:0];
|
||||||
|
NSMutableArray *categoryImages = [images objectForKey:prefix];
|
||||||
|
if (!categoryImages) {
|
||||||
|
categoryImages = [NSMutableArray arrayWithCapacity:0];
|
||||||
|
[images setObject:categoryImages
|
||||||
|
forKey:prefix];
|
||||||
|
}
|
||||||
|
[categoryImages addObject:image];
|
||||||
|
}
|
||||||
|
for (NSString *cat in [images allKeys]) {
|
||||||
|
NSArray *array = [images objectForKey:cat];
|
||||||
|
NSLog(@"Category %@: %u image(s).", cat, array.count);
|
||||||
|
}
|
||||||
|
return images;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -0,0 +1,22 @@
|
||||||
|
//
|
||||||
|
// CategoryViewController.h
|
||||||
|
// CuteAnimals
|
||||||
|
//
|
||||||
|
// Copyright 2013 Google, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import "NavController.h"
|
||||||
|
|
||||||
|
@interface CategoryViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>
|
||||||
|
|
||||||
|
@property(nonatomic, retain) NSString *category;
|
||||||
|
@property(nonatomic, retain) NavController *navController;
|
||||||
|
@property(nonatomic, retain) IBOutlet UITableView *tableView;
|
||||||
|
|
||||||
|
- (id)initWithNibName:(NSString *)nibName
|
||||||
|
bundle:(NSBundle *)nibBundle
|
||||||
|
category:(NSString *)category;
|
||||||
|
|
||||||
|
@end
|
|
@ -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
|
|
@ -0,0 +1,167 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
|
||||||
|
<data>
|
||||||
|
<int key="IBDocument.SystemTarget">1296</int>
|
||||||
|
<string key="IBDocument.SystemVersion">11D50b</string>
|
||||||
|
<string key="IBDocument.InterfaceBuilderVersion">2182</string>
|
||||||
|
<string key="IBDocument.AppKitVersion">1138.32</string>
|
||||||
|
<string key="IBDocument.HIToolboxVersion">568.00</string>
|
||||||
|
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||||
|
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
<string key="NS.object.0">1181</string>
|
||||||
|
</object>
|
||||||
|
<array key="IBDocument.IntegratedClassDependencies">
|
||||||
|
<string>IBProxyObject</string>
|
||||||
|
<string>IBUIView</string>
|
||||||
|
<string>IBUITableView</string>
|
||||||
|
</array>
|
||||||
|
<array key="IBDocument.PluginDependencies">
|
||||||
|
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
</array>
|
||||||
|
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||||
|
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||||
|
<integer value="1" key="NS.object.0"/>
|
||||||
|
</object>
|
||||||
|
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||||
|
<object class="IBProxyObject" id="841351856">
|
||||||
|
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||||
|
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBProxyObject" id="606714003">
|
||||||
|
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||||
|
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBUIView" id="766721923">
|
||||||
|
<nil key="NSNextResponder"/>
|
||||||
|
<int key="NSvFlags">274</int>
|
||||||
|
<array class="NSMutableArray" key="NSSubviews">
|
||||||
|
<object class="IBUITableView" id="481613891">
|
||||||
|
<reference key="NSNextResponder" ref="766721923"/>
|
||||||
|
<int key="NSvFlags">274</int>
|
||||||
|
<string key="NSFrameSize">{768, 1004}</string>
|
||||||
|
<reference key="NSSuperview" ref="766721923"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||||
|
<object class="NSColor" key="IBUIBackgroundColor">
|
||||||
|
<int key="NSColorSpace">3</int>
|
||||||
|
<bytes key="NSWhite">MQA</bytes>
|
||||||
|
</object>
|
||||||
|
<bool key="IBUIClipsSubviews">YES</bool>
|
||||||
|
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
|
||||||
|
<bool key="IBUIAlwaysBounceVertical">YES</bool>
|
||||||
|
<int key="IBUISeparatorStyle">1</int>
|
||||||
|
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
|
||||||
|
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
|
||||||
|
<float key="IBUIRowHeight">44</float>
|
||||||
|
<float key="IBUISectionHeaderHeight">22</float>
|
||||||
|
<float key="IBUISectionFooterHeight">22</float>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<string key="NSFrame">{{0, 20}, {768, 1004}}</string>
|
||||||
|
<object class="NSColor" key="IBUIBackgroundColor">
|
||||||
|
<int key="NSColorSpace">3</int>
|
||||||
|
<bytes key="NSWhite">MQA</bytes>
|
||||||
|
<object class="NSColorSpace" key="NSCustomColorSpace">
|
||||||
|
<int key="NSID">2</int>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
|
||||||
|
<int key="IBUIStatusBarStyle">2</int>
|
||||||
|
</object>
|
||||||
|
<string key="targetRuntimeIdentifier">IBIPadFramework</string>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||||
|
<array class="NSMutableArray" key="connectionRecords">
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||||
|
<string key="label">view</string>
|
||||||
|
<reference key="source" ref="841351856"/>
|
||||||
|
<reference key="destination" ref="766721923"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">3</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||||
|
<string key="label">tableView</string>
|
||||||
|
<reference key="source" ref="841351856"/>
|
||||||
|
<reference key="destination" ref="481613891"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">8</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||||
|
<string key="label">dataSource</string>
|
||||||
|
<reference key="source" ref="481613891"/>
|
||||||
|
<reference key="destination" ref="841351856"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">9</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||||
|
<string key="label">delegate</string>
|
||||||
|
<reference key="source" ref="481613891"/>
|
||||||
|
<reference key="destination" ref="841351856"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">10</int>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||||
|
<array key="orderedObjects">
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">0</int>
|
||||||
|
<array key="object" id="0"/>
|
||||||
|
<reference key="children" ref="1000"/>
|
||||||
|
<nil key="parent"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">-1</int>
|
||||||
|
<reference key="object" ref="841351856"/>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
<string key="objectName">File's Owner</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">-2</int>
|
||||||
|
<reference key="object" ref="606714003"/>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">2</int>
|
||||||
|
<reference key="object" ref="766721923"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<reference ref="481613891"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">4</int>
|
||||||
|
<reference key="object" ref="481613891"/>
|
||||||
|
<reference key="parent" ref="766721923"/>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
</object>
|
||||||
|
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
||||||
|
<string key="-1.CustomClassName">CategoryViewController</string>
|
||||||
|
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
<string key="-2.CustomClassName">UIResponder</string>
|
||||||
|
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
||||||
|
<nil key="activeLocalization"/>
|
||||||
|
<dictionary class="NSMutableDictionary" key="localizations"/>
|
||||||
|
<nil key="sourceID"/>
|
||||||
|
<int key="maxID">10</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBClassDescriber" key="IBDocument.Classes"/>
|
||||||
|
<int key="IBDocument.localizationMode">0</int>
|
||||||
|
<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
|
||||||
|
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||||
|
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||||
|
<real value="1296" key="NS.object.0"/>
|
||||||
|
</object>
|
||||||
|
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||||
|
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||||
|
<string key="IBCocoaTouchPluginVersion">1181</string>
|
||||||
|
</data>
|
||||||
|
</archive>
|
|
@ -0,0 +1,193 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
|
||||||
|
<data>
|
||||||
|
<int key="IBDocument.SystemTarget">1536</int>
|
||||||
|
<string key="IBDocument.SystemVersion">12C2034</string>
|
||||||
|
<string key="IBDocument.InterfaceBuilderVersion">2844</string>
|
||||||
|
<string key="IBDocument.AppKitVersion">1187.34</string>
|
||||||
|
<string key="IBDocument.HIToolboxVersion">625.00</string>
|
||||||
|
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
|
||||||
|
<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
<string key="NS.object.0">1930</string>
|
||||||
|
</object>
|
||||||
|
<array key="IBDocument.IntegratedClassDependencies">
|
||||||
|
<string>IBProxyObject</string>
|
||||||
|
<string>IBUITableView</string>
|
||||||
|
<string>IBUIView</string>
|
||||||
|
</array>
|
||||||
|
<array key="IBDocument.PluginDependencies">
|
||||||
|
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
</array>
|
||||||
|
<object class="NSMutableDictionary" key="IBDocument.Metadata">
|
||||||
|
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
|
||||||
|
<integer value="1" key="NS.object.0"/>
|
||||||
|
</object>
|
||||||
|
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
|
||||||
|
<object class="IBProxyObject" id="372490531">
|
||||||
|
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
|
||||||
|
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBProxyObject" id="843779117">
|
||||||
|
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
|
||||||
|
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBUIView" id="774585933">
|
||||||
|
<reference key="NSNextResponder"/>
|
||||||
|
<int key="NSvFlags">274</int>
|
||||||
|
<array class="NSMutableArray" key="NSSubviews">
|
||||||
|
<object class="IBUITableView" id="183585393">
|
||||||
|
<reference key="NSNextResponder" ref="774585933"/>
|
||||||
|
<int key="NSvFlags">274</int>
|
||||||
|
<string key="NSFrameSize">{320, 460}</string>
|
||||||
|
<reference key="NSSuperview" ref="774585933"/>
|
||||||
|
<reference key="NSWindow"/>
|
||||||
|
<reference key="NSNextKeyView"/>
|
||||||
|
<string key="NSReuseIdentifierKey">_NS:9</string>
|
||||||
|
<object class="NSColor" key="IBUIBackgroundColor">
|
||||||
|
<int key="NSColorSpace">3</int>
|
||||||
|
<bytes key="NSWhite">MQA</bytes>
|
||||||
|
</object>
|
||||||
|
<bool key="IBUIClipsSubviews">YES</bool>
|
||||||
|
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||||
|
<bool key="IBUIAlwaysBounceVertical">YES</bool>
|
||||||
|
<int key="IBUISeparatorStyle">1</int>
|
||||||
|
<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
|
||||||
|
<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
|
||||||
|
<float key="IBUIRowHeight">44</float>
|
||||||
|
<float key="IBUISectionHeaderHeight">22</float>
|
||||||
|
<float key="IBUISectionFooterHeight">22</float>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<string key="NSFrame">{{0, 20}, {320, 460}}</string>
|
||||||
|
<reference key="NSSuperview"/>
|
||||||
|
<reference key="NSWindow"/>
|
||||||
|
<reference key="NSNextKeyView" ref="183585393"/>
|
||||||
|
<object class="NSColor" key="IBUIBackgroundColor">
|
||||||
|
<int key="NSColorSpace">3</int>
|
||||||
|
<bytes key="NSWhite">MC43NQA</bytes>
|
||||||
|
<object class="NSColorSpace" key="NSCustomColorSpace">
|
||||||
|
<int key="NSID">2</int>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
|
||||||
|
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
|
||||||
|
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||||
|
<array class="NSMutableArray" key="connectionRecords">
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||||
|
<string key="label">view</string>
|
||||||
|
<reference key="source" ref="372490531"/>
|
||||||
|
<reference key="destination" ref="774585933"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">7</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||||
|
<string key="label">tableView</string>
|
||||||
|
<reference key="source" ref="372490531"/>
|
||||||
|
<reference key="destination" ref="183585393"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">11</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||||
|
<string key="label">dataSource</string>
|
||||||
|
<reference key="source" ref="183585393"/>
|
||||||
|
<reference key="destination" ref="372490531"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">12</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBConnectionRecord">
|
||||||
|
<object class="IBCocoaTouchOutletConnection" key="connection">
|
||||||
|
<string key="label">delegate</string>
|
||||||
|
<reference key="source" ref="183585393"/>
|
||||||
|
<reference key="destination" ref="372490531"/>
|
||||||
|
</object>
|
||||||
|
<int key="connectionID">13</int>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||||
|
<array key="orderedObjects">
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">0</int>
|
||||||
|
<array key="object" id="0"/>
|
||||||
|
<reference key="children" ref="1000"/>
|
||||||
|
<nil key="parent"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">-1</int>
|
||||||
|
<reference key="object" ref="372490531"/>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
<string key="objectName">File's Owner</string>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">-2</int>
|
||||||
|
<reference key="object" ref="843779117"/>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">6</int>
|
||||||
|
<reference key="object" ref="774585933"/>
|
||||||
|
<array class="NSMutableArray" key="children">
|
||||||
|
<reference ref="183585393"/>
|
||||||
|
</array>
|
||||||
|
<reference key="parent" ref="0"/>
|
||||||
|
</object>
|
||||||
|
<object class="IBObjectRecord">
|
||||||
|
<int key="objectID">8</int>
|
||||||
|
<reference key="object" ref="183585393"/>
|
||||||
|
<reference key="parent" ref="774585933"/>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
</object>
|
||||||
|
<dictionary class="NSMutableDictionary" key="flattenedProperties">
|
||||||
|
<string key="-1.CustomClassName">CategoryViewController</string>
|
||||||
|
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
<string key="-2.CustomClassName">UIResponder</string>
|
||||||
|
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||||
|
</dictionary>
|
||||||
|
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
||||||
|
<nil key="activeLocalization"/>
|
||||||
|
<dictionary class="NSMutableDictionary" key="localizations"/>
|
||||||
|
<nil key="sourceID"/>
|
||||||
|
<int key="maxID">29</int>
|
||||||
|
</object>
|
||||||
|
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||||
|
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||||
|
<object class="IBPartialClassDescription">
|
||||||
|
<string key="className">CategoryViewController</string>
|
||||||
|
<string key="superclassName">UIViewController</string>
|
||||||
|
<object class="NSMutableDictionary" key="outlets">
|
||||||
|
<string key="NS.key.0">tableView</string>
|
||||||
|
<string key="NS.object.0">UITableView</string>
|
||||||
|
</object>
|
||||||
|
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
|
||||||
|
<string key="NS.key.0">tableView</string>
|
||||||
|
<object class="IBToOneOutletInfo" key="NS.object.0">
|
||||||
|
<string key="name">tableView</string>
|
||||||
|
<string key="candidateClassName">UITableView</string>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||||
|
<string key="majorKey">IBProjectSource</string>
|
||||||
|
<string key="minorKey">./Classes/CategoryViewController.h</string>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
</array>
|
||||||
|
</object>
|
||||||
|
<int key="IBDocument.localizationMode">0</int>
|
||||||
|
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||||
|
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
|
||||||
|
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
|
||||||
|
<real value="1536" key="NS.object.0"/>
|
||||||
|
</object>
|
||||||
|
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
|
||||||
|
<int key="IBDocument.defaultPropertyAccessControl">3</int>
|
||||||
|
<string key="IBCocoaTouchPluginVersion">1930</string>
|
||||||
|
</data>
|
||||||
|
</archive>
|
|
@ -0,0 +1,14 @@
|
||||||
|
//
|
||||||
|
// CustomMacroHandler.h
|
||||||
|
// CuteAnimals
|
||||||
|
//
|
||||||
|
// Copyright 2013 Google, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "TAGContainer.h"
|
||||||
|
|
||||||
|
@interface CustomMacroHandler : NSObject <TAGFunctionCallMacroHandler>
|
||||||
|
|
||||||
|
@property(nonatomic) NSUInteger numOfCalls;
|
||||||
|
|
||||||
|
@end
|
|
@ -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
|
|
@ -0,0 +1,12 @@
|
||||||
|
//
|
||||||
|
// CustomTagHandler.h
|
||||||
|
// CuteAnimals
|
||||||
|
//
|
||||||
|
// Copyright 2013 Google, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "TAGContainer.h"
|
||||||
|
|
||||||
|
@interface CustomTagHandler : NSObject <TAGFunctionCallTagHandler>
|
||||||
|
|
||||||
|
@end
|
|
@ -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
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>${PRODUCT_NAME}</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.google.tagmanager.example.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>${PRODUCT_NAME}</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleURLTypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleURLName</key>
|
||||||
|
<string>com.companyname.appname</string>
|
||||||
|
<key>CFBundleURLSchemes</key>
|
||||||
|
<array>
|
||||||
|
<string>tagmanager.c.com.google.tagmanager.example.cuteAnimals</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>LSRequiresIPhoneOS</key>
|
||||||
|
<true/>
|
||||||
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
<array>
|
||||||
|
<string>armv7</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||||
|
<array>
|
||||||
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,10 @@
|
||||||
|
#import <Availability.h>
|
||||||
|
|
||||||
|
#ifndef __IPHONE_4_0
|
||||||
|
#warning "This project uses features only available in iOS SDK 4.0 and later."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#endif
|
|
@ -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 = "<group>"; };
|
||||||
|
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CuteAnimals-Prefix.pch"; sourceTree = "<group>"; };
|
||||||
|
113B6F02153E1F99003CAC38 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F03153E1F99003CAC38 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F04153E1F99003CAC38 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F05153E1F99003CAC38 /* NavController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavController.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F06153E1F99003CAC38 /* NavController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NavController.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F07153E1F99003CAC38 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F08153E1F99003CAC38 /* RootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F09153E1F99003CAC38 /* RootViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RootViewController.xib; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPad.xib; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPhone.xib; sourceTree = SOURCE_ROOT; };
|
||||||
|
113B6F2A153E208D003CAC38 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||||
|
115686551593CE6A00A5D031 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
|
||||||
|
11FCCC1B1561834700949704 /* CategoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CategoryViewController.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC1C1561834700949704 /* CategoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CategoryViewController.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC1D1561834700949704 /* ImageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageViewController.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC1E1561834700949704 /* ImageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageViewController.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC22156189A600949704 /* Bunny-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-1.jpg"; path = "Images/Bunny-1.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC23156189A600949704 /* Bunny-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-2.jpg"; path = "Images/Bunny-2.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC24156189A600949704 /* Bunny-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Bunny-3.jpg"; path = "Images/Bunny-3.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC25156189A600949704 /* Cat-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-1.jpg"; path = "Images/Cat-1.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC26156189A600949704 /* Cat-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-2.jpg"; path = "Images/Cat-2.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC27156189A600949704 /* Cat-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-3.jpg"; path = "Images/Cat-3.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC28156189A600949704 /* Cat-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Cat-4.jpg"; path = "Images/Cat-4.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC29156189A600949704 /* Lion-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-1.jpg"; path = "Images/Lion-1.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC2A156189A600949704 /* Lion-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-2.jpg"; path = "Images/Lion-2.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC2B156189A600949704 /* Lion-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-3.jpg"; path = "Images/Lion-3.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC2C156189A600949704 /* Lion-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Lion-4.jpg"; path = "Images/Lion-4.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC2D156189A600949704 /* Monkey-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-1.jpg"; path = "Images/Monkey-1.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC2E156189A600949704 /* Monkey-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-2.jpg"; path = "Images/Monkey-2.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC2F156189A600949704 /* Monkey-3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-3.jpg"; path = "Images/Monkey-3.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC30156189A600949704 /* Monkey-4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-4.jpg"; path = "Images/Monkey-4.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC31156189A600949704 /* Monkey-5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-5.jpg"; path = "Images/Monkey-5.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC32156189A600949704 /* Tiger-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-1.jpg"; path = "Images/Tiger-1.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
11FCCC33156189A600949704 /* Tiger-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-2.jpg"; path = "Images/Tiger-2.jpg"; sourceTree = SOURCE_ROOT; };
|
||||||
|
47CD7CE517BAA2B1008840A0 /* CustomTagHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTagHandler.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
47CD7CE617BAA2B1008840A0 /* CustomTagHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTagHandler.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
47CD7CEB17BAA447008840A0 /* CustomMacroHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomMacroHandler.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
47CD7CEC17BAA447008840A0 /* CustomMacroHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomMacroHandler.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
47CD7CF017BACB30008840A0 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
|
||||||
|
47EC964F17A19FC900D685C9 /* TAGDataLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGDataLayer.h; sourceTree = "<group>"; };
|
||||||
|
47EC965017A19FDD00D685C9 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utils.h; sourceTree = SOURCE_ROOT; };
|
||||||
|
47EC965117A19FDD00D685C9 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utils.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
47EC965317A1C9EB00D685C9 /* GTM-XXXX */ = {isa = PBXFileReference; lastKnownFileType = file; path = "GTM-XXXX"; sourceTree = SOURCE_ROOT; };
|
||||||
|
47EC965917A1CCDE00D685C9 /* Container.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Container.png; path = Images/Container.png; sourceTree = SOURCE_ROOT; };
|
||||||
|
88679A8B17A1841C00F476D5 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = ../../libGoogleAnalyticsServices.a; sourceTree = "<group>"; };
|
||||||
|
F41DE61E171DB8A500960CB7 /* TAGContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGContainer.h; sourceTree = "<group>"; };
|
||||||
|
F41DE620171DB8A500960CB7 /* TAGManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGManager.h; sourceTree = "<group>"; };
|
||||||
|
F431344E174E8F96003C1079 /* TAGContainerOpener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGContainerOpener.h; sourceTree = "<group>"; };
|
||||||
|
F431344F174E8F96003C1079 /* TAGLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAGLogger.h; sourceTree = "<group>"; };
|
||||||
|
F4FE3F5517555573000A691A /* GTM-XXXX.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GTM-XXXX.plist"; sourceTree = SOURCE_ROOT; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
113B6EE0153E1F0B003CAC38 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
47CD7CF117BACB30008840A0 /* AdSupport.framework in Frameworks */,
|
||||||
|
115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */,
|
||||||
|
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */,
|
||||||
|
113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */,
|
||||||
|
113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */,
|
||||||
|
88679A8C17A1841C00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
113B6ED8153E1F0B003CAC38 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
113B6EED153E1F0B003CAC38 /* CuteAnimals */,
|
||||||
|
F41DE61B171DB8A500960CB7 /* TagManager SDK */,
|
||||||
|
113B6EE6153E1F0B003CAC38 /* Frameworks */,
|
||||||
|
113B6EE4153E1F0B003CAC38 /* Products */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
113B6EE4153E1F0B003CAC38 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
113B6EE6153E1F0B003CAC38 /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
47CD7CF017BACB30008840A0 /* AdSupport.framework */,
|
||||||
|
115686551593CE6A00A5D031 /* SystemConfiguration.framework */,
|
||||||
|
113B6F2A153E208D003CAC38 /* CoreData.framework */,
|
||||||
|
113B6EE7153E1F0B003CAC38 /* UIKit.framework */,
|
||||||
|
113B6EE9153E1F0B003CAC38 /* Foundation.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
113B6EED153E1F0B003CAC38 /* CuteAnimals */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
113B6F02153E1F99003CAC38 /* AppDelegate.h */,
|
||||||
|
113B6F03153E1F99003CAC38 /* AppDelegate.m */,
|
||||||
|
11FCCC1B1561834700949704 /* CategoryViewController.h */,
|
||||||
|
11FCCC1C1561834700949704 /* CategoryViewController.m */,
|
||||||
|
113B6F0A153E1F99003CAC38 /* CategoryViewController_iPad.xib */,
|
||||||
|
113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */,
|
||||||
|
47CD7CEB17BAA447008840A0 /* CustomMacroHandler.h */,
|
||||||
|
47CD7CEC17BAA447008840A0 /* CustomMacroHandler.m */,
|
||||||
|
47CD7CE517BAA2B1008840A0 /* CustomTagHandler.h */,
|
||||||
|
47CD7CE617BAA2B1008840A0 /* CustomTagHandler.m */,
|
||||||
|
11FCCC1D1561834700949704 /* ImageViewController.h */,
|
||||||
|
11FCCC1E1561834700949704 /* ImageViewController.m */,
|
||||||
|
113B6F04153E1F99003CAC38 /* main.m */,
|
||||||
|
113B6F05153E1F99003CAC38 /* NavController.h */,
|
||||||
|
113B6F06153E1F99003CAC38 /* NavController.m */,
|
||||||
|
113B6F07153E1F99003CAC38 /* RootViewController.h */,
|
||||||
|
113B6F08153E1F99003CAC38 /* RootViewController.m */,
|
||||||
|
113B6F09153E1F99003CAC38 /* RootViewController.xib */,
|
||||||
|
113B6EEE153E1F0B003CAC38 /* Supporting Files */,
|
||||||
|
47EC965017A19FDD00D685C9 /* Utils.h */,
|
||||||
|
47EC965117A19FDD00D685C9 /* Utils.m */,
|
||||||
|
);
|
||||||
|
name = CuteAnimals;
|
||||||
|
path = .;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
113B6EEE153E1F0B003CAC38 /* Supporting Files */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
11FCCC211561899800949704 /* Images */,
|
||||||
|
113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */,
|
||||||
|
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */,
|
||||||
|
47EC965317A1C9EB00D685C9 /* GTM-XXXX */,
|
||||||
|
F4FE3F5517555573000A691A /* GTM-XXXX.plist */,
|
||||||
|
);
|
||||||
|
name = "Supporting Files";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
11FCCC211561899800949704 /* Images */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
47EC965917A1CCDE00D685C9 /* Container.png */,
|
||||||
|
11FCCC22156189A600949704 /* Bunny-1.jpg */,
|
||||||
|
11FCCC23156189A600949704 /* Bunny-2.jpg */,
|
||||||
|
11FCCC24156189A600949704 /* Bunny-3.jpg */,
|
||||||
|
11FCCC25156189A600949704 /* Cat-1.jpg */,
|
||||||
|
11FCCC26156189A600949704 /* Cat-2.jpg */,
|
||||||
|
11FCCC27156189A600949704 /* Cat-3.jpg */,
|
||||||
|
11FCCC28156189A600949704 /* Cat-4.jpg */,
|
||||||
|
11FCCC29156189A600949704 /* Lion-1.jpg */,
|
||||||
|
11FCCC2A156189A600949704 /* Lion-2.jpg */,
|
||||||
|
11FCCC2B156189A600949704 /* Lion-3.jpg */,
|
||||||
|
11FCCC2C156189A600949704 /* Lion-4.jpg */,
|
||||||
|
11FCCC2D156189A600949704 /* Monkey-1.jpg */,
|
||||||
|
11FCCC2E156189A600949704 /* Monkey-2.jpg */,
|
||||||
|
11FCCC2F156189A600949704 /* Monkey-3.jpg */,
|
||||||
|
11FCCC30156189A600949704 /* Monkey-4.jpg */,
|
||||||
|
11FCCC31156189A600949704 /* Monkey-5.jpg */,
|
||||||
|
11FCCC32156189A600949704 /* Tiger-1.jpg */,
|
||||||
|
11FCCC33156189A600949704 /* Tiger-2.jpg */,
|
||||||
|
);
|
||||||
|
name = Images;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
F41DE61B171DB8A500960CB7 /* TagManager SDK */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
88679A8B17A1841C00F476D5 /* libGoogleAnalyticsServices.a */,
|
||||||
|
47EC964F17A19FC900D685C9 /* TAGDataLayer.h */,
|
||||||
|
F41DE61E171DB8A500960CB7 /* TAGContainer.h */,
|
||||||
|
F431344E174E8F96003C1079 /* TAGContainerOpener.h */,
|
||||||
|
F431344F174E8F96003C1079 /* TAGLogger.h */,
|
||||||
|
F41DE620171DB8A500960CB7 /* TAGManager.h */,
|
||||||
|
);
|
||||||
|
name = "TagManager SDK";
|
||||||
|
path = ../../Library;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
113B6EE2153E1F0B003CAC38 /* CuteAnimals */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 113B6EFB153E1F0B003CAC38 /* Build configuration list for PBXNativeTarget "CuteAnimals" */;
|
||||||
|
buildPhases = (
|
||||||
|
113B6EDF153E1F0B003CAC38 /* Sources */,
|
||||||
|
113B6EE0153E1F0B003CAC38 /* Frameworks */,
|
||||||
|
113B6EE1153E1F0B003CAC38 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = CuteAnimals;
|
||||||
|
productName = CuteAnimals;
|
||||||
|
productReference = 113B6EE3153E1F0B003CAC38 /* CuteAnimals.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
113B6EDA153E1F0B003CAC38 /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
LastUpgradeCheck = 0460;
|
||||||
|
};
|
||||||
|
buildConfigurationList = 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */;
|
||||||
|
compatibilityVersion = "Xcode 3.2";
|
||||||
|
developmentRegion = English;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
);
|
||||||
|
mainGroup = 113B6ED8153E1F0B003CAC38;
|
||||||
|
productRefGroup = 113B6EE4153E1F0B003CAC38 /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
113B6EE2153E1F0B003CAC38 /* CuteAnimals */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
113B6EE1153E1F0B003CAC38 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
113B6F14153E1F99003CAC38 /* RootViewController.xib in Resources */,
|
||||||
|
113B6F15153E1F99003CAC38 /* CategoryViewController_iPad.xib in Resources */,
|
||||||
|
113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */,
|
||||||
|
11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */,
|
||||||
|
11FCCC35156189A600949704 /* Bunny-2.jpg in Resources */,
|
||||||
|
11FCCC36156189A600949704 /* Bunny-3.jpg in Resources */,
|
||||||
|
11FCCC37156189A600949704 /* Cat-1.jpg in Resources */,
|
||||||
|
11FCCC38156189A600949704 /* Cat-2.jpg in Resources */,
|
||||||
|
11FCCC39156189A600949704 /* Cat-3.jpg in Resources */,
|
||||||
|
11FCCC3A156189A600949704 /* Cat-4.jpg in Resources */,
|
||||||
|
11FCCC3B156189A600949704 /* Lion-1.jpg in Resources */,
|
||||||
|
11FCCC3C156189A600949704 /* Lion-2.jpg in Resources */,
|
||||||
|
11FCCC3D156189A600949704 /* Lion-3.jpg in Resources */,
|
||||||
|
11FCCC3E156189A600949704 /* Lion-4.jpg in Resources */,
|
||||||
|
11FCCC3F156189A600949704 /* Monkey-1.jpg in Resources */,
|
||||||
|
11FCCC40156189A600949704 /* Monkey-2.jpg in Resources */,
|
||||||
|
11FCCC41156189A600949704 /* Monkey-3.jpg in Resources */,
|
||||||
|
11FCCC42156189A600949704 /* Monkey-4.jpg in Resources */,
|
||||||
|
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */,
|
||||||
|
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */,
|
||||||
|
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */,
|
||||||
|
F4FE3F5617555573000A691A /* GTM-XXXX.plist in Resources */,
|
||||||
|
47EC965417A1C9EB00D685C9 /* GTM-XXXX in Resources */,
|
||||||
|
47EC965A17A1CCDE00D685C9 /* Container.png in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
113B6EDF153E1F0B003CAC38 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
113B6F10153E1F99003CAC38 /* AppDelegate.m in Sources */,
|
||||||
|
113B6F11153E1F99003CAC38 /* main.m in Sources */,
|
||||||
|
113B6F12153E1F99003CAC38 /* NavController.m in Sources */,
|
||||||
|
113B6F13153E1F99003CAC38 /* RootViewController.m in Sources */,
|
||||||
|
11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */,
|
||||||
|
11FCCC201561834700949704 /* ImageViewController.m in Sources */,
|
||||||
|
47EC965217A19FDD00D685C9 /* Utils.m in Sources */,
|
||||||
|
47CD7CE717BAA2B1008840A0 /* CustomTagHandler.m in Sources */,
|
||||||
|
47CD7CED17BAA447008840A0 /* CustomMacroHandler.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
113B6EF9153E1F0B003CAC38 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
|
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
113B6EFA153E1F0B003CAC38 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||||
|
COPY_PHASE_STRIP = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
|
||||||
|
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
113B6EFC153E1F0B003CAC38 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
|
||||||
|
INFOPLIST_FILE = "CuteAnimals-Info.plist";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 5.0;
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"\"$(SRCROOT)/../../Library\"",
|
||||||
|
"\"$(SRCROOT)/../../..\"",
|
||||||
|
);
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
WRAPPER_EXTENSION = app;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
113B6EFD153E1F0B003CAC38 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
|
||||||
|
INFOPLIST_FILE = "CuteAnimals-Info.plist";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 5.0;
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"\"$(SRCROOT)/../../Library\"",
|
||||||
|
"\"$(SRCROOT)/../../..\"",
|
||||||
|
);
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
WRAPPER_EXTENSION = app;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
113B6EF9153E1F0B003CAC38 /* Debug */,
|
||||||
|
113B6EFA153E1F0B003CAC38 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
113B6EFB153E1F0B003CAC38 /* Build configuration list for PBXNativeTarget "CuteAnimals" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
113B6EFC153E1F0B003CAC38 /* Debug */,
|
||||||
|
113B6EFD153E1F0B003CAC38 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 113B6EDA153E1F0B003CAC38 /* Project object */;
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Adjective</key>
|
||||||
|
<string>Cute</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>Cute Animals</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,22 @@
|
||||||
|
//
|
||||||
|
// ImageViewController.h
|
||||||
|
// CuteAnimals
|
||||||
|
//
|
||||||
|
// Copyright 2013 Google, Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import "NavController.h"
|
||||||
|
|
||||||
|
@interface ImageViewController : UIViewController
|
||||||
|
|
||||||
|
@property(nonatomic, retain) NavController *navController;
|
||||||
|
@property(nonatomic, retain) UIImageView *imageView;
|
||||||
|
|
||||||
|
- (id)initWithNibName:(NSString *)nibNameOrNil
|
||||||
|
bundle:(NSBundle *)nibBundleOrNil
|
||||||
|
title:(NSString *)title
|
||||||
|
image:(UIImage *)image;
|
||||||
|
|
||||||
|
@end
|
|
@ -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
|
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 62 KiB |