#324: update GA to latest version to fix problem with SDK 7

This commit is contained in:
Patrick Santana 2013-10-14 17:02:26 -03:00
parent c096d45c78
commit 5cfe719840
154 changed files with 3770 additions and 6852 deletions

@ -1 +1 @@
Subproject commit 2d446269d8a8095a6a509e2ddd6d20ce7256001e
Subproject commit 525240f6ed44b79e1d7ae8cd473ac6523aca9630

View file

@ -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&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/debug">&nbsp;&nbsp;&nbsp;&nbsp;debug</option>
<option value="//api/name/defaultTracker">&nbsp;&nbsp;&nbsp;&nbsp;defaultTracker</option>
<option value="//api/name/dispatchInterval">&nbsp;&nbsp;&nbsp;&nbsp;dispatchInterval</option>
<option value="//api/name/optOut">&nbsp;&nbsp;&nbsp;&nbsp;optOut</option>
<option value="//api/name/trackUncaughtExceptions">&nbsp;&nbsp;&nbsp;&nbsp;trackUncaughtExceptions</option>
<option value="class_methods">Class Methods</option>
<option value="//api/name/sharedInstance">&nbsp;&nbsp;&nbsp;&nbsp;+ sharedInstance</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/dispatch">&nbsp;&nbsp;&nbsp;&nbsp;- dispatch</option>
<option value="//api/name/trackerWithTrackingId:">&nbsp;&nbsp;&nbsp;&nbsp;- 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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">+&nbsp;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:">&ndash;&nbsp;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">&ndash;&nbsp;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&lt;GAITracker&gt; 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&lt;GAITracker&gt;)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 &ldquo;UA-&rdquo;). 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">&copy; 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>

View file

@ -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&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/trackedViewName">&nbsp;&nbsp;&nbsp;&nbsp;trackedViewName</option>
<option value="//api/name/tracker">&nbsp;&nbsp;&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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&lt;GAITracker&gt; 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">&copy; 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>

View file

@ -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&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/affiliation">&nbsp;&nbsp;&nbsp;&nbsp;affiliation</option>
<option value="//api/name/items">&nbsp;&nbsp;&nbsp;&nbsp;items</option>
<option value="//api/name/revenueMicros">&nbsp;&nbsp;&nbsp;&nbsp;revenueMicros</option>
<option value="//api/name/shippingMicros">&nbsp;&nbsp;&nbsp;&nbsp;shippingMicros</option>
<option value="//api/name/taxMicros">&nbsp;&nbsp;&nbsp;&nbsp;taxMicros</option>
<option value="//api/name/transactionId">&nbsp;&nbsp;&nbsp;&nbsp;transactionId</option>
<option value="class_methods">Class Methods</option>
<option value="//api/name/transactionWithId:withAffiliation:">&nbsp;&nbsp;&nbsp;&nbsp;+ transactionWithId:withAffiliation:</option>
<option value="instance_methods">Instance Methods</option>
<option value="//api/name/addItem:">&nbsp;&nbsp;&nbsp;&nbsp;- addItem:</option>
<option value="//api/name/addItemWithCode:name:category:priceMicros:quantity:">&nbsp;&nbsp;&nbsp;&nbsp;- 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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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:">+&nbsp;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:">&ndash;&nbsp;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:">&ndash;&nbsp;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">&copy; 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>

View file

@ -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&#133;</option>
<option value="overview">Overview</option>
<option value="tasks">Tasks</option>
<option value="properties">Properties</option>
<option value="//api/name/priceMicros">&nbsp;&nbsp;&nbsp;&nbsp;priceMicros</option>
<option value="//api/name/productCategory">&nbsp;&nbsp;&nbsp;&nbsp;productCategory</option>
<option value="//api/name/productCode">&nbsp;&nbsp;&nbsp;&nbsp;productCode</option>
<option value="//api/name/productName">&nbsp;&nbsp;&nbsp;&nbsp;productName</option>
<option value="//api/name/quantity">&nbsp;&nbsp;&nbsp;&nbsp;quantity</option>
<option value="class_methods">Class Methods</option>
<option value="//api/name/itemWithCode:name:category:priceMicros:quantity:">&nbsp;&nbsp;&nbsp;&nbsp;+ 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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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">&nbsp;&nbsp;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:">+&nbsp;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">&copy; 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>

