diff --git a/YH_Analytics/YH_Analytics.xcodeproj/project.pbxproj b/YH_Analytics/YH_Analytics.xcodeproj/project.pbxproj
index 48a5987..2761f57 100644
--- a/YH_Analytics/YH_Analytics.xcodeproj/project.pbxproj
+++ b/YH_Analytics/YH_Analytics.xcodeproj/project.pbxproj
@@ -30,6 +30,7 @@
 		CA7AC79E1ADE0C3900F30791 /* YHDeviceFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC79D1ADE0C3900F30791 /* YHDeviceFactoryTests.m */; };
 		CA7AC7A01ADE0C4F00F30791 /* YHEventFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC79F1ADE0C4F00F30791 /* YHEventFactoryTests.m */; };
 		CA7AC7A21ADE0C6600F30791 /* YHStatusFactoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC7A11ADE0C6600F30791 /* YHStatusFactoryTests.m */; };
+		CA7AC7A41ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7AC7A31ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m */; };
 		CABC32831AD7CEB8002A4260 /* libOCMock.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CABC32821AD7CEB8002A4260 /* libOCMock.a */; };
 		E74D45B21ABA7C6300EFE12E /* AFHTTPRequestOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D458E1ABA7C6300EFE12E /* AFHTTPRequestOperation.m */; };
 		E74D45B31ABA7C6300EFE12E /* AFHTTPRequestOperationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D45901ABA7C6300EFE12E /* AFHTTPRequestOperationManager.m */; };
@@ -126,6 +127,7 @@
 		CA7AC79D1ADE0C3900F30791 /* YHDeviceFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHDeviceFactoryTests.m; sourceTree = "<group>"; };
 		CA7AC79F1ADE0C4F00F30791 /* YHEventFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHEventFactoryTests.m; sourceTree = "<group>"; };
 		CA7AC7A11ADE0C6600F30791 /* YHStatusFactoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHStatusFactoryTests.m; sourceTree = "<group>"; };
+		CA7AC7A31ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YH_AnalyticsLogicTests.m; sourceTree = "<group>"; };
 		CABC32791AD7CE40002A4260 /* NSNotificationCenter+OCMAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNotificationCenter+OCMAdditions.h"; sourceTree = "<group>"; };
 		CABC327A1AD7CE40002A4260 /* OCMArg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMArg.h; sourceTree = "<group>"; };
 		CABC327B1AD7CE40002A4260 /* OCMConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCMConstraint.h; sourceTree = "<group>"; };
@@ -291,6 +293,7 @@
 				CA7AC78D1ADE08AF00F30791 /* ModelTest */,
 				CA7AC78C1ADE088D00F30791 /* UtilsTest */,
 				194EDC8F1A7F52D100421E6C /* YH_AnalyticsTests.m */,
+				CA7AC7A31ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m */,
 				CA7AC7821ADE06F300F30791 /* YHCrashReporterTests.m */,
 				CA7AC7841ADE073200F30791 /* NSString+YHAnalyticsTests.m */,
 				194EDC8D1A7F52D100421E6C /* Supporting Files */,
@@ -688,6 +691,7 @@
 				CA7AC7931ADE08F000F30791 /* YHEventTests.m in Sources */,
 				CA7AC7851ADE073200F30791 /* NSString+YHAnalyticsTests.m in Sources */,
 				CA7AC79E1ADE0C3900F30791 /* YHDeviceFactoryTests.m in Sources */,
+				CA7AC7A41ADF9FCB00F30791 /* YH_AnalyticsLogicTests.m in Sources */,
 				CA7AC79A1ADE0BD500F30791 /* YHDataFactoryTests.m in Sources */,
 				CA7AC79C1ADE0C0800F30791 /* YHErrorFactoryTests.m in Sources */,
 				CA7AC7A01ADE0C4F00F30791 /* YHEventFactoryTests.m in Sources */,
diff --git a/YH_Analytics/YH_Analytics/AppDelegate.m b/YH_Analytics/YH_Analytics/AppDelegate.m
index e75a101..937521c 100644
--- a/YH_Analytics/YH_Analytics/AppDelegate.m
+++ b/YH_Analytics/YH_Analytics/AppDelegate.m
@@ -20,18 +20,18 @@
     // Override point for customization after application launch.
     
     // 设置发送策略
