Explorar o código

Merge remote-tracking branch 'origin/dev_2.0.8' into feat/combo_opt

* origin/dev_2.0.8:
  feat: NetworkEye 默认开启状态
  feat: 接入 NetworkEye 网络监控组件
  [*] 暂时提交
  [*] MOShowLiveVC 内存泄漏问题修复
  [*] Url跳转 是否展示标题 支持
  [*] 调整到Build 3
  [*] 封装系统弹窗
  [*] 探索页 贡献榜 规则页修正
陈文艺 hai 6 meses
pai
achega
3229d999d0
Modificáronse 47 ficheiros con 7707 adicións e 4594 borrados
  1. 16 2
      MiMoLive/MiMoLive.xcodeproj/project.pbxproj
  2. 16 1
      MiMoLive/MiMoLive/AppDelegate.m
  3. 33 0
      MiMoLive/MiMoLive/Classes/Base/AlertView/MOSystemAlertView/MOSystemAlertView.h
  4. 277 0
      MiMoLive/MiMoLive/Classes/Base/AlertView/MOSystemAlertView/MOSystemAlertView.m
  5. 1 1
      MiMoLive/MiMoLive/Classes/Explore/MORankListVC.m
  6. 2 4
      MiMoLive/MiMoLive/Classes/Live/MOShowLiveVC.m
  7. 7 1
      MiMoLive/Podfile.lock
  8. 7 1
      MiMoLive/Pods/Manifest.lock
  9. 21 0
      MiMoLive/Pods/NetworkEye/LICENSE
  10. 28 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEye.h
  11. 250 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEye.m
  12. 19 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeDetailViewController.h
  13. 407 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeDetailViewController.m
  14. 13 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeSettingsViewController.h
  15. 143 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeSettingsViewController.m
  16. 13 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeViewController.h
  17. 342 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeViewController.m
  18. 42 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPModel.h
  19. 154 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPModel.m
  20. 66 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPModelManager.h
  21. 243 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPModelManager.m
  22. 22 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEKeyboardShortcutManager.h
  23. 290 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEKeyboardShortcutManager.m
  24. 13 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEMapViewController.h
  25. 116 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEMapViewController.m
  26. 25 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEShakeGestureManager.h
  27. 78 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEShakeGestureManager.m
  28. 30 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEURLSessionConfiguration.h
  29. 64 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEURLSessionConfiguration.m
  30. 13 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/UIWindow+NEExtension.h
  31. 42 0
      MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/UIWindow+NEExtension.m
  32. 113 0
      MiMoLive/Pods/NetworkEye/README.md
  33. 4640 4583
      MiMoLive/Pods/Pods.xcodeproj/project.pbxproj
  34. 26 0
      MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye-Info.plist
  35. 5 0
      MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye-dummy.m
  36. 12 0
      MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye-prefix.pch
  37. 27 0
      MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye-umbrella.h
  38. 13 0
      MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye.debug.xcconfig
  39. 6 0
      MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye.modulemap
  40. 13 0
      MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye.release.xcconfig
  41. 24 0
      MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-acknowledgements.markdown
  42. 30 0
      MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-acknowledgements.plist
  43. 1 0
      MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-frameworks-Debug-input-files.xcfilelist
  44. 1 0
      MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-frameworks-Debug-output-files.xcfilelist
  45. 1 0
      MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-frameworks.sh
  46. 0 0
      MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive.debug.xcconfig
  47. 2 1
      MiMoLive/podfile

+ 16 - 2
MiMoLive/MiMoLive.xcodeproj/project.pbxproj

@@ -76,6 +76,7 @@
 		3A8A05552E72D0A80081C87A /* MOPkRankSubView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A8A054F2E72D0A80081C87A /* MOPkRankSubView.m */; };
 		3A8A056E2E73B7F80081C87A /* MONewAnchorRankEntryView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A8A056D2E73B7F80081C87A /* MONewAnchorRankEntryView.m */; };
 		3A8A05872E745B920081C87A /* MORankNoDataView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A8A05862E745B920081C87A /* MORankNoDataView.m */; };
+		3A8A063B2E7A96430081C87A /* MOSystemAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A8A063A2E7A96430081C87A /* MOSystemAlertView.m */; };
 		3A9160D42DD8DA380070C668 /* MORedPacketInfoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A9160D32DD8DA380070C668 /* MORedPacketInfoView.m */; };
 		3A9160D62DD9B8A40070C668 /* gif_diamond_drop.gif in Resources */ = {isa = PBXBuildFile; fileRef = 3A9160D52DD9B8A40070C668 /* gif_diamond_drop.gif */; };
 		3A9160D82DD9E41A0070C668 /* gif_send_red_packet.gif in Resources */ = {isa = PBXBuildFile; fileRef = 3A9160D72DD9E41A0070C668 /* gif_send_red_packet.gif */; };
@@ -1939,6 +1940,8 @@
 		3A8A056D2E73B7F80081C87A /* MONewAnchorRankEntryView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MONewAnchorRankEntryView.m; sourceTree = "<group>"; };
 		3A8A05852E745B920081C87A /* MORankNoDataView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MORankNoDataView.h; sourceTree = "<group>"; };
 		3A8A05862E745B920081C87A /* MORankNoDataView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MORankNoDataView.m; sourceTree = "<group>"; };
+		3A8A06392E7A96430081C87A /* MOSystemAlertView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MOSystemAlertView.h; sourceTree = "<group>"; };
+		3A8A063A2E7A96430081C87A /* MOSystemAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MOSystemAlertView.m; sourceTree = "<group>"; };
 		3A9160D22DD8DA380070C668 /* MORedPacketInfoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MORedPacketInfoView.h; sourceTree = "<group>"; };
 		3A9160D32DD8DA380070C668 /* MORedPacketInfoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MORedPacketInfoView.m; sourceTree = "<group>"; };
 		3A9160D52DD9B8A40070C668 /* gif_diamond_drop.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = gif_diamond_drop.gif; sourceTree = "<group>"; };
@@ -5201,6 +5204,15 @@
 			path = NewPKRank;
 			sourceTree = "<group>";
 		};
+		3A8A06382E7A95710081C87A /* MOSystemAlertView */ = {
+			isa = PBXGroup;
+			children = (
+				3A8A06392E7A96430081C87A /* MOSystemAlertView.h */,
+				3A8A063A2E7A96430081C87A /* MOSystemAlertView.m */,
+			);
+			path = MOSystemAlertView;
+			sourceTree = "<group>";
+		};
 		3AA04C462DFAAD6C00127676 /* NewUser */ = {
 			isa = PBXGroup;
 			children = (
@@ -9585,6 +9597,7 @@
 		A6A63E8E2AF380AC009ED032 /* AlertView */ = {
 			isa = PBXGroup;
 			children = (
+				3A8A06382E7A95710081C87A /* MOSystemAlertView */,
 				A669B15D2C8EE2D00065EDD2 /* FirshRecharge */,
 				A6F3FBF22C33F64C00602D14 /* MODiamondWinAlertView */,
 				A6AD071B2C0F0CBE00A155CF /* MOGetGiftView */,
@@ -13229,6 +13242,7 @@
 				A61A8D222D22881A00D71489 /* QGHWDMetalRenderer.m in Sources */,
 				A6A08FB62B3933D900ECE79D /* MOMedalList.m in Sources */,
 				A6FC20F82B3D8C75001F4CC0 /* UIImageView+BarrageView.m in Sources */,
+				3A8A063B2E7A96430081C87A /* MOSystemAlertView.m in Sources */,
 				A6F0F5292CD8A46A0047B965 /* EaseMessageStatusView.m in Sources */,
 				3A1FDD9F2D58B2EB0042DDF2 /* UIImage+Extension.m in Sources */,
 				A6F0F5BE2CD8A46A0047B965 /* EaseTextFieldViewController.m in Sources */,
@@ -14287,7 +14301,7 @@
 				CODE_SIGN_ENTITLEMENTS = MiMoLive/MiMoLive.entitlements;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 2;
+				CURRENT_PROJECT_VERSION = 3;
 				DEFINES_MODULE = "$(inherited)";
 				DEVELOPMENT_TEAM = 5H8D98R72W;
 				ENABLE_BITCODE = NO;
@@ -14442,7 +14456,7 @@
 				CODE_SIGN_ENTITLEMENTS = MiMoLive/MiMoLive.entitlements;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 2;
+				CURRENT_PROJECT_VERSION = 3;
 				DEFINES_MODULE = "$(inherited)";
 				DEVELOPMENT_TEAM = 5H8D98R72W;
 				ENABLE_BITCODE = NO;

+ 16 - 1
MiMoLive/MiMoLive/AppDelegate.m

@@ -46,6 +46,7 @@
 #if DEBUG
 #import "MOLogFormatter.h"
 #import "DoraemonKit.h"
+#import "NEHTTPEye.h"
 #endif
 
 
@@ -63,6 +64,7 @@
     
 #if DEBUG
     [self setupLogger];
+    [self setupNetworkMonitor];
 #endif
     
     //IQKeyboardManager
@@ -735,9 +737,14 @@ fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
                 
                 NSString *decodedString = [webUrlStr stringByRemovingPercentEncoding];
                 
+                BOOL isShowTitle = YES;
+                if([decodedString containsString:@"FullScreen=1"]){
+                    isShowTitle = NO;
+                }
+                
                 MOWebViewController *vc = [[MOWebViewController alloc] init];
                 vc.webUrl = [NSURL URLWithString:decodedString];
-                vc.isShowTitle = YES;
+                vc.isShowTitle = isShowTitle;
                 vc.hidesBottomBarWhenPushed = YES;
                 UIViewController *currentVC = [MOTools currentViewController];
                 [currentVC.navigationController pushViewController:vc animated:YES];
@@ -1125,6 +1132,14 @@ fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
     [DDLog addLogger:fileLogger];
 }
 
+- (void)setupNetworkMonitor {
+    [NSURLProtocol registerClass:[NEHTTPEye class]];
+    if ([[NSUserDefaults standardUserDefaults] objectForKey:@"NetworkEyeEnable"] == nil) {
+        // 默认开启
+        [[NEHTTPEye class] setEnabled:YES];
+    }
+}
+
 #endif
 
 @end

+ 33 - 0
MiMoLive/MiMoLive/Classes/Base/AlertView/MOSystemAlertView/MOSystemAlertView.h

@@ -0,0 +1,33 @@
+//
+//  MOSystemAlertView.h
+//  MiMoLive
+//
+//  Created by MiMo on 2025/9/17.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MOSystemAlertView : UIView
+
+@property (nonatomic, copy) void (^confirmBlock) (void);
+
+@property (nonatomic, copy) void (^cancelBlock) (void);
+
+@property (nonatomic, copy) NSString *titleText;//标题
+@property (nonatomic, copy) NSString *contentText;//内容
+@property (nonatomic, copy) NSString *cancelButtonText;//取消文案(左边按钮)
+@property (nonatomic, copy) NSString *confirmButtonText;//确认文案(右边按钮)
+
+/** 是否单个按钮 */
+@property (nonatomic, assign) BOOL isSingleBtn;
+
+///view展示
+- (void)show;
+///view隐藏
+- (void)dismiss;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 277 - 0
MiMoLive/MiMoLive/Classes/Base/AlertView/MOSystemAlertView/MOSystemAlertView.m

@@ -0,0 +1,277 @@
+//
+//  MOSystemAlertView.m
+//  MiMoLive
+//
+//  Created by MiMo on 2025/9/17.
+//
+
+#define kContentViewWidth kScaleWidth(295)
+
+#import "MOSystemAlertView.h"
+
+@interface MOSystemAlertView()
+
+@property (nonatomic, strong) UIView *bgView;
+@property (nonatomic, strong) UIView *contentView;
+@property (nonatomic, strong) UILabel *titleLabel;
+@property (nonatomic, strong) UILabel *contentLabel;
+@property (nonatomic, strong) UIView *hLineView;//横线
+@property (nonatomic, strong) UIView *vLineView;//竖线
+@property (nonatomic, strong) UIButton *cancelButton;
+@property (nonatomic, strong) UIButton *confirmButton;
+
+@end
+
+@implementation MOSystemAlertView
+
+- (instancetype)init {
+    if (self = [super init]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIWindow *keyWindow = [[UIApplication sharedApplication] delegate].window;
+    [keyWindow addSubview:self.bgView];
+    [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.bottom.right.equalTo(keyWindow);
+    }];
+    
+    [keyWindow addSubview:self.contentView];
+    [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.width.mas_equalTo(kContentViewWidth);
+        make.center.mas_equalTo(0);
+        make.height.mas_equalTo(116);
+    }];
+    
+    [self.contentView addSubview:self.titleLabel];
+    [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(24);
+        make.centerX.mas_equalTo(0);
+        make.left.mas_equalTo(20);
+        make.right.mas_equalTo(-20);
+    }];
+    
+    [self.contentView addSubview:self.contentLabel];
+    [self.contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.titleLabel.mas_bottom).offset(8);//忽略行间距,暂时用8
+        make.centerX.mas_equalTo(0);
+        make.left.mas_equalTo(20);
+        make.right.mas_equalTo(-20);
+    }];
+    
+    [self.contentView addSubview:self.hLineView];
+    [self.hLineView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(0);
+        make.bottom.mas_equalTo(-44);
+        make.height.mas_equalTo(1);
+    }];
+    
+    [self.contentView addSubview:self.vLineView];
+    [self.vLineView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.mas_equalTo(0);
+        make.width.mas_equalTo(1);
+        make.top.equalTo(self.hLineView.mas_bottom);
+        make.bottom.mas_equalTo(0);
+    }];
+    
+    [self.contentView addSubview:self.cancelButton];
+    [self.cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.hLineView.mas_bottom);
+        make.left.bottom.mas_equalTo(0);
+        make.width.equalTo(self.contentView.mas_width).multipliedBy(0.5);
+    }];
+    
+    [self.contentView addSubview:self.confirmButton];
+    [self.confirmButton mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.hLineView.mas_bottom);
+        make.right.bottom.mas_equalTo(0);
+        make.width.equalTo(self.contentView.mas_width).multipliedBy(0.5);
+    }];
+}
+
+- (void)cancelButtonAction {
+    if (self.cancelBlock) {
+        self.cancelBlock();
+    }
+    [self dismiss];
+}
+
+- (void)confirmButtonAction {
+    if (self.confirmBlock) {
+        self.confirmBlock();
+    }
+    [self dismiss];
+}
+
+- (void)setIsSingleBtn:(BOOL)isSingleBtn {
+    _isSingleBtn = isSingleBtn;
+    
+    if (isSingleBtn) {
+        self.cancelButton.hidden = YES;
+        self.vLineView.hidden = YES;
+
+        [self.confirmButton mas_remakeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.hLineView.mas_bottom);
+            make.right.bottom.mas_equalTo(0);
+            make.width.equalTo(self.contentView.mas_width).multipliedBy(1.0);
+        }];
+    }
+}
+
+- (void)setTitleText:(NSString *)titleText {
+    _titleText = titleText;
+    
+    self.titleLabel.text = titleText;
+}
+
+- (void)setContentText:(NSString *)contentText {
+    _contentText = contentText;
+    
+    self.contentLabel.text = contentText;
+}
+
+- (void)setCancelButtonText:(NSString *)cancelButtonText {
+    _cancelButtonText = cancelButtonText;
+    
+    [self.cancelButton setTitle:cancelButtonText forState:UIControlStateNormal];
+}
+
+- (void)setConfirmButtonText:(NSString *)confirmButtonText {
+    _confirmButtonText = confirmButtonText;
+    
+    [self.confirmButton setTitle:confirmButtonText forState:UIControlStateNormal];
+}
+
+- (void)calculateHeight{
+    //标题高度
+    CGFloat titleHeight = [MOTools calculateRowHeight:self.titleLabel.text font:self.titleLabel.font andWidth:kContentViewWidth - 40];
+    
+    CGFloat contentHeight = 0;
+    if (self.contentLabel.text.length > 0) {
+        contentHeight = [MOTools calculateRowHeight:self.contentLabel.text font:self.contentLabel.font andWidth:kContentViewWidth - 40];;
+    }
+    
+    //标题顶部距离
+    CGFloat titleTopSpacing = 24.0;
+    //内容占用距离
+    CGFloat contentLabelHeight = (contentHeight > 0) ? contentHeight + 5 : 0;//5是补偿行间距
+    //文字内容底部距离
+    CGFloat textBottomSpacing = 24.0;
+    //按钮高度
+    CGFloat buttonHeight = 44.0;
+    CGFloat contentViewHeight = titleTopSpacing + titleHeight + contentLabelHeight + textBottomSpacing + buttonHeight;
+    
+    [self.contentView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(contentViewHeight);
+    }];
+}
+
+- (void)show {
+    [self calculateHeight];
+    
+    UIWindow *keyWindow = [[UIApplication sharedApplication] delegate].window;
+    [keyWindow addSubview:self];
+    //动画效果
+    self.contentView.transform = CGAffineTransformMakeScale(1.2, 1.2);
+    self.contentView.alpha = 0;
+    [UIView animateWithDuration:0.2 animations:^ {
+        self.contentView.transform = CGAffineTransformMakeScale(1.0, 1.0);
+        self.contentView.alpha = 1;
+    } completion:nil];
+}
+
+- (void)dismiss {
+    [UIView animateWithDuration:0.2 animations:^ {
+        self.contentView.transform = CGAffineTransformMakeScale(1.2, 1.2);
+        self.contentView.alpha = 0;
+    } completion:^(BOOL finished) {
+        if (finished) {
+            [self.bgView removeFromSuperview];
+            [self.contentView removeFromSuperview];
+            [self removeFromSuperview];
+        }
+    }];
+}
+
+#pragma mark - Lazy
+- (UIView *)bgView {
+    if (!_bgView) {
+        _bgView = [[UIView alloc] init];
+        _bgView.backgroundColor = [MOTools colorWithHexString:@"#000000" alpha:0.4];
+        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismiss)];
+        [_bgView addGestureRecognizer:tap];
+    }
+    return _bgView;
+}
+
+- (UIView *)contentView {
+    if (!_contentView) {
+        _contentView = [[UIView alloc] init];
+        _contentView.backgroundColor = [MOTools colorWithHexString:@"#FFFFFF"];
+        _contentView.layer.cornerRadius = 16;
+        _contentView.layer.masksToBounds = YES;
+    }
+    return _contentView;
+}
+
+- (UILabel *)titleLabel {
+    if (!_titleLabel) {
+        _titleLabel = [[UILabel alloc] init];
+        _titleLabel.font = [MOTextTools mediumFont:16];
+        _titleLabel.textColor = kBaseTextColor_1;
+        _titleLabel.textAlignment = NSTextAlignmentCenter;
+        _titleLabel.numberOfLines = 0;
+    }
+    return _titleLabel;
+}
+
+- (UILabel *)contentLabel {
+    if (!_contentLabel) {
+        _contentLabel = [[UILabel alloc] init];
+        _contentLabel.font = [MOTextTools regularFont:14];
+        _contentLabel.textColor = [MOTools colorWithHexString:@"#5C5E66"];
+        _contentLabel.textAlignment = NSTextAlignmentCenter;
+        _contentLabel.numberOfLines = 0;
+    }
+    return _contentLabel;
+}
+
+- (UIButton *)cancelButton {
+    if (!_cancelButton) {
+        _cancelButton = [[UIButton alloc] init];
+        _cancelButton.titleLabel.font = [MOTextTools regularFont:16];
+        [_cancelButton setTitleColor:[MOTools colorWithHexString:@"#5C5E66"] forState:UIControlStateNormal];
+        [_cancelButton addTarget:self action:@selector(cancelButtonAction) forControlEvents:UIControlEventTouchUpInside];
+    }
+    return _cancelButton;
+}
+
+- (UIButton *)confirmButton {
+    if (!_confirmButton) {
+        _confirmButton = [[UIButton alloc] init];
+        _confirmButton.titleLabel.font = [MOTextTools mediumFont:16];
+        [_confirmButton setTitleColor:[MOTools colorWithHexString:@"#4363FF"] forState:UIControlStateNormal];
+        [_confirmButton addTarget:self action:@selector(confirmButtonAction) forControlEvents:UIControlEventTouchUpInside];
+    }
+    return _confirmButton;
+}
+
+- (UIView *)hLineView {
+    if (!_hLineView) {
+        _hLineView = [[UIView alloc] init];
+        _hLineView.backgroundColor = [MOTools colorWithHexString:@"#DADCE6"];
+    }
+    return _hLineView;
+}
+
+- (UIView *)vLineView {
+    if (!_vLineView) {
+        _vLineView = [[UIView alloc] init];
+        _vLineView.backgroundColor = [MOTools colorWithHexString:@"#DADCE6"];
+    }
+    return _vLineView;
+}
+
+@end