View file

@ -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 */

View file

@ -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;
}

View file

@ -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">&copy; 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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 B

View file

@ -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">&copy; 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>

View file

@ -1,5 +1,31 @@
Google Analytics SDK for iOS Changelog
--------------------------------------------
Version: 3.01 (September 2013)
-------------------------------------------
* Fixed link error when targeting iOS 7.0.
--------------------------------------------
Version: 3.00 (August 2013)
-------------------------------------------
* SDK API change to align with analytics.js. The track<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)
--------------------------------------------

View file

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

View file

@ -11,6 +11,7 @@
/******* Set your tracking ID here *******/
static NSString *const kTrackingId = @"UA-TRACKING-ID";
static NSString *const kAllowTracking = @"allowTracking";
@interface AppDelegate ()
@ -19,51 +20,42 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID";
@end
@implementation AppDelegate
@synthesize window = window_;
@synthesize navController = navController_;
@synthesize viewController = viewController_;
@synthesize tracker = tracker_;
@synthesize images = images_;
- (void)applicationDidBecomeActive:(UIApplication *)application {
[GAI sharedInstance].optOut =
![[NSUserDefaults standardUserDefaults] boolForKey:kAllowTracking];
}
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.images = [self loadImages];
NSDictionary *appDefaults = @{kAllowTracking: @(YES)};
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
// User must be able to opt out of tracking
[GAI sharedInstance].optOut =
![[NSUserDefaults standardUserDefaults] boolForKey:kAllowTracking];
// Initialize Google Analytics with a 120-second dispatch interval. There is a
// tradeoff between battery usage and timely dispatch.
[GAI sharedInstance].debug = YES;
[GAI sharedInstance].dispatchInterval = 120;
[GAI sharedInstance].trackUncaughtExceptions = YES;
self.tracker = [[GAI sharedInstance] trackerWithTrackingId:kTrackingId];
self.tracker = [[GAI sharedInstance] trackerWithName:@"CuteAnimals"
trackingId:kTrackingId];
self.window =
[[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]
autorelease];
[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController =
[[[RootViewController alloc] initWithNibName:@"RootViewController"
bundle:nil] autorelease];
[[RootViewController alloc] initWithNibName:@"RootViewController"
bundle:nil];
self.navController =
[[[NavController alloc] initWithRootViewController:self.viewController]
autorelease];
[[NavController alloc] initWithRootViewController:self.viewController];
self.navController.delegate = self.navController;
self.viewController.navController = self.navController;
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];
return YES;
}
- (void)dealloc {
[tracker_ release];
[viewController_ release];
[navController_ release];
[window_ release];
[super dealloc];
}
- (NSDictionary *)loadImages {
NSArray *contents = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg"
@ -72,7 +64,7 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID";
NSLog(@"Failed to load directory contents");
return nil;
}
NSMutableDictionary *images = [NSMutableDictionary dictionaryWithCapacity:0];
NSMutableDictionary *images = [NSMutableDictionary dictionary];
for (NSString *file in contents) {
NSArray *components = [[file lastPathComponent]
componentsSeparatedByString:@"-"];
@ -85,17 +77,16 @@ static NSString *const kTrackingId = @"UA-TRACKING-ID";
NSLog(@"Failed to load file: %@", file);
continue;
}
NSString *prefix = [components objectAtIndex:0];
NSMutableArray *categoryImages = [images objectForKey:prefix];
NSString *prefix = components[0];
NSMutableArray *categoryImages = images[prefix];
if (!categoryImages) {
categoryImages = [NSMutableArray arrayWithCapacity:0];
[images setObject:categoryImages
forKey:prefix];
categoryImages = [NSMutableArray array];
images[prefix] = categoryImages;
}
[categoryImages addObject:image];
}
for (NSString *cat in [images allKeys]) {
NSArray *array = [images objectForKey:cat];
NSArray *array = images[cat];
NSLog(@"Category %@: %u image(s).", cat, array.count);
}
return images;

View file