-//    [YH_Analytics shareInstance].logStrategy = LogStrategyCustom;
+//    [YH_Analytics sharedInstance].logStrategy = LogStrategyCustom;
     
     // 自定义发送时间,从服务器获取
-    [YH_Analytics shareInstance].customInterval = 1000;
+    [YH_Analytics sharedInstance].customInterval = 1000;
     
     // 设置用户id
-    [YH_Analytics shareInstance].uid = @"0000001";
+    [YH_Analytics sharedInstance].uid = @"0000001";
     
     // 启动
-    [[YH_Analytics shareInstance]startWithAppId:@"appid"];
+    [[YH_Analytics sharedInstance]startWithAppId:@"appid"];
 
-    NSLog(@"logStrategy == %d", [YH_Analytics shareInstance].logStrategy);
+    NSLog(@"logStrategy == %d", [YH_Analytics sharedInstance].logStrategy);
     return YES;
 }
 
diff --git a/YH_Analytics/YH_Analytics/ViewController.m b/YH_Analytics/YH_Analytics/ViewController.m
index cdfb5f5..dd419b0 100644
--- a/YH_Analytics/YH_Analytics/ViewController.m
+++ b/YH_Analytics/YH_Analytics/ViewController.m
@@ -20,7 +20,7 @@
     [super viewDidLoad];
     
     [self.imageView setImage:[UIImage imageNamed:@"stastsold"]];