+ 1 - 1
MiMoLive/MiMoLive/Classes/Explore/MORankListVC.m

@@ -92,7 +92,7 @@
     }
     else{
         //贡献
-        vc.urlStr = [NSString stringWithFormat:@"%@/?showType=contribution#/listRule",kNetPath_Web_Base];
+        vc.urlStr = [NSString stringWithFormat:@"%@/?showType=wealth#/listRule",kNetPath_Web_Base];
     }
     [self.navigationController pushViewController:vc animated:YES];
     

+ 2 - 4
MiMoLive/MiMoLive/Classes/Live/MOShowLiveVC.m

@@ -3428,7 +3428,7 @@ static int levetTemp = 5;
             
             //Set方法 刷新界面的逻辑
             weakSelf.liveModel = [MOLiveDetail modelObjectWithDictionary:data[@"data"]];
-            if (!self.isCreatLive && weakSelf.liveModel.statusInfo.roomStatus.suspendExpire > 0) {//如果有暂停直播
+            if (!weakSelf.isCreatLive && weakSelf.liveModel.statusInfo.roomStatus.suspendExpire > 0) {//如果有暂停直播
                 [MOMinimizeManager shareManager].canShowLive = NO;
             }
 
@@ -3450,7 +3450,7 @@ static int levetTemp = 5;
             if(code == 20004){
                 [MOMinimizeManager shareManager].popLiveType = MOPopLiveTypeClose;
                 //直播间已经关闭
-                NSString *errorString = [MODataManager objectOrNilForKey:@"msg" fromDictionary:data];\
+                NSString *errorString = [MODataManager objectOrNilForKey:@"msg" fromDictionary:data];
                 if(errorString.length > 0){
                     [MBProgressHUD showTipMessageInWindow:errorString timer:1.5];
                     
@@ -4711,8 +4711,6 @@ static int mainRTMJoinNum = 0;
                 
             }
             else{
-                WEAKSELF
-                
                 //加入PK频道的RTC成功
                 [[MOShowAgoraKitManager shareManager] setupPkRemoteVideoWidhChannelId:targetChannelId UId:pkAgoraId CanvasView:weakSelf.liveView.canvasView.pkView];
             }

+ 7 - 1
MiMoLive/Podfile.lock

@@ -96,6 +96,9 @@ PODS:
     - MOBFoundation (>= 3.2.9)
   - MOBFoundation (20250317):
     - FlyVerifyCSDK (>= 0.0.7)
+  - NetworkEye (1.1.2):
+    - NetworkEye/standard (= 1.1.2)
+  - NetworkEye/standard (1.1.2)
   - Protobuf (3.26.1)
   - ReactiveObjC (3.1.1)
   - SDWebImage (5.21.0):
@@ -180,6 +183,7 @@ DEPENDENCIES:
   - mob_sharesdk/ShareSDKPlatforms/Twitter
   - mob_sharesdk/ShareSDKPlatforms/WhatsApp
   - mob_sharesdk/ShareSDKUI
+  - NetworkEye
   - SDWebImage
   - SDWebImageWebPCoder
   - SnapKit
@@ -216,6 +220,7 @@ SPEC REPOS:
     - MJRefresh
     - mob_sharesdk
     - MOBFoundation
+    - NetworkEye
     - Protobuf
     - ReactiveObjC
     - SDWebImage
@@ -269,6 +274,7 @@ SPEC CHECKSUMS:
   MJRefresh: 2fe7fb43a5167ceda20bb7e63f130c04fd1814a5
   mob_sharesdk: aadc80384425b84d59aaabfe0b4ddfacab69c424
   MOBFoundation: 82dbbc7a13ff26b189e48cc3aa09292128c8ccfd
+  NetworkEye: c7b02c29eef8f9f33555bf96d265bcd24d14f6d4
   Protobuf: a53f5173a603075b3522a5c50be63a67a5f3353a
   ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040
   SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868
@@ -285,6 +291,6 @@ SPEC CHECKSUMS:
   TZImagePickerController: 456f470b5dea97b37226ec7a694994a8663340b2
   YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7
 
-PODFILE CHECKSUM: 01e805681f2ff62f506338332a2b3f04e1e79101
+PODFILE CHECKSUM: 36a1a219285c90bf4fce8abfbae6b5337aec20c9
 
 COCOAPODS: 1.16.2

+ 7 - 1
MiMoLive/Pods/Manifest.lock

@@ -96,6 +96,9 @@ PODS:
     - MOBFoundation (>= 3.2.9)
   - MOBFoundation (20250317):
     - FlyVerifyCSDK (>= 0.0.7)
+  - NetworkEye (1.1.2):
+    - NetworkEye/standard (= 1.1.2)
+  - NetworkEye/standard (1.1.2)
   - Protobuf (3.26.1)
   - ReactiveObjC (3.1.1)
   - SDWebImage (5.21.0):
@@ -180,6 +183,7 @@ DEPENDENCIES:
   - mob_sharesdk/ShareSDKPlatforms/Twitter
   - mob_sharesdk/ShareSDKPlatforms/WhatsApp
   - mob_sharesdk/ShareSDKUI
+  - NetworkEye
   - SDWebImage
   - SDWebImageWebPCoder
   - SnapKit
@@ -216,6 +220,7 @@ SPEC REPOS:
     - MJRefresh
     - mob_sharesdk
     - MOBFoundation
+    - NetworkEye
     - Protobuf
     - ReactiveObjC
     - SDWebImage
@@ -269,6 +274,7 @@ SPEC CHECKSUMS:
   MJRefresh: 2fe7fb43a5167ceda20bb7e63f130c04fd1814a5
   mob_sharesdk: aadc80384425b84d59aaabfe0b4ddfacab69c424
   MOBFoundation: 82dbbc7a13ff26b189e48cc3aa09292128c8ccfd
+  NetworkEye: c7b02c29eef8f9f33555bf96d265bcd24d14f6d4
   Protobuf: a53f5173a603075b3522a5c50be63a67a5f3353a
   ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040
   SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868
@@ -285,6 +291,6 @@ SPEC CHECKSUMS:
   TZImagePickerController: 456f470b5dea97b37226ec7a694994a8663340b2
   YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7
 
-PODFILE CHECKSUM: 01e805681f2ff62f506338332a2b3f04e1e79101
+PODFILE CHECKSUM: 36a1a219285c90bf4fce8abfbae6b5337aec20c9
 
 COCOAPODS: 1.16.2

+ 21 - 0
MiMoLive/Pods/NetworkEye/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 coderyi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 28 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEye.h

@@ -0,0 +1,28 @@
+//
+//  NEHTTPEye.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/3.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#define kSQLitePassword @"networkeye"
+#define kSaveRequestMaxCount 300
+
+@interface NEHTTPEye : NSURLProtocol
+/**
+ *  open or close HTTP/HTTPS monitor
+ *
+ *  @param enabled
+ */
++ (void)setEnabled:(BOOL)enabled;
+
+/**
+ *  display HTTP/HTTPS monitor state
+ *
+ *  @return HTTP/HTTPS monitor state
+ */
++ (BOOL)isEnabled;
+@end

+ 250 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEye.m

@@ -0,0 +1,250 @@
+//
+//  NEHTTPEye.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/3.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "NEHTTPEye.h"
+
+#import "NEHTTPModel.h"
+#import "NEHTTPModelManager.h"
+#import "UIWindow+NEExtension.h"
+#import "NEURLSessionConfiguration.h"
+#import "NEKeyboardShortcutManager.h"
+#import "NEHTTPEyeViewController.h"
+@interface NEHTTPEye ()<NSURLConnectionDelegate, NSURLConnectionDataDelegate>
+@property (nonatomic, strong) NSURLConnection *connection;
+@property (nonatomic, strong) NSURLResponse *response;
+@property (nonatomic, strong) NSMutableData *data;
+@property (nonatomic, strong) NSDate *startDate;
+@property (nonatomic,strong) NEHTTPModel *ne_HTTPModel;
+@end
+
+@implementation NEHTTPEye
+@synthesize ne_HTTPModel;
+#pragma mark - public
++ (void)setEnabled:(BOOL)enabled {
+    [[NSUserDefaults standardUserDefaults] setDouble:enabled forKey:@"NetworkEyeEnable"];
+    [[NSUserDefaults standardUserDefaults] synchronize];
+    NEURLSessionConfiguration * sessionConfiguration=[NEURLSessionConfiguration defaultConfiguration];
+
+    if (enabled) {
+        [NSURLProtocol registerClass:[NEHTTPEye class]];
+        if (![sessionConfiguration isSwizzle]) {
+            [sessionConfiguration load];
+        }
+    }else{
+        [NSURLProtocol unregisterClass:[NEHTTPEye class]];
+        if ([sessionConfiguration isSwizzle]) {
+            [sessionConfiguration unload];
+        }
+    }
+#if TARGET_OS_SIMULATOR
+    [NEKeyboardShortcutManager sharedManager].enabled = enabled;
+    [[NEKeyboardShortcutManager sharedManager] registerSimulatorShortcutWithKey:@"n" modifiers:UIKeyModifierCommand action:^{
+        NEHTTPEyeViewController *viewController = [[NEHTTPEyeViewController alloc] init];
+        [[[[[UIApplication sharedApplication] delegate] window] rootViewController]
+         presentViewController:viewController animated:YES completion:nil];
+    } description:nil];
+#endif
+}
+
++ (BOOL)isEnabled {
+    return [[[NSUserDefaults standardUserDefaults] objectForKey:@"NetworkEyeEnable"] boolValue];
+}
+#pragma mark - superclass methods
+- (instancetype)init {
+    self = [super init];
+    if (self) {
+    }
+    return self;
+}
+
++ (void)load {
+ 
+}
+
++ (BOOL)canInitWithRequest:(NSURLRequest *)request {
+    if (![request.URL.scheme isEqualToString:@"http"] &&
+        ![request.URL.scheme isEqualToString:@"https"]) {
+        return NO;
+    }
+    
+    if ([NSURLProtocol propertyForKey:@"NEHTTPEye" inRequest:request] ) {
+        return NO;
+    }
+    return YES;
+}
+
++ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
+    
+    NSMutableURLRequest *mutableReqeust = [request mutableCopy];
+    [NSURLProtocol setProperty:@YES
+                        forKey:@"NEHTTPEye"
+                     inRequest:mutableReqeust];
+    return [mutableReqeust copy];
+}
+
+- (void)startLoading {
+    self.startDate = [NSDate date];
+    self.data = [NSMutableData data];
+    
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    self.connection = [[NSURLConnection alloc] initWithRequest:[[self class] canonicalRequestForRequest:self.request] delegate:self startImmediately:YES];
+#pragma clang diagnostic pop
+   
+    ne_HTTPModel=[[NEHTTPModel alloc] init];
+    ne_HTTPModel.ne_request=self.request;
+    ne_HTTPModel.startDateString=[self stringWithDate:[NSDate date]];
+
+    NSTimeInterval myID=[[NSDate date] timeIntervalSince1970];
+    double randomNum=((double)(arc4random() % 100))/10000;
+    ne_HTTPModel.myID=myID+randomNum;
+}
+
+- (void)stopLoading {
+    [self.connection cancel];
+    ne_HTTPModel.ne_response=(NSHTTPURLResponse *)self.response;
+    ne_HTTPModel.endDateString=[self stringWithDate:[NSDate date]];
+    NSString *mimeType = self.response.MIMEType;
+    if ([mimeType isEqualToString:@"application/json"]) {
+        ne_HTTPModel.receiveJSONData = [self responseJSONFromData:self.data];
+    } else if ([mimeType isEqualToString:@"text/javascript"]) {
+        // try to parse json if it is jsonp request
+        NSString *jsonString = [[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding];
+        // formalize string
+        if ([jsonString hasSuffix:@")"]) {
+            jsonString = [NSString stringWithFormat:@"%@;", jsonString];
+        }
+        if ([jsonString hasSuffix:@");"]) {
+            NSRange range = [jsonString rangeOfString:@"("];
+            if (range.location != NSNotFound) {
+                range.location++;
+                range.length = [jsonString length] - range.location - 2; // removes parens and trailing semicolon
+                jsonString = [jsonString substringWithRange:range];
+                NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
+                ne_HTTPModel.receiveJSONData = [self responseJSONFromData:jsonData];
+            }
+        }
+        
+    }else if ([mimeType isEqualToString:@"application/xml"] ||[mimeType isEqualToString:@"text/xml"]){
+        NSString *xmlString = [[NSString alloc]initWithData:self.data encoding:NSUTF8StringEncoding];
+        if (xmlString && xmlString.length>0) {
+            ne_HTTPModel.receiveJSONData = xmlString;//example http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=2121
+        }
+    }
+    double flowCount=[[[NSUserDefaults standardUserDefaults] objectForKey:@"flowCount"] doubleValue];
+    if (!flowCount) {
+        flowCount=0.0;
+    }
+    flowCount=flowCount+self.response.expectedContentLength/(1024.0*1024.0);
+    [[NSUserDefaults standardUserDefaults] setDouble:flowCount forKey:@"flowCount"];
+    [[NSUserDefaults standardUserDefaults] synchronize];//https://github.com/coderyi/NetworkEye/pull/6
+    [[NEHTTPModelManager defaultManager] addModel:ne_HTTPModel];
+}
+
+#pragma mark - NSURLConnectionDelegate
+
+- (void)connection:(NSURLConnection *)connection
+  didFailWithError:(NSError *)error {
+    [[self client] URLProtocol:self didFailWithError:error];
+}
+
+- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection {
+    return YES;
+}
+
+- (void)connection:(NSURLConnection *)connection
+didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
+    [[self client] URLProtocol:self didReceiveAuthenticationChallenge:challenge];
+}
+
+- (void)connection:(NSURLConnection *)connection
+didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
+    [[self client] URLProtocol:self didCancelAuthenticationChallenge:challenge];
+}
+
+#pragma mark - NSURLConnectionDataDelegate
+- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
+    if (response != nil){
+        self.response = response;
+        [[self client] URLProtocol:self wasRedirectedToRequest:request redirectResponse:response];
+    }
+    return request;
+}
+
+- (void)connection:(NSURLConnection *)connection
+didReceiveResponse:(NSURLResponse *)response {
+    [[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];
+    self.response = response;
+}
+
+- (void)connection:(NSURLConnection *)connection
+    didReceiveData:(NSData *)data {
+    NSString *mimeType = self.response.MIMEType;
+    if ([mimeType isEqualToString:@"application/json"]) {
+        NSArray *allMapRequests = [[NEHTTPModelManager defaultManager] allMapObjects];
+        for (NSInteger i=0; i < allMapRequests.count; i++) {
+            NEHTTPModel *req = [allMapRequests objectAtIndex:i];
+            if ([[ne_HTTPModel.ne_request.URL absoluteString] containsString:req.mapPath]) {
+                NSData *jsonData = [req.mapJSONData dataUsingEncoding:NSUTF8StringEncoding];
+                [[self client] URLProtocol:self didLoadData:jsonData];
+                [self.data appendData:jsonData];
+                return;
+
+            }
+        }
+    }
+    [[self client] URLProtocol:self didLoadData:data];
+    [self.data appendData:data];
+}
+
+- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
+                  willCacheResponse:(NSCachedURLResponse *)cachedResponse {
+    return cachedResponse;
+}
+
+- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
+    [[self client] URLProtocolDidFinishLoading:self];
+}
+
+#pragma mark - Utils
+
+-(id)responseJSONFromData:(NSData *)data {
+    if(data == nil) return nil;
+    NSError *error = nil;
+    id returnValue = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
+    if(error) {
+        NSLog(@"JSON Parsing Error: %@", error);
+        //https://github.com/coderyi/NetworkEye/issues/3
+        return nil;
+    }
+    //https://github.com/coderyi/NetworkEye/issues/1
+    if (!returnValue || returnValue == [NSNull null]) {
+        return nil;
+    }
+
+    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:returnValue options:NSJSONWritingPrettyPrinted error:nil];
+    NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
+    return jsonString;
+}
+
+- (NSString *)stringWithDate:(NSDate *)date {
+    NSString *destDateString = [[NEHTTPEye defaultDateFormatter] stringFromDate:date];
+    return destDateString;
+}
+
++ (NSDateFormatter *)defaultDateFormatter {
+    static NSDateFormatter *staticDateFormatter;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        staticDateFormatter=[[NSDateFormatter alloc] init];
+        [staticDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];//zzz表示时区,zzz可以删除,这样返回的日期字符将不包含时区信息。
+    });
+    return staticDateFormatter;
+}
+
+@end