@ -12,9 +12,8 @@
@interface CategoryViewController :
GAITrackedViewController<UITableViewDelegate, UITableViewDataSource>
@property(nonatomic, retain) NSString *category;
@property(nonatomic, retain) NavController *navController;
@property(nonatomic, retain) IBOutlet UITableView *tableView;
@property(nonatomic, strong) NSString *category;
@property(nonatomic, strong) IBOutlet UITableView *tableView;
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle

View file

@ -13,44 +13,31 @@
@interface CategoryViewController ()
@property(nonatomic, retain) NSMutableArray *items;
@property(nonatomic, assign) AppDelegate *delegate;
@property(nonatomic, strong) NSMutableArray *items;
@property(nonatomic, weak) AppDelegate *delegate;
@end
@implementation CategoryViewController
@synthesize category = category_;
@synthesize navController = navController_;
@synthesize tableView = tableView_;
@synthesize items = items_;
@synthesize delegate = delegate_;
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle
category:(NSString *)category {
self = [super initWithNibName:nibName
bundle:nibBundle];
if (self) {
self.category = category;
self.trackedViewName = category;
_category = category;
_delegate = [UIApplication sharedApplication].delegate;
self.title = [NSString stringWithFormat:@"Cute %@s", category];
self.delegate = [UIApplication sharedApplication].delegate;
self.screenName = category;
}
return self;
}
- (void)dealloc {
[category_ release];
[navController_ release];
[tableView_ release];
[items_ release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.items = [self.delegate.images objectForKey:self.category];
self.items = (self.delegate.images)[self.category];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:
@ -74,14 +61,14 @@
}
NSString *title =
[NSString stringWithFormat:@"%@ %d", self.category, indexPath.row];
UIImage *image = [self.items objectAtIndex:indexPath.row];
UIImage *image = (self.items)[indexPath.row];
ImageViewController *imageViewController =
[[[ImageViewController alloc] initWithNibName:nil
[[ImageViewController alloc] initWithNibName:nil
bundle:nil
title:title
image:image] autorelease];
[imageViewController.view addSubview:imageViewController.imageView];
[self.navController pushViewController:imageViewController animated:YES];
image:image];
[self.delegate.navController pushViewController:imageViewController
animated:YES];
}
#pragma mark UITableViewDataSource methods
@ -101,17 +88,17 @@
static NSString *CellId = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellId] autorelease];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellId];
cell.textLabel.font = [UIFont systemFontOfSize:14];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
}
cell.textLabel.text = [NSString stringWithFormat:@"%@ %d",
self.category, indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:14];
UIImage *image = [self.items objectAtIndex:indexPath.row];
UIImage *image = (self.items)[indexPath.row];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%d x %d",
(int)image.size.width, (int)image.size.height];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
return cell;
}

View file

