├── README.md ├── FlurryUsageSample ├── en.lproj │ └── InfoPlist.strings ├── ViewController.h ├── FirstViewController.h ├── AppDelegate.h ├── main.m ├── FlurryUsageSample-Prefix.pch ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── LaunchImage.launchimage │ │ └── Contents.json ├── FirstViewController.m ├── ViewController.m ├── FlurryUsageSample-Info.plist ├── AppDelegate.m └── Base.lproj │ └── Main.storyboard ├── FlurryUsageSampleTests ├── en.lproj │ └── InfoPlist.strings ├── FlurryUsageSampleTests-Info.plist └── FlurryUsageSampleTests.m ├── Flurry ├── libFlurry_4.3.0.a └── Flurry.h ├── .gitignore └── FlurryUsageSample.xcodeproj ├── project.xcworkspace └── contents.xcworkspacedata ├── xcuserdata └── tangqiao.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── xcshareddata └── xcschemes │ └── FlurryUsageSample.xcscheme └── project.pbxproj /README.md: -------------------------------------------------------------------------------- 1 | This is a demo project for using flurry. 2 | -------------------------------------------------------------------------------- /FlurryUsageSample/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /FlurryUsageSampleTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Flurry/libFlurry_4.3.0.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tangqiaoboy/FlurryUsageSample/HEAD/Flurry/libFlurry_4.3.0.a -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | FlurryUsageSample.xcodeproj/xcuserdata/* 2 | .DS_Store 3 | FlurryUsageSample.xcodeproj/project.xcworkspace/* 4 | -------------------------------------------------------------------------------- /FlurryUsageSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FlurryUsageSample/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // FlurryUsageSample 4 | // 5 | // Created by TangQiao on 13-10-24. 6 | // Copyright (c) 2013年 TangQiao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FlurryUsageSample/FirstViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FirstViewController.h 3 | // FlurryUsageSample 4 | // 5 | // Created by TangQiao on 13-10-25. 6 | // Copyright (c) 2013年 TangQiao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FirstViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FlurryUsageSample/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FlurryUsageSample 4 | // 5 | // Created by TangQiao on 13-10-24. 6 | // Copyright (c) 2013年 TangQiao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FlurryUsageSample/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FlurryUsageSample 4 | // 5 | // Created by TangQiao on 13-10-24. 6 | // Copyright (c) 2013年 TangQiao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /FlurryUsageSample/FlurryUsageSample-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #import "Flurry.h" 17 | #endif 18 | -------------------------------------------------------------------------------- /FlurryUsageSample/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /FlurryUsageSample/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /FlurryUsageSample/FirstViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FirstViewController.m 3 | // FlurryUsageSample 4 | // 5 | // Created by TangQiao on 13-10-25. 6 | // Copyright (c) 2013年 TangQiao. All rights reserved. 7 | // 8 | 9 | #import "FirstViewController.h" 10 | 11 | #define FLURRY_EVENT_KEY @"First View Controller" 12 | 13 | @implementation FirstViewController 14 | 15 | - (void)viewWillAppear:(BOOL)animated { 16 | [super viewWillAppear:animated]; 17 | // 开始统计时间 18 | [Flurry logEvent:FLURRY_EVENT_KEY timed:YES]; 19 | } 20 | 21 | - (void)viewWillDisappear:(BOOL)animated { 22 | [super viewWillDisappear:animated]; 23 | // 结束统计时间 24 | [Flurry endTimedEvent:FLURRY_EVENT_KEY withParameters:nil]; 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /FlurryUsageSample.xcodeproj/xcuserdata/tangqiao.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FlurryUsageSample.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 45803E2A18192D48000E5CAA 16 | 17 | primary 18 | 19 | 20 | 45803E4B18192D48000E5CAA 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /FlurryUsageSampleTests/FlurryUsageSampleTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.devtang.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /FlurryUsageSample/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // FlurryUsageSample 4 | // 5 | // Created by TangQiao on 13-10-24. 6 | // Copyright (c) 2013年 TangQiao. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | 11 | @implementation ViewController 12 | 13 | - (void)viewDidLoad 14 | { 15 | [super viewDidLoad]; 16 | } 17 | 18 | - (void)didReceiveMemoryWarning 19 | { 20 | [super didReceiveMemoryWarning]; 21 | } 22 | 23 | - (IBAction)firstButtonPressed:(id)sender { 24 | [Flurry logEvent:@"First Button Pressed"]; 25 | [Flurry logEvent:@"Button Pressed" 26 | withParameters:@{@"target": @"first"}]; 27 | } 28 | 29 | - (IBAction)secondButtonPressed:(id)sender { 30 | [Flurry logEvent:@"Second Button Pressed"]; 31 | [Flurry logEvent:@"Button Pressed" 32 | withParameters:@{@"target": @"second"}]; 33 | } 34 | @end 35 | -------------------------------------------------------------------------------- /FlurryUsageSampleTests/FlurryUsageSampleTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlurryUsageSampleTests.m 3 | // FlurryUsageSampleTests 4 | // 5 | // Created by TangQiao on 13-10-24. 6 | // Copyright (c) 2013年 TangQiao. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FlurryUsageSampleTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation FlurryUsageSampleTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTAssertEqual(@"1", @"1", @"test pass"); 32 | } 33 | 34 | - (void)testExample2 35 | { 36 | XCTAssertEqual(@"1", @"1", @"test failure"); 37 | } 38 | 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /FlurryUsageSample/FlurryUsageSample-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.devtang.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /FlurryUsageSample/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // FlurryUsageSample 4 | // 5 | // Created by TangQiao on 13-10-24. 6 | // Copyright (c) 2013年 TangQiao. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @implementation AppDelegate 12 | 13 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 14 | { 15 | // Override point for customization after application launch. 16 | [Flurry startSession:@"X28BBKTNZ9H3VYTBDBG3"]; 17 | return YES; 18 | } 19 | 20 | - (void)applicationWillResignActive:(UIApplication *)application 21 | { 22 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 23 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 24 | } 25 | 26 | - (void)applicationDidEnterBackground:(UIApplication *)application 27 | { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | - (void)applicationWillEnterForeground:(UIApplication *)application 33 | { 34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application 38 | { 39 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 40 | } 41 | 42 | - (void)applicationWillTerminate:(UIApplication *)application 43 | { 44 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /FlurryUsageSample.xcodeproj/xcshareddata/xcschemes/FlurryUsageSample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 61 | 62 | 68 | 69 | 70 | 71 | 72 | 73 | 79 | 80 | 86 | 87 | 88 | 89 | 91 | 92 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /FlurryUsageSample/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 30 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /FlurryUsageSample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4500835E181A0FF1004CEA60 /* FirstViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4500835D181A0FF1004CEA60 /* FirstViewController.m */; }; 11 | 45803E2F18192D48000E5CAA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E2E18192D48000E5CAA /* Foundation.framework */; }; 12 | 45803E3118192D48000E5CAA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E3018192D48000E5CAA /* CoreGraphics.framework */; }; 13 | 45803E3318192D48000E5CAA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E3218192D48000E5CAA /* UIKit.framework */; }; 14 | 45803E3918192D48000E5CAA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 45803E3718192D48000E5CAA /* InfoPlist.strings */; }; 15 | 45803E3B18192D48000E5CAA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 45803E3A18192D48000E5CAA /* main.m */; }; 16 | 45803E3F18192D48000E5CAA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 45803E3E18192D48000E5CAA /* AppDelegate.m */; }; 17 | 45803E4218192D48000E5CAA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 45803E4018192D48000E5CAA /* Main.storyboard */; }; 18 | 45803E4518192D48000E5CAA /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45803E4418192D48000E5CAA /* ViewController.m */; }; 19 | 45803E4718192D48000E5CAA /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 45803E4618192D48000E5CAA /* Images.xcassets */; }; 20 | 45803E4E18192D48000E5CAA /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E4D18192D48000E5CAA /* XCTest.framework */; }; 21 | 45803E4F18192D48000E5CAA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E2E18192D48000E5CAA /* Foundation.framework */; }; 22 | 45803E5018192D48000E5CAA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E3218192D48000E5CAA /* UIKit.framework */; }; 23 | 45803E5818192D48000E5CAA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 45803E5618192D48000E5CAA /* InfoPlist.strings */; }; 24 | 45803E5A18192D48000E5CAA /* FlurryUsageSampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 45803E5918192D48000E5CAA /* FlurryUsageSampleTests.m */; }; 25 | 45803E6618192DD2000E5CAA /* libFlurry_4.3.0.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E6518192DD2000E5CAA /* libFlurry_4.3.0.a */; }; 26 | 45803E6E181934EA000E5CAA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E6D181934EA000E5CAA /* SystemConfiguration.framework */; }; 27 | 45803E6F1819359D000E5CAA /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45803E6B181934CF000E5CAA /* Security.framework */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXContainerItemProxy section */ 31 | 45803E5118192D48000E5CAA /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = 45803E2318192D48000E5CAA /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = 45803E2A18192D48000E5CAA; 36 | remoteInfo = FlurryUsageSample; 37 | }; 38 | /* End PBXContainerItemProxy section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 4500835C181A0FF1004CEA60 /* FirstViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FirstViewController.h; sourceTree = ""; }; 42 | 4500835D181A0FF1004CEA60 /* FirstViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FirstViewController.m; sourceTree = ""; }; 43 | 45803E2B18192D48000E5CAA /* FlurryUsageSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FlurryUsageSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 45803E2E18192D48000E5CAA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 45 | 45803E3018192D48000E5CAA /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 46 | 45803E3218192D48000E5CAA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 47 | 45803E3618192D48000E5CAA /* FlurryUsageSample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "FlurryUsageSample-Info.plist"; sourceTree = ""; }; 48 | 45803E3818192D48000E5CAA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 49 | 45803E3A18192D48000E5CAA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 50 | 45803E3C18192D48000E5CAA /* FlurryUsageSample-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FlurryUsageSample-Prefix.pch"; sourceTree = ""; }; 51 | 45803E3D18192D48000E5CAA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 52 | 45803E3E18192D48000E5CAA /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 53 | 45803E4118192D48000E5CAA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 54 | 45803E4318192D48000E5CAA /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 55 | 45803E4418192D48000E5CAA /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 56 | 45803E4618192D48000E5CAA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 57 | 45803E4C18192D48000E5CAA /* FlurryUsageSampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlurryUsageSampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 58 | 45803E4D18192D48000E5CAA /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 59 | 45803E5518192D48000E5CAA /* FlurryUsageSampleTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "FlurryUsageSampleTests-Info.plist"; sourceTree = ""; }; 60 | 45803E5718192D48000E5CAA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 61 | 45803E5918192D48000E5CAA /* FlurryUsageSampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlurryUsageSampleTests.m; sourceTree = ""; }; 62 | 45803E6418192DD2000E5CAA /* Flurry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Flurry.h; sourceTree = ""; }; 63 | 45803E6518192DD2000E5CAA /* libFlurry_4.3.0.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libFlurry_4.3.0.a; sourceTree = ""; }; 64 | 45803E6918193445000E5CAA /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; 65 | 45803E6B181934CF000E5CAA /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 66 | 45803E6D181934EA000E5CAA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; 67 | /* End PBXFileReference section */ 68 | 69 | /* Begin PBXFrameworksBuildPhase section */ 70 | 45803E2818192D48000E5CAA /* Frameworks */ = { 71 | isa = PBXFrameworksBuildPhase; 72 | buildActionMask = 2147483647; 73 | files = ( 74 | 45803E6F1819359D000E5CAA /* Security.framework in Frameworks */, 75 | 45803E6E181934EA000E5CAA /* SystemConfiguration.framework in Frameworks */, 76 | 45803E3118192D48000E5CAA /* CoreGraphics.framework in Frameworks */, 77 | 45803E6618192DD2000E5CAA /* libFlurry_4.3.0.a in Frameworks */, 78 | 45803E3318192D48000E5CAA /* UIKit.framework in Frameworks */, 79 | 45803E2F18192D48000E5CAA /* Foundation.framework in Frameworks */, 80 | ); 81 | runOnlyForDeploymentPostprocessing = 0; 82 | }; 83 | 45803E4918192D48000E5CAA /* Frameworks */ = { 84 | isa = PBXFrameworksBuildPhase; 85 | buildActionMask = 2147483647; 86 | files = ( 87 | 45803E4E18192D48000E5CAA /* XCTest.framework in Frameworks */, 88 | 45803E5018192D48000E5CAA /* UIKit.framework in Frameworks */, 89 | 45803E4F18192D48000E5CAA /* Foundation.framework in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | /* End PBXFrameworksBuildPhase section */ 94 | 95 | /* Begin PBXGroup section */ 96 | 45803E2218192D48000E5CAA = { 97 | isa = PBXGroup; 98 | children = ( 99 | 45803E3418192D48000E5CAA /* FlurryUsageSample */, 100 | 45803E6318192DD2000E5CAA /* Flurry */, 101 | 45803E5318192D48000E5CAA /* FlurryUsageSampleTests */, 102 | 45803E2D18192D48000E5CAA /* Frameworks */, 103 | 45803E2C18192D48000E5CAA /* Products */, 104 | ); 105 | sourceTree = ""; 106 | }; 107 | 45803E2C18192D48000E5CAA /* Products */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 45803E2B18192D48000E5CAA /* FlurryUsageSample.app */, 111 | 45803E4C18192D48000E5CAA /* FlurryUsageSampleTests.xctest */, 112 | ); 113 | name = Products; 114 | sourceTree = ""; 115 | }; 116 | 45803E2D18192D48000E5CAA /* Frameworks */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | 45803E6D181934EA000E5CAA /* SystemConfiguration.framework */, 120 | 45803E6B181934CF000E5CAA /* Security.framework */, 121 | 45803E6918193445000E5CAA /* CFNetwork.framework */, 122 | 45803E2E18192D48000E5CAA /* Foundation.framework */, 123 | 45803E3018192D48000E5CAA /* CoreGraphics.framework */, 124 | 45803E3218192D48000E5CAA /* UIKit.framework */, 125 | 45803E4D18192D48000E5CAA /* XCTest.framework */, 126 | ); 127 | name = Frameworks; 128 | sourceTree = ""; 129 | }; 130 | 45803E3418192D48000E5CAA /* FlurryUsageSample */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 45803E3D18192D48000E5CAA /* AppDelegate.h */, 134 | 45803E3E18192D48000E5CAA /* AppDelegate.m */, 135 | 45803E4018192D48000E5CAA /* Main.storyboard */, 136 | 45803E4318192D48000E5CAA /* ViewController.h */, 137 | 45803E4418192D48000E5CAA /* ViewController.m */, 138 | 45803E4618192D48000E5CAA /* Images.xcassets */, 139 | 45803E3518192D48000E5CAA /* Supporting Files */, 140 | 4500835C181A0FF1004CEA60 /* FirstViewController.h */, 141 | 4500835D181A0FF1004CEA60 /* FirstViewController.m */, 142 | ); 143 | path = FlurryUsageSample; 144 | sourceTree = ""; 145 | }; 146 | 45803E3518192D48000E5CAA /* Supporting Files */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 45803E3618192D48000E5CAA /* FlurryUsageSample-Info.plist */, 150 | 45803E3718192D48000E5CAA /* InfoPlist.strings */, 151 | 45803E3A18192D48000E5CAA /* main.m */, 152 | 45803E3C18192D48000E5CAA /* FlurryUsageSample-Prefix.pch */, 153 | ); 154 | name = "Supporting Files"; 155 | sourceTree = ""; 156 | }; 157 | 45803E5318192D48000E5CAA /* FlurryUsageSampleTests */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 45803E5918192D48000E5CAA /* FlurryUsageSampleTests.m */, 161 | 45803E5418192D48000E5CAA /* Supporting Files */, 162 | ); 163 | path = FlurryUsageSampleTests; 164 | sourceTree = ""; 165 | }; 166 | 45803E5418192D48000E5CAA /* Supporting Files */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | 45803E5518192D48000E5CAA /* FlurryUsageSampleTests-Info.plist */, 170 | 45803E5618192D48000E5CAA /* InfoPlist.strings */, 171 | ); 172 | name = "Supporting Files"; 173 | sourceTree = ""; 174 | }; 175 | 45803E6318192DD2000E5CAA /* Flurry */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | 45803E6418192DD2000E5CAA /* Flurry.h */, 179 | 45803E6518192DD2000E5CAA /* libFlurry_4.3.0.a */, 180 | ); 181 | path = Flurry; 182 | sourceTree = ""; 183 | }; 184 | /* End PBXGroup section */ 185 | 186 | /* Begin PBXNativeTarget section */ 187 | 45803E2A18192D48000E5CAA /* FlurryUsageSample */ = { 188 | isa = PBXNativeTarget; 189 | buildConfigurationList = 45803E5D18192D48000E5CAA /* Build configuration list for PBXNativeTarget "FlurryUsageSample" */; 190 | buildPhases = ( 191 | 45803E2718192D48000E5CAA /* Sources */, 192 | 45803E2818192D48000E5CAA /* Frameworks */, 193 | 45803E2918192D48000E5CAA /* Resources */, 194 | ); 195 | buildRules = ( 196 | ); 197 | dependencies = ( 198 | ); 199 | name = FlurryUsageSample; 200 | productName = FlurryUsageSample; 201 | productReference = 45803E2B18192D48000E5CAA /* FlurryUsageSample.app */; 202 | productType = "com.apple.product-type.application"; 203 | }; 204 | 45803E4B18192D48000E5CAA /* FlurryUsageSampleTests */ = { 205 | isa = PBXNativeTarget; 206 | buildConfigurationList = 45803E6018192D48000E5CAA /* Build configuration list for PBXNativeTarget "FlurryUsageSampleTests" */; 207 | buildPhases = ( 208 | 45803E4818192D48000E5CAA /* Sources */, 209 | 45803E4918192D48000E5CAA /* Frameworks */, 210 | 45803E4A18192D48000E5CAA /* Resources */, 211 | ); 212 | buildRules = ( 213 | ); 214 | dependencies = ( 215 | 45803E5218192D48000E5CAA /* PBXTargetDependency */, 216 | ); 217 | name = FlurryUsageSampleTests; 218 | productName = FlurryUsageSampleTests; 219 | productReference = 45803E4C18192D48000E5CAA /* FlurryUsageSampleTests.xctest */; 220 | productType = "com.apple.product-type.bundle.unit-test"; 221 | }; 222 | /* End PBXNativeTarget section */ 223 | 224 | /* Begin PBXProject section */ 225 | 45803E2318192D48000E5CAA /* Project object */ = { 226 | isa = PBXProject; 227 | attributes = { 228 | LastUpgradeCheck = 0500; 229 | ORGANIZATIONNAME = TangQiao; 230 | TargetAttributes = { 231 | 45803E4B18192D48000E5CAA = { 232 | TestTargetID = 45803E2A18192D48000E5CAA; 233 | }; 234 | }; 235 | }; 236 | buildConfigurationList = 45803E2618192D48000E5CAA /* Build configuration list for PBXProject "FlurryUsageSample" */; 237 | compatibilityVersion = "Xcode 3.2"; 238 | developmentRegion = English; 239 | hasScannedForEncodings = 0; 240 | knownRegions = ( 241 | en, 242 | Base, 243 | ); 244 | mainGroup = 45803E2218192D48000E5CAA; 245 | productRefGroup = 45803E2C18192D48000E5CAA /* Products */; 246 | projectDirPath = ""; 247 | projectRoot = ""; 248 | targets = ( 249 | 45803E2A18192D48000E5CAA /* FlurryUsageSample */, 250 | 45803E4B18192D48000E5CAA /* FlurryUsageSampleTests */, 251 | ); 252 | }; 253 | /* End PBXProject section */ 254 | 255 | /* Begin PBXResourcesBuildPhase section */ 256 | 45803E2918192D48000E5CAA /* Resources */ = { 257 | isa = PBXResourcesBuildPhase; 258 | buildActionMask = 2147483647; 259 | files = ( 260 | 45803E4718192D48000E5CAA /* Images.xcassets in Resources */, 261 | 45803E3918192D48000E5CAA /* InfoPlist.strings in Resources */, 262 | 45803E4218192D48000E5CAA /* Main.storyboard in Resources */, 263 | ); 264 | runOnlyForDeploymentPostprocessing = 0; 265 | }; 266 | 45803E4A18192D48000E5CAA /* Resources */ = { 267 | isa = PBXResourcesBuildPhase; 268 | buildActionMask = 2147483647; 269 | files = ( 270 | 45803E5818192D48000E5CAA /* InfoPlist.strings in Resources */, 271 | ); 272 | runOnlyForDeploymentPostprocessing = 0; 273 | }; 274 | /* End PBXResourcesBuildPhase section */ 275 | 276 | /* Begin PBXSourcesBuildPhase section */ 277 | 45803E2718192D48000E5CAA /* Sources */ = { 278 | isa = PBXSourcesBuildPhase; 279 | buildActionMask = 2147483647; 280 | files = ( 281 | 45803E4518192D48000E5CAA /* ViewController.m in Sources */, 282 | 45803E3F18192D48000E5CAA /* AppDelegate.m in Sources */, 283 | 45803E3B18192D48000E5CAA /* main.m in Sources */, 284 | 4500835E181A0FF1004CEA60 /* FirstViewController.m in Sources */, 285 | ); 286 | runOnlyForDeploymentPostprocessing = 0; 287 | }; 288 | 45803E4818192D48000E5CAA /* Sources */ = { 289 | isa = PBXSourcesBuildPhase; 290 | buildActionMask = 2147483647; 291 | files = ( 292 | 45803E5A18192D48000E5CAA /* FlurryUsageSampleTests.m in Sources */, 293 | ); 294 | runOnlyForDeploymentPostprocessing = 0; 295 | }; 296 | /* End PBXSourcesBuildPhase section */ 297 | 298 | /* Begin PBXTargetDependency section */ 299 | 45803E5218192D48000E5CAA /* PBXTargetDependency */ = { 300 | isa = PBXTargetDependency; 301 | target = 45803E2A18192D48000E5CAA /* FlurryUsageSample */; 302 | targetProxy = 45803E5118192D48000E5CAA /* PBXContainerItemProxy */; 303 | }; 304 | /* End PBXTargetDependency section */ 305 | 306 | /* Begin PBXVariantGroup section */ 307 | 45803E3718192D48000E5CAA /* InfoPlist.strings */ = { 308 | isa = PBXVariantGroup; 309 | children = ( 310 | 45803E3818192D48000E5CAA /* en */, 311 | ); 312 | name = InfoPlist.strings; 313 | sourceTree = ""; 314 | }; 315 | 45803E4018192D48000E5CAA /* Main.storyboard */ = { 316 | isa = PBXVariantGroup; 317 | children = ( 318 | 45803E4118192D48000E5CAA /* Base */, 319 | ); 320 | name = Main.storyboard; 321 | sourceTree = ""; 322 | }; 323 | 45803E5618192D48000E5CAA /* InfoPlist.strings */ = { 324 | isa = PBXVariantGroup; 325 | children = ( 326 | 45803E5718192D48000E5CAA /* en */, 327 | ); 328 | name = InfoPlist.strings; 329 | sourceTree = ""; 330 | }; 331 | /* End PBXVariantGroup section */ 332 | 333 | /* Begin XCBuildConfiguration section */ 334 | 45803E5B18192D48000E5CAA /* Debug */ = { 335 | isa = XCBuildConfiguration; 336 | buildSettings = { 337 | ALWAYS_SEARCH_USER_PATHS = NO; 338 | ARCHS = "$(ARCHS_STANDARD)"; 339 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 340 | CLANG_CXX_LIBRARY = "libc++"; 341 | CLANG_ENABLE_MODULES = YES; 342 | CLANG_ENABLE_OBJC_ARC = YES; 343 | CLANG_WARN_BOOL_CONVERSION = YES; 344 | CLANG_WARN_CONSTANT_CONVERSION = YES; 345 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 346 | CLANG_WARN_EMPTY_BODY = YES; 347 | CLANG_WARN_ENUM_CONVERSION = YES; 348 | CLANG_WARN_INT_CONVERSION = YES; 349 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 350 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 351 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 352 | COPY_PHASE_STRIP = NO; 353 | GCC_C_LANGUAGE_STANDARD = gnu99; 354 | GCC_DYNAMIC_NO_PIC = NO; 355 | GCC_OPTIMIZATION_LEVEL = 0; 356 | GCC_PREPROCESSOR_DEFINITIONS = ( 357 | "DEBUG=1", 358 | "$(inherited)", 359 | ); 360 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 361 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 362 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 363 | GCC_WARN_UNDECLARED_SELECTOR = YES; 364 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 365 | GCC_WARN_UNUSED_FUNCTION = YES; 366 | GCC_WARN_UNUSED_VARIABLE = YES; 367 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 368 | ONLY_ACTIVE_ARCH = YES; 369 | SDKROOT = iphoneos; 370 | }; 371 | name = Debug; 372 | }; 373 | 45803E5C18192D48000E5CAA /* Release */ = { 374 | isa = XCBuildConfiguration; 375 | buildSettings = { 376 | ALWAYS_SEARCH_USER_PATHS = NO; 377 | ARCHS = "$(ARCHS_STANDARD)"; 378 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 379 | CLANG_CXX_LIBRARY = "libc++"; 380 | CLANG_ENABLE_MODULES = YES; 381 | CLANG_ENABLE_OBJC_ARC = YES; 382 | CLANG_WARN_BOOL_CONVERSION = YES; 383 | CLANG_WARN_CONSTANT_CONVERSION = YES; 384 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 385 | CLANG_WARN_EMPTY_BODY = YES; 386 | CLANG_WARN_ENUM_CONVERSION = YES; 387 | CLANG_WARN_INT_CONVERSION = YES; 388 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 389 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 390 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 391 | COPY_PHASE_STRIP = YES; 392 | ENABLE_NS_ASSERTIONS = NO; 393 | GCC_C_LANGUAGE_STANDARD = gnu99; 394 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 395 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 396 | GCC_WARN_UNDECLARED_SELECTOR = YES; 397 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 398 | GCC_WARN_UNUSED_FUNCTION = YES; 399 | GCC_WARN_UNUSED_VARIABLE = YES; 400 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 401 | SDKROOT = iphoneos; 402 | VALIDATE_PRODUCT = YES; 403 | }; 404 | name = Release; 405 | }; 406 | 45803E5E18192D48000E5CAA /* Debug */ = { 407 | isa = XCBuildConfiguration; 408 | buildSettings = { 409 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 410 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 411 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 412 | GCC_PREFIX_HEADER = "FlurryUsageSample/FlurryUsageSample-Prefix.pch"; 413 | INFOPLIST_FILE = "FlurryUsageSample/FlurryUsageSample-Info.plist"; 414 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 415 | LIBRARY_SEARCH_PATHS = ( 416 | "$(inherited)", 417 | "$(SRCROOT)/Flurry", 418 | ); 419 | PRODUCT_NAME = "$(TARGET_NAME)"; 420 | WRAPPER_EXTENSION = app; 421 | }; 422 | name = Debug; 423 | }; 424 | 45803E5F18192D48000E5CAA /* Release */ = { 425 | isa = XCBuildConfiguration; 426 | buildSettings = { 427 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 428 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 429 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 430 | GCC_PREFIX_HEADER = "FlurryUsageSample/FlurryUsageSample-Prefix.pch"; 431 | INFOPLIST_FILE = "FlurryUsageSample/FlurryUsageSample-Info.plist"; 432 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 433 | LIBRARY_SEARCH_PATHS = ( 434 | "$(inherited)", 435 | "$(SRCROOT)/Flurry", 436 | ); 437 | PRODUCT_NAME = "$(TARGET_NAME)"; 438 | WRAPPER_EXTENSION = app; 439 | }; 440 | name = Release; 441 | }; 442 | 45803E6118192D48000E5CAA /* Debug */ = { 443 | isa = XCBuildConfiguration; 444 | buildSettings = { 445 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 446 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/FlurryUsageSample.app/FlurryUsageSample"; 447 | FRAMEWORK_SEARCH_PATHS = ( 448 | "$(SDKROOT)/Developer/Library/Frameworks", 449 | "$(inherited)", 450 | "$(DEVELOPER_FRAMEWORKS_DIR)", 451 | ); 452 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 453 | GCC_PREFIX_HEADER = "FlurryUsageSample/FlurryUsageSample-Prefix.pch"; 454 | GCC_PREPROCESSOR_DEFINITIONS = ( 455 | "DEBUG=1", 456 | "$(inherited)", 457 | ); 458 | INFOPLIST_FILE = "FlurryUsageSampleTests/FlurryUsageSampleTests-Info.plist"; 459 | PRODUCT_NAME = "$(TARGET_NAME)"; 460 | TEST_HOST = "$(BUNDLE_LOADER)"; 461 | WRAPPER_EXTENSION = xctest; 462 | }; 463 | name = Debug; 464 | }; 465 | 45803E6218192D48000E5CAA /* Release */ = { 466 | isa = XCBuildConfiguration; 467 | buildSettings = { 468 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 469 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/FlurryUsageSample.app/FlurryUsageSample"; 470 | FRAMEWORK_SEARCH_PATHS = ( 471 | "$(SDKROOT)/Developer/Library/Frameworks", 472 | "$(inherited)", 473 | "$(DEVELOPER_FRAMEWORKS_DIR)", 474 | ); 475 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 476 | GCC_PREFIX_HEADER = "FlurryUsageSample/FlurryUsageSample-Prefix.pch"; 477 | INFOPLIST_FILE = "FlurryUsageSampleTests/FlurryUsageSampleTests-Info.plist"; 478 | PRODUCT_NAME = "$(TARGET_NAME)"; 479 | TEST_HOST = "$(BUNDLE_LOADER)"; 480 | WRAPPER_EXTENSION = xctest; 481 | }; 482 | name = Release; 483 | }; 484 | /* End XCBuildConfiguration section */ 485 | 486 | /* Begin XCConfigurationList section */ 487 | 45803E2618192D48000E5CAA /* Build configuration list for PBXProject "FlurryUsageSample" */ = { 488 | isa = XCConfigurationList; 489 | buildConfigurations = ( 490 | 45803E5B18192D48000E5CAA /* Debug */, 491 | 45803E5C18192D48000E5CAA /* Release */, 492 | ); 493 | defaultConfigurationIsVisible = 0; 494 | defaultConfigurationName = Release; 495 | }; 496 | 45803E5D18192D48000E5CAA /* Build configuration list for PBXNativeTarget "FlurryUsageSample" */ = { 497 | isa = XCConfigurationList; 498 | buildConfigurations = ( 499 | 45803E5E18192D48000E5CAA /* Debug */, 500 | 45803E5F18192D48000E5CAA /* Release */, 501 | ); 502 | defaultConfigurationIsVisible = 0; 503 | defaultConfigurationName = Release; 504 | }; 505 | 45803E6018192D48000E5CAA /* Build configuration list for PBXNativeTarget "FlurryUsageSampleTests" */ = { 506 | isa = XCConfigurationList; 507 | buildConfigurations = ( 508 | 45803E6118192D48000E5CAA /* Debug */, 509 | 45803E6218192D48000E5CAA /* Release */, 510 | ); 511 | defaultConfigurationIsVisible = 0; 512 | defaultConfigurationName = Release; 513 | }; 514 | /* End XCConfigurationList section */ 515 | }; 516 | rootObject = 45803E2318192D48000E5CAA /* Project object */; 517 | } 518 | -------------------------------------------------------------------------------- /Flurry/Flurry.h: -------------------------------------------------------------------------------- 1 | // 2 | // Flurry.h 3 | // Flurry iOS Analytics Agent 4 | // 5 | // Copyright 2009-2012 Flurry, Inc. All rights reserved. 6 | // 7 | // Methods in this header file are for use with Flurry Analytics 8 | 9 | #import 10 | 11 | /*! 12 | * @brief Provides all available methods for defining and reporting Analytics from use 13 | * of your app. 14 | * 15 | * Set of methods that allow developers to capture detailed, aggregate information 16 | * regarding the use of their app by end users. 17 | * 18 | * @note This class provides methods necessary for correct function of FlurryAds.h. 19 | * For information on how to use Flurry's Ads SDK to 20 | * attract high-quality users and monetize your user base see Support Center - Publishers. 21 | * 22 | * @author 2009 - 2013 Flurry, Inc. All Rights Reserved. 23 | * @version 4.3.0 24 | * 25 | */ 26 | 27 | /*! 28 | * @brief Enum for setting up log output level. 29 | * @since 4.2.0 30 | * 31 | */ 32 | typedef enum { 33 | FlurryLogLevelNone = 0, //No output 34 | FlurryLogLevelCriticalOnly, //Default, outputs only critical log events 35 | FlurryLogLevelDebug, //Debug level, outputs critical and main log events 36 | FlurryLogLevelAll //Highest level, outputs all log events 37 | } FlurryLogLevel; 38 | 39 | 40 | @interface Flurry : NSObject { 41 | } 42 | 43 | /** @name Pre-Session Calls 44 | * Optional sdk settings that should be called before start session. 45 | */ 46 | //@{ 47 | 48 | /*! 49 | * @brief Explicitly specifies the App Version that Flurry will use to group Analytics data. 50 | * @since 2.7 51 | * 52 | * This is an optional method that overrides the App Version Flurry uses for reporting. Flurry will 53 | * use the CFBundleVersion in your info.plist file when this method is not invoked. 54 | * 55 | * @note There is a maximum of 605 versions allowed for a single app. \n 56 | * This method must be called prior to invoking #startSession:. 57 | * 58 | * @param version The custom version name. 59 | */ 60 | 61 | + (void)setAppVersion:(NSString *)version; 62 | 63 | /*! 64 | * @brief Retrieves the Flurry Agent Build Version. 65 | * @since 2.7 66 | * 67 | * This is an optional method that retrieves the Flurry Agent Version the app is running under. 68 | * It is most often used if reporting an unexpected behavior of the SDK to 69 | * Flurry Support 70 | * 71 | * @note This method must be called prior to invoking #startSession:. \n 72 | * FAQ for the iPhone SDK is located at 73 | * Support Center - iPhone FAQ. 74 | * 75 | * @see #setLogLevel: for information on how to view debugging information on your console. 76 | * 77 | * @return The agent version of the Flurry SDK. 78 | * 79 | */ 80 | + (NSString *)getFlurryAgentVersion; 81 | 82 | /*! 83 | * @brief Displays an exception in the debug log if thrown during a Session. 84 | * @since 2.7 85 | * 86 | * This is an optional method that augments the debug logs with exceptions that occur during the session. 87 | * You must both capture exceptions to Flurry and set debug logging to enabled for this method to 88 | * display information to the console. The default setting for this method is @c NO. 89 | * 90 | * @note This method must be called prior to invoking #startSession:. 91 | * 92 | * @see #setLogLevel: for information on how to view debugging information on your console. \n 93 | * #logError:message:exception: for details on logging exceptions. \n 94 | * #logError:message:error: for details on logging errors. 95 | * 96 | * @param value @c YES to show errors in debug logs, @c NO to omit errors in debug logs. 97 | */ 98 | + (void)setShowErrorInLogEnabled:(BOOL)value; 99 | 100 | /*! 101 | * @brief Generates debug logs to console. 102 | * @since 2.7 103 | * 104 | * This is an optional method that displays debug information related to the Flurry SDK. 105 | * display information to the console. The default setting for this method is @c NO 106 | * which sets the log level to @c FlurryLogLevelCriticalOnly. 107 | * When set to @c YES the debug log level is set to @c FlurryLogLevelDebug 108 | * 109 | * @note This method must be called prior to invoking #startSession:. If the method, setLogLevel is called later in the code, debug logging will be automatically enabled. 110 | * 111 | * @param value @c YES to show debug logs, @c NO to omit debug logs. 112 | * 113 | */ 114 | + (void)setDebugLogEnabled:(BOOL)value; 115 | 116 | /*! 117 | * @brief Generates debug logs to console. 118 | * @since 4.2.2 119 | * 120 | * This is an optional method that displays debug information related to the Flurry SDK. 121 | * display information to the console. The default setting for this method is @c FlurryLogLevelCritycalOnly. 122 | * 123 | * @note Its good practice to call this method prior to invoking #startSession:. If debug logging is disabled earlier, this method will enable it. 124 | * 125 | * @param value Log level 126 | * 127 | */ 128 | + (void)setLogLevel:(FlurryLogLevel)value; 129 | 130 | /*! 131 | * @brief Set the timeout for expiring a Flurry session. 132 | * @since 2.7 133 | * 134 | * This is an optional method that sets the time the app may be in the background before 135 | * starting a new session upon resume. The default value for the session timeout is 10 136 | * seconds in the background. 137 | * 138 | * @note This method must be called prior to invoking #startSession:. 139 | * 140 | * @param seconds The time in seconds to set the session timeout to. 141 | */ 142 | + (void)setSessionContinueSeconds:(int)seconds; 143 | 144 | /*! 145 | * @brief Send data over a secure transport. 146 | * @since 3.0 147 | * 148 | * This is an optional method that sends data over an SSL connection when enabled. The 149 | * default value is @c NO. 150 | * 151 | * @note This method must be called prior to invoking #startSession:. 152 | * 153 | * @param value @c YES to send data over secure connection. 154 | */ 155 | + (void)setSecureTransportEnabled:(BOOL)value; 156 | 157 | /*! 158 | * @brief Enable automatic collection of crash reports. 159 | * @since 4.1 160 | * 161 | * This is an optional method that collects crash reports when enabled. The 162 | * default value is @c NO. 163 | * 164 | * @note This method must be called prior to invoking #startSession:. 165 | * 166 | * @param value @c YES to enable collection of crash reports. 167 | */ 168 | + (void)setCrashReportingEnabled:(BOOL)value; 169 | 170 | //@} 171 | 172 | /*! 173 | * @brief Start a Flurry session for the project denoted by @c apiKey. 174 | * @since 2.6 175 | * 176 | * This method serves as the entry point to Flurry Analytics collection. It must be 177 | * called in the scope of @c applicationDidFinishLaunching. The session will continue 178 | * for the period the app is in the foreground until your app is backgrounded for the 179 | * time specified in #setSessionContinueSeconds:. If the app is resumed in that period 180 | * the session will continue, otherwise a new session will begin. 181 | * 182 | * Crash reporting will not be enabled. See #setCrashReportingEnabled: for 183 | * more information. 184 | * 185 | * @note If testing on a simulator, please be sure to send App to background via home 186 | * button. Flurry depends on the iOS lifecycle to be complete for full reporting. 187 | * 188 | * @see #setSessionContinueSeconds: for details on setting a custom session timeout. 189 | * 190 | * @code 191 | * - (void)applicationDidFinishLaunching:(UIApplication *)application 192 | { 193 | // Optional Flurry startup methods 194 | [Flurry startSession:@"YOUR_API_KEY"]; 195 | // .... 196 | } 197 | * @endcode 198 | * 199 | * @param apiKey The API key for this project. 200 | */ 201 | 202 | + (void)startSession:(NSString *)apiKey; 203 | 204 | 205 | /*! 206 | * @brief Start a Flurry session for the project denoted by @c apiKey. 207 | * @since 4.0.8 208 | * 209 | * This method serves as the entry point to Flurry Analytics collection. It must be 210 | * called in the scope of @c applicationDidFinishLaunching passing in the launchOptions param. 211 | * The session will continue 212 | * for the period the app is in the foreground until your app is backgrounded for the 213 | * time specified in #setSessionContinueSeconds:. If the app is resumed in that period 214 | * the session will continue, otherwise a new session will begin. 215 | * 216 | * @note If testing on a simulator, please be sure to send App to background via home 217 | * button. Flurry depends on the iOS lifecycle to be complete for full reporting. 218 | * 219 | * @see #setSessionContinueSeconds: for details on setting a custom session timeout. 220 | * 221 | * @code 222 | * - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 223 | { 224 | // Optional Flurry startup methods 225 | [Flurry startSession:@"YOUR_API_KEY" withOptions:launchOptions]; 226 | // .... 227 | } 228 | * @endcode 229 | * 230 | * @param apiKey The API key for this project. 231 | * @param options passed launchOptions from the applicatin's didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 232 | 233 | */ 234 | + (void) startSession:(NSString *)apiKey withOptions:(id)options; 235 | 236 | 237 | /*! 238 | * @brief Pauses a Flurry session left running in background. 239 | * @since 4.2.2 240 | * 241 | * This method should be used in case of #setBackgroundSessionEnabled: set to YES. It can be 242 | * called when application finished all background tasks (such as playing music) to pause session. 243 | * 244 | * @see #setBackgroundSessionEnabled: for details on setting a custom behaviour on resigning activity. 245 | * 246 | * @code 247 | * - (void)allBackgroundTasksFinished 248 | { 249 | // .... 250 | [Flurry pauseBackgroundSession]; 251 | // .... 252 | } 253 | * @endcode 254 | * 255 | */ 256 | + (void)pauseBackgroundSession; 257 | 258 | 259 | /** @name Event and Error Logging 260 | * Methods for reporting custom events and errors during the session. 261 | */ 262 | //@{ 263 | 264 | /*! 265 | * @brief Records a custom event specified by @c eventName. 266 | * @since 2.8.4 267 | * 268 | * This method allows you to specify custom events within your app. As a general rule 269 | * you should capture events related to user navigation within your app, any action 270 | * around monetization, and other events as they are applicable to tracking progress 271 | * towards your business goals. 272 | * 273 | * @note You should not pass private or confidential information about your users in a 274 | * custom event. \n 275 | * Where applicable, you should make a concerted effort to use timed events with 276 | * parameters (#logEvent:withParameters:timed:) or events with parameters 277 | * (#logEvent:withParameters:). This provides valuable information around the time the user 278 | * spends within an action (e.g. - time spent on a level or viewing a page) or characteristics 279 | * of an action (e.g. - Buy Event that has a Parameter of Widget with Value Golden Sword). 280 | * 281 | * @see #logEvent:withParameters: for details on storing events with parameters. \n 282 | * #logEvent:timed: for details on storing timed events. \n 283 | * #logEvent:withParameters:timed: for details on storing timed events with parameters. \n 284 | * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating 285 | * parameters. 286 | * 287 | * @code 288 | * - (void)interestingAppAction 289 | { 290 | [Flurry logEvent:@"Interesting_Action"]; 291 | // Perform interesting action 292 | } 293 | * @endcode 294 | * 295 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme 296 | * that can be easily understood by non-technical people in your business domain. 297 | */ 298 | + (void)logEvent:(NSString *)eventName; 299 | 300 | /*! 301 | * @brief Records a custom parameterized event specified by @c eventName with @c parameters. 302 | * @since 2.8.4 303 | * 304 | * This method overrides #logEvent to allow you to associate parameters with an event. Parameters 305 | * are extremely valuable as they allow you to store characteristics of an action. For example, 306 | * if a user purchased an item it may be helpful to know what level that user was on. 307 | * By setting this parameter you will be able to view a distribution of levels for the purcahsed 308 | * event on the Flurrly Dev Portal. 309 | * 310 | * @note You should not pass private or confidential information about your users in a 311 | * custom event. \n 312 | * A maximum of 10 parameter names may be associated with any event. Sending 313 | * over 10 parameter names with a single event will result in no parameters being logged 314 | * for that event. You may specify an infinite number of Parameter values. For example, 315 | * a Search Box would have 1 parameter name (e.g. - Search Box) and many values, which would 316 | * allow you to see what values users look for the most in your app. \n 317 | * Where applicable, you should make a concerted effort to use timed events with 318 | * parameters (#logEvent:withParameters:timed:). This provides valuable information 319 | * around the time the user spends within an action (e.g. - time spent on a level or 320 | * viewing a page). 321 | * 322 | * @see #logEvent:withParameters:timed: for details on storing timed events with parameters. \n 323 | * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating 324 | * parameters. 325 | * 326 | * @code 327 | * - (void)userPurchasedSomethingCool 328 | { 329 | NSDictionary *params = 330 | [NSDictionary dictionaryWithObjectsAndKeys:@"Cool Item", // Parameter Value 331 | @"Item Purchased", // Parameter Name 332 | nil]; 333 | [Flurry logEvent:@"Something Cool Purchased" withParameters:params]; 334 | // Give user cool item 335 | } 336 | * @endcode 337 | * 338 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme 339 | * that can be easily understood by non-technical people in your business domain. 340 | * @param parameters A map containing Name-Value pairs of parameters. 341 | */ 342 | + (void)logEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters; 343 | 344 | /*! 345 | * @brief Records an app exception. Commonly used to catch unhandled exceptions. 346 | * @since 2.7 347 | * 348 | * This method captures an exception for reporting to Flurry. We recommend adding an uncaught 349 | * exception listener to capture any exceptions that occur during usage that is not 350 | * anticipated by your app. 351 | * 352 | * @see #logError:message:error: for details on capturing errors. 353 | * 354 | * @code 355 | * - (void) uncaughtExceptionHandler(NSException *exception) 356 | { 357 | [Flurry logError:@"Uncaught" message:@"Crash!" exception:exception]; 358 | } 359 | 360 | - (void)applicationDidFinishLaunching:(UIApplication *)application 361 | { 362 | NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 363 | [Flurry startSession:@"YOUR_API_KEY"]; 364 | // .... 365 | } 366 | * @endcode 367 | * 368 | * @param errorID Name of the error. 369 | * @param message The message to associate with the error. 370 | * @param exception The exception object to report. 371 | */ 372 | + (void)logError:(NSString *)errorID message:(NSString *)message exception:(NSException *)exception; 373 | 374 | /*! 375 | * @brief Records an app error. 376 | * @since 2.7 377 | * 378 | * This method captures an error for reporting to Flurry. 379 | * 380 | * @see #logError:message:exception: for details on capturing exceptions. 381 | * 382 | * @code 383 | * - (void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 384 | { 385 | [Flurry logError:@"WebView No Load" message:[error localizedDescription] error:error]; 386 | } 387 | * @endcode 388 | * 389 | * @param errorID Name of the error. 390 | * @param message The message to associate with the error. 391 | * @param error The error object to report. 392 | */ 393 | + (void)logError:(NSString *)errorID message:(NSString *)message error:(NSError *)error; 394 | 395 | /*! 396 | * @brief Records a timed event specified by @c eventName. 397 | * @since 2.8.4 398 | * 399 | * This method overrides #logEvent to allow you to capture the length of an event. This can 400 | * be extremely valuable to understand the level of engagement with a particular action. For 401 | * example, you can capture how long a user spends on a level or reading an article. 402 | * 403 | * @note You should not pass private or confidential information about your users in a 404 | * custom event. \n 405 | * Where applicable, you should make a concerted effort to use parameters with your timed 406 | * events (#logEvent:withParameters:timed:). This provides valuable information 407 | * around the characteristics of an action (e.g. - Buy Event that has a Parameter of Widget with 408 | * Value Golden Sword). 409 | * 410 | * @see #logEvent:withParameters:timed: for details on storing timed events with parameters. \n 411 | * #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating 412 | * parameters. 413 | * 414 | * @code 415 | * - (void)startLevel 416 | { 417 | [Flurry logEvent:@"Level Played" timed:YES]; 418 | // Start user on level 419 | } 420 | 421 | - (void)endLevel 422 | { 423 | [Flurry endTimedEvent:@"Level Played" withParameters:nil]; 424 | // User done with level 425 | } 426 | * @endcode 427 | * 428 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme 429 | * that can be easily understood by non-technical people in your business domain. 430 | * @param timed Specifies the event will be timed. 431 | */ 432 | + (void)logEvent:(NSString *)eventName timed:(BOOL)timed; 433 | 434 | /*! 435 | * @brief Records a custom parameterized timed event specified by @c eventName with @c parameters. 436 | * @since 2.8.4 437 | * 438 | * This method overrides #logEvent to allow you to capture the length of an event with parameters. 439 | * This can be extremely valuable to understand the level of engagement with a particular action 440 | * and the characteristics associated with that action. For example, you can capture how long a user 441 | * spends on a level or reading an article. Parameters can be used to capture, for example, the 442 | * author of an article or if something was purchased while on the level. 443 | * 444 | * @note You should not pass private or confidential information about your users in a 445 | * custom event. 446 | * 447 | * @see #endTimedEvent:withParameters: for details on stopping a timed event and (optionally) updating 448 | * parameters. 449 | * 450 | * @code 451 | * - (void)startLevel 452 | { 453 | NSDictionary *params = 454 | [NSDictionary dictionaryWithObjectsAndKeys:@"100", // Parameter Value 455 | @"Current Points", // Parameter Name 456 | nil]; 457 | 458 | [Flurry logEvent:@"Level Played" withParameters:params timed:YES]; 459 | // Start user on level 460 | } 461 | 462 | - (void)endLevel 463 | { 464 | // User gained additional 100 points in Level 465 | NSDictionary *params = 466 | [NSDictionary dictionaryWithObjectsAndKeys:@"200", // Parameter Value 467 | @"Current Points", // Parameter Name 468 | nil]; 469 | [Flurry endTimedEvent:@"Level Played" withParameters:params]; 470 | // User done with level 471 | } 472 | * @endcode 473 | * 474 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme 475 | * that can be easily understood by non-technical people in your business domain. 476 | * @param parameters A map containing Name-Value pairs of parameters. 477 | * @param timed Specifies the event will be timed. 478 | */ 479 | + (void)logEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters timed:(BOOL)timed; 480 | 481 | /*! 482 | * @brief Ends a timed event specified by @c eventName and optionally updates parameters with @c parameters. 483 | * @since 2.8.4 484 | * 485 | * This method ends an existing timed event. If parameters are provided, this will overwrite existing 486 | * parameters with the same name or create new parameters if the name does not exist in the parameter 487 | * map set by #logEvent:withParameters:timed:. 488 | * 489 | * @note You should not pass private or confidential information about your users in a 490 | * custom event. \n 491 | * If the app is backgrounded prior to ending a timed event, the Flurry SDK will automatically 492 | * end the timer on the event. \n 493 | * #endTimedEvent:withParameters: is ignored if called on a previously 494 | * terminated event. 495 | * 496 | * @see #logEvent:withParameters:timed: for details on starting a timed event with parameters. 497 | * 498 | * @code 499 | * - (void)startLevel 500 | { 501 | NSDictionary *params = 502 | [NSDictionary dictionaryWithObjectsAndKeys:@"100", // Parameter Value 503 | @"Current Points", // Parameter Name 504 | nil]; 505 | 506 | [Flurry logEvent:@"Level Played" withParameters:params timed:YES]; 507 | // Start user on level 508 | } 509 | 510 | - (void)endLevel 511 | { 512 | // User gained additional 100 points in Level 513 | NSDictionary *params = 514 | [NSDictionary dictionaryWithObjectsAndKeys:@"200", // Parameter Value 515 | @"Current Points", // Parameter Name 516 | nil]; 517 | [Flurry endTimedEvent:@"Level Played" withParameters:params]; 518 | // User done with level 519 | } 520 | * @endcode 521 | * 522 | * @param eventName Name of the event. For maximum effectiveness, we recommend using a naming scheme 523 | * that can be easily understood by non-technical people in your business domain. 524 | * @param parameters A map containing Name-Value pairs of parameters. 525 | */ 526 | + (void)endTimedEvent:(NSString *)eventName withParameters:(NSDictionary *)parameters; // non-nil parameters will update the parameters 527 | 528 | //@} 529 | 530 | 531 | /** @name Page View Methods 532 | * Count page views. 533 | */ 534 | //@{ 535 | 536 | /*! 537 | * @brief Automatically track page views on a @c UINavigationController or @c UITabBarController. 538 | * @since 2.7 539 | * 540 | * This method increments the page view count for a session based on traversing a UINavigationController 541 | * or UITabBarController. The page view count is only a counter for the number of transitions in your 542 | * app. It does not associate a name with the page count. To associate a name with a count of occurences 543 | * see #logEvent:. 544 | * 545 | * @note Please make sure you assign the Tab and Navigation controllers to the view controllers before 546 | * passing them to this method. 547 | * 548 | * @see #logPageView for details on explictly incrementing page view count. 549 | * 550 | * @code 551 | * -(void) trackViewsFromTabBar:(UITabBarController*) tabBar 552 | { 553 | [Flurry logAllPageViews:tabBar]; 554 | } 555 | * @endcode 556 | * 557 | * @param target The navigation or tab bar controller. 558 | */ 559 | + (void)logAllPageViews:(id)target; 560 | 561 | /*! 562 | * @brief Explicitly track a page view during a session. 563 | * @since 2.7 564 | * 565 | * This method increments the page view count for a session when invoked. It does not associate a name 566 | * with the page count. To associate a name with a count of occurences see #logEvent:. 567 | * 568 | * @see #logAllPageViews for details on automatically incrementing page view count based on user 569 | * traversing navigation or tab bar controller. 570 | * 571 | * @code 572 | * -(void) trackView 573 | { 574 | [Flurry logPageView]; 575 | } 576 | * @endcode 577 | * 578 | */ 579 | + (void)logPageView; 580 | 581 | //@} 582 | 583 | /** @name User Info 584 | * Methods to set user information. 585 | */ 586 | //@{ 587 | 588 | /*! 589 | * @brief Assign a unique id for a user in your app. 590 | * @since 2.7 591 | * 592 | * @note Please be sure not to use this method to pass any private or confidential information 593 | * about the user. 594 | * 595 | * @param userID The app id for a user. 596 | */ 597 | + (void)setUserID:(NSString *)userID; 598 | 599 | /*! 600 | * @brief Set your user's age in years. 601 | * @since 2.7 602 | * 603 | * Use this method to capture the age of your user. Only use this method if you collect this 604 | * information explictly from your user (i.e. - there is no need to set a default value). 605 | * 606 | * @note The age is aggregated across all users of your app and not available on a per user 607 | * basis. 608 | * 609 | * @param age Reported age of user. 610 | * 611 | */ 612 | + (void)setAge:(int)age; 613 | 614 | /*! 615 | * @brief Set your user's gender. 616 | * @since 2.7 617 | * 618 | * Use this method to capture the gender of your user. Only use this method if you collect this 619 | * information explictly from your user (i.e. - there is no need to set a default value). Allowable 620 | * values are @c @"m" or @c @"f" 621 | * 622 | * @note The gender is aggregated across all users of your app and not available on a per user 623 | * basis. 624 | * 625 | * @param gender Reported gender of user. 626 | * 627 | */ 628 | + (void)setGender:(NSString *)gender; // user's gender m or f 629 | 630 | //@} 631 | 632 | /** @name Location Reporting 633 | * Methods for setting location information. 634 | */ 635 | //@{ 636 | /*! 637 | * @brief Set the location of the session. 638 | * @since 2.7 639 | * 640 | * Use information from the CLLocationManager to specify the location of the session. Flurry does not 641 | * automatically track this information or include the CLLocation framework. 642 | * 643 | * @note Only the last location entered is captured per session. \n 644 | * Regardless of accuracy specified, the Flurry SDK will only report location at city level or higher. \n 645 | * Location is aggregated across all users of your app and not available on a per user basis. \n 646 | * This information should only be captured if it is germaine to the use of your app. 647 | * 648 | * @code 649 | CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 650 | [locationManager startUpdatingLocation]; 651 | * @endcode 652 | * 653 | * After starting the location manager, you can set the location with Flurry. You can implement 654 | * CLLocationManagerDelegate to be aware of when the location is updated. Below is an example 655 | * of how to use this method, after you have recieved a location update from the locationManager. 656 | * 657 | * @code 658 | CLLocation *location = locationManager.location; 659 | [Flurry setLatitude:location.coordinate.latitude 660 | longitude:location.coordinate.longitude 661 | horizontalAccuracy:location.horizontalAccuracy 662 | verticalAccuracy:location.verticalAccuracy]; 663 | * @endcode 664 | * @param latitude The latitude. 665 | * @param longitude The longitude. 666 | * @param horizontalAccuracy The radius of uncertainty for the location in meters. 667 | * @param verticalAccuracy The accuracy of the altitude value in meters. 668 | * 669 | */ 670 | + (void)setLatitude:(double)latitude longitude:(double)longitude horizontalAccuracy:(float)horizontalAccuracy verticalAccuracy:(float)verticalAccuracy; 671 | 672 | //@} 673 | 674 | /** @name Session Reporting Calls 675 | * Optional methods that can be called at any point to control session reporting. 676 | */ 677 | //@{ 678 | 679 | /*! 680 | * @brief Set session to report when app closes. 681 | * @since 2.7 682 | * 683 | * Use this method report session data when the app is closed. The default value is @c YES. 684 | * 685 | * @note This method is rarely invoked in iOS >= 3.2 due to the updated iOS lifecycle. 686 | * 687 | * @see #setSessionReportsOnPauseEnabled: 688 | * 689 | * @param sendSessionReportsOnClose YES to send on close, NO to omit reporting on close. 690 | * 691 | */ 692 | + (void)setSessionReportsOnCloseEnabled:(BOOL)sendSessionReportsOnClose; 693 | 694 | /*! 695 | * @brief Set session to report when app is sent to the background. 696 | * @since 2.7 697 | * 698 | * Use this method report session data when the app is paused. The default value is @c YES. 699 | * 700 | * @param setSessionReportsOnPauseEnabled YES to send on pause, NO to omit reporting on pause. 701 | * 702 | */ 703 | + (void)setSessionReportsOnPauseEnabled:(BOOL)setSessionReportsOnPauseEnabled; 704 | 705 | /*! 706 | * @brief Set session to support background execution. 707 | * @since 4.2.2 708 | * 709 | * Use this method to enable reporting of errors and events when application is 710 | * running in backgorund (such applications have UIBackgroundModes in Info.plist). 711 | * You should call #pauseBackgroundSession when appropriate in background mode to 712 | * pause the session (for example when played song completed in background) 713 | * 714 | * Default value is @c NO 715 | * 716 | * @see #pauseBackgroundSession for details 717 | * 718 | * @param setBackgroundSessionEnabled YES to enbale background support and 719 | * continue log events and errors for running session. 720 | */ 721 | + (void)setBackgroundSessionEnabled:(BOOL)setBackgroundSessionEnabled; 722 | 723 | /*! 724 | * @brief Enable custom event logging. 725 | * @since 2.7 726 | * 727 | * Use this method to allow the capture of custom events. The default value is @c YES. 728 | * 729 | * @param value YES to enable event logging, NO to stop custom logging. 730 | * 731 | */ 732 | + (void)setEventLoggingEnabled:(BOOL)value; 733 | 734 | /*! 735 | * @brief Set device push token. 736 | * @since 2.7 737 | * 738 | * After the device has successfully registered with APNS, call this method to set the push token received from APNS. 739 | * 740 | * 741 | */ 742 | + (void)setPushToken:(NSString *)pushToken; 743 | 744 | 745 | //@} 746 | 747 | @end 748 | --------------------------------------------------------------------------------