+ 19 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeDetailViewController.h

@@ -0,0 +1,19 @@
+//
+//  NEHTTPEyeDetailViewController.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/4.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class NEHTTPModel;
+
+@interface NEHTTPEyeDetailViewController : UIViewController
+/**
+ *  detail page's data model,about request,response and data
+ */
+@property (nonatomic,strong) NEHTTPModel *model;
+
+@end

+ 407 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeDetailViewController.m

@@ -0,0 +1,407 @@
+//
+//  NEHTTPEyeDetailViewController.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/4.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "NEHTTPEyeDetailViewController.h"
+#import "NEMapViewController.h"
+#import "NEHTTPModel.h"
+@interface NEHTTPEyeDetailViewController (){
+
+    UITextView *mainTextView;
+
+}
+
+@end
+
+@implementation NEHTTPEyeDetailViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    BOOL isiPhoneX = (([[UIScreen mainScreen] bounds].size.width == 375.f && [[UIScreen mainScreen] bounds].size.height == 812.f) || ([[UIScreen mainScreen] bounds].size.height == 375.f && [[UIScreen mainScreen] bounds].size.width == 812.f));
+
+    if ([[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0) {
+        self.edgesForExtendedLayout = UIRectEdgeBottom | UIRectEdgeLeft | UIRectEdgeRight;
+        
+    }
+    self.automaticallyAdjustsScrollViewInsets=NO;
+    self.view.backgroundColor=[UIColor whiteColor];
+
+    UIView *bar=[[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 64+(isiPhoneX?24:0))];
+    [self.view addSubview:bar];
+    bar.backgroundColor=[UIColor colorWithRed:0.24f green:0.51f blue:0.78f alpha:1.00f];
+    
+    UIButton *backBt=[UIButton buttonWithType:UIButtonTypeCustom];
+    backBt.frame=CGRectMake(10, 27+(isiPhoneX?24:0), 40, 30);
+    [backBt setTitle:@"back" forState:UIControlStateNormal];
+    backBt.titleLabel.font=[UIFont systemFontOfSize:15];
+    [backBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    [backBt addTarget:self action:@selector(backBtAction) forControlEvents:UIControlEventTouchUpInside];
+    [bar addSubview:backBt];
+    
+    UIButton *mapBt=[UIButton buttonWithType:UIButtonTypeCustom];
+    mapBt.frame=CGRectMake([[UIScreen mainScreen] bounds].size.width-60, 27+(isiPhoneX?24:0), 50, 30);
+    [mapBt setTitle:@"map" forState:UIControlStateNormal];
+    mapBt.titleLabel.font=[UIFont systemFontOfSize:13];
+    [mapBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    [mapBt addTarget:self action:@selector(rightAction) forControlEvents:UIControlEventTouchUpInside];
+    [bar addSubview:mapBt];
+    
+    UILabel *titleText = [[UILabel alloc] initWithFrame: CGRectMake(([[UIScreen mainScreen] bounds].size.width-230)/2, 20+(isiPhoneX?24:0), 230, 44)];
+    titleText.backgroundColor = [UIColor clearColor];
+    titleText.textColor=[UIColor whiteColor];
+    [titleText setFont:[UIFont systemFontOfSize:13.0]];
+    titleText.textAlignment=NSTextAlignmentCenter;
+    [bar addSubview:titleText];
+    titleText.text=_model.requestURLString;
+    
+    mainTextView=[[UITextView alloc] initWithFrame:CGRectMake(0, 64+(isiPhoneX?24:0), [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-64-(isiPhoneX?24:0))];
+    [self.view addSubview:mainTextView];
+    mainTextView.editable=NO;
+
+    [self setupAttributedString];
+}
+
+
+- (void)setupAttributedString{
+
+    NSAttributedString *startDateString;
+    NSAttributedString *endDateString;
+    NSAttributedString *requestURLString;
+    NSAttributedString *requestCachePolicyString;
+    NSAttributedString *requestTimeoutInterval;
+    NSAttributedString *requestHTTPMethod;
+    NSAttributedString *requestAllHTTPHeaderFields;
+    NSAttributedString *requestHTTPBody;
+    NSAttributedString *responseMIMEType;
+    NSAttributedString *responseExpectedContentLength;
+    NSAttributedString *responseTextEncodingName;
+    NSAttributedString *responseSuggestedFilename;
+    NSAttributedString *responseStatusCode;
+    NSAttributedString *responseAllHeaderFields;
+    NSAttributedString *receiveJSONData;
+    
+    NSAttributedString *startDateStringDetail;
+    NSAttributedString *endDateStringDetail;
+    NSAttributedString *requestURLStringDetail;
+    NSAttributedString *requestCachePolicyStringDetail;
+    NSAttributedString *requestTimeoutIntervalDetail;
+    NSAttributedString *requestHTTPMethodDetail;
+    NSAttributedString *requestAllHTTPHeaderFieldsDetail;
+    NSAttributedString *requestHTTPBodyDetail;
+    NSAttributedString *responseMIMETypeDetail;
+    NSAttributedString *responseExpectedContentLengthDetail;
+    NSAttributedString *responseTextEncodingNameDetail;
+    NSAttributedString *responseSuggestedFilenameDetail;
+    NSAttributedString *responseStatusCodeDetail;
+    NSAttributedString *responseAllHeaderFieldsDetail;
+    NSAttributedString *receiveJSONDataDetail;
+    
+    UIColor *titleColor=[UIColor colorWithRed:0.24f green:0.51f blue:0.78f alpha:1.00f];
+    UIFont *titleFont=[UIFont systemFontOfSize:14.0];
+    UIColor *detailColor=[UIColor blackColor];
+    UIFont *detailFont=[UIFont systemFontOfSize:14.0];
+    
+    startDateString = [[NSMutableAttributedString alloc] initWithString:@"[startDate]:"
+                                                       attributes:@{
+                                                                    NSFontAttributeName : titleFont,
+                                                                    NSForegroundColorAttributeName: titleColor
+                                                                    }];
+
+    endDateString = [[NSMutableAttributedString alloc] initWithString:@"[endDate]:"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    requestURLString = [[NSMutableAttributedString alloc] initWithString:@"[requestURL]\n"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    requestCachePolicyString = [[NSMutableAttributedString alloc] initWithString:@"[requestCachePolicy]\n"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    requestTimeoutInterval = [[NSMutableAttributedString alloc] initWithString:@"[requestTimeoutInterval]:"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    requestHTTPMethod = [[NSMutableAttributedString alloc] initWithString:@"[requestHTTPMethod]:"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    requestAllHTTPHeaderFields = [[NSMutableAttributedString alloc] initWithString:@"[requestAllHTTPHeaderFields]\n"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    requestHTTPBody = [[NSMutableAttributedString alloc] initWithString:@"[requestHTTPBody]\n"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    responseMIMEType = [[NSMutableAttributedString alloc] initWithString:@"[responseMIMEType]:"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    responseExpectedContentLength = [[NSMutableAttributedString alloc] initWithString:@"[responseExpectedContentLength]:"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    responseTextEncodingName = [[NSMutableAttributedString alloc] initWithString:@"[responseTextEncodingName]:"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    responseSuggestedFilename = [[NSMutableAttributedString alloc] initWithString:@"[responseSuggestedFilename]:"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    responseStatusCode = [[NSMutableAttributedString alloc] initWithString:@"[responseStatusCode]:"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    
+    responseAllHeaderFields = [[NSMutableAttributedString alloc] initWithString:@"[responseAllHeaderFields]\n"
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    if ([_model.responseMIMEType isEqualToString:@"application/xml"] ||[_model.responseMIMEType isEqualToString:@"text/xml"]) {
+        receiveJSONData = [[NSMutableAttributedString alloc] initWithString:@"[responseXML]\n"
+                                                                 attributes:@{
+                                                                              NSFontAttributeName : titleFont,
+                                                                              NSForegroundColorAttributeName: titleColor
+                                                                              }];
+    }else {
+        receiveJSONData = [[NSMutableAttributedString alloc] initWithString:@"[responseJSON]\n"
+                                                                 attributes:@{
+                                                                              NSFontAttributeName : titleFont,
+                                                                              NSForegroundColorAttributeName: titleColor
+                                                                              }];
+    }
+    
+    
+    
+    
+    //detail
+    
+    startDateStringDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",_model.startDateString]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    
+    
+    endDateStringDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n\n",_model.endDateString]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    
+    requestURLStringDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",_model.requestURLString]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    
+    
+    requestCachePolicyStringDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",_model.requestCachePolicy]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    
+    
+    requestTimeoutIntervalDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%lf\n",_model.requestTimeoutInterval]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    
+    
+    requestHTTPMethodDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",_model.requestHTTPMethod]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    
+    requestAllHTTPHeaderFieldsDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",_model.requestAllHTTPHeaderFields]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    
+    requestHTTPBodyDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n\n",_model.requestHTTPBody]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    responseMIMETypeDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",_model.responseMIMEType]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : detailFont,
+                                                                          NSForegroundColorAttributeName: detailColor
+                                                                          }];
+    responseExpectedContentLengthDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%.2lfKB\n",[_model.responseExpectedContentLength doubleValue]/1024.0]
+                                                                   attributes:@{
+                                                                                NSFontAttributeName : detailFont,
+                                                                                NSForegroundColorAttributeName: detailColor
+                                                                                }];
+    responseTextEncodingNameDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",_model.responseTextEncodingName]
+                                                                    attributes:@{
+                                                                                 NSFontAttributeName : detailFont,
+                                                                                 NSForegroundColorAttributeName: detailColor
+                                                                                 }];
+    responseSuggestedFilenameDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n",_model.responseSuggestedFilename]
+                                                                   attributes:@{
+                                                                                NSFontAttributeName : detailFont,
+                                                                                NSForegroundColorAttributeName: detailColor
+                                                                                }];
+    
+   
+    
+    UIColor *statusDetailColor=[UIColor colorWithRed:0.96 green:0.15 blue:0.11 alpha:1];
+    if (_model.responseStatusCode == 200) {
+        statusDetailColor=[UIColor colorWithRed:0.11 green:0.76 blue:0.13 alpha:1];
+    }
+    responseStatusCodeDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%d\n",_model.responseStatusCode]
+                                                                    attributes:@{
+                                                                                 NSFontAttributeName : detailFont,
+                                                                                 NSForegroundColorAttributeName: statusDetailColor
+                                                                                 }];
+    
+    responseAllHeaderFieldsDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n\n",_model.responseAllHeaderFields]
+                                                                             attributes:@{
+                                                                                          NSFontAttributeName : detailFont,
+                                                                                          NSForegroundColorAttributeName: detailColor
+                                                                                          }];
+    
+
+        NSString *transString = [[self class] replaceUnicode:_model.receiveJSONData];
+    receiveJSONDataDetail = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n\n",transString]
+                                                                      attributes:@{
+                                                                                   NSFontAttributeName : detailFont,
+                                                                                   NSForegroundColorAttributeName: detailColor
+                                                                                   }];
+    
+    
+    NSMutableAttributedString *attrText = [[NSMutableAttributedString alloc] init];
+    
+    [attrText appendAttributedString:startDateString];
+    [attrText appendAttributedString:startDateStringDetail];
+
+    [attrText appendAttributedString:endDateString];
+    [attrText appendAttributedString:endDateStringDetail];
+
+    [attrText appendAttributedString:requestURLString];
+    [attrText appendAttributedString:requestURLStringDetail];
+    
+    [attrText appendAttributedString:requestCachePolicyString];
+    [attrText appendAttributedString:requestCachePolicyStringDetail];
+    
+    [attrText appendAttributedString:requestTimeoutInterval];
+    [attrText appendAttributedString:requestTimeoutIntervalDetail];
+    
+    [attrText appendAttributedString:requestHTTPMethod];
+    [attrText appendAttributedString:requestHTTPMethodDetail];
+    
+    [attrText appendAttributedString:requestAllHTTPHeaderFields];
+    [attrText appendAttributedString:requestAllHTTPHeaderFieldsDetail];
+    
+    [attrText appendAttributedString:requestHTTPBody];
+    [attrText appendAttributedString:requestHTTPBodyDetail];
+    
+    [attrText appendAttributedString:responseMIMEType];
+    [attrText appendAttributedString:responseMIMETypeDetail];
+    
+    [attrText appendAttributedString:responseExpectedContentLength];
+    [attrText appendAttributedString:responseExpectedContentLengthDetail];
+    
+    [attrText appendAttributedString:responseTextEncodingName];
+    [attrText appendAttributedString:responseTextEncodingNameDetail];
+    
+    [attrText appendAttributedString:responseSuggestedFilename];
+    [attrText appendAttributedString:responseSuggestedFilenameDetail];
+    
+    [attrText appendAttributedString:responseStatusCode];
+    [attrText appendAttributedString:responseStatusCodeDetail];
+    
+    [attrText appendAttributedString:responseAllHeaderFields];
+    [attrText appendAttributedString:responseAllHeaderFieldsDetail];
+    
+    [attrText appendAttributedString:receiveJSONData];
+    [attrText appendAttributedString:receiveJSONDataDetail];
+
+    mainTextView.attributedText=attrText;
+    
+}
+- (void)backBtAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+    
+}
+
+- (void)rightAction {
+    NEMapViewController *map = [[NEMapViewController alloc] init];
+    map.model = _model;
+    [self presentViewController:map animated:YES completion:nil];
+}
+
+#pragma mark - Utils
+
+//unicode to utf-8
++ (NSString*) replaceUnicode:(NSString*)aUnicodeString {
+    
+    NSString *tempStr1 = [aUnicodeString stringByReplacingOccurrencesOfString:@"\\u"withString:@"\\U"];
+    NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\""withString:@"\\\""];
+    NSString *tempStr3 = [[@"\""stringByAppendingString:tempStr2] stringByAppendingString:@"\""];
+    NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];
+    
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    NSString* returnStr = [NSPropertyListSerialization propertyListFromData:tempData
+                           
+                                                          mutabilityOption:NSPropertyListImmutable
+                           
+                                                                    format:NULL
+                           
+                                                          errorDescription:NULL];
+#pragma clang diagnostic pop
+    
+    return [returnStr stringByReplacingOccurrencesOfString:@"\\r\\n"withString:@"\n"];
+    
+}
+
+@end

+ 13 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeSettingsViewController.h

@@ -0,0 +1,13 @@
+//
+//  NEHTTPEyeSettingsViewController.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/12.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface NEHTTPEyeSettingsViewController : UIViewController
+
+@end

+ 143 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeSettingsViewController.m

@@ -0,0 +1,143 @@
+//
+//  NEHTTPEyeSettingsViewController.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/12.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "NEHTTPEyeSettingsViewController.h"
+#import "NEHTTPEye.h"
+#import "NEHTTPModelManager.h"
+@interface NEHTTPEyeSettingsViewController ()<UITableViewDataSource,UITableViewDelegate,UIAlertViewDelegate>{
+
+    UITableView *mainTableView;
+}
+
+@end
+
+@implementation NEHTTPEyeSettingsViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    BOOL isiPhoneX = (([[UIScreen mainScreen] bounds].size.width == 375.f && [[UIScreen mainScreen] bounds].size.height == 812.f) || ([[UIScreen mainScreen] bounds].size.height == 375.f && [[UIScreen mainScreen] bounds].size.width == 812.f));
+
+    if ([[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0) {
+        self.edgesForExtendedLayout = UIRectEdgeBottom | UIRectEdgeLeft | UIRectEdgeRight;
+        
+    }
+    self.automaticallyAdjustsScrollViewInsets=NO;
+    self.view.backgroundColor=[UIColor whiteColor];
+    
+    UIView *bar=[[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 64+(isiPhoneX?24:0))];
+    [self.view addSubview:bar];
+    bar.backgroundColor=[UIColor colorWithRed:0.24f green:0.51f blue:0.78f alpha:1.00f];
+    
+    UIButton *backBt=[UIButton buttonWithType:UIButtonTypeCustom];
+    backBt.frame=CGRectMake(10, 27+(isiPhoneX?24:0), 40, 30);
+    [backBt setTitle:@"back" forState:UIControlStateNormal];
+    backBt.titleLabel.font=[UIFont systemFontOfSize:15];
+    [backBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    [backBt addTarget:self action:@selector(backBtAction) forControlEvents:UIControlEventTouchUpInside];
+    [bar addSubview:backBt];
+    
+    UILabel *titleText = [[UILabel alloc] initWithFrame: CGRectMake(([[UIScreen mainScreen] bounds].size.width-230)/2, 20+(isiPhoneX?24:0), 230, 44)];
+    titleText.backgroundColor = [UIColor clearColor];
+    titleText.textColor=[UIColor whiteColor];
+    [titleText setFont:[UIFont systemFontOfSize:15.0]];
+    titleText.textAlignment=NSTextAlignmentCenter;
+    [bar addSubview:titleText];
+    titleText.text=@"settings";
+
+    mainTableView=[[UITableView alloc] initWithFrame:CGRectMake(0, 64+(isiPhoneX?24:0), [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-64-(isiPhoneX?24:0)) style:UITableViewStyleGrouped];
+    [self.view addSubview:mainTableView];
+    mainTableView.dataSource=self;
+    mainTableView.delegate=self;
+}
+- (void)backBtAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+    
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    
+    return 3;
+    
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    UITableViewCell *cell;
+    
+    NSString *cellId=@"CellId";
+    cell=[tableView dequeueReusableCellWithIdentifier:cellId];
+    if (cell==nil) {
+        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
+        if (indexPath.row==0) {
+            UISwitch *switch1=[[UISwitch alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width-70, 7, 60, 40)];
+            [cell.contentView addSubview:switch1];
+            BOOL NetworkEyeEnable=[[[NSUserDefaults standardUserDefaults] objectForKey:@"NetworkEyeEnable"] boolValue];
+            switch1.on=NetworkEyeEnable;
+            [switch1 addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];
+        }
+    }
+    cell.textLabel.font=[UIFont systemFontOfSize:12];
+
+    if (indexPath.row==0) {
+        cell.textLabel.textColor=[UIColor blackColor];
+        cell.textLabel.text=@"NetworkEye Enable";
+    }else if (indexPath.row==1){
+        cell.textLabel.textColor=[UIColor colorWithRed:0.88 green:0.22 blue:0.22 alpha:1];
+        cell.textLabel.text=@"Clear All Maped Requests";
+    }else{
+        cell.textLabel.textColor=[UIColor colorWithRed:0.88 green:0.22 blue:0.22 alpha:1];
+        cell.textLabel.text=@"Clear Recorded Requests";
+    }
+
+    
+    return cell;
+    
+}
+
+- (void)switchAction:(UISwitch *)tempSwitch {
+    [[NSUserDefaults standardUserDefaults] setDouble:tempSwitch.on forKey:@"NetworkEyeEnable"];
+    [[NSUserDefaults standardUserDefaults] synchronize];
+    [NEHTTPEye setEnabled:tempSwitch.on];
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row==1) {
+        UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"message" message:@"Are you sure to delete it" delegate:self cancelButtonTitle:@"yes" otherButtonTitles:@"no", nil];
+        alertView.tag=101;
+        [alertView show];
+    }
+    if (indexPath.row==2) {
+        UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"message" message:@"Are you sure to delete it" delegate:self cancelButtonTitle:@"yes" otherButtonTitles:@"no", nil];
+        alertView.tag=102;
+        [alertView show];
+    }
+
+    
+}
+
+
+- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex NS_DEPRECATED_IOS(2_0, 9_0){
+    if(alertView.tag ==101){
+        if(buttonIndex==0){
+            [[NEHTTPModelManager defaultManager] removeAllMapObjects];
+        }
+        return;
+    }
+    if(buttonIndex==0){
+        [[NEHTTPModelManager defaultManager] deleteAllItem];
+    }
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+@end

+ 13 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeViewController.h

@@ -0,0 +1,13 @@
+//
+//  NEHTTPEyeViewController.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/4.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface NEHTTPEyeViewController : UIViewController
+
+@end

+ 342 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPEyeViewController.m

@@ -0,0 +1,342 @@
+//
+//  NEHTTPEyeViewController.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/4.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "NEHTTPEyeViewController.h"
+
+#import "NEHTTPModel.h"
+#import "NEHTTPModelManager.h"
+#import "NEHTTPEyeDetailViewController.h"
+#import "NEHTTPEyeSettingsViewController.h"
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
+@interface NEHTTPEyeViewController ()<UITableViewDataSource,UITableViewDelegate,UISearchDisplayDelegate,UISearchBarDelegate,UISearchControllerDelegate,UISearchResultsUpdating> {
+    UITableView *mainTableView;
+    NSArray *httpRequests;
+    UISearchBar *mySearchBar;
+    UISearchDisplayController *mySearchDisplayController;
+    UISearchController *mySearchController;
+    NSArray *filterHTTPRequests;
+    BOOL isiPhoneX;
+    BOOL isiPhone11;
+}
+
+@end
+
+@implementation NEHTTPEyeViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    isiPhoneX = (([[UIScreen mainScreen] bounds].size.width == 375.f && [[UIScreen mainScreen] bounds].size.height == 812.f) || ([[UIScreen mainScreen] bounds].size.height == 375.f && [[UIScreen mainScreen] bounds].size.width == 812.f));
+
+    self.automaticallyAdjustsScrollViewInsets=NO;
+    self.view.backgroundColor=[UIColor whiteColor];
+    
+    mainTableView=[[UITableView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-64-(isiPhoneX?24:0)) style:UITableViewStylePlain];
+    [self.view addSubview:mainTableView];
+    
+    double flowCount=[[[NSUserDefaults standardUserDefaults] objectForKey:@"flowCount"] doubleValue];
+    if (!flowCount) {
+        flowCount=0.0;
+    }
+    UIColor *titleColor=[UIColor whiteColor];
+    UIFont *titleFont=[UIFont systemFontOfSize:18.0];
+    UIColor *detailColor=[UIColor whiteColor];
+    UIFont *detailFont=[UIFont systemFontOfSize:12.0];
+    
+    NSMutableAttributedString *titleString = [[NSMutableAttributedString alloc] initWithString:@"NetworkEye\n"
+                                                                                    attributes:@{
+                                                                                                 NSFontAttributeName : titleFont,
+                                                                                                 NSForegroundColorAttributeName: titleColor
+                                                                                                 }];
+    
+    NSMutableAttributedString *flowCountString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"流量共%.1lfMB",flowCount]
+                                                                                        attributes:@{
+                                                                                                     NSFontAttributeName : detailFont,
+                                                                                                     NSForegroundColorAttributeName: detailColor
+                                                                                                     }];
+    
+    NSMutableAttributedString *attrText = [[NSMutableAttributedString alloc] init];
+    [attrText appendAttributedString:titleString];
+    [attrText appendAttributedString:flowCountString];
+    UILabel *titleText = [[UILabel alloc] initWithFrame: CGRectMake(([[UIScreen mainScreen] bounds].size.width-120)/2, 20+(isiPhoneX?24:0), 120, 44)];
+    titleText.backgroundColor = [UIColor clearColor];
+    titleText.textColor=[UIColor whiteColor];
+    titleText.textAlignment=NSTextAlignmentCenter;
+    titleText.numberOfLines=0;
+    titleText.attributedText=attrText;
+    
+    if ([self.navigationController viewControllers].count<1) {
+        UIView *bar=[[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 64+(isiPhoneX?24:0))];
+        [self.view addSubview:bar];
+        bar.backgroundColor=[UIColor colorWithRed:0.24f green:0.51f blue:0.78f alpha:1.00f];
+        
+        
+        UIButton *backBt=[UIButton buttonWithType:UIButtonTypeCustom];
+        backBt.frame=CGRectMake(10, 27+(isiPhoneX?24:0), 40, 30);
+        [backBt setTitle:@"back" forState:UIControlStateNormal];
+        backBt.titleLabel.font=[UIFont systemFontOfSize:15];
+        [backBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+        [backBt addTarget:self action:@selector(backBtAction) forControlEvents:UIControlEventTouchUpInside];
+        [bar addSubview:backBt];
+        
+        UIButton *settingsBt=[UIButton buttonWithType:UIButtonTypeCustom];
+        settingsBt.frame=CGRectMake([[UIScreen mainScreen] bounds].size.width-60, 27+(isiPhoneX?24:0), 50, 30);
+        [settingsBt setTitle:@"settings" forState:UIControlStateNormal];
+        settingsBt.titleLabel.font=[UIFont systemFontOfSize:13];
+        [settingsBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+        [settingsBt addTarget:self action:@selector(rightAction) forControlEvents:UIControlEventTouchUpInside];
+        [bar addSubview:settingsBt];
+        mainTableView.frame=CGRectMake(0, 64+(isiPhoneX?24:0), [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-64-(isiPhoneX?24:0));
+        [bar addSubview:titleText];
+    }else{
+        titleText.frame=CGRectMake(([[UIScreen mainScreen] bounds].size.width-120)/2, 0, 120, 44);
+        [self.navigationController.navigationBar addSubview:titleText];
+        UIBarButtonItem *right=[[UIBarButtonItem alloc] initWithTitle:@"settings" style:UIBarButtonItemStylePlain target:self action:@selector(rightAction)];
+        self.navigationItem.rightBarButtonItem=right;
+    }
+
+    [self setupSearch];
+    mainTableView.dataSource=self;
+    mainTableView.delegate=self;
+    httpRequests=[[[[NEHTTPModelManager defaultManager] allobjects] reverseObjectEnumerator] allObjects];
+    
+    isiPhone11 = [[self hardwareString] containsString:@"iPhone12"];
+    if (@available(iOS 13.0, *)) {
+        if ([[self hardwareString] containsString:@"x86_64"]) {
+            isiPhone11 = YES;
+        }
+    }
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    httpRequests=[[[[NEHTTPModelManager defaultManager] allobjects] reverseObjectEnumerator] allObjects];
+    [mainTableView reloadData];
+}
+
+- (void)rightAction {
+    NEHTTPEyeSettingsViewController *settings = [[NEHTTPEyeSettingsViewController alloc] init];
+    [self presentViewController:settings animated:YES completion:nil];
+}
+
+- (void)setupSearch {
+    
+    filterHTTPRequests=[[NSArray alloc] init];
+    
+    if (@available(iOS 13.0, *)) {
+        mySearchController = [[UISearchController alloc] initWithSearchResultsController:nil];
+        mySearchController.searchResultsUpdater = self;
+        mySearchController.searchBar.delegate = self;
+        [mySearchController.searchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];
+        [mySearchController.searchBar sizeToFit];
+        mainTableView.tableHeaderView = mySearchController.searchBar;
+    } else {
+        mySearchBar = [[UISearchBar alloc] init];
+        mySearchBar.delegate = self;
+        [mySearchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];
+        [mySearchBar sizeToFit];
+        mainTableView.tableHeaderView = mySearchBar;
+        mySearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:mySearchBar contentsController:self];
+        [mySearchDisplayController setDelegate:self];
+        [mySearchDisplayController setSearchResultsDataSource:self];
+        [mySearchDisplayController setSearchResultsDelegate:self];
+    }
+}
+
+- (void)backBtAction {
+    
+    [self dismissViewControllerAnimated:YES completion:nil];
+
+}
+
+#pragma mark - UITableViewDataSource  &UITableViewDelegate
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    if (tableView == mySearchDisplayController.searchResultsTableView || (mySearchController.isActive && mySearchController.searchBar.text.length > 0)) {
+        return filterHTTPRequests.count;
+    }
+    return httpRequests.count;
+    
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    UITableViewCell *cell;
+    
+    NSString *cellId=@"CellId";
+    cell=[tableView dequeueReusableCellWithIdentifier:cellId];
+    if (cell==nil) {
+        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
+    }
+    cell.textLabel.font=[UIFont systemFontOfSize:12];
+    cell.textLabel.textColor=[UIColor colorWithRed:0.24f green:0.51f blue:0.78f alpha:1.00f];
+    NEHTTPModel *currenModel=[self modelForTableView:tableView atIndexPath:indexPath];
+    
+    cell.textLabel.text=currenModel.requestURLString;
+
+    NSAttributedString *responseStatusCode;
+    NSAttributedString *requestHTTPMethod;
+    UIColor *titleColor=[UIColor colorWithRed:0.96 green:0.15 blue:0.11 alpha:1];
+    if (currenModel.responseStatusCode == 200) {
+        titleColor=[UIColor colorWithRed:0.11 green:0.76 blue:0.13 alpha:1];
+    }
+    UIFont *titleFont=[UIFont systemFontOfSize:12.0];
+    UIColor *detailColor=[UIColor blackColor];
+    UIFont *detailFont=[UIFont systemFontOfSize:12.0];
+    responseStatusCode = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%d   ",currenModel.responseStatusCode]
+                                                             attributes:@{
+                                                                          NSFontAttributeName : titleFont,
+                                                                          NSForegroundColorAttributeName: titleColor
+                                                                          }];
+    
+    requestHTTPMethod = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@   %@   %@",currenModel.requestHTTPMethod,currenModel.responseMIMEType,[((NEHTTPModel *)((httpRequests)[indexPath.row])).startDateString substringFromIndex:5]]
+                                                           attributes:@{
+                                                                        NSFontAttributeName : detailFont,
+                                                                        NSForegroundColorAttributeName: detailColor
+                                                                        }];
+    NSMutableAttributedString *detail=[[NSMutableAttributedString alloc] init];
+    [detail appendAttributedString:responseStatusCode];
+    [detail appendAttributedString:requestHTTPMethod];
+    cell.detailTextLabel.attributedText=detail;
+    
+    return cell;
+    
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NEHTTPEyeDetailViewController *detail = [[NEHTTPEyeDetailViewController alloc] init];
+    detail.model = [self modelForTableView:tableView atIndexPath:indexPath];
+    [self presentViewController:detail animated:YES completion:nil];
+}
+
+#pragma mark - UISearchBarDelegate
+- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
+    if (isiPhone11) { // iPhone11上修改tableView的frame有bug
+        return YES;
+    }
+    if ([self.navigationController viewControllers].count>0) {
+        return YES;
+    }
+    //准备搜寻前,把上面调整的TableView调整回全屏幕的状态
+    [UIView animateWithDuration:0.2 animations:^{
+        mainTableView.frame = CGRectMake(0, 20+(isiPhoneX?24:0), [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-20-(isiPhoneX?24:0));
+        
+    }];
+    
+    return YES;
+}
+
+- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
+    if (isiPhone11) {
+        return YES;
+    }
+    if ([self.navigationController viewControllers].count>0) {
+        return YES;
+    }
+    if (searchBar.text.length<1) {
+        [UIView animateWithDuration:0.2 animations:^{
+            mainTableView.frame = CGRectMake(0, 64+(isiPhoneX?24:0), [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-64-(isiPhoneX?24:0));
+        }];
+    }
+    //当按下search按钮后 后走这里,并且这之后按cancel按钮不会走这里;当没有按过search按钮,按cancel按钮会走这里
+    return YES;
+}
+
+- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar;                       // called when text ends editing
+{
+    if (@available(iOS 13.0, *)) {
+        if (isiPhone11) {
+            return;
+        }
+        if ([self.navigationController viewControllers].count>0) {
+            return;
+        }
+        
+        if (searchBar.text.length<1) {
+            [UIView animateWithDuration:0.2 animations:^{
+                mainTableView.frame = CGRectMake(0, 64+(isiPhoneX?24:0), [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-64-(isiPhoneX?24:0));
+            }];
+        }
+    }
+}
+
+- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
+    if (isiPhone11) {
+        return;
+    }
+    if ([self.navigationController viewControllers].count>0) {
+        return ;
+    }
+    [UIView animateWithDuration:0.2 animations:^{
+        mainTableView.frame = CGRectMake(0, 64, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-64);
+    }];
+}
+#pragma mark - UISearchDisplayDelegate
+- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
+    [self updateSearchResultsWithSearchString:searchString];
+    return YES;
+}
+
+- (void)updateSearchResultsWithSearchString:(NSString *)searchString {
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        NSArray *tempFilterHTTPRequests = [httpRequests filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NEHTTPModel *httpRequest, NSDictionary *bindings) {
+            return [[NSString stringWithFormat:@"%@ %d %@ %@",httpRequest.requestURLString,httpRequest.responseStatusCode,httpRequest.requestHTTPMethod,httpRequest.responseMIMEType] rangeOfString:searchString options:NSCaseInsensitiveSearch].length > 0;
+        }]];
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            if ([mySearchDisplayController.searchBar.text isEqual:searchString]) {
+                filterHTTPRequests = tempFilterHTTPRequests;
+                [mySearchDisplayController.searchResultsTableView reloadData];
+            }
+            if ([mySearchController.searchBar.text isEqual:searchString]) {
+                filterHTTPRequests = tempFilterHTTPRequests;
+                [mainTableView reloadData];
+            }
+        });
+    });
+}
+
+#pragma mark - UISearchControllerDelegate
+
+- (void)updateSearchResultsForSearchController:(UISearchController *)searchController;
+{
+    [self updateSearchResultsWithSearchString:searchController.searchBar.text];
+
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+#pragma mark - private methods
+- (NEHTTPModel *)modelForTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath {
+    NEHTTPModel *currenModel=[[NEHTTPModel alloc] init];
+    if (tableView == mySearchDisplayController.searchResultsTableView || (mySearchController.isActive && mySearchController.searchBar.text.length > 0)) {
+        currenModel=(NEHTTPModel *)((filterHTTPRequests)[indexPath.row]);
+    }else{
+        currenModel=(NEHTTPModel *)((httpRequests)[indexPath.row]);
+    }
+    return currenModel;
+}
+
+- (NSString *)hardwareString {
+  int name[] = {CTL_HW,HW_MACHINE};
+  size_t size = 100;
+  sysctl(name, 2, NULL, &size, NULL, 0); // getting size of answer
+  char *hw_machine = malloc(size);
+
+  sysctl(name, 2, hw_machine, &size, NULL, 0);
+  NSString *hardware = [NSString stringWithUTF8String:hw_machine];
+  free(hw_machine);
+  return hardware;
+}
+
+@end

+ 42 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPModel.h

@@ -0,0 +1,42 @@
+//
+//  NEHTTPModel.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/4.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+NS_ASSUME_NONNULL_BEGIN
+@interface NEHTTPModel : NSObject
+
+@property (nonatomic,strong) NSURLRequest *ne_request;
+@property (nonatomic,strong) NSHTTPURLResponse *ne_response;
+@property (nonatomic,assign) double myID;
+@property (nonatomic,strong) NSString *startDateString;
+@property (nonatomic,strong) NSString *endDateString;
+
+//request
+@property (nonatomic,strong) NSString *requestURLString;
+@property (nonatomic,strong) NSString *requestCachePolicy;
+@property (nonatomic,assign) double requestTimeoutInterval;
+@property (nonatomic,nullable, strong) NSString *requestHTTPMethod;
+@property (nonatomic,nullable,strong) NSString *requestAllHTTPHeaderFields;
+@property (nonatomic,nullable,strong) NSString *requestHTTPBody;
+
+//response
+@property (nonatomic,nullable,strong) NSString *responseMIMEType;
+@property (nonatomic,strong) NSString * responseExpectedContentLength;
+@property (nonatomic,nullable,strong) NSString *responseTextEncodingName;
+@property (nullable, nonatomic, strong) NSString *responseSuggestedFilename;
+@property (nonatomic,assign) int responseStatusCode;
+@property (nonatomic,nullable,strong) NSString *responseAllHeaderFields;
+
+//JSONData
+@property (nonatomic,strong) NSString *receiveJSONData;
+
+@property (nonatomic,strong) NSString *mapPath;
+@property (nonatomic,strong) NSString *mapJSONData;
+
+@end
+NS_ASSUME_NONNULL_END

+ 154 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPModel.m

@@ -0,0 +1,154 @@
+//
+//  NEHTTPModel.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/4.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "NEHTTPModel.h"
+
+@implementation NEHTTPModel
+@synthesize ne_request,ne_response;
+
+-(void)setNe_request:(NSURLRequest *)ne_request_new{
+    ne_request=ne_request_new;
+    self.requestURLString=[ne_request.URL absoluteString];
+    
+    switch (ne_request.cachePolicy) {
+        case 0:
+            self.requestCachePolicy=@"NSURLRequestUseProtocolCachePolicy";
+            break;
+        case 1:
+            self.requestCachePolicy=@"NSURLRequestReloadIgnoringLocalCacheData";
+            break;
+        case 2:
+            self.requestCachePolicy=@"NSURLRequestReturnCacheDataElseLoad";
+            break;
+        case 3:
+            self.requestCachePolicy=@"NSURLRequestReturnCacheDataDontLoad";
+            break;
+        case 4:
+            self.requestCachePolicy=@"NSURLRequestUseProtocolCachePolicy";
+            break;
+        case 5:
+            self.requestCachePolicy=@"NSURLRequestReloadRevalidatingCacheData";
+            break;
+        default:
+            self.requestCachePolicy=@"";
+            break;
+    }
+    
+    self.requestTimeoutInterval=[[NSString stringWithFormat:@"%.1lf",ne_request.timeoutInterval] doubleValue];
+    self.requestHTTPMethod=ne_request.HTTPMethod;
+    
+    for (NSString *key in [ne_request.allHTTPHeaderFields allKeys]) {
+        self.requestAllHTTPHeaderFields=[NSString stringWithFormat:@"%@%@",self.requestAllHTTPHeaderFields,[self formateRequestHeaderFieldKey:key object:[ne_request.allHTTPHeaderFields objectForKey:key]]];
+    }
+    
+    [self appendCookieStringAfterRequestAllHTTPHeaderFields];
+    
+    if (self.requestAllHTTPHeaderFields.length>1) {
+        if ([[self.requestAllHTTPHeaderFields substringFromIndex:self.requestAllHTTPHeaderFields.length-1] isEqualToString:@"\n"]) {
+            self.requestAllHTTPHeaderFields=[self.requestAllHTTPHeaderFields substringToIndex:self.requestAllHTTPHeaderFields.length-1];
+        }
+    }
+    if (self.requestAllHTTPHeaderFields.length>6) {
+        if ([[self.requestAllHTTPHeaderFields substringToIndex:6] isEqualToString:@"(null)"]) {
+            self.requestAllHTTPHeaderFields=[self.requestAllHTTPHeaderFields substringFromIndex:6];
+        }
+    }
+
+    if ([ne_request HTTPBody].length>512) {
+        self.requestHTTPBody=@"requestHTTPBody too long";
+    }else{
+        if ([ne_request.HTTPMethod isEqualToString:@"POST"] && !ne_request.HTTPBody) {
+            uint8_t rd[1024] = {0};
+            NSInputStream *stream = ne_request.HTTPBodyStream;
+            NSMutableData *data = [[NSMutableData alloc] init];
+            [stream open];
+            while ([stream hasBytesAvailable]) {
+                NSInteger len = [stream read:rd maxLength:1024];
+                if (len > 0 && stream.streamError == nil) {
+                    [data appendBytes:(void *)rd length:len];
+                }
+            }
+            self.requestHTTPBody=[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+            [stream close];
+        }else{
+            self.requestHTTPBody=[[NSString alloc] initWithData:[ne_request HTTPBody] encoding:NSUTF8StringEncoding];
+        }
+    }
+    if (self.requestHTTPBody.length>1) {
+        if ([[self.requestHTTPBody substringFromIndex:self.requestHTTPBody.length-1] isEqualToString:@"\n"]) {
+            self.requestHTTPBody=[self.requestHTTPBody substringToIndex:self.requestHTTPBody.length-1];
+        }
+    }
+    
+}
+
+- (void)setNe_response:(NSHTTPURLResponse *)ne_response_new {
+    
+    ne_response=ne_response_new;
+    
+    self.responseMIMEType=@"";
+    self.responseExpectedContentLength=@"";
+    self.responseTextEncodingName=@"";
+    self.responseSuggestedFilename=@"";
+    self.responseStatusCode=200;
+    self.responseAllHeaderFields=@"";
+    
+    self.responseMIMEType=[ne_response MIMEType];
+    self.responseExpectedContentLength=[NSString stringWithFormat:@"%lld",[ne_response expectedContentLength]];
+    self.responseTextEncodingName=[ne_response textEncodingName];
+    self.responseSuggestedFilename=[ne_response suggestedFilename];
+    self.responseStatusCode=(int)ne_response.statusCode;
+    
+    for (NSString *key in [ne_response.allHeaderFields allKeys]) {
+        NSString *headerFieldValue=[ne_response.allHeaderFields objectForKey:key];
+        if ([key isEqualToString:@"Content-Security-Policy"]) {
+            if (headerFieldValue.length > 12 && [[headerFieldValue substringFromIndex:12] isEqualToString:@"'none'"]) {
+                headerFieldValue=[headerFieldValue substringToIndex:11];
+            }
+        }
+        self.responseAllHeaderFields=[NSString stringWithFormat:@"%@%@:%@\n",self.responseAllHeaderFields,key,headerFieldValue];
+        
+    }
+    
+    if (self.responseAllHeaderFields.length>1) {
+        if ([[self.responseAllHeaderFields substringFromIndex:self.responseAllHeaderFields.length-1] isEqualToString:@"\n"]) {
+            self.responseAllHeaderFields=[self.responseAllHeaderFields substringToIndex:self.responseAllHeaderFields.length-1];
+        }
+    }
+    
+}
+
+- (void)appendCookieStringAfterRequestAllHTTPHeaderFields
+{
+    NSString *host = self.ne_request.URL.host;
+    NSArray *cookieArray = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
+    NSMutableArray *cookieValueArray = [NSMutableArray array];
+    for (NSHTTPCookie *cookie in cookieArray) {
+        NSString *domain = [cookie.properties valueForKey:NSHTTPCookieDomain];
+        NSRange range = [host rangeOfString:domain];
+        NSComparisonResult result = [cookie.expiresDate compare:[NSDate date]];
+        
+        if(range.location != NSNotFound && result == NSOrderedDescending)
+        {
+            [cookieValueArray addObject:[NSString stringWithFormat:@"%@=%@",cookie.name,cookie.value]];
+        }
+    }
+    if(cookieValueArray.count > 0)
+    {
+        NSString *cookieString = [cookieValueArray componentsJoinedByString:@";"];
+
+        self.requestAllHTTPHeaderFields = [self.requestAllHTTPHeaderFields stringByAppendingString:[self formateRequestHeaderFieldKey:@"Cookie" object:cookieString]];
+    }
+}
+
+- (NSString *)formateRequestHeaderFieldKey:(NSString *)key object:(id)obj
+{
+    return [NSString stringWithFormat:@"%@:%@\n",key?:@"",obj?:@""];
+}
+
+@end

+ 66 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPModelManager.h

@@ -0,0 +1,66 @@
+//
+//  NEHTTPModelManager.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/4.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "NEHTTPEye.h"
+@class NEHTTPModel;
+@interface NEHTTPModelManager : NSObject
+{
+    NSMutableArray *allRequests;
+    BOOL enablePersistent;
+}
+
+@property(nonatomic,strong) NSString *sqlitePassword;
+@property(nonatomic,assign) int saveRequestMaxCount;
+
+/**
+ *  get recorded requests 's SQLite filename
+ *
+ *  @return filename
+ */
++ (NSString *)filename;
+
+/**
+ *  get NEHTTPModelManager's singleton object
+ *
+ *  @return singleton object
+ */
++ (NEHTTPModelManager *)defaultManager;
+
+/**
+ *  create NEHTTPModel table
+ */
+- (void)createTable;
+
+
+/**
+ *  add a NEHTTPModel object to SQLite
+ *
+ *  @param aModel a NEHTTPModel object
+ */
+- (void)addModel:(NEHTTPModel *) aModel;
+
+/**
+ *  get SQLite all NEHTTPModel object
+ *
+ *  @return all NEHTTPModel object
+ */
+- (NSMutableArray *)allobjects;
+
+/**
+ *  delete all SQLite records
+ */
+- (void) deleteAllItem;
+
+- (NSMutableArray *)allMapObjects;
+- (void)addMapObject:(NEHTTPModel *)mapReq;
+- (void)removeMapObject:(NEHTTPModel *)mapReq;
+- (void)removeAllMapObjects;
+
+@end

+ 243 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEHTTPModelManager.m

@@ -0,0 +1,243 @@
+//
+//  NEHTTPModelManager.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/4.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "NEHTTPModelManager.h"
+
+#import "NEShakeGestureManager.h"
+#import "NEHTTPModel.h"
+#if FMDB_SQLCipher
+#include "sqlite3.h"
+#import "FMDB.h"
+#endif
+#define kSTRDoubleMarks @"\""
+#define kSQLDoubleMarks @"\"\""
+#define kSTRShortMarks  @"'"
+#define kSQLShortMarks  @"''"
+@interface NEHTTPModelManager(){
+    NSMutableArray *allMapRequests;
+#if FMDB_SQLCipher
+    FMDatabaseQueue *sqliteDatabase;
+#endif
+
+}
+@end
+
+@implementation NEHTTPModelManager
+
+- (id)init {
+    self = [super init];
+    if (self) {
+        _sqlitePassword=kSQLitePassword;
+        self.saveRequestMaxCount=kSaveRequestMaxCount;
+        allRequests = [NSMutableArray arrayWithCapacity:1];
+        allMapRequests = [NSMutableArray arrayWithCapacity:1];
+#if FMDB_SQLCipher
+        enablePersistent = YES;
+#else
+        enablePersistent = NO;
+
+#endif
+    }
+    return self;
+}
+
++ (NEHTTPModelManager *)defaultManager {
+    
+    static NEHTTPModelManager *staticManager;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        staticManager=[[NEHTTPModelManager alloc] init];
+        [staticManager createTable];
+    });
+    return staticManager;
+    
+}
+
++ (NSString *)filename {
+    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
+    NSString *ducumentsDirectory = [paths objectAtIndex:0];
+    NSString *str=[[NSString alloc] initWithFormat:@"%@/networkeye.sqlite",ducumentsDirectory];
+    return  str;
+}
+
+- (void)createTable {
+    
+    NSMutableString *init_sqls=[NSMutableString stringWithCapacity:1024];
+    [init_sqls appendFormat:@"create table if not exists nenetworkhttpeyes(myID double primary key,startDateString text,endDateString text,requestURLString text,requestCachePolicy text,requestTimeoutInterval double,requestHTTPMethod text,requestAllHTTPHeaderFields text,requestHTTPBody text,responseMIMEType text,responseExpectedContentLength text,responseTextEncodingName text,responseSuggestedFilename text,responseStatusCode int,responseAllHeaderFields text,receiveJSONData text);"];
+#if FMDB_SQLCipher
+
+    FMDatabaseQueue *queue= [FMDatabaseQueue databaseQueueWithPath:[NEHTTPModelManager filename]];
+    [queue inDatabase:^(FMDatabase *db) {
+        [db setKey:_sqlitePassword];
+        [db executeUpdate:init_sqls];
+    }];
+#endif
+}
+
+- (void)addModel:(NEHTTPModel *) aModel {
+    
+    if ([aModel.responseMIMEType isEqualToString:@"text/html"]) {
+        aModel.receiveJSONData=@"";
+    }
+    
+    if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"nenetworkhttpeyecache"] isEqualToString:@"a"]) {
+        [self deleteAllItem];
+        [[NSUserDefaults standardUserDefaults] setObject:@"b" forKey:@"nenetworkhttpeyecache"];
+    }
+
+    BOOL isNull;
+    isNull=(aModel.receiveJSONData==nil);
+    if (isNull) {
+        aModel.receiveJSONData=@"";
+    }
+    NSString *receiveJSONData;
+    receiveJSONData=[self stringToSQLFilter:aModel.receiveJSONData];
+    NSString *sql=[NSString stringWithFormat:@"insert into nenetworkhttpeyes values('%lf','%@','%@','%@','%@','%lf','%@','%@','%@','%@','%@','%@','%@','%d','%@','%@')",aModel.myID,aModel.startDateString,aModel.endDateString,aModel.requestURLString,aModel.requestCachePolicy,aModel.requestTimeoutInterval,aModel.requestHTTPMethod,aModel.requestAllHTTPHeaderFields,aModel.requestHTTPBody,aModel.responseMIMEType,aModel.responseExpectedContentLength,aModel.responseTextEncodingName,aModel.responseSuggestedFilename,aModel.responseStatusCode,[self stringToSQLFilter:aModel.responseAllHeaderFields],receiveJSONData];
+    if (enablePersistent) {
+#if FMDB_SQLCipher
+
+        FMDatabaseQueue *queue= [FMDatabaseQueue databaseQueueWithPath:[NEHTTPModelManager filename]];
+        [queue inDatabase:^(FMDatabase *db) {
+            [db setKey:_sqlitePassword];
+            [db executeUpdate:sql];
+        }];
+#endif
+    }else {
+        [allRequests addObject:aModel];
+    }
+    
+    return ;
+    
+}
+
+- (NSMutableArray *)allobjects {
+    
+    if (!enablePersistent) {
+        if (allRequests.count>=self.saveRequestMaxCount) {
+            [[NSUserDefaults standardUserDefaults] setObject:@"a" forKey:@"nenetworkhttpeyecache"];
+        }
+        return allRequests;
+    }
+#if FMDB_SQLCipher
+
+    FMDatabaseQueue *queue= [FMDatabaseQueue databaseQueueWithPath:[NEHTTPModelManager filename]];
+    NSString *sql =[NSString stringWithFormat:@"select * from nenetworkhttpeyes order by myID desc"];
+    NSMutableArray *array=[NSMutableArray array];
+    [queue inDatabase:^(FMDatabase *db) {
+        [db setKey:_sqlitePassword];
+        FMResultSet *rs = [db executeQuery:sql];
+        while ([rs next]) {
+            NEHTTPModel *model=[[NEHTTPModel alloc] init];
+            model.myID=[rs doubleForColumn:@"myID"];
+            model.startDateString=[rs stringForColumn:@"startDateString"];
+            model.endDateString=[rs stringForColumn:@"endDateString"];
+            model.requestURLString=[rs stringForColumn:@"requestURLString"];
+            model.requestCachePolicy=[rs stringForColumn:@"requestCachePolicy"];
+            model.requestTimeoutInterval=[rs doubleForColumn:@"requestTimeoutInterval"];
+            model.requestHTTPMethod=[rs stringForColumn:@"requestHTTPMethod"];
+            model.requestAllHTTPHeaderFields=[rs stringForColumn:@"requestAllHTTPHeaderFields"];
+            model.requestHTTPBody=[rs stringForColumn:@"requestHTTPBody"];
+            model.responseMIMEType=[rs stringForColumn:@"responseMIMEType"];
+            model.responseExpectedContentLength=[rs stringForColumn:@"responseExpectedContentLength"];
+            model.responseTextEncodingName=[rs stringForColumn:@"responseTextEncodingName"];
+            model.responseSuggestedFilename=[rs stringForColumn:@"responseSuggestedFilename"];
+            model.responseStatusCode=[rs intForColumn:@"responseStatusCode"];
+            model.responseAllHeaderFields=[self stringToSQLFilter:[rs stringForColumn:@"responseAllHeaderFields"]];
+            model.receiveJSONData=[self stringToOBJFilter:[rs stringForColumn:@"receiveJSONData"]];
+            [array addObject:model];
+        }
+    }];
+    
+    if (array.count>=self.saveRequestMaxCount) {
+        [[NSUserDefaults standardUserDefaults] setObject:@"a" forKey:@"nenetworkhttpeyecache"];
+    }
+    
+    return array;
+#endif
+    return nil;
+}
+
+- (void) deleteAllItem {
+    
+    if (!enablePersistent) {
+        [allRequests removeAllObjects];
+        return;
+    }
+    NSString *sql=[NSString stringWithFormat:@"delete from nenetworkhttpeyes"];
+#if FMDB_SQLCipher
+
+    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:[NEHTTPModelManager filename]];
+    [queue inDatabase:^(FMDatabase *db) {
+        [db setKey:_sqlitePassword];
+        [db executeUpdate:sql];
+    }];
+    
+    return ;
+#endif
+}
+
+#pragma mark - map local
+
+- (NSMutableArray *)allMapObjects {
+    return allMapRequests;
+}
+
+- (void)addMapObject:(NEHTTPModel *)mapReq {
+    
+    for (NSInteger i=0; i < allMapRequests.count; i++) {
+        NEHTTPModel *req = [allMapRequests objectAtIndex:i];
+        if (![mapReq.mapPath isEqualToString:req.mapPath]) {
+            [allMapRequests replaceObjectAtIndex:i withObject:mapReq];
+            return;
+        }
+    }
+    [allMapRequests addObject:mapReq];
+}
+
+- (void)removeMapObject:(NEHTTPModel *)mapReq {
+    
+    for (NSInteger i=0; i < allMapRequests.count; i++) {
+        NEHTTPModel *req = [allMapRequests objectAtIndex:i];
+        if ([mapReq.mapPath isEqualToString:req.mapPath]) {
+            [allMapRequests removeObject:mapReq];
+            return;
+        }
+    }
+}
+
+- (void)removeAllMapObjects {
+    [allMapRequests removeAllObjects];
+}
+
+#pragma mark - Utils
+
+- (id)stringToSQLFilter:(id)str {
+    
+    if ( [str respondsToSelector:@selector(stringByReplacingOccurrencesOfString:withString:)]) {
+        id temp = str;
+        temp = [temp stringByReplacingOccurrencesOfString:kSTRShortMarks withString:kSQLShortMarks];
+        temp = [temp stringByReplacingOccurrencesOfString:kSTRDoubleMarks withString:kSQLDoubleMarks];
+        return temp;
+    }
+    return str;
+    
+}
+
+- (id)stringToOBJFilter:(id)str {
+    
+    if ( [str respondsToSelector:@selector(stringByReplacingOccurrencesOfString:withString:)]) {
+        id temp = str;
+        temp = [temp stringByReplacingOccurrencesOfString:kSQLShortMarks withString:kSTRShortMarks];
+        temp = [temp stringByReplacingOccurrencesOfString:kSQLDoubleMarks withString:kSTRDoubleMarks];
+        return temp;
+    }
+    return str;
+    
+}
+
+@end