@ -18,7 +18,6 @@
113B6F16153E1F99003CAC38 /* CategoryViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */; };
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 113B6F2A153E208D003CAC38 /* CoreData.framework */; };
115686561593CE6A00A5D031 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 115686551593CE6A00A5D031 /* SystemConfiguration.framework */; };
11BC54011577E1F000E7D657 /* libGoogleAnalytics.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11BC53FF1577E1E000E7D657 /* libGoogleAnalytics.a */; };
11FCCC1F1561834700949704 /* CategoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1C1561834700949704 /* CategoryViewController.m */; };
11FCCC201561834700949704 /* ImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11FCCC1E1561834700949704 /* ImageViewController.m */; };
11FCCC34156189A600949704 /* Bunny-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC22156189A600949704 /* Bunny-1.jpg */; };
@ -39,6 +38,8 @@
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC31156189A600949704 /* Monkey-5.jpg */; };
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC32156189A600949704 /* Tiger-1.jpg */; };
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 11FCCC33156189A600949704 /* Tiger-2.jpg */; };
88679A8E17A184FA00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */; };
F7C47F21178B5B56003A7D0F /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F7C47F20178B5B55003A7D0F /* Settings.bundle */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@ -59,12 +60,9 @@
113B6F0B153E1F99003CAC38 /* CategoryViewController_iPhone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CategoryViewController_iPhone.xib; sourceTree = SOURCE_ROOT; };
113B6F2A153E208D003CAC38 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
115686551593CE6A00A5D031 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
11BC53FF1577E1E000E7D657 /* libGoogleAnalytics.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalytics.a; path = ../../Library/libGoogleAnalytics.a; sourceTree = "<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>"; };
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; };
11FCCC1C1561834700949704 /* CategoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CategoryViewController.m; sourceTree = SOURCE_ROOT; };
11FCCC1D1561834700949704 /* ImageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageViewController.h; sourceTree = SOURCE_ROOT; };
@ -87,6 +85,11 @@
11FCCC31156189A600949704 /* Monkey-5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Monkey-5.jpg"; path = "Images/Monkey-5.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC32156189A600949704 /* Tiger-1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-1.jpg"; path = "Images/Tiger-1.jpg"; sourceTree = SOURCE_ROOT; };
11FCCC33156189A600949704 /* Tiger-2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = "Tiger-2.jpg"; path = "Images/Tiger-2.jpg"; sourceTree = SOURCE_ROOT; };
88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGoogleAnalyticsServices.a; path = ../../../../libGoogleAnalyticsServices.a; sourceTree = "<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 */
/* Begin PBXFrameworksBuildPhase section */
@ -98,7 +101,7 @@
113B6F2B153E208D003CAC38 /* CoreData.framework in Frameworks */,
113B6EE8153E1F0B003CAC38 /* UIKit.framework in Frameworks */,
113B6EEA153E1F0B003CAC38 /* Foundation.framework in Frameworks */,
11BC54011577E1F000E7D657 /* libGoogleAnalytics.a in Frameworks */,
88679A8E17A184FA00F476D5 /* libGoogleAnalyticsServices.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -160,6 +163,7 @@
113B6EEE153E1F0B003CAC38 /* Supporting Files */ = {
isa = PBXGroup;
children = (
F7C47F20178B5B55003A7D0F /* Settings.bundle */,
11FCCC211561899800949704 /* Images */,
113B6EEF153E1F0B003CAC38 /* CuteAnimals-Info.plist */,
113B6EF5153E1F0B003CAC38 /* CuteAnimals-Prefix.pch */,
@ -170,12 +174,13 @@
113B6F1E153E1FAD003CAC38 /* Google Analytics Library */ = {
isa = PBXGroup;
children = (
88679A8D17A184FA00F476D5 /* libGoogleAnalyticsServices.a */,
F707E732174D7550008123BF /* GAIDictionaryBuilder.h */,
F707E733174D7550008123BF /* GAIFields.h */,
F707E734174D7550008123BF /* GAILogger.h */,
11BC54021577E24400E7D657 /* GAI.h */,
11BC54031577E24500E7D657 /* GAITrackedViewController.h */,
11BC54041577E24500E7D657 /* GAITracker.h */,
11BC54051577E24500E7D657 /* GAITransaction.h */,
11BC54061577E24500E7D657 /* GAITransactionItem.h */,
11BC53FF1577E1E000E7D657 /* libGoogleAnalytics.a */,
);
name = "Google Analytics Library";
sourceTree = "<group>";
@ -231,7 +236,7 @@
113B6EDA153E1F0B003CAC38 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0430;
LastUpgradeCheck = 0460;
};
buildConfigurationList = 113B6EDD153E1F0B003CAC38 /* Build configuration list for PBXProject "CuteAnimals" */;
compatibilityVersion = "Xcode 3.2";
@ -276,6 +281,7 @@
11FCCC43156189A600949704 /* Monkey-5.jpg in Resources */,
11FCCC44156189A600949704 /* Tiger-1.jpg in Resources */,
11FCCC45156189A600949704 /* Tiger-2.jpg in Resources */,
F7C47F21178B5B56003A7D0F /* Settings.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -303,6 +309,10 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
@ -328,6 +338,10 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
@ -346,6 +360,7 @@
113B6EFC153E1F0B003CAC38 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
INFOPLIST_FILE = "CuteAnimals-Info.plist";
@ -353,6 +368,7 @@
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../Library\"",
"\"$(SRCROOT)/../../..\"",
);
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
@ -362,6 +378,7 @@
113B6EFD153E1F0B003CAC38 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "CuteAnimals-Prefix.pch";
INFOPLIST_FILE = "CuteAnimals-Info.plist";
@ -369,6 +386,7 @@
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/../../Library\"",
"\"$(SRCROOT)/../../..\"",
);
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;

View file

@ -12,9 +12,6 @@
@interface ImageViewController : GAITrackedViewController
@property(nonatomic, retain) NavController *navController;
@property(nonatomic, retain) UIImageView *imageView;
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
title:(NSString *)title

View file

@ -9,10 +9,13 @@
#import "AppDelegate.h"
@implementation ImageViewController
@interface ImageViewController ()
@synthesize imageView = imageView_;
@synthesize navController = navController_;
@property(nonatomic, strong) UIImage *image;
@end
@implementation ImageViewController
- (id)initWithNibName:(NSString *)nibNameOrNil
bundle:(NSBundle *)nibBundleOrNil
@ -21,19 +24,18 @@
self = [super initWithNibName:nibNameOrNil
bundle:nibBundleOrNil];
if (self) {
self.title = self.trackedViewName = title;
self.imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
self.imageView.userInteractionEnabled = YES;
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
_image = image;
self.title = self.screenName = title;
}
return self;
}
- (void)dealloc {
[imageView_ release];
[navController_ release];
[super dealloc];
- (void)viewDidLoad {
[super viewDidLoad];
UIImageView *imageView = [[UIImageView alloc] initWithImage:self.image];
imageView.userInteractionEnabled = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:imageView];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:

View file

@ -10,7 +10,6 @@
@interface RootViewController :
GAITrackedViewController<UITableViewDelegate, UITableViewDataSource>
@property(nonatomic, retain) NavController *navController;
@property(nonatomic, retain) IBOutlet UITableView *tableView;
@property(nonatomic, strong) IBOutlet UITableView *tableView;
@end

View file

@ -11,59 +11,38 @@
#import "ImageViewController.h"
#import "GAI.h"
#import "GAIDictionaryBuilder.h"
@interface RootViewController ()
@property(nonatomic, retain) NSArray *items;
@property(nonatomic, assign) AppDelegate *delegate;
@property(nonatomic, strong) NSArray *items;
@property(nonatomic, weak) AppDelegate *delegate;
@end
@implementation RootViewController
@synthesize tableView = tableView_;
@synthesize navController = navController_;
@synthesize items = items_;
@synthesize delegate = delegate_;
- (id)initWithNibName:(NSString *)nibName
bundle:(NSBundle *)nibBundle {
self = [super initWithNibName:nibName
bundle:nibBundle];
if (self) {
self.trackedViewName = @"root";
_delegate = [UIApplication sharedApplication].delegate;
self.title = @"Cute Animals";
self.delegate = [UIApplication sharedApplication].delegate;
[self updateSecureButton];
self.screenName = @"root";
}
return self;
}
- (void)dealloc {
[tableView_ release];
[navController_ release];
[items_ release];
[super dealloc];
}
- (void)updateSecureButton {
if ([GAI sharedInstance].defaultTracker.useHttps) {
self.navigationItem.leftBarButtonItem.title = @"HTTPS";
self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone;
} else {
self.navigationItem.leftBarButtonItem.title = @"HTTP";
self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleBordered;
}
}
- (void)toggleSecure {
[GAI sharedInstance].defaultTracker.useHttps =
![GAI sharedInstance].defaultTracker.useHttps;
[self updateSecureButton];
[[GAI sharedInstance].defaultTracker sendEventWithCategory:@"secureDispatch"
withAction:@"toggle"
withLabel:nil
withValue:nil];
- (void)dispatch {
NSMutableDictionary *event =
[[GAIDictionaryBuilder createEventWithCategory:@"UI"
action:@"buttonPress"
label:@"dispatch"
value:nil] build];
[[GAI sharedInstance].defaultTracker send:event];
[[GAI sharedInstance] dispatch];
}
- (void)crash {
@ -74,17 +53,15 @@
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.leftBarButtonItem =
[[[UIBarButtonItem alloc]
initWithTitle:@"HTTP"
[[UIBarButtonItem alloc] initWithTitle:@"Dispatch"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(toggleSecure)] autorelease];
action:@selector(dispatch)];
self.navigationItem.rightBarButtonItem =
[[[UIBarButtonItem alloc]
initWithTitle:@"Crash"
[[UIBarButtonItem alloc] initWithTitle:@"Crash"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(crash)] autorelease];
action:@selector(crash)];
self.items =
[[self.delegate.images allKeys]
sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
@ -106,16 +83,16 @@
return;
}
NSString *category = [self.items objectAtIndex:indexPath.row];
NSString *category = (self.items)[indexPath.row];
NSString *nib = ([[UIDevice currentDevice] userInterfaceIdiom] ==
UIUserInterfaceIdiomPhone) ? @"CategoryViewController_iPhone" :
@"CategoryViewController_iPad";
CategoryViewController *categoryController =
[[[CategoryViewController alloc] initWithNibName:nib
[[CategoryViewController alloc] initWithNibName:nib
bundle:nil
category:category] autorelease];
categoryController.navController = self.navController;
[self.navController pushViewController:categoryController animated:YES];
category:category];
[self.delegate.navController pushViewController:categoryController
animated:YES];
}
#pragma mark UITableViewDataSource methods
@ -131,23 +108,22 @@
NSLog(@"IndexPath %d out of bounds!", indexPath.row);
return nil;
}
NSString *category = [self.items objectAtIndex:indexPath.row];
NSString *category = (self.items)[indexPath.row];
static NSString *CellId = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellId] autorelease];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellId];
cell.textLabel.font = [UIFont systemFontOfSize:14];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
}
NSString *label = [NSString stringWithFormat:@"Cute %@ Pictures!", category];
cell.textLabel.text = label;
cell.textLabel.font = [UIFont systemFontOfSize:14];
NSUInteger imageCount =
[(NSArray *)[self.delegate.images objectForKey:category] count];
NSUInteger imageCount = [(self.delegate.images)[category] count];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%u image(s).",
imageCount];
cell.detailTextLabel.font = [UIFont systemFontOfSize:12];
return cell;
}

View file

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

View file

@ -1,11 +1,12 @@
/*!
@header GAI.h
@abstract Google Analytics iOS SDK Header
@version 2.0
@copyright Copyright 2011 Google Inc. All rights reserved.
@version 3.0
@copyright Copyright 2013 Google Inc. All rights reserved.
*/
#import <Foundation/Foundation.h>
#import "GAILogger.h"
#import "GAITracker.h"
#import "GAITrackedViewController.h"
@ -49,11 +50,9 @@ typedef enum {
@property(nonatomic, assign) id<GAITracker> defaultTracker;
/*!
If true, Google Analytics debug messages will be logged with `NSLog()`. This is
useful for debugging calls to the Google Analytics SDK.
By default, this flag is set to `NO`. */
@property(nonatomic, assign) BOOL debug;
The GAILogger to use.
*/
@property(nonatomic, retain) id<GAILogger> logger;
/*!
When this is true, no tracking information will be gathered; tracking calls
@ -69,14 +68,9 @@ typedef enum {
@property(nonatomic, assign) BOOL optOut;
/*!
If this value is negative, tracking information must be sent manually by
calling dispatch. If this value is zero, tracking information will
automatically be sent as soon as possible (usually immediately if the device
has Internet connectivity). If this value is positive, tracking information
will be automatically dispatched every dispatchInterval seconds.
When the dispatchInterval is non-zero, setting it to zero will cause any queued
tracking information to be sent immediately.
If this value is positive, tracking information will be automatically
dispatched every dispatchInterval seconds. Otherwise, tracking information must
be sent manually by calling dispatch.
By default, this is set to `120`, which indicates tracking information should
be dispatched automatically every 120 seconds.
@ -94,31 +88,72 @@ typedef enum {
*/
@property(nonatomic, assign) BOOL trackUncaughtExceptions;
/*!
When this is 'YES', no tracking information will be sent. Defaults to 'NO'.
*/
@property(nonatomic, assign) BOOL dryRun;
/*! Get the shared instance of the Google Analytics for iOS class. */
+ (GAI *)sharedInstance;
/*!
Create or retrieve a GAITracker implementation with the specified tracking
ID. If the tracker for the specified tracking ID does not already exist, then
Creates or retrieves a GAITracker implementation with the specified name and
tracking ID. If the tracker for the specified name does not already exist, then
it will be created and returned; otherwise, the existing tracker will be
returned. If defaultTracker is not set, it will be set to the tracker instance
returned here.
returned. If the existing tracker for the respective name has a different
tracking ID, that tracking ID is not changed by this method. If defaultTracker
is not set, it will be set to the tracker instance returned here.
@param trackingId The tracking ID (a string that begins with "UA-"). Must not
be `nil` or empty.
@param name The name of this tracker. Must not be `nil` or empty.
@return A GAITracker associated with the specified tracking ID. The tracker
@param trackingID The tracking ID to use for this tracker. It should be of
the form `UA-xxxxx-y`.
@return A GAITracker associated with the specified name. The tracker
can be used to send tracking data to Google Analytics. The first time this
method is called with a particular tracking ID, the tracker for that tracking
ID will be returned, and subsequent calls with the same tracking ID will return
the same instance. It is not necessary to retain the tracker because the
tracker will be retained internally by the library.
method is called with a particular name, the tracker for that name will be
returned, and subsequent calls with the same name will return the same
instance. It is not necessary to retain the tracker because the tracker will be
retained internally by the library.
If an error occurs or the tracker ID is not valid, this method will return
If an error occurs or the name is not valid, this method will return
`nil`.
*/
- (id<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
can be used to send tracking data to Google Analytics. The first time this
method is called with a particular trackingID, the tracker for the respective
name will be returned, and subsequent calls with the same trackingID
will return the same instance. It is not necessary to retain the tracker
because the tracker will be retained internally by the library.
If an error occurs or the trackingId is not valid, this method will return
`nil`.
*/
- (id<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.

View file

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

View file

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

View file

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

View file

@ -11,18 +11,14 @@
@protocol GAITracker;
/*!
Extends UIViewController to generate Google Analytics view tracking calls
Extends UIViewController to generate Google Analytics appview calls
whenever the view appears; this is done by overriding the `viewDidAppear:`
method. The view name must be set for any tracking calls to be made.
method. The screen name must be set for any tracking calls to be made.
By default, this will use [GAI defaultTracker] for tracking calls, but one can
override this by setting the tracker property.
*/
@interface GAITrackedViewController : UIViewController {
@private
id<GAITracker> tracker_;
NSString *trackedViewName_;
}
@interface GAITrackedViewController : UIViewController
/*!
The tracker on which view tracking calls are be made, or `nil`, in which case
@ -30,9 +26,9 @@
*/
@property(nonatomic, assign) id<GAITracker> tracker;
/*!
The view name, for purposes of Google Analytics view tracking. If this is
`nil`, no tracking calls will be made.
The screen name, for purposes of Google Analytics tracking. If this is `nil`,
no tracking calls will be made.
*/
@property(nonatomic, copy) NSString *trackedViewName;
@property(nonatomic, copy) NSString *screenName;
@end

View file

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

View 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)
================================================================================

View file

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

View file

@ -2,22 +2,23 @@
// AppDelegate.h
// CuteAnimals
//
// Copyright 2012 Google, Inc. All rights reserved.
// Copyright 2013 Google, Inc. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "GAI.h"
@class RootViewController;
@class NavController;
@class TAGManager;
@class TAGContainer;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property(nonatomic, retain) UIWindow *window;
@property(nonatomic, retain) NavController *navController;
@property(nonatomic, retain) RootViewController *viewController;
@property(nonatomic, retain) id<GAITracker> tracker;
@property(nonatomic, retain) NSDictionary *images;
@property(nonatomic, retain) TAGManager *tagManager;
@property(nonatomic, retain) TAGContainer *container;
@end

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,12 @@
//
// CustomTagHandler.h
// CuteAnimals
//
// Copyright 2013 Google, Inc. All rights reserved.
//
#import "TAGContainer.h"
@interface CustomTagHandler : NSObject <TAGFunctionCallTagHandler>
@end

View file

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

View file

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

View file

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

View file

@ -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 */;
}

View file

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

View file

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

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Some files were not shown because too many files have changed in this diff Show more