-    self.segment.selectedSegmentIndex = [YH_Analytics shareInstance].logStrategy;
+    self.segment.selectedSegmentIndex = [YH_Analytics sharedInstance].logStrategy;
 }
 
 - (void)didReceiveMemoryWarning {
@@ -31,7 +31,7 @@
 - (IBAction)click:(id)sender {
  
     for (int i = 0; i< 10; i++) {
-        [[YH_Analytics shareInstance] logEvent:@"test" parameters:
+        [[YH_Analytics sharedInstance] logEvent:@"test" parameters:
                 @{@"key1" : [NSString stringWithFormat:@"%d", i],
                   @"key2" : @"v2"
                 }];
@@ -43,7 +43,7 @@
     
     
 //    for (int i = 0; i< 10; i++) {
-        [[YH_Analytics shareInstance]logError:@"NETWORK" parameters:
+        [[YH_Analytics sharedInstance]logError:@"NETWORK" parameters:
                     @{JsonKeyErrorEC:@"503", // 错误码
                       JsonKeyErrorEI:@"getUserAvatar" //发生错误接口
                       }];
@@ -68,17 +68,17 @@
     
     switch (index) {
         case 0: {
-            [YH_Analytics shareInstance].logStrategy = LogStrategyAppLaunch;
+            [YH_Analytics sharedInstance].logStrategy = LogStrategyAppLaunch;
             break;
         }
         case 1: {
-            [YH_Analytics shareInstance].logStrategy = LogStrategyCustom;
+            [YH_Analytics sharedInstance].logStrategy = LogStrategyCustom;
             [[NSUserDefaults standardUserDefaults] setDouble:60 forKey:kKeyUserDefaultsCustomInterval];
             [[NSUserDefaults standardUserDefaults] synchronize];
             break;
         }
         case 2: {
-            [YH_Analytics shareInstance].logStrategy = LogStrategyImmedi;;
+            [YH_Analytics sharedInstance].logStrategy = LogStrategyImmedi;;
             break;
         }
         default:
diff --git a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.h b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.h
index 03b2813..0277d29 100644
--- a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.h
+++ b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.h
@@ -31,7 +31,7 @@ extern NSString * const JsonKeyDataTypeErrors;
 @property (strong, nonatomic) YHStatus *currentStatus;
 @property (strong, nonatomic) NSMutableDictionary *immediUploadItemDic; // 用于立即发送策略下(device信息是相同的)
 
-+ (instancetype)shareInstance;
++ (instancetype)sharedInstance;
 
 - (BOOL)canPersisiting;
 
diff --git a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.m b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.m
index 06526b1..f37066d 100644
--- a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.m
+++ b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHAssemblyAssistant.m
@@ -57,16 +57,16 @@ NSString * const JsonKeyDataTypeErrors = @"errors";
 
 #pragma mark - 初始化
 static dispatch_queue_t persisitingQueue;
-+ (instancetype)shareInstance
++ (instancetype)sharedInstance
 {
-    static YHAssemblyAssistant *_shareInstance;
+    static YHAssemblyAssistant *_sharedInstance;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
-        _shareInstance = [[YHAssemblyAssistant alloc] init];
+        _sharedInstance = [[YHAssemblyAssistant alloc] init];
         persisitingQueue = dispatch_queue_create("com.yoho.analytics.persisiting", NULL);
     });
     
-    return _shareInstance;
+    return _sharedInstance;
 }
 
 - (id)init
@@ -289,7 +289,7 @@ static dispatch_queue_t persisitingQueue;
 
     if (data) {
         
-        [[YHNetworkAssistant shareInstance] postWhitAPI:kYASApiMethod parameters:data from:self success:^(id responseObject) {
+        [[YHNetworkAssistant sharedInstance] postWhitAPI:kYASApiMethod parameters:data from:self success:^(id responseObject) {
 //            NSLog(@"responseObject = %@", responseObject);
         } failure:^(NSError *error) {
             NSLog(@"error = %@", error.localizedDescription);
@@ -299,11 +299,11 @@ static dispatch_queue_t persisitingQueue;
 
 - (void)uploadDiskData
 {
-    NSDictionary *uploadData = [[YHAssemblyAssistant shareInstance] getUploadData];
+    NSDictionary *uploadData = [[YHAssemblyAssistant sharedInstance] getUploadData];
     
     if (uploadData) {
         
-        [[YHNetworkAssistant shareInstance] postWhitAPI:kYASApiMethod parameters:uploadData from:self success:^(id responseObject) {
+        [[YHNetworkAssistant sharedInstance] postWhitAPI:kYASApiMethod parameters:uploadData from:self success:^(id responseObject) {
 //            NSLog(@"responseObject = %@", responseObject);
             [self removeLocalFile];
         } failure:^(NSError *error) {
diff --git a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHCrashReporter.m b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHCrashReporter.m
index 55696c5..3f903cd 100644
--- a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHCrashReporter.m
+++ b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHCrashReporter.m
@@ -59,14 +59,14 @@ void uncaughtCrashExceptionHandler(NSException *exception)
 
 + (YHCrashReporter *)sharedInstance
 {
-    static YHCrashReporter *shareInstance = nil;
+    static YHCrashReporter *sharedInstance = nil;
     
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
-        shareInstance = [[YHCrashReporter alloc] init];
+        sharedInstance = [[YHCrashReporter alloc] init];
     });
     
-    return shareInstance;
+    return sharedInstance;
 }
 
 #pragma mark - Lifetime methods
@@ -122,7 +122,7 @@ void uncaughtCrashExceptionHandler(NSException *exception)
 {
     NSLog(@"crash============:\n%@", userInfo);
     if (userInfo) {
-        [[YH_Analytics shareInstance] logError:@"CRASH" parameters:@{ JsonKeyErrorST: userInfo}];
+        [[YH_Analytics sharedInstance] logError:@"CRASH" parameters:@{ JsonKeyErrorST: userInfo}];
     }
 }
 
@@ -130,7 +130,7 @@ void uncaughtCrashExceptionHandler(NSException *exception)
 {
     NSLog(@"crash============:\n%@", userInfo);
     if (userInfo) {
-        [[YH_Analytics shareInstance] logError:@"CRASH" parameters:@{ JsonKeyErrorST: userInfo}];
+        [[YH_Analytics sharedInstance] logError:@"CRASH" parameters:@{ JsonKeyErrorST: userInfo}];
     }
 }
 
diff --git a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHNetworkAssistant.h b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHNetworkAssistant.h
index 722c558..24000dc 100644
--- a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHNetworkAssistant.h
+++ b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHNetworkAssistant.h
@@ -19,7 +19,7 @@ static NSString * const YHEAPIErrorDomain = @"YHEAPIErrorDomain";
 
 #pragma mark - Init
 
-+ (instancetype)shareInstance;
++ (instancetype)sharedInstance;
 
 /**
  *  Initializes your network engine with a hostname
diff --git a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHNetworkAssistant.m b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHNetworkAssistant.m
index 390fda3..f5b5b98 100644
--- a/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHNetworkAssistant.m
+++ b/YH_Analytics/YH_Analytics/YH_Analytics/Utils/YHNetworkAssistant.m
@@ -28,15 +28,15 @@ AFNetworkReachabilityStatus _currentNetworkStatus;
 
 #pragma mark - Init
 
-+ (instancetype)shareInstance
++ (instancetype)sharedInstance
 {
-    static YHNetworkAssistant *_shareInstance;
+    static YHNetworkAssistant *_sharedInstance;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
         _sQueue = dispatch_queue_create("cn.yoho.analytics.network.squeue", 0);// create a serial queue
         _allOperations = [NSMutableSet new];
         _reachabilityChangedHandlers = [NSMutableArray array];
-        _shareInstance = [[YHNetworkAssistant alloc] initWithHostName:kAnalizedURL apiPath:nil customHeaderFields:nil];
+        _sharedInstance = [[YHNetworkAssistant alloc] initWithHostName:kAnalizedURL apiPath:nil customHeaderFields:nil];
         
         // 监听网络状态
         [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
@@ -53,7 +53,7 @@ AFNetworkReachabilityStatus _currentNetworkStatus;
         [[AFNetworkReachabilityManager sharedManager] startMonitoring];
     });
 
-    return _shareInstance;
+    return _sharedInstance;
 }
 
 
diff --git a/YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.h b/YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.h
index 310f8be..6401a4b 100644
--- a/YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.h
+++ b/YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.h
@@ -22,7 +22,7 @@ typedef enum _YohoMobStatLogStrategy {
 /**
  *  获取统计对象的实例
  */
-+ (YH_Analytics*) shareInstance;
++ (YH_Analytics*) sharedInstance;
 
 /**
  *  此处AppId即为应用的appKey
diff --git a/YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.m b/YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.m
index c5d276b..36013d7 100644
--- a/YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.m
+++ b/YH_Analytics/YH_Analytics/YH_Analytics/YH_Analytics.m
@@ -50,16 +50,16 @@
 static dispatch_queue_t persisitingQueue;
 
 
-+ (YH_Analytics *)shareInstance
++ (YH_Analytics *)sharedInstance
 {
-    static YH_Analytics *shareInstance = nil;
+    static YH_Analytics *sharedInstance = nil;
     
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
-        shareInstance = [[YH_Analytics alloc] init];
+        sharedInstance = [[YH_Analytics alloc] init];
     });
     
-    return shareInstance;
+    return sharedInstance;
 }
 
 - (id)init
@@ -91,36 +91,36 @@ static dispatch_queue_t persisitingQueue;
          CTRadioAccessTechnologyeHRPD - 3G (or 3.5 - eHRPD is to allow migration from CDMA EVDO to LTE)
          CTRadioAccessTechnologyLTE - 4G (allowed to be called 4G by the ITU as mentioend above)
          */
-        [[YHNetworkAssistant shareInstance] addReachabilityChangedHandler:^(AFNetworkReachabilityStatus networkStatus) {
+        [[YHNetworkAssistant sharedInstance] addReachabilityChangedHandler:^(AFNetworkReachabilityStatus networkStatus) {
             CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
             switch (networkStatus) {
                 case AFNetworkReachabilityStatusUnknown:
                 case AFNetworkReachabilityStatusNotReachable:
-                    [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatusUnknow;
+                    [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatusUnknow;
                     break;
 
                 case AFNetworkReachabilityStatusReachableViaWWAN:
                 {
                     if ([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) {
-                        [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatus2G;
+                        [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatus2G;
                     } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) {
-                        [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatus3G;
+                        [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatus3G;
                     } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {
-                        [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatus4G;
+                        [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatus4G;
                     } else {
-                        [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatusUnknow;
+                        [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatusUnknow;
                     }
                 }
                     break;
                 case AFNetworkReachabilityStatusReachableViaWiFi:
-                    [YHAssemblyAssistant shareInstance].currentStatus.net = kNetWorkStatusWIFI;
+                    [YHAssemblyAssistant sharedInstance].currentStatus.net = kNetWorkStatusWIFI;
                     break;
                     
                 default:
                     break;
             }
        
-            [[YHAssemblyAssistant shareInstance] updateImmediUploadDic];
+            [[YHAssemblyAssistant sharedInstance] updateImmediUploadDic];
         }];
     }
     
@@ -167,14 +167,14 @@ static dispatch_queue_t persisitingQueue;
 {
     [self registerCrashReporter];
     [self registerAppWillEnterForegroundNotification];
-    [YHAssemblyAssistant shareInstance].currentStatus.sid = self.session;
-    [YHAssemblyAssistant shareInstance].device.ak = appId;
+    [YHAssemblyAssistant sharedInstance].currentStatus.sid = self.session;
+    [YHAssemblyAssistant sharedInstance].device.ak = appId;
 
     /*
      构建即时发送模式下数据
      */
     
-    [[YHAssemblyAssistant shareInstance] prepareImmediUploadDic];
+    [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic];
     
     /*
      检查发送模式
@@ -230,9 +230,9 @@ static dispatch_queue_t persisitingQueue;
     
     // 立即发送策略
     if (self.logStrategy == LogStrategyImmedi) {
-        [[YHAssemblyAssistant shareInstance] uploadImmedilyWithEvent:event];
+        [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:event];
     } else {
-        [[YHAssemblyAssistant shareInstance] saveItemData:event];
+        [[YHAssemblyAssistant sharedInstance] saveItemData:event];
     }
     
 }
@@ -248,9 +248,9 @@ static dispatch_queue_t persisitingQueue;
     error.param = param;
     
     if (self.logStrategy == LogStrategyImmedi) {
-        [[YHAssemblyAssistant shareInstance] uploadImmedilyWithEvent:error];
+        [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:error];
     } else {
-        [[YHAssemblyAssistant shareInstance] saveItemData:error];
+        [[YHAssemblyAssistant sharedInstance] saveItemData:error];
     }
 }
 
@@ -265,7 +265,7 @@ static dispatch_queue_t persisitingQueue;
 // 发送本地持久化数据
 - (void)uploadDiskData
 {
-    [[YHAssemblyAssistant shareInstance] uploadDiskData];
+    [[YHAssemblyAssistant sharedInstance] uploadDiskData];
 }
 
 // 发送本地持久化数据
@@ -302,11 +302,11 @@ static dispatch_queue_t persisitingQueue;
     CLLocationCoordinate2D loc = [newLocation coordinate];
     float longitude = loc.longitude;
     float latitude = loc.latitude;
-    [YHAssemblyAssistant shareInstance].currentStatus.lo = [NSString stringWithFormat:@"%f",longitude];
-    [YHAssemblyAssistant shareInstance].currentStatus.la = [NSString stringWithFormat:@"%f",latitude];
+    [YHAssemblyAssistant sharedInstance].currentStatus.lo = [NSString stringWithFormat:@"%f",longitude];
+    [YHAssemblyAssistant sharedInstance].currentStatus.la = [NSString stringWithFormat:@"%f",latitude];
     
     // 更新经纬度
-    [[YHAssemblyAssistant shareInstance].immediUploadItemDic setObject:[YHAssemblyAssistant shareInstance].device.jsonDictionary forKey:JsonKeyDataTypeDevice];
+    [[YHAssemblyAssistant sharedInstance].immediUploadItemDic setObject:[YHAssemblyAssistant sharedInstance].device.jsonDictionary forKey:JsonKeyDataTypeDevice];
     
 }
 
diff --git a/YH_Analytics/YH_AnalyticsTests/YH_AnalyticsLogicTests.m b/YH_Analytics/YH_AnalyticsTests/YH_AnalyticsLogicTests.m
new file mode 100644
index 0000000..42819e9
--- /dev/null
+++ b/YH_Analytics/YH_AnalyticsTests/YH_AnalyticsLogicTests.m
@@ -0,0 +1,110 @@
+//
+//  YH_AnalyticsLogicTests.m
+//  YH_Analytics
+//
+//  Created by Zhou Rongjun on 15/4/16.
+//  Copyright (c) 2015年 YOHO. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <XCTest/XCTest.h>
+#import "OCMock.h"
+#import <CoreLocation/CoreLocation.h>
+#import "YHCrashReporter.h"
+#import "YHAssemblyAssistant.h"
+#import "YH_Analytics.h"
+
+@interface YH_AnalyticsLogicTests : XCTestCase {
+@private
+    id locationManageMock;
+    id assemblyAssistantMock;
+    id crashReporterMock;
+    id networkAssistantMock;
+    YH_Analytics *analytics;
+}
+
+@end
+
+@implementation YH_AnalyticsLogicTests
+
+- (void)setUp {
+    [super setUp];
+    // Put setup code here. This method is called before the invocation of each test method in the class.
+    locationManageMock = OCMClassMock([CLLocationManager class]);
+    
+    assemblyAssistantMock = OCMClassMock([YHAssemblyAssistant class]);
+    OCMStub([assemblyAssistantMock sharedInstance]).andReturn(assemblyAssistantMock);
+    
+    crashReporterMock = OCMClassMock([YHCrashReporter class]);
+    OCMStub([crashReporterMock sharedInstance]).andReturn(crashReporterMock);
+    
+    networkAssistantMock = OCMClassMock([YHNetworkAssistant class]);
+    OCMStub([networkAssistantMock sharedInstance]).andReturn(networkAssistantMock);
+}
+
+- (void)tearDown {
+    // Put teardown code here. This method is called after the invocation of each test method in the class.
+    [super tearDown];
+}
+
+#pragma mark - 逻辑分支测试
+
+- (void)testStartWithAppIdMethodPrepareImmediUploadDic {
+    NSLog(@"%@ start", self.name);
+    
+    analytics = [[YH_Analytics alloc] init];
+    
+    OCMExpect([assemblyAssistantMock prepareImmediUploadDic]);
+    
+    [analytics startWithAppId:@"appId"];
+    
+    OCMVerifyAll(assemblyAssistantMock);
+    
+    NSLog(@"%@ end", self.name);
+}
+
+- (void)testStartWithAppIdMethodWithLogStrategyAppLaunch {
+    NSLog(@"%@ start", self.name);
+    
+    analytics = [[YH_Analytics alloc] init];
+    analytics.logStrategy = LogStrategyAppLaunch;
+
+    OCMExpect([assemblyAssistantMock uploadDiskData]);
+    
+    [analytics startWithAppId:@"appId"];
+    
+    OCMVerifyAll(assemblyAssistantMock);
+    
+    NSLog(@"%@ end", self.name);
+}
+
+- (void)testStartWithAppIdMethodWithLogStrategyCustom {
+    NSLog(@"%@ start", self.name);
+    
+    analytics = [[YH_Analytics alloc] init];
+    analytics.logStrategy = LogStrategyCustom;
+    
+    OCMExpect([assemblyAssistantMock uploadDiskData]);
+    
+    [analytics startWithAppId:@"appId"];
+    
+    OCMVerifyAll(assemblyAssistantMock);
+    
+    NSLog(@"%@ end", self.name);
+}
+
+- (void)testStartWithAppIdMethodWithLogStrategyImmedi {
+    NSLog(@"%@ start", self.name);
+    
+    analytics = [[YH_Analytics alloc] init];
+    analytics.logStrategy = LogStrategyImmedi;
+    
+    OCMExpect([assemblyAssistantMock uploadDiskData]);
+    
+    [analytics startWithAppId:@"appId"];
+    
+    XCTAssertThrows([assemblyAssistantMock verify], @"StartWithAppId should not uploadDiskData when strategy is immediately.") ;
+    
+    NSLog(@"%@ end", self.name);
+}
+@end
diff --git a/YH_Analytics/YH_AnalyticsTests/YH_AnalyticsTests.m b/YH_Analytics/YH_AnalyticsTests/YH_AnalyticsTests.m
index ec48f6c..cd2e181 100644
--- a/YH_Analytics/YH_AnalyticsTests/YH_AnalyticsTests.m
+++ b/YH_Analytics/YH_AnalyticsTests/YH_AnalyticsTests.m
@@ -81,18 +81,4 @@
     NSLog(@"%@ end", self.name);
 }
 
-#pragma mark - 分支测试
-
-- (void)testStartWithAppIdMethodWithLogStrategyAppLaunch {
-    NSLog(@"%@ start", self.name);
-    
-    NSLog(@"%@ end", self.name);
-}
-
-- (void)testStartWithAppIdMethodWithLogStrategyCustom {
-    NSLog(@"%@ start", self.name);
-    
-    NSLog(@"%@ end", self.name);
-}
-
 @end