+ 22 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEKeyboardShortcutManager.h

@@ -0,0 +1,22 @@
+//
+//  NEKeyboardShortcutManager.h
+//  NetworkEye
+//
+//  Created by coderyi on 2016/10/15.
+//  Copyright © 2016年 coderyi. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+#if TARGET_OS_SIMULATOR
+
+@interface NEKeyboardShortcutManager : NSObject
+@property (nonatomic, assign, getter=isEnabled) BOOL enabled;
+
++ (instancetype)sharedManager;
+
+- (void)registerSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifierFlags)modifiers action:(dispatch_block_t)action description:(NSString *)description;
+
+@end
+#endif

+ 290 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEKeyboardShortcutManager.m

@@ -0,0 +1,290 @@
+//
+//  NEKeyboardShortcutManager.m
+//  NetworkEye
+//
+//  Created by coderyi on 2016/10/15.
+//  Copyright © 2016年 coderyi. All rights reserved.
+//
+
+#import "NEKeyboardShortcutManager.h"
+#import <objc/runtime.h>
+#import <objc/message.h>
+
+#if TARGET_OS_SIMULATOR
+
+
+@interface UIEvent (UIPhysicalKeyboardEvent)
+
+@property (nonatomic, strong) NSString *_modifiedInput;
+@property (nonatomic, strong) NSString *_unmodifiedInput;
+@property (nonatomic, assign) UIKeyModifierFlags _modifierFlags;
+@property (nonatomic, assign) BOOL _isKeyDown;
+@property (nonatomic, assign) long _keyCode;
+
+@end
+
+@interface NEKeyInput : NSObject <NSCopying>
+
+@property (nonatomic, copy, readonly) NSString *key;
+@property (nonatomic, assign, readonly) UIKeyModifierFlags flags;
+
+@end
+
+@implementation NEKeyInput
+
+- (BOOL)isEqual:(id)object
+{
+    BOOL isEqual = NO;
+    if ([object isKindOfClass:[NEKeyInput class]]) {
+        NEKeyInput *keyCommand = (NEKeyInput *)object;
+        BOOL equalKeys = self.key == keyCommand.key || [self.key isEqual:keyCommand.key];
+        BOOL equalFlags = self.flags == keyCommand.flags;
+        isEqual = equalKeys && equalFlags;
+    }
+    return isEqual;
+}
+
+- (NSUInteger)hash
+{
+    return [self.key hash] ^ self.flags;
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    return [[self class] keyInputForKey:self.key flags:self.flags];
+}
+
+
++ (instancetype)keyInputForKey:(NSString *)key flags:(UIKeyModifierFlags)flags
+{
+    NEKeyInput *keyInput = [[self alloc] init];
+    if (keyInput) {
+        keyInput->_key = key;
+        keyInput->_flags = flags;
+    }
+    return keyInput;
+}
+
+@end
+
+@interface NEKeyboardShortcutManager ()
+
+@property (nonatomic, strong) NSMutableDictionary *actionsForKeyInputs;
+
+@property (nonatomic, assign, getter=isPressingShift) BOOL pressingShift;
+@property (nonatomic, assign, getter=isPressingCommand) BOOL pressingCommand;
+@property (nonatomic, assign, getter=isPressingControl) BOOL pressingControl;
+
+@end
+
+@implementation NEKeyboardShortcutManager
+
++ (instancetype)sharedManager
+{
+    static NEKeyboardShortcutManager *sharedManager = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        sharedManager = [[[self class] alloc] init];
+    });
+    return sharedManager;
+}
+
++ (void)load
+{
+    SEL originalKeyEventSelector = NSSelectorFromString(@"handleKeyUIEvent:");
+    SEL swizzledKeyEventSelector = [NEKeyboardShortcutManager swizzledSelectorForSelector:originalKeyEventSelector];
+    
+    void (^handleKeyUIEventSwizzleBlock)(UIApplication *, UIEvent *) = ^(UIApplication *slf, UIEvent *event) {
+        
+        [[[self class] sharedManager] handleKeyboardEvent:event];
+        
+        ((void(*)(id, SEL, id))objc_msgSend)(slf, swizzledKeyEventSelector, event);
+    };
+    
+    [NEKeyboardShortcutManager replaceImplementationOfKnownSelector:originalKeyEventSelector onClass:[UIApplication class] withBlock:handleKeyUIEventSwizzleBlock swizzledSelector:swizzledKeyEventSelector];
+    
+    if ([[UITouch class] instancesRespondToSelector:@selector(maximumPossibleForce)]) {
+        SEL originalSendEventSelector = NSSelectorFromString(@"sendEvent:");
+        SEL swizzledSendEventSelector = [NEKeyboardShortcutManager swizzledSelectorForSelector:originalSendEventSelector];
+        
+        void (^sendEventSwizzleBlock)(UIApplication *, UIEvent *) = ^(UIApplication *slf, UIEvent *event) {
+            if (event.type == UIEventTypeTouches) {
+                NEKeyboardShortcutManager *keyboardManager = [NEKeyboardShortcutManager sharedManager];
+                NSInteger pressureLevel = 0;
+                if (keyboardManager.isPressingShift) {
+                    pressureLevel++;
+                }
+                if (keyboardManager.isPressingCommand) {
+                    pressureLevel++;
+                }
+                if (keyboardManager.isPressingControl) {
+                    pressureLevel++;
+                }
+                if (pressureLevel > 0) {
+                    for (UITouch *touch in [event allTouches]) {
+                        double adjustedPressureLevel = pressureLevel * 20 * touch.maximumPossibleForce;
+                        [touch setValue:@(adjustedPressureLevel) forKey:@"_pressure"];
+                    }
+                }
+            }
+            
+            ((void(*)(id, SEL, id))objc_msgSend)(slf, swizzledSendEventSelector, event);
+        };
+        
+        [NEKeyboardShortcutManager replaceImplementationOfKnownSelector:originalSendEventSelector onClass:[UIApplication class] withBlock:sendEventSwizzleBlock swizzledSelector:swizzledSendEventSelector];
+        
+        SEL originalSupportsTouchPressureSelector = NSSelectorFromString(@"_supportsForceTouch");
+        SEL swizzledSupportsTouchPressureSelector = [NEKeyboardShortcutManager swizzledSelectorForSelector:originalSupportsTouchPressureSelector];
+        
+        BOOL (^supportsTouchPressureSwizzleBlock)(UIDevice *) = ^BOOL(UIDevice *slf) {
+            return YES;
+        };
+        
+        [NEKeyboardShortcutManager replaceImplementationOfKnownSelector:originalSupportsTouchPressureSelector onClass:[UIDevice class] withBlock:supportsTouchPressureSwizzleBlock swizzledSelector:swizzledSupportsTouchPressureSelector];
+    }
+}
+
+- (instancetype)init
+{
+    self = [super init];
+    
+    if (self) {
+        _actionsForKeyInputs = [NSMutableDictionary dictionary];
+        _enabled = YES;
+    }
+    
+    return self;
+}
+
+- (void)registerSimulatorShortcutWithKey:(NSString *)key modifiers:(UIKeyModifierFlags)modifiers action:(dispatch_block_t)action description:(NSString *)description
+{
+    NEKeyInput *keyInput = [NEKeyInput keyInputForKey:key flags:modifiers];
+    [self.actionsForKeyInputs setObject:action forKey:keyInput];
+}
+
+static const long kNEControlKeyCode = 0xe0;
+static const long kNEShiftKeyCode = 0xe1;
+static const long kNECommandKeyCode = 0xe3;
+
+- (void)handleKeyboardEvent:(UIEvent *)event
+{
+    if (!self.enabled) {
+        return;
+    }
+    
+    NSString *modifiedInput = nil;
+    NSString *unmodifiedInput = nil;
+    UIKeyModifierFlags flags = 0;
+    BOOL isKeyDown = NO;
+    
+    if ([event respondsToSelector:@selector(_modifiedInput)]) {
+        modifiedInput = [event _modifiedInput];
+    }
+    
+    if ([event respondsToSelector:@selector(_unmodifiedInput)]) {
+        unmodifiedInput = [event _unmodifiedInput];
+    }
+    
+    if ([event respondsToSelector:@selector(_modifierFlags)]) {
+        flags = [event _modifierFlags];
+    }
+    
+    if ([event respondsToSelector:@selector(_isKeyDown)]) {
+        isKeyDown = [event _isKeyDown];
+    }
+    
+    BOOL interactionEnabled = ![[UIApplication sharedApplication] isIgnoringInteractionEvents];
+    BOOL hasFirstResponder = NO;
+    if (isKeyDown && [modifiedInput length] > 0 && interactionEnabled) {
+        UIResponder *firstResponder = nil;
+        for (UIWindow *window in [NEKeyboardShortcutManager allWindows]) {
+            firstResponder = [window valueForKey:@"firstResponder"];
+            if (firstResponder) {
+                hasFirstResponder = YES;
+                break;
+            }
+        }
+        
+        if (firstResponder) {
+            if ([unmodifiedInput isEqual:UIKeyInputEscape]) {
+                [firstResponder resignFirstResponder];
+            }
+        } else {
+            NEKeyInput *exactMatch = [NEKeyInput keyInputForKey:unmodifiedInput flags:flags];
+            
+            dispatch_block_t actionBlock = self.actionsForKeyInputs[exactMatch];
+            
+            if (!actionBlock) {
+                NEKeyInput *shiftMatch = [NEKeyInput keyInputForKey:modifiedInput flags:flags&(!UIKeyModifierShift)];
+                actionBlock = self.actionsForKeyInputs[shiftMatch];
+            }
+            
+            if (!actionBlock) {
+                NEKeyInput *capitalMatch = [NEKeyInput keyInputForKey:[unmodifiedInput uppercaseString] flags:flags];
+                actionBlock = self.actionsForKeyInputs[capitalMatch];
+            }
+            
+            if (actionBlock) {
+                actionBlock();
+            }
+        }
+    }
+    
+    if (!hasFirstResponder && [event respondsToSelector:@selector(_keyCode)]) {
+        long keyCode = [event _keyCode];
+        if (keyCode == kNEControlKeyCode) {
+            self.pressingControl = isKeyDown;
+        } else if (keyCode == kNECommandKeyCode) {
+            self.pressingCommand = isKeyDown;
+        } else if (keyCode == kNEShiftKeyCode) {
+            self.pressingShift = isKeyDown;
+        }
+    }
+}
+
+#pragma mark Utils
+
++ (NSArray *)allWindows
+{
+    BOOL includeInternalWindows = YES;
+    BOOL onlyVisibleWindows = NO;
+    
+    NSArray *allWindowsComponents = @[@"al", @"lWindo", @"wsIncl", @"udingInt", @"ernalWin", @"dows:o", @"nlyVisi", @"bleWin", @"dows:"];
+    SEL allWindowsSelector = NSSelectorFromString([allWindowsComponents componentsJoinedByString:@""]);
+    
+    NSMethodSignature *methodSignature = [[UIWindow class] methodSignatureForSelector:allWindowsSelector];
+    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
+    
+    invocation.target = [UIWindow class];
+    invocation.selector = allWindowsSelector;
+    [invocation setArgument:&includeInternalWindows atIndex:2];
+    [invocation setArgument:&onlyVisibleWindows atIndex:3];
+    [invocation invoke];
+    
+    __unsafe_unretained NSArray *windows = nil;
+    [invocation getReturnValue:&windows];
+    return windows;
+}
+
++ (SEL)swizzledSelectorForSelector:(SEL)selector
+{
+    return NSSelectorFromString([NSString stringWithFormat:@"_ne_swizzle_%x_%@", arc4random(), NSStringFromSelector(selector)]);
+}
+
++ (void)replaceImplementationOfKnownSelector:(SEL)originalSelector onClass:(Class)class withBlock:(id)block swizzledSelector:(SEL)swizzledSelector
+{
+    Method originalMethod = class_getInstanceMethod(class, originalSelector);
+    if (!originalMethod) {
+        return;
+    }
+    
+    IMP implementation = imp_implementationWithBlock(block);
+    class_addMethod(class, swizzledSelector, implementation, method_getTypeEncoding(originalMethod));
+    Method newMethod = class_getInstanceMethod(class, swizzledSelector);
+    method_exchangeImplementations(originalMethod, newMethod);
+}
+
+@end
+
+
+#endif

