Merge lp:~rockstar/ubuntuone-ios-music/flurry-analytics into lp:ubuntuone-ios-music
- flurry-analytics
- Merge into trunk
Proposed by
Paul Hummer
Status: | Merged |
---|---|
Approved by: | Paul Hummer |
Approved revision: | 294 |
Merged at revision: | 250 |
Proposed branch: | lp:~rockstar/ubuntuone-ios-music/flurry-analytics |
Merge into: | lp:ubuntuone-ios-music |
Prerequisite: | lp:~rockstar/ubuntuone-ios-music/polish-list-views |
Diff against target: |
982 lines (+737/-3) 13 files modified
Dependencies/Flurry/Flurry.h (+611/-0) Music/UOAppDelegate.m (+1/-0) Music/View Controllers/AlbumViewController.m (+9/-0) Music/View Controllers/AlbumsViewController.m (+12/-0) Music/View Controllers/ArtistViewController.m (+9/-0) Music/View Controllers/ArtistsViewController.m (+12/-0) Music/View Controllers/PlayerViewController.m (+3/-0) Music/View Controllers/PlaylistsViewController.m (+12/-0) Music/View Controllers/SettingsAuthenticationViewController.m (+12/-0) Music/View Controllers/SettingsViewController.m (+12/-0) Music/View Controllers/SongsViewController.m (+12/-0) U1Music.xcodeproj/project.pbxproj (+20/-3) U1Music_Prefix.pch (+12/-0) |
To merge this branch: | bzr merge lp:~rockstar/ubuntuone-ios-music/flurry-analytics |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Roberto Alsina (community) | Approve | ||
Review via email: mp+147592@code.launchpad.net |
Commit message
Add Flurry analytics
Description of the change
This branch adds Flurry analytics to the U1 Music app. I added the base analytics, and timed event logging for each of the view controllers.
To post a comment you must log in.
- 294. By Paul Hummer
-
Fix copy and paste errors
Revision history for this message
Roberto Alsina (ralsina) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added directory 'Dependencies/Flurry' | |||
2 | === added file 'Dependencies/Flurry/Flurry.h' | |||
3 | --- Dependencies/Flurry/Flurry.h 1970-01-01 00:00:00 +0000 | |||
4 | +++ Dependencies/Flurry/Flurry.h 2013-02-11 04:20:26 +0000 | |||
5 | @@ -0,0 +1,611 @@ | |||
6 | 1 | // | ||
7 | 2 | // Flurry.h | ||
8 | 3 | // Flurry iOS Analytics Agent | ||
9 | 4 | // | ||
10 | 5 | // Copyright 2009-2012 Flurry, Inc. All rights reserved. | ||
11 | 6 | // | ||
12 | 7 | // Methods in this header file are for use with Flurry Analytics | ||
13 | 8 | |||
14 | 9 | #import <UIKit/UIKit.h> | ||
15 | 10 | |||
16 | 11 | /*! | ||
17 | 12 | * @brief Provides all available methods for defining and reporting Analytics from use | ||
18 | 13 | * of your app. | ||
19 | 14 | * | ||
20 | 15 | * Set of methods that allow developers to capture detailed, aggregate information | ||
21 | 16 | * regarding the use of their app by end users. | ||
22 | 17 | * | ||
23 | 18 | * @note This class provides methods necessary for correct function of FlurryAds.h. | ||
24 | 19 | * For information on how to use Flurry's Ads SDK to | ||
25 | 20 | * attract high-quality users and monetize your user base see <a href="http://support.flurry.com/index.php?title=Publishers">Support Center - Publishers</a>. | ||
26 | 21 | * | ||
27 | 22 | * @author 2009 - 2012 Flurry, Inc. All Rights Reserved. | ||
28 | 23 | * @version 4.0.0 | ||
29 | 24 | * | ||
30 | 25 | */ | ||
31 | 26 | @interface Flurry : NSObject { | ||
32 | 27 | } | ||
33 | 28 | |||
34 | 29 | /** @name Pre-Session Calls | ||
35 | 30 | * Optional sdk settings that should be called before start session. | ||
36 | 31 | */ | ||
37 | 32 | //@{ | ||
38 | 33 | |||
39 | 34 | /*! | ||
40 | 35 | * @brief Explicitly specifies the App Version that Flurry will use to group Analytics data. | ||
41 | 36 | * @since 2.7 | ||
42 | 37 | * | ||
43 | 38 | * This is an optional method that overrides the App Version Flurry uses for reporting. Flurry will | ||
44 | 39 | * use the CFBundleVersion in your info.plist file when this method is not invoked. | ||
45 | 40 | * | ||
46 | 41 | * @note There is a maximum of 605 versions allowed for a single app. \n | ||
47 | 42 | * This method must be called prior to invoking #startSession:. | ||
48 | 43 | * | ||
49 | 44 | * @param version The custom version name. | ||
50 | 45 | */ | ||
51 | 46 | |||
52 | 47 | + (void)setAppVersion:(NSString *)version; | ||
53 | 48 | |||
54 | 49 | /*! | ||
55 | 50 | * @brief Retrieves the Flurry Agent Build Version. | ||
56 | 51 | * @since 2.7 | ||
57 | 52 | * | ||
58 | 53 | * This is an optional method that retrieves the Flurry Agent Version the app is running under. | ||
59 | 54 | * It is most often used if reporting an unexpected behavior of the SDK to <a href="mailto:iphonesupport@flurry.com"> | ||
60 | 55 | * Flurry Support</a> | ||
61 | 56 | * | ||
62 | 57 | * @note This method must be called prior to invoking #startSession:. \n | ||
63 | 58 | * FAQ for the iPhone SDK is located at <a href="http://wiki.flurry.com/index.php?title=IPhone_FAQ"> | ||
64 | 59 | * Support Center - iPhone FAQ</a>. | ||
65 | 60 | * | ||
66 | 61 | * @see #setDebugLogEnabled: for information on how to view debugging information on your console. | ||
67 | 62 | * | ||
68 | 63 | * @return The agent version of the Flurry SDK. | ||
69 | 64 | * | ||
70 | 65 | */ | ||
71 | 66 | + (NSString *)getFlurryAgentVersion; | ||
72 | 67 | |||
73 | 68 | /*! | ||
74 | 69 | * @brief Displays an exception in the debug log if thrown during a Session. | ||
75 | 70 | * @since 2.7 | ||
76 | 71 | * | ||
77 | 72 | * This is an optional method that augments the debug logs with exceptions that occur during the session. | ||
78 | 73 | * You must both capture exceptions to Flurry and set debug logging to enabled for this method to | ||
79 | 74 | * display information to the console. The default setting for this method is @c NO. | ||
80 | 75 | * | ||
81 | 76 | * @note This method must be called prior to invoking #startSession:. | ||
82 | 77 | * | ||
83 | 78 | * @see #setDebugLogEnabled: for information on how to view debugging information on your console. \n | ||
84 | 79 | * #logError:message:exception: for details on logging exceptions. \n | ||
85 | 80 | * #logError:message:error: for details on logging errors. | ||
86 | 81 | * | ||
87 | 82 | * @param value @c YES to show errors in debug logs, @c NO to omit errors in debug logs. | ||
88 | 83 | */ | ||
89 | 84 | + (void)setShowErrorInLogEnabled:(BOOL)value; | ||
90 | 85 | |||
91 | 86 | /*! | ||
92 | 87 | * @brief Generates debug logs to console. | ||
93 | 88 | * @since 2.7 | ||
94 | 89 | * | ||
95 | 90 | * This is an optional method that displays debug information related to the Flurry SDK. | ||
96 | 91 | * display information to the console. The default setting for this method is @c NO. | ||
97 | 92 | * | ||
98 | 93 | * @note This method must be called prior to invoking #startSession:. | ||
99 | 94 | * | ||
100 | 95 | * @param value @c YES to show debug logs, @c NO to omit debug logs. | ||
101 | 96 | * | ||
102 | 97 | */ | ||
103 | 98 | + (void)setDebugLogEnabled:(BOOL)value; | ||
104 | 99 | |||
105 | 100 | /*! | ||
106 | 101 | * @brief Set the timeout for expiring a Flurry session. | ||
107 | 102 | * @since 2.7 | ||
108 | 103 | * | ||
109 | 104 | * This is an optional method that sets the time the app may be in the background before | ||
110 | 105 | * starting a new session upon resume. The default value for the session timeout is 10 | ||
111 | 106 | * seconds in the background. | ||
112 | 107 | * | ||
113 | 108 | * @note This method must be called prior to invoking #startSession:. | ||
114 | 109 | * | ||
115 | 110 | * @param seconds The time in seconds to set the session timeout to. | ||
116 | 111 | */ | ||
117 | 112 | + (void)setSessionContinueSeconds:(int)seconds; | ||
118 | 113 | |||
119 | 114 | /*! | ||
120 | 115 | * @brief Send data over a secure transport. | ||
121 | 116 | * @since 3.0 | ||
122 | 117 | * | ||
123 | 118 | * This is an optional method that sends data over an SSL connection when enabled. The | ||
124 | 119 | * default value is @c NO. | ||
125 | 120 | * | ||
126 | 121 | * @note This method must be called prior to invoking #startSession:. | ||
127 | 122 | * | ||
128 | 123 | * @param value @c YES to send data over secure connection. | ||
129 | 124 | */ | ||
130 | 125 | + (void)setSecureTransportEnabled:(BOOL)value; | ||
131 | 126 | |||
132 | 127 | //@} | ||
133 | 128 | |||
134 | 129 | /*! | ||
135 | 130 | * @brief Start a Flurry session for the project denoted by @c apiKey. | ||
136 | 131 | * @since 2.6 | ||
137 | 132 | * | ||
138 | 133 | * This method serves as the entry point to Flurry Analytics collection. It must be | ||
139 | 134 | * called in the scope of @c applicationDidFinishLaunching. The session will continue | ||
140 | 135 | * for the period the app is in the foreground until your app is backgrounded for the | ||
141 | 136 | * time specified in #setSessionContinueSeconds:. If the app is resumed in that period | ||
142 | 137 | * the session will continue, otherwise a new session will begin. | ||
143 | 138 | * | ||
144 | 139 | * @note If testing on a simulator, please be sure to send App to background via home | ||
145 | 140 | * button. Flurry depends on the iOS lifecycle to be complete for full reporting. | ||
146 | 141 | * | ||
147 | 142 | * @see #setSessionContinueSeconds: for details on setting a custom session timeout. | ||
148 | 143 | * | ||
149 | 144 | * @code | ||
150 | 145 | * - (void)applicationDidFinishLaunching:(UIApplication *)application | ||
151 | 146 | { | ||
152 | 147 | // Optional Flurry startup methods | ||
153 | 148 | [Flurry startSession:@"YOUR_API_KEY"]; | ||
154 | 149 | // .... | ||
155 | 150 | } | ||
156 | 151 | * @endcode | ||
157 | 152 | * | ||
158 | 153 | * @param apiKey The API key for this project. | ||
159 | 154 | */ | ||
160 | 155 | |||
161 | 156 | + (void)startSession:(NSString *)apiKey; | ||
162 | 157 | |||
163 | 158 | /** @name Event and Error Logging | ||
164 | 159 | * Methods for reporting custom events and errors during the session. | ||
165 | 160 | */ | ||
166 | 161 | //@{ | ||
167 | 162 | |||
168 | 163 | /*! | ||
169 | 164 | * @brief Records a custom event specified by @c eventName. | ||
170 | 165 | * @since 2.8.4 | ||
171 | 166 | * | ||
172 | 167 | * This method allows you to specify custom events within your app. As a general rule | ||
173 | 168 | * you should capture events related to user navigation within your app, any action | ||
174 | 169 | * around monetization, and other events as they are applicable to tracking progress | ||
175 | 170 | * towards your business goals. | ||
176 | 171 | * | ||
177 | 172 | * @note You should not pass private or confidential information about your users in a | ||
178 | 173 | * custom event. \n | ||
179 | 174 | * Where applicable, you should make a concerted effort to use timed events with | ||
180 | 175 | * parameters (#logEvent:withParameters:timed:) or events with parameters | ||
181 | 176 | * (#logEvent:withParameters:). This provides valuable information around the time the user | ||
182 | 177 | * spends within an action (e.g. - time spent on a level or viewing a page) or characteristics | ||
183 | 178 | * of an action (e.g. - Buy Event that has a Parameter of Widget with Value Golden Sword). | ||
184 | 179 | * | ||
185 | 180 | * @see #logEvent:withParameters: for details on storing events with parameters. \n | ||
186 | 181 | * #logEvent:timed: for details on storing timed events. \n | ||
187 | 182 | * #logEvent:withParameters:timed: for details on storing timed events with parameters. \n | ||
188 | 183 | * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating | ||
189 | 184 | * parameters. | ||
190 | 185 | * | ||
191 | 186 | * @code | ||
192 | 187 | * - (void)interestingAppAction | ||
193 | 188 | { | ||
194 | 189 | [Flurry logEvent:@"Interesting_Action"]; | ||
195 | 190 | // Perform interesting action | ||
196 | 191 | } | ||
197 | 192 | * @endcode | ||
198 | 193 | * | ||
199 | 194 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme | ||
200 | 195 | * that can be easily understood by non-technical people in your business domain. | ||
201 | 196 | */ | ||
202 | 197 | + (void)logEvent:(NSString *)eventName; | ||
203 | 198 | |||
204 | 199 | /*! | ||
205 | 200 | * @brief Records a custom parameterized event specified by @c eventName with @c parameters. | ||
206 | 201 | * @since 2.8.4 | ||
207 | 202 | * | ||
208 | 203 | * This method overrides #logEvent to allow you to associate parameters with an event. Parameters | ||
209 | 204 | * are extremely valuable as they allow you to store characteristics of an action. For example, | ||
210 | 205 | * if a user purchased an item it may be helpful to know what level that user was on. | ||
211 | 206 | * By setting this parameter you will be able to view a distribution of levels for the purcahsed | ||
212 | 207 | * event on the <a href="http://dev.flurry.com">Flurrly Dev Portal</a>. | ||
213 | 208 | * | ||
214 | 209 | * @note You should not pass private or confidential information about your users in a | ||
215 | 210 | * custom event. \n | ||
216 | 211 | * A maximum of 10 parameter names may be associated with any event. Sending | ||
217 | 212 | * over 10 parameter names with a single event will result in no parameters being logged | ||
218 | 213 | * for that event. You may specify an infinite number of Parameter values. For example, | ||
219 | 214 | * a Search Box would have 1 parameter name (e.g. - Search Box) and many values, which would | ||
220 | 215 | * allow you to see what values users look for the most in your app. \n | ||
221 | 216 | * Where applicable, you should make a concerted effort to use timed events with | ||
222 | 217 | * parameters (#logEvent:withParameters:timed:). This provides valuable information | ||
223 | 218 | * around the time the user spends within an action (e.g. - time spent on a level or | ||
224 | 219 | * viewing a page). | ||
225 | 220 | * | ||
226 | 221 | * @see #logEvent:withParameters:timed: for details on storing timed events with parameters. \n | ||
227 | 222 | * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating | ||
228 | 223 | * parameters. | ||
229 | 224 | * | ||
230 | 225 | * @code | ||
231 | 226 | * - (void)userPurchasedSomethingCool | ||
232 | 227 | { | ||
233 | 228 | NSDictionary *params = | ||
234 | 229 | [NSDictionary dictionaryWithObjectsAndKeys:@"Cool Item", // Parameter Value | ||
235 | 230 | @"Item Purchased", // Parameter Name | ||
236 | 231 | nil]; | ||
237 | 232 | [Flurry logEvent:@"Something Cool Purchased" withParameters:params]; | ||
238 | 233 | // Give user cool item | ||
239 | 234 | } | ||
240 | 235 | * @endcode | ||
241 | 236 | * | ||
242 | 237 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme | ||
243 | 238 | * that can be easily understood by non-technical people in your business domain. | ||
244 | 239 | * @param parameters A map containing Name-Value pairs of parameters. | ||
245 | 240 | */ | ||
246 | 241 | + (void)logEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters; | ||
247 | 242 | |||
248 | 243 | /*! | ||
249 | 244 | * @brief Records an app exception. Commonly used to catch unhandled exceptions. | ||
250 | 245 | * @since 2.7 | ||
251 | 246 | * | ||
252 | 247 | * This method captures an exception for reporting to Flurry. We recommend adding an uncaught | ||
253 | 248 | * exception listener to capture any exceptions that occur during usage that is not | ||
254 | 249 | * anticipated by your app. | ||
255 | 250 | * | ||
256 | 251 | * @see #logError:message:error: for details on capturing errors. | ||
257 | 252 | * | ||
258 | 253 | * @code | ||
259 | 254 | * - (void) uncaughtExceptionHandler(NSException *exception) | ||
260 | 255 | { | ||
261 | 256 | [Flurry logError:@"Uncaught" message:@"Crash!" exception:exception]; | ||
262 | 257 | } | ||
263 | 258 | |||
264 | 259 | - (void)applicationDidFinishLaunching:(UIApplication *)application | ||
265 | 260 | { | ||
266 | 261 | NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); | ||
267 | 262 | [Flurry startSession:@"YOUR_API_KEY"]; | ||
268 | 263 | // .... | ||
269 | 264 | } | ||
270 | 265 | * @endcode | ||
271 | 266 | * | ||
272 | 267 | * @param errorID Name of the error. | ||
273 | 268 | * @param message The message to associate with the error. | ||
274 | 269 | * @param exception The exception object to report. | ||
275 | 270 | */ | ||
276 | 271 | + (void)logError:(NSString *)errorID message:(NSString *)message exception:(NSException *)exception; | ||
277 | 272 | |||
278 | 273 | /*! | ||
279 | 274 | * @brief Records an app error. | ||
280 | 275 | * @since 2.7 | ||
281 | 276 | * | ||
282 | 277 | * This method captures an error for reporting to Flurry. | ||
283 | 278 | * | ||
284 | 279 | * @see #logError:message:exception: for details on capturing exceptions. | ||
285 | 280 | * | ||
286 | 281 | * @code | ||
287 | 282 | * - (void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error | ||
288 | 283 | { | ||
289 | 284 | [Flurry logError:@"WebView No Load" message:[error localizedDescription] error:error]; | ||
290 | 285 | } | ||
291 | 286 | * @endcode | ||
292 | 287 | * | ||
293 | 288 | * @param errorID Name of the error. | ||
294 | 289 | * @param message The message to associate with the error. | ||
295 | 290 | * @param error The error object to report. | ||
296 | 291 | */ | ||
297 | 292 | + (void)logError:(NSString *)errorID message:(NSString *)message error:(NSError *)error; | ||
298 | 293 | |||
299 | 294 | /*! | ||
300 | 295 | * @brief Records a timed event specified by @c eventName. | ||
301 | 296 | * @since 2.8.4 | ||
302 | 297 | * | ||
303 | 298 | * This method overrides #logEvent to allow you to capture the length of an event. This can | ||
304 | 299 | * be extremely valuable to understand the level of engagement with a particular action. For | ||
305 | 300 | * example, you can capture how long a user spends on a level or reading an article. | ||
306 | 301 | * | ||
307 | 302 | * @note You should not pass private or confidential information about your users in a | ||
308 | 303 | * custom event. \n | ||
309 | 304 | * Where applicable, you should make a concerted effort to use parameters with your timed | ||
310 | 305 | * events (#logEvent:withParameters:timed:). This provides valuable information | ||
311 | 306 | * around the characteristics of an action (e.g. - Buy Event that has a Parameter of Widget with | ||
312 | 307 | * Value Golden Sword). | ||
313 | 308 | * | ||
314 | 309 | * @see #logEvent:withParameters:timed: for details on storing timed events with parameters. \n | ||
315 | 310 | * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating | ||
316 | 311 | * parameters. | ||
317 | 312 | * | ||
318 | 313 | * @code | ||
319 | 314 | * - (void)startLevel | ||
320 | 315 | { | ||
321 | 316 | [Flurry logEvent:@"Level Played" timed:YES]; | ||
322 | 317 | // Start user on level | ||
323 | 318 | } | ||
324 | 319 | |||
325 | 320 | - (void)endLevel | ||
326 | 321 | { | ||
327 | 322 | [Flurry endTimedEvent:@"Level Played" withParameters:nil]; | ||
328 | 323 | // User done with level | ||
329 | 324 | } | ||
330 | 325 | * @endcode | ||
331 | 326 | * | ||
332 | 327 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme | ||
333 | 328 | * that can be easily understood by non-technical people in your business domain. | ||
334 | 329 | * @param timed Specifies the event will be timed. | ||
335 | 330 | */ | ||
336 | 331 | + (void)logEvent:(NSString *)eventName timed:(BOOL)timed; | ||
337 | 332 | |||
338 | 333 | /*! | ||
339 | 334 | * @brief Records a custom parameterized timed event specified by @c eventName with @c parameters. | ||
340 | 335 | * @since 2.8.4 | ||
341 | 336 | * | ||
342 | 337 | * This method overrides #logEvent to allow you to capture the length of an event with parameters. | ||
343 | 338 | * This can be extremely valuable to understand the level of engagement with a particular action | ||
344 | 339 | * and the characteristics associated with that action. For example, you can capture how long a user | ||
345 | 340 | * spends on a level or reading an article. Parameters can be used to capture, for example, the | ||
346 | 341 | * author of an article or if something was purchased while on the level. | ||
347 | 342 | * | ||
348 | 343 | * @note You should not pass private or confidential information about your users in a | ||
349 | 344 | * custom event. | ||
350 | 345 | * | ||
351 | 346 | * @see #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating | ||
352 | 347 | * parameters. | ||
353 | 348 | * | ||
354 | 349 | * @code | ||
355 | 350 | * - (void)startLevel | ||
356 | 351 | { | ||
357 | 352 | NSDictionary *params = | ||
358 | 353 | [NSDictionary dictionaryWithObjectsAndKeys:@"100", // Parameter Value | ||
359 | 354 | @"Current Points", // Parameter Name | ||
360 | 355 | nil]; | ||
361 | 356 | |||
362 | 357 | [Flurry logEvent:@"Level Played" withParameters:params timed:YES]; | ||
363 | 358 | // Start user on level | ||
364 | 359 | } | ||
365 | 360 | |||
366 | 361 | - (void)endLevel | ||
367 | 362 | { | ||
368 | 363 | // User gained additional 100 points in Level | ||
369 | 364 | NSDictionary *params = | ||
370 | 365 | [NSDictionary dictionaryWithObjectsAndKeys:@"200", // Parameter Value | ||
371 | 366 | @"Current Points", // Parameter Name | ||
372 | 367 | nil]; | ||
373 | 368 | [Flurry endTimedEvent:@"Level Played" withParameters:params]; | ||
374 | 369 | // User done with level | ||
375 | 370 | } | ||
376 | 371 | * @endcode | ||
377 | 372 | * | ||
378 | 373 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme | ||
379 | 374 | * that can be easily understood by non-technical people in your business domain. | ||
380 | 375 | * @param parameters A map containing Name-Value pairs of parameters. | ||
381 | 376 | * @param timed Specifies the event will be timed. | ||
382 | 377 | */ | ||
383 | 378 | + (void)logEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters timed:(BOOL)timed; | ||
384 | 379 | |||
385 | 380 | /*! | ||
386 | 381 | * @brief Ends a timed event specified by @c eventName and optionally updates parameters with @c parameters. | ||
387 | 382 | * @since 2.8.4 | ||
388 | 383 | * | ||
389 | 384 | * This method ends an existing timed event. If parameters are provided, this will overwrite existing | ||
390 | 385 | * parameters with the same name or create new parameters if the name does not exist in the parameter | ||
391 | 386 | * map set by #logEvent:withParameters:timed:. | ||
392 | 387 | * | ||
393 | 388 | * @note You should not pass private or confidential information about your users in a | ||
394 | 389 | * custom event. \n | ||
395 | 390 | * If the app is backgrounded prior to ending a timed event, the Flurry SDK will automatically | ||
396 | 391 | * end the timer on the event. \n | ||
397 | 392 | * #endTimedEvent:withParameters: is ignored if called on a previously | ||
398 | 393 | * terminated event. | ||
399 | 394 | * | ||
400 | 395 | * @see #logEvent:withParameters:timed: for details on starting a timed event with parameters. | ||
401 | 396 | * | ||
402 | 397 | * @code | ||
403 | 398 | * - (void)startLevel | ||
404 | 399 | { | ||
405 | 400 | NSDictionary *params = | ||
406 | 401 | [NSDictionary dictionaryWithObjectsAndKeys:@"100", // Parameter Value | ||
407 | 402 | @"Current Points", // Parameter Name | ||
408 | 403 | nil]; | ||
409 | 404 | |||
410 | 405 | [Flurry logEvent:@"Level Played" withParameters:params timed:YES]; | ||
411 | 406 | // Start user on level | ||
412 | 407 | } | ||
413 | 408 | |||
414 | 409 | - (void)endLevel | ||
415 | 410 | { | ||
416 | 411 | // User gained additional 100 points in Level | ||
417 | 412 | NSDictionary *params = | ||
418 | 413 | [NSDictionary dictionaryWithObjectsAndKeys:@"200", // Parameter Value | ||
419 | 414 | @"Current Points", // Parameter Name | ||
420 | 415 | nil]; | ||
421 | 416 | [Flurry endTimedEvent:@"Level Played" withParameters:params]; | ||
422 | 417 | // User done with level | ||
423 | 418 | } | ||
424 | 419 | * @endcode | ||
425 | 420 | * | ||
426 | 421 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme | ||
427 | 422 | * that can be easily understood by non-technical people in your business domain. | ||
428 | 423 | * @param parameters A map containing Name-Value pairs of parameters. | ||
429 | 424 | */ | ||
430 | 425 | + (void)endTimedEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters; // non-nil parameters will update the parameters | ||
431 | 426 | |||
432 | 427 | //@} | ||
433 | 428 | |||
434 | 429 | |||
435 | 430 | /** @name Page View Methods | ||
436 | 431 | * Count page views. | ||
437 | 432 | */ | ||
438 | 433 | //@{ | ||
439 | 434 | |||
440 | 435 | /*! | ||
441 | 436 | * @brief Automatically track page views on a @c UINavigationController or @c UITabBarController. | ||
442 | 437 | * @since 2.7 | ||
443 | 438 | * | ||
444 | 439 | * This method increments the page view count for a session based on traversing a UINavigationController | ||
445 | 440 | * or UITabBarController. The page view count is only a counter for the number of transitions in your | ||
446 | 441 | * app. It does not associate a name with the page count. To associate a name with a count of occurences | ||
447 | 442 | * see #logEvent:. | ||
448 | 443 | * | ||
449 | 444 | * @note Please make sure you assign the Tab and Navigation controllers to the view controllers before | ||
450 | 445 | * passing them to this method. | ||
451 | 446 | * | ||
452 | 447 | * @see #logPageView for details on explictly incrementing page view count. | ||
453 | 448 | * | ||
454 | 449 | * @code | ||
455 | 450 | * -(void) trackViewsFromTabBar:(UITabBarController*) tabBar | ||
456 | 451 | { | ||
457 | 452 | [Flurry logAllPageViews:tabBar]; | ||
458 | 453 | } | ||
459 | 454 | * @endcode | ||
460 | 455 | * | ||
461 | 456 | * @param target The navigation or tab bar controller. | ||
462 | 457 | */ | ||
463 | 458 | + (void)logAllPageViews:(id)target; | ||
464 | 459 | |||
465 | 460 | /*! | ||
466 | 461 | * @brief Explicitly track a page view during a session. | ||
467 | 462 | * @since 2.7 | ||
468 | 463 | * | ||
469 | 464 | * This method increments the page view count for a session when invoked. It does not associate a name | ||
470 | 465 | * with the page count. To associate a name with a count of occurences see #logEvent:. | ||
471 | 466 | * | ||
472 | 467 | * @see #logAllPageViews for details on automatically incrementing page view count based on user | ||
473 | 468 | * traversing navigation or tab bar controller. | ||
474 | 469 | * | ||
475 | 470 | * @code | ||
476 | 471 | * -(void) trackView | ||
477 | 472 | { | ||
478 | 473 | [Flurry logPageView]; | ||
479 | 474 | } | ||
480 | 475 | * @endcode | ||
481 | 476 | * | ||
482 | 477 | */ | ||
483 | 478 | + (void)logPageView; | ||
484 | 479 | |||
485 | 480 | //@} | ||
486 | 481 | |||
487 | 482 | /** @name User Info | ||
488 | 483 | * Methods to set user information. | ||
489 | 484 | */ | ||
490 | 485 | //@{ | ||
491 | 486 | |||
492 | 487 | /*! | ||
493 | 488 | * @brief Assign a unique id for a user in your app. | ||
494 | 489 | * @since 2.7 | ||
495 | 490 | * | ||
496 | 491 | * @note Please be sure not to use this method to pass any private or confidential information | ||
497 | 492 | * about the user. | ||
498 | 493 | * | ||
499 | 494 | * @param userID The app id for a user. | ||
500 | 495 | */ | ||
501 | 496 | + (void)setUserID:(NSString *)userID; | ||
502 | 497 | |||
503 | 498 | /*! | ||
504 | 499 | * @brief Set your user's age in years. | ||
505 | 500 | * @since 2.7 | ||
506 | 501 | * | ||
507 | 502 | * Use this method to capture the age of your user. Only use this method if you collect this | ||
508 | 503 | * information explictly from your user (i.e. - there is no need to set a default value). | ||
509 | 504 | * | ||
510 | 505 | * @note The age is aggregated across all users of your app and not available on a per user | ||
511 | 506 | * basis. | ||
512 | 507 | * | ||
513 | 508 | * @param age Reported age of user. | ||
514 | 509 | * | ||
515 | 510 | */ | ||
516 | 511 | + (void)setAge:(int)age; | ||
517 | 512 | |||
518 | 513 | /*! | ||
519 | 514 | * @brief Set your user's gender. | ||
520 | 515 | * @since 2.7 | ||
521 | 516 | * | ||
522 | 517 | * Use this method to capture the gender of your user. Only use this method if you collect this | ||
523 | 518 | * information explictly from your user (i.e. - there is no need to set a default value). Allowable | ||
524 | 519 | * values are @c @"M" or @c @"F" | ||
525 | 520 | * | ||
526 | 521 | * @note The gender is aggregated across all users of your app and not available on a per user | ||
527 | 522 | * basis. | ||
528 | 523 | * | ||
529 | 524 | * @param gender Reported gender of user. | ||
530 | 525 | * | ||
531 | 526 | */ | ||
532 | 527 | + (void)setGender:(NSString *)gender; // user's gender m or f | ||
533 | 528 | |||
534 | 529 | //@} | ||
535 | 530 | |||
536 | 531 | /** @name Location Reporting | ||
537 | 532 | * Methods for setting location information. | ||
538 | 533 | */ | ||
539 | 534 | //@{ | ||
540 | 535 | /*! | ||
541 | 536 | * @brief Set the location of the session. | ||
542 | 537 | * @since 2.7 | ||
543 | 538 | * | ||
544 | 539 | * Use information from the CLLocationManager to specify the location of the session. Flurry does not | ||
545 | 540 | * automatically track this information or include the CLLocation framework. | ||
546 | 541 | * | ||
547 | 542 | * @note Only the last location entered is captured per session. \n | ||
548 | 543 | * Regardless of accuracy specified, the Flurry SDK will only report location at city level or higher. \n | ||
549 | 544 | * Location is aggregated across all users of your app and not available on a per user basis. \n | ||
550 | 545 | * This information should only be captured if it is germaine to the use of your app. | ||
551 | 546 | * | ||
552 | 547 | * @code | ||
553 | 548 | CLLocationManager *locationManager = [[CLLocationManager alloc] init]; | ||
554 | 549 | [locationManager startUpdatingLocation]; | ||
555 | 550 | |||
556 | 551 | CLLocation *location = locationManager.location; | ||
557 | 552 | [Flurry setLatitude:location.coordinate.latitude | ||
558 | 553 | longitude:location.coordinate.longitude | ||
559 | 554 | horizontalAccuracy:location.horizontalAccuracy | ||
560 | 555 | verticalAccuracy:location.verticalAccuracy]; | ||
561 | 556 | * @endcode | ||
562 | 557 | * @param latitude The latitude. | ||
563 | 558 | * @param longitude The longitude. | ||
564 | 559 | * @param horizontalAccuracy The radius of uncertainty for the location in meters. | ||
565 | 560 | * @param verticalAccuracy The accuracy of the altitude value in meters. | ||
566 | 561 | * | ||
567 | 562 | */ | ||
568 | 563 | + (void)setLatitude:(double)latitude longitude:(double)longitude horizontalAccuracy:(float)horizontalAccuracy verticalAccuracy:(float)verticalAccuracy; | ||
569 | 564 | |||
570 | 565 | //@} | ||
571 | 566 | |||
572 | 567 | /** @name Session Reporting Calls | ||
573 | 568 | * Optional methods that can be called at any point to control session reporting. | ||
574 | 569 | */ | ||
575 | 570 | //@{ | ||
576 | 571 | |||
577 | 572 | /*! | ||
578 | 573 | * @brief Set session to report when app closes. | ||
579 | 574 | * @since 2.7 | ||
580 | 575 | * | ||
581 | 576 | * Use this method report session data when the app is closed. The default value is @c YES. | ||
582 | 577 | * | ||
583 | 578 | * @note This method is rarely invoked in iOS >= 3.2 due to the updated iOS lifecycle. | ||
584 | 579 | * | ||
585 | 580 | * @see #setSessionReportsOnPauseEnabled: | ||
586 | 581 | * | ||
587 | 582 | * @param sendSessionReportsOnClose YES to send on close, NO to omit reporting on close. | ||
588 | 583 | * | ||
589 | 584 | */ | ||
590 | 585 | + (void)setSessionReportsOnCloseEnabled:(BOOL)sendSessionReportsOnClose; | ||
591 | 586 | |||
592 | 587 | /*! | ||
593 | 588 | * @brief Set session to report when app is sent to the background. | ||
594 | 589 | * @since 2.7 | ||
595 | 590 | * | ||
596 | 591 | * Use this method report session data when the app is paused. The default value is @c NO. | ||
597 | 592 | * | ||
598 | 593 | * @param setSessionReportsOnPauseEnabled YES to send on pause, NO to omit reporting on pause. | ||
599 | 594 | * | ||
600 | 595 | */ | ||
601 | 596 | + (void)setSessionReportsOnPauseEnabled:(BOOL)setSessionReportsOnPauseEnabled; | ||
602 | 597 | |||
603 | 598 | /*! | ||
604 | 599 | * @brief Enable custom event logging. | ||
605 | 600 | * @since 2.7 | ||
606 | 601 | * | ||
607 | 602 | * Use this method to allow the capture of custom events. The default value is @c YES. | ||
608 | 603 | * | ||
609 | 604 | * @param value YES to enable event logging, NO to stop custom logging. | ||
610 | 605 | * | ||
611 | 606 | */ | ||
612 | 607 | + (void)setEventLoggingEnabled:(BOOL)value; | ||
613 | 608 | |||
614 | 609 | //@} | ||
615 | 610 | |||
616 | 611 | @end | ||
617 | 0 | 612 | ||
618 | === added file 'Dependencies/Flurry/libFlurry.a' | |||
619 | 1 | Binary files Dependencies/Flurry/libFlurry.a 1970-01-01 00:00:00 +0000 and Dependencies/Flurry/libFlurry.a 2013-02-11 04:20:26 +0000 differ | 613 | Binary files Dependencies/Flurry/libFlurry.a 1970-01-01 00:00:00 +0000 and Dependencies/Flurry/libFlurry.a 2013-02-11 04:20:26 +0000 differ |
620 | === modified file 'Music/UOAppDelegate.m' | |||
621 | --- Music/UOAppDelegate.m 2013-02-08 17:05:40 +0000 | |||
622 | +++ Music/UOAppDelegate.m 2013-02-11 04:20:26 +0000 | |||
623 | @@ -56,6 +56,7 @@ | |||
624 | 56 | 56 | ||
625 | 57 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions { | 57 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions { |
626 | 58 | [Crashlytics startWithAPIKey:@"0606692bafe724ed1413548f6211a8557140eade"]; | 58 | [Crashlytics startWithAPIKey:@"0606692bafe724ed1413548f6211a8557140eade"]; |
627 | 59 | [Flurry startSession:@"BTQGJ5ZF8C7SMQG3GC5F"]; | ||
628 | 59 | 60 | ||
629 | 60 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds ]]; | 61 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds ]]; |
630 | 61 | 62 | ||
631 | 62 | 63 | ||
632 | === modified file 'Music/View Controllers/AlbumViewController.m' | |||
633 | --- Music/View Controllers/AlbumViewController.m 2013-02-11 04:20:26 +0000 | |||
634 | +++ Music/View Controllers/AlbumViewController.m 2013-02-11 04:20:26 +0000 | |||
635 | @@ -34,10 +34,12 @@ | |||
636 | 34 | @synthesize artistId = _artistId; | 34 | @synthesize artistId = _artistId; |
637 | 35 | 35 | ||
638 | 36 | - (void)viewDidLoad { | 36 | - (void)viewDidLoad { |
639 | 37 | [super viewDidLoad]; | ||
640 | 37 | [self.tableView setDataSource:self]; | 38 | [self.tableView setDataSource:self]; |
641 | 38 | } | 39 | } |
642 | 39 | 40 | ||
643 | 40 | - (void)viewWillAppear:(BOOL)animated { | 41 | - (void)viewWillAppear:(BOOL)animated { |
644 | 42 | [super viewWillAppear:animated]; | ||
645 | 41 | [self fetchAlbum]; | 43 | [self fetchAlbum]; |
646 | 42 | 44 | ||
647 | 43 | if ([[UOPlayer player] currentSong]) { | 45 | if ([[UOPlayer player] currentSong]) { |
648 | @@ -69,6 +71,13 @@ | |||
649 | 69 | } else { | 71 | } else { |
650 | 70 | [[UOWebServiceController controller] updateSongs:self]; | 72 | [[UOWebServiceController controller] updateSongs:self]; |
651 | 71 | } | 73 | } |
652 | 74 | |||
653 | 75 | [Flurry logEvent:EVENT_ALBUM_VIEW timed:YES]; | ||
654 | 76 | } | ||
655 | 77 | |||
656 | 78 | - (void)viewDidDisappear:(BOOL)animated { | ||
657 | 79 | [super viewDidDisappear:animated]; | ||
658 | 80 | [Flurry endTimedEvent:EVENT_ALBUM_VIEW withParameters:nil]; | ||
659 | 72 | } | 81 | } |
660 | 73 | 82 | ||
661 | 74 | - (void)viewDidUnload { | 83 | - (void)viewDidUnload { |
662 | 75 | 84 | ||
663 | === modified file 'Music/View Controllers/AlbumsViewController.m' | |||
664 | --- Music/View Controllers/AlbumsViewController.m 2013-02-11 04:20:26 +0000 | |||
665 | +++ Music/View Controllers/AlbumsViewController.m 2013-02-11 04:20:26 +0000 | |||
666 | @@ -50,6 +50,18 @@ | |||
667 | 50 | [[UOWebServiceController controller] updateAlbums:self clearCache:YES]; | 50 | [[UOWebServiceController controller] updateAlbums:self clearCache:YES]; |
668 | 51 | } | 51 | } |
669 | 52 | 52 | ||
670 | 53 | #pragma mark - View controller lifecycle | ||
671 | 54 | |||
672 | 55 | - (void)viewWillAppear:(BOOL)animated { | ||
673 | 56 | [super viewWillAppear:animated]; | ||
674 | 57 | [Flurry logEvent:EVENT_ALBUMS_VIEW timed:YES]; | ||
675 | 58 | } | ||
676 | 59 | |||
677 | 60 | - (void)viewDidDisappear:(BOOL)animated { | ||
678 | 61 | [super viewDidDisappear:animated]; | ||
679 | 62 | [Flurry endTimedEvent:EVENT_ALBUMS_VIEW withParameters:nil]; | ||
680 | 63 | } | ||
681 | 64 | |||
682 | 53 | #pragma mark - Storyboard methods | 65 | #pragma mark - Storyboard methods |
683 | 54 | 66 | ||
684 | 55 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { | 67 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { |
685 | 56 | 68 | ||
686 | === modified file 'Music/View Controllers/ArtistViewController.m' | |||
687 | --- Music/View Controllers/ArtistViewController.m 2013-02-11 04:20:26 +0000 | |||
688 | +++ Music/View Controllers/ArtistViewController.m 2013-02-11 04:20:26 +0000 | |||
689 | @@ -35,6 +35,7 @@ | |||
690 | 35 | @synthesize artistId = _artistId; | 35 | @synthesize artistId = _artistId; |
691 | 36 | 36 | ||
692 | 37 | - (void)viewDidLoad { | 37 | - (void)viewDidLoad { |
693 | 38 | [super viewDidLoad]; | ||
694 | 38 | [self.tableView setDataSource:self]; | 39 | [self.tableView setDataSource:self]; |
695 | 39 | } | 40 | } |
696 | 40 | 41 | ||
697 | @@ -63,6 +64,14 @@ | |||
698 | 63 | NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"year" ascending:NO]; | 64 | NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"year" ascending:NO]; |
699 | 64 | tableData = [artist.albums sortedArrayUsingDescriptors:@[sortDescriptor]]; | 65 | tableData = [artist.albums sortedArrayUsingDescriptors:@[sortDescriptor]]; |
700 | 65 | [self.tableView reloadData]; | 66 | [self.tableView reloadData]; |
701 | 67 | |||
702 | 68 | [super viewWillAppear:animated]; | ||
703 | 69 | [Flurry logEvent:EVENT_ARTIST_VIEW timed:YES]; | ||
704 | 70 | } | ||
705 | 71 | |||
706 | 72 | - (void)viewDidDisappear:(BOOL)animated { | ||
707 | 73 | [super viewDidDisappear:animated]; | ||
708 | 74 | [Flurry endTimedEvent:EVENT_ARTIST_VIEW withParameters:nil]; | ||
709 | 66 | } | 75 | } |
710 | 67 | 76 | ||
711 | 68 | - (void)viewDidUnload { | 77 | - (void)viewDidUnload { |
712 | 69 | 78 | ||
713 | === modified file 'Music/View Controllers/ArtistsViewController.m' | |||
714 | --- Music/View Controllers/ArtistsViewController.m 2013-02-11 04:20:26 +0000 | |||
715 | +++ Music/View Controllers/ArtistsViewController.m 2013-02-11 04:20:26 +0000 | |||
716 | @@ -53,6 +53,18 @@ | |||
717 | 53 | [[UOWebServiceController controller] updateArtists:self clearCache:YES]; | 53 | [[UOWebServiceController controller] updateArtists:self clearCache:YES]; |
718 | 54 | } | 54 | } |
719 | 55 | 55 | ||
720 | 56 | #pragma mark - View controller lifecycle | ||
721 | 57 | |||
722 | 58 | - (void)viewWillAppear:(BOOL)animated { | ||
723 | 59 | [super viewWillAppear:animated]; | ||
724 | 60 | [Flurry logEvent:EVENT_ARTISTS_VIEW timed:YES]; | ||
725 | 61 | } | ||
726 | 62 | |||
727 | 63 | - (void)viewDidDisappear:(BOOL)animated { | ||
728 | 64 | [super viewDidDisappear:animated]; | ||
729 | 65 | [Flurry endTimedEvent:EVENT_ARTISTS_VIEW withParameters:nil]; | ||
730 | 66 | } | ||
731 | 67 | |||
732 | 56 | #pragma mark - Storyboard methods | 68 | #pragma mark - Storyboard methods |
733 | 57 | 69 | ||
734 | 58 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { | 70 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { |
735 | 59 | 71 | ||
736 | === modified file 'Music/View Controllers/PlayerViewController.m' | |||
737 | --- Music/View Controllers/PlayerViewController.m 2013-02-11 04:20:26 +0000 | |||
738 | +++ Music/View Controllers/PlayerViewController.m 2013-02-11 04:20:26 +0000 | |||
739 | @@ -41,6 +41,7 @@ | |||
740 | 41 | [self updateCurrentSong]; | 41 | [self updateCurrentSong]; |
741 | 42 | 42 | ||
742 | 43 | heartbeat = [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(heartbeat:) userInfo:nil repeats:YES]; | 43 | heartbeat = [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(heartbeat:) userInfo:nil repeats:YES]; |
743 | 44 | [Flurry logEvent:EVENT_PLAYER_VIEW timed:YES]; | ||
744 | 44 | } | 45 | } |
745 | 45 | 46 | ||
746 | 46 | - (void)viewDidDisappear:(BOOL)animated { | 47 | - (void)viewDidDisappear:(BOOL)animated { |
747 | @@ -51,6 +52,8 @@ | |||
748 | 51 | 52 | ||
749 | 52 | [heartbeat invalidate]; | 53 | [heartbeat invalidate]; |
750 | 53 | heartbeat = nil; | 54 | heartbeat = nil; |
751 | 55 | |||
752 | 56 | [Flurry endTimedEvent:EVENT_PLAYER_VIEW withParameters:nil]; | ||
753 | 54 | } | 57 | } |
754 | 55 | 58 | ||
755 | 56 | - (void)viewDidUnload { | 59 | - (void)viewDidUnload { |
756 | 57 | 60 | ||
757 | === modified file 'Music/View Controllers/PlaylistsViewController.m' | |||
758 | --- Music/View Controllers/PlaylistsViewController.m 2013-02-11 04:20:26 +0000 | |||
759 | +++ Music/View Controllers/PlaylistsViewController.m 2013-02-11 04:20:26 +0000 | |||
760 | @@ -49,4 +49,16 @@ | |||
761 | 49 | [[UOWebServiceController controller] updatePlaylists:self clearCache:YES]; | 49 | [[UOWebServiceController controller] updatePlaylists:self clearCache:YES]; |
762 | 50 | } | 50 | } |
763 | 51 | 51 | ||
764 | 52 | #pragma mark - View controller lifecycle | ||
765 | 53 | |||
766 | 54 | - (void)viewWillAppear:(BOOL)animated { | ||
767 | 55 | [super viewWillAppear:animated]; | ||
768 | 56 | [Flurry logEvent:EVENT_PLAYLISTS_VIEW timed:YES]; | ||
769 | 57 | } | ||
770 | 58 | |||
771 | 59 | - (void)viewDidDisappear:(BOOL)animated { | ||
772 | 60 | [super viewDidDisappear:animated]; | ||
773 | 61 | [Flurry endTimedEvent:EVENT_PLAYLISTS_VIEW withParameters:nil]; | ||
774 | 62 | } | ||
775 | 63 | |||
776 | 52 | @end | 64 | @end |
777 | 53 | 65 | ||
778 | === modified file 'Music/View Controllers/SettingsAuthenticationViewController.m' | |||
779 | --- Music/View Controllers/SettingsAuthenticationViewController.m 2013-01-26 02:37:04 +0000 | |||
780 | +++ Music/View Controllers/SettingsAuthenticationViewController.m 2013-02-11 04:20:26 +0000 | |||
781 | @@ -92,6 +92,18 @@ | |||
782 | 92 | [self.spinner setHidden:YES]; | 92 | [self.spinner setHidden:YES]; |
783 | 93 | } | 93 | } |
784 | 94 | 94 | ||
785 | 95 | #pragma mark - View controller lifecycle | ||
786 | 96 | |||
787 | 97 | - (void)viewWillAppear:(BOOL)animated { | ||
788 | 98 | [super viewWillAppear:animated]; | ||
789 | 99 | [Flurry logEvent:EVENT_AUTHENTICATION_VIEW timed:YES]; | ||
790 | 100 | } | ||
791 | 101 | |||
792 | 102 | - (void)viewDidDisappear:(BOOL)animated { | ||
793 | 103 | [super viewDidDisappear:animated]; | ||
794 | 104 | [Flurry endTimedEvent:EVENT_AUTHENTICATION_VIEW withParameters:nil]; | ||
795 | 105 | } | ||
796 | 106 | |||
797 | 95 | #pragma mark - Private methods | 107 | #pragma mark - Private methods |
798 | 96 | 108 | ||
799 | 97 | - (void)showAlert:(NSString *)message { | 109 | - (void)showAlert:(NSString *)message { |
800 | 98 | 110 | ||
801 | === modified file 'Music/View Controllers/SettingsViewController.m' | |||
802 | --- Music/View Controllers/SettingsViewController.m 2013-01-28 17:21:44 +0000 | |||
803 | +++ Music/View Controllers/SettingsViewController.m 2013-02-11 04:20:26 +0000 | |||
804 | @@ -23,6 +23,18 @@ | |||
805 | 23 | 23 | ||
806 | 24 | @implementation SettingsViewController | 24 | @implementation SettingsViewController |
807 | 25 | 25 | ||
808 | 26 | #pragma mark - View controller lifecycle | ||
809 | 27 | |||
810 | 28 | - (void)viewWillAppear:(BOOL)animated { | ||
811 | 29 | [super viewWillAppear:animated]; | ||
812 | 30 | [Flurry logEvent:EVENT_SETTINGS_VIEW timed:YES]; | ||
813 | 31 | } | ||
814 | 32 | |||
815 | 33 | - (void)viewDidDisappear:(BOOL)animated { | ||
816 | 34 | [super viewDidDisappear:animated]; | ||
817 | 35 | [Flurry endTimedEvent:EVENT_SETTINGS_VIEW withParameters:nil]; | ||
818 | 36 | } | ||
819 | 37 | |||
820 | 26 | - (void)viewDidAppear:(BOOL)animated { | 38 | - (void)viewDidAppear:(BOOL)animated { |
821 | 27 | [super viewDidAppear:animated]; | 39 | [super viewDidAppear:animated]; |
822 | 28 | 40 | ||
823 | 29 | 41 | ||
824 | === modified file 'Music/View Controllers/SongsViewController.m' | |||
825 | --- Music/View Controllers/SongsViewController.m 2013-02-11 04:20:26 +0000 | |||
826 | +++ Music/View Controllers/SongsViewController.m 2013-02-11 04:20:26 +0000 | |||
827 | @@ -50,6 +50,18 @@ | |||
828 | 50 | [[UOWebServiceController controller] updateSongs:self clearCache:YES]; | 50 | [[UOWebServiceController controller] updateSongs:self clearCache:YES]; |
829 | 51 | } | 51 | } |
830 | 52 | 52 | ||
831 | 53 | #pragma mark - View controller lifecycle | ||
832 | 54 | |||
833 | 55 | - (void)viewWillAppear:(BOOL)animated { | ||
834 | 56 | [super viewWillAppear:animated]; | ||
835 | 57 | [Flurry logEvent:EVENT_SONGS_VIEW timed:YES]; | ||
836 | 58 | } | ||
837 | 59 | |||
838 | 60 | - (void)viewDidDisappear:(BOOL)animated { | ||
839 | 61 | [super viewDidDisappear:animated]; | ||
840 | 62 | [Flurry endTimedEvent:EVENT_SONGS_VIEW withParameters:nil]; | ||
841 | 63 | } | ||
842 | 64 | |||
843 | 53 | #pragma mark - UIStoryboard methods | 65 | #pragma mark - UIStoryboard methods |
844 | 54 | 66 | ||
845 | 55 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { | 67 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { |
846 | 56 | 68 | ||
847 | === modified file 'U1Music.xcodeproj/project.pbxproj' | |||
848 | --- U1Music.xcodeproj/project.pbxproj 2013-02-11 04:20:26 +0000 | |||
849 | +++ U1Music.xcodeproj/project.pbxproj 2013-02-11 04:20:26 +0000 | |||
850 | @@ -10,6 +10,7 @@ | |||
851 | 10 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; | 10 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; |
852 | 11 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; | 11 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; |
853 | 12 | 2892E4100DC94CBA00A64D0F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2892E40F0DC94CBA00A64D0F /* CoreGraphics.framework */; }; | 12 | 2892E4100DC94CBA00A64D0F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2892E40F0DC94CBA00A64D0F /* CoreGraphics.framework */; }; |
854 | 13 | 5207A4C216C89B140006A4E6 /* libFlurry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5207A4C116C89B140006A4E6 /* libFlurry.a */; }; | ||
855 | 13 | 520BBF2416B51F2A00307F32 /* UODownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 520BBF2316B51F2A00307F32 /* UODownloader.m */; }; | 14 | 520BBF2416B51F2A00307F32 /* UODownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 520BBF2316B51F2A00307F32 /* UODownloader.m */; }; |
856 | 14 | 52169C9815D95DD100ED366D /* cancel-grey.png in Resources */ = {isa = PBXBuildFile; fileRef = 52169C9415D95DD100ED366D /* cancel-grey.png */; }; | 15 | 52169C9815D95DD100ED366D /* cancel-grey.png in Resources */ = {isa = PBXBuildFile; fileRef = 52169C9415D95DD100ED366D /* cancel-grey.png */; }; |
857 | 15 | 52169C9915D95DD100ED366D /* cancel-grey@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52169C9515D95DD100ED366D /* cancel-grey@2x.png */; }; | 16 | 52169C9915D95DD100ED366D /* cancel-grey@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 52169C9515D95DD100ED366D /* cancel-grey@2x.png */; }; |
858 | @@ -32,9 +33,9 @@ | |||
859 | 32 | 5257415416C37E1A00530CCC /* SSPullToRefreshDefaultContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257414F16C37E1A00530CCC /* SSPullToRefreshDefaultContentView.m */; }; | 33 | 5257415416C37E1A00530CCC /* SSPullToRefreshDefaultContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257414F16C37E1A00530CCC /* SSPullToRefreshDefaultContentView.m */; }; |
860 | 33 | 5257415516C37E1A00530CCC /* SSPullToRefreshSimpleContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257415116C37E1A00530CCC /* SSPullToRefreshSimpleContentView.m */; }; | 34 | 5257415516C37E1A00530CCC /* SSPullToRefreshSimpleContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257415116C37E1A00530CCC /* SSPullToRefreshSimpleContentView.m */; }; |
861 | 34 | 5257415616C37E1A00530CCC /* SSPullToRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257415316C37E1A00530CCC /* SSPullToRefreshView.m */; }; | 35 | 5257415616C37E1A00530CCC /* SSPullToRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257415316C37E1A00530CCC /* SSPullToRefreshView.m */; }; |
862 | 36 | 5257416D16C5653100530CCC /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5257416C16C5653100530CCC /* Crashlytics.framework */; }; | ||
863 | 35 | 5257417716C5CC5D00530CCC /* NSString+UbuntuOne.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257417616C5CC5D00530CCC /* NSString+UbuntuOne.m */; }; | 37 | 5257417716C5CC5D00530CCC /* NSString+UbuntuOne.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257417616C5CC5D00530CCC /* NSString+UbuntuOne.m */; }; |
864 | 36 | 5257417A16C5CDA900530CCC /* UIImageView+UbuntuOne.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257417916C5CDA900530CCC /* UIImageView+UbuntuOne.m */; }; | 38 | 5257417A16C5CDA900530CCC /* UIImageView+UbuntuOne.m in Sources */ = {isa = PBXBuildFile; fileRef = 5257417916C5CDA900530CCC /* UIImageView+UbuntuOne.m */; }; |
865 | 37 | 5257416D16C5653100530CCC /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5257416C16C5653100530CCC /* Crashlytics.framework */; }; | ||
866 | 38 | 5268509716AE5267001F65A6 /* libRestKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5268509016AE516C001F65A6 /* libRestKit.a */; }; | 39 | 5268509716AE5267001F65A6 /* libRestKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5268509016AE516C001F65A6 /* libRestKit.a */; }; |
867 | 39 | 526850A816AEE4E1001F65A6 /* Storyboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 526850A516AEE4E1001F65A6 /* Storyboard_iPhone.storyboard */; }; | 40 | 526850A816AEE4E1001F65A6 /* Storyboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 526850A516AEE4E1001F65A6 /* Storyboard_iPhone.storyboard */; }; |
868 | 40 | 526850A916AEE4E1001F65A6 /* UOAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 526850A716AEE4E1001F65A6 /* UOAppDelegate.m */; }; | 41 | 526850A916AEE4E1001F65A6 /* UOAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 526850A716AEE4E1001F65A6 /* UOAppDelegate.m */; }; |
869 | @@ -256,6 +257,8 @@ | |||
870 | 256 | 1D6058910D05DD3D006BFB54 /* U1 Music.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "U1 Music.app"; sourceTree = BUILT_PRODUCTS_DIR; }; | 257 | 1D6058910D05DD3D006BFB54 /* U1 Music.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "U1 Music.app"; sourceTree = BUILT_PRODUCTS_DIR; }; |
871 | 257 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; | 258 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; |
872 | 258 | 2892E40F0DC94CBA00A64D0F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; | 259 | 2892E40F0DC94CBA00A64D0F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; |
873 | 260 | 5207A4C016C89B140006A4E6 /* Flurry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Flurry.h; sourceTree = "<group>"; }; | ||
874 | 261 | 5207A4C116C89B140006A4E6 /* libFlurry.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libFlurry.a; sourceTree = "<group>"; }; | ||
875 | 259 | 520BBF2216B51F2A00307F32 /* UODownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UODownloader.h; sourceTree = "<group>"; }; | 262 | 520BBF2216B51F2A00307F32 /* UODownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UODownloader.h; sourceTree = "<group>"; }; |
876 | 260 | 520BBF2316B51F2A00307F32 /* UODownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UODownloader.m; sourceTree = "<group>"; }; | 263 | 520BBF2316B51F2A00307F32 /* UODownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UODownloader.m; sourceTree = "<group>"; }; |
877 | 261 | 52169C9415D95DD100ED366D /* cancel-grey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cancel-grey.png"; sourceTree = "<group>"; }; | 264 | 52169C9415D95DD100ED366D /* cancel-grey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cancel-grey.png"; sourceTree = "<group>"; }; |
878 | @@ -287,11 +290,11 @@ | |||
879 | 287 | 5257415116C37E1A00530CCC /* SSPullToRefreshSimpleContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSPullToRefreshSimpleContentView.m; sourceTree = "<group>"; }; | 290 | 5257415116C37E1A00530CCC /* SSPullToRefreshSimpleContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSPullToRefreshSimpleContentView.m; sourceTree = "<group>"; }; |
880 | 288 | 5257415216C37E1A00530CCC /* SSPullToRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSPullToRefreshView.h; sourceTree = "<group>"; }; | 291 | 5257415216C37E1A00530CCC /* SSPullToRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSPullToRefreshView.h; sourceTree = "<group>"; }; |
881 | 289 | 5257415316C37E1A00530CCC /* SSPullToRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSPullToRefreshView.m; sourceTree = "<group>"; }; | 292 | 5257415316C37E1A00530CCC /* SSPullToRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSPullToRefreshView.m; sourceTree = "<group>"; }; |
882 | 293 | 5257416C16C5653100530CCC /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = "<group>"; }; | ||
883 | 290 | 5257417516C5CC5D00530CCC /* NSString+UbuntuOne.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+UbuntuOne.h"; path = "Categories/NSString+UbuntuOne.h"; sourceTree = "<group>"; }; | 294 | 5257417516C5CC5D00530CCC /* NSString+UbuntuOne.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+UbuntuOne.h"; path = "Categories/NSString+UbuntuOne.h"; sourceTree = "<group>"; }; |
884 | 291 | 5257417616C5CC5D00530CCC /* NSString+UbuntuOne.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+UbuntuOne.m"; path = "Categories/NSString+UbuntuOne.m"; sourceTree = "<group>"; }; | 295 | 5257417616C5CC5D00530CCC /* NSString+UbuntuOne.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+UbuntuOne.m"; path = "Categories/NSString+UbuntuOne.m"; sourceTree = "<group>"; }; |
885 | 292 | 5257417816C5CDA900530CCC /* UIImageView+UbuntuOne.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIImageView+UbuntuOne.h"; path = "Categories/UIImageView+UbuntuOne.h"; sourceTree = "<group>"; }; | 296 | 5257417816C5CDA900530CCC /* UIImageView+UbuntuOne.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIImageView+UbuntuOne.h"; path = "Categories/UIImageView+UbuntuOne.h"; sourceTree = "<group>"; }; |
886 | 293 | 5257417916C5CDA900530CCC /* UIImageView+UbuntuOne.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+UbuntuOne.m"; path = "Categories/UIImageView+UbuntuOne.m"; sourceTree = "<group>"; }; | 297 | 5257417916C5CDA900530CCC /* UIImageView+UbuntuOne.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+UbuntuOne.m"; path = "Categories/UIImageView+UbuntuOne.m"; sourceTree = "<group>"; }; |
887 | 294 | 5257416C16C5653100530CCC /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = "<group>"; }; | ||
888 | 295 | 5268508516AE516B001F65A6 /* RestKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RestKit.xcodeproj; path = ../RestKit/RestKit.xcodeproj; sourceTree = "<group>"; }; | 298 | 5268508516AE516B001F65A6 /* RestKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RestKit.xcodeproj; path = ../RestKit/RestKit.xcodeproj; sourceTree = "<group>"; }; |
889 | 296 | 526850A516AEE4E1001F65A6 /* Storyboard_iPhone.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Storyboard_iPhone.storyboard; sourceTree = "<group>"; }; | 299 | 526850A516AEE4E1001F65A6 /* Storyboard_iPhone.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Storyboard_iPhone.storyboard; sourceTree = "<group>"; }; |
890 | 297 | 526850A616AEE4E1001F65A6 /* UOAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOAppDelegate.h; sourceTree = "<group>"; }; | 300 | 526850A616AEE4E1001F65A6 /* UOAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UOAppDelegate.h; sourceTree = "<group>"; }; |
891 | @@ -640,6 +643,7 @@ | |||
892 | 640 | 5268509716AE5267001F65A6 /* libRestKit.a in Frameworks */, | 643 | 5268509716AE5267001F65A6 /* libRestKit.a in Frameworks */, |
893 | 641 | 52E7F4A316AF1522003A46DA /* UbuntuOneAuthKit.a in Frameworks */, | 644 | 52E7F4A316AF1522003A46DA /* UbuntuOneAuthKit.a in Frameworks */, |
894 | 642 | 5257416D16C5653100530CCC /* Crashlytics.framework in Frameworks */, | 645 | 5257416D16C5653100530CCC /* Crashlytics.framework in Frameworks */, |
895 | 646 | 5207A4C216C89B140006A4E6 /* libFlurry.a in Frameworks */, | ||
896 | 643 | ); | 647 | ); |
897 | 644 | runOnlyForDeploymentPostprocessing = 0; | 648 | runOnlyForDeploymentPostprocessing = 0; |
898 | 645 | }; | 649 | }; |
899 | @@ -672,7 +676,6 @@ | |||
900 | 672 | 29B97317FDCFA39411CA2CEA /* Resources */, | 676 | 29B97317FDCFA39411CA2CEA /* Resources */, |
901 | 673 | 964FA39013CA5BE60018A65B /* Dependencies */, | 677 | 964FA39013CA5BE60018A65B /* Dependencies */, |
902 | 674 | 29B97323FDCFA39411CA2CEA /* Frameworks */, | 678 | 29B97323FDCFA39411CA2CEA /* Frameworks */, |
903 | 675 | 5279764815F00B2600F8435F /* libz.dylib */, | ||
904 | 676 | 19C28FACFE9D520D11CA2CBB /* Products */, | 679 | 19C28FACFE9D520D11CA2CBB /* Products */, |
905 | 677 | ); | 680 | ); |
906 | 678 | name = CustomTemplate; | 681 | name = CustomTemplate; |
907 | @@ -690,6 +693,7 @@ | |||
908 | 690 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { | 693 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { |
909 | 691 | isa = PBXGroup; | 694 | isa = PBXGroup; |
910 | 692 | children = ( | 695 | children = ( |
911 | 696 | 5279764815F00B2600F8435F /* libz.dylib */, | ||
912 | 693 | 5257416C16C5653100530CCC /* Crashlytics.framework */, | 697 | 5257416C16C5653100530CCC /* Crashlytics.framework */, |
913 | 694 | 5268510716AEFD20001F65A6 /* MobileCoreServices.framework */, | 698 | 5268510716AEFD20001F65A6 /* MobileCoreServices.framework */, |
914 | 695 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, | 699 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, |
915 | @@ -707,6 +711,16 @@ | |||
916 | 707 | name = Frameworks; | 711 | name = Frameworks; |
917 | 708 | sourceTree = "<group>"; | 712 | sourceTree = "<group>"; |
918 | 709 | }; | 713 | }; |
919 | 714 | 5207A4BF16C89B140006A4E6 /* Flurry */ = { | ||
920 | 715 | isa = PBXGroup; | ||
921 | 716 | children = ( | ||
922 | 717 | 5207A4C016C89B140006A4E6 /* Flurry.h */, | ||
923 | 718 | 5207A4C116C89B140006A4E6 /* libFlurry.a */, | ||
924 | 719 | ); | ||
925 | 720 | name = Flurry; | ||
926 | 721 | path = Dependencies/Flurry; | ||
927 | 722 | sourceTree = "<group>"; | ||
928 | 723 | }; | ||
929 | 710 | 522B24E716B4BBC30084B023 /* Controls */ = { | 724 | 522B24E716B4BBC30084B023 /* Controls */ = { |
930 | 711 | isa = PBXGroup; | 725 | isa = PBXGroup; |
931 | 712 | children = ( | 726 | children = ( |
932 | @@ -1299,6 +1313,7 @@ | |||
933 | 1299 | 964FA39013CA5BE60018A65B /* Dependencies */ = { | 1313 | 964FA39013CA5BE60018A65B /* Dependencies */ = { |
934 | 1300 | isa = PBXGroup; | 1314 | isa = PBXGroup; |
935 | 1301 | children = ( | 1315 | children = ( |
936 | 1316 | 5207A4BF16C89B140006A4E6 /* Flurry */, | ||
937 | 1302 | 5257414C16C37E1A00530CCC /* SSPullToRefresh */, | 1317 | 5257414C16C37E1A00530CCC /* SSPullToRefresh */, |
938 | 1303 | 93BC520A124C187700B7587C /* SynthesizeSingleton.h */, | 1318 | 93BC520A124C187700B7587C /* SynthesizeSingleton.h */, |
939 | 1304 | 91328278144E07EA00395F40 /* TestFlight SDK */, | 1319 | 91328278144E07EA00395F40 /* TestFlight SDK */, |
940 | @@ -1714,6 +1729,7 @@ | |||
941 | 1714 | "$(inherited)", | 1729 | "$(inherited)", |
942 | 1715 | "\"$(SRCROOT)/TestFlight SDK\"", | 1730 | "\"$(SRCROOT)/TestFlight SDK\"", |
943 | 1716 | "$(BUILT_PRODUCTS_DIR)/**", | 1731 | "$(BUILT_PRODUCTS_DIR)/**", |
944 | 1732 | "\"$(SRCROOT)/Dependencies/Flurry\"", | ||
945 | 1717 | ); | 1733 | ); |
946 | 1718 | OTHER_LDFLAGS = "-ObjC"; | 1734 | OTHER_LDFLAGS = "-ObjC"; |
947 | 1719 | PRODUCT_NAME = "U1 Music"; | 1735 | PRODUCT_NAME = "U1 Music"; |
948 | @@ -1754,6 +1770,7 @@ | |||
949 | 1754 | "$(inherited)", | 1770 | "$(inherited)", |
950 | 1755 | "\"$(SRCROOT)/TestFlight SDK\"", | 1771 | "\"$(SRCROOT)/TestFlight SDK\"", |
951 | 1756 | "$(BUILT_PRODUCTS_DIR)/**", | 1772 | "$(BUILT_PRODUCTS_DIR)/**", |
952 | 1773 | "\"$(SRCROOT)/Dependencies/Flurry\"", | ||
953 | 1757 | ); | 1774 | ); |
954 | 1758 | OTHER_LDFLAGS = "-ObjC"; | 1775 | OTHER_LDFLAGS = "-ObjC"; |
955 | 1759 | PRODUCT_NAME = "U1 Music"; | 1776 | PRODUCT_NAME = "U1 Music"; |
956 | 1760 | 1777 | ||
957 | === modified file 'U1Music_Prefix.pch' | |||
958 | --- U1Music_Prefix.pch 2013-01-28 22:54:20 +0000 | |||
959 | +++ U1Music_Prefix.pch 2013-02-11 04:20:26 +0000 | |||
960 | @@ -21,10 +21,22 @@ | |||
961 | 21 | #import "NSManagedObjectContext+Additions.h" | 21 | #import "NSManagedObjectContext+Additions.h" |
962 | 22 | #import "NSString+Extras.h" | 22 | #import "NSString+Extras.h" |
963 | 23 | #import "TestFlight.h" | 23 | #import "TestFlight.h" |
964 | 24 | #import "Flurry.h" | ||
965 | 24 | #define RELEASE_SAFELY(__obj) [__obj release], __obj = nil; | 25 | #define RELEASE_SAFELY(__obj) [__obj release], __obj = nil; |
966 | 25 | 26 | ||
967 | 26 | #define UBUNTU_ONE_SERVICE_NAME @"com.ubuntu.one" | 27 | #define UBUNTU_ONE_SERVICE_NAME @"com.ubuntu.one" |
968 | 27 | #define UBUNTU_ONE_DUMMY_USER_NAME @"_UBUNTU_ONE_USER_NAME" | 28 | #define UBUNTU_ONE_DUMMY_USER_NAME @"_UBUNTU_ONE_USER_NAME" |
969 | 28 | 29 | ||
970 | 29 | #define AUTHORIZATION_HEADER_KEY @"Authorization" | 30 | #define AUTHORIZATION_HEADER_KEY @"Authorization" |
971 | 31 | |||
972 | 32 | #define EVENT_ALBUMS_VIEW @"AlbumsView" | ||
973 | 33 | #define EVENT_ARTISTS_VIEW @"ArtistsView" | ||
974 | 34 | #define EVENT_SONGS_VIEW @"SongsView" | ||
975 | 35 | #define EVENT_PLAYLISTS_VIEW @"PlaylistsView" | ||
976 | 36 | #define EVENT_SETTINGS_VIEW @"SettingsView" | ||
977 | 37 | #define EVENT_AUTHENTICATION_VIEW @"AuthenticationView" | ||
978 | 38 | #define EVENT_ALBUM_VIEW @"AlbumView" | ||
979 | 39 | #define EVENT_ARTIST_VIEW @"ArtistView" | ||
980 | 40 | #define EVENT_PLAYER_VIEW @"PlayerView" | ||
981 | 41 | #define EVENT_PLAYLIST_VIEW @"PlaylistView" | ||
982 | 30 | #endif | 42 | #endif |