+ 13 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEMapViewController.h

@@ -0,0 +1,13 @@
+//
+//  NEMapViewController.h
+//  NetworkEye
+//
+//  Created by coderyi on 16/9/25.
+//  Copyright © 2016年 coderyi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class NEHTTPModel;
+@interface NEMapViewController : UIViewController
+@property (nonatomic,strong) NEHTTPModel *model;
+@end

+ 116 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEMapViewController.m

@@ -0,0 +1,116 @@
+//
+//  NEMapViewController.m
+//  NetworkEye
+//
+//  Created by coderyi on 16/9/25.
+//  Copyright © 2016年 coderyi. All rights reserved.
+//
+
+#import "NEMapViewController.h"
+#import "NEHTTPModel.h"
+#import "NEHTTPModelManager.h"
+@interface NEMapViewController (){
+    
+    UITextView *mainTextView;
+    NEHTTPModel *model;
+}
+
+
+@end
+
+@implementation NEMapViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0) {
+        self.edgesForExtendedLayout = UIRectEdgeBottom | UIRectEdgeLeft | UIRectEdgeRight;
+        
+    }
+    self.automaticallyAdjustsScrollViewInsets=NO;
+    self.view.backgroundColor=[UIColor whiteColor];
+    
+    UINavigationBar *bar=[[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 64)];
+    [self.view addSubview:bar];
+    bar.barTintColor=[UIColor colorWithRed:0.24f green:0.51f blue:0.78f alpha:1.00f];
+    
+    UIButton *backBt=[UIButton buttonWithType:UIButtonTypeCustom];
+    backBt.frame=CGRectMake(10, 27, 40, 30);
+    [backBt setTitle:@"back" forState:UIControlStateNormal];
+    backBt.titleLabel.font=[UIFont systemFontOfSize:15];
+    [backBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    [backBt addTarget:self action:@selector(backBtAction) forControlEvents:UIControlEventTouchUpInside];
+    [bar addSubview:backBt];
+    
+    UIButton *deleteBt=[UIButton buttonWithType:UIButtonTypeCustom];
+    deleteBt.frame=CGRectMake([[UIScreen mainScreen] bounds].size.width-60, 27, 50, 30);
+    [deleteBt setTitle:@"delete" forState:UIControlStateNormal];
+    deleteBt.titleLabel.font=[UIFont systemFontOfSize:13];
+    [deleteBt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    [deleteBt addTarget:self action:@selector(rightAction) forControlEvents:UIControlEventTouchUpInside];
+    [bar addSubview:deleteBt];
+    
+    
+    UILabel *titleText = [[UILabel alloc] initWithFrame: CGRectMake(([[UIScreen mainScreen] bounds].size.width-230)/2, 20, 230, 44)];
+    titleText.backgroundColor = [UIColor clearColor];
+    titleText.textColor=[UIColor whiteColor];
+    [titleText setFont:[UIFont systemFontOfSize:13.0]];
+    titleText.textAlignment=NSTextAlignmentCenter;
+    [bar addSubview:titleText];
+    NSRange requestPathRange = [_model.requestURLString rangeOfString:@"?"];
+    NSString *requestPath;
+    if (requestPathRange.location == NSNotFound) {
+        requestPath =_model.requestURLString;
+    }else {
+        requestPath = [_model.requestURLString substringToIndex:requestPathRange.location];
+    }
+    titleText.text=requestPath;
+    titleText.lineBreakMode = NSLineBreakByTruncatingHead;
+    
+    mainTextView=[[UITextView alloc] initWithFrame:CGRectMake(0, 64, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-64)];
+    [self.view addSubview:mainTextView];
+    model = [[NEHTTPModel alloc] init];
+
+    NSArray *allMapRequests = [[NEHTTPModelManager defaultManager] allMapObjects];
+    for (NSInteger i=0; i < allMapRequests.count; i++) {
+        NEHTTPModel *req = [allMapRequests objectAtIndex:i];
+        if ([[_model.ne_request.URL absoluteString] containsString:req.mapPath]) {
+            mainTextView.text=req.mapJSONData;
+            model = req;
+        }
+    }
+
+    
+}
+
+- (void)backBtAction {
+    if (![[mainTextView.text stringByTrimmingCharactersInSet:
+          [NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:model.mapJSONData] && mainTextView.text.length>0) {
+
+        model.mapJSONData = [mainTextView.text stringByTrimmingCharactersInSet:
+                              [NSCharacterSet whitespaceAndNewlineCharacterSet]];
+        NSRange requestPathRange = [_model.requestURLString rangeOfString:@"?"];
+        NSString *requestPath;
+        if (requestPathRange.location == NSNotFound) {
+            requestPath =_model.requestURLString;
+        }else {
+            requestPath = [_model.requestURLString substringToIndex:requestPathRange.location];
+        }
+
+        model.mapPath = requestPath;
+        [[NEHTTPModelManager defaultManager] addMapObject:model];
+    }else if (mainTextView.text.length==0) {
+        [[NEHTTPModelManager defaultManager] removeMapObject:model];
+    }
+    
+    [self dismissViewControllerAnimated:YES completion:nil];
+    
+}
+
+- (void)rightAction {
+    [[NEHTTPModelManager defaultManager] removeMapObject:model];
+    mainTextView.text=@"";
+
+}
+
+
+@end

+ 25 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEShakeGestureManager.h

@@ -0,0 +1,25 @@
+//
+//  NEShakeGestureManager.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/5.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NEShakeGestureManager : NSObject
+
+/**
+ *  get NEShakeGestureManager's singleton object
+ *
+ *  @return singleton object
+ */
++ (NEShakeGestureManager *)defaultManager;
+
+/**
+ *  show Go NetworkEye page 's alertView
+ */
+- (void)showAlertView;
+
+@end

+ 78 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEShakeGestureManager.m

@@ -0,0 +1,78 @@
+//
+//  NEShakeGestureManager.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/5.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "NEShakeGestureManager.h"
+
+#import <UIKit/UIKit.h>
+#import "NEHTTPEyeViewController.h"
+
+@interface NEShakeGestureManager ()<UIAlertViewDelegate>
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+@property (nonatomic, strong) UIAlertView *alertView;
+#pragma clang diagnostic pop
+
+@end
+
+@implementation NEShakeGestureManager
+
++ (NEShakeGestureManager *)defaultManager {
+    
+    static NEShakeGestureManager *staticManager;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        staticManager=[[NEShakeGestureManager alloc] init];
+    });
+    return staticManager;
+    
+}
+
+- (void)showAlertView {
+    
+    [self.alertView show];
+    
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (UIAlertView *)alertView {
+    
+    if (_alertView == nil) {
+        _alertView = [[UIAlertView alloc] init];
+        _alertView.delegate = self;
+        _alertView.title = @"Network Eye";
+        [_alertView addButtonWithTitle:@"Go NetworkEye"];
+        [_alertView addButtonWithTitle:@"Cancel"];
+        [_alertView setCancelButtonIndex:[_alertView numberOfButtons]-1];
+    }
+    return _alertView;
+    
+}
+#pragma clang diagnostic pop
+
+
+- (void)presentInformationViewController {
+    
+    NEHTTPEyeViewController *viewController = [[NEHTTPEyeViewController alloc] init];
+    [[[[[UIApplication sharedApplication] delegate] window] rootViewController]
+     presentViewController:viewController animated:YES completion:nil];
+    
+}
+
+#pragma mark - UIAlertViewDelegate
+
+- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
+    
+    NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
+    if ([buttonTitle isEqualToString:@"Go NetworkEye"]) {
+        [self presentInformationViewController];
+    }
+}
+
+@end

+ 30 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEURLSessionConfiguration.h

@@ -0,0 +1,30 @@
+//
+//  NEURLSessionConfiguration.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/9.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NEURLSessionConfiguration : NSObject
+@property (nonatomic,assign) BOOL isSwizzle;// whether swizzle NSURLSessionConfiguration's protocolClasses method
+
+/**
+ *  get NEURLSessionConfiguration's singleton object
+ *
+ *  @return singleton object
+ */
++ (NEURLSessionConfiguration *)defaultConfiguration;
+
+/**
+ *  swizzle NSURLSessionConfiguration's protocolClasses method
+ */
+- (void)load;
+
+/**
+ *  make NSURLSessionConfiguration's protocolClasses method is normal
+ */
+- (void)unload;
+@end

+ 64 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/NEURLSessionConfiguration.m

@@ -0,0 +1,64 @@
+//
+//  NEURLSessionConfiguration.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/9.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "NEURLSessionConfiguration.h"
+#import <objc/runtime.h>
+#import "NEHTTPEye.h"
+
+@implementation NEURLSessionConfiguration
+
++ (NEURLSessionConfiguration *)defaultConfiguration {
+    
+    static NEURLSessionConfiguration *staticConfiguration;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        staticConfiguration=[[NEURLSessionConfiguration alloc] init];
+    });
+    return staticConfiguration;
+    
+}
+- (instancetype)init {
+    self = [super init];
+    if (self) {
+        self.isSwizzle=NO;
+    }
+    return self;
+}
+
+- (void)load {
+    
+    self.isSwizzle=YES;
+    Class cls = NSClassFromString(@"__NSCFURLSessionConfiguration") ?: NSClassFromString(@"NSURLSessionConfiguration");
+    [self swizzleSelector:@selector(protocolClasses) fromClass:cls toClass:[self class]];
+    
+}
+
+- (void)unload {
+    
+    self.isSwizzle=NO;
+    Class cls = NSClassFromString(@"__NSCFURLSessionConfiguration") ?: NSClassFromString(@"NSURLSessionConfiguration");
+    [self swizzleSelector:@selector(protocolClasses) fromClass:cls toClass:[self class]];
+
+}
+
+- (void)swizzleSelector:(SEL)selector fromClass:(Class)original toClass:(Class)stub {
+    
+    Method originalMethod = class_getInstanceMethod(original, selector);
+    Method stubMethod = class_getInstanceMethod(stub, selector);
+    if (!originalMethod || !stubMethod) {
+        [NSException raise:NSInternalInconsistencyException format:@"Couldn't load NEURLSessionConfiguration."];
+    }
+    method_exchangeImplementations(originalMethod, stubMethod);
+}
+
+- (NSArray *)protocolClasses {
+    
+    return @[[NEHTTPEye class]];//如果需要导入其他的自定义NSURLProtocol请在这里增加,当然在使用NSURLSessionConfiguration时增加也可以
+}
+
+@end

+ 13 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/UIWindow+NEExtension.h

@@ -0,0 +1,13 @@
+//
+//  UIWindow+NEExtension.h
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/14.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIWindow (NEExtension)
+
+@end

+ 42 - 0
MiMoLive/Pods/NetworkEye/NetworkEye/NetworkEye/UIWindow+NEExtension.m

@@ -0,0 +1,42 @@
+//
+//  UIWindow+NEExtension.m
+//  NetworkEye
+//
+//  Created by coderyi on 15/11/14.
+//  Copyright © 2015年 coderyi. All rights reserved.
+//
+
+#import "UIWindow+NEExtension.h"
+#import "NEShakeGestureManager.h"
+
+@implementation UIWindow (NEExtension)
+
+#if defined(DEBUG)||defined(_DEBUG)
+- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
+
+    if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) {
+        [[NEShakeGestureManager defaultManager] showAlertView];
+    }
+  
+}
+
+- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
+ 
+    int twoFingerTag=NO;
+    if ([event allTouches].count==2) {
+        for (UITouch *touch in [event allTouches]) {
+            if (touch.tapCount==1) {
+                twoFingerTag=YES;
+            }else{
+                twoFingerTag=NO;
+            }
+        }
+    }
+    if (twoFingerTag) {
+        [[NEShakeGestureManager defaultManager] showAlertView];
+    }
+  
+}
+#endif
+
+@end

+ 113 - 0
MiMoLive/Pods/NetworkEye/README.md

@@ -0,0 +1,113 @@
+# NetworkEye
+[![Pod Version](http://img.shields.io/cocoapods/v/NetworkEye.svg?style=flat)](http://cocoadocs.org/docsets/NetworkEye/)
+[![Pod Platform](http://img.shields.io/cocoapods/p/NetworkEye.svg?style=flat)](http://cocoadocs.org/docsets/NetworkEye/)
+[![Pod License](http://img.shields.io/cocoapods/l/NetworkEye.svg?style=flat)](https://opensource.org/licenses/MIT)
+[![Twitter](https://img.shields.io/badge/twitter-@coderyi9-green.svg?style=flat)](http://twitter.com/coderyi9)
+[![](https://img.shields.io/github/stars/coderyi/NetworkEye.svg)](https://github.com/coderyi/NetworkEye/stargazers) 
+[![](https://img.shields.io/github/forks/coderyi/NetworkEye.svg)](https://github.com/coderyi/NetworkEye/network) 
+[![](https://img.shields.io/cocoapods/dt/NetworkEye.svg?maxAge=2592000)](https://github.com/coderyi/NetworkEye) 
+[![](https://img.shields.io/cocoapods/dm/NetworkEye.svg?maxAge=2592000)](https://github.com/coderyi/NetworkEye) 
+[![](https://img.shields.io/cocoapods/dw/NetworkEye.svg?maxAge=2592000)](https://github.com/coderyi/NetworkEye) 
+
+<p align="center" >
+
+<img  src="https://raw.githubusercontent.com/coderyi/NetworkEye/master/NetworkEye/Resources/networkeye_logo_detail.png" width="480" height="160">
+</p>
+
+[README 中文](https://github.com/coderyi/NetworkEye/blob/master/README_Chinese.md)
+
+NetworkEye,a iOS network debug library,It can monitor HTTP requests within the App and displays information related to the request.
+
+It can be detected HTTP request include web pages, NSURLConnection, NSURLSession, AFNetworking, third-party libraries, third-party SDK ,and so on. very convenient and practical. 
+
+It can be map local json file.
+
+I created a google group,this group is for general discussion NetworkEye
+,welcome to join,[https://groups.google.com/d/forum/networkeye](https://groups.google.com/d/forum/networkeye)
+
+if you use NetworkEye, you can add it in here,[Who-Uses-NetworkEye](https://github.com/coderyi/NetworkEye/wiki/Who-Uses-NetworkEye)
+
+welcome to new pull request,that fix bug,add new features,add support other platform.and welcome to [new issues](https://github.com/coderyi/NetworkEye/issues).
+
+and thanks to [kasketis](https://github.com/kasketis) write the swift version  [netfox](https://github.com/kasketis/netfox)
+
+I think NetworkEye need a logo,I hope some can help me.
+
+#### Podfile
+
+```ruby
+
+	platform :ios, '7.0'
+	pod 'NetworkEye', '~> 1.1.0'
+	# pod 'NetworkEye/FMDB', '~> 1.1.0'   # NetworkEye with FMDB ,save your requests to database
+
+```
+
+
+#### Instruction
+Note:Use Network Eye in DEBUG mode
+
+add the code in AppDelegate.m   
+<pre>
+#import "NEHTTPEye.h"
+#if defined(DEBUG)||defined(_DEBUG)
+    [NEHTTPEye setEnabled:YES];
+#endif
+</pre>
+
+you can use use the shortcut (⌘ Command + n) , a double tap or shake device to call out the monitoring data interface
+
+NEHTTPEyeViewController
+
+You can also use the following code present out directly
+<pre>
+#if defined(DEBUG)||defined(_DEBUG)
+    NEHTTPEyeViewController *vc=[[NEHTTPEyeViewController alloc] init];
+    [self presentViewController:vc animated:YES completion:nil];
+#endif
+</pre>
+In NEHTTPEye.h there are two parameters you can configure that is the default password of database is "networkeye" ,and by default set,you can save 300 requests.
+
+
+the database name is networkeye.sqlite,and stored in the cache directory.
+
+<pre>
+#define kSQLitePassword @"networkeye"
+
+#define kSaveRequestMaxCount 300
+</pre>
+
+you can change it use NEHTTPModelManager
+<pre>
+    [NEHTTPModelManager defaultManager].saveRequestMaxCount=300;
+    [NEHTTPModelManager defaultManager].sqlitePassword=@"networkeye";
+</pre>
+NetworkEye rely FMDB and SQLCipher。
+FMDB be used to store data,SQLCipher be used to encrypt the database。
+
+Monitoring data interface supports some search conditions ,it is URL,statusCode,HTTPMethod,MIMEType。
+#### Preview
+the monitor data interface of NetworkEye:
+
+<img  src="https://raw.githubusercontent.com/coderyi/NetworkEye/master/NetworkEye/Resources/networkeye1_3.png" width="320" height="570">
+
+<img  src="https://raw.githubusercontent.com/coderyi/NetworkEye/master/NetworkEye/Resources/networkeye2.png" width="320" height="570">
+
+<img  src="https://raw.githubusercontent.com/coderyi/NetworkEye/master/NetworkEye/Resources/networkeye5.png" width="320" height="570">
+
+
+
+#### Licenses
+
+All source code is licensed under the [MIT License](https://github.com/coderyi/NetworkEye/blob/master/LICENSE).
+
+#### Contributors
+
+thanks!
+
+[Xi Lin](https://github.com/xilin)
+
+[Zhu Lida](https://github.com/zld)
+
+[Jackrex](https://github.com/jackrex)
+

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 4640 - 4583
MiMoLive/Pods/Pods.xcodeproj/project.pbxproj


+ 26 - 0
MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye-Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>1.1.2</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>

+ 5 - 0
MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_NetworkEye : NSObject
+@end
+@implementation PodsDummy_NetworkEye
+@end

+ 12 - 0
MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye-prefix.pch

@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+

+ 27 - 0
MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye-umbrella.h

@@ -0,0 +1,27 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+#import "NEHTTPEye.h"
+#import "NEHTTPEyeDetailViewController.h"
+#import "NEHTTPEyeSettingsViewController.h"
+#import "NEHTTPEyeViewController.h"
+#import "NEHTTPModel.h"
+#import "NEHTTPModelManager.h"
+#import "NEKeyboardShortcutManager.h"
+#import "NEMapViewController.h"
+#import "NEShakeGestureManager.h"
+#import "NEURLSessionConfiguration.h"
+#import "UIWindow+NEExtension.h"
+
+FOUNDATION_EXPORT double NetworkEyeVersionNumber;
+FOUNDATION_EXPORT const unsigned char NetworkEyeVersionString[];
+

+ 13 - 0
MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye.debug.xcconfig

@@ -0,0 +1,13 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/NetworkEye
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "UIKit"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/NetworkEye
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 6 - 0
MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye.modulemap

@@ -0,0 +1,6 @@
+framework module NetworkEye {
+  umbrella header "NetworkEye-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 13 - 0
MiMoLive/Pods/Target Support Files/NetworkEye/NetworkEye.release.xcconfig

@@ -0,0 +1,13 @@
+CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/NetworkEye
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -framework "CoreGraphics" -framework "Foundation" -framework "UIKit"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/NetworkEye
+PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES
+USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

+ 24 - 0
MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-acknowledgements.markdown

@@ -768,6 +768,30 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
+## NetworkEye
+
+The MIT License (MIT)
+
+Copyright (c) 2015 coderyi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
 ## Protobuf
 
 Copyright 2008 Google Inc.  All rights reserved.

+ 30 - 0
MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-acknowledgements.plist

@@ -881,6 +881,36 @@ THE SOFTWARE.</string>
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>The MIT License (MIT)
+
+Copyright (c) 2015 coderyi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>NetworkEye</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>Copyright 2008 Google Inc.  All rights reserved.

+ 1 - 0
MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-frameworks-Debug-input-files.xcfilelist

@@ -12,6 +12,7 @@ ${BUILT_PRODUCTS_DIR}/LookinServer/LookinServer.framework
 ${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework
 ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework
 ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework
+${BUILT_PRODUCTS_DIR}/NetworkEye/NetworkEye.framework
 ${BUILT_PRODUCTS_DIR}/Protobuf/Protobuf.framework
 ${BUILT_PRODUCTS_DIR}/ReactiveObjC/ReactiveObjC.framework
 ${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework

+ 1 - 0
MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-frameworks-Debug-output-files.xcfilelist

@@ -11,6 +11,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LookinServer.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NetworkEye.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Protobuf.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactiveObjC.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework

+ 1 - 0
MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive-frameworks.sh

@@ -189,6 +189,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/NetworkEye/NetworkEye.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/Protobuf/Protobuf.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ReactiveObjC/ReactiveObjC.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
MiMoLive/Pods/Target Support Files/Pods-MiMoLive/Pods-MiMoLive.debug.xcconfig


+ 2 - 1
MiMoLive/podfile

@@ -77,5 +77,6 @@ target 'MiMoLive' do
   pod 'GCDWebServer', :configurations => ['Debug']
   pod 'DoraemonKit', :configurations => ['Debug']
   pod 'CocoaLumberjack', :configurations => ['Debug']
+  pod 'NetworkEye', :configurations => ['Debug']
 
-end
+end

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio