diff --git a/GIGA.xcodeproj/project.pbxproj b/GIGA.xcodeproj/project.pbxproj index b7831d7..154ceae 100644 --- a/GIGA.xcodeproj/project.pbxproj +++ b/GIGA.xcodeproj/project.pbxproj @@ -94,6 +94,14 @@ 83A22718212ABDFF00B3E75C /* GiGaBlockButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A22717212ABDFF00B3E75C /* GiGaBlockButton.m */; }; 83A2271F212AC8C100B3E75C /* GiGaUserLoginVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A2271D212AC8C100B3E75C /* GiGaUserLoginVC.m */; }; 83A22720212AC8C100B3E75C /* GiGaUserLoginVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 83A2271E212AC8C100B3E75C /* GiGaUserLoginVC.xib */; }; + 83BFAE67213CCF10004EF801 /* GiGaMineUserViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BFAE65213CCF10004EF801 /* GiGaMineUserViewCell.m */; }; + 83BFAE68213CCF10004EF801 /* GiGaMineUserViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 83BFAE66213CCF10004EF801 /* GiGaMineUserViewCell.xib */; }; + 83BFAE6C213CD0E3004EF801 /* GiGaMineInfoViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BFAE6A213CD0E3004EF801 /* GiGaMineInfoViewCell.m */; }; + 83BFAE6D213CD0E3004EF801 /* GiGaMineInfoViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 83BFAE6B213CD0E3004EF801 /* GiGaMineInfoViewCell.xib */; }; + 83BFAE70213CDB29004EF801 /* GiMaskTimeHistoryVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BFAE6F213CDB29004EF801 /* GiMaskTimeHistoryVC.m */; }; + 83BFAE73213CDB58004EF801 /* GiSysSettingsVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BFAE72213CDB58004EF801 /* GiSysSettingsVC.m */; }; + 83BFAE77213CDE91004EF801 /* GiGaSettingsViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 83BFAE75213CDE91004EF801 /* GiGaSettingsViewCell.m */; }; + 83BFAE78213CDE91004EF801 /* GiGaSettingsViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 83BFAE76213CDE91004EF801 /* GiGaSettingsViewCell.xib */; }; 83E40B2B21218B6F008149C4 /* GiGaExercisesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83E40B2A21218B6F008149C4 /* GiGaExercisesViewController.m */; }; 83E40B2F21218BA0008149C4 /* GiGaUserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 83E40B2E21218BA0008149C4 /* GiGaUserViewController.m */; }; /* End PBXBuildFile section */ @@ -271,6 +279,19 @@ 83A2271C212AC8C100B3E75C /* GiGaUserLoginVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiGaUserLoginVC.h; sourceTree = ""; }; 83A2271D212AC8C100B3E75C /* GiGaUserLoginVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GiGaUserLoginVC.m; sourceTree = ""; }; 83A2271E212AC8C100B3E75C /* GiGaUserLoginVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GiGaUserLoginVC.xib; sourceTree = ""; }; + 83BFAE64213CCF10004EF801 /* GiGaMineUserViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiGaMineUserViewCell.h; sourceTree = ""; }; + 83BFAE65213CCF10004EF801 /* GiGaMineUserViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GiGaMineUserViewCell.m; sourceTree = ""; }; + 83BFAE66213CCF10004EF801 /* GiGaMineUserViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GiGaMineUserViewCell.xib; sourceTree = ""; }; + 83BFAE69213CD0E3004EF801 /* GiGaMineInfoViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiGaMineInfoViewCell.h; sourceTree = ""; }; + 83BFAE6A213CD0E3004EF801 /* GiGaMineInfoViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GiGaMineInfoViewCell.m; sourceTree = ""; }; + 83BFAE6B213CD0E3004EF801 /* GiGaMineInfoViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GiGaMineInfoViewCell.xib; sourceTree = ""; }; + 83BFAE6E213CDB29004EF801 /* GiMaskTimeHistoryVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiMaskTimeHistoryVC.h; sourceTree = ""; }; + 83BFAE6F213CDB29004EF801 /* GiMaskTimeHistoryVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GiMaskTimeHistoryVC.m; sourceTree = ""; }; + 83BFAE71213CDB58004EF801 /* GiSysSettingsVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiSysSettingsVC.h; sourceTree = ""; }; + 83BFAE72213CDB58004EF801 /* GiSysSettingsVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GiSysSettingsVC.m; sourceTree = ""; }; + 83BFAE74213CDE91004EF801 /* GiGaSettingsViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiGaSettingsViewCell.h; sourceTree = ""; }; + 83BFAE75213CDE91004EF801 /* GiGaSettingsViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GiGaSettingsViewCell.m; sourceTree = ""; }; + 83BFAE76213CDE91004EF801 /* GiGaSettingsViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GiGaSettingsViewCell.xib; sourceTree = ""; }; 83E40B2921218B6F008149C4 /* GiGaExercisesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiGaExercisesViewController.h; sourceTree = ""; }; 83E40B2A21218B6F008149C4 /* GiGaExercisesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GiGaExercisesViewController.m; sourceTree = ""; }; 83E40B2D21218BA0008149C4 /* GiGaUserViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GiGaUserViewController.h; sourceTree = ""; }; @@ -631,6 +652,15 @@ 8361B42A212180A100238FEB /* View */ = { isa = PBXGroup; children = ( + 83BFAE64213CCF10004EF801 /* GiGaMineUserViewCell.h */, + 83BFAE65213CCF10004EF801 /* GiGaMineUserViewCell.m */, + 83BFAE66213CCF10004EF801 /* GiGaMineUserViewCell.xib */, + 83BFAE69213CD0E3004EF801 /* GiGaMineInfoViewCell.h */, + 83BFAE6A213CD0E3004EF801 /* GiGaMineInfoViewCell.m */, + 83BFAE6B213CD0E3004EF801 /* GiGaMineInfoViewCell.xib */, + 83BFAE74213CDE91004EF801 /* GiGaSettingsViewCell.h */, + 83BFAE75213CDE91004EF801 /* GiGaSettingsViewCell.m */, + 83BFAE76213CDE91004EF801 /* GiGaSettingsViewCell.xib */, ); path = View; sourceTree = ""; @@ -642,6 +672,10 @@ 83E40B2E21218BA0008149C4 /* GiGaUserViewController.m */, 835060A0212D1225007E6220 /* GiGaMeViewController.h */, 835060A1212D1225007E6220 /* GiGaMeViewController.m */, + 83BFAE6E213CDB29004EF801 /* GiMaskTimeHistoryVC.h */, + 83BFAE6F213CDB29004EF801 /* GiMaskTimeHistoryVC.m */, + 83BFAE71213CDB58004EF801 /* GiSysSettingsVC.h */, + 83BFAE72213CDB58004EF801 /* GiSysSettingsVC.m */, ); path = Controller; sourceTree = ""; @@ -1004,13 +1038,16 @@ buildActionMask = 2147483647; files = ( 83346AC6212BBC8C0054D597 /* GiGaRegistViewController.xib in Resources */, + 83BFAE6D213CD0E3004EF801 /* GiGaMineInfoViewCell.xib in Resources */, 8361B3D6212155C300238FEB /* LaunchScreen.storyboard in Resources */, 838388DA2130046D00D14C53 /* emojizone.mp4 in Resources */, 83A22720212AC8C100B3E75C /* GiGaUserLoginVC.xib in Resources */, 838388C4212F934400D14C53 /* pomodoSound.m4a in Resources */, + 83BFAE78213CDE91004EF801 /* GiGaSettingsViewCell.xib in Resources */, 83346AC1212BB50A0054D597 /* PassWordResetVC.xib in Resources */, 83346AD1212BF5B70054D597 /* useragreement.html in Resources */, 838388CA212FA00200D14C53 /* MaskTime.png in Resources */, + 83BFAE68213CCF10004EF801 /* GiGaMineUserViewCell.xib in Resources */, 83835BA8212E4748001480F2 /* MAssaageCenterCell.xib in Resources */, 8361B3D3212155C300238FEB /* Assets.xcassets in Resources */, 8361B3D1212155C200238FEB /* Main.storyboard in Resources */, @@ -1072,7 +1109,9 @@ "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework", "${BUILT_PRODUCTS_DIR}/NJKWebViewProgress/NJKWebViewProgress.framework", "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", + "${BUILT_PRODUCTS_DIR}/Socket.IO-Client-Swift/SocketIO.framework", "${BUILT_PRODUCTS_DIR}/SocketRocket/SocketRocket.framework", + "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework", "${BUILT_PRODUCTS_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework", "${BUILT_PRODUCTS_DIR}/Toast/Toast.framework", "${BUILT_PRODUCTS_DIR}/UITableView+FDTemplateLayoutCell/UITableView_FDTemplateLayoutCell.framework", @@ -1090,7 +1129,9 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NJKWebViewProgress.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SocketIO.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SocketRocket.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Starscream.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TTTAttributedLabel.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UITableView_FDTemplateLayoutCell.framework", @@ -1112,11 +1153,13 @@ 83346AC5212BBC8C0054D597 /* GiGaRegistViewController.m in Sources */, 83346AD7212C18F50054D597 /* GiGaAppGaurdVC.m in Sources */, 8349585C212511040064DB6C /* AppDelegate+ThirdParty.m in Sources */, + 83BFAE73213CDB58004EF801 /* GiSysSettingsVC.m in Sources */, 838500DC2137F3F7003514A3 /* GiGaAttributedLabel.m in Sources */, 8314D2112133ABE500B458BF /* WeiIXinApiManager.m in Sources */, 83835BCA212E8045001480F2 /* GIGAQuetionView.m in Sources */, 8361B3CE212155C200238FEB /* ViewController.m in Sources */, 8361B4382121847600238FEB /* UINavigationBar+Custom.m in Sources */, + 83BFAE6C213CD0E3004EF801 /* GiGaMineInfoViewCell.m in Sources */, 83346AD4212BFF6E0054D597 /* UserGuardViewController.m in Sources */, 8357ADC92123BFCA000816F2 /* GiGaUserManager.m in Sources */, 83835BB3212E50ED001480F2 /* ActiveMesagelistVC.m in Sources */, @@ -1152,18 +1195,21 @@ 83835BB9212E51B0001480F2 /* GiGaSystemViewController.m in Sources */, 8361B40421215E0C00238FEB /* LXCountTimer.m in Sources */, 8357ADC52123BEBD000816F2 /* GiGaUser.m in Sources */, + 83BFAE67213CCF10004EF801 /* GiGaMineUserViewCell.m in Sources */, 8392900C2134F9F80077D2E8 /* GiGaCommentView.m in Sources */, 839290062134F4240077D2E8 /* LXDanMuManager.m in Sources */, 839290052134F4240077D2E8 /* LXDanMuTrackView.m in Sources */, 83E40B2F21218BA0008149C4 /* GiGaUserViewController.m in Sources */, 835060A5212D3536007E6220 /* AppDelegate+GiGaConfig.m in Sources */, 83E40B2B21218B6F008149C4 /* GiGaExercisesViewController.m in Sources */, + 83BFAE77213CDE91004EF801 /* GiGaSettingsViewCell.m in Sources */, 83835BA7212E4748001480F2 /* MAssaageCenterCell.m in Sources */, 836EE5D42136454500F0ABB2 /* RegistGetSMSCodeRequest.m in Sources */, 8361B42E2121812000238FEB /* GiGaServerConfig.m in Sources */, 836EE5DA2136716100F0ABB2 /* NSTimer+Convenience.m in Sources */, 83A22712212A9EA900B3E75C /* UIView+Sizes.m in Sources */, 839290092134F4C40077D2E8 /* GiGaFlingCommitVC.m in Sources */, + 83BFAE70213CDB29004EF801 /* GiMaskTimeHistoryVC.m in Sources */, 83A22718212ABDFF00B3E75C /* GiGaBlockButton.m in Sources */, 83928FFE2134F37D0077D2E8 /* GiGaSocketRocketUtility.m in Sources */, 83A2270C212A97ED00B3E75C /* MaskViewBootomWaringView.m in Sources */, diff --git a/GIGA.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/xcschememanagement.plist b/GIGA.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/xcschememanagement.plist index cd80bed..26805d5 100644 --- a/GIGA.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/GIGA.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ GIGA.xcscheme orderHint - 16 + 18 diff --git a/GIGA/Assets.xcassets/login/btn_right.imageset/Contents.json b/GIGA/Assets.xcassets/login/btn_right.imageset/Contents.json index 7d0fc11..6c2fec6 100644 --- a/GIGA/Assets.xcassets/login/btn_right.imageset/Contents.json +++ b/GIGA/Assets.xcassets/login/btn_right.imageset/Contents.json @@ -4,6 +4,14 @@ "idiom" : "universal", "filename" : "btn_right.png", "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/GIGA/Assets.xcassets/login/btn_turndown.imageset/Contents.json b/GIGA/Assets.xcassets/login/btn_turndown.imageset/Contents.json index f1a2ace..9abf196 100644 --- a/GIGA/Assets.xcassets/login/btn_turndown.imageset/Contents.json +++ b/GIGA/Assets.xcassets/login/btn_turndown.imageset/Contents.json @@ -4,6 +4,14 @@ "idiom" : "universal", "filename" : "btn_turndown.png", "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/GIGA/Common/BaseVC/GiGaBaseViewController.h b/GIGA/Common/BaseVC/GiGaBaseViewController.h index c1a77cc..2c47fd2 100644 --- a/GIGA/Common/BaseVC/GiGaBaseViewController.h +++ b/GIGA/Common/BaseVC/GiGaBaseViewController.h @@ -12,6 +12,7 @@ { UIView *_emptyView; UIView *_noNetWorkView; + UITableView *_tableView; } @property (nonatomic,strong) UIView * emptyView; diff --git a/GIGA/Common/BaseVC/GiGaBaseViewController.m b/GIGA/Common/BaseVC/GiGaBaseViewController.m index 092599e..4a70e72 100644 --- a/GIGA/Common/BaseVC/GiGaBaseViewController.m +++ b/GIGA/Common/BaseVC/GiGaBaseViewController.m @@ -34,7 +34,7 @@ -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; - [self.navigationController.navigationBar cnSetBackgroundColor:GIGAUIColorFromRGB_A(0xD8D8D8, 0.2)]; + //[self.navigationController.navigationBar cnSetBackgroundColor:GIGAUIColorFromRGB_A(0xD8D8D8, 0.2)]; } -(void)addNavTitile:(NSString *)title{ @@ -97,7 +97,7 @@ if (!_tableView) { - _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; + _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, PhoneX_TopMargin, KMainW,KMainH - PhoneX_BottomMargin) style:UITableViewStyleGrouped]; } return _tableView; } diff --git a/GIGA/Config/GIGA.h b/GIGA/Config/GIGA.h index 2be15ac..3e1ee97 100644 --- a/GIGA/Config/GIGA.h +++ b/GIGA/Config/GIGA.h @@ -80,4 +80,10 @@ alpha:((float)(rgbValue & 0xFF))/255.0] #define GIGA_ShowToast(__toast__) [self.view makeToast:(__toast__) duration:1.5 position:CSToastPositionCenter]; #define GIGA_WIndowTost(__toast__) [[UIApplication sharedApplication].keyWindow makeToast:(__toast__) duration:1.5 position:CSToastPositionCenter]; +//X +#define PhoneX_BottomMargin ([UIScreen mainScreen].bounds.size.height == 812.0 ? 34.0 :0.0) + +#define PhoneX_TopMargin ([UIScreen mainScreen].bounds.size.height == 812.0 ? 24.0 :0.0) + + #endif /* GIGA_h */ diff --git a/GIGA/Info.plist b/GIGA/Info.plist index 081700e..4768a60 100644 --- a/GIGA/Info.plist +++ b/GIGA/Info.plist @@ -7,7 +7,7 @@ CFBundleDevelopmentRegion cn CFBundleDisplayName - MaskTime + 面膜时间 CFBundleDocumentTypes diff --git a/GIGA/Modules/Mask/Controller/GiGaMaskTaskViewController.m b/GIGA/Modules/Mask/Controller/GiGaMaskTaskViewController.m index 6879e2e..2600051 100644 --- a/GIGA/Modules/Mask/Controller/GiGaMaskTaskViewController.m +++ b/GIGA/Modules/Mask/Controller/GiGaMaskTaskViewController.m @@ -376,7 +376,6 @@ #pragma mark 开始测试 -(void)testBtnAcion:(UIButton *)btn{ - BOOL isUserLogin = [GiGaUserDefault isUserLogin]; if (isUserLogin) { diff --git a/GIGA/Modules/Me/Controller/GiGaMeViewController.h b/GIGA/Modules/Me/Controller/GiGaMeViewController.h index deda6ca..bcf4a0c 100644 --- a/GIGA/Modules/Me/Controller/GiGaMeViewController.h +++ b/GIGA/Modules/Me/Controller/GiGaMeViewController.h @@ -7,7 +7,8 @@ // #import +#import "GiGaBaseViewController.h" -@interface GiGaMeViewController : UIViewController +@interface GiGaMeViewController : GiGaBaseViewController @end diff --git a/GIGA/Modules/Me/Controller/GiGaMeViewController.m b/GIGA/Modules/Me/Controller/GiGaMeViewController.m index 24eab68..a5f2e93 100644 --- a/GIGA/Modules/Me/Controller/GiGaMeViewController.m +++ b/GIGA/Modules/Me/Controller/GiGaMeViewController.m @@ -8,6 +8,10 @@ #import "GiGaMeViewController.h" #import "GiGaUserViewController.h" +#import "GiGaMineUserViewCell.h" +#import "GiGaMineInfoViewCell.h" +#import "GiSysSettingsVC.h" +#import "GiMaskTimeHistoryVC.h" @interface GiGaMeViewController () @@ -17,21 +21,105 @@ - (void)viewDidLoad { [super viewDidLoad]; - self.title = @"我的"; + + [self addNavTitile:@"我的"]; // Do any additional setup after loading the view. + [self.view addSubview:self.tableView]; + self.tableView.delegate = self; + self.tableView.dataSource = self; + self.tableView.backgroundColor = [UIColor lightGrayColor]; + self.tableView.separatorStyle = UITableViewCellSelectionStyleNone; + self.tableView.sectionFooterHeight = 0; + self.tableView.estimatedSectionFooterHeight= 0; + self.tableView.estimatedSectionHeaderHeight = 0; + } + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ + return 2; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + + if (section == 0){ + return 1; + } + return 2; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + if(indexPath.section ==0){ + GiGaMineUserViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"GiGaMineUserViewCell"]; + if(!cell){ + cell = [[[NSBundle mainBundle] loadNibNamed:@"GiGaMineUserViewCell" owner:self options:nil] lastObject]; + + } + return cell; + } + GiGaMineInfoViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"GiGaMineInfoViewCell"]; + if(!cell){ + cell = [[[NSBundle mainBundle] loadNibNamed:@"GiGaMineInfoViewCell" owner:self options:nil] lastObject]; + + } + + [cell loadCellData:indexPath]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + if(indexPath.section == 1){ + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + } + + if(indexPath.section == 0){ + GiGaUserViewController *userVC= [[GiGaUserViewController alloc] init]; + [self.navigationController pushViewController:userVC animated:YES]; + + }else{ + if (indexPath.section == 1 && indexPath.row == 0 ){ + //历史记录 + GiMaskTimeHistoryVC *historyVC= [[GiMaskTimeHistoryVC alloc] init]; + [self.navigationController pushViewController:historyVC animated:YES]; + + }else{ + //系统设置 + GiSysSettingsVC*settingsVC= [[GiSysSettingsVC alloc] init]; + [self.navigationController pushViewController:settingsVC animated:YES]; + + } + + } + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + if(indexPath.section==0){ + return 180; + + }else { + return 54; + } +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ + return 0.1; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ + if (section == 1){ + return 20; + } + return 0.1; +} + + - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event -{ - GiGaUserViewController *userVC= [[GiGaUserViewController alloc] init]; - [self.navigationController pushViewController:userVC animated:YES]; -} @end diff --git a/GIGA/Modules/Me/Controller/GiGaUserViewController.h b/GIGA/Modules/Me/Controller/GiGaUserViewController.h index d96c41e..c4efba3 100644 --- a/GIGA/Modules/Me/Controller/GiGaUserViewController.h +++ b/GIGA/Modules/Me/Controller/GiGaUserViewController.h @@ -7,7 +7,8 @@ // #import +#import "GiGaBaseViewController.h" -@interface GiGaUserViewController : UIViewController +@interface GiGaUserViewController : GiGaBaseViewController @end diff --git a/GIGA/Modules/Me/Controller/GiGaUserViewController.m b/GIGA/Modules/Me/Controller/GiGaUserViewController.m index 8eb792e..2927025 100644 --- a/GIGA/Modules/Me/Controller/GiGaUserViewController.m +++ b/GIGA/Modules/Me/Controller/GiGaUserViewController.m @@ -18,7 +18,8 @@ [super viewDidLoad]; // Do any additional setup after loading the view. - self.title = @"个人中心"; + //self.title = @"个人中心"; + [self addNavTitile:@"个人中心"]; } diff --git a/GIGA/Modules/Me/Controller/GiMaskTimeHistoryVC.h b/GIGA/Modules/Me/Controller/GiMaskTimeHistoryVC.h new file mode 100644 index 0000000..4a3e7b1 --- /dev/null +++ b/GIGA/Modules/Me/Controller/GiMaskTimeHistoryVC.h @@ -0,0 +1,13 @@ +// +// GiMaskTimeHistoryVC.h +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import "GiGaBaseViewController.h" + +@interface GiMaskTimeHistoryVC : GiGaBaseViewController + +@end diff --git a/GIGA/Modules/Me/Controller/GiMaskTimeHistoryVC.m b/GIGA/Modules/Me/Controller/GiMaskTimeHistoryVC.m new file mode 100644 index 0000000..b2851f1 --- /dev/null +++ b/GIGA/Modules/Me/Controller/GiMaskTimeHistoryVC.m @@ -0,0 +1,38 @@ +// +// GiMaskTimeHistoryVC.m +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import "GiMaskTimeHistoryVC.h" + +@interface GiMaskTimeHistoryVC () + +@end + +@implementation GiMaskTimeHistoryVC + +- (void)viewDidLoad { + [super viewDidLoad]; + [self addNavTitile:@"历史记录"]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/GIGA/Modules/Me/Controller/GiSysSettingsVC.h b/GIGA/Modules/Me/Controller/GiSysSettingsVC.h new file mode 100644 index 0000000..16c7f16 --- /dev/null +++ b/GIGA/Modules/Me/Controller/GiSysSettingsVC.h @@ -0,0 +1,13 @@ +// +// GiSysSettingsVC.h +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import "GiGaBaseViewController.h" + +@interface GiSysSettingsVC : GiGaBaseViewController + +@end diff --git a/GIGA/Modules/Me/Controller/GiSysSettingsVC.m b/GIGA/Modules/Me/Controller/GiSysSettingsVC.m new file mode 100644 index 0000000..8194342 --- /dev/null +++ b/GIGA/Modules/Me/Controller/GiSysSettingsVC.m @@ -0,0 +1,122 @@ +// +// GiSysSettingsVC.m +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import "GiSysSettingsVC.h" +#import "GiGaSettingsViewCell.h" +#import "JXTAlertController.h" + +@interface GiSysSettingsVC () + +@end + +@implementation GiSysSettingsVC + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + [self addNavTitile:@"系统设置"]; + [self.view addSubview:self.tableView]; + self.tableView.delegate = self; + self.tableView.dataSource = self; + self.tableView.backgroundColor = [UIColor lightGrayColor]; + self.tableView.separatorStyle = UITableViewCellSelectionStyleNone; + self.tableView.sectionFooterHeight = 0; + self.tableView.estimatedSectionFooterHeight= 0; + self.tableView.estimatedSectionHeaderHeight = 0; + +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + + return 4; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + + GiGaSettingsViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"GiGaSettingsViewCell"]; + + if(!cell){ + cell = [[[NSBundle mainBundle] loadNibNamed:@"GiGaSettingsViewCell" owner:self options:nil] lastObject]; + } + + [cell loadCellDataAt:indexPath]; + return cell; + +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + return 54; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ + return 100; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ + + return 10; +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ + + UIView *view = [[UIView alloc] init]; + view.frame = CGRectMake(0, 0, KMainW, 100); + UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; + btn.frame = CGRectMake(30, 50, KMainW - 30*2, 50); + [btn setTitle:@"退出登录" forState:UIControlStateNormal]; + btn.layer.masksToBounds = YES; + btn.layer.cornerRadius = btn.frame.size.height / 2; + btn.backgroundColor = [UIColor greenColor]; + [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [btn addTarget:self action:@selector(userLogOutAction) forControlEvents:UIControlEventTouchUpInside]; + [view addSubview:btn]; + return view; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - 退出登录 +-(void)userLogOutAction{ + + [self jxt_showAlertWithTitle:@"温馨提示" message:@"确定退出?" appearanceProcess:^(JXTAlertController * _Nonnull alertMaker) { + alertMaker.addActionCancelTitle(@"取消"); + alertMaker.addActionDestructiveTitle(@"退出"); + + } actionsBlock:^(NSInteger buttonIndex, UIAlertAction * _Nonnull action, JXTAlertController * _Nonnull alertSelf) { + + switch (buttonIndex) { + + case 1: + { + GILog(@"退出登录"); + } + break; + + default: + GILog(@"取消"); + break; + } + + }]; +} + +@end diff --git a/GIGA/Modules/Me/View/GiGaMineInfoViewCell.h b/GIGA/Modules/Me/View/GiGaMineInfoViewCell.h new file mode 100644 index 0000000..ab41a8c --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaMineInfoViewCell.h @@ -0,0 +1,17 @@ +// +// GiGaMineInfoViewCell.h +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import + +@interface GiGaMineInfoViewCell : UITableViewCell + @property (weak, nonatomic) IBOutlet UIImageView *listImageView; +-(void)loadCellData:(NSIndexPath *)indexPath; + @property (weak, nonatomic) IBOutlet UILabel *descLabel; + + +@end diff --git a/GIGA/Modules/Me/View/GiGaMineInfoViewCell.m b/GIGA/Modules/Me/View/GiGaMineInfoViewCell.m new file mode 100644 index 0000000..6836da2 --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaMineInfoViewCell.m @@ -0,0 +1,38 @@ +// +// GiGaMineInfoViewCell.m +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import "GiGaMineInfoViewCell.h" + +@implementation GiGaMineInfoViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)loadCellData:(NSIndexPath *)indexPath{ + + if(indexPath.section == 1 && indexPath.row == 0){ + + self.listImageView.image = [UIImage imageNamed:@""]; + self.descLabel.text = @"历史记录"; + + }else{ + self.listImageView.image = [UIImage imageNamed:@""]; + self.descLabel.text = @"系统设置"; + } + +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/GIGA/Modules/Me/View/GiGaMineInfoViewCell.xib b/GIGA/Modules/Me/View/GiGaMineInfoViewCell.xib new file mode 100644 index 0000000..903bfa1 --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaMineInfoViewCell.xib @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GIGA/Modules/Me/View/GiGaMineUserViewCell.h b/GIGA/Modules/Me/View/GiGaMineUserViewCell.h new file mode 100644 index 0000000..bc385d9 --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaMineUserViewCell.h @@ -0,0 +1,13 @@ +// +// GiGaMineUserViewCell.h +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import + +@interface GiGaMineUserViewCell : UITableViewCell + +@end diff --git a/GIGA/Modules/Me/View/GiGaMineUserViewCell.m b/GIGA/Modules/Me/View/GiGaMineUserViewCell.m new file mode 100644 index 0000000..51a4f26 --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaMineUserViewCell.m @@ -0,0 +1,25 @@ +// +// GiGaMineUserViewCell.m +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +//我的 - 个人中心cell +#import "GiGaMineUserViewCell.h" + +@implementation GiGaMineUserViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/GIGA/Modules/Me/View/GiGaMineUserViewCell.xib b/GIGA/Modules/Me/View/GiGaMineUserViewCell.xib new file mode 100644 index 0000000..3e138bd --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaMineUserViewCell.xib @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GIGA/Modules/Me/View/GiGaSettingsViewCell.h b/GIGA/Modules/Me/View/GiGaSettingsViewCell.h new file mode 100644 index 0000000..a9569bf --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaSettingsViewCell.h @@ -0,0 +1,16 @@ +// +// GiGaSettingsViewCell.h +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import + +@interface GiGaSettingsViewCell : UITableViewCell + @property (weak, nonatomic) IBOutlet UILabel *descLabel; + @property (weak, nonatomic) IBOutlet UILabel *cachLabe; +-(void)loadCellDataAt:(NSIndexPath *)indexPath; + +@end diff --git a/GIGA/Modules/Me/View/GiGaSettingsViewCell.m b/GIGA/Modules/Me/View/GiGaSettingsViewCell.m new file mode 100644 index 0000000..1ea855e --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaSettingsViewCell.m @@ -0,0 +1,35 @@ +// +// GiGaSettingsViewCell.m +// GIGA +// +// Created by lianxiang on 2018/9/3. +// Copyright © 2018年 com.giga.ios. All rights reserved. +// + +#import "GiGaSettingsViewCell.h" + +@implementation GiGaSettingsViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +-(void)loadCellDataAt:(NSIndexPath *)indexPath{ + + NSArray *listArr =@[@"清除缓存",@"意见反馈",@"关于我们",@"版本说明"]; + + if(indexPath.row == 0){ + self.cachLabe.hidden = NO; + + } + self.descLabel.text = listArr[indexPath.row]; + +} +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/GIGA/Modules/Me/View/GiGaSettingsViewCell.xib b/GIGA/Modules/Me/View/GiGaSettingsViewCell.xib new file mode 100644 index 0000000..ec11e5b --- /dev/null +++ b/GIGA/Modules/Me/View/GiGaSettingsViewCell.xib @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GIGA/ViewController.m b/GIGA/ViewController.m index 476c042..6f0f30e 100644 --- a/GIGA/ViewController.m +++ b/GIGA/ViewController.m @@ -7,6 +7,7 @@ // #import "ViewController.h" +#import @interface ViewController () @@ -18,6 +19,7 @@ [super viewDidLoad]; self.view.backgroundColor = [UIColor purpleColor]; + // Do any additional setup after loading the view, typically from a nib. } diff --git a/Podfile b/Podfile index 27a92fe..34c37bf 100644 --- a/Podfile +++ b/Podfile @@ -25,5 +25,7 @@ target 'GIGA' do pod 'UMCCommon' pod 'UMCAnalytics' pod 'UMCSecurityPlugins' + pod 'Socket.IO-Client-Swift', '~> 13.3.0' end + diff --git a/Podfile.lock b/Podfile.lock index 6837cec..1bed932 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -38,7 +38,10 @@ PODS: - SDWebImage (4.4.2): - SDWebImage/Core (= 4.4.2) - SDWebImage/Core (4.4.2) + - Socket.IO-Client-Swift (13.3.0): + - Starscream (~> 3.0.2) - SocketRocket (0.5.1) + - Starscream (3.0.5) - Toast (4.0.0) - TTTAttributedLabel (2.0.0) - "UITableView+FDTemplateLayoutCell (1.6)" @@ -63,6 +66,7 @@ DEPENDENCIES: - MJRefresh - NJKWebViewProgress - SDWebImage (~> 4.0) + - Socket.IO-Client-Swift (~> 13.3.0) - SocketRocket - Toast (~> 4.0.0) - TTTAttributedLabel @@ -88,7 +92,9 @@ SPEC REPOS: - MJRefresh - NJKWebViewProgress - SDWebImage + - Socket.IO-Client-Swift - SocketRocket + - Starscream - Toast - TTTAttributedLabel - "UITableView+FDTemplateLayoutCell" @@ -112,7 +118,9 @@ SPEC CHECKSUMS: MJRefresh: b48380ae2b927b46c4ef000de9adb8dc748e1df7 NJKWebViewProgress: f481fd424cb5ecc27eacae11b5397db92fba9a4d SDWebImage: 624d6e296c69b244bcede364c72ae0430ac14681 + Socket.IO-Client-Swift: 0afb192a562db90d50e3f7f7421c06925a3f0179 SocketRocket: d57c7159b83c3c6655745cd15302aa24b6bae531 + Starscream: faf918b2f2eff7d5dd21180646bf015a669673bd Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 TTTAttributedLabel: 8cffe8e127e4e82ff3af1e5386d4cd0ad000b656 "UITableView+FDTemplateLayoutCell": 5c949b4a5059c404b442926c0e80f81d10a2d66f @@ -122,6 +130,6 @@ SPEC CHECKSUMS: WechatOpenSDK: 676feec516a11173eafd1fe64b10d27babf28701 YTKKeyValueStore: 4d002941540dd5108fa23009b71e0f2f937f7a0f -PODFILE CHECKSUM: c276e618d4015acab13b2a705a6f1fac52a99dfd +PODFILE CHECKSUM: 4b1cd3dab10b2ff5d5f5d0c7305d55507309ffdf COCOAPODS: 1.5.0 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 6837cec..1bed932 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -38,7 +38,10 @@ PODS: - SDWebImage (4.4.2): - SDWebImage/Core (= 4.4.2) - SDWebImage/Core (4.4.2) + - Socket.IO-Client-Swift (13.3.0): + - Starscream (~> 3.0.2) - SocketRocket (0.5.1) + - Starscream (3.0.5) - Toast (4.0.0) - TTTAttributedLabel (2.0.0) - "UITableView+FDTemplateLayoutCell (1.6)" @@ -63,6 +66,7 @@ DEPENDENCIES: - MJRefresh - NJKWebViewProgress - SDWebImage (~> 4.0) + - Socket.IO-Client-Swift (~> 13.3.0) - SocketRocket - Toast (~> 4.0.0) - TTTAttributedLabel @@ -88,7 +92,9 @@ SPEC REPOS: - MJRefresh - NJKWebViewProgress - SDWebImage + - Socket.IO-Client-Swift - SocketRocket + - Starscream - Toast - TTTAttributedLabel - "UITableView+FDTemplateLayoutCell" @@ -112,7 +118,9 @@ SPEC CHECKSUMS: MJRefresh: b48380ae2b927b46c4ef000de9adb8dc748e1df7 NJKWebViewProgress: f481fd424cb5ecc27eacae11b5397db92fba9a4d SDWebImage: 624d6e296c69b244bcede364c72ae0430ac14681 + Socket.IO-Client-Swift: 0afb192a562db90d50e3f7f7421c06925a3f0179 SocketRocket: d57c7159b83c3c6655745cd15302aa24b6bae531 + Starscream: faf918b2f2eff7d5dd21180646bf015a669673bd Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 TTTAttributedLabel: 8cffe8e127e4e82ff3af1e5386d4cd0ad000b656 "UITableView+FDTemplateLayoutCell": 5c949b4a5059c404b442926c0e80f81d10a2d66f @@ -122,6 +130,6 @@ SPEC CHECKSUMS: WechatOpenSDK: 676feec516a11173eafd1fe64b10d27babf28701 YTKKeyValueStore: 4d002941540dd5108fa23009b71e0f2f937f7a0f -PODFILE CHECKSUM: c276e618d4015acab13b2a705a6f1fac52a99dfd +PODFILE CHECKSUM: 4b1cd3dab10b2ff5d5f5d0c7305d55507309ffdf COCOAPODS: 1.5.0 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 9ffa9ff..68ca5aa 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,381 +7,423 @@ objects = { /* Begin PBXBuildFile section */ - 009C79BE88C2F4C986644CD3E0B088C2 /* JSONModelClassProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 99CDCD75BF37271A6D3421DE2C02322F /* JSONModelClassProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02307CD9BE8AB7050090F7CE6AA1C4E8 /* YTKKeyValueStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D05590B969E6F4407F4F99FA703CE7C5 /* YTKKeyValueStore.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 02A0ADD96B43A9970DD5C7C6BAEAB761 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 04A7D6AADAB213CE7D26F8EAD2F87536 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = D4EA592E4C7AC121AEDC66B83365EE25 /* MASUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04F3BBE71B24770E40CC66A993AD85D1 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = E20DE1DF19E878ED7DF4D788E2916EB9 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0648973667FB537BDC3ABFA9F3AD2ED8 /* IQBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = BBCFD7D46489AF21D3BE448635C95E1D /* IQBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06697BBB6E6D73B5F021E6DACAC5DE45 /* JSONAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = A450BEF04E62AC608AA5CBCC1BA0679E /* JSONAPI.m */; }; - 068EF598E554EC57038ACFB89CC2C47A /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AE0A7F1098573A8863A3DAFD6F5C0B3B /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06FF2586AE76FBBCBF8171F98255D8CB /* IQUIScrollView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A2F501E263C4D6F46D6F2B4C136A82 /* IQUIScrollView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07159A933B3C47A02FE2B2744ABAAC89 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9F2079EE23F230DEA680345C387F6C1 /* MJRefreshStateHeader.m */; }; - 091D17D5D8F832D28546A72B788CF0AE /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = FCB338378A6A733051501E8BA0537EF5 /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 09EC74E4AFC1D5951D1F80094D06969A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 09FD31B5AA4FD8F5D8691D0A3ACF1A6B /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = DD26114F1B84A972B2A2A20A19E7139B /* NSData+ImageContentType.m */; }; - 0A1E34B4A27DCD62A914F3B028A07E6C /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D01693FF69A913D36FFA9A8EC1C1D93 /* UIView+MJExtension.m */; }; - 0ABD694709F6B146E908A254CDF1A968 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 455E5ACCA97D1568DD6789BE6F2DC982 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0ACBBA158F4635FAE16AB5456ABADCA4 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F43BA94179B9F1CCF49654AABC0F5FD /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0AF48B0ADAD7D4F5A2CB22075A3F5FEC /* NSObject+LKDBHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 26D2F25DB89878A577283A85A9771121 /* NSObject+LKDBHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B1C5725C7BE03D622114275D6FD6EFA /* JSONModelError.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EF6A9271273889CACA3DFD0AC7D1EF5 /* JSONModelError.m */; }; - 0B53B4188A47FECDD7E1798EAB8B6B9D /* SDWebImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DB9DE3DCEAE65EBE74B327A173003A8 /* SDWebImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0CAD81FA7346928A75DFA501EDF7A678 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3832D0EA7E186C284614A162D744B00A /* SDImageCache.m */; }; - 0DB2E34289D18AA9810609ADCCBFA181 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = B4BEEF21A4371EE181D00D9011BBF232 /* IQBarButtonItem.m */; }; - 0DCFD83A6149FC0514890A5ED67047B5 /* NJKWebViewProgress-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 905348BDB8E6B079B5430CF3BE868DF5 /* NJKWebViewProgress-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0EFB524EFDF2F8712A2F5067817A672E /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 87A97A67BA4A937C5BD37DB69E3934B1 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F3CEE11E6552204415ED069B86372BC /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 98ACA8A1C96253E0C93C68413E526E83 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F3DF5C3BEFCC9838B53C37735B414BE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AA08622D5A5D33841C028CADDB93243 /* NSLayoutConstraint+MASDebugAdditions.m */; }; - 0FDB2B4F75591851F0F119EAE70B3F63 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BA631C4B98CD911AA42A46B1DD32925 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FDFFDFAF40F6A37B8911FA7C57428CB /* LKDBHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 20537A66C31276B9C55B927BE953BCE0 /* LKDBHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 101F836F887C01B45F4DCF351EBC28D1 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = D356016E65FB61F9D8CA34E66D670FCC /* MJRefreshBackNormalFooter.m */; }; - 106D6F89336E06DBE4E973818BD887AA /* SocketRocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 91AE4A65DA845395D949F108CE789B39 /* SocketRocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 13D87E1D99CFD98771E8066E6FF832CD /* IQUIViewController+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 18739420269C3D2C4EE0ACA8031B5D8A /* IQUIViewController+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 13DEE8E5A10BE2160E85D5B339446521 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 14479278EA90F38247811468ADD8EBB7 /* IQKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C77CDBC148BD82CC4B3944A93E1DB7B7 /* IQKeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 148E57B8B5F299475BF5877A2EA6E7C1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C5FBC24791EAE0728C65D6F9B9912B2 /* QuartzCore.framework */; }; - 1563D7F05577852DD479C1BA3CFC24CC /* NJKWebViewProgress-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 384F6E2B0FAC4209C35BAEB1F919D66D /* NJKWebViewProgress-dummy.m */; }; - 15F6265FCE0955CDB4967F7306407D67 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A364A67DDFA37096812E036AE6662AF8 /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1624AFE5A1732E1D58AB884329EB4C94 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 999D260BC84758AAB3DF1AC5368500FA /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16831E5AE64E97E9BD8FA96E93C8DF19 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 20B82B3673CA958EA419C7F2C3921FD2 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17F033046E658F3BFD0011DCB768CF54 /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 13410BDA0941AC0B1382EFB64C8098AE /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 182956A69F1B4571D23008AD8C160B3E /* SDWebImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B1291C368ECF02B251E7EEBD0C2FA2 /* SDWebImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1843E6DF520A5EFE9C83C38E18578E42 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = A452045F9BCD3C292BCA0C743F5F3398 /* MJRefreshAutoStateFooter.m */; }; - 19119F01A87FAA55D45B4F11F33B7B3E /* LKDBHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = FAC5C4AB91E3784CBF6873F18B5036F9 /* LKDBHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 1ED505CC385A149F4DF8F4B94BA4FC0B /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = A838FA1796E67C873CDB58A820F09C82 /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22554065FA07F1BFE5308A685394CB12 /* FMDatabaseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 87A6322F866A874D2B0E0CA9BAAE4997 /* FMDatabaseQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2524EC4EF024A6C067A0FA082084CFB5 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 359462AAEF1BA3B0A3D0F5F8F20597D6 /* MJRefreshBackStateFooter.m */; }; - 2854C9B1086758BD2B6681206B6759B4 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = F4AEF4063D5D16018040686460892C7D /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 28D57235593277A82B18D9E2B3B4B5ED /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD9F8097FDD26C1A767654BEFDB692CC /* UIKit.framework */; }; - 291C24EA8B69C1738694B0729ED3ADA4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD9F8097FDD26C1A767654BEFDB692CC /* UIKit.framework */; }; - 2AFB0AFA2138181E162CD00669D87FE3 /* JSONModelError.h in Headers */ = {isa = PBXBuildFile; fileRef = 66642E4EA3BCCAA25A839A82CE5DC347 /* JSONModelError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B0AD5F72C574005D53D512A8F8E2800 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 167E9F1BB5C566ED575F9AFA45711349 /* FMDB.framework */; }; - 2B66A577AE7687E6001469BF9F99CA5B /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0ABED0039D2F20276FEA3153C100C8EA /* ImageIO.framework */; }; - 2C5EA66B987D887948303DB77AF68D61 /* NSObject+LKModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D3E25E1FF09446A49CA57D4B31A21248 /* NSObject+LKModel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 2CEA12D52F3F7AC0669C99A157E19F62 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E992B127A8C1F809FBDB8A1D963EFEF /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D170EDC2BE147629AF7D661BCDBD2AF /* NSImage+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E31E76EFC78FCF7D26C0EB198E7130 /* NSImage+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D407C6492BC569F5361B9210C89A19C /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5F392919A89D0D4529C78A9B24CBD9 /* IQKeyboardManager.m */; }; - 2E2BA6CBA0D6349BF6CF9E13753D5DBD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 327E1782C89B350FDE631F3CACD4C8A2 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 51F8D03F64D8AE4C41D22BD22AAF1172 /* UIImageView+HighlightedWebCache.m */; }; - 3345805C0D8E8D0726F7E5981DA61A5F /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 88EC8169C53FD5C4C1F10D7DE2B6977D /* UIWebView+AFNetworking.m */; }; - 3376AE1663C14F1926F04D4FE0225E97 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = E4EFB775E7525FEB8EAFA2A67E3E5795 /* SDWebImageTransition.m */; }; - 344DB99F8332029C0391F08B6D0E425C /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 364ED876726D73807338B4A2ECF8B6B0 /* MJRefreshAutoNormalFooter.m */; }; - 347945A5FC349A6E31AC7E3403E2CDE5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 35D685CF7C6F73A65AD3DD99674CA78F /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C55C4FE677FBA2E2EE1ECA52C17F704 /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3619E77A8EC11571EE9F32921DAC0C89 /* IQKeyboardReturnKeyHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = CE8F79F2B661D3DE763707D9654DAFE1 /* IQKeyboardReturnKeyHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36E344E5B627E04368ECC96338E17F26 /* JSONModel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FEE187FABEDD0249D0FC827637A740A /* JSONModel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37F097E2269EF1BD238AD7449D796445 /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = FBC802097D43781825C0AB6255F237B5 /* FMDatabase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 37F6913EE3CD6EB8715086F0C9F6A823 /* JSONValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 23810A789FDEE049028B453DDB1B5739 /* JSONValueTransformer.m */; }; - 37FD169854FF4B397051998D611F152A /* JSONModel.h in Headers */ = {isa = PBXBuildFile; fileRef = C30BDD3ACA5916852637177B87F0E742 /* JSONModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3829CBCC3598DB13C2AD3B7383D1F24A /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 993673BBDA2B45E5547B443BC8D629D7 /* MJRefreshFooter.m */; }; - 38A1AC3A26C93B53FCD959E136990990 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 28C9FD05636A9DD140FC5CF4A2DE6AA6 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38E0CD63021889EE46E1A6B9FA0415F5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD9F8097FDD26C1A767654BEFDB692CC /* UIKit.framework */; }; - 39120D78F1F32B35C353A9EBA0149B45 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F23D9CEB0F145EEA952FEC9CF58C467 /* SDWebImageManager.m */; }; - 39530A48FC40F64E8B08B45AD5555D0A /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = E8CA6B846640A5453420E104AD87020A /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39A98121DA410F19CE5F46E280F22179 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 30ED8ED848EB8DEF2039EE979EE3016B /* SDWebImageDownloaderOperation.m */; }; - 3ACB80ACD4B743F9EAD47339F10594A0 /* Toast-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FADD79F89191D8B79891CF6D6F5EF64B /* Toast-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C9E113B7712442B4BCB59AB7EEC2085 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = E67557DBF26DB5257919A8170EF851D1 /* AFURLResponseSerialization.m */; }; - 3DDB894364CEC991E61B04E9036D6D54 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = ABE17D577EA9792121FB2D749B0D28E7 /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E43906B70EB01C06F3AE17008B853B9 /* FMResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = F9DAFA1278BE68723695D507CEDC7D1C /* FMResultSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40A6216FC50B4540584DA1C45F98F9FD /* JSONModelClassProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = E64EECA1EB63A11476467B8C6180D50B /* JSONModelClassProperty.m */; }; - 40E6B7A671DFD76170156328D995546B /* NJKWebViewProgress.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D6CD4E8532F4326AFE1388B3C37F1A9 /* NJKWebViewProgress.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 41BA2631080F7FE9052001D51A5104E7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 431C76067CB09B1FC0E4DD5AEA6B540A /* IQUIScrollView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B1F3AFC056F49920009E97EE8C75CDF /* IQUIScrollView+Additions.m */; }; - 432FA22864D148EBD4CB22F55AB68004 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 43E74DBE8C8D7F79A45B9344D2D2D1BD /* SDWebImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DE1BE539FD20B50E17E1D8AC200C993 /* SDWebImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 457ACF9150DCF9AF445B129CC9678FB6 /* Masonry-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 71AACD347E2FAB04BD15B4A22F004B1E /* Masonry-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48B6FAC56A1A05850F229702C850CDB1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C5FBC24791EAE0728C65D6F9B9912B2 /* QuartzCore.framework */; }; - 48EEC19D6C3DCAD43836914B8D0F1EB9 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE3A6F87CE579A6044EEA9D73BE3961 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4985E014269593640635A8DBD75DA450 /* NSObject+LKModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 3590C8A8B61E435CEE0D6D946D21CBE7 /* NSObject+LKModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4AA21F40697CB42D7D219ACEDE4FBFCF /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F3CF70BCE274B4CF992203FFBB582A3F /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4AA3A9FC9AAD94C226CA975946C9395B /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C8FCB66D43C7435A706DE7458C249FD /* UIRefreshControl+AFNetworking.m */; }; - 4B8BFD0889A2513D7BAB9D582C077810 /* TTTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = E08CCF3A89E086CCE8DC38AC4B14AFDE /* TTTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BA2F37913AFB59DC45A84CA29AAB2F8 /* UITableView+FDKeyedHeightCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D578A1FA8C5C0066B724DA98FA21DEA8 /* UITableView+FDKeyedHeightCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C321BA8844AA4C44D4416CC6948DF2B /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EBF593E3360685A3AAA0ECCC2F7F5BAE /* AFNetworking-dummy.m */; }; - 4C5DA96F7CAC26975EEEBD7450FF214D /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CFCF048332BA95A163C798AC2CDF14E6 /* AFURLSessionManager.m */; }; - 4CC5EC830A89C3CB7F53C52CDF13CF81 /* UIView+Toast.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A12FEC4AC04980F619172CCE478A56E /* UIView+Toast.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D4F2050654580FE1F1D5F4F82CEDDB8 /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D86675944859EEA91AE297DBF2625BB /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4EB17293737C717D12298CFFE6A67514 /* JSONAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = BDFAE07701D24D6F3E4A296D12634988 /* JSONAPI.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53514C9A8CBD604E5DE2ABFFB322C3AE /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DBAF944AE9E107B09FA593C6772903D /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 538E922BA03E8B2C147BF047ED195DF4 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = D8AD01D96341F62041B06E29BABD0E9C /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53BDF81D0A52EA526D597A5C5B139D7F /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 856E5A9F492377BE16CFF6F2EDB3EAD1 /* MASCompositeConstraint.m */; }; - 5423F7BB578AF69EEFD339909261F01E /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B9F4238F0902259456834DC9D1920B /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57E9B041CC1D8988C38DDC97CAEFCD76 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D7F51C4E138BB8EC86B366A13C1E692 /* MBProgressHUD-dummy.m */; }; - 57FE38F17C0EDD5CF73B2A084A17586E /* JSONHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CECA89C4FBBD5A50A75818DB7C8FF93 /* JSONHTTPClient.m */; }; - 58388F773008AF671CE67FE1C902E6CB /* JSONKeyMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = C1DC7306DAD63B2C06913DF8915C00B1 /* JSONKeyMapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58E6E68D10EF3D64522BD267CC1761A6 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D33B1102BC63ECAFE7BDCB58DAB42F6 /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59F5736C531C7F4C5F79C9EDDACC0B64 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = A3053D3DF72CFEE973E780A70CC18EF2 /* SDAnimatedImageRep.m */; }; - 59F81DE0305CC2AC448D2A3C6B3280A2 /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C4E3C0E3F1B4968E82E901DBFE63970 /* MASConstraint.m */; }; - 5B9AB2E420B063C994B8295F4EF48E37 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8267A49CE76989CD63E6725500A33111 /* UIView+WebCacheOperation.m */; }; - 5BC4E3F5EFAE7516C06D8A357407DCAF /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 338A91177F22F0C0B7E9F2617DB6D30C /* UIImage+ForceDecode.m */; }; - 5BFE1CC79F693B6218B419AE50B2070E /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 190821EE03B1A6308F75163E7C398205 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E0CA8102FFB7E6CB9B04DF6DEC83AEE /* SDWebImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BD844FF2EB77928C3F4954BB4070B3C /* SDWebImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E1468EA73C7741EEC370E4A15167D0E /* YTKKeyValueStore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F603D3FC35FE557B8C5E6EBCB9120C5 /* YTKKeyValueStore-dummy.m */; }; - 601FD63D1FC6DBB1277966362EE290CD /* Toast-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F8294F939D42D73CD001D5768B48E37E /* Toast-dummy.m */; }; - 6115C3ED460710318D33BBB7375B07A9 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BEEC43D6F5FEEC5F22EF9E0972329DF /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 621B413DAEFE75991251ED378822527C /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B559F8C10A420C414C457D38505A02 /* MJRefresh-dummy.m */; }; - 6298B1C2234864DA5ED3B5E6398B95AC /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2AD44F79BFF5ACB1AEBA9E98380AE9AD /* MJRefresh.bundle */; }; - 636BBA734C1A17A734761D674FAE8800 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E63CCA35446BF2A18EC1177DC3DD8D9 /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 639A86F8EDAF569092C61103FFAEA21D /* IQUIView+IQKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = D89B744364C5A695E25E01776410B652 /* IQUIView+IQKeyboardToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63BA6FBA10304F4828DE97C0FA63ED9D /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 81DD8B0857F2146245797014DE93A83D /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63F5BA839B931DB6605554B6D4369A0C /* IQUIView+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 57C8DA5F56CB13BC5C9D4F68770068B1 /* IQUIView+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6478B0091202F9429D2A61E30BEDA571 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47FC8BC593D3C4A9BCFAAB1AD76AC13D /* Security.framework */; }; - 6595C6295B9EBBF40751A376239681FD /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 46216AC6D1DE54C7D1A75F0B8C0093DB /* UIProgressView+AFNetworking.m */; }; - 65EC43DAB5ACAAEE8F1CE61529A09102 /* YTKKeyValueStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 47C190CC048C31F66701A5CFE68AFC16 /* YTKKeyValueStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 665B3B037B98D3E3ADB449A43FF14F42 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9ED647F3BCC607702655683BF6F3A7C /* IQUITextFieldView+Additions.m */; }; - 68168E99337712B83A79810B55602D01 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 64478A7309F11543DB76692ACBCB15F7 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 688E0882DFC8CABA02390F43178CB33F /* IQNSArray+Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F87B11135AE32B18FF626C3C9FEDBD4 /* IQNSArray+Sort.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6A0B1A0FA7A75C861B9D401D0E8CC95E /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D681F6D9A55D54BCDFE8E749CC7CA9 /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6A30D4D71707D4B4B6033AA5399D35C6 /* Pods-GIGA-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FD113136C3BE7E4822B80A29F3DC5E42 /* Pods-GIGA-dummy.m */; }; - 6AB8F78680B3470391219F11D51A1DE7 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E06194D6A9AC6C15350A40AA681FBFA /* UIImageView+AFNetworking.m */; }; - 6C23BBF56ED4DCC10CA1765A6736D1F8 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = BDA8DA7D100B6495E2D43C82C7612A51 /* MASLayoutConstraint.m */; }; - 6D13591A430260C31F6102B30645B5CD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 6E6E8ADF2879B9F6832CE82F2B538366 /* LKDBHelper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FAE543B6441005A5CB541D84A212B95B /* LKDBHelper-dummy.m */; }; - 6F5906B58272E07A0850248867562581 /* JSONModelLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 2371B715BAE7B94DEDE98106F4ADEFDC /* JSONModelLib.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FAE8BF1BF564D1F2D5F368F8704A6D1 /* UITableView+FDKeyedHeightCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FE77E40C189AA177444DEBBD0B08DCCA /* UITableView+FDKeyedHeightCache.m */; }; - 6FF8739ADFFE8465389AF3F0603E6F83 /* LKDBUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F66F22D2B5E6EF98C875A78C8164C54F /* LKDBUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7099E4035C06D3116DA2586EFE563C0B /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 767AE6C3AA2783369EC065DD68C0350A /* AFAutoPurgingImageCache.m */; }; - 71F6D96E3AEAA07389F37E2C4B63C4F6 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = E52F56D34181DD1D8127F30E9C8A0242 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72563ADE99DC9E753B27D48B16AA3654 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - 72EE4A5DC3076CD8C13717D4DAA37DFD /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 09810BACD97137F26F4754BC992B0AA0 /* IQTextView.m */; }; - 73BBDACC22CCA36A6DAAA167AD780BAF /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E657879A95ECD51B70B71C0752EAFEA /* MASConstraintMaker.m */; }; - 756DF24546C7D91459DCADC8F1C98660 /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BFA8F4568DC6993DAA1E49FE4F9CE3E /* MASViewConstraint.m */; }; - 76C5CEA598337CC1FC825899FF1CDAD9 /* SDWebImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D31FCD1502C48457FE630B3B3E54B5CF /* SDWebImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 772785574BC1059C2913576CBFF3AD17 /* JSONKeyMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = C904CE0D4C99B3A972A0204B932BDF88 /* JSONKeyMapper.m */; }; - 788BA72F67004504FFDFC670048786B5 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0E5D86CCB42BDD31167BAAA320D2297A /* IQKeyboardManager.bundle */; }; - 78AC6714960C42CC866222B6D956EDF6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 223CC88B609D08C4EA1EC854A8D73AD1 /* CoreGraphics.framework */; }; - 7942D242D079A5710A72B659A54D7E26 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 905FA653B2C53E8A919A501A0001FC8E /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AE9484F09D29428653109D73D4FC488 /* NJKWebViewProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 507DB5C53EF2AECDB84A4B07F77E623B /* NJKWebViewProgressView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C17BEA6034027310D1D205DB2008CA5 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = D58483E70F4485E0D9E8F722A5917F44 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C49A18841060D12A58F92CE62C21F9D /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = E89E9BC7945C12B0A0EED41916A4781C /* IQNSArray+Sort.m */; }; - 7CF3668C8E30DA3CAB92C9C6A8B88B8F /* IQToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = CC66366B9AC6F1CAD6AEB88A67337C78 /* IQToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DE362297135870194FA02C34D3135E7 /* TTTAttributedLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BD34472D8257BD1D09F9DB765856779B /* TTTAttributedLabel-dummy.m */; }; - 7E40D4939F89C4852C4224D6A65E6BD5 /* SDWebImageImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D510C8DE8287F40083E461707DA7C66E /* SDWebImageImageIOCoder.m */; }; - 7E653E1D9DF593D82DEA20D2340F2C1E /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = D5B5C63A8277A1C23DA1F327EB6B8695 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7EFDAA1642FA83DE777CFD086182D5A4 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 64D250E761757385549317D0323E15F8 /* MJRefreshAutoGifFooter.m */; }; - 7F37E7BCFFC785854FD19F23B89C39AE /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 26352B14F20CECF1C5E46B8BB0821EC0 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F66E5779B29E0BC17D565DAD7CDEC1B /* JSONHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 556C4D983FC07E4A0F96E7D5FEA1BD0C /* JSONHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8060025235D93F30A5F10B412DD0822E /* JSONModel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E03D26FF38E5DEA11D31A78840F818A /* JSONModel-dummy.m */; }; - 8069223DDD6D0F2E1A87D8E66966709B /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = F1D7AECAD05D08E3631A38401A2192AA /* MJRefreshConst.m */; }; - 8138BA0A46637819E90CE18C773CA9FD /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = E44DA37275684EA3A83F7B4546DEF10C /* SRWebSocket.m */; }; - 81ABD96C8FA6FF28CFB2A3A78A6EA560 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79298FCF0E5B2FCDD163272B33DB5DE /* SystemConfiguration.framework */; }; - 81D12B648C1E782DEC1B2566EE17FB6A /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D97AB96A3AD0844F0E9A0A6368F1BE0 /* UIImage+GIF.m */; }; - 85F02B2E2F922F439A12C7CBB077E8DE /* IQKeyboardManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A9E4181140F064FCE4526B441CF1397D /* IQKeyboardManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86EA527BA1862E06A8E19E0960C66E7E /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = EB897736B08CBFD5003426DB8418C016 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87ECA447DB887426665260651B7F147E /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 136A22223B193531C622CF061DC7AAB4 /* FMResultSet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 88DE7BAB1F4999A5F4B617F44E5FD1D3 /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = FFAE6EC09F0505803E8392F2F6D4F3CC /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89637BFFD180A1E05F04DAF0CF4A6540 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BDA80F5D7B6C75DE56A43090A20E478E /* MobileCoreServices.framework */; }; - 8A1EB96C607F92E8AA20676F9A4BC7D9 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F0D2E0E7AF262CBBB18CB5A5451749B5 /* UIButton+AFNetworking.m */; }; - 8A6EEF68E7625AB66A3A8DED1594F88F /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 72D3BAE7F54AA38BF7C28C5BEF554271 /* ViewController+MASAdditions.m */; }; - 8B855A73B75155FB2C0CB05B54FDDE0D /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B832D5C26DFD510FD9A7A2BAF0201A58 /* UIScrollView+MJRefresh.m */; }; - 8C2908931C952C7B1801BC7D5D321BED /* UITableView+FDIndexPathHeightCache.m in Sources */ = {isa = PBXBuildFile; fileRef = E765AEB6EF5022FC3E2114C6854EB172 /* UITableView+FDIndexPathHeightCache.m */; }; - 8C9165B82240F78C43F7E7ACFD17612B /* NJKWebViewProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = D657D2753D62E6E0FCEA4ABCF2F254DB /* NJKWebViewProgressView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8CD45B754192DE834B642975E85257AB /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C999B9FC2FBE9386AB1D815E7FEBCDE /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D9636C74777C684BDF312EE66F8A585 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 95CC04582873D1BB76490CE97B4C1291 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8DC3FC2342EC2E944B3A3E83E2683130 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = BDB3FA188B77C4C5AC4EBF7C4EB23690 /* MJRefreshHeader.m */; }; - 8EF496E24AC25617194114DDB71D5385 /* SDWebImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB9C0E6DC1428C653A5D72115334EC2 /* SDWebImageFrame.m */; }; - 91D993FDEE2D0C2D3B4047D9E8BEE9BA /* UITableView+FDIndexPathHeightCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E116512F596C10F7B0DE7E79B3D4FB37 /* UITableView+FDIndexPathHeightCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92126299C232FC474021BADE26F056A4 /* SDWebImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 08E5FE69433133C490A05E788EB152E8 /* SDWebImageGIFCoder.m */; }; - 939EF882233B22D0321A70F6DADED11F /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A3A2A54A6B463F84E2F775E3871BAF60 /* AFHTTPSessionManager.m */; }; - 93BF58C19C5E6A78EDAA38855DDDE348 /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 97E8AAD1B54E464BDD45645739A7E4E4 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 958FEEE31215AB970371D4CBAEB8A4DC /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 68EDBAD7D8432FBE29F349FBF59D2764 /* IQTitleBarButtonItem.m */; }; - 95A76E599F3448FD0E5C736D98354DA8 /* YTKKeyValueStore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 23CF3C3B336872BE627191D587A2F784 /* YTKKeyValueStore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96E70B43FC04BC99AED1BBD4FB1D7581 /* FMDB-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 50E9C0028FD730D0FAFC7811E74C9A78 /* FMDB-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 971255F19D9DC5EEC2566D186FB5A433 /* UITableView+FDTemplateLayoutCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2974DB06BB024359AD4E9D2000597D36 /* UITableView+FDTemplateLayoutCell.m */; }; - 9898B13B5771AC304E096319E72F8098 /* AFCompatibilityMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 326D9D7C8343049CC1BD9D2FDB760C14 /* AFCompatibilityMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98F19C682AC68E9D2E2052F709F42AF9 /* JSONModel+networking.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B43D1D56644CC2A129FBB357B026F00 /* JSONModel+networking.m */; }; - 99249B44D65716B5CCA0BFFD5F83062C /* IQTitleBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D575D477CF437DBE80BC55A1C483416 /* IQTitleBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9AC1064802A4D107353A87F2B4A963B0 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 534AFA8647F5E60163BF084285B3AD9E /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B8D84996694C541CD3434386E0A081A /* FMDatabasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DA743D9F60E293701E4F1E9F04891A6 /* FMDatabasePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C11A290C9C5866A185A54F1EC04E2BB /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EA185D39D4742C90EF4A71ED0B6FF30D /* FMDatabaseAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A08A8AB356264E248D01F1BC0EF08166 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 83AD8CF369CC62633AE1ADE5659E862A /* Masonry-dummy.m */; }; - A12A3BC640B690479F345A49C6C48209 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CA54DD4E3D9B061E47DABD67A6F11AD6 /* AFNetworkReachabilityManager.m */; }; - A1B5D80A8998311B8C9043E6942925E6 /* FMDatabaseQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 128714F26358AB64EBF20321538BB9E8 /* FMDatabaseQueue.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A1BB32FF4BE29C004A13F2E03127E8F1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 223CC88B609D08C4EA1EC854A8D73AD1 /* CoreGraphics.framework */; }; - A2D9F9EFFDFE9C19DA842E826B06BCEB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - A3CE2D718CEB5AC059823178404AF0EF /* IQKeyboardManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 94EC1B15D0F40FAA8E09F162D89550A3 /* IQKeyboardManager-dummy.m */; }; - A5382D3EA98D2EB1AD9EDA5F2138F00D /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B94B8350B08947B04432EBD738A67E /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A548833BE5FAD40830428F36E77D0F52 /* FMDatabaseAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E0BE28AB9BEEE3F2DE5CA5ADF0754DE9 /* FMDatabaseAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A5B069CA1170E03891AC5648DE5CF87D /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AE40C42B298EF2078BE77D91816800C /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A72D242BEF61E27D6C29092DF4666A4A /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C2FA9E010EEA6319AA9CB2D4EB45645 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7370CE9231F9A4927142D79021879EC /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A217F63722F5C203E7C70902378EB14 /* MASViewAttribute.m */; }; - A77943B15F7CF5151B637808B40DD722 /* LKDBUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F039F4116C29A97EC5D13C82BBDE9CBC /* LKDBUtils.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - A91C005A46878C2DB5B6B4A67CC1DDC4 /* SDWebImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 52534734AD75CCA3BFE6C3B27D9FB9DE /* SDWebImageCodersManager.m */; }; - A9A91BA2015E3033BF4DAD29264D03F0 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C88D14B39E886A97851021B020CD0E /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA00DCC0C8174B2D7E48EEC3C768B047 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = C023374A920B06BAE8BF866C24C7881A /* MBProgressHUD.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - AA4959949A290D4B8BE1E31A890D0C80 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EF64E3326F777690080488B4CEEF3B3 /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AAC6DB8270C474C50F5D71DE9BC73382 /* IQTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 534BD366DA913764FB6A895F29C1927B /* IQTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB2CEAF630532A05339889D5663E1C08 /* TTTAttributedLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 12EC34C8D078C44D8BA1A18B5017ADD9 /* TTTAttributedLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC5F946DEC898FE1FE7BA74426FE6A8D /* LKDBHelper-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A478D39C0282C84C3724E7F5E28E1C /* LKDBHelper-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACA82B48BEE47C89F7AEE07F4F8B462E /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = CE0CDF8DDC168FC42EE8F510BBA938CD /* UIImage+MultiFormat.m */; }; - AD868043328B2125E27A5DC14D11958F /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 4599E0AD06AD0BA1330C3AA05D64C91E /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ADD011E9ABBD96D70AAA32A4B9ACBD02 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = CA531EAD1D1DA49EA987BF74F9ACAF04 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF5A5DF8096192FC74E02A3408AADC21 /* Toast.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF9308ACC942E298BCB3BF0037F3118 /* Toast.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B02D91E02099D3C6A2F988C766032176 /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = A6DAA9F15075836671C4C398A8994B11 /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B05BDA89A18DA866355AD804B694F851 /* IQUITextFieldView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = FA55F0051E01EDB4CA0293C6E7AA0B30 /* IQUITextFieldView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B086C8017A694E281B3F30DCCE8FA588 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AD4DBAC3BDC47AAD73A71ABC44B7E2A /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B0E60D4A86434F567D7F9E590161AA7C /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 480EBDA225E852CEA4E1CC2E346CE9E5 /* UIView+WebCache.m */; }; - B1C1164914E351C022A5C6637E8599BF /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 778E098F1D1DD3233DA124284E40B2B2 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B215AD383364D4C829F4EC9803568809 /* SDWebImageImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C8496BDF9FDC70F620BC1A1C2161471 /* SDWebImageImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B21C3C93DAA23B1C331B9326991CDCFC /* IQKeyboardManagerConstantsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E3D817354B9C74183C0CFB0E3992AE8 /* IQKeyboardManagerConstantsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B26E3D1F70F70E23C4EDA96CC327BC1E /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CD9B7708863D803D675F0E9B08630A2 /* SDWebImageDownloader.m */; }; - B44383A3FA435C1E986942C817339302 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D3B009BFC3E1090BAA9060143EAC16 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B46FE8C00C2CDDE0B4790FFD3DC961A4 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F12E93671661EA8481386A3C4606195 /* AFImageDownloader.m */; }; - B646C96E2D7DF54445B3719F800D79E9 /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF05A605CD2C0B9C09DC4DB2D55DDED /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B690948AF82E335069677012C9793C0A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47FC8BC593D3C4A9BCFAAB1AD76AC13D /* Security.framework */; }; - B72A7B6970A8E91258D4AC521B86A8B0 /* SDWebImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6ADCE0E67FA28C7ECE2FEC64166177 /* SDWebImageCoderHelper.m */; }; - BA0711638621C2A47AABFF9E03546893 /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 63B53BB333164EC8865782883113A392 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BDB33C3708110C6D755175D1F0A2A70B /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C524A0E50AC16EF76BC09CF266FA6422 /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE342AF4C9583018FBDF18A52FAE927A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - C0337E1DD3AA7BD36B20A9C92EA3208F /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BEE46E79F1F0C05155FC29045B05E080 /* SDWebImage-dummy.m */; }; - C0A16E00B4BC2D88A7833D5DAED62942 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = F910EF56BD99E5E61575785D13E304E2 /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0BD02712FC62F45C60CA65FDCF21D80 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E60E60F55DABA8A70A2D218D3E88172 /* NSButton+WebCache.m */; }; - C0F07BA73BBC072EFCABCED3B6D24604 /* TTTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 804037B37C8061F50A6D0B27F526F26F /* TTTAttributedLabel.m */; }; - C12BAA822391D670C53FF0C2299654AD /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 502C292A182DA48DE6398B906F782175 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C257BE809D4C4357A8EB7118960E3143 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FA4B859A0AB80E8E3D57CBCE80F2AF /* UIActivityIndicatorView+AFNetworking.m */; }; - C2B7F4EB405C401EA53023341C05E15E /* IQPreviousNextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 54EE76760BCE3CE9DF646FA567859799 /* IQPreviousNextView.m */; }; - C480AC5D32406D4901116FCAC5FB0EB5 /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 86F728BB3275544EC6BCA5CE8CCA0E85 /* IQUIViewController+Additions.m */; }; - C49ED0BA3BE26C50F202C5ED5FB85573 /* IQKeyboardManagerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 201107C26A4A8E4C7AF38062FB36DAC9 /* IQKeyboardManagerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C4AA57B938513DE614A7B90AEF5CD858 /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 8286B6FF56944ED90439B26B99F71F2E /* IQUIView+IQKeyboardToolbar.m */; }; - C5BCB61A9B530249DD0CEC33C6E07EB3 /* UITableView+FDTemplateLayoutCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 56247E2A4FAE29D32C86A5D9501F6F5E /* UITableView+FDTemplateLayoutCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C605A44DF96E7FCACF7D6E37B62F795D /* FMDatabasePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A2A14D56BC061060400295FC21A0D56 /* FMDatabasePool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - C6CCF6FAC5899D681F921B1917ECD40E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - C8DF22EAFFC2F81B0426E2165AC93E44 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 9061C7534C913C5303067FDB0D7A4F38 /* MASConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA0D37AE5433954573D3E37771CDDBFA /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 19FCBE0EEEBEAA24D79B250A5866E949 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA1E205A4D3A8515ED42F76C2671F1BA /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B3ACA6ACCDCAA17E0E866CCDFAE3007 /* IQToolbar.m */; }; - CB8230F8171A44F80B11C0BE0E8420AC /* UITableView+FDTemplateLayoutCellDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 67ECE47F3623A56F2D308382B2EC1E26 /* UITableView+FDTemplateLayoutCellDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CBA3B98ED2708713025BFD6F244D419F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C5FBC24791EAE0728C65D6F9B9912B2 /* QuartzCore.framework */; }; - CC8F9B4A1AC4E276EA8AA4C6F2BF3CD4 /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = 948A76E77D933AFB7F2E7F84DACCAF7F /* Masonry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCB74062CE0F4B8E5B7483599BC398DA /* FMDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A270740B3E3865AC746380362B6CEBC /* FMDB.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CF4EB3350726A86BCCDF5F363C5FCE72 /* IQPreviousNextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 42EC7B58D17C0B661489B46B9964BB39 /* IQPreviousNextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D02DEBC241C24DEEFDA13C355197A2FB /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = EEF99048C22BEC61A2C9AD4AD0432D06 /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0E7D5B865722A25EC7D91B0FAD8A6CD /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D4C804AB6F0E6DDCF8B55ADFC4D8D6 /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1641F0A353E02D971A2E6C004D4D996 /* LKDB+Mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 2774326B60C328374835C7204E3258BB /* LKDB+Mapping.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D16764F0C1C13D1FE859B4EA2B33E474 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 30355D9B3DCCCD29F9ACCE3C935B07B9 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D206EDC84CE44D5DC711ADD087BC4B17 /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D812A41395AD0523CBC5D8963604A69 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D29CF1B9A1D71268C1F85EA53B32BA24 /* LKDB+Mapping.m in Sources */ = {isa = PBXBuildFile; fileRef = CFFD009D1F00116A643D51E243330C18 /* LKDB+Mapping.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D2AFDC9DBB18F68AD5B7EE3A1A951D68 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - D46545D206874E3A223372C84F1EA73E /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = E003B301E7A1D3B32B0A919DC1E29C50 /* MJRefreshAutoFooter.m */; }; - D4E9B3DE75C23D365E255B6212CB1CB7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - D51D64915E3DDF60300CB400C1F49027 /* UIView+Toast.m in Sources */ = {isa = PBXBuildFile; fileRef = 493ED01D268951EFE8437422CE1A5444 /* UIView+Toast.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D54920CE34AFF30F529E61D9459C5006 /* UITableView+FDTemplateLayoutCellDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = 1129CE2BF72E82EC12E70344519DB533 /* UITableView+FDTemplateLayoutCellDebug.m */; }; - D5991941DC41DDDDDACAE0B5D47A4639 /* FMDB-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 528094F23A810144F82ECBADEBE77807 /* FMDB-dummy.m */; }; - D66E78D63935A98894E702D922AA8B91 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA0F8DC6E0D3BF06F7492AF4FEF3F56 /* MJRefreshBackGifFooter.m */; }; - D7814F3ED165AA11096F7B172D35FD5F /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 42D89FE909F52B3C3F1035BE3A360A60 /* SDWebImagePrefetcher.m */; }; - D820DE54D6E9E5C85E0F9BF8A399E5EF /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B22A920A2907F15159CFD64F49212089 /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D88C9F75BDFC1CE7034687208D830D81 /* UITableView+FDTemplateLayoutCell-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 22517B11B58DA83A67CA898044996C48 /* UITableView+FDTemplateLayoutCell-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8B1525CB3DFCBD8E5032680530413D9 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B1B186968A284B72578A24B12864BEE1 /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9F2BA4D713DAC2A85CB4A453240EA3E /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = F5398B339844CC0409DB141FCCB610A7 /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA6FBCC4512298773ABFFA8A1F8BD972 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 58EDEFC63A54D8B264723EE0EA3AF7AD /* UIImageView+WebCache.m */; }; - DA75132AF02110EA8FED838245F245B3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 223CC88B609D08C4EA1EC854A8D73AD1 /* CoreGraphics.framework */; }; - DB55C38E306ED2B647AA6E49486483B7 /* NSObject+LKDBHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = CA54827F20BD0ACFF5163BE7B247199D /* NSObject+LKDBHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - DB596BB8F97C2B0A0CA72695B4010141 /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F50B0F68470FA444E926132799716530 /* SocketRocket-dummy.m */; }; - DBD3B4544D8320D0D83479AEB921D088 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C52134DD48D89A347BF80B6D47974CD /* CFNetwork.framework */; }; - DE17E4C2C6EADE5D2D531268B1695405 /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2AE4A60765DF1A0A41DE1A3935F1D4 /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE83F763EE2F69844D4359D9E80840F2 /* SDWebImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 40575EFD1F8F6E701DA182E683BEC2FA /* SDWebImageCoder.m */; }; - DEB92E2DB086E554AEA1DBFA8A9F00D0 /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1FDA2FAAE502AF2BE82854AC2AB913 /* IQUIView+Hierarchy.m */; }; - DFA0B0C7EC02135911CACDAFD38BE715 /* JSONValueTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = CF144683787E1EC724F1B8EE18CC50AD /* JSONValueTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E008B05370128F8FD8B4B627C8C4D4F4 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC76A5399DF4A8FF15D29CAA2CC4537 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E23258A837180BD5EBE5217D1D69909B /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = E58CBA84E4AB3797581C0AB28A440589 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E2E95C8112B691A912057A2DCD2B9297 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BFE0D4BB6D73A96180EF534C92ACE53B /* SDImageCacheConfig.m */; }; - E39D9A942BCE728467A42C478816966F /* JSONModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 26EA839B483358EFD4DD98F022DF89F5 /* JSONModel.m */; }; - E3C47E114E924D2F331F9A3F122AEE5C /* JSONModel+networking.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CB785BAFD8B89858D78ECDC291AE3EF /* JSONModel+networking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4AC26FB387427964538FA5FCEA4A8A3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 223CC88B609D08C4EA1EC854A8D73AD1 /* CoreGraphics.framework */; }; - E504492C8894D7522724712EFA67C7D1 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 34786D8E1B7A9E5618960AB31B260424 /* SDWebImageCompat.m */; }; - E57312010AFB591EE37870F65E651EA6 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D09F0EB6C4FCB74F8775B09136E55A4 /* MJRefreshNormalHeader.m */; }; - E5CD5C797956697DDCC98A3EAC7E99E3 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = E2623D539C17BD1BC944362048A0EB22 /* AFURLRequestSerialization.m */; }; - E624C54E55BFAE88D8EC8492E2B62619 /* UITableView+FDTemplateLayoutCell-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A34186A817DA32CDBD89AFBC93D1D11 /* UITableView+FDTemplateLayoutCell-dummy.m */; }; - E72EDE323AC9F92EC8A00A93AC186093 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 959711D42295318CCA4EA87A792B3D84 /* NSArray+MASAdditions.m */; }; - E802560B425A04296159872675948D29 /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 909C68A3CB1E26AA254E32962530E43B /* IQKeyboardReturnKeyHandler.m */; }; - E80DB5D9B2D35085282DF057BB540AFE /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0398DAF58BE8B2C600A504E373600B1A /* MJRefreshBackFooter.m */; }; - E82991D928C3CFEDC23555B3F2CB017D /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = A24EF25F62048423E9D930C5278074AA /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E8DAB555F27A1AF5B02B19282B609B8E /* NSImage+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 429FDD636F3939DEDA62FCB9CEA3F38D /* NSImage+WebCache.m */; }; - EA23726556D213DB485BD1791C7164CF /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A18C184E0BDB545829E6779CE4D2CBF6 /* AFNetworkActivityIndicatorManager.m */; }; - EBA34A3FBF57D5834C2EC4722210066A /* Pods-GIGA-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4333DE13F7B28D62D7251611E26C7D1F /* Pods-GIGA-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBEB72F80DCD10DEB82BF5F856D467FD /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = 99A4C46E61C7E0653C771E82AD1B7E32 /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ECBA1F4D70AF4600563FD39112D5997B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - ECD71FC38CCAFD1ACC2E546FAAEC0D60 /* SocketRocket-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AF51CA7545F890601168CFECF2A8BFB /* SocketRocket-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1199E40BF416FC1ACA2DDCD7B2E23A1 /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E62F2772B21E9A1BC6397BA887E30B9 /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F11FAB91014130EE233A3429439D38D7 /* FMDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = B4BD72CEB9C646B8351A8D0B3224CE48 /* FMDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F26CD9A1DF452688BF3C98BBA9090F92 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = FC70088183A39614A3A3BAD11F21A7EC /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F2EFDC17C03449A9A15E26464453103F /* NJKWebViewProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = D092048B929608F69E9F23C84179CEC2 /* NJKWebViewProgress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F30950E63F3D8D6C07FFB50C5971116E /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = D659CC3CF19E6BDAD644FB8B044B48F1 /* AFSecurityPolicy.m */; }; - F38B93D66E5151DC14AA52242858DDCB /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 167E9F1BB5C566ED575F9AFA45711349 /* FMDB.framework */; }; - F3FBCDC1B575D58AD9F78DA4AF687438 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 689FB24FA0A1443C9E6EDF71FCEEE91D /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4A57F7C1F8184A6DDEABB07FA6D7083 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 34793A0BF14919D4B2F3731DCA5782E1 /* NSBundle+MJRefresh.m */; }; - F4B3E44D5D2F6508BC1BB35A9FBDEC70 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B07345DBE7B43EA49615E8040B44B9B /* View+MASAdditions.m */; }; - F53E65E5CA956894846C5A6969536F83 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */; }; - F54879EEAE223E90AC9674197E6B1ADE /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = D6E61B0B01019595C39208492A85E4B6 /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F68EA720B0ED1BF96CEBF07977A1C0A2 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 420515E1248819A97F4A79591B9042F0 /* MJRefreshComponent.m */; }; - FA0124E4B3FEA15F037A936E569EBAEF /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 8421AE415FF30A82D8A3C46F4066E8C4 /* UIButton+WebCache.m */; }; - FA194D9EFAB084FD2FF27BF01F7B30DD /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B66A6C8F7C747D007AEDA080245D186 /* CoreText.framework */; }; - FB9C6242B11049E2F1062D04565E568D /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = EE1D1FDA83027C75229F19DD43194D5D /* UIScrollView+MJExtension.m */; }; - FD31283E2A43955C5BA6FA9008EE8D7C /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = AF0DA85B8E4EC528A3D60142D163F459 /* MJRefreshGifHeader.m */; }; + 009C79BE88C2F4C986644CD3E0B088C2 /* JSONModelClassProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 774A10F51C61AA781BFD1C4397931231 /* JSONModelClassProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00D9918CA212DF704D4248EF869DB868 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AC5B168B958ECE131EC368A4E10C6DEB /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01069C1B4E0135AF251E5CE7659768B3 /* UITableView+FDTemplateLayoutCellDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = E3206BC9B15475420835FF224D6604E1 /* UITableView+FDTemplateLayoutCellDebug.m */; }; + 018E193AC91FD48C64A9ED15D58AC95D /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = B416F9C983C43629DD021B63239CC1E0 /* SDWebImageCompat.m */; }; + 02A0ADD96B43A9970DD5C7C6BAEAB761 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 03FF8A989242213A9B392E66E53BE8C1 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 250AC017E1404E43770F53CAC6280DC7 /* UIView+WebCacheOperation.m */; }; + 04A7D6AADAB213CE7D26F8EAD2F87536 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 363026D36FA7E4000010BC1B5CD2B8E3 /* MASUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04F3BBE71B24770E40CC66A993AD85D1 /* AFSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = D6CDF2935BA2A5F043D6242F45854A06 /* AFSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 059ACAAB4FD2944460415CD3FD7A15F0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 05F4742E8E81FFB81BD1F1DFA9C63484 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FED1ACDE4726A20CC2932BCDC66F5787 /* Security.framework */; }; + 0648973667FB537BDC3ABFA9F3AD2ED8 /* IQBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EE88FA017BECDD56594C950358507E0 /* IQBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 06697BBB6E6D73B5F021E6DACAC5DE45 /* JSONAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = B2DEBA7CEFB5421B185C9365A7AA8A75 /* JSONAPI.m */; }; + 068EF598E554EC57038ACFB89CC2C47A /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CA55885292577F09084E8F2BB1E84632 /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 06FF2586AE76FBBCBF8171F98255D8CB /* IQUIScrollView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3707B0F6D5D2EB50CB0191D8FC9A3E26 /* IQUIScrollView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 07159A933B3C47A02FE2B2744ABAAC89 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = C405F8314A0EDA4CCECFACFD56BD6452 /* MJRefreshStateHeader.m */; }; + 08F144BF3E6E8F423644771FDC299B88 /* SocketAckManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3288F586F676906211064535ACEA59 /* SocketAckManager.swift */; }; + 091D17D5D8F832D28546A72B788CF0AE /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A743B083B30311B1DDC3865184A2E6 /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 09EC74E4AFC1D5951D1F80094D06969A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 0A1E34B4A27DCD62A914F3B028A07E6C /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 74DEFA36B4962F7E3A0B4640337FC908 /* UIView+MJExtension.m */; }; + 0ACBBA158F4635FAE16AB5456ABADCA4 /* UIButton+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B8A96A9F8907E36AEE053151EF55E0B /* UIButton+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AF48B0ADAD7D4F5A2CB22075A3F5FEC /* NSObject+LKDBHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E0EDFAA630F61D5988162BCAB78B5FA /* NSObject+LKDBHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0B1C5725C7BE03D622114275D6FD6EFA /* JSONModelError.m in Sources */ = {isa = PBXBuildFile; fileRef = A1D013A487C85EC1042B4A1ED71E7C6D /* JSONModelError.m */; }; + 0BD29DA68F0ECBAED7316565DCA70D64 /* YTKKeyValueStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 419688D30BFAF6943FBE6304B83E2FC3 /* YTKKeyValueStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0CDCF95E1063393825F8FC7FFD04726A /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 73A0A8125787204B223B07F7C9F0A42E /* UIButton+WebCache.m */; }; + 0D820188A3982F77A8C2FD47F4249F25 /* SocketEngineClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002CC32FEB8FB1D1B4D4BA9D7AE0CB41 /* SocketEngineClient.swift */; }; + 0DB2E34289D18AA9810609ADCCBFA181 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 82C2BD5350645441DD92F95DC5E589DD /* IQBarButtonItem.m */; }; + 0DCFD83A6149FC0514890A5ED67047B5 /* NJKWebViewProgress-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 10209B83220731CD89F3BE7CE9C254D0 /* NJKWebViewProgress-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0EFB524EFDF2F8712A2F5067817A672E /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = CE00515C642F3041D7530F99532A37B1 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0F3DF5C3BEFCC9838B53C37735B414BE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 577E3F36FE44476EE775746E6BC7F3F2 /* NSLayoutConstraint+MASDebugAdditions.m */; }; + 0FDB2B4F75591851F0F119EAE70B3F63 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 384EDBAD900277643587B535751AFC42 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FDFFDFAF40F6A37B8911FA7C57428CB /* LKDBHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = C98EC4CD7AD6C86DF803FE3B76FCED1A /* LKDBHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 101F836F887C01B45F4DCF351EBC28D1 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = F57EAFC722DC8A1A5E24FC9DC97959E0 /* MJRefreshBackNormalFooter.m */; }; + 104BE926FFFB5C942A7A0FAC05920132 /* SocketEnginePacketType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD28F6214D96C6BCC2EAF3C08B2EBA4 /* SocketEnginePacketType.swift */; }; + 13D87E1D99CFD98771E8066E6FF832CD /* IQUIViewController+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB909A57EFF13EAD51EF05B4F73395B /* IQUIViewController+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 13F320C89A0757B4DBD7A1B0C47B7B46 /* Toast.h in Headers */ = {isa = PBXBuildFile; fileRef = D03FDD61963B602D63D86983F58A4B56 /* Toast.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14441D47B616C056BC4F532352A3091D /* TTTAttributedLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CECF499859A92AC25079255ECACA8E36 /* TTTAttributedLabel-dummy.m */; }; + 14479278EA90F38247811468ADD8EBB7 /* IQKeyboardManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B077190F4428101E2C3FCA4A0F17CA1 /* IQKeyboardManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 148E57B8B5F299475BF5877A2EA6E7C1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70BC8DC64FAC8894D27E1964CC8CD209 /* QuartzCore.framework */; }; + 1563D7F05577852DD479C1BA3CFC24CC /* NJKWebViewProgress-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 27481864BFB4AD24155BCC2551337DB6 /* NJKWebViewProgress-dummy.m */; }; + 15F6265FCE0955CDB4967F7306407D67 /* UIWebView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = B755A7EEE0FDDBCCB793F3ED139513EF /* UIWebView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 162595288B55C740806E9BF91E39A9FA /* SocketEngineSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 936CB1BC52F552DA2661695DAD338FA0 /* SocketEngineSpec.swift */; }; + 16AB19AD78FA194D0ED3A8EBE7A347FB /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 10EDF99232E824A4129018791B729BC7 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17E52896A3ABBD4CCAB35046E48BE055 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = B2EF076F89FAD3ACFE9DCCC73E3553A3 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17F033046E658F3BFD0011DCB768CF54 /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 964EB9F9E3DFDFBEB0A635FF6F6445AC /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1843E6DF520A5EFE9C83C38E18578E42 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = C607C7BF73E5A94800A31DAFFC343CAC /* MJRefreshAutoStateFooter.m */; }; + 19119F01A87FAA55D45B4F11F33B7B3E /* LKDBHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C765CC91B74812227DCE13319608707 /* LKDBHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 19B84B8D631A49492C1DBBE00A7AF097 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 1AB30B2D8CA8C6F55177330FA38BA5B3 /* SSLSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EF23265306A2A5CFD07B28F6BC0D66 /* SSLSecurity.swift */; }; + 1C22674A488487F3510ED9E6C484C937 /* TTTAttributedLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 044E5621EF88BE1E4C8B35094500FCA8 /* TTTAttributedLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1CA7812A0C2F63BC21BADC1DE3C1F30E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 1ED505CC385A149F4DF8F4B94BA4FC0B /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 498010BF30FB1D6FB301F7B3FD6CFC49 /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1F150FE6E6E8D78C6DBBA7870EA8E4C4 /* UITableView+FDIndexPathHeightCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F51B36454E6DCF580D43CCFCB03FC536 /* UITableView+FDIndexPathHeightCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 206E174869FE4C5679DC9EFADE9FDC0E /* SDWebImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F53130DDA9FEA279EEACE1E1D479D77 /* SDWebImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 22554065FA07F1BFE5308A685394CB12 /* FMDatabaseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DA25A84A833228F9B77716016FCF329F /* FMDatabaseQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2524EC4EF024A6C067A0FA082084CFB5 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = A77564763595F2220FB4FF9C93274429 /* MJRefreshBackStateFooter.m */; }; + 271DED3D581E835D146A9B5800F50339 /* SocketRocket-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7476095E7330D9DBD36D76CCE3773573 /* SocketRocket-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2854C9B1086758BD2B6681206B6759B4 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 40995236A773C9D30F835E44168085B1 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 291C24EA8B69C1738694B0729ED3ADA4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3693DA67EFBAB281959594641A587872 /* UIKit.framework */; }; + 2AFB0AFA2138181E162CD00669D87FE3 /* JSONModelError.h in Headers */ = {isa = PBXBuildFile; fileRef = 65FA72B7E48A3FABA22AE5D855BB186C /* JSONModelError.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B0AD5F72C574005D53D512A8F8E2800 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23AAFF4BE17FB72260148442F598E055 /* FMDB.framework */; }; + 2BF9244FC886AC7E571F140F13713AFC /* SSLSecurity.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3949679577E6689BFFF358B9518FE13 /* SSLSecurity.swift */; }; + 2C4EF1B590BD389FF42157519B73A70C /* SocketEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6191ABE66A1BB9B2F88FFD6AF6186D63 /* SocketEventHandler.swift */; }; + 2C5EA66B987D887948303DB77AF68D61 /* NSObject+LKModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C7B870DA133902EFBA936EF978F45C /* NSObject+LKModel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2C70FC786858E6FFD02177DD4DF6DEFB /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C47585F4328CD92273C4B86865F9F95 /* SDWebImageTransition.m */; }; + 2CB401BA28E91577E8318A7BD8D03192 /* SDWebImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = D526289C8F52F38595B594AF6ED917FA /* SDWebImageGIFCoder.m */; }; + 2CEA12D52F3F7AC0669C99A157E19F62 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = D887710C70848A5D7BBB59F3733FA591 /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D407C6492BC569F5361B9210C89A19C /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3484FF439E2DBB5367ED00A1BCD06905 /* IQKeyboardManager.m */; }; + 2EE716A52967138FD6916F5F0F0F63B3 /* Pods-GIGA-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FD113136C3BE7E4822B80A29F3DC5E42 /* Pods-GIGA-dummy.m */; }; + 307ADC5FBF528D9C850F5CEB47EFCC99 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = FEE4923BAFE446FDB51B8375C4DA4869 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30D4DCE78AC7DF54F68F633B1F85B131 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 322539ED22E284D2B69C53BB5298C282 /* SocketLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55CDFB91944CA5A1481875292A58F12A /* SocketLogger.swift */; }; + 3345805C0D8E8D0726F7E5981DA61A5F /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F45B85ABF6C73FC46039EF4A3D28A28D /* UIWebView+AFNetworking.m */; }; + 344DB99F8332029C0391F08B6D0E425C /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5C08FC6773BA7BD235A3B78A7ABCAA /* MJRefreshAutoNormalFooter.m */; }; + 3463AED0AFF441E7AE64C5818A235DEE /* YTKKeyValueStore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA85730E7ECFBD1CCEB7260FF00F4C2 /* YTKKeyValueStore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 347945A5FC349A6E31AC7E3403E2CDE5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 35D685CF7C6F73A65AD3DD99674CA78F /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = CB12608CAF6344C9CD54DC1A84A0BEF5 /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3619E77A8EC11571EE9F32921DAC0C89 /* IQKeyboardReturnKeyHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8779B2CA7289D6A7185C91312B6BD88D /* IQKeyboardReturnKeyHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 36E344E5B627E04368ECC96338E17F26 /* JSONModel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F1A8219D19797685AF2D8E9EAFE675 /* JSONModel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37BC04B72C67B4A408D409660D3B790C /* Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC11B08B388CE3D8E34D3E0AC2E3B25C /* Compression.swift */; }; + 37F097E2269EF1BD238AD7449D796445 /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = D4BFC19B6137B925C0EDE4EBABA27FC7 /* FMDatabase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 37F6913EE3CD6EB8715086F0C9F6A823 /* JSONValueTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 118814FC7D9B5A7CF1BF99F325AF8488 /* JSONValueTransformer.m */; }; + 37FD169854FF4B397051998D611F152A /* JSONModel.h in Headers */ = {isa = PBXBuildFile; fileRef = A2092DB43436F5251A059C3C4A62A935 /* JSONModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3829CBCC3598DB13C2AD3B7383D1F24A /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 60E6BD48D0EAAAD7C2C35A6705DA2EB1 /* MJRefreshFooter.m */; }; + 38E0CD63021889EE46E1A6B9FA0415F5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3693DA67EFBAB281959594641A587872 /* UIKit.framework */; }; + 3A0419540405C51EA35937E39E985E9D /* NSImage+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CD9FF2C9E2179EFB4B65EAA1F59EB227 /* NSImage+WebCache.m */; }; + 3B31BC5E11334050DEE2597D1196D8A1 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = CDF02B7C8432A7AF339B1C46A875FAA1 /* SDWebImagePrefetcher.m */; }; + 3C52DF3086A7BA2E047AFFFCBFEC1E0B /* SocketParsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C722C8355643E88536A2074EFDB9B2DA /* SocketParsable.swift */; }; + 3C9E113B7712442B4BCB59AB7EEC2085 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 967F8C400CE4F9921B132F3F960E9FF0 /* AFURLResponseSerialization.m */; }; + 3DDB894364CEC991E61B04E9036D6D54 /* AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 404662E4EA47719280C225A3F07A8A6A /* AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3DF9076C816AE6338CE95412E588DF54 /* Pods-GIGA-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4333DE13F7B28D62D7251611E26C7D1F /* Pods-GIGA-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E43906B70EB01C06F3AE17008B853B9 /* FMResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A594A8236E67EB8170C115C30847FF7 /* FMResultSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 40A6216FC50B4540584DA1C45F98F9FD /* JSONModelClassProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 6779C8F389FC4B45319BDA12E59B2BFD /* JSONModelClassProperty.m */; }; + 40A9F401B6A8B531B3CF176B6EA4C0AB /* SocketIOClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 986BB8C05577A2D5C64F498406015E85 /* SocketIOClient.swift */; }; + 40E6B7A671DFD76170156328D995546B /* NJKWebViewProgress.m in Sources */ = {isa = PBXBuildFile; fileRef = B3FC77617DC552A6560A5396024E9F3E /* NJKWebViewProgress.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 41E9E4524E285B0DC1334FB06772E4A2 /* Starscream.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8509BE0EBE02FAB118A15EBE60C8E47 /* Starscream.framework */; }; + 42B30C255DE8D19534405DAD5EA14C91 /* Starscream-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 270472B1F4EA9863212F85E4EAB5B497 /* Starscream-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 431C76067CB09B1FC0E4DD5AEA6B540A /* IQUIScrollView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = CCBD06AABD5DDD4CA2D79364A77DF3BF /* IQUIScrollView+Additions.m */; }; + 432FA22864D148EBD4CB22F55AB68004 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 457ACF9150DCF9AF445B129CC9678FB6 /* Masonry-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 55D47BD7E8E69B61DB9C10FE582F0F77 /* Masonry-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 45AAEFF6FFBCEE5DA0A7377AE556CE7B /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = C4E76FAF8061A10B224E54FE0D78F122 /* UIImage+MultiFormat.m */; }; + 46A64AC807BC0DBFDA09A579EA0CF3E6 /* UITableView+FDIndexPathHeightCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DF7CF70E97B77C95449324D577D2DE5 /* UITableView+FDIndexPathHeightCache.m */; }; + 484CBC296B6A059C5C9EE6DE7FF1FB67 /* FMDB.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23AAFF4BE17FB72260148442F598E055 /* FMDB.framework */; }; + 4985E014269593640635A8DBD75DA450 /* NSObject+LKModel.h in Headers */ = {isa = PBXBuildFile; fileRef = FB8C8FEB6717D66F14136EF50C148280 /* NSObject+LKModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A712D32646F119F208BBA3D2A7C0672 /* SDWebImageImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B2009C43A73788FC750D0B1C40ECA60 /* SDWebImageImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4AA21F40697CB42D7D219ACEDE4FBFCF /* AFAutoPurgingImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BB129160697EBA00C13DD98D69D252F7 /* AFAutoPurgingImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4AA3A9FC9AAD94C226CA975946C9395B /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = A1476EF51AAC4F331DC16EE15A7C9A52 /* UIRefreshControl+AFNetworking.m */; }; + 4B2CCAA899BA00D1D49EC70C0BCF57BF /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 88446EB28B584D07BED817C62D06D29D /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4C321BA8844AA4C44D4416CC6948DF2B /* AFNetworking-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D083351E8A8E8A86A59BA3A3863723C4 /* AFNetworking-dummy.m */; }; + 4C5DA96F7CAC26975EEEBD7450FF214D /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E794D2376437EFF78B2C7EB9D7060B /* AFURLSessionManager.m */; }; + 4D4F2050654580FE1F1D5F4F82CEDDB8 /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CA9FD8A6D417DF1249A66C83FFBE8E4C /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4EB17293737C717D12298CFFE6A67514 /* JSONAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = C8B763BF7B2D2A4C39D2DC28299CEF57 /* JSONAPI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 511F4CF798D6A4A3688B6BB842C48D87 /* UITableView+FDTemplateLayoutCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F76496371A94D04C6DEB3EBEEB62540B /* UITableView+FDTemplateLayoutCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5239E6CA49837A90A08639E1E4CBB3B1 /* Toast-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 72F5A09FBDED1F72A04C3E335DE0A1BA /* Toast-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53BDF81D0A52EA526D597A5C5B139D7F /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 4253E7F7448B089D6F4CDECD149486CB /* MASCompositeConstraint.m */; }; + 53DB4048614C4483D678AF52930E9ECD /* UITableView+FDTemplateLayoutCellDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = EF79A7916BB6B36C2A83C99F45DDA1C3 /* UITableView+FDTemplateLayoutCellDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 572BCA39E6087AD4DE4BD534943A67C9 /* SRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = EED26BAA73FE884C227E56BEB5E9D7C5 /* SRWebSocket.m */; }; + 57C1171188E1A77E65C670ED986D46DD /* UIView+Toast.h in Headers */ = {isa = PBXBuildFile; fileRef = EC74917D726BBCA053741855222BD20F /* UIView+Toast.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 57D1433F37CDBBC61AEC35D00F8F5CA7 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D2D8438420EB7A9186D08660AD7BD6 /* SDWebImageManager.m */; }; + 57E9B041CC1D8988C38DDC97CAEFCD76 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E917B75DE00F9E5F318667A4D3CA7DB /* MBProgressHUD-dummy.m */; }; + 57FE38F17C0EDD5CF73B2A084A17586E /* JSONHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BDE950FE4B829BD4E2D8E0B86A002 /* JSONHTTPClient.m */; }; + 580C49850ED7094BC4D197E27DDB07CE /* SocketPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2C3B4A8303BF777A59CF2BAC331C8B6 /* SocketPacket.swift */; }; + 58388F773008AF671CE67FE1C902E6CB /* JSONKeyMapper.h in Headers */ = {isa = PBXBuildFile; fileRef = D143D5CBDD8A310F6BE8B5FE049E63B7 /* JSONKeyMapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 58E6E68D10EF3D64522BD267CC1761A6 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = D1FD9AB8D8A0F476AA2FFFB0AF73984A /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 59F81DE0305CC2AC448D2A3C6B3280A2 /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E421B865FF1305197CC9C5DB303BB22 /* MASConstraint.m */; }; + 5BC8CFF572E6322BA5BDC91D816D94DB /* SocketRocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A1F61FFDF1CF20E149F6B0F6B0FF24A /* SocketRocket-dummy.m */; }; + 5BFE1CC79F693B6218B419AE50B2070E /* AFNetworking-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 79CF50141FCA7A6797717FC93955DAF1 /* AFNetworking-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5C33A1FFCCF56C70F3BEF5C8A478712B /* UITableView+FDTemplateLayoutCell-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F426661253D1751C24C7C550B0DD3742 /* UITableView+FDTemplateLayoutCell-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F0B1C5637118C157A9B60D62896F846 /* SocketAckEmitter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D82A606DAFFFB4961C3B9C2FA8505535 /* SocketAckEmitter.swift */; }; + 5F6ABD27328146E613415A59A1521EB6 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CFCC52EC62F150CB4DFCDB379045F8F /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 621B413DAEFE75991251ED378822527C /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C8E35BDB3CC1024935C804E53F0DD2 /* MJRefresh-dummy.m */; }; + 6298B1C2234864DA5ED3B5E6398B95AC /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3AB36856959C85924D590AFD2695D2B6 /* MJRefresh.bundle */; }; + 62DBE4193DF3FD638FEA517155B308B9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 636BBA734C1A17A734761D674FAE8800 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = EFC686D628AA3C2CFA30D354721530B4 /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 639A86F8EDAF569092C61103FFAEA21D /* IQUIView+IQKeyboardToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = 7491AD0045ED41AE8F08FD751720691E /* IQUIView+IQKeyboardToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63BA6FBA10304F4828DE97C0FA63ED9D /* UIProgressView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF67949298271264E085700428A4FCF /* UIProgressView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 63F5BA839B931DB6605554B6D4369A0C /* IQUIView+Hierarchy.h in Headers */ = {isa = PBXBuildFile; fileRef = 07BAC4DCA1D385E6719FCD0A2C3518E8 /* IQUIView+Hierarchy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6478B0091202F9429D2A61E30BEDA571 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FED1ACDE4726A20CC2932BCDC66F5787 /* Security.framework */; }; + 6595C6295B9EBBF40751A376239681FD /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FC3B9F0418FF6AD9307259ADB289A07 /* UIProgressView+AFNetworking.m */; }; + 665B3B037B98D3E3ADB449A43FF14F42 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = B37CE92BCFA7B9F94F1EC5EEE702D1C8 /* IQUITextFieldView+Additions.m */; }; + 688E0882DFC8CABA02390F43178CB33F /* IQNSArray+Sort.h in Headers */ = {isa = PBXBuildFile; fileRef = D917488C1503A8C83A348CD03817262E /* IQNSArray+Sort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A0B1A0FA7A75C861B9D401D0E8CC95E /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = A38841D1204800C4F712AB1D13E4AC7D /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6AB8F78680B3470391219F11D51A1DE7 /* UIImageView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B92D24C35F51B3A3A9626DD861EF1E /* UIImageView+AFNetworking.m */; }; + 6C23BBF56ED4DCC10CA1765A6736D1F8 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B84232FF804EAAE9753EE17FCA85A8AE /* MASLayoutConstraint.m */; }; + 6D13591A430260C31F6102B30645B5CD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 6E6E8ADF2879B9F6832CE82F2B538366 /* LKDBHelper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 48886EB74B58FC75012D8AB06D74F958 /* LKDBHelper-dummy.m */; }; + 6F5906B58272E07A0850248867562581 /* JSONModelLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E7D955074A0ED0B9FF131595E872064 /* JSONModelLib.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F5E56A1D7E89F2B0A2692CF780EFE7C /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 84A34E767AC05FDBD3D849436D0BCCEA /* SDWebImageDownloaderOperation.m */; }; + 6FEA8F22AD821ECF8E74615FD8FE7427 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 6FF8739ADFFE8465389AF3F0603E6F83 /* LKDBUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 00DBB0CB01217AA64958D2E4F6059B2B /* LKDBUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7072311B8847A2004F9C31069CC00E19 /* UITableView+FDKeyedHeightCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 18DDE12559A163C7C94F4FE3A82C3212 /* UITableView+FDKeyedHeightCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7099E4035C06D3116DA2586EFE563C0B /* AFAutoPurgingImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = E7A5DB8DF2295A90EB25F7E495E5F62B /* AFAutoPurgingImageCache.m */; }; + 71E99398CEF7E77AFD550582A21DF6A9 /* SocketEnginePollable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4AF1BBB3946B6E0D89CDC1AE59011B0 /* SocketEnginePollable.swift */; }; + 71F6D96E3AEAA07389F37E2C4B63C4F6 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 64835380AC55D938C3E0E9AA529F4D41 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 72563ADE99DC9E753B27D48B16AA3654 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 72BC0D5210ABDE6396CC75FA6A823FEE /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70BC8DC64FAC8894D27E1964CC8CD209 /* QuartzCore.framework */; }; + 72E566862803FE9B1DE0D4A246E34DA9 /* SocketExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93BF77A950CD15978D9DA654DDF789CD /* SocketExtensions.swift */; }; + 72EE4A5DC3076CD8C13717D4DAA37DFD /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 296D773846653A12BF592FA3AEE99EE7 /* IQTextView.m */; }; + 73BBDACC22CCA36A6DAAA167AD780BAF /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C199822C99C320281338D998C03B995 /* MASConstraintMaker.m */; }; + 756DF24546C7D91459DCADC8F1C98660 /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 367D41745AB1AEBE8A1FFB6DB552ECEB /* MASViewConstraint.m */; }; + 772785574BC1059C2913576CBFF3AD17 /* JSONKeyMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = BDB59FA6744E05662DDE8F5FB6697313 /* JSONKeyMapper.m */; }; + 781BC730696BEA5F8680861CE876AA2C /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = C74B6FEF3E092E16E6AA34C13A34D0B9 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7854DF5B9510FA3584D187A9D20B2F18 /* SocketStringReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7704E7E2B7BD84344BB610CC27D5A70E /* SocketStringReader.swift */; }; + 78874F1F850E4AEDB8D05955D1736A6F /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E2FB8AE972E929400C566BC03FB6468 /* ImageIO.framework */; }; + 788BA72F67004504FFDFC670048786B5 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = FE403E58475EF64EF393ABA0E2EC5EC1 /* IQKeyboardManager.bundle */; }; + 78AC6714960C42CC866222B6D956EDF6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F043DBEAB75100EC409BEDF3E58A8BC0 /* CoreGraphics.framework */; }; + 78D1AB77E0145AD1E77DC9CE0B8C4D49 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 25972EA3E10BED458FF978D175A9C263 /* SDImageCacheConfig.m */; }; + 790B528109D306DAF9105F80D932F218 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5660075EFC0AA10C221C3D12FB6522F3 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7942D242D079A5710A72B659A54D7E26 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = D58D416D0D907E75F8F25DBC31A8F2A0 /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AE9484F09D29428653109D73D4FC488 /* NJKWebViewProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = B8C80B2C162E2DADAE6E64B7C59BD395 /* NJKWebViewProgressView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B7402278FE9063BB449B30F22B09DF7 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = CB4643E8EBAD5EE3D3BEF6DE78EBAA46 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7BD298BE626433E40A97797DFBF271A8 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C5DC2D40CE636899E96F07F2E86609A7 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C17BEA6034027310D1D205DB2008CA5 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = AAF305E6DECD78168E49221E61B947D7 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C49A18841060D12A58F92CE62C21F9D /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = E03910B7599DBB9DE52BA6B580D5420C /* IQNSArray+Sort.m */; }; + 7CF3668C8E30DA3CAB92C9C6A8B88B8F /* IQToolbar.h in Headers */ = {isa = PBXBuildFile; fileRef = BFC2CEE4A1CC40C763FF7873BA8B56D1 /* IQToolbar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7EFDAA1642FA83DE777CFD086182D5A4 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8705B892D0FB23E4B3A26DDB33CBC371 /* MJRefreshAutoGifFooter.m */; }; + 7F66E5779B29E0BC17D565DAD7CDEC1B /* JSONHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = DCF6F5650FAA9B82ED6F665EAB1DE040 /* JSONHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7FBCD08C954F8BE3AF648806C1ACFF0B /* UITableView+FDTemplateLayoutCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F1558AF059B62809206FC3CD1039CBA /* UITableView+FDTemplateLayoutCell.m */; }; + 7FFE6B83CA9E5A9A1D23F9F7FC320E65 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = A683976152674929538EEEC6EFF05A4B /* SDAnimatedImageRep.m */; }; + 8060025235D93F30A5F10B412DD0822E /* JSONModel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 60A50FB199FB6B0C5EA49A62A4C863D8 /* JSONModel-dummy.m */; }; + 8069223DDD6D0F2E1A87D8E66966709B /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA67BCA7DA83AFB686019666B15E346 /* MJRefreshConst.m */; }; + 80C7997C4D60D2103A63AAE65EA63C8B /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 75491F997888B75AAB2C0AB027F83D5C /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81ABD96C8FA6FF28CFB2A3A78A6EA560 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5925EC6C2B2151154E2F24CC70D04AEC /* SystemConfiguration.framework */; }; + 82C00DBA894D53CDD0AD35BE2BBFEC0B /* SocketIOClientSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79898C8FB8D364D3B8B09502372E9F0B /* SocketIOClientSpec.swift */; }; + 82E73BD4532D89B27F8F209781C134AE /* SDWebImageImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = EC02366395598C42E28F51101028C3D3 /* SDWebImageImageIOCoder.m */; }; + 83EB76688541963CC6A7837966631AFD /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D1C4ECF2FBF4E01A9207EE8FD4F3FF66 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 85F02B2E2F922F439A12C7CBB077E8DE /* IQKeyboardManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BDBB82B0577F0513EA40C059469FCAD4 /* IQKeyboardManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 86EA527BA1862E06A8E19E0960C66E7E /* UIRefreshControl+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 059F55EFCCF65A29688CF615E5AD5415 /* UIRefreshControl+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 877908A157CA3CC4687710B1F8C43117 /* Starscream-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BC61B5225D9CEE976A35A242843BF85 /* Starscream-dummy.m */; }; + 87C7C6E2F687289E7EFB48EA630B3EB9 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 4895A24A9EA8533671D64541ECA375BD /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 87ECA447DB887426665260651B7F147E /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FD77768BDABBF2BB48928067588B12C /* FMResultSet.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 88DE7BAB1F4999A5F4B617F44E5FD1D3 /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 237BE841F4D7796F3834F60938E612E9 /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 89637BFFD180A1E05F04DAF0CF4A6540 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8B941495F77E08AA9AD977942455F90 /* MobileCoreServices.framework */; }; + 89BC1F89CAF0D75A3C9024861100E79C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 8A1EB96C607F92E8AA20676F9A4BC7D9 /* UIButton+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 9524B522E6F3A1198F46B4ED841E5662 /* UIButton+AFNetworking.m */; }; + 8A318F056072D4715B58CBDC1A6ACB4C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + 8A6EEF68E7625AB66A3A8DED1594F88F /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 36EBA45514DE97C348F33C685F5897DD /* ViewController+MASAdditions.m */; }; + 8B855A73B75155FB2C0CB05B54FDDE0D /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = D1AF018F0E0542900564BFAF307755AD /* UIScrollView+MJRefresh.m */; }; + 8C9165B82240F78C43F7E7ACFD17612B /* NJKWebViewProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0587B9F9A54258E4EC092F7FCE94EC /* NJKWebViewProgressView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8CD45B754192DE834B642975E85257AB /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C89BF4798AB4ED10E9969C07146751 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D9636C74777C684BDF312EE66F8A585 /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FBF2BC661F74DEDD633BF2098800BCB7 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DC3FC2342EC2E944B3A3E83E2683130 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145E6BB9DFB46461BE07ADA20047F2E /* MJRefreshHeader.m */; }; + 8DEFF8A97422F8839254684CE8C88F4E /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B900B84AB25BE438B82CB50415C5ADE5 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DFCB3EDAF8FA11CB49B473AE187B5F3 /* SocketEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22A12862A28052673208D864DF5F8671 /* SocketEngine.swift */; }; + 91F8ACC960F47860C2BFD36E1AB3DC2D /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1512D35F866701255C740BB8D89CB037 /* SDWebImage-dummy.m */; }; + 939EF882233B22D0321A70F6DADED11F /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 531C313E293B098E8DD0AE16F9F05E50 /* AFHTTPSessionManager.m */; }; + 958FEEE31215AB970371D4CBAEB8A4DC /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C52D5FBF7AC49549CACAB8E226E06A55 /* IQTitleBarButtonItem.m */; }; + 95E0F7FDECABE72E262C058CB72C7DFB /* Toast-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5CDE6B616CD12A18C278C6799A0094 /* Toast-dummy.m */; }; + 96E70B43FC04BC99AED1BBD4FB1D7581 /* FMDB-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ACEC95F7E6261C5C5E02E54CAFEA523 /* FMDB-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9701C0D167F477E53632D1A8FBDF6556 /* Socket.IO-Client-Swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CA5AAF13D2E09670AF9CBA0B18BF39F /* Socket.IO-Client-Swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 97A034AF6314B2F2799F157CB5701E9E /* SocketAnyEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 027B44E48FB40AD9D0DC25B70D6AE8CE /* SocketAnyEvent.swift */; }; + 97D9744D1FA62E10C2F3180A4B0128E5 /* UIView+Toast.m in Sources */ = {isa = PBXBuildFile; fileRef = 6594B566BAF22CF7F3BF954283907D88 /* UIView+Toast.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 980E0C1816124A0343E2EA2CF7F30EE5 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D1192940DD792A9A986CB6606BFB24E8 /* NSButton+WebCache.m */; }; + 9898B13B5771AC304E096319E72F8098 /* AFCompatibilityMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = B6841A5F308297E91E99E7B83292909E /* AFCompatibilityMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98F19C682AC68E9D2E2052F709F42AF9 /* JSONModel+networking.m in Sources */ = {isa = PBXBuildFile; fileRef = E88C81586D204E9EC5AB0CBFE3620057 /* JSONModel+networking.m */; }; + 99249B44D65716B5CCA0BFFD5F83062C /* IQTitleBarButtonItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CDD19D40A0561AC2EEC7572402D3D1F /* IQTitleBarButtonItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9939FB017D464F93944D8624AD4EB0D1 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C5AB81B04A2D01A1380ED02CA7F95DE4 /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9AC1064802A4D107353A87F2B4A963B0 /* AFNetworkActivityIndicatorManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F8A4A704B12B0E5FCD4942063E450299 /* AFNetworkActivityIndicatorManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9ADBC57B36C223E3C5BE5DFCD8197971 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B66D98C970953F228BE3D0F043AA6859 /* UIImageView+WebCache.m */; }; + 9B8D84996694C541CD3434386E0A081A /* FMDatabasePool.h in Headers */ = {isa = PBXBuildFile; fileRef = FC329F809B6649CDA966EB263EF68FB2 /* FMDatabasePool.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C11A290C9C5866A185A54F1EC04E2BB /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 531AF42C28A0891D1E91B6BEA86844D7 /* FMDatabaseAdditions.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9C54C073493FCFF4AE07427E9CC72DB2 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 59E8BF8E1889AB501DDF9C32A0B690F8 /* UIImageView+HighlightedWebCache.m */; }; + A0303675DA1D1590CCCBDAA2B5A7F560 /* Socket.IO-Client-Swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1501D5687E1AF56AAF3E46B413F8A46B /* Socket.IO-Client-Swift-dummy.m */; }; + A08A8AB356264E248D01F1BC0EF08166 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C0FD05EAF05C6EE6CD501AA135B3FC66 /* Masonry-dummy.m */; }; + A0FB2FBEADC2C2FA597C80290DF6B809 /* SocketManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F43E521A7D9B6E90D0A9E791D4C725D /* SocketManagerSpec.swift */; }; + A12A3BC640B690479F345A49C6C48209 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 042DC3BCC2842104D6A45CA51DC3F42C /* AFNetworkReachabilityManager.m */; }; + A1B5D80A8998311B8C9043E6942925E6 /* FMDatabaseQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C79216DF49554E23B9DFC5FAABDB967 /* FMDatabaseQueue.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A1BB32FF4BE29C004A13F2E03127E8F1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F043DBEAB75100EC409BEDF3E58A8BC0 /* CoreGraphics.framework */; }; + A1DF5B0FADB9E502553372C3347042A2 /* SocketIOClientConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 768A5DE5D08824954B4B101A2FB6B2BD /* SocketIOClientConfiguration.swift */; }; + A2D9F9EFFDFE9C19DA842E826B06BCEB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + A3CE2D718CEB5AC059823178404AF0EF /* IQKeyboardManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DCB0BEBBAC1E47DDBB977778143CC25 /* IQKeyboardManager-dummy.m */; }; + A5382D3EA98D2EB1AD9EDA5F2138F00D /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = B8B56BE8B95141AA7FFDB381009541CA /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A548833BE5FAD40830428F36E77D0F52 /* FMDatabaseAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = F75D6F9A7E4B4F68F38B9CF845506873 /* FMDatabaseAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5B069CA1170E03891AC5648DE5CF87D /* UIImageView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 37359E3E690C6350F9602BFFDBB04147 /* UIImageView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5B3E46D3763A25BD3BAF0CFFDEAA24D /* UITableView+FDTemplateLayoutCell-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B72958B223F8DBC6D1DEBDF0873BBBD4 /* UITableView+FDTemplateLayoutCell-dummy.m */; }; + A6CED0722D83F40F3462956E04841AC8 /* TTTAttributedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = D18BF93986D1392783B2FEBA0B4EEBE5 /* TTTAttributedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A72D242BEF61E27D6C29092DF4666A4A /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = BCDDB5FF379578ABC9203ED41F2C6152 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A7370CE9231F9A4927142D79021879EC /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D11F0C588A7F5B9D6536F3DFDEFD786 /* MASViewAttribute.m */; }; + A77943B15F7CF5151B637808B40DD722 /* LKDBUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A60255EA01616D51B066606B28E168C /* LKDBUtils.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A78A1ABBC5D657764E754959BF9BD290 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = BEA9D04E7D8139122C3891161371C04F /* SDImageCache.m */; }; + A9545DE6CA040EF32EC94145E3D1F49A /* YTKKeyValueStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 266860A64CA3E38126FD443422246252 /* YTKKeyValueStore.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AA00DCC0C8174B2D7E48EEC3C768B047 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 24B2D873DD726E1CB92080AB5A4C458F /* MBProgressHUD.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + AA4959949A290D4B8BE1E31A890D0C80 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = BC38A229ADD93FA75F0CDC8D9BE4FC6A /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC6DB8270C474C50F5D71DE9BC73382 /* IQTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = D15A13B4D2D795A0C6BFDD4C3D657FCF /* IQTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AC5F946DEC898FE1FE7BA74426FE6A8D /* LKDBHelper-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 61FE2DC3E37626E602B4123EBB968B51 /* LKDBHelper-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD868043328B2125E27A5DC14D11958F /* UIActivityIndicatorView+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BB3C77E5D6641E78ECDFF85F30BD25A /* UIActivityIndicatorView+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ADD011E9ABBD96D70AAA32A4B9ACBD02 /* UIKit+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = A9341A0F668333A93B6FBD08098250C4 /* UIKit+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B02D91E02099D3C6A2F988C766032176 /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 81061EAAEC3F61A38F09275305E22D6A /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B05BDA89A18DA866355AD804B694F851 /* IQUITextFieldView+Additions.h in Headers */ = {isa = PBXBuildFile; fileRef = 243FE71724C73A1404F864718F47B574 /* IQUITextFieldView+Additions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B086C8017A694E281B3F30DCCE8FA588 /* AFHTTPSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FEAAD1709AA2F9B0C1E7F611FA261B98 /* AFHTTPSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B1BDB5153E77DA6754E2364A3BB4D20A /* SDWebImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = C7D7CD906FAB43D44FF0E620B8F6644C /* SDWebImageFrame.m */; }; + B1F714AD50E405F4DD3C865A7D823EAB /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CADC5017C63268D068AD5B7FB33E0BFC /* UIView+WebCache.m */; }; + B21C3C93DAA23B1C331B9326991CDCFC /* IQKeyboardManagerConstantsInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = BEDD0B27A048E132CE68F433D20A9480 /* IQKeyboardManagerConstantsInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4137607C73DB4C84CA0EF8163BDD6F0 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2431F4B5AE230C938093F4ACC541DF9C /* WebSocket.swift */; }; + B44383A3FA435C1E986942C817339302 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 1942BB9A9B0208E8A598BB2F1563A2D0 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B46FE8C00C2CDDE0B4790FFD3DC961A4 /* AFImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = C73F80367886F94832EE106D9F164391 /* AFImageDownloader.m */; }; + B646C96E2D7DF54445B3719F800D79E9 /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE34AE9B11E8E9CE707D60148CFB286 /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7D82E1749DAE5FF0A400678011DECD6 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78F07669D4FDF923215E34924891CA68 /* CoreText.framework */; }; + BA0711638621C2A47AABFF9E03546893 /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CDC1F6DD226D0362ABF5BAC2D55A32 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BACE840E379E35D62AE29B87B8337CDB /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 26168530D466303D1859051CADEAF5EB /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BAF4176A24E04B8CBE0FA434C1BF810B /* SocketRocket.h in Headers */ = {isa = PBXBuildFile; fileRef = E08E7458F1940F20C0E1BBF7FDD0FDE7 /* SocketRocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BCC67B107B611B06ABD214407B69B62F /* YTKKeyValueStore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E018CB10D71F6E7076E334BE4031987 /* YTKKeyValueStore-dummy.m */; }; + BDB33C3708110C6D755175D1F0A2A70B /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = DDC8D5C54CB2FA432E51D33F63299867 /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0A16E00B4BC2D88A7833D5DAED62942 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CFFA0AAC1274F48CF9BBAF77F583DE9 /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C12BAA822391D670C53FF0C2299654AD /* AFURLSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F8965BFE9CC1CE8B5CFC2B14D7E2DA8 /* AFURLSessionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C257BE809D4C4357A8EB7118960E3143 /* UIActivityIndicatorView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C55D9F05AB29EF41FFA46E6095CFF72 /* UIActivityIndicatorView+AFNetworking.m */; }; + C25A6DEF8B9F5859BF6E8FACD53F88BB /* NSImage+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 85FA16278B2D2A724F98F1B98A871074 /* NSImage+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2B7F4EB405C401EA53023341C05E15E /* IQPreviousNextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 17CD040301E2941CF1307C11668F0335 /* IQPreviousNextView.m */; }; + C2D7BA9B1354C36D28390C1502A35D91 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF2567DE02E414DB1FBB3C77E2FD44B1 /* CFNetwork.framework */; }; + C480AC5D32406D4901116FCAC5FB0EB5 /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = CBE54AA9DF51DD23D24F6D99DBE4D170 /* IQUIViewController+Additions.m */; }; + C49ED0BA3BE26C50F202C5ED5FB85573 /* IQKeyboardManagerConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = BBDC6D1622DB585841784A5DED1346FA /* IQKeyboardManagerConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C4A53AB41B17060209A7059F727FCB9F /* SocketRawView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30327CFECF1D69BC51289B5CCC97712 /* SocketRawView.swift */; }; + C4AA57B938513DE614A7B90AEF5CD858 /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 6388F569E994C890615BAAE8A1012286 /* IQUIView+IQKeyboardToolbar.m */; }; + C5BDD2876FB1BBF95F1EC56250280365 /* SocketIOClientOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90609B4B8F17E6BD520EC73A397904D4 /* SocketIOClientOption.swift */; }; + C605A44DF96E7FCACF7D6E37B62F795D /* FMDatabasePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 00CC387D226EFBC6389FAA62F3DD873A /* FMDatabasePool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C8DF22EAFFC2F81B0426E2165AC93E44 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = ADD95A322AD6CC6DFF9662EE73FD3866 /* MASConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA0D37AE5433954573D3E37771CDDBFA /* AFURLResponseSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = A21BBBF163BCA4C3910C8490302E3372 /* AFURLResponseSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1E205A4D3A8515ED42F76C2671F1BA /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = B4AA799A01CF6F84D07EBC2151183FE8 /* IQToolbar.m */; }; + CAE88A60F8C6CD6AE662BAFA5ED3B373 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 12BE137618AD905F6C08A0688A5AEC0F /* SDWebImageDownloader.m */; }; + CB52B7EF0160C5FC511C13D7E6D2A8B7 /* SDWebImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AE85EEFEF754EE2C913DA2E906A10FD0 /* SDWebImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC8F9B4A1AC4E276EA8AA4C6F2BF3CD4 /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = B88609AD20FB25EC23E9CB38EFA4261C /* Masonry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CCB74062CE0F4B8E5B7483599BC398DA /* FMDB.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E5007EEC9570DEC0914742C5AA50210 /* FMDB.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CF4EB3350726A86BCCDF5F363C5FCE72 /* IQPreviousNextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7916596619DEA640BF07E493F03AE462 /* IQPreviousNextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CF957309306A61F1A68EC08E1152AB3E /* SocketManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6DAF6AA9DC71209F96E9D4506478663 /* SocketManager.swift */; }; + D02DEBC241C24DEEFDA13C355197A2FB /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = F665835060F250C5E831A32121C45B5F /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0E2C9455FAC089FF047113E8B217CC8 /* SDWebImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 91A39121A9FBC45737A0102A4364012D /* SDWebImageCoderHelper.m */; }; + D0E7D5B865722A25EC7D91B0FAD8A6CD /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 45879D3B33AD86D331ACA84B5995B4D1 /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D1641F0A353E02D971A2E6C004D4D996 /* LKDB+Mapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 670CF36062CD3ECFF8C5C5AABE213403 /* LKDB+Mapping.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D206EDC84CE44D5DC711ADD087BC4B17 /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = AFEF7822284D0740E9439FDA575D9C21 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D29CF1B9A1D71268C1F85EA53B32BA24 /* LKDB+Mapping.m in Sources */ = {isa = PBXBuildFile; fileRef = E20BA2B707DD3CA5BBBF617A38FCB880 /* LKDB+Mapping.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D46545D206874E3A223372C84F1EA73E /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = E43C0234304F095C027CA559CA4E9F0B /* MJRefreshAutoFooter.m */; }; + D4E9B3DE75C23D365E255B6212CB1CB7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + D5153467E7A41556D6ECF2FF3627EF13 /* SRWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = CA697CD49B3E51073391142FA485D827 /* SRWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D55F4366DC3D822A511513DF4E5D6AF5 /* SocketEngineWebsocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB6CB6F47D077D87B2488C5A7D01EE4 /* SocketEngineWebsocket.swift */; }; + D5991941DC41DDDDDACAE0B5D47A4639 /* FMDB-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BC5D2DFF79A26EDAE2E4229FA02DE3ED /* FMDB-dummy.m */; }; + D66E78D63935A98894E702D922AA8B91 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 874A487F8BFAD83D1F053B4DCD8201A1 /* MJRefreshBackGifFooter.m */; }; + D820DE54D6E9E5C85E0F9BF8A399E5EF /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D16FD952562C34388EC43F2A7733B27 /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8B1525CB3DFCBD8E5032680530413D9 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 21D29A4125F838745482898EE34D680D /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9F2BA4D713DAC2A85CB4A453240EA3E /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 91DA5B2E5AE56CB9005ECE4644FA3356 /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB55C38E306ED2B647AA6E49486483B7 /* NSObject+LKDBHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = BE39E881910D30BFF4517A4177625677 /* NSObject+LKDBHelper.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + DDEA8BEE980D9DD7E9E746DFEAB726E4 /* SDWebImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 72575B068A276F2F8A0CF243743B3E74 /* SDWebImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DE17E4C2C6EADE5D2D531268B1695405 /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 316C099F7EBA73314DFCC094D555F83B /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DEB92E2DB086E554AEA1DBFA8A9F00D0 /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = CDA517AA74DD3581625EABAFCF57A1F3 /* IQUIView+Hierarchy.m */; }; + DFA0B0C7EC02135911CACDAFD38BE715 /* JSONValueTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FF4D47DF573B44C28B3DF814C3E50CB /* JSONValueTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E023B49FEB84BA9DC22FBB8CC7B348FD /* SDWebImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = CCD140D091E406CA53B6F3992BBDB579 /* SDWebImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E05E5C1BD849F31A27B68D75DEF07E30 /* UITableView+FDKeyedHeightCache.m in Sources */ = {isa = PBXBuildFile; fileRef = ECFAC79A556CD170296E2CF2FDE40919 /* UITableView+FDKeyedHeightCache.m */; }; + E26423151F8032E63A36100AABB61D43 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 9265EF5245C8B9E17305393357C5D93F /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E39D9A942BCE728467A42C478816966F /* JSONModel.m in Sources */ = {isa = PBXBuildFile; fileRef = F6F9763802AC8D472A1FFBF6A867B33D /* JSONModel.m */; }; + E3BB92FE44D2DFF2132BC27C70298513 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3693DA67EFBAB281959594641A587872 /* UIKit.framework */; }; + E3C47E114E924D2F331F9A3F122AEE5C /* JSONModel+networking.h in Headers */ = {isa = PBXBuildFile; fileRef = 66D6A876FB337C3A5AEC09F74362A022 /* JSONModel+networking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4AC26FB387427964538FA5FCEA4A8A3 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F043DBEAB75100EC409BEDF3E58A8BC0 /* CoreGraphics.framework */; }; + E57312010AFB591EE37870F65E651EA6 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 048638E84A58D781817B05B69F5DB76D /* MJRefreshNormalHeader.m */; }; + E5CD5C797956697DDCC98A3EAC7E99E3 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 805D42FFE0EC9DD228E5EB6C75F8E9AA /* AFURLRequestSerialization.m */; }; + E630FECF3706C1EC8EE717263D1B2FF5 /* SDWebImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B118355C6E3369C778E749125C4F8AA /* SDWebImageCoder.m */; }; + E72EDE323AC9F92EC8A00A93AC186093 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 463DAC3C5F6EF0A1CB5D363A99DD84AC /* NSArray+MASAdditions.m */; }; + E802560B425A04296159872675948D29 /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = CF40AB4FCB400AB1D8CC624FF95B74E4 /* IQKeyboardReturnKeyHandler.m */; }; + E80DB5D9B2D35085282DF057BB540AFE /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 25A4B40FC26E491D355F864AEA121E73 /* MJRefreshBackFooter.m */; }; + E82DEF0A70F9ABCC6EAA900B9BA3AB16 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = B946CD9D828545C56B16DD0BAE1A4357 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EA0E9DCCA7F7A4B3B582E34AC137C2A3 /* SocketTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 852AB63551AC52D340F98C97A94D9FD6 /* SocketTypes.swift */; }; + EA23726556D213DB485BD1791C7164CF /* AFNetworkActivityIndicatorManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E6E813A4FEA7EAA36447924B0005A89 /* AFNetworkActivityIndicatorManager.m */; }; + EB0A377753BF36E5018176EF7A4AF774 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D5D3928FE1E7CA0D8E3A946574DC2F0 /* UIImage+GIF.m */; }; + EBEB72F80DCD10DEB82BF5F856D467FD /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C2F72B6BC0D51790962077A8C13EC05 /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ECBA1F4D70AF4600563FD39112D5997B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + ED5DD9E7F5A2A78F8A992072C079515F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70BC8DC64FAC8894D27E1964CC8CD209 /* QuartzCore.framework */; }; + EDE0C584CA148C197740CCB795E2120A /* SDWebImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 07CCB23292D6E83E10E681E65611A521 /* SDWebImageCodersManager.m */; }; + EEDE8B3B8AF5A20C039DB6F1DD25BCC6 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E18D0C002A9B8B1BFB6F6FD63278467 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF09BB047F4238F812F93E5FA7F31E0E /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = B391B9DE52D6245F6A0358F52F1E44B0 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F03896D18D58C5B06D4485978A8E2660 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F043DBEAB75100EC409BEDF3E58A8BC0 /* CoreGraphics.framework */; }; + F1199E40BF416FC1ACA2DDCD7B2E23A1 /* UIImage+AFNetworking.h in Headers */ = {isa = PBXBuildFile; fileRef = DBF35F229F62DAFB1E3D7FA0942B6D8A /* UIImage+AFNetworking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F11FAB91014130EE233A3429439D38D7 /* FMDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = C53B6F23513590B1B35519E049C3AD72 /* FMDatabase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F1560689B79F19D606B9EA5205BA7C80 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 897350FBCDF747BE59B857BB5740214A /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F26CD9A1DF452688BF3C98BBA9090F92 /* AFURLRequestSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 88FA75A73C1252600B984CF5DE17B8CE /* AFURLRequestSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2DBE008FD27BC11699DB76F11074A94 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4105F4E767CE55C31AE0E2A6D969A996 /* NSData+ImageContentType.m */; }; + F2EFDC17C03449A9A15E26464453103F /* NJKWebViewProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = BB6C3ABE582E083225418DE0C8C70C57 /* NJKWebViewProgress.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F30950E63F3D8D6C07FFB50C5971116E /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = B01D2A082D8362F5E95027DBAE3D1DFD /* AFSecurityPolicy.m */; }; + F35840AED8A0E374320B77F3E86D1FA3 /* TTTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 98D89B37F7C92F976B671CF4941E8120 /* TTTAttributedLabel.m */; }; + F4A57F7C1F8184A6DDEABB07FA6D7083 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 49FC9B7F0D1967826227DEFA8D9EA924 /* NSBundle+MJRefresh.m */; }; + F4B3E44D5D2F6508BC1BB35A9FBDEC70 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = FF6734BB50A15C4D259D3C14C0F70697 /* View+MASAdditions.m */; }; + F4FF072DD1C28A7736B8D1DDC839E424 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */; }; + F54879EEAE223E90AC9674197E6B1ADE /* AFImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8574AA1B5AD318AF02BC4D3B68F81E58 /* AFImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F68EA720B0ED1BF96CEBF07977A1C0A2 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = FC45B739819A1904D554E79520E207DA /* MJRefreshComponent.m */; }; + F82FA69799081C549A687B2B72DB7ECA /* SocketIOStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3859DA0DF93E825130ADB78D0E66166E /* SocketIOStatus.swift */; }; + FA1282B06560C854E5FD9022B8429FFC /* SDWebImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AF292596176CE1B357AB1A3CC5FC2AA6 /* SDWebImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FB9C6242B11049E2F1062D04565E568D /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 214889649505797427D153AFE63862E7 /* UIScrollView+MJExtension.m */; }; + FBE6911E3E07AED7313FC851407687B7 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = BB8ED24222958BA93B420822394B77BC /* UIImage+ForceDecode.m */; }; + FD31283E2A43955C5BA6FA9008EE8D7C /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 64EB649102BB6022F6927FBD8BF10E3B /* MJRefreshGifHeader.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0624AA154FDA56AB497466DC03BB55B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5CC70589280C1B49544760FFD838E2A4; - remoteInfo = TTTAttributedLabel; - }; - 07FD3E22A9DD4A1B99981D75716BD3AE /* PBXContainerItemProxy */ = { + 01E07FDE67675FAB1B4CDDB0CFB15A5A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = E14A62900910444707A5504D25EC98DC; remoteInfo = MJRefresh; }; - 10C19AB1817BEF22435DC5055DE4F0F4 /* PBXContainerItemProxy */ = { + 02AD085923257926101043ECBDA0B642 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = D52144DE9D7255DE912490FF5A806573; + remoteInfo = Masonry; + }; + 0CB6BCAA410A24DDCAB7891977A91996 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 251BAD17812F7EBF6532EACF66F941C3; + remoteInfo = FMDB; + }; + 174E6C2171B05DD68BDA9FF3114D98FD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 43F697FCA8E9557F575EBF7DC785AFD4; + remoteInfo = YTKKeyValueStore; + }; + 1E4EF142FFB1473CAEC44BD562F17C8F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 251BAD17812F7EBF6532EACF66F941C3; + remoteInfo = FMDB; + }; + 42C98B0B09DABB12204DFF9FDEFE2BEB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 6B1714E816AE794962516E2ECBB40A5A; remoteInfo = MBProgressHUD; }; - 12C08506A8A26019CD1B7D866E2D9AE0 /* PBXContainerItemProxy */ = { + 476568165F539EF85B0F5D26800B1E50 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E16D87E1F5CFFF8F722CF5A492B046B9; + remoteGlobalIDString = 203E2ACFC533A5A3C189DF6DCDF9A3CA; remoteInfo = Toast; }; - 14399779F1E76914D37F4F6C523906BB /* PBXContainerItemProxy */ = { + 565145C78EF9F332BB48DEDC973C1DA9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = DC3688684BF42A20A8998F31DDA51A49; - remoteInfo = JSONModel; + remoteGlobalIDString = D55833EC3DE9EBD9B329CAEB983D5A9D; + remoteInfo = IQKeyboardManager; }; - 23CDBC7F0F0884CFA75FBBEF10D3B03D /* PBXContainerItemProxy */ = { + 7CEAB308D3E048B456470272A1F49E79 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = F4160500DCEA3DA3E93FBA579E88CA0A; remoteInfo = AFNetworking; }; - 43E5D6A14DFB2BB82D0E18797207D59C /* PBXContainerItemProxy */ = { + 88165B3DC6F1DD9D85F485FF523A7B7F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 95BEAA384CB15B77BDF7ACD211017BBF; - remoteInfo = "UITableView+FDTemplateLayoutCell"; - }; - 448C316EBC342AEAB86CA07E51B7CCEB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = BC65E926DB84B0281E512834BE47D80A; - remoteInfo = SDWebImage; - }; - 79CCAC30E08937B11F101E7A789BF6A9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 37E3F76B9AB64BE59F26C42C0DB02B51; - remoteInfo = SocketRocket; + remoteGlobalIDString = E0D1006C742EBDDD3F2BF40A564ACBCB; + remoteInfo = Starscream; }; 8A906A446E3695C9C80C35AF0D8D128A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -390,444 +432,520 @@ remoteGlobalIDString = 251BAD17812F7EBF6532EACF66F941C3; remoteInfo = FMDB; }; - 90FC23568A2780CCB2D594FAE3F3B4B3 /* PBXContainerItemProxy */ = { + 96033F3DE39CB124CE5C342CDB6D3638 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6B8D192C8CBB4BF55A7F9B79C12280DB; + remoteInfo = SocketRocket; + }; + 9C3EF21F4556D671BA3BE7400A55E897 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 826EFF975442065A54A0B2D3103EE6A4; remoteInfo = NJKWebViewProgress; }; - C250CB5A26266169FD4E1B35C6267674 /* PBXContainerItemProxy */ = { + AC37C85FA38ECD5BF75ADA47577069D8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D52144DE9D7255DE912490FF5A806573; - remoteInfo = Masonry; + remoteGlobalIDString = DC3688684BF42A20A8998F31DDA51A49; + remoteInfo = JSONModel; }; - C3C1D0DAF595497F4E217F601FF28DE8 /* PBXContainerItemProxy */ = { + BC9806EDCB11E0B99C6381C9C331547D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 251BAD17812F7EBF6532EACF66F941C3; - remoteInfo = FMDB; + remoteGlobalIDString = 1EB527CCE1B0F3D64088AFF319F1FBA4; + remoteInfo = TTTAttributedLabel; }; - D16DEB882FB3ACDF2B1D59F84EB72924 /* PBXContainerItemProxy */ = { + C76985D2A0135055E2ABBA833FC64D06 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = E0D1006C742EBDDD3F2BF40A564ACBCB; + remoteInfo = Starscream; + }; + D4BE66B430547E25A22F38975F6DA9C5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = CCA9C33B127D6C859A3F8AFBEFCBABF0; remoteInfo = LKDBHelper; }; - D55D2D92CB19AF61F08790B384A513E0 /* PBXContainerItemProxy */ = { + DA15677B5BEEF2B52CC8D1DB79DA0071 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D55833EC3DE9EBD9B329CAEB983D5A9D; - remoteInfo = IQKeyboardManager; + remoteGlobalIDString = 3578E512F8C94E9B49F88CAA98690402; + remoteInfo = "Socket.IO-Client-Swift"; }; - F9DD1D0D243D5BA994B993C063F16F85 /* PBXContainerItemProxy */ = { + DED752E9FC0AA5300D528DB0E9124181 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = CF1D6BC4AC3FC60A30FB00811CF01999; - remoteInfo = YTKKeyValueStore; + remoteGlobalIDString = D90CADD9FA47277BDDDE85CFC0082CA0; + remoteInfo = SDWebImage; }; - FDFB12CC87933DAABA8E177FE069CD99 /* PBXContainerItemProxy */ = { + F3C75840DD6E63711A0AEAEDF330E105 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 251BAD17812F7EBF6532EACF66F941C3; - remoteInfo = FMDB; + remoteGlobalIDString = 57DFE3ED684FE796F4717C7ABAE517F8; + remoteInfo = "UITableView+FDTemplateLayoutCell"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0398DAF58BE8B2C600A504E373600B1A /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackFooter.m; path = MJRefresh/Base/MJRefreshBackFooter.m; sourceTree = ""; }; - 08E5FE69433133C490A05E788EB152E8 /* SDWebImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageGIFCoder.m; path = SDWebImage/SDWebImageGIFCoder.m; sourceTree = ""; }; - 09810BACD97137F26F4754BC992B0AA0 /* IQTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTextView.m; path = IQKeyboardManager/IQTextView/IQTextView.m; sourceTree = ""; }; - 09C6DCB28ECDE03D4ECA2F31475F95AF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0A2A14D56BC061060400295FC21A0D56 /* FMDatabasePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabasePool.m; path = src/fmdb/FMDatabasePool.m; sourceTree = ""; }; - 0A605A9C44A718DE8A45059C9828A9F0 /* MBProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.xcconfig; sourceTree = ""; }; - 0ABED0039D2F20276FEA3153C100C8EA /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - 0B43D1D56644CC2A129FBB357B026F00 /* JSONModel+networking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "JSONModel+networking.m"; path = "JSONModel/JSONModelNetworking/JSONModel+networking.m"; sourceTree = ""; }; - 0D01693FF69A913D36FFA9A8EC1C1D93 /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; }; - 0D6854C9307CDCC712B55D7EC927935E /* Masonry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Masonry.framework; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0D812A41395AD0523CBC5D8963604A69 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; - 0DA743D9F60E293701E4F1E9F04891A6 /* FMDatabasePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabasePool.h; path = src/fmdb/FMDatabasePool.h; sourceTree = ""; }; - 0E5D86CCB42BDD31167BAAA320D2297A /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQKeyboardManager.bundle; path = IQKeyboardManager/Resources/IQKeyboardManager.bundle; sourceTree = ""; }; - 0F2AE4A60765DF1A0A41DE1A3935F1D4 /* UIView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MJExtension.h"; path = "MJRefresh/UIView+MJExtension.h"; sourceTree = ""; }; - 1129CE2BF72E82EC12E70344519DB533 /* UITableView+FDTemplateLayoutCellDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+FDTemplateLayoutCellDebug.m"; path = "Classes/UITableView+FDTemplateLayoutCellDebug.m"; sourceTree = ""; }; - 11B559F8C10A420C414C457D38505A02 /* MJRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJRefresh-dummy.m"; sourceTree = ""; }; - 128714F26358AB64EBF20321538BB9E8 /* FMDatabaseQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseQueue.m; path = src/fmdb/FMDatabaseQueue.m; sourceTree = ""; }; - 12EC34C8D078C44D8BA1A18B5017ADD9 /* TTTAttributedLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTTAttributedLabel-umbrella.h"; sourceTree = ""; }; - 13410BDA0941AC0B1382EFB64C8098AE /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackNormalFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h; sourceTree = ""; }; - 136A22223B193531C622CF061DC7AAB4 /* FMResultSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMResultSet.m; path = src/fmdb/FMResultSet.m; sourceTree = ""; }; - 144D01D28CAD550DC15B9FEA3275EF9B /* SecurityEnvSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SecurityEnvSDK.framework; path = thirdparties/SecurityEnvSDK.framework; sourceTree = ""; }; - 167E9F1BB5C566ED575F9AFA45711349 /* FMDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FMDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 18739420269C3D2C4EE0ACA8031B5D8A /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIViewController+Additions.h"; path = "IQKeyboardManager/Categories/IQUIViewController+Additions.h"; sourceTree = ""; }; - 190821EE03B1A6308F75163E7C398205 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; - 19FCBE0EEEBEAA24D79B250A5866E949 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; - 1A12FEC4AC04980F619172CCE478A56E /* UIView+Toast.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+Toast.h"; path = "Toast/UIView+Toast.h"; sourceTree = ""; }; - 1AF05A605CD2C0B9C09DC4DB2D55DDED /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; - 1B3ACA6ACCDCAA17E0E866CCDFAE3007 /* IQToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQToolbar.m; path = IQKeyboardManager/IQToolbar/IQToolbar.m; sourceTree = ""; }; - 1BD844FF2EB77928C3F4954BB4070B3C /* SDWebImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoder.h; path = SDWebImage/SDWebImageCoder.h; sourceTree = ""; }; - 1C4E3C0E3F1B4968E82E901DBFE63970 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; - 1C8FCB66D43C7435A706DE7458C249FD /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; - 1CBD9EDCE583C2D898104B9EDA4E32A7 /* UMAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMAnalytics.framework; sourceTree = ""; }; - 1D8E30B8D56773C01F2C4431609211FF /* UTDID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UTDID.framework; path = thirdparties/UTDID.framework; sourceTree = ""; }; - 1DB7026C750DB559A03CDBE2742DC1B3 /* Pods_GIGA.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_GIGA.framework; path = "Pods-GIGA.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F23D9CEB0F145EEA952FEC9CF58C467 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - 201107C26A4A8E4C7AF38062FB36DAC9 /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstants.h; path = IQKeyboardManager/Constants/IQKeyboardManagerConstants.h; sourceTree = ""; }; - 20537A66C31276B9C55B927BE953BCE0 /* LKDBHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKDBHelper.h; path = LKDBHelper/Helper/LKDBHelper.h; sourceTree = ""; }; - 20B82B3673CA958EA419C7F2C3921FD2 /* SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = SocketRocket/SRWebSocket.h; sourceTree = ""; }; + 000DFBF02B432D3298058B56ED47BA1B /* UTDID.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UTDID.framework; path = thirdparties/UTDID.framework; sourceTree = ""; }; + 002CC32FEB8FB1D1B4D4BA9D7AE0CB41 /* SocketEngineClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketEngineClient.swift; path = Source/SocketIO/Engine/SocketEngineClient.swift; sourceTree = ""; }; + 00CC387D226EFBC6389FAA62F3DD873A /* FMDatabasePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabasePool.m; path = src/fmdb/FMDatabasePool.m; sourceTree = ""; }; + 00DBB0CB01217AA64958D2E4F6059B2B /* LKDBUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKDBUtils.h; path = LKDBHelper/Helper/LKDBUtils.h; sourceTree = ""; }; + 027B44E48FB40AD9D0DC25B70D6AE8CE /* SocketAnyEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketAnyEvent.swift; path = Source/SocketIO/Client/SocketAnyEvent.swift; sourceTree = ""; }; + 029A3331019368C8C30B8DA9778E0794 /* MJRefresh.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJRefresh.framework; path = MJRefresh.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 03EF23265306A2A5CFD07B28F6BC0D66 /* SSLSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLSecurity.swift; path = Sources/SSLSecurity.swift; sourceTree = ""; }; + 042DC3BCC2842104D6A45CA51DC3F42C /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; + 044E5621EF88BE1E4C8B35094500FCA8 /* TTTAttributedLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTTAttributedLabel-umbrella.h"; sourceTree = ""; }; + 048638E84A58D781817B05B69F5DB76D /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; }; + 053338AFC5DFA5DC334E688DA16499C6 /* FMDB.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FMDB.xcconfig; sourceTree = ""; }; + 05657BFF7C0A29CF6F1BE61DB6523EC4 /* WXApiObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApiObject.h; path = WechatSDK1.8.2/WXApiObject.h; sourceTree = ""; }; + 059F55EFCCF65A29688CF615E5AD5415 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; + 06F7DF71211917C6613F190B1D9CEA2B /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking.framework; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 07A743B083B30311B1DDC3865184A2E6 /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; + 07BAC4DCA1D385E6719FCD0A2C3518E8 /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+Hierarchy.h"; path = "IQKeyboardManager/Categories/IQUIView+Hierarchy.h"; sourceTree = ""; }; + 07CCB23292D6E83E10E681E65611A521 /* SDWebImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCodersManager.m; path = SDWebImage/SDWebImageCodersManager.m; sourceTree = ""; }; + 0B2F88F5CE468EE56C4A34CF3433FFE0 /* SocketRocket.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SocketRocket.modulemap; sourceTree = ""; }; + 0B853C173AC47459374FA5127503AA4D /* JPUSHService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JPUSHService.h; sourceTree = ""; }; + 0D16FD952562C34388EC43F2A7733B27 /* MJRefresh-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-umbrella.h"; sourceTree = ""; }; + 0EE88FA017BECDD56594C950358507E0 /* IQBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQBarButtonItem.h; path = IQKeyboardManager/IQToolbar/IQBarButtonItem.h; sourceTree = ""; }; + 0F329A9EA016DA0D20BA2C5C7D0DAC79 /* SocketIO.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SocketIO.framework; path = "Socket.IO-Client-Swift.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 10209B83220731CD89F3BE7CE9C254D0 /* NJKWebViewProgress-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NJKWebViewProgress-umbrella.h"; sourceTree = ""; }; + 10EDF99232E824A4129018791B729BC7 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + 118814FC7D9B5A7CF1BF99F325AF8488 /* JSONValueTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONValueTransformer.m; path = JSONModel/JSONModelTransformations/JSONValueTransformer.m; sourceTree = ""; }; + 11CBDFE3700AD26E36AFB9E669E902DD /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; + 12BE137618AD905F6C08A0688A5AEC0F /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + 1501D5687E1AF56AAF3E46B413F8A46B /* Socket.IO-Client-Swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Socket.IO-Client-Swift-dummy.m"; sourceTree = ""; }; + 1512D35F866701255C740BB8D89CB037 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 17CD040301E2941CF1307C11668F0335 /* IQPreviousNextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQPreviousNextView.m; path = IQKeyboardManager/IQToolbar/IQPreviousNextView.m; sourceTree = ""; }; + 18230792D7301ED554D8EBE3D27C83C6 /* YTKKeyValueStore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YTKKeyValueStore.xcconfig; sourceTree = ""; }; + 18DDE12559A163C7C94F4FE3A82C3212 /* UITableView+FDKeyedHeightCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+FDKeyedHeightCache.h"; path = "Classes/UITableView+FDKeyedHeightCache.h"; sourceTree = ""; }; + 1942BB9A9B0208E8A598BB2F1563A2D0 /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; + 1B118355C6E3369C778E749125C4F8AA /* SDWebImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoder.m; path = SDWebImage/SDWebImageCoder.m; sourceTree = ""; }; + 1B2009C43A73788FC750D0B1C40ECA60 /* SDWebImageImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageImageIOCoder.h; path = SDWebImage/SDWebImageImageIOCoder.h; sourceTree = ""; }; + 1B4BDE950FE4B829BD4E2D8E0B86A002 /* JSONHTTPClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONHTTPClient.m; path = JSONModel/JSONModelNetworking/JSONHTTPClient.m; sourceTree = ""; }; + 1CA5AAF13D2E09670AF9CBA0B18BF39F /* Socket.IO-Client-Swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Socket.IO-Client-Swift-umbrella.h"; sourceTree = ""; }; + 1D11F0C588A7F5B9D6536F3DFDEFD786 /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; + 206777951591DDC2438D5F454A71CB8A /* IQKeyboardManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.xcconfig; sourceTree = ""; }; + 214889649505797427D153AFE63862E7 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJExtension.m"; path = "MJRefresh/UIScrollView+MJExtension.m"; sourceTree = ""; }; 218B6E61733A5B9138CB4D0815133580 /* Pods-GIGA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GIGA.debug.xcconfig"; sourceTree = ""; }; - 21D3B009BFC3E1090BAA9060143EAC16 /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; - 21F2382C2A65EA556D25A49B6D6535FC /* Masonry.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Masonry.modulemap; sourceTree = ""; }; - 223CC88B609D08C4EA1EC854A8D73AD1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 22517B11B58DA83A67CA898044996C48 /* UITableView+FDTemplateLayoutCell-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UITableView+FDTemplateLayoutCell-umbrella.h"; sourceTree = ""; }; - 2312E64F77FC628042C95F6F42AC9204 /* MJRefresh.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJRefresh.framework; path = MJRefresh.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2371B715BAE7B94DEDE98106F4ADEFDC /* JSONModelLib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelLib.h; path = JSONModel/JSONModelLib.h; sourceTree = ""; }; - 23810A789FDEE049028B453DDB1B5739 /* JSONValueTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONValueTransformer.m; path = JSONModel/JSONModelTransformations/JSONValueTransformer.m; sourceTree = ""; }; - 23CF3C3B336872BE627191D587A2F784 /* YTKKeyValueStore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YTKKeyValueStore-umbrella.h"; sourceTree = ""; }; - 24D4C804AB6F0E6DDCF8B55ADFC4D8D6 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoGifFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h; sourceTree = ""; }; - 26352B14F20CECF1C5E46B8BB0821EC0 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 26D2F25DB89878A577283A85A9771121 /* NSObject+LKDBHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+LKDBHelper.h"; path = "LKDBHelper/Helper/NSObject+LKDBHelper.h"; sourceTree = ""; }; - 26EA839B483358EFD4DD98F022DF89F5 /* JSONModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONModel.m; path = JSONModel/JSONModel/JSONModel.m; sourceTree = ""; }; - 2774326B60C328374835C7204E3258BB /* LKDB+Mapping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "LKDB+Mapping.h"; path = "LKDBHelper/Helper/LKDB+Mapping.h"; sourceTree = ""; }; - 28C9FD05636A9DD140FC5CF4A2DE6AA6 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - 2974DB06BB024359AD4E9D2000597D36 /* UITableView+FDTemplateLayoutCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+FDTemplateLayoutCell.m"; path = "Classes/UITableView+FDTemplateLayoutCell.m"; sourceTree = ""; }; - 2AD44F79BFF5ACB1AEBA9E98380AE9AD /* MJRefresh.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MJRefresh.bundle; path = MJRefresh/MJRefresh.bundle; sourceTree = ""; }; - 2AD4DBAC3BDC47AAD73A71ABC44B7E2A /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; - 2AE40C42B298EF2078BE77D91816800C /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; - 2AF51CA7545F890601168CFECF2A8BFB /* SocketRocket-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-umbrella.h"; sourceTree = ""; }; - 2C5FBC24791EAE0728C65D6F9B9912B2 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 2CB785BAFD8B89858D78ECDC291AE3EF /* JSONModel+networking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "JSONModel+networking.h"; path = "JSONModel/JSONModelNetworking/JSONModel+networking.h"; sourceTree = ""; }; - 2D7695CACB080C347432CF89DD0CB160 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2D97AB96A3AD0844F0E9A0A6368F1BE0 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - 2DC5F73CA7ED6B8255495282877B1CDF /* LKDBHelper.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = LKDBHelper.modulemap; sourceTree = ""; }; - 2E03D26FF38E5DEA11D31A78840F818A /* JSONModel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JSONModel-dummy.m"; sourceTree = ""; }; - 2EC76A5399DF4A8FF15D29CAA2CC4537 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - 2F603D3FC35FE557B8C5E6EBCB9120C5 /* YTKKeyValueStore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YTKKeyValueStore-dummy.m"; sourceTree = ""; }; - 30355D9B3DCCCD29F9ACCE3C935B07B9 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 30ED8ED848EB8DEF2039EE979EE3016B /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 326D9D7C8343049CC1BD9D2FDB760C14 /* AFCompatibilityMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFCompatibilityMacros.h; path = AFNetworking/AFCompatibilityMacros.h; sourceTree = ""; }; - 338A91177F22F0C0B7E9F2617DB6D30C /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/UIImage+ForceDecode.m"; sourceTree = ""; }; - 342C32AD5BF61779D426BDA9F82DEDE5 /* JSONModel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = JSONModel.framework; path = JSONModel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 34786D8E1B7A9E5618960AB31B260424 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - 34793A0BF14919D4B2F3731DCA5782E1 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MJRefresh.m"; path = "MJRefresh/NSBundle+MJRefresh.m"; sourceTree = ""; }; - 348A21F3B91FEC6FF1536DF108960444 /* libjcore-ios-1.2.2.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = "libjcore-ios-1.2.2.a"; sourceTree = ""; }; - 3590C8A8B61E435CEE0D6D946D21CBE7 /* NSObject+LKModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+LKModel.h"; path = "LKDBHelper/Helper/NSObject+LKModel.h"; sourceTree = ""; }; - 359462AAEF1BA3B0A3D0F5F8F20597D6 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackStateFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m; sourceTree = ""; }; - 35EAE74E5132A23FB8A5DEAD9F2ED8FE /* UITableView+FDTemplateLayoutCell.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "UITableView+FDTemplateLayoutCell.xcconfig"; sourceTree = ""; }; - 364ED876726D73807338B4A2ECF8B6B0 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoNormalFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m; sourceTree = ""; }; - 3832D0EA7E186C284614A162D744B00A /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - 384F6E2B0FAC4209C35BAEB1F919D66D /* NJKWebViewProgress-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NJKWebViewProgress-dummy.m"; sourceTree = ""; }; - 399D564FB809301AF166719C68708229 /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; - 3BEEC43D6F5FEEC5F22EF9E0972329DF /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - 3C2FA9E010EEA6319AA9CB2D4EB45645 /* MJRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshComponent.h; path = MJRefresh/Base/MJRefreshComponent.h; sourceTree = ""; }; - 3C8496BDF9FDC70F620BC1A1C2161471 /* SDWebImageImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageImageIOCoder.h; path = SDWebImage/SDWebImageImageIOCoder.h; sourceTree = ""; }; - 3DB9DE3DCEAE65EBE74B327A173003A8 /* SDWebImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCodersManager.h; path = SDWebImage/SDWebImageCodersManager.h; sourceTree = ""; }; - 3E320CFF5A26D0B7EF5E7CAAAED1436F /* UITableView+FDTemplateLayoutCell-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UITableView+FDTemplateLayoutCell-prefix.pch"; sourceTree = ""; }; - 3E3D817354B9C74183C0CFB0E3992AE8 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstantsInternal.h; path = IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h; sourceTree = ""; }; - 3E657879A95ECD51B70B71C0752EAFEA /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; - 3EF64E3326F777690080488B4CEEF3B3 /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; }; - 3EF6A9271273889CACA3DFD0AC7D1EF5 /* JSONModelError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONModelError.m; path = JSONModel/JSONModel/JSONModelError.m; sourceTree = ""; }; - 40575EFD1F8F6E701DA182E683BEC2FA /* SDWebImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoder.m; path = SDWebImage/SDWebImageCoder.m; sourceTree = ""; }; - 420515E1248819A97F4A79591B9042F0 /* MJRefreshComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshComponent.m; path = MJRefresh/Base/MJRefreshComponent.m; sourceTree = ""; }; - 429FDD636F3939DEDA62FCB9CEA3F38D /* NSImage+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+WebCache.m"; path = "SDWebImage/NSImage+WebCache.m"; sourceTree = ""; }; - 42D89FE909F52B3C3F1035BE3A360A60 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - 42EC7B58D17C0B661489B46B9964BB39 /* IQPreviousNextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQPreviousNextView.h; path = IQKeyboardManager/IQToolbar/IQPreviousNextView.h; sourceTree = ""; }; + 21D29A4125F838745482898EE34D680D /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; + 22776590D888620F659DDF182BE8BEFC /* TTTAttributedLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TTTAttributedLabel.framework; path = TTTAttributedLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 22A12862A28052673208D864DF5F8671 /* SocketEngine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketEngine.swift; path = Source/SocketIO/Engine/SocketEngine.swift; sourceTree = ""; }; + 2347C099D7F33A036587B18EE3CEFEB6 /* YTKKeyValueStore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = YTKKeyValueStore.modulemap; sourceTree = ""; }; + 237BE841F4D7796F3834F60938E612E9 /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; + 23AAFF4BE17FB72260148442F598E055 /* FMDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FMDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 23E3DFBE5E063BE6E4D93A3E77F032ED /* NJKWebViewProgress.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = NJKWebViewProgress.framework; path = NJKWebViewProgress.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2431F4B5AE230C938093F4ACC541DF9C /* WebSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocket.swift; path = Sources/WebSocket.swift; sourceTree = ""; }; + 243FE71724C73A1404F864718F47B574 /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUITextFieldView+Additions.h"; path = "IQKeyboardManager/Categories/IQUITextFieldView+Additions.h"; sourceTree = ""; }; + 2493EEFA5275F1BFBB2AF35F11BED82C /* Masonry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Masonry.framework; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 24B2D873DD726E1CB92080AB5A4C458F /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; + 250AC017E1404E43770F53CAC6280DC7 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + 25972EA3E10BED458FF978D175A9C263 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/SDImageCacheConfig.m; sourceTree = ""; }; + 25A4B40FC26E491D355F864AEA121E73 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackFooter.m; path = MJRefresh/Base/MJRefreshBackFooter.m; sourceTree = ""; }; + 26168530D466303D1859051CADEAF5EB /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 266860A64CA3E38126FD443422246252 /* YTKKeyValueStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YTKKeyValueStore.m; path = YTKKeyValueStore/YTKKeyValueStore.m; sourceTree = ""; }; + 270472B1F4EA9863212F85E4EAB5B497 /* Starscream-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-umbrella.h"; sourceTree = ""; }; + 27481864BFB4AD24155BCC2551337DB6 /* NJKWebViewProgress-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NJKWebViewProgress-dummy.m"; sourceTree = ""; }; + 296D773846653A12BF592FA3AEE99EE7 /* IQTextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTextView.m; path = IQKeyboardManager/IQTextView/IQTextView.m; sourceTree = ""; }; + 2B6CE4C2E0F43E8B914EC3D2DA1985F3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2C765CC91B74812227DCE13319608707 /* LKDBHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKDBHelper.m; path = LKDBHelper/Helper/LKDBHelper.m; sourceTree = ""; }; + 2CDD19D40A0561AC2EEC7572402D3D1F /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTitleBarButtonItem.h; path = IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h; sourceTree = ""; }; + 2E0EDFAA630F61D5988162BCAB78B5FA /* NSObject+LKDBHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+LKDBHelper.h"; path = "LKDBHelper/Helper/NSObject+LKDBHelper.h"; sourceTree = ""; }; + 2E18D0C002A9B8B1BFB6F6FD63278467 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + 2E3AF8E64808C4D50ED1EE668DCDFBBA /* SocketRocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-prefix.pch"; sourceTree = ""; }; + 2E917B75DE00F9E5F318667A4D3CA7DB /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; + 2FB887DABDFF1B6A7789155364DD4D45 /* Toast-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-prefix.pch"; sourceTree = ""; }; + 2FD77768BDABBF2BB48928067588B12C /* FMResultSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMResultSet.m; path = src/fmdb/FMResultSet.m; sourceTree = ""; }; + 316C099F7EBA73314DFCC094D555F83B /* UIView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MJExtension.h"; path = "MJRefresh/UIView+MJExtension.h"; sourceTree = ""; }; + 32C89BF4798AB4ED10E9969C07146751 /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; + 3484FF439E2DBB5367ED00A1BCD06905 /* IQKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardManager.m; path = IQKeyboardManager/IQKeyboardManager.m; sourceTree = ""; }; + 363026D36FA7E4000010BC1B5CD2B8E3 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; + 367D41745AB1AEBE8A1FFB6DB552ECEB /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; + 3693DA67EFBAB281959594641A587872 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 36C94757ECFB0CDBFD720B0C11F08BC1 /* MBProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.xcconfig; sourceTree = ""; }; + 36EBA45514DE97C348F33C685F5897DD /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; + 3707B0F6D5D2EB50CB0191D8FC9A3E26 /* IQUIScrollView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIScrollView+Additions.h"; path = "IQKeyboardManager/Categories/IQUIScrollView+Additions.h"; sourceTree = ""; }; + 37359E3E690C6350F9602BFFDBB04147 /* UIImageView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+AFNetworking.h"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.h"; sourceTree = ""; }; + 3761E6FC8FB2C049CFB42B5DF219C572 /* SocketRocket.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.xcconfig; sourceTree = ""; }; + 384EDBAD900277643587B535751AFC42 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; + 3859DA0DF93E825130ADB78D0E66166E /* SocketIOStatus.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketIOStatus.swift; path = Source/SocketIO/Client/SocketIOStatus.swift; sourceTree = ""; }; + 3AB36856959C85924D590AFD2695D2B6 /* MJRefresh.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MJRefresh.bundle; path = MJRefresh/MJRefresh.bundle; sourceTree = ""; }; + 3D3288F586F676906211064535ACEA59 /* SocketAckManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketAckManager.swift; path = Source/SocketIO/Ack/SocketAckManager.swift; sourceTree = ""; }; + 3DCB0BEBBAC1E47DDBB977778143CC25 /* IQKeyboardManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManager-dummy.m"; sourceTree = ""; }; + 3DF7CF70E97B77C95449324D577D2DE5 /* UITableView+FDIndexPathHeightCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+FDIndexPathHeightCache.m"; path = "Classes/UITableView+FDIndexPathHeightCache.m"; sourceTree = ""; }; + 3E2FB8AE972E929400C566BC03FB6468 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 3F9C38A75057CBD015D16FAA76005ECB /* FMDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FMDB.framework; path = FMDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3FC3B9F0418FF6AD9307259ADB289A07 /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; + 404662E4EA47719280C225A3F07A8A6A /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; + 40995236A773C9D30F835E44168085B1 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; + 4105F4E767CE55C31AE0E2A6D969A996 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + 419688D30BFAF6943FBE6304B83E2FC3 /* YTKKeyValueStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YTKKeyValueStore.h; path = YTKKeyValueStore/YTKKeyValueStore.h; sourceTree = ""; }; + 4253E7F7448B089D6F4CDECD149486CB /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; + 42D7E898DE58FC64D5A1CAC1E601DEF1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 4333DE13F7B28D62D7251611E26C7D1F /* Pods-GIGA-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GIGA-umbrella.h"; sourceTree = ""; }; - 455E5ACCA97D1568DD6789BE6F2DC982 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; - 4599E0AD06AD0BA1330C3AA05D64C91E /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; - 46216AC6D1DE54C7D1A75F0B8C0093DB /* UIProgressView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIProgressView+AFNetworking.m"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.m"; sourceTree = ""; }; - 4738089B8361F3D3AB1BCED704498464 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 47C190CC048C31F66701A5CFE68AFC16 /* YTKKeyValueStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YTKKeyValueStore.h; path = YTKKeyValueStore/YTKKeyValueStore.h; sourceTree = ""; }; - 47FC8BC593D3C4A9BCFAAB1AD76AC13D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 480EBDA225E852CEA4E1CC2E346CE9E5 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/UIView+WebCache.m"; sourceTree = ""; }; - 493ED01D268951EFE8437422CE1A5444 /* UIView+Toast.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+Toast.m"; path = "Toast/UIView+Toast.m"; sourceTree = ""; }; + 435EA74A816C71AE5579FF600A20AF60 /* LKDBHelper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LKDBHelper-prefix.pch"; sourceTree = ""; }; + 45879D3B33AD86D331ACA84B5995B4D1 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoGifFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h; sourceTree = ""; }; + 463DAC3C5F6EF0A1CB5D363A99DD84AC /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; + 46F020E16865FD56CE53816167224099 /* UMAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMAnalytics.framework; sourceTree = ""; }; + 4819F4658B859A7A2B63B28F360E7FFD /* UITableView_FDTemplateLayoutCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = UITableView_FDTemplateLayoutCell.framework; path = "UITableView+FDTemplateLayoutCell.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4840A6FC48CB8E524D7A7D2DEF0DC1A0 /* NJKWebViewProgress.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NJKWebViewProgress.modulemap; sourceTree = ""; }; + 48886EB74B58FC75012D8AB06D74F958 /* LKDBHelper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LKDBHelper-dummy.m"; sourceTree = ""; }; + 4895A24A9EA8533671D64541ECA375BD /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/SDWebImageTransition.h; sourceTree = ""; }; + 498010BF30FB1D6FB301F7B3FD6CFC49 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackStateFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h; sourceTree = ""; }; + 49FC9B7F0D1967826227DEFA8D9EA924 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MJRefresh.m"; path = "MJRefresh/NSBundle+MJRefresh.m"; sourceTree = ""; }; + 4A22823A58050582ED95D1A767F76671 /* TTTAttributedLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTTAttributedLabel-prefix.pch"; sourceTree = ""; }; 4A26F8EC0D0C0834C08E37EF1C0D560D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4A34186A817DA32CDBD89AFBC93D1D11 /* UITableView+FDTemplateLayoutCell-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UITableView+FDTemplateLayoutCell-dummy.m"; sourceTree = ""; }; - 4AFDFD2D9A90BF4BB9DD861020532888 /* NJKWebViewProgress.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = NJKWebViewProgress.framework; path = NJKWebViewProgress.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4BA631C4B98CD911AA42A46B1DD32925 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; 4BB8C4AE22CA2904E7813EFEAFE8A067 /* Pods-GIGA.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-GIGA.modulemap"; sourceTree = ""; }; - 4CB26BDB578D1FBADD2EF6665F4C62CC /* FMDB.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FMDB.xcconfig; sourceTree = ""; }; - 4D575D477CF437DBE80BC55A1C483416 /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTitleBarButtonItem.h; path = IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h; sourceTree = ""; }; - 4DB1EFC99446AEF9EBFFE9033CB76382 /* MJRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJRefresh.modulemap; sourceTree = ""; }; - 4DBAF944AE9E107B09FA593C6772903D /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/SDWebImageTransition.h; sourceTree = ""; }; - 4E23A195A0FEDD4FE55DB45C9D24DB0D /* Masonry.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.xcconfig; sourceTree = ""; }; - 4EBFF93D40DE026DFDA03E2DD66D11AB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4FEE187FABEDD0249D0FC827637A740A /* JSONModel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JSONModel-umbrella.h"; sourceTree = ""; }; - 502C292A182DA48DE6398B906F782175 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; - 507DB5C53EF2AECDB84A4B07F77E623B /* NJKWebViewProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NJKWebViewProgressView.h; path = NJKWebViewProgress/NJKWebViewProgressView.h; sourceTree = ""; }; - 50E9C0028FD730D0FAFC7811E74C9A78 /* FMDB-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FMDB-umbrella.h"; sourceTree = ""; }; - 5103E14F2D6698E3B71FD14AD922ED2C /* Bugly.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Bugly.framework; sourceTree = ""; }; - 519F57253AF766AA287FE22C0358569E /* UITableView+FDTemplateLayoutCell.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "UITableView+FDTemplateLayoutCell.modulemap"; sourceTree = ""; }; - 51F8D03F64D8AE4C41D22BD22AAF1172 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - 522AF73450C4F25BD56BF7B9DD3331DD /* Toast-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-prefix.pch"; sourceTree = ""; }; - 52534734AD75CCA3BFE6C3B27D9FB9DE /* SDWebImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCodersManager.m; path = SDWebImage/SDWebImageCodersManager.m; sourceTree = ""; }; - 528094F23A810144F82ECBADEBE77807 /* FMDB-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FMDB-dummy.m"; sourceTree = ""; }; - 52C76AE5C4FEB2823CB9B6FA40CB9312 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; - 52F93BEAAD4FA805CB1F4C7A12E71F45 /* YTKKeyValueStore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YTKKeyValueStore.xcconfig; sourceTree = ""; }; - 534AFA8647F5E60163BF084285B3AD9E /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; - 534BD366DA913764FB6A895F29C1927B /* IQTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTextView.h; path = IQKeyboardManager/IQTextView/IQTextView.h; sourceTree = ""; }; - 54CF9BC5979AC4781A179C3A41CFC384 /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; - 54EE76760BCE3CE9DF646FA567859799 /* IQPreviousNextView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQPreviousNextView.m; path = IQKeyboardManager/IQToolbar/IQPreviousNextView.m; sourceTree = ""; }; - 556C4D983FC07E4A0F96E7D5FEA1BD0C /* JSONHTTPClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONHTTPClient.h; path = JSONModel/JSONModelNetworking/JSONHTTPClient.h; sourceTree = ""; }; - 55B9F4238F0902259456834DC9D1920B /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - 56247E2A4FAE29D32C86A5D9501F6F5E /* UITableView+FDTemplateLayoutCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+FDTemplateLayoutCell.h"; path = "Classes/UITableView+FDTemplateLayoutCell.h"; sourceTree = ""; }; - 56A2F501E263C4D6F46D6F2B4C136A82 /* IQUIScrollView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIScrollView+Additions.h"; path = "IQKeyboardManager/Categories/IQUIScrollView+Additions.h"; sourceTree = ""; }; - 57C8DA5F56CB13BC5C9D4F68770068B1 /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+Hierarchy.h"; path = "IQKeyboardManager/Categories/IQUIView+Hierarchy.h"; sourceTree = ""; }; - 581983071B50ED00E03BBC3807ED5DEB /* IQKeyboardManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManager.framework; path = IQKeyboardManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 588C34ABA8D08DC2830C1A87225FCFBC /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; - 58EDEFC63A54D8B264723EE0EA3AF7AD /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - 5AA08622D5A5D33841C028CADDB93243 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; - 5C999B9FC2FBE9386AB1D815E7FEBCDE /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; - 5D86675944859EEA91AE297DBF2625BB /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; - 5E63CCA35446BF2A18EC1177DC3DD8D9 /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; - 5F22AE8AE1EF0647FA45689B3ACC7919 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F43BA94179B9F1CCF49654AABC0F5FD /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; - 61615A4BA5FD1E80D97AD163695F7253 /* IQKeyboardManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManager.xcconfig; sourceTree = ""; }; - 62C88D14B39E886A97851021B020CD0E /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - 6326A03C1BF89BE8A8ADC2DB26A46117 /* LKDBHelper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LKDBHelper-prefix.pch"; sourceTree = ""; }; - 63688EDE6A5EA2EBAB3BCF3A99A16FB9 /* SocketRocket.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SocketRocket.modulemap; sourceTree = ""; }; - 63B53BB333164EC8865782883113A392 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; }; - 64478A7309F11543DB76692ACBCB15F7 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - 64A478D39C0282C84C3724E7F5E28E1C /* LKDBHelper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LKDBHelper-umbrella.h"; sourceTree = ""; }; - 64D250E761757385549317D0323E15F8 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; }; - 65437C30FADEF5D2F96F79C2F427D805 /* libjpush-ios-3.1.0.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = "libjpush-ios-3.1.0.a"; sourceTree = ""; }; - 66642E4EA3BCCAA25A839A82CE5DC347 /* JSONModelError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelError.h; path = JSONModel/JSONModel/JSONModelError.h; sourceTree = ""; }; - 66890DF77BDD3EBEC82AA947599CC390 /* JSONModel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JSONModel.xcconfig; sourceTree = ""; }; - 67ECE47F3623A56F2D308382B2EC1E26 /* UITableView+FDTemplateLayoutCellDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+FDTemplateLayoutCellDebug.h"; path = "Classes/UITableView+FDTemplateLayoutCellDebug.h"; sourceTree = ""; }; - 689FB24FA0A1443C9E6EDF71FCEEE91D /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 68EDBAD7D8432FBE29F349FBF59D2764 /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTitleBarButtonItem.m; path = IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m; sourceTree = ""; }; - 69B94B8350B08947B04432EBD738A67E /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoNormalFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h; sourceTree = ""; }; - 6AAC0206AB475617D67EA2D4D4D6EB74 /* TTTAttributedLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TTTAttributedLabel-prefix.pch"; sourceTree = ""; }; - 6B1F3AFC056F49920009E97EE8C75CDF /* IQUIScrollView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIScrollView+Additions.m"; path = "IQKeyboardManager/Categories/IQUIScrollView+Additions.m"; sourceTree = ""; }; - 6CD9B7708863D803D675F0E9B08630A2 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - 6D33B1102BC63ECAFE7BDCB58DAB42F6 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MJRefresh.h"; path = "MJRefresh/NSBundle+MJRefresh.h"; sourceTree = ""; }; - 6DE1BE539FD20B50E17E1D8AC200C993 /* SDWebImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoderHelper.h; path = SDWebImage/SDWebImageCoderHelper.h; sourceTree = ""; }; - 6E60E60F55DABA8A70A2D218D3E88172 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/NSButton+WebCache.m"; sourceTree = ""; }; - 6E992B127A8C1F809FBDB8A1D963EFEF /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; }; - 6F050EE77D3BFB01841F16C819A88DBD /* FMDB-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FMDB-prefix.pch"; sourceTree = ""; }; - 6F12E93671661EA8481386A3C4606195 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; - 70CE012FB313B9D041F010EDCACCC25C /* MJRefresh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.xcconfig; sourceTree = ""; }; - 71AACD347E2FAB04BD15B4A22F004B1E /* Masonry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-umbrella.h"; sourceTree = ""; }; - 71D681F6D9A55D54BCDFE8E749CC7CA9 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; }; - 72D3BAE7F54AA38BF7C28C5BEF554271 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; - 7599803B7C5D9F3EFB9E55E45EDD8677 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; - 767AE6C3AA2783369EC065DD68C0350A /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; - 778E098F1D1DD3233DA124284E40B2B2 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - 79488120495FF1488414D53348036A14 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7A270740B3E3865AC746380362B6CEBC /* FMDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDB.h; path = src/fmdb/FMDB.h; sourceTree = ""; }; - 7AF17F320B7EE79DE46A5FD89542A6FA /* Toast.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Toast.xcconfig; sourceTree = ""; }; - 7B07345DBE7B43EA49615E8040B44B9B /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; - 7B66A6C8F7C747D007AEDA080245D186 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; - 7BFA8F4568DC6993DAA1E49FE4F9CE3E /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; - 7E62F2772B21E9A1BC6397BA887E30B9 /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; - 7FCDCD0E88EE45EDEAA56A085B4EC12A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 804037B37C8061F50A6D0B27F526F26F /* TTTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TTTAttributedLabel.m; path = TTTAttributedLabel/TTTAttributedLabel.m; sourceTree = ""; }; - 8126B93DD8D474B90337F38D978130C5 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking.framework; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 81DD8B0857F2146245797014DE93A83D /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; - 8267A49CE76989CD63E6725500A33111 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 8286B6FF56944ED90439B26B99F71F2E /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+IQKeyboardToolbar.m"; path = "IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m"; sourceTree = ""; }; - 83AD8CF369CC62633AE1ADE5659E862A /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; - 8421AE415FF30A82D8A3C46F4066E8C4 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 856E5A9F492377BE16CFF6F2EDB3EAD1 /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; - 863D28343362DBB320CBC7ED8450507F /* TTTAttributedLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TTTAttributedLabel.modulemap; sourceTree = ""; }; - 86F728BB3275544EC6BCA5CE8CCA0E85 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIViewController+Additions.m"; path = "IQKeyboardManager/Categories/IQUIViewController+Additions.m"; sourceTree = ""; }; - 877F51AEC59AA879073B3A1738B03844 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 87A6322F866A874D2B0E0CA9BAAE4997 /* FMDatabaseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseQueue.h; path = src/fmdb/FMDatabaseQueue.h; sourceTree = ""; }; - 87A97A67BA4A937C5BD37DB69E3934B1 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJRefresh.h"; path = "MJRefresh/UIScrollView+MJRefresh.h"; sourceTree = ""; }; - 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 885E57B71A67BF6DA5156A4CEEDFD6D6 /* YTKKeyValueStore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YTKKeyValueStore-prefix.pch"; sourceTree = ""; }; - 88B5555B15A631734C78FAF503CB0021 /* NJKWebViewProgress-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NJKWebViewProgress-prefix.pch"; sourceTree = ""; }; - 88EC8169C53FD5C4C1F10D7DE2B6977D /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + 4C2F72B6BC0D51790962077A8C13EC05 /* MJRefreshConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConst.h; path = MJRefresh/MJRefreshConst.h; sourceTree = ""; }; + 4C5390F4E86B7D09F66AD00A442AB988 /* Starscream-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Starscream-prefix.pch"; sourceTree = ""; }; + 4CFCC52EC62F150CB4DFCDB379045F8F /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + 4F5A634FE6A212612B8063E798439185 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4F7775A169B588C5C2BEC8EE5864E3E3 /* UITableView+FDTemplateLayoutCell-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UITableView+FDTemplateLayoutCell-prefix.pch"; sourceTree = ""; }; + 5145E6BB9DFB46461BE07ADA20047F2E /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; }; + 5290E81387FC7DE33A6834ABB78CD62C /* LKDBHelper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = LKDBHelper.framework; path = LKDBHelper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 531AF42C28A0891D1E91B6BEA86844D7 /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseAdditions.m; path = src/fmdb/FMDatabaseAdditions.m; sourceTree = ""; }; + 531C313E293B098E8DD0AE16F9F05E50 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; + 53F4D20C7F0D216C630BE1353AC09D55 /* Starscream.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Starscream.xcconfig; sourceTree = ""; }; + 547FB455959DBDAB1B311703DC4655D1 /* Toast.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Toast.framework; path = Toast.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 558D6E7CB99E8F711140222C4C7FD6C0 /* TTTAttributedLabel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTTAttributedLabel.xcconfig; sourceTree = ""; }; + 55CDFB91944CA5A1481875292A58F12A /* SocketLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketLogger.swift; path = Source/SocketIO/Util/SocketLogger.swift; sourceTree = ""; }; + 55D47BD7E8E69B61DB9C10FE582F0F77 /* Masonry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-umbrella.h"; sourceTree = ""; }; + 5660075EFC0AA10C221C3D12FB6522F3 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 56C7B870DA133902EFBA936EF978F45C /* NSObject+LKModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+LKModel.m"; path = "LKDBHelper/Helper/NSObject+LKModel.m"; sourceTree = ""; }; + 577E3F36FE44476EE775746E6BC7F3F2 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; + 5842466C4060B5C8F8FB2C92F2D73D97 /* libjpush-ios-3.1.0.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = "libjpush-ios-3.1.0.a"; sourceTree = ""; }; + 58A1949C3F564FD801440AEA4D4E3C27 /* UITableView+FDTemplateLayoutCell.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "UITableView+FDTemplateLayoutCell.modulemap"; sourceTree = ""; }; + 5925EC6C2B2151154E2F24CC70D04AEC /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + 59B9D327C5265DEE8087CB64AB64426F /* Starscream.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Starscream.modulemap; sourceTree = ""; }; + 59E8BF8E1889AB501DDF9C32A0B690F8 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 5A1F61FFDF1CF20E149F6B0F6B0FF24A /* SocketRocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SocketRocket-dummy.m"; sourceTree = ""; }; + 5B8A96A9F8907E36AEE053151EF55E0B /* UIButton+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+AFNetworking.h"; path = "UIKit+AFNetworking/UIButton+AFNetworking.h"; sourceTree = ""; }; + 5BC61B5225D9CEE976A35A242843BF85 /* Starscream-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Starscream-dummy.m"; sourceTree = ""; }; + 5CFFA0AAC1274F48CF9BBAF77F583DE9 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; + 5EA0FD074C76AC8611D95613CDEB4311 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5F1558AF059B62809206FC3CD1039CBA /* UITableView+FDTemplateLayoutCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+FDTemplateLayoutCell.m"; path = "Classes/UITableView+FDTemplateLayoutCell.m"; sourceTree = ""; }; + 60A50FB199FB6B0C5EA49A62A4C863D8 /* JSONModel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JSONModel-dummy.m"; sourceTree = ""; }; + 60E6BD48D0EAAAD7C2C35A6705DA2EB1 /* MJRefreshFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshFooter.m; path = MJRefresh/Base/MJRefreshFooter.m; sourceTree = ""; }; + 6191ABE66A1BB9B2F88FFD6AF6186D63 /* SocketEventHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketEventHandler.swift; path = Source/SocketIO/Client/SocketEventHandler.swift; sourceTree = ""; }; + 61C2C19E65EA773F183A0CC25BA57237 /* Masonry.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.xcconfig; sourceTree = ""; }; + 61FE2DC3E37626E602B4123EBB968B51 /* LKDBHelper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LKDBHelper-umbrella.h"; sourceTree = ""; }; + 6388F569E994C890615BAAE8A1012286 /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+IQKeyboardToolbar.m"; path = "IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m"; sourceTree = ""; }; + 64835380AC55D938C3E0E9AA529F4D41 /* MJRefreshHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshHeader.h; path = MJRefresh/Base/MJRefreshHeader.h; sourceTree = ""; }; + 64EB649102BB6022F6927FBD8BF10E3B /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshGifHeader.m; path = MJRefresh/Custom/Header/MJRefreshGifHeader.m; sourceTree = ""; }; + 65743645C0D98AA50085F327714FEF8F /* WXApi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApi.h; path = WechatSDK1.8.2/WXApi.h; sourceTree = ""; }; + 6594B566BAF22CF7F3BF954283907D88 /* UIView+Toast.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+Toast.m"; path = "Toast/UIView+Toast.m"; sourceTree = ""; }; + 65FA72B7E48A3FABA22AE5D855BB186C /* JSONModelError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelError.h; path = JSONModel/JSONModel/JSONModelError.h; sourceTree = ""; }; + 66D6A876FB337C3A5AEC09F74362A022 /* JSONModel+networking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "JSONModel+networking.h"; path = "JSONModel/JSONModelNetworking/JSONModel+networking.h"; sourceTree = ""; }; + 670CF36062CD3ECFF8C5C5AABE213403 /* LKDB+Mapping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "LKDB+Mapping.h"; path = "LKDBHelper/Helper/LKDB+Mapping.h"; sourceTree = ""; }; + 6779C8F389FC4B45319BDA12E59B2BFD /* JSONModelClassProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONModelClassProperty.m; path = JSONModel/JSONModel/JSONModelClassProperty.m; sourceTree = ""; }; + 67C8BFEE51B5F26E6EB7520C972CD09A /* SocketRocket.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SocketRocket.framework; path = SocketRocket.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 69E99651489B054F900280430368B177 /* Masonry.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Masonry.modulemap; sourceTree = ""; }; + 6B7E3C04DF72633F51BBA78A08B8EF61 /* IQKeyboardManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManager.modulemap; sourceTree = ""; }; + 6C55D9F05AB29EF41FFA46E6095CFF72 /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; + 6C79216DF49554E23B9DFC5FAABDB967 /* FMDatabaseQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseQueue.m; path = src/fmdb/FMDatabaseQueue.m; sourceTree = ""; }; + 6C9A66715097B49E44CC06CFE998E3B8 /* UMCommon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMCommon.framework; sourceTree = ""; }; + 6E421B865FF1305197CC9C5DB303BB22 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; + 6F43E521A7D9B6E90D0A9E791D4C725D /* SocketManagerSpec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketManagerSpec.swift; path = Source/SocketIO/Manager/SocketManagerSpec.swift; sourceTree = ""; }; + 6F53130DDA9FEA279EEACE1E1D479D77 /* SDWebImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageFrame.h; path = SDWebImage/SDWebImageFrame.h; sourceTree = ""; }; + 6FF4D47DF573B44C28B3DF814C3E50CB /* JSONValueTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONValueTransformer.h; path = JSONModel/JSONModelTransformations/JSONValueTransformer.h; sourceTree = ""; }; + 70BC8DC64FAC8894D27E1964CC8CD209 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 71B92D24C35F51B3A3A9626DD861EF1E /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; + 720A2501ACCEF31CAEFCF72E5A1755D8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 72575B068A276F2F8A0CF243743B3E74 /* SDWebImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoderHelper.h; path = SDWebImage/SDWebImageCoderHelper.h; sourceTree = ""; }; + 727870954CC82AAEDD7172910D081D2F /* YTKKeyValueStore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YTKKeyValueStore-prefix.pch"; sourceTree = ""; }; + 72F5A09FBDED1F72A04C3E335DE0A1BA /* Toast-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-umbrella.h"; sourceTree = ""; }; + 73A0A8125787204B223B07F7C9F0A42E /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + 7476095E7330D9DBD36D76CCE3773573 /* SocketRocket-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-umbrella.h"; sourceTree = ""; }; + 7491AD0045ED41AE8F08FD751720691E /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+IQKeyboardToolbar.h"; path = "IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h"; sourceTree = ""; }; + 74C8E35BDB3CC1024935C804E53F0DD2 /* MJRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJRefresh-dummy.m"; sourceTree = ""; }; + 74DEFA36B4962F7E3A0B4640337FC908 /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; }; + 7544FB7D9022E74937D8BE12C05191AA /* AFNetworking.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AFNetworking.modulemap; sourceTree = ""; }; + 75491F997888B75AAB2C0AB027F83D5C /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + 768A5DE5D08824954B4B101A2FB6B2BD /* SocketIOClientConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketIOClientConfiguration.swift; path = Source/SocketIO/Client/SocketIOClientConfiguration.swift; sourceTree = ""; }; + 7704E7E2B7BD84344BB610CC27D5A70E /* SocketStringReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketStringReader.swift; path = Source/SocketIO/Util/SocketStringReader.swift; sourceTree = ""; }; + 774A10F51C61AA781BFD1C4397931231 /* JSONModelClassProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelClassProperty.h; path = JSONModel/JSONModel/JSONModelClassProperty.h; sourceTree = ""; }; + 78F07669D4FDF923215E34924891CA68 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; + 7916596619DEA640BF07E493F03AE462 /* IQPreviousNextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQPreviousNextView.h; path = IQKeyboardManager/IQToolbar/IQPreviousNextView.h; sourceTree = ""; }; + 793A3F963E71FCAB028E34329D122155 /* FMDB-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FMDB-prefix.pch"; sourceTree = ""; }; + 79898C8FB8D364D3B8B09502372E9F0B /* SocketIOClientSpec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketIOClientSpec.swift; path = Source/SocketIO/Client/SocketIOClientSpec.swift; sourceTree = ""; }; + 79CF50141FCA7A6797717FC93955DAF1 /* AFNetworking-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-umbrella.h"; sourceTree = ""; }; + 7B077190F4428101E2C3FCA4A0F17CA1 /* IQKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManager.h; path = IQKeyboardManager/IQKeyboardManager.h; sourceTree = ""; }; + 7BD28F6214D96C6BCC2EAF3C08B2EBA4 /* SocketEnginePacketType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketEnginePacketType.swift; path = Source/SocketIO/Engine/SocketEnginePacketType.swift; sourceTree = ""; }; + 7C57BCFDE1C485BAE504B6F82A3BCAC0 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + 7D0587B9F9A54258E4EC092F7FCE94EC /* NJKWebViewProgressView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NJKWebViewProgressView.m; path = NJKWebViewProgress/NJKWebViewProgressView.m; sourceTree = ""; }; + 7D5D3928FE1E7CA0D8E3A946574DC2F0 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 7E7D955074A0ED0B9FF131595E872064 /* JSONModelLib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelLib.h; path = JSONModel/JSONModelLib.h; sourceTree = ""; }; + 7E9D6482F9A7BDDA51F2CA23CC989F00 /* Socket.IO-Client-Swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Socket.IO-Client-Swift-prefix.pch"; sourceTree = ""; }; + 7F2A106A290EC7B512FC0E8A9C14E807 /* MJRefresh.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.xcconfig; sourceTree = ""; }; + 7F8965BFE9CC1CE8B5CFC2B14D7E2DA8 /* AFURLSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = AFNetworking/AFURLSessionManager.h; sourceTree = ""; }; + 805D42FFE0EC9DD228E5EB6C75F8E9AA /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; + 81061EAAEC3F61A38F09275305E22D6A /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; }; + 82167F073127B543CC843A71E2E2F134 /* libjcore-ios-1.2.2.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = "libjcore-ios-1.2.2.a"; sourceTree = ""; }; + 82C2BD5350645441DD92F95DC5E589DD /* IQBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQBarButtonItem.m; path = IQKeyboardManager/IQToolbar/IQBarButtonItem.m; sourceTree = ""; }; + 84A34E767AC05FDBD3D849436D0BCCEA /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 852AB63551AC52D340F98C97A94D9FD6 /* SocketTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketTypes.swift; path = Source/SocketIO/Util/SocketTypes.swift; sourceTree = ""; }; + 8574AA1B5AD318AF02BC4D3B68F81E58 /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; + 85FA16278B2D2A724F98F1B98A871074 /* NSImage+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+WebCache.h"; path = "SDWebImage/NSImage+WebCache.h"; sourceTree = ""; }; + 86A54BF6E391B76DFBE0F0695DB27785 /* Socket.IO-Client-Swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Socket.IO-Client-Swift.xcconfig"; sourceTree = ""; }; + 8705B892D0FB23E4B3A26DDB33CBC371 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; }; + 874A487F8BFAD83D1F053B4DCD8201A1 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; }; + 8779B2CA7289D6A7185C91312B6BD88D /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardReturnKeyHandler.h; path = IQKeyboardManager/IQKeyboardReturnKeyHandler.h; sourceTree = ""; }; + 88446EB28B584D07BED817C62D06D29D /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + 88FA75A73C1252600B984CF5DE17B8CE /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; + 897350FBCDF747BE59B857BB5740214A /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + 8999757F73DE228D5570C79E04DDE6E3 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; + 8A60255EA01616D51B066606B28E168C /* LKDBUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKDBUtils.m; path = LKDBHelper/Helper/LKDBUtils.m; sourceTree = ""; }; + 8B5E70F380A1881B0AE8CC9EF93F5CC3 /* LKDBHelper.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LKDBHelper.xcconfig; sourceTree = ""; }; + 8B7517F6F47C3E3DBDDC7897D5532B4E /* TTTAttributedLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TTTAttributedLabel.modulemap; sourceTree = ""; }; 8BBB7F3A03E7F2608FE52B0194635075 /* Pods-GIGA-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-GIGA-acknowledgements.markdown"; sourceTree = ""; }; - 8C55C4FE677FBA2E2EE1ECA52C17F704 /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; }; - 8CECA89C4FBBD5A50A75818DB7C8FF93 /* JSONHTTPClient.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONHTTPClient.m; path = JSONModel/JSONModelNetworking/JSONHTTPClient.m; sourceTree = ""; }; - 8D09F0EB6C4FCB74F8775B09136E55A4 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; }; - 8D6CD4E8532F4326AFE1388B3C37F1A9 /* NJKWebViewProgress.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NJKWebViewProgress.m; path = NJKWebViewProgress/NJKWebViewProgress.m; sourceTree = ""; }; - 8DE3A6F87CE579A6044EEA9D73BE3961 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - 8E06194D6A9AC6C15350A40AA681FBFA /* UIImageView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+AFNetworking.m"; path = "UIKit+AFNetworking/UIImageView+AFNetworking.m"; sourceTree = ""; }; - 8E5DA37AC55ADD979E448DB4CCE99D62 /* FMDB.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FMDB.framework; path = FMDB.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8EF9BC4C577E966B63ED1642D0C92DEF /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - 8FF9308ACC942E298BCB3BF0037F3118 /* Toast.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Toast.h; path = "Toast-Framework/Toast.h"; sourceTree = ""; }; - 905348BDB8E6B079B5430CF3BE868DF5 /* NJKWebViewProgress-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NJKWebViewProgress-umbrella.h"; sourceTree = ""; }; - 905FA653B2C53E8A919A501A0001FC8E /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalHeader.h; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.h; sourceTree = ""; }; - 9061C7534C913C5303067FDB0D7A4F38 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; - 909A78FB70C93FA0E34E4B3F09EB708D /* NJKWebViewProgress.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NJKWebViewProgress.xcconfig; sourceTree = ""; }; - 909C68A3CB1E26AA254E32962530E43B /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardReturnKeyHandler.m; path = IQKeyboardManager/IQKeyboardReturnKeyHandler.m; sourceTree = ""; }; - 90C70CE2FEF3C7E41FEAB6FA41E3C83D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 910B13121211FE5C2828D04AF6199605 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 91AE4A65DA845395D949F108CE789B39 /* SocketRocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketRocket.h; path = SocketRocket/SocketRocket.h; sourceTree = ""; }; + 8BF67949298271264E085700428A4FCF /* UIProgressView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIProgressView+AFNetworking.h"; path = "UIKit+AFNetworking/UIProgressView+AFNetworking.h"; sourceTree = ""; }; + 8C47585F4328CD92273C4B86865F9F95 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/SDWebImageTransition.m; sourceTree = ""; }; + 8CC12A9C12532CB9C97DB1F60227C686 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8E6E813A4FEA7EAA36447924B0005A89 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; + 9000E691EFB3E3B3FF8C0EB04CFB70DB /* JSONModel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JSONModel.xcconfig; sourceTree = ""; }; + 90609B4B8F17E6BD520EC73A397904D4 /* SocketIOClientOption.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketIOClientOption.swift; path = Source/SocketIO/Client/SocketIOClientOption.swift; sourceTree = ""; }; + 91A39121A9FBC45737A0102A4364012D /* SDWebImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoderHelper.m; path = SDWebImage/SDWebImageCoderHelper.m; sourceTree = ""; }; + 91DA5B2E5AE56CB9005ECE4644FA3356 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoFooter.h; path = MJRefresh/Base/MJRefreshAutoFooter.h; sourceTree = ""; }; + 9265EF5245C8B9E17305393357C5D93F /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + 935FBB07F207A53D79856BDDE153E292 /* JSONModel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = JSONModel.framework; path = JSONModel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 936CB1BC52F552DA2661695DAD338FA0 /* SocketEngineSpec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketEngineSpec.swift; path = Source/SocketIO/Engine/SocketEngineSpec.swift; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 948A76E77D933AFB7F2E7F84DACCAF7F /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; - 94EC1B15D0F40FAA8E09F162D89550A3 /* IQKeyboardManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManager-dummy.m"; sourceTree = ""; }; + 93BF77A950CD15978D9DA654DDF789CD /* SocketExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketExtensions.swift; path = Source/SocketIO/Util/SocketExtensions.swift; sourceTree = ""; }; + 9524B522E6F3A1198F46B4ED841E5662 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; 9574A12E8279712E0544674068BEC2E1 /* Pods-GIGA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GIGA.release.xcconfig"; sourceTree = ""; }; - 959711D42295318CCA4EA87A792B3D84 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; - 95CC04582873D1BB76490CE97B4C1291 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; - 961B9982B287A938D23CE983804F2FC5 /* LKDBHelper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = LKDBHelper.framework; path = LKDBHelper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 975B76CF1CC88D339A129F655F224CB8 /* JSONModel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JSONModel-prefix.pch"; sourceTree = ""; }; - 97E8AAD1B54E464BDD45645739A7E4E4 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/NSButton+WebCache.h"; sourceTree = ""; }; - 98ACA8A1C96253E0C93C68413E526E83 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/UIView+WebCache.h"; sourceTree = ""; }; - 993673BBDA2B45E5547B443BC8D629D7 /* MJRefreshFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshFooter.m; path = MJRefresh/Base/MJRefreshFooter.m; sourceTree = ""; }; - 999D260BC84758AAB3DF1AC5368500FA /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 99A4C46E61C7E0653C771E82AD1B7E32 /* MJRefreshConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConst.h; path = MJRefresh/MJRefreshConst.h; sourceTree = ""; }; - 99C5EF09BEEC7A9E54566B3EE818D85F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 99CDCD75BF37271A6D3421DE2C02322F /* JSONModelClassProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModelClassProperty.h; path = JSONModel/JSONModel/JSONModelClassProperty.h; sourceTree = ""; }; - 9A217F63722F5C203E7C70902378EB14 /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; + 96351089BE56F809A66D4165730BDD76 /* IQKeyboardManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-prefix.pch"; sourceTree = ""; }; + 964EB9F9E3DFDFBEB0A635FF6F6445AC /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackNormalFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h; sourceTree = ""; }; + 967F8C400CE4F9921B132F3F960E9FF0 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; + 986BB8C05577A2D5C64F498406015E85 /* SocketIOClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketIOClient.swift; path = Source/SocketIO/Client/SocketIOClient.swift; sourceTree = ""; }; + 98D89B37F7C92F976B671CF4941E8120 /* TTTAttributedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TTTAttributedLabel.m; path = TTTAttributedLabel/TTTAttributedLabel.m; sourceTree = ""; }; + 99792AD152EC0F67CE203E29D0DACFC0 /* YTKKeyValueStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = YTKKeyValueStore.framework; path = YTKKeyValueStore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A3CCB6C657E89D308B34C47CC5B789F /* NJKWebViewProgress-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NJKWebViewProgress-prefix.pch"; sourceTree = ""; }; + 9A594A8236E67EB8170C115C30847FF7 /* FMResultSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMResultSet.h; path = src/fmdb/FMResultSet.h; sourceTree = ""; }; + 9ACEC95F7E6261C5C5E02E54CAFEA523 /* FMDB-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FMDB-umbrella.h"; sourceTree = ""; }; 9B08C8E485946B27165B1EE380D12B99 /* Pods-GIGA-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GIGA-frameworks.sh"; sourceTree = ""; }; - 9BA0F8DC6E0D3BF06F7492AF4FEF3F56 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; }; - 9C52134DD48D89A347BF80B6D47974CD /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - 9CB9C0E6DC1428C653A5D72115334EC2 /* SDWebImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageFrame.m; path = SDWebImage/SDWebImageFrame.m; sourceTree = ""; }; - 9CC9FBF8AF1D72E7C9B5EC4112586103 /* LKDBHelper.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LKDBHelper.xcconfig; sourceTree = ""; }; - 9D7F51C4E138BB8EC86B366A13C1E692 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; - 9E43D4748ACBDE3E7E8E94CCE6225EFE /* SocketRocket.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SocketRocket.framework; path = SocketRocket.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9F87B11135AE32B18FF626C3C9FEDBD4 /* IQNSArray+Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQNSArray+Sort.h"; path = "IQKeyboardManager/Categories/IQNSArray+Sort.h"; sourceTree = ""; }; - A0F3772ACE7A6D60B053804229D7A2D9 /* YTKKeyValueStore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = YTKKeyValueStore.modulemap; sourceTree = ""; }; - A18C184E0BDB545829E6779CE4D2CBF6 /* AFNetworkActivityIndicatorManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkActivityIndicatorManager.m; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m"; sourceTree = ""; }; - A24EF25F62048423E9D930C5278074AA /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/SDImageCacheConfig.h; sourceTree = ""; }; - A3053D3DF72CFEE973E780A70CC18EF2 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/SDAnimatedImageRep.m; sourceTree = ""; }; - A364A67DDFA37096812E036AE6662AF8 /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; - A3A2A54A6B463F84E2F775E3871BAF60 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFHTTPSessionManager.m; path = AFNetworking/AFHTTPSessionManager.m; sourceTree = ""; }; - A450BEF04E62AC608AA5CBCC1BA0679E /* JSONAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONAPI.m; path = JSONModel/JSONModelNetworking/JSONAPI.m; sourceTree = ""; }; - A452045F9BCD3C292BCA0C743F5F3398 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; }; - A57F7F0A6AB5550D6C39E86241A2C3B4 /* TTTAttributedLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TTTAttributedLabel.framework; path = TTTAttributedLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A6DAA9F15075836671C4C398A8994B11 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; }; - A7319007CA14024A0376E223A1A702CB /* Toast.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Toast.framework; path = Toast.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A817B0BECEB40A1FE6024507A2676B7C /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; - A838FA1796E67C873CDB58A820F09C82 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackStateFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h; sourceTree = ""; }; - A9E4181140F064FCE4526B441CF1397D /* IQKeyboardManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-umbrella.h"; sourceTree = ""; }; - A9ED647F3BCC607702655683BF6F3A7C /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUITextFieldView+Additions.m"; path = "IQKeyboardManager/Categories/IQUITextFieldView+Additions.m"; sourceTree = ""; }; + 9BB3C77E5D6641E78ECDFF85F30BD25A /* UIActivityIndicatorView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIActivityIndicatorView+AFNetworking.h"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h"; sourceTree = ""; }; + 9C199822C99C320281338D998C03B995 /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; + 9CA67BCA7DA83AFB686019666B15E346 /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; }; + 9D4B692446F5B3A848158599E0258088 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9DBF7AFC604013C37D42D03D54C2B42A /* FMDB.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FMDB.modulemap; sourceTree = ""; }; + 9E018CB10D71F6E7076E334BE4031987 /* YTKKeyValueStore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YTKKeyValueStore-dummy.m"; sourceTree = ""; }; + 9E5007EEC9570DEC0914742C5AA50210 /* FMDB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDB.h; path = src/fmdb/FMDB.h; sourceTree = ""; }; + 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 9FE34AE9B11E8E9CE707D60148CFB286 /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; + A087BAC4F72D6A1D75482DB745BF663D /* IQKeyboardManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManager.framework; path = IQKeyboardManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0E77CB702D048DE8D95D7B71073CB5A /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A1476EF51AAC4F331DC16EE15A7C9A52 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIRefreshControl+AFNetworking.m"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; + A1D013A487C85EC1042B4A1ED71E7C6D /* JSONModelError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONModelError.m; path = JSONModel/JSONModel/JSONModelError.m; sourceTree = ""; }; + A1E47E6E0B0C4589F0066EB47D2EFB1E /* NJKWebViewProgress.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NJKWebViewProgress.xcconfig; sourceTree = ""; }; + A2092DB43436F5251A059C3C4A62A935 /* JSONModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModel.h; path = JSONModel/JSONModel/JSONModel.h; sourceTree = ""; }; + A21BBBF163BCA4C3910C8490302E3372 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLResponseSerialization.h; path = AFNetworking/AFURLResponseSerialization.h; sourceTree = ""; }; + A2D6F39FC472C9C3E27C6635ECE723DE /* JSONModel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JSONModel-prefix.pch"; sourceTree = ""; }; + A38841D1204800C4F712AB1D13E4AC7D /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; }; + A3F1A8219D19797685AF2D8E9EAFE675 /* JSONModel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JSONModel-umbrella.h"; sourceTree = ""; }; + A683976152674929538EEEC6EFF05A4B /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/SDAnimatedImageRep.m; sourceTree = ""; }; + A6DAF6AA9DC71209F96E9D4506478663 /* SocketManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketManager.swift; path = Source/SocketIO/Manager/SocketManager.swift; sourceTree = ""; }; + A71A2EDB7D80E8B54C1540FA4E2B8A8D /* Toast.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Toast.xcconfig; sourceTree = ""; }; + A77564763595F2220FB4FF9C93274429 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackStateFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m; sourceTree = ""; }; + A9341A0F668333A93B6FBD08098250C4 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; + AAF305E6DECD78168E49221E61B947D7 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; AB2DF74840B542C3AD232BD2BD39EDAC /* Pods-GIGA-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GIGA-acknowledgements.plist"; sourceTree = ""; }; - ABC603830D54131AAE067A9DBABE668F /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; - ABCF6DE887A4EF28FF9DF3570F14202B /* WXApiObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApiObject.h; path = WechatSDK1.8.2/WXApiObject.h; sourceTree = ""; }; - ABE17D577EA9792121FB2D749B0D28E7 /* AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworking.h; path = AFNetworking/AFNetworking.h; sourceTree = ""; }; - AE0A7F1098573A8863A3DAFD6F5C0B3B /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; - AF0DA85B8E4EC528A3D60142D163F459 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshGifHeader.m; path = MJRefresh/Custom/Header/MJRefreshGifHeader.m; sourceTree = ""; }; - B02F00E2B5DA269DDA1D546D77FD45BA /* UITableView_FDTemplateLayoutCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = UITableView_FDTemplateLayoutCell.framework; path = "UITableView+FDTemplateLayoutCell.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - B0C2F502826F5127747EE7F967917F96 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B1B186968A284B72578A24B12864BEE1 /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; - B1C6BDFC9D2074B8540E2D091C7064B6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B22A920A2907F15159CFD64F49212089 /* MJRefresh-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-umbrella.h"; sourceTree = ""; }; - B4BD72CEB9C646B8351A8D0B3224CE48 /* FMDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabase.h; path = src/fmdb/FMDatabase.h; sourceTree = ""; }; - B4BEEF21A4371EE181D00D9011BBF232 /* IQBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQBarButtonItem.m; path = IQKeyboardManager/IQToolbar/IQBarButtonItem.m; sourceTree = ""; }; - B4E855885058F0ABFDAD0B5745319918 /* JSONModel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JSONModel.modulemap; sourceTree = ""; }; - B5E7154402841861BD73ACFD7730BC01 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - B5FA4B859A0AB80E8E3D57CBCE80F2AF /* UIActivityIndicatorView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIActivityIndicatorView+AFNetworking.m"; path = "UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m"; sourceTree = ""; }; - B724EFE1A35CEE6EE7D804EBC9E9B647 /* TTTAttributedLabel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TTTAttributedLabel.xcconfig; sourceTree = ""; }; - B72C980E30572DC8C26C148404219FE9 /* YTKKeyValueStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = YTKKeyValueStore.framework; path = YTKKeyValueStore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B832D5C26DFD510FD9A7A2BAF0201A58 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; }; - B9D5F8B6496946C17FD942466B37CB69 /* Toast.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Toast.modulemap; sourceTree = ""; }; - B9F2079EE23F230DEA680345C387F6C1 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateHeader.m; path = MJRefresh/Custom/Header/MJRefreshStateHeader.m; sourceTree = ""; }; - BBCFD7D46489AF21D3BE448635C95E1D /* IQBarButtonItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQBarButtonItem.h; path = IQKeyboardManager/IQToolbar/IQBarButtonItem.h; sourceTree = ""; }; - BC569107A5A7CCA3A1EAAFD5146B4D61 /* FMDB.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = FMDB.modulemap; sourceTree = ""; }; - BC5F392919A89D0D4529C78A9B24CBD9 /* IQKeyboardManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardManager.m; path = IQKeyboardManager/IQKeyboardManager.m; sourceTree = ""; }; - BD34472D8257BD1D09F9DB765856779B /* TTTAttributedLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TTTAttributedLabel-dummy.m"; sourceTree = ""; }; - BDA80F5D7B6C75DE56A43090A20E478E /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - BDA8DA7D100B6495E2D43C82C7612A51 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; - BDB3FA188B77C4C5AC4EBF7C4EB23690 /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; }; - BDFAE07701D24D6F3E4A296D12634988 /* JSONAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONAPI.h; path = JSONModel/JSONModelNetworking/JSONAPI.h; sourceTree = ""; }; - BEE46E79F1F0C05155FC29045B05E080 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - BFE0D4BB6D73A96180EF534C92ACE53B /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/SDImageCacheConfig.m; sourceTree = ""; }; - C023374A920B06BAE8BF866C24C7881A /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; - C1DC7306DAD63B2C06913DF8915C00B1 /* JSONKeyMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONKeyMapper.h; path = JSONModel/JSONModelTransformations/JSONKeyMapper.h; sourceTree = ""; }; - C30BDD3ACA5916852637177B87F0E742 /* JSONModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONModel.h; path = JSONModel/JSONModel/JSONModel.h; sourceTree = ""; }; - C4BDFC17DB434F4FA868FD6D82577910 /* SocketRocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SocketRocket-prefix.pch"; sourceTree = ""; }; - C524A0E50AC16EF76BC09CF266FA6422 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateHeader.h; path = MJRefresh/Custom/Header/MJRefreshStateHeader.h; sourceTree = ""; }; - C59D3FCABF89A223424416FCCF12B670 /* SocketRocket.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SocketRocket.xcconfig; sourceTree = ""; }; - C77CDBC148BD82CC4B3944A93E1DB7B7 /* IQKeyboardManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManager.h; path = IQKeyboardManager/IQKeyboardManager.h; sourceTree = ""; }; - C904CE0D4C99B3A972A0204B932BDF88 /* JSONKeyMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONKeyMapper.m; path = JSONModel/JSONModelTransformations/JSONKeyMapper.m; sourceTree = ""; }; - C9C5E0BB0EAF52F6A2E2928FAA02151A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - CA531EAD1D1DA49EA987BF74F9ACAF04 /* UIKit+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+AFNetworking.h"; path = "UIKit+AFNetworking/UIKit+AFNetworking.h"; sourceTree = ""; }; - CA54827F20BD0ACFF5163BE7B247199D /* NSObject+LKDBHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+LKDBHelper.m"; path = "LKDBHelper/Helper/NSObject+LKDBHelper.m"; sourceTree = ""; }; - CA54DD4E3D9B061E47DABD67A6F11AD6 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFNetworkReachabilityManager.m; path = AFNetworking/AFNetworkReachabilityManager.m; sourceTree = ""; }; - CC66366B9AC6F1CAD6AEB88A67337C78 /* IQToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQToolbar.h; path = IQKeyboardManager/IQToolbar/IQToolbar.h; sourceTree = ""; }; - CE0CDF8DDC168FC42EE8F510BBA938CD /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - CE8F79F2B661D3DE763707D9654DAFE1 /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardReturnKeyHandler.h; path = IQKeyboardManager/IQKeyboardReturnKeyHandler.h; sourceTree = ""; }; - CF144683787E1EC724F1B8EE18CC50AD /* JSONValueTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONValueTransformer.h; path = JSONModel/JSONModelTransformations/JSONValueTransformer.h; sourceTree = ""; }; - CFCF048332BA95A163C798AC2CDF14E6 /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; - CFFD009D1F00116A643D51E243330C18 /* LKDB+Mapping.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "LKDB+Mapping.m"; path = "LKDBHelper/Helper/LKDB+Mapping.m"; sourceTree = ""; }; - D05590B969E6F4407F4F99FA703CE7C5 /* YTKKeyValueStore.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YTKKeyValueStore.m; path = YTKKeyValueStore/YTKKeyValueStore.m; sourceTree = ""; }; - D092048B929608F69E9F23C84179CEC2 /* NJKWebViewProgress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NJKWebViewProgress.h; path = NJKWebViewProgress/NJKWebViewProgress.h; sourceTree = ""; }; - D28105FED83DECE58DADDCAA20FA08EA /* NJKWebViewProgress.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NJKWebViewProgress.modulemap; sourceTree = ""; }; - D2FB2AA6C3C909BEC43521A619E7922C /* IQKeyboardManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-prefix.pch"; sourceTree = ""; }; - D31FCD1502C48457FE630B3B3E54B5CF /* SDWebImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageGIFCoder.h; path = SDWebImage/SDWebImageGIFCoder.h; sourceTree = ""; }; - D356016E65FB61F9D8CA34E66D670FCC /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = ""; }; - D3E25E1FF09446A49CA57D4B31A21248 /* NSObject+LKModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+LKModel.m"; path = "LKDBHelper/Helper/NSObject+LKModel.m"; sourceTree = ""; }; - D4EA592E4C7AC121AEDC66B83365EE25 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; - D510C8DE8287F40083E461707DA7C66E /* SDWebImageImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageImageIOCoder.m; path = SDWebImage/SDWebImageImageIOCoder.m; sourceTree = ""; }; - D578A1FA8C5C0066B724DA98FA21DEA8 /* UITableView+FDKeyedHeightCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+FDKeyedHeightCache.h"; path = "Classes/UITableView+FDKeyedHeightCache.h"; sourceTree = ""; }; - D58483E70F4485E0D9E8F722A5917F44 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; - D5B5C63A8277A1C23DA1F327EB6B8695 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/UIImage+ForceDecode.h"; sourceTree = ""; }; - D657D2753D62E6E0FCEA4ABCF2F254DB /* NJKWebViewProgressView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NJKWebViewProgressView.m; path = NJKWebViewProgress/NJKWebViewProgressView.m; sourceTree = ""; }; - D659CC3CF19E6BDAD644FB8B044B48F1 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; - D6E61B0B01019595C39208492A85E4B6 /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = ""; }; - D89B744364C5A695E25E01776410B652 /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIView+IQKeyboardToolbar.h"; path = "IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h"; sourceTree = ""; }; - D8AD01D96341F62041B06E29BABD0E9C /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/SDAnimatedImageRep.h; sourceTree = ""; }; - DA6A8B2D873EF6424BE3BADA80CFDE53 /* WechatAuthSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WechatAuthSDK.h; path = WechatSDK1.8.2/WechatAuthSDK.h; sourceTree = ""; }; - DBC078293DB6E10281D1A33704EF52F5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DD26114F1B84A972B2A2A20A19E7139B /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - DD9F8097FDD26C1A767654BEFDB692CC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - DF44E31D397C061AB138287915E6ECDA /* WXApi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WXApi.h; path = WechatSDK1.8.2/WXApi.h; sourceTree = ""; }; - E003B301E7A1D3B32B0A919DC1E29C50 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoFooter.m; path = MJRefresh/Base/MJRefreshAutoFooter.m; sourceTree = ""; }; - E08CCF3A89E086CCE8DC38AC4B14AFDE /* TTTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TTTAttributedLabel.h; path = TTTAttributedLabel/TTTAttributedLabel.h; sourceTree = ""; }; - E0BE28AB9BEEE3F2DE5CA5ADF0754DE9 /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseAdditions.h; path = src/fmdb/FMDatabaseAdditions.h; sourceTree = ""; }; - E116512F596C10F7B0DE7E79B3D4FB37 /* UITableView+FDIndexPathHeightCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+FDIndexPathHeightCache.h"; path = "Classes/UITableView+FDIndexPathHeightCache.h"; sourceTree = ""; }; - E20DE1DF19E878ED7DF4D788E2916EB9 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; - E2623D539C17BD1BC944362048A0EB22 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLRequestSerialization.m; path = AFNetworking/AFURLRequestSerialization.m; sourceTree = ""; }; - E44DA37275684EA3A83F7B4546DEF10C /* SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRWebSocket.m; path = SocketRocket/SRWebSocket.m; sourceTree = ""; }; - E4811330CBE4D8F15CD07A0E6B28196A /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E4EFB775E7525FEB8EAFA2A67E3E5795 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/SDWebImageTransition.m; sourceTree = ""; }; - E52F56D34181DD1D8127F30E9C8A0242 /* MJRefreshHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshHeader.h; path = MJRefresh/Base/MJRefreshHeader.h; sourceTree = ""; }; - E58CBA84E4AB3797581C0AB28A440589 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - E64EECA1EB63A11476467B8C6180D50B /* JSONModelClassProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONModelClassProperty.m; path = JSONModel/JSONModel/JSONModelClassProperty.m; sourceTree = ""; }; - E67557DBF26DB5257919A8170EF851D1 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = AFNetworking/AFURLResponseSerialization.m; sourceTree = ""; }; - E765AEB6EF5022FC3E2114C6854EB172 /* UITableView+FDIndexPathHeightCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+FDIndexPathHeightCache.m"; path = "Classes/UITableView+FDIndexPathHeightCache.m"; sourceTree = ""; }; - E87FA83DF490428DB9FAFE0D133870B3 /* libWeChatSDK.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libWeChatSDK.a; path = WechatSDK1.8.2/libWeChatSDK.a; sourceTree = ""; }; - E89E9BC7945C12B0A0EED41916A4781C /* IQNSArray+Sort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQNSArray+Sort.m"; path = "IQKeyboardManager/Categories/IQNSArray+Sort.m"; sourceTree = ""; }; - E8CA6B846640A5453420E104AD87020A /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - EA185D39D4742C90EF4A71ED0B6FF30D /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseAdditions.m; path = src/fmdb/FMDatabaseAdditions.m; sourceTree = ""; }; - EB0E2C14BE354FEEEBF03E24DE5D621D /* JPUSHService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = JPUSHService.h; sourceTree = ""; }; - EB897736B08CBFD5003426DB8418C016 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIRefreshControl+AFNetworking.h"; path = "UIKit+AFNetworking/UIRefreshControl+AFNetworking.h"; sourceTree = ""; }; - EBF593E3360685A3AAA0ECCC2F7F5BAE /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; - EC6ADCE0E67FA28C7ECE2FEC64166177 /* SDWebImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoderHelper.m; path = SDWebImage/SDWebImageCoderHelper.m; sourceTree = ""; }; - ED1FDA2FAAE502AF2BE82854AC2AB913 /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+Hierarchy.m"; path = "IQKeyboardManager/Categories/IQUIView+Hierarchy.m"; sourceTree = ""; }; - EE1D1FDA83027C75229F19DD43194D5D /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJExtension.m"; path = "MJRefresh/UIScrollView+MJExtension.m"; sourceTree = ""; }; - EEF99048C22BEC61A2C9AD4AD0432D06 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; }; - F039F4116C29A97EC5D13C82BBDE9CBC /* LKDBUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKDBUtils.m; path = LKDBHelper/Helper/LKDBUtils.m; sourceTree = ""; }; - F0AC7473E3EE53CA223DF55277610DA9 /* UMCommon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMCommon.framework; sourceTree = ""; }; - F0C27FE9D74CE4CCBDD75DDC47C44240 /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; }; - F0D2E0E7AF262CBBB18CB5A5451749B5 /* UIButton+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+AFNetworking.m"; path = "UIKit+AFNetworking/UIButton+AFNetworking.m"; sourceTree = ""; }; - F1C4A03B34E51C307B83F802829ACF75 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F1D7AECAD05D08E3631A38401A2192AA /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; }; - F3CF70BCE274B4CF992203FFBB582A3F /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; - F4AEF4063D5D16018040686460892C7D /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; - F4E31E76EFC78FCF7D26C0EB198E7130 /* NSImage+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+WebCache.h"; path = "SDWebImage/NSImage+WebCache.h"; sourceTree = ""; }; - F50B0F68470FA444E926132799716530 /* SocketRocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SocketRocket-dummy.m"; sourceTree = ""; }; - F5398B339844CC0409DB141FCCB610A7 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoFooter.h; path = MJRefresh/Base/MJRefreshAutoFooter.h; sourceTree = ""; }; - F5B1291C368ECF02B251E7EEBD0C2FA2 /* SDWebImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageFrame.h; path = SDWebImage/SDWebImageFrame.h; sourceTree = ""; }; - F66F22D2B5E6EF98C875A78C8164C54F /* LKDBUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKDBUtils.h; path = LKDBHelper/Helper/LKDBUtils.h; sourceTree = ""; }; - F79298FCF0E5B2FCDD163272B33DB5DE /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; + ABEE1B30110BC813D624D9257CEA50D1 /* LKDBHelper.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = LKDBHelper.modulemap; sourceTree = ""; }; + AC5B168B958ECE131EC368A4E10C6DEB /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + ADA2CB35E59C1515D5BED389D956661B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + ADD95A322AD6CC6DFF9662EE73FD3866 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; + AE85EEFEF754EE2C913DA2E906A10FD0 /* SDWebImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoder.h; path = SDWebImage/SDWebImageCoder.h; sourceTree = ""; }; + AF292596176CE1B357AB1A3CC5FC2AA6 /* SDWebImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCodersManager.h; path = SDWebImage/SDWebImageCodersManager.h; sourceTree = ""; }; + AFEF7822284D0740E9439FDA575D9C21 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + B01D2A082D8362F5E95027DBAE3D1DFD /* AFSecurityPolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFSecurityPolicy.m; path = AFNetworking/AFSecurityPolicy.m; sourceTree = ""; }; + B2DEBA7CEFB5421B185C9365A7AA8A75 /* JSONAPI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONAPI.m; path = JSONModel/JSONModelNetworking/JSONAPI.m; sourceTree = ""; }; + B2EF076F89FAD3ACFE9DCCC73E3553A3 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/SDImageCacheConfig.h; sourceTree = ""; }; + B37CE92BCFA7B9F94F1EC5EEE702D1C8 /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUITextFieldView+Additions.m"; path = "IQKeyboardManager/Categories/IQUITextFieldView+Additions.m"; sourceTree = ""; }; + B391B9DE52D6245F6A0358F52F1E44B0 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/SDAnimatedImageRep.h; sourceTree = ""; }; + B3FC77617DC552A6560A5396024E9F3E /* NJKWebViewProgress.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NJKWebViewProgress.m; path = NJKWebViewProgress/NJKWebViewProgress.m; sourceTree = ""; }; + B416F9C983C43629DD021B63239CC1E0 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + B4AA799A01CF6F84D07EBC2151183FE8 /* IQToolbar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQToolbar.m; path = IQKeyboardManager/IQToolbar/IQToolbar.m; sourceTree = ""; }; + B4AF1BBB3946B6E0D89CDC1AE59011B0 /* SocketEnginePollable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketEnginePollable.swift; path = Source/SocketIO/Engine/SocketEnginePollable.swift; sourceTree = ""; }; + B66D98C970953F228BE3D0F043AA6859 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; + B6841A5F308297E91E99E7B83292909E /* AFCompatibilityMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFCompatibilityMacros.h; path = AFNetworking/AFCompatibilityMacros.h; sourceTree = ""; }; + B72958B223F8DBC6D1DEBDF0873BBBD4 /* UITableView+FDTemplateLayoutCell-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UITableView+FDTemplateLayoutCell-dummy.m"; sourceTree = ""; }; + B755A7EEE0FDDBCCB793F3ED139513EF /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+AFNetworking.h"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.h"; sourceTree = ""; }; + B84232FF804EAAE9753EE17FCA85A8AE /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; + B88609AD20FB25EC23E9CB38EFA4261C /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; + B8B56BE8B95141AA7FFDB381009541CA /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoNormalFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h; sourceTree = ""; }; + B8C80B2C162E2DADAE6E64B7C59BD395 /* NJKWebViewProgressView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NJKWebViewProgressView.h; path = NJKWebViewProgress/NJKWebViewProgressView.h; sourceTree = ""; }; + B900B84AB25BE438B82CB50415C5ADE5 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/NSButton+WebCache.h"; sourceTree = ""; }; + B946CD9D828545C56B16DD0BAE1A4357 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + B9995F667229F5D1A39B33E48EA6FCD5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B9B3DFA903870C5127C0EB7DCA2CD096 /* WechatAuthSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = WechatAuthSDK.h; path = WechatSDK1.8.2/WechatAuthSDK.h; sourceTree = ""; }; + BB129160697EBA00C13DD98D69D252F7 /* AFAutoPurgingImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFAutoPurgingImageCache.h; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.h"; sourceTree = ""; }; + BB6C3ABE582E083225418DE0C8C70C57 /* NJKWebViewProgress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NJKWebViewProgress.h; path = NJKWebViewProgress/NJKWebViewProgress.h; sourceTree = ""; }; + BB8ED24222958BA93B420822394B77BC /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/UIImage+ForceDecode.m"; sourceTree = ""; }; + BBDC6D1622DB585841784A5DED1346FA /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstants.h; path = IQKeyboardManager/Constants/IQKeyboardManagerConstants.h; sourceTree = ""; }; + BC38A229ADD93FA75F0CDC8D9BE4FC6A /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; }; + BC5C08FC6773BA7BD235A3B78A7ABCAA /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoNormalFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m; sourceTree = ""; }; + BC5D2DFF79A26EDAE2E4229FA02DE3ED /* FMDB-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FMDB-dummy.m"; sourceTree = ""; }; + BCDDB5FF379578ABC9203ED41F2C6152 /* MJRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshComponent.h; path = MJRefresh/Base/MJRefreshComponent.h; sourceTree = ""; }; + BDB59FA6744E05662DDE8F5FB6697313 /* JSONKeyMapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONKeyMapper.m; path = JSONModel/JSONModelTransformations/JSONKeyMapper.m; sourceTree = ""; }; + BDBB82B0577F0513EA40C059469FCAD4 /* IQKeyboardManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManager-umbrella.h"; sourceTree = ""; }; + BE39E881910D30BFF4517A4177625677 /* NSObject+LKDBHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+LKDBHelper.m"; path = "LKDBHelper/Helper/NSObject+LKDBHelper.m"; sourceTree = ""; }; + BEA40D79454E792C12261F3AF180920F /* Pods_GIGA.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_GIGA.framework; path = "Pods-GIGA.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + BEA9D04E7D8139122C3891161371C04F /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + BEDD0B27A048E132CE68F433D20A9480 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQKeyboardManagerConstantsInternal.h; path = IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h; sourceTree = ""; }; + BFC2CEE4A1CC40C763FF7873BA8B56D1 /* IQToolbar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQToolbar.h; path = IQKeyboardManager/IQToolbar/IQToolbar.h; sourceTree = ""; }; + C0FD05EAF05C6EE6CD501AA135B3FC66 /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; + C1ADBB706FDB59836CD7FB8B56580BFE /* Toast.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Toast.modulemap; sourceTree = ""; }; + C35DDEF1EDC8880803553CEF5DDDCA6A /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; + C3CE92694B37B4E144AB7C2A657FB9EA /* libWeChatSDK.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libWeChatSDK.a; path = WechatSDK1.8.2/libWeChatSDK.a; sourceTree = ""; }; + C405F8314A0EDA4CCECFACFD56BD6452 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateHeader.m; path = MJRefresh/Custom/Header/MJRefreshStateHeader.m; sourceTree = ""; }; + C49E0B9B92E3FB3DF23C94F2D7F2B819 /* MJRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJRefresh.modulemap; sourceTree = ""; }; + C4E76FAF8061A10B224E54FE0D78F122 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + C52D5FBF7AC49549CACAB8E226E06A55 /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQTitleBarButtonItem.m; path = IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m; sourceTree = ""; }; + C53B6F23513590B1B35519E049C3AD72 /* FMDatabase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabase.h; path = src/fmdb/FMDatabase.h; sourceTree = ""; }; + C5AB81B04A2D01A1380ED02CA7F95DE4 /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/UIView+WebCache.h"; sourceTree = ""; }; + C5DC2D40CE636899E96F07F2E86609A7 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + C5E794D2376437EFF78B2C7EB9D7060B /* AFURLSessionManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = AFNetworking/AFURLSessionManager.m; sourceTree = ""; }; + C607C7BF73E5A94800A31DAFFC343CAC /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; }; + C722C8355643E88536A2074EFDB9B2DA /* SocketParsable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketParsable.swift; path = Source/SocketIO/Parse/SocketParsable.swift; sourceTree = ""; }; + C73F80367886F94832EE106D9F164391 /* AFImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFImageDownloader.m; path = "UIKit+AFNetworking/AFImageDownloader.m"; sourceTree = ""; }; + C74B6FEF3E092E16E6AA34C13A34D0B9 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/UIImage+ForceDecode.h"; sourceTree = ""; }; + C7D7CD906FAB43D44FF0E620B8F6644C /* SDWebImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageFrame.m; path = SDWebImage/SDWebImageFrame.m; sourceTree = ""; }; + C8B763BF7B2D2A4C39D2DC28299CEF57 /* JSONAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONAPI.h; path = JSONModel/JSONModelNetworking/JSONAPI.h; sourceTree = ""; }; + C933FC7192774929912447057B8E4562 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C98EC4CD7AD6C86DF803FE3B76FCED1A /* LKDBHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LKDBHelper.h; path = LKDBHelper/Helper/LKDBHelper.h; sourceTree = ""; }; + C9CDC1F6DD226D0362ABF5BAC2D55A32 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; }; + CA55885292577F09084E8F2BB1E84632 /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; + CA697CD49B3E51073391142FA485D827 /* SRWebSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SRWebSocket.h; path = SocketRocket/SRWebSocket.h; sourceTree = ""; }; + CA9FD8A6D417DF1249A66C83FFBE8E4C /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; + CADC5017C63268D068AD5B7FB33E0BFC /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/UIView+WebCache.m"; sourceTree = ""; }; + CB12608CAF6344C9CD54DC1A84A0BEF5 /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; }; + CB4643E8EBAD5EE3D3BEF6DE78EBAA46 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + CBE54AA9DF51DD23D24F6D99DBE4D170 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIViewController+Additions.m"; path = "IQKeyboardManager/Categories/IQUIViewController+Additions.m"; sourceTree = ""; }; + CC29AB6DCE0390D33472279DBF9F826F /* AFNetworking.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AFNetworking.xcconfig; sourceTree = ""; }; + CCB297EBF9711390A31826257A45DFED /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CCBD06AABD5DDD4CA2D79364A77DF3BF /* IQUIScrollView+Additions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIScrollView+Additions.m"; path = "IQKeyboardManager/Categories/IQUIScrollView+Additions.m"; sourceTree = ""; }; + CCD140D091E406CA53B6F3992BBDB579 /* SDWebImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageGIFCoder.h; path = SDWebImage/SDWebImageGIFCoder.h; sourceTree = ""; }; + CD9FF2C9E2179EFB4B65EAA1F59EB227 /* NSImage+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+WebCache.m"; path = "SDWebImage/NSImage+WebCache.m"; sourceTree = ""; }; + CDA517AA74DD3581625EABAFCF57A1F3 /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQUIView+Hierarchy.m"; path = "IQKeyboardManager/Categories/IQUIView+Hierarchy.m"; sourceTree = ""; }; + CDF02B7C8432A7AF339B1C46A875FAA1 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + CE00515C642F3041D7530F99532A37B1 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJRefresh.h"; path = "MJRefresh/UIScrollView+MJRefresh.h"; sourceTree = ""; }; + CECF499859A92AC25079255ECACA8E36 /* TTTAttributedLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TTTAttributedLabel-dummy.m"; sourceTree = ""; }; + CF27FA729B2DA26B0CE791FB3E90BC05 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CF40AB4FCB400AB1D8CC624FF95B74E4 /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IQKeyboardReturnKeyHandler.m; path = IQKeyboardManager/IQKeyboardReturnKeyHandler.m; sourceTree = ""; }; + D03FDD61963B602D63D86983F58A4B56 /* Toast.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Toast.h; path = "Toast-Framework/Toast.h"; sourceTree = ""; }; + D04F3E0E968470EBB1EC4F70818FABF3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D083351E8A8E8A86A59BA3A3863723C4 /* AFNetworking-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AFNetworking-dummy.m"; sourceTree = ""; }; + D1192940DD792A9A986CB6606BFB24E8 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/NSButton+WebCache.m"; sourceTree = ""; }; + D143D5CBDD8A310F6BE8B5FE049E63B7 /* JSONKeyMapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONKeyMapper.h; path = JSONModel/JSONModelTransformations/JSONKeyMapper.h; sourceTree = ""; }; + D15A13B4D2D795A0C6BFDD4C3D657FCF /* IQTextView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IQTextView.h; path = IQKeyboardManager/IQTextView/IQTextView.h; sourceTree = ""; }; + D18BF93986D1392783B2FEBA0B4EEBE5 /* TTTAttributedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TTTAttributedLabel.h; path = TTTAttributedLabel/TTTAttributedLabel.h; sourceTree = ""; }; + D1AF018F0E0542900564BFAF307755AD /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; }; + D1C4ECF2FBF4E01A9207EE8FD4F3FF66 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + D1FD9AB8D8A0F476AA2FFFB0AF73984A /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MJRefresh.h"; path = "MJRefresh/NSBundle+MJRefresh.h"; sourceTree = ""; }; + D2C3B4A8303BF777A59CF2BAC331C8B6 /* SocketPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketPacket.swift; path = Source/SocketIO/Parse/SocketPacket.swift; sourceTree = ""; }; + D4BFC19B6137B925C0EDE4EBABA27FC7 /* FMDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabase.m; path = src/fmdb/FMDatabase.m; sourceTree = ""; }; + D526289C8F52F38595B594AF6ED917FA /* SDWebImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageGIFCoder.m; path = SDWebImage/SDWebImageGIFCoder.m; sourceTree = ""; }; + D58D416D0D907E75F8F25DBC31A8F2A0 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalHeader.h; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.h; sourceTree = ""; }; + D6CDF2935BA2A5F043D6242F45854A06 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFSecurityPolicy.h; path = AFNetworking/AFSecurityPolicy.h; sourceTree = ""; }; + D7AFFE638A1D3629C5C2E838084B7CB7 /* UITableView+FDTemplateLayoutCell.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "UITableView+FDTemplateLayoutCell.xcconfig"; sourceTree = ""; }; + D82A606DAFFFB4961C3B9C2FA8505535 /* SocketAckEmitter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketAckEmitter.swift; path = Source/SocketIO/Ack/SocketAckEmitter.swift; sourceTree = ""; }; + D8509BE0EBE02FAB118A15EBE60C8E47 /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D887710C70848A5D7BBB59F3733FA591 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; }; + D8B941495F77E08AA9AD977942455F90 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + D917488C1503A8C83A348CD03817262E /* IQNSArray+Sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQNSArray+Sort.h"; path = "IQKeyboardManager/Categories/IQNSArray+Sort.h"; sourceTree = ""; }; + D9976EC54E15F0720C2031B0C2BE45A7 /* Bugly.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Bugly.framework; sourceTree = ""; }; + D9BDB47A250C4BB9FE058D907EC81077 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; + DA25A84A833228F9B77716016FCF329F /* FMDatabaseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseQueue.h; path = src/fmdb/FMDatabaseQueue.h; sourceTree = ""; }; + DB5CDE6B616CD12A18C278C6799A0094 /* Toast-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Toast-dummy.m"; sourceTree = ""; }; + DBF35F229F62DAFB1E3D7FA0942B6D8A /* UIImage+AFNetworking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+AFNetworking.h"; path = "UIKit+AFNetworking/UIImage+AFNetworking.h"; sourceTree = ""; }; + DC11B08B388CE3D8E34D3E0AC2E3B25C /* Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Compression.swift; path = Sources/Compression.swift; sourceTree = ""; }; + DCF6F5650FAA9B82ED6F665EAB1DE040 /* JSONHTTPClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JSONHTTPClient.h; path = JSONModel/JSONModelNetworking/JSONHTTPClient.h; sourceTree = ""; }; + DDC8D5C54CB2FA432E51D33F63299867 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateHeader.h; path = MJRefresh/Custom/Header/MJRefreshStateHeader.h; sourceTree = ""; }; + DDE1008593C16D5180F63ED51EC27802 /* Starscream.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Starscream.framework; path = Starscream.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DE39B5880E93ED7DB42C862E7B216691 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E03910B7599DBB9DE52BA6B580D5420C /* IQNSArray+Sort.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "IQNSArray+Sort.m"; path = "IQKeyboardManager/Categories/IQNSArray+Sort.m"; sourceTree = ""; }; + E08E7458F1940F20C0E1BBF7FDD0FDE7 /* SocketRocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SocketRocket.h; path = SocketRocket/SocketRocket.h; sourceTree = ""; }; + E20BA2B707DD3CA5BBBF617A38FCB880 /* LKDB+Mapping.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "LKDB+Mapping.m"; path = "LKDBHelper/Helper/LKDB+Mapping.m"; sourceTree = ""; }; + E2ED3BE7480909B51B50DE2998A28003 /* Socket.IO-Client-Swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Socket.IO-Client-Swift.modulemap"; sourceTree = ""; }; + E3206BC9B15475420835FF224D6604E1 /* UITableView+FDTemplateLayoutCellDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+FDTemplateLayoutCellDebug.m"; path = "Classes/UITableView+FDTemplateLayoutCellDebug.m"; sourceTree = ""; }; + E34D12543D1E0D6B0197D19F99328425 /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; }; + E3949679577E6689BFFF358B9518FE13 /* SSLSecurity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SSLSecurity.swift; path = Source/SocketIO/Util/SSLSecurity.swift; sourceTree = ""; }; + E43C0234304F095C027CA559CA4E9F0B /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoFooter.m; path = MJRefresh/Base/MJRefreshAutoFooter.m; sourceTree = ""; }; + E64BCF4BA39828C61CC26523596F36BC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E6841BB55B15555FACC1C2407F11D87A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E7A5DB8DF2295A90EB25F7E495E5F62B /* AFAutoPurgingImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = AFAutoPurgingImageCache.m; path = "UIKit+AFNetworking/AFAutoPurgingImageCache.m"; sourceTree = ""; }; + E84CE3A7FDCD3AE81A473F6C746504A2 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E860149186CE6E56BAAEE62CA5ABDF8E /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; + E88C81586D204E9EC5AB0CBFE3620057 /* JSONModel+networking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "JSONModel+networking.m"; path = "JSONModel/JSONModelNetworking/JSONModel+networking.m"; sourceTree = ""; }; + EAB6CB6F47D077D87B2488C5A7D01EE4 /* SocketEngineWebsocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketEngineWebsocket.swift; path = Source/SocketIO/Engine/SocketEngineWebsocket.swift; sourceTree = ""; }; + EAB909A57EFF13EAD51EF05B4F73395B /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUIViewController+Additions.h"; path = "IQKeyboardManager/Categories/IQUIViewController+Additions.h"; sourceTree = ""; }; + EC02366395598C42E28F51101028C3D3 /* SDWebImageImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageImageIOCoder.m; path = SDWebImage/SDWebImageImageIOCoder.m; sourceTree = ""; }; + EC74917D726BBCA053741855222BD20F /* UIView+Toast.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+Toast.h"; path = "Toast/UIView+Toast.h"; sourceTree = ""; }; + ECFAC79A556CD170296E2CF2FDE40919 /* UITableView+FDKeyedHeightCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+FDKeyedHeightCache.m"; path = "Classes/UITableView+FDKeyedHeightCache.m"; sourceTree = ""; }; + EEB3011FEE0FAEAB95CDBD6F94B6266A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EED26BAA73FE884C227E56BEB5E9D7C5 /* SRWebSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SRWebSocket.m; path = SocketRocket/SRWebSocket.m; sourceTree = ""; }; + EF79A7916BB6B36C2A83C99F45DDA1C3 /* UITableView+FDTemplateLayoutCellDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+FDTemplateLayoutCellDebug.h"; path = "Classes/UITableView+FDTemplateLayoutCellDebug.h"; sourceTree = ""; }; + EFC686D628AA3C2CFA30D354721530B4 /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; + F043DBEAB75100EC409BEDF3E58A8BC0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + F0A568A70445E76EE1B2DC6996139B64 /* AFNetworking-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AFNetworking-prefix.pch"; sourceTree = ""; }; + F270EF20130EC0714D627B3FC934F8B8 /* JSONModel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JSONModel.modulemap; sourceTree = ""; }; + F30327CFECF1D69BC51289B5CCC97712 /* SocketRawView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SocketRawView.swift; path = Source/SocketIO/Client/SocketRawView.swift; sourceTree = ""; }; + F426661253D1751C24C7C550B0DD3742 /* UITableView+FDTemplateLayoutCell-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UITableView+FDTemplateLayoutCell-umbrella.h"; sourceTree = ""; }; + F45B85ABF6C73FC46039EF4A3D28A28D /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+AFNetworking.m"; path = "UIKit+AFNetworking/UIWebView+AFNetworking.m"; sourceTree = ""; }; + F51B36454E6DCF580D43CCFCB03FC536 /* UITableView+FDIndexPathHeightCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+FDIndexPathHeightCache.h"; path = "Classes/UITableView+FDIndexPathHeightCache.h"; sourceTree = ""; }; + F57EAFC722DC8A1A5E24FC9DC97959E0 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = ""; }; + F665835060F250C5E831A32121C45B5F /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; }; + F6D2D8438420EB7A9186D08660AD7BD6 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + F6F9763802AC8D472A1FFBF6A867B33D /* JSONModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = JSONModel.m; path = JSONModel/JSONModel/JSONModel.m; sourceTree = ""; }; + F73DA4A37A5395D46FB30B61FCEADF0E /* SecurityEnvSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SecurityEnvSDK.framework; path = thirdparties/SecurityEnvSDK.framework; sourceTree = ""; }; + F75D6F9A7E4B4F68F38B9CF845506873 /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabaseAdditions.h; path = src/fmdb/FMDatabaseAdditions.h; sourceTree = ""; }; + F76496371A94D04C6DEB3EBEEB62540B /* UITableView+FDTemplateLayoutCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+FDTemplateLayoutCell.h"; path = "Classes/UITableView+FDTemplateLayoutCell.h"; sourceTree = ""; }; F8242C88C595688B579B2B397424ADC8 /* Pods-GIGA-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GIGA-resources.sh"; sourceTree = ""; }; - F8294F939D42D73CD001D5768B48E37E /* Toast-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Toast-dummy.m"; sourceTree = ""; }; - F910EF56BD99E5E61575785D13E304E2 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; - F9DAFA1278BE68723695D507CEDC7D1C /* FMResultSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMResultSet.h; path = src/fmdb/FMResultSet.h; sourceTree = ""; }; - FA55F0051E01EDB4CA0293C6E7AA0B30 /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "IQUITextFieldView+Additions.h"; path = "IQKeyboardManager/Categories/IQUITextFieldView+Additions.h"; sourceTree = ""; }; - FAC5C4AB91E3784CBF6873F18B5036F9 /* LKDBHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = LKDBHelper.m; path = LKDBHelper/Helper/LKDBHelper.m; sourceTree = ""; }; - FADD79F89191D8B79891CF6D6F5EF64B /* Toast-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toast-umbrella.h"; sourceTree = ""; }; - FAE543B6441005A5CB541D84A212B95B /* LKDBHelper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LKDBHelper-dummy.m"; sourceTree = ""; }; - FBC802097D43781825C0AB6255F237B5 /* FMDatabase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FMDatabase.m; path = src/fmdb/FMDatabase.m; sourceTree = ""; }; - FC70088183A39614A3A3BAD11F21A7EC /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; - FCB338378A6A733051501E8BA0537EF5 /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; + F8A4A704B12B0E5FCD4942063E450299 /* AFNetworkActivityIndicatorManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkActivityIndicatorManager.h; path = "UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h"; sourceTree = ""; }; + FAA85730E7ECFBD1CCEB7260FF00F4C2 /* YTKKeyValueStore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YTKKeyValueStore-umbrella.h"; sourceTree = ""; }; + FB8C8FEB6717D66F14136EF50C148280 /* NSObject+LKModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+LKModel.h"; path = "LKDBHelper/Helper/NSObject+LKModel.h"; sourceTree = ""; }; + FBF2BC661F74DEDD633BF2098800BCB7 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = ""; }; + FC329F809B6649CDA966EB263EF68FB2 /* FMDatabasePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FMDatabasePool.h; path = src/fmdb/FMDatabasePool.h; sourceTree = ""; }; + FC45B739819A1904D554E79520E207DA /* MJRefreshComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshComponent.m; path = MJRefresh/Base/MJRefreshComponent.m; sourceTree = ""; }; FD113136C3BE7E4822B80A29F3DC5E42 /* Pods-GIGA-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-GIGA-dummy.m"; sourceTree = ""; }; - FDF9999D62DF076C94D5C3F4D3A8B371 /* IQKeyboardManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManager.modulemap; sourceTree = ""; }; - FE77E40C189AA177444DEBBD0B08DCCA /* UITableView+FDKeyedHeightCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+FDKeyedHeightCache.m"; path = "Classes/UITableView+FDKeyedHeightCache.m"; sourceTree = ""; }; - FFAE6EC09F0505803E8392F2F6D4F3CC /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; + FE403E58475EF64EF393ABA0E2EC5EC1 /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = IQKeyboardManager.bundle; path = IQKeyboardManager/Resources/IQKeyboardManager.bundle; sourceTree = ""; }; + FEAAD1709AA2F9B0C1E7F611FA261B98 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFHTTPSessionManager.h; path = AFNetworking/AFHTTPSessionManager.h; sourceTree = ""; }; + FED1ACDE4726A20CC2932BCDC66F5787 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + FEE4923BAFE446FDB51B8375C4DA4869 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + FF2567DE02E414DB1FBB3C77E2FD44B1 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + FF6734BB50A15C4D259D3C14C0F70697 /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 081BAF7030A01DB5133B8E011BB888BF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 484CBC296B6A059C5C9EE6DE7FF1FB67 /* FMDB.framework in Frameworks */, + 89BC1F89CAF0D75A3C9024861100E79C /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 092CD07E711BB27E0075AC3ADF20915B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C2D7BA9B1354C36D28390C1502A35D91 /* CFNetwork.framework in Frameworks */, + 6FEA8F22AD821ECF8E74615FD8FE7427 /* Foundation.framework in Frameworks */, + 05F4742E8E81FFB81BD1F1DFA9C63484 /* Security.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0F13FDE48FAA625D37D626F69DA46819 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -844,15 +962,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2F6AD2793DCCAC8655F20980C31F5B6E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F38B93D66E5151DC14AA52242858DDCB /* FMDB.framework in Frameworks */, - D2AFDC9DBB18F68AD5B7EE3A1A951D68 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 59DA24E1BFBF4DF2381ED2E0EE6964A0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -873,6 +982,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 718E88DD1843C285DD139D86BA77F7FB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 059ACAAB4FD2944460415CD3FD7A15F0 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 77A4F3ABB18A1CBD901A6D7F4564A99A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -882,6 +999,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 77DFA32B5A12FCE9A60389FE17A7F94B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8A318F056072D4715B58CBDC1A6ACB4C /* Foundation.framework in Frameworks */, + 78874F1F850E4AEDB8D05955D1736A6F /* ImageIO.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 81F903C6F2439B4DE4CACDA906440A2D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 30D4DCE78AC7DF54F68F633B1F85B131 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8944C0B131AF550CF6CC8073435E22F2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -893,22 +1027,29 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 89CB805BF93CBFFF9178240B3DA62840 /* Frameworks */ = { + 8CECDEE34E27741BF2EF71AF71CDA5FC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DBD3B4544D8320D0D83479AEB921D088 /* CFNetwork.framework in Frameworks */, - C6CCF6FAC5899D681F921B1917ECD40E /* Foundation.framework in Frameworks */, - B690948AF82E335069677012C9793C0A /* Security.framework in Frameworks */, + 19B84B8D631A49492C1DBBE00A7AF097 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 99BF636A9F3AC96472168608CED7A74E /* Frameworks */ = { + 924592AD76A1CAF35F2E54F909E21BCC /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BE342AF4C9583018FBDF18A52FAE927A /* Foundation.framework in Frameworks */, - 48B6FAC56A1A05850F229702C850CDB1 /* QuartzCore.framework in Frameworks */, + 1CA7812A0C2F63BC21BADC1DE3C1F30E /* Foundation.framework in Frameworks */, + ED5DD9E7F5A2A78F8A992072C079515F /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 975519A8DD8D28FC91AEE205A5ED5A3F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 62DBE4193DF3FD638FEA517155B308B9 /* Foundation.framework in Frameworks */, + 41E9E4524E285B0DC1334FB06772E4A2 /* Starscream.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -921,19 +1062,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B8E0CDE9D6B78B63BC6132265D5D95E0 /* Frameworks */ = { + E7CEC03E6403E87DB68C93D8409CC6A1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F53E65E5CA956894846C5A6969536F83 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CCB6C94A3B7F7AF612CA6128178B688A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2E2BA6CBA0D6349BF6CF9E13753D5DBD /* Foundation.framework in Frameworks */, + F03896D18D58C5B06D4485978A8E2660 /* CoreGraphics.framework in Frameworks */, + B7D82E1749DAE5FF0A400678011DECD6 /* CoreText.framework in Frameworks */, + F4FF072DD1C28A7736B8D1DDC839E424 /* Foundation.framework in Frameworks */, + 72BC0D5210ABDE6396CC75FA6A823FEE /* QuartzCore.framework in Frameworks */, + E3BB92FE44D2DFF2132BC27C70298513 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -945,15 +1082,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F43DF7F5860C5353DC417595794C69DB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 41BA2631080F7FE9052001D51A5104E7 /* Foundation.framework in Frameworks */, - 2B66A577AE7687E6001469BF9F99CA5B /* ImageIO.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; F6EC657AC5A7BEE9A3D288B582F4C5E9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -963,116 +1091,132 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F8B6CBF4BE519D592974034E0A5D06DA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DA75132AF02110EA8FED838245F245B3 /* CoreGraphics.framework in Frameworks */, - FA194D9EFAB084FD2FF27BF01F7B30DD /* CoreText.framework in Frameworks */, - 13DEE8E5A10BE2160E85D5B339446521 /* Foundation.framework in Frameworks */, - CBA3B98ED2708713025BFD6F244D419F /* QuartzCore.framework in Frameworks */, - 28D57235593277A82B18D9E2B3B4B5ED /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 03CF7294D96317716FC201C235556DF9 /* Frameworks */ = { + 013670849AE4267794D106DE6D68390F /* UMCCommon */ = { isa = PBXGroup; children = ( - 5103E14F2D6698E3B71FD14AD922ED2C /* Bugly.framework */, + D2A62A7B2591E116CD2CB1E591BABAED /* Frameworks */, + ); + name = UMCCommon; + path = UMCCommon; + sourceTree = ""; + }; + 0664FE391669606C208EA556EBDD28A5 /* standard */ = { + isa = PBXGroup; + children = ( + 670CF36062CD3ECFF8C5C5AABE213403 /* LKDB+Mapping.h */, + E20BA2B707DD3CA5BBBF617A38FCB880 /* LKDB+Mapping.m */, + C98EC4CD7AD6C86DF803FE3B76FCED1A /* LKDBHelper.h */, + 2C765CC91B74812227DCE13319608707 /* LKDBHelper.m */, + 00DBB0CB01217AA64958D2E4F6059B2B /* LKDBUtils.h */, + 8A60255EA01616D51B066606B28E168C /* LKDBUtils.m */, + 2E0EDFAA630F61D5988162BCAB78B5FA /* NSObject+LKDBHelper.h */, + BE39E881910D30BFF4517A4177625677 /* NSObject+LKDBHelper.m */, + FB8C8FEB6717D66F14136EF50C148280 /* NSObject+LKModel.h */, + 56C7B870DA133902EFBA936EF978F45C /* NSObject+LKModel.m */, + ); + name = standard; + sourceTree = ""; + }; + 0A1A7675F7A7DD5E2EA307B7ECB550F9 /* Resources */ = { + isa = PBXGroup; + children = ( + FE403E58475EF64EF393ABA0E2EC5EC1 /* IQKeyboardManager.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + 0B18D1637A92C37E605C2538A55FC3F5 /* Support Files */ = { + isa = PBXGroup; + children = ( + 9D4B692446F5B3A848158599E0258088 /* Info.plist */, + 6B7E3C04DF72633F51BBA78A08B8EF61 /* IQKeyboardManager.modulemap */, + 206777951591DDC2438D5F454A71CB8A /* IQKeyboardManager.xcconfig */, + 3DCB0BEBBAC1E47DDBB977778143CC25 /* IQKeyboardManager-dummy.m */, + 96351089BE56F809A66D4165730BDD76 /* IQKeyboardManager-prefix.pch */, + BDBB82B0577F0513EA40C059469FCAD4 /* IQKeyboardManager-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/IQKeyboardManager"; + sourceTree = ""; + }; + 0C0EA7F3A802D825B66C8E23BA35A161 /* Support Files */ = { + isa = PBXGroup; + children = ( + 9DBF7AFC604013C37D42D03D54C2B42A /* FMDB.modulemap */, + 053338AFC5DFA5DC334E688DA16499C6 /* FMDB.xcconfig */, + BC5D2DFF79A26EDAE2E4229FA02DE3ED /* FMDB-dummy.m */, + 793A3F963E71FCAB028E34329D122155 /* FMDB-prefix.pch */, + 9ACEC95F7E6261C5C5E02E54CAFEA523 /* FMDB-umbrella.h */, + CF27FA729B2DA26B0CE791FB3E90BC05 /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/FMDB"; + sourceTree = ""; + }; + 0E2DC586C78EE009373398774B584AAB /* WechatOpenSDK */ = { + isa = PBXGroup; + children = ( + B9B3DFA903870C5127C0EB7DCA2CD096 /* WechatAuthSDK.h */, + 65743645C0D98AA50085F327714FEF8F /* WXApi.h */, + 05657BFF7C0A29CF6F1BE61DB6523EC4 /* WXApiObject.h */, + 19001728FBAA40E025B61CB70702C2CE /* Frameworks */, + ); + name = WechatOpenSDK; + path = WechatOpenSDK; + sourceTree = ""; + }; + 0EF92FF4BFE7198041C98370B38AC200 /* SocketRocket */ = { + isa = PBXGroup; + children = ( + E08E7458F1940F20C0E1BBF7FDD0FDE7 /* SocketRocket.h */, + CA697CD49B3E51073391142FA485D827 /* SRWebSocket.h */, + EED26BAA73FE884C227E56BEB5E9D7C5 /* SRWebSocket.m */, + 61689A30C6F58A44CA0916A9797C0BC4 /* Support Files */, + ); + name = SocketRocket; + path = SocketRocket; + sourceTree = ""; + }; + 11B681A4FA849059ADA6D37CE843A314 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F73DA4A37A5395D46FB30B61FCEADF0E /* SecurityEnvSDK.framework */, + 000DFBF02B432D3298058B56ED47BA1B /* UTDID.framework */, ); name = Frameworks; sourceTree = ""; }; - 05DF64B57727F2CA79DB6B496A8A23B5 /* Support Files */ = { + 18E1175011CBB9572369C6CA9BE3815C /* Starscream */ = { isa = PBXGroup; children = ( - 5F22AE8AE1EF0647FA45689B3ACC7919 /* Info.plist */, - 519F57253AF766AA287FE22C0358569E /* UITableView+FDTemplateLayoutCell.modulemap */, - 35EAE74E5132A23FB8A5DEAD9F2ED8FE /* UITableView+FDTemplateLayoutCell.xcconfig */, - 4A34186A817DA32CDBD89AFBC93D1D11 /* UITableView+FDTemplateLayoutCell-dummy.m */, - 3E320CFF5A26D0B7EF5E7CAAAED1436F /* UITableView+FDTemplateLayoutCell-prefix.pch */, - 22517B11B58DA83A67CA898044996C48 /* UITableView+FDTemplateLayoutCell-umbrella.h */, + DC11B08B388CE3D8E34D3E0AC2E3B25C /* Compression.swift */, + 03EF23265306A2A5CFD07B28F6BC0D66 /* SSLSecurity.swift */, + 2431F4B5AE230C938093F4ACC541DF9C /* WebSocket.swift */, + C7192BD386630DD39E6C218B6259B956 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/UITableView+FDTemplateLayoutCell"; + name = Starscream; + path = Starscream; sourceTree = ""; }; - 06A5CCE86291D4A16DD4F98D64FC9AD1 /* Toast */ = { + 19001728FBAA40E025B61CB70702C2CE /* Frameworks */ = { isa = PBXGroup; children = ( - 8FF9308ACC942E298BCB3BF0037F3118 /* Toast.h */, - 1A12FEC4AC04980F619172CCE478A56E /* UIView+Toast.h */, - 493ED01D268951EFE8437422CE1A5444 /* UIView+Toast.m */, - 5BA4DE71675E92388139AA1E78B17883 /* Support Files */, + C3CE92694B37B4E144AB7C2A657FB9EA /* libWeChatSDK.a */, ); - name = Toast; - path = Toast; + name = Frameworks; sourceTree = ""; }; - 0C54B790D18B31F0179A569CF8584ABE /* JSONModel */ = { + 1B05F3E81A737E1A62ACE47B8D59B181 /* JPush */ = { isa = PBXGroup; children = ( - BDFAE07701D24D6F3E4A296D12634988 /* JSONAPI.h */, - A450BEF04E62AC608AA5CBCC1BA0679E /* JSONAPI.m */, - 556C4D983FC07E4A0F96E7D5FEA1BD0C /* JSONHTTPClient.h */, - 8CECA89C4FBBD5A50A75818DB7C8FF93 /* JSONHTTPClient.m */, - C1DC7306DAD63B2C06913DF8915C00B1 /* JSONKeyMapper.h */, - C904CE0D4C99B3A972A0204B932BDF88 /* JSONKeyMapper.m */, - C30BDD3ACA5916852637177B87F0E742 /* JSONModel.h */, - 26EA839B483358EFD4DD98F022DF89F5 /* JSONModel.m */, - 2CB785BAFD8B89858D78ECDC291AE3EF /* JSONModel+networking.h */, - 0B43D1D56644CC2A129FBB357B026F00 /* JSONModel+networking.m */, - 99CDCD75BF37271A6D3421DE2C02322F /* JSONModelClassProperty.h */, - E64EECA1EB63A11476467B8C6180D50B /* JSONModelClassProperty.m */, - 66642E4EA3BCCAA25A839A82CE5DC347 /* JSONModelError.h */, - 3EF6A9271273889CACA3DFD0AC7D1EF5 /* JSONModelError.m */, - 2371B715BAE7B94DEDE98106F4ADEFDC /* JSONModelLib.h */, - CF144683787E1EC724F1B8EE18CC50AD /* JSONValueTransformer.h */, - 23810A789FDEE049028B453DDB1B5739 /* JSONValueTransformer.m */, - AB69C68D4733A53B6E8A13E3AD3FB8C0 /* Support Files */, + 0B853C173AC47459374FA5127503AA4D /* JPUSHService.h */, + F3CDD0BE903CBFB244CDB880490A04EC /* Frameworks */, ); - name = JSONModel; - path = JSONModel; - sourceTree = ""; - }; - 0D614A495680244C7AB5FA376D3159DA /* Support Files */ = { - isa = PBXGroup; - children = ( - C9C5E0BB0EAF52F6A2E2928FAA02151A /* Info.plist */, - 863D28343362DBB320CBC7ED8450507F /* TTTAttributedLabel.modulemap */, - B724EFE1A35CEE6EE7D804EBC9E9B647 /* TTTAttributedLabel.xcconfig */, - BD34472D8257BD1D09F9DB765856779B /* TTTAttributedLabel-dummy.m */, - 6AAC0206AB475617D67EA2D4D4D6EB74 /* TTTAttributedLabel-prefix.pch */, - 12EC34C8D078C44D8BA1A18B5017ADD9 /* TTTAttributedLabel-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/TTTAttributedLabel"; - sourceTree = ""; - }; - 0E3DEEB65D8DA0F2EF5BB320D6194C96 /* Reachability */ = { - isa = PBXGroup; - children = ( - 95CC04582873D1BB76490CE97B4C1291 /* AFNetworkReachabilityManager.h */, - CA54DD4E3D9B061E47DABD67A6F11AD6 /* AFNetworkReachabilityManager.m */, - ); - name = Reachability; - sourceTree = ""; - }; - 0FACA4ECE57C0C95842E870A8AD9D913 /* Support Files */ = { - isa = PBXGroup; - children = ( - 877F51AEC59AA879073B3A1738B03844 /* Info.plist */, - 8EF9BC4C577E966B63ED1642D0C92DEF /* SDWebImage.modulemap */, - 52C76AE5C4FEB2823CB9B6FA40CB9312 /* SDWebImage.xcconfig */, - BEE46E79F1F0C05155FC29045B05E080 /* SDWebImage-dummy.m */, - B5E7154402841861BD73ACFD7730BC01 /* SDWebImage-prefix.pch */, - 8DE3A6F87CE579A6044EEA9D73BE3961 /* SDWebImage-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = JPush; + path = JPush; sourceTree = ""; }; 204D78156C2EC3DBC444EB544EC0A6C9 /* Targets Support Files */ = { @@ -1083,806 +1227,826 @@ name = "Targets Support Files"; sourceTree = ""; }; - 226A624819850261870B6E2EABBA90E5 /* Support Files */ = { + 2205098B27469BCD7B87D25D45F35101 /* Support Files */ = { isa = PBXGroup; children = ( - B0C2F502826F5127747EE7F967917F96 /* Info.plist */, - FDF9999D62DF076C94D5C3F4D3A8B371 /* IQKeyboardManager.modulemap */, - 61615A4BA5FD1E80D97AD163695F7253 /* IQKeyboardManager.xcconfig */, - 94EC1B15D0F40FAA8E09F162D89550A3 /* IQKeyboardManager-dummy.m */, - D2FB2AA6C3C909BEC43521A619E7922C /* IQKeyboardManager-prefix.pch */, - A9E4181140F064FCE4526B441CF1397D /* IQKeyboardManager-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardManager"; - sourceTree = ""; - }; - 228DD30217CDBCFAD7E7CA2BA4AEA429 /* Support Files */ = { - isa = PBXGroup; - children = ( - BC569107A5A7CCA3A1EAAFD5146B4D61 /* FMDB.modulemap */, - 4CB26BDB578D1FBADD2EF6665F4C62CC /* FMDB.xcconfig */, - 528094F23A810144F82ECBADEBE77807 /* FMDB-dummy.m */, - 6F050EE77D3BFB01841F16C819A88DBD /* FMDB-prefix.pch */, - 50E9C0028FD730D0FAFC7811E74C9A78 /* FMDB-umbrella.h */, - 79488120495FF1488414D53348036A14 /* Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/FMDB"; - sourceTree = ""; - }; - 25E9AB5ED625E0BB222A6E400FA1FC06 /* SDWebImage */ = { - isa = PBXGroup; - children = ( - 640CA83F8C1F7A73EC621CFE8D2A7840 /* Core */, - 0FACA4ECE57C0C95842E870A8AD9D913 /* Support Files */, - ); - name = SDWebImage; - path = SDWebImage; - sourceTree = ""; - }; - 3028CA09137356289969750BEE2C6877 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 65437C30FADEF5D2F96F79C2F427D805 /* libjpush-ios-3.1.0.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 3462FBC925208A4E2D068AE34243BA0F /* Pods */ = { - isa = PBXGroup; - children = ( - CA822960B097DCA9E4BE7C8C24AA75C2 /* AFNetworking */, - CE5138699B31F14078F7F694C28E973A /* Bugly */, - 45CA82AEDB4E06C53E72EFF4E94B85BA /* FMDB */, - CC653850EC41F033E4A77415895D6E22 /* IQKeyboardManager */, - 7316D365B4D0503AFD7E4FC559ED6DA2 /* JCore */, - A0A790EF8A87147F98DDEF211744CFF7 /* JPush */, - 0C54B790D18B31F0179A569CF8584ABE /* JSONModel */, - ADD3009A7D53F79CC090C9CA16A2630B /* LKDBHelper */, - F3A51B0E7B4040E650A6BCF7D5A4C457 /* Masonry */, - E1865480BAF1C01B525CD6A102187DF3 /* MBProgressHUD */, - 5C4C9D0A3BB7F6A6780845DEA6CC3724 /* MJRefresh */, - 949F94C11E1D4AB1FC129B603A6E251C /* NJKWebViewProgress */, - 25E9AB5ED625E0BB222A6E400FA1FC06 /* SDWebImage */, - 928268AEB74A23825EDCF31FD4C740EF /* SocketRocket */, - 06A5CCE86291D4A16DD4F98D64FC9AD1 /* Toast */, - A7718A347318FF9A0224F3629433DA16 /* TTTAttributedLabel */, - 650DC7D6CDC411B4C53EAAA636B91AA1 /* UITableView+FDTemplateLayoutCell */, - C34A43A43F16DD9F0B39A5D9BB41B514 /* UMCAnalytics */, - 5DB309E50ECEE6CC9AA4529919286686 /* UMCCommon */, - 3EA071074DAFEED69B636C36C84EF2B7 /* UMCSecurityPlugins */, - 737D51AE13E7F70099DE35CCC957A254 /* WechatOpenSDK */, - C32FC395EAE1634C88483D598DFD1E52 /* YTKKeyValueStore */, - ); - name = Pods; - sourceTree = ""; - }; - 3AE3241CC5FD14B6588C23BA689ECAEE /* Frameworks */ = { - isa = PBXGroup; - children = ( - E87FA83DF490428DB9FAFE0D133870B3 /* libWeChatSDK.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 3EA071074DAFEED69B636C36C84EF2B7 /* UMCSecurityPlugins */ = { - isa = PBXGroup; - children = ( - 7DF9D56403A3D1A4DD06CA5F7F3BE79D /* Frameworks */, - ); - name = UMCSecurityPlugins; - path = UMCSecurityPlugins; - sourceTree = ""; - }; - 422B949EEADCCDF0B2081EE5FE485349 /* Support Files */ = { - isa = PBXGroup; - children = ( - 09C6DCB28ECDE03D4ECA2F31475F95AF /* Info.plist */, - 21F2382C2A65EA556D25A49B6D6535FC /* Masonry.modulemap */, - 4E23A195A0FEDD4FE55DB45C9D24DB0D /* Masonry.xcconfig */, - 83AD8CF369CC62633AE1ADE5659E862A /* Masonry-dummy.m */, - A817B0BECEB40A1FE6024507A2676B7C /* Masonry-prefix.pch */, - 71AACD347E2FAB04BD15B4A22F004B1E /* Masonry-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/Masonry"; - sourceTree = ""; - }; - 43F5D93C52252E6D6A07B4DEA611C147 /* Support Files */ = { - isa = PBXGroup; - children = ( - 2D7695CACB080C347432CF89DD0CB160 /* Info.plist */, - 4DB1EFC99446AEF9EBFFE9033CB76382 /* MJRefresh.modulemap */, - 70CE012FB313B9D041F010EDCACCC25C /* MJRefresh.xcconfig */, - 11B559F8C10A420C414C457D38505A02 /* MJRefresh-dummy.m */, - F0C27FE9D74CE4CCBDD75DDC47C44240 /* MJRefresh-prefix.pch */, - B22A920A2907F15159CFD64F49212089 /* MJRefresh-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/MJRefresh"; - sourceTree = ""; - }; - 44C9F62729344D8522F70659CE762D7A /* standard */ = { - isa = PBXGroup; - children = ( - B4BD72CEB9C646B8351A8D0B3224CE48 /* FMDatabase.h */, - FBC802097D43781825C0AB6255F237B5 /* FMDatabase.m */, - E0BE28AB9BEEE3F2DE5CA5ADF0754DE9 /* FMDatabaseAdditions.h */, - EA185D39D4742C90EF4A71ED0B6FF30D /* FMDatabaseAdditions.m */, - 0DA743D9F60E293701E4F1E9F04891A6 /* FMDatabasePool.h */, - 0A2A14D56BC061060400295FC21A0D56 /* FMDatabasePool.m */, - 87A6322F866A874D2B0E0CA9BAAE4997 /* FMDatabaseQueue.h */, - 128714F26358AB64EBF20321538BB9E8 /* FMDatabaseQueue.m */, - 7A270740B3E3865AC746380362B6CEBC /* FMDB.h */, - F9DAFA1278BE68723695D507CEDC7D1C /* FMResultSet.h */, - 136A22223B193531C622CF061DC7AAB4 /* FMResultSet.m */, - ); - name = standard; - sourceTree = ""; - }; - 45CA82AEDB4E06C53E72EFF4E94B85BA /* FMDB */ = { - isa = PBXGroup; - children = ( - 44C9F62729344D8522F70659CE762D7A /* standard */, - 228DD30217CDBCFAD7E7CA2BA4AEA429 /* Support Files */, - ); - name = FMDB; - path = FMDB; - sourceTree = ""; - }; - 478867C3117F0540081089FD042DE4A6 /* Support Files */ = { - isa = PBXGroup; - children = ( - F1C4A03B34E51C307B83F802829ACF75 /* Info.plist */, - 2DC5F73CA7ED6B8255495282877B1CDF /* LKDBHelper.modulemap */, - 9CC9FBF8AF1D72E7C9B5EC4112586103 /* LKDBHelper.xcconfig */, - FAE543B6441005A5CB541D84A212B95B /* LKDBHelper-dummy.m */, - 6326A03C1BF89BE8A8ADC2DB26A46117 /* LKDBHelper-prefix.pch */, - 64A478D39C0282C84C3724E7F5E28E1C /* LKDBHelper-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/LKDBHelper"; - sourceTree = ""; - }; - 544FB77D6D6BCB080AE979EA734CA3D9 /* Products */ = { - isa = PBXGroup; - children = ( - 8126B93DD8D474B90337F38D978130C5 /* AFNetworking.framework */, - 8E5DA37AC55ADD979E448DB4CCE99D62 /* FMDB.framework */, - 581983071B50ED00E03BBC3807ED5DEB /* IQKeyboardManager.framework */, - 342C32AD5BF61779D426BDA9F82DEDE5 /* JSONModel.framework */, - 961B9982B287A938D23CE983804F2FC5 /* LKDBHelper.framework */, - 0D6854C9307CDCC712B55D7EC927935E /* Masonry.framework */, - 4738089B8361F3D3AB1BCED704498464 /* MBProgressHUD.framework */, - 2312E64F77FC628042C95F6F42AC9204 /* MJRefresh.framework */, - 4AFDFD2D9A90BF4BB9DD861020532888 /* NJKWebViewProgress.framework */, - 1DB7026C750DB559A03CDBE2742DC1B3 /* Pods_GIGA.framework */, - E4811330CBE4D8F15CD07A0E6B28196A /* SDWebImage.framework */, - 9E43D4748ACBDE3E7E8E94CCE6225EFE /* SocketRocket.framework */, - A7319007CA14024A0376E223A1A702CB /* Toast.framework */, - A57F7F0A6AB5550D6C39E86241A2C3B4 /* TTTAttributedLabel.framework */, - B02F00E2B5DA269DDA1D546D77FD45BA /* UITableView_FDTemplateLayoutCell.framework */, - B72C980E30572DC8C26C148404219FE9 /* YTKKeyValueStore.framework */, - ); - name = Products; - sourceTree = ""; - }; - 5BA4DE71675E92388139AA1E78B17883 /* Support Files */ = { - isa = PBXGroup; - children = ( - B1C6BDFC9D2074B8540E2D091C7064B6 /* Info.plist */, - B9D5F8B6496946C17FD942466B37CB69 /* Toast.modulemap */, - 7AF17F320B7EE79DE46A5FD89542A6FA /* Toast.xcconfig */, - F8294F939D42D73CD001D5768B48E37E /* Toast-dummy.m */, - 522AF73450C4F25BD56BF7B9DD3331DD /* Toast-prefix.pch */, - FADD79F89191D8B79891CF6D6F5EF64B /* Toast-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/Toast"; - sourceTree = ""; - }; - 5C4C9D0A3BB7F6A6780845DEA6CC3724 /* MJRefresh */ = { - isa = PBXGroup; - children = ( - 8C55C4FE677FBA2E2EE1ECA52C17F704 /* MJRefresh.h */, - F5398B339844CC0409DB141FCCB610A7 /* MJRefreshAutoFooter.h */, - E003B301E7A1D3B32B0A919DC1E29C50 /* MJRefreshAutoFooter.m */, - 24D4C804AB6F0E6DDCF8B55ADFC4D8D6 /* MJRefreshAutoGifFooter.h */, - 64D250E761757385549317D0323E15F8 /* MJRefreshAutoGifFooter.m */, - 69B94B8350B08947B04432EBD738A67E /* MJRefreshAutoNormalFooter.h */, - 364ED876726D73807338B4A2ECF8B6B0 /* MJRefreshAutoNormalFooter.m */, - 63B53BB333164EC8865782883113A392 /* MJRefreshAutoStateFooter.h */, - A452045F9BCD3C292BCA0C743F5F3398 /* MJRefreshAutoStateFooter.m */, - A6DAA9F15075836671C4C398A8994B11 /* MJRefreshBackFooter.h */, - 0398DAF58BE8B2C600A504E373600B1A /* MJRefreshBackFooter.m */, - 6E992B127A8C1F809FBDB8A1D963EFEF /* MJRefreshBackGifFooter.h */, - 9BA0F8DC6E0D3BF06F7492AF4FEF3F56 /* MJRefreshBackGifFooter.m */, - 13410BDA0941AC0B1382EFB64C8098AE /* MJRefreshBackNormalFooter.h */, - D356016E65FB61F9D8CA34E66D670FCC /* MJRefreshBackNormalFooter.m */, - A838FA1796E67C873CDB58A820F09C82 /* MJRefreshBackStateFooter.h */, - 359462AAEF1BA3B0A3D0F5F8F20597D6 /* MJRefreshBackStateFooter.m */, - 3C2FA9E010EEA6319AA9CB2D4EB45645 /* MJRefreshComponent.h */, - 420515E1248819A97F4A79591B9042F0 /* MJRefreshComponent.m */, - 99A4C46E61C7E0653C771E82AD1B7E32 /* MJRefreshConst.h */, - F1D7AECAD05D08E3631A38401A2192AA /* MJRefreshConst.m */, - 3EF64E3326F777690080488B4CEEF3B3 /* MJRefreshFooter.h */, - 993673BBDA2B45E5547B443BC8D629D7 /* MJRefreshFooter.m */, - 71D681F6D9A55D54BCDFE8E749CC7CA9 /* MJRefreshGifHeader.h */, - AF0DA85B8E4EC528A3D60142D163F459 /* MJRefreshGifHeader.m */, - E52F56D34181DD1D8127F30E9C8A0242 /* MJRefreshHeader.h */, - BDB3FA188B77C4C5AC4EBF7C4EB23690 /* MJRefreshHeader.m */, - 905FA653B2C53E8A919A501A0001FC8E /* MJRefreshNormalHeader.h */, - 8D09F0EB6C4FCB74F8775B09136E55A4 /* MJRefreshNormalHeader.m */, - C524A0E50AC16EF76BC09CF266FA6422 /* MJRefreshStateHeader.h */, - B9F2079EE23F230DEA680345C387F6C1 /* MJRefreshStateHeader.m */, - 6D33B1102BC63ECAFE7BDCB58DAB42F6 /* NSBundle+MJRefresh.h */, - 34793A0BF14919D4B2F3731DCA5782E1 /* NSBundle+MJRefresh.m */, - EEF99048C22BEC61A2C9AD4AD0432D06 /* UIScrollView+MJExtension.h */, - EE1D1FDA83027C75229F19DD43194D5D /* UIScrollView+MJExtension.m */, - 87A97A67BA4A937C5BD37DB69E3934B1 /* UIScrollView+MJRefresh.h */, - B832D5C26DFD510FD9A7A2BAF0201A58 /* UIScrollView+MJRefresh.m */, - 0F2AE4A60765DF1A0A41DE1A3935F1D4 /* UIView+MJExtension.h */, - 0D01693FF69A913D36FFA9A8EC1C1D93 /* UIView+MJExtension.m */, - 860006E26B914B66BE397F7DFFE7B494 /* Resources */, - 43F5D93C52252E6D6A07B4DEA611C147 /* Support Files */, - ); - name = MJRefresh; - path = MJRefresh; - sourceTree = ""; - }; - 5D7877A56330D68E9B32C62F952C37C2 /* Security */ = { - isa = PBXGroup; - children = ( - E20DE1DF19E878ED7DF4D788E2916EB9 /* AFSecurityPolicy.h */, - D659CC3CF19E6BDAD644FB8B044B48F1 /* AFSecurityPolicy.m */, - ); - name = Security; - sourceTree = ""; - }; - 5DB309E50ECEE6CC9AA4529919286686 /* UMCCommon */ = { - isa = PBXGroup; - children = ( - F69DFF2722014995F8918FD2D2074633 /* Frameworks */, - ); - name = UMCCommon; - path = UMCCommon; - sourceTree = ""; - }; - 640CA83F8C1F7A73EC621CFE8D2A7840 /* Core */ = { - isa = PBXGroup; - children = ( - 97E8AAD1B54E464BDD45645739A7E4E4 /* NSButton+WebCache.h */, - 6E60E60F55DABA8A70A2D218D3E88172 /* NSButton+WebCache.m */, - 64478A7309F11543DB76692ACBCB15F7 /* NSData+ImageContentType.h */, - DD26114F1B84A972B2A2A20A19E7139B /* NSData+ImageContentType.m */, - F4E31E76EFC78FCF7D26C0EB198E7130 /* NSImage+WebCache.h */, - 429FDD636F3939DEDA62FCB9CEA3F38D /* NSImage+WebCache.m */, - D8AD01D96341F62041B06E29BABD0E9C /* SDAnimatedImageRep.h */, - A3053D3DF72CFEE973E780A70CC18EF2 /* SDAnimatedImageRep.m */, - 55B9F4238F0902259456834DC9D1920B /* SDImageCache.h */, - 3832D0EA7E186C284614A162D744B00A /* SDImageCache.m */, - A24EF25F62048423E9D930C5278074AA /* SDImageCacheConfig.h */, - BFE0D4BB6D73A96180EF534C92ACE53B /* SDImageCacheConfig.m */, - 1BD844FF2EB77928C3F4954BB4070B3C /* SDWebImageCoder.h */, - 40575EFD1F8F6E701DA182E683BEC2FA /* SDWebImageCoder.m */, - 6DE1BE539FD20B50E17E1D8AC200C993 /* SDWebImageCoderHelper.h */, - EC6ADCE0E67FA28C7ECE2FEC64166177 /* SDWebImageCoderHelper.m */, - 3DB9DE3DCEAE65EBE74B327A173003A8 /* SDWebImageCodersManager.h */, - 52534734AD75CCA3BFE6C3B27D9FB9DE /* SDWebImageCodersManager.m */, - E8CA6B846640A5453420E104AD87020A /* SDWebImageCompat.h */, - 34786D8E1B7A9E5618960AB31B260424 /* SDWebImageCompat.m */, - 62C88D14B39E886A97851021B020CD0E /* SDWebImageDownloader.h */, - 6CD9B7708863D803D675F0E9B08630A2 /* SDWebImageDownloader.m */, - E58CBA84E4AB3797581C0AB28A440589 /* SDWebImageDownloaderOperation.h */, - 30ED8ED848EB8DEF2039EE979EE3016B /* SDWebImageDownloaderOperation.m */, - F5B1291C368ECF02B251E7EEBD0C2FA2 /* SDWebImageFrame.h */, - 9CB9C0E6DC1428C653A5D72115334EC2 /* SDWebImageFrame.m */, - D31FCD1502C48457FE630B3B3E54B5CF /* SDWebImageGIFCoder.h */, - 08E5FE69433133C490A05E788EB152E8 /* SDWebImageGIFCoder.m */, - 3C8496BDF9FDC70F620BC1A1C2161471 /* SDWebImageImageIOCoder.h */, - D510C8DE8287F40083E461707DA7C66E /* SDWebImageImageIOCoder.m */, - 778E098F1D1DD3233DA124284E40B2B2 /* SDWebImageManager.h */, - 1F23D9CEB0F145EEA952FEC9CF58C467 /* SDWebImageManager.m */, - 2EC76A5399DF4A8FF15D29CAA2CC4537 /* SDWebImageOperation.h */, - 30355D9B3DCCCD29F9ACCE3C935B07B9 /* SDWebImagePrefetcher.h */, - 42D89FE909F52B3C3F1035BE3A360A60 /* SDWebImagePrefetcher.m */, - 4DBAF944AE9E107B09FA593C6772903D /* SDWebImageTransition.h */, - E4EFB775E7525FEB8EAFA2A67E3E5795 /* SDWebImageTransition.m */, - 689FB24FA0A1443C9E6EDF71FCEEE91D /* UIButton+WebCache.h */, - 8421AE415FF30A82D8A3C46F4066E8C4 /* UIButton+WebCache.m */, - D5B5C63A8277A1C23DA1F327EB6B8695 /* UIImage+ForceDecode.h */, - 338A91177F22F0C0B7E9F2617DB6D30C /* UIImage+ForceDecode.m */, - 455E5ACCA97D1568DD6789BE6F2DC982 /* UIImage+GIF.h */, - 2D97AB96A3AD0844F0E9A0A6368F1BE0 /* UIImage+GIF.m */, - 28C9FD05636A9DD140FC5CF4A2DE6AA6 /* UIImage+MultiFormat.h */, - CE0CDF8DDC168FC42EE8F510BBA938CD /* UIImage+MultiFormat.m */, - 999D260BC84758AAB3DF1AC5368500FA /* UIImageView+HighlightedWebCache.h */, - 51F8D03F64D8AE4C41D22BD22AAF1172 /* UIImageView+HighlightedWebCache.m */, - 3BEEC43D6F5FEEC5F22EF9E0972329DF /* UIImageView+WebCache.h */, - 58EDEFC63A54D8B264723EE0EA3AF7AD /* UIImageView+WebCache.m */, - 98ACA8A1C96253E0C93C68413E526E83 /* UIView+WebCache.h */, - 480EBDA225E852CEA4E1CC2E346CE9E5 /* UIView+WebCache.m */, - 26352B14F20CECF1C5E46B8BB0821EC0 /* UIView+WebCacheOperation.h */, - 8267A49CE76989CD63E6725500A33111 /* UIView+WebCacheOperation.m */, - ); - name = Core; - sourceTree = ""; - }; - 650DC7D6CDC411B4C53EAAA636B91AA1 /* UITableView+FDTemplateLayoutCell */ = { - isa = PBXGroup; - children = ( - E116512F596C10F7B0DE7E79B3D4FB37 /* UITableView+FDIndexPathHeightCache.h */, - E765AEB6EF5022FC3E2114C6854EB172 /* UITableView+FDIndexPathHeightCache.m */, - D578A1FA8C5C0066B724DA98FA21DEA8 /* UITableView+FDKeyedHeightCache.h */, - FE77E40C189AA177444DEBBD0B08DCCA /* UITableView+FDKeyedHeightCache.m */, - 56247E2A4FAE29D32C86A5D9501F6F5E /* UITableView+FDTemplateLayoutCell.h */, - 2974DB06BB024359AD4E9D2000597D36 /* UITableView+FDTemplateLayoutCell.m */, - 67ECE47F3623A56F2D308382B2EC1E26 /* UITableView+FDTemplateLayoutCellDebug.h */, - 1129CE2BF72E82EC12E70344519DB533 /* UITableView+FDTemplateLayoutCellDebug.m */, - 05DF64B57727F2CA79DB6B496A8A23B5 /* Support Files */, - ); - name = "UITableView+FDTemplateLayoutCell"; - path = "UITableView+FDTemplateLayoutCell"; - sourceTree = ""; - }; - 6E81EE4638E7A41210C64D87EF14F7E7 /* Support Files */ = { - isa = PBXGroup; - children = ( - DBC078293DB6E10281D1A33704EF52F5 /* Info.plist */, - 588C34ABA8D08DC2830C1A87225FCFBC /* MBProgressHUD.modulemap */, - 0A605A9C44A718DE8A45059C9828A9F0 /* MBProgressHUD.xcconfig */, - 9D7F51C4E138BB8EC86B366A13C1E692 /* MBProgressHUD-dummy.m */, - ABC603830D54131AAE067A9DBABE668F /* MBProgressHUD-prefix.pch */, - 1AF05A605CD2C0B9C09DC4DB2D55DDED /* MBProgressHUD-umbrella.h */, + E6841BB55B15555FACC1C2407F11D87A /* Info.plist */, + 11CBDFE3700AD26E36AFB9E669E902DD /* MBProgressHUD.modulemap */, + 36C94757ECFB0CDBFD720B0C11F08BC1 /* MBProgressHUD.xcconfig */, + 2E917B75DE00F9E5F318667A4D3CA7DB /* MBProgressHUD-dummy.m */, + E860149186CE6E56BAAEE62CA5ABDF8E /* MBProgressHUD-prefix.pch */, + 9FE34AE9B11E8E9CE707D60148CFB286 /* MBProgressHUD-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/MBProgressHUD"; sourceTree = ""; }; - 7316D365B4D0503AFD7E4FC559ED6DA2 /* JCore */ = { + 22EFAB1A8ADE6944D33D4F20BE2ED3DA /* JCore */ = { isa = PBXGroup; children = ( - 73816B696E872F5EAADFE5B6B4377956 /* Frameworks */, + 6135153B546AEC4D283A511C77C42214 /* Frameworks */, ); name = JCore; path = JCore; sourceTree = ""; }; - 737D51AE13E7F70099DE35CCC957A254 /* WechatOpenSDK */ = { + 231E9889CD1CCB432A0BAA13B0E113FE /* MJRefresh */ = { isa = PBXGroup; children = ( - DA6A8B2D873EF6424BE3BADA80CFDE53 /* WechatAuthSDK.h */, - DF44E31D397C061AB138287915E6ECDA /* WXApi.h */, - ABCF6DE887A4EF28FF9DF3570F14202B /* WXApiObject.h */, - 3AE3241CC5FD14B6588C23BA689ECAEE /* Frameworks */, + CB12608CAF6344C9CD54DC1A84A0BEF5 /* MJRefresh.h */, + 91DA5B2E5AE56CB9005ECE4644FA3356 /* MJRefreshAutoFooter.h */, + E43C0234304F095C027CA559CA4E9F0B /* MJRefreshAutoFooter.m */, + 45879D3B33AD86D331ACA84B5995B4D1 /* MJRefreshAutoGifFooter.h */, + 8705B892D0FB23E4B3A26DDB33CBC371 /* MJRefreshAutoGifFooter.m */, + B8B56BE8B95141AA7FFDB381009541CA /* MJRefreshAutoNormalFooter.h */, + BC5C08FC6773BA7BD235A3B78A7ABCAA /* MJRefreshAutoNormalFooter.m */, + C9CDC1F6DD226D0362ABF5BAC2D55A32 /* MJRefreshAutoStateFooter.h */, + C607C7BF73E5A94800A31DAFFC343CAC /* MJRefreshAutoStateFooter.m */, + 81061EAAEC3F61A38F09275305E22D6A /* MJRefreshBackFooter.h */, + 25A4B40FC26E491D355F864AEA121E73 /* MJRefreshBackFooter.m */, + D887710C70848A5D7BBB59F3733FA591 /* MJRefreshBackGifFooter.h */, + 874A487F8BFAD83D1F053B4DCD8201A1 /* MJRefreshBackGifFooter.m */, + 964EB9F9E3DFDFBEB0A635FF6F6445AC /* MJRefreshBackNormalFooter.h */, + F57EAFC722DC8A1A5E24FC9DC97959E0 /* MJRefreshBackNormalFooter.m */, + 498010BF30FB1D6FB301F7B3FD6CFC49 /* MJRefreshBackStateFooter.h */, + A77564763595F2220FB4FF9C93274429 /* MJRefreshBackStateFooter.m */, + BCDDB5FF379578ABC9203ED41F2C6152 /* MJRefreshComponent.h */, + FC45B739819A1904D554E79520E207DA /* MJRefreshComponent.m */, + 4C2F72B6BC0D51790962077A8C13EC05 /* MJRefreshConst.h */, + 9CA67BCA7DA83AFB686019666B15E346 /* MJRefreshConst.m */, + BC38A229ADD93FA75F0CDC8D9BE4FC6A /* MJRefreshFooter.h */, + 60E6BD48D0EAAAD7C2C35A6705DA2EB1 /* MJRefreshFooter.m */, + A38841D1204800C4F712AB1D13E4AC7D /* MJRefreshGifHeader.h */, + 64EB649102BB6022F6927FBD8BF10E3B /* MJRefreshGifHeader.m */, + 64835380AC55D938C3E0E9AA529F4D41 /* MJRefreshHeader.h */, + 5145E6BB9DFB46461BE07ADA20047F2E /* MJRefreshHeader.m */, + D58D416D0D907E75F8F25DBC31A8F2A0 /* MJRefreshNormalHeader.h */, + 048638E84A58D781817B05B69F5DB76D /* MJRefreshNormalHeader.m */, + DDC8D5C54CB2FA432E51D33F63299867 /* MJRefreshStateHeader.h */, + C405F8314A0EDA4CCECFACFD56BD6452 /* MJRefreshStateHeader.m */, + D1FD9AB8D8A0F476AA2FFFB0AF73984A /* NSBundle+MJRefresh.h */, + 49FC9B7F0D1967826227DEFA8D9EA924 /* NSBundle+MJRefresh.m */, + F665835060F250C5E831A32121C45B5F /* UIScrollView+MJExtension.h */, + 214889649505797427D153AFE63862E7 /* UIScrollView+MJExtension.m */, + CE00515C642F3041D7530F99532A37B1 /* UIScrollView+MJRefresh.h */, + D1AF018F0E0542900564BFAF307755AD /* UIScrollView+MJRefresh.m */, + 316C099F7EBA73314DFCC094D555F83B /* UIView+MJExtension.h */, + 74DEFA36B4962F7E3A0B4640337FC908 /* UIView+MJExtension.m */, + FCCB57F67790368B6E845405EBA032D6 /* Resources */, + 95FEF0CE2F0A92C7121D81C2CB15AC44 /* Support Files */, ); - name = WechatOpenSDK; - path = WechatOpenSDK; + name = MJRefresh; + path = MJRefresh; sourceTree = ""; }; - 73816B696E872F5EAADFE5B6B4377956 /* Frameworks */ = { + 337E1E73A7CE2DEDA6F9FB1837F71269 /* Support Files */ = { isa = PBXGroup; children = ( - 348A21F3B91FEC6FF1536DF108960444 /* libjcore-ios-1.2.2.a */, + CCB297EBF9711390A31826257A45DFED /* Info.plist */, + 58A1949C3F564FD801440AEA4D4E3C27 /* UITableView+FDTemplateLayoutCell.modulemap */, + D7AFFE638A1D3629C5C2E838084B7CB7 /* UITableView+FDTemplateLayoutCell.xcconfig */, + B72958B223F8DBC6D1DEBDF0873BBBD4 /* UITableView+FDTemplateLayoutCell-dummy.m */, + 4F7775A169B588C5C2BEC8EE5864E3E3 /* UITableView+FDTemplateLayoutCell-prefix.pch */, + F426661253D1751C24C7C550B0DD3742 /* UITableView+FDTemplateLayoutCell-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/UITableView+FDTemplateLayoutCell"; + sourceTree = ""; + }; + 33D4CBA68C2A74D2CBF4FC67C67DB070 /* Pods */ = { + isa = PBXGroup; + children = ( + A633D579D4B888F7971A6C11883C1718 /* AFNetworking */, + FBDA7C8860678A5E3250E18D9655919E /* Bugly */, + CCA25ECCC450E021E069120D409442A4 /* FMDB */, + 794AD9C3DAC5F29468B7EB72907FDA6E /* IQKeyboardManager */, + 22EFAB1A8ADE6944D33D4F20BE2ED3DA /* JCore */, + 1B05F3E81A737E1A62ACE47B8D59B181 /* JPush */, + E63D2863D5FB7DC212A24B273C014E03 /* JSONModel */, + AD0DF298644AA6EFB83ADF5D1723BD32 /* LKDBHelper */, + 81A5C6070FCB3F6939686860D1F6C46B /* Masonry */, + 4A2373D34CC5044D9944C2330307DC57 /* MBProgressHUD */, + 231E9889CD1CCB432A0BAA13B0E113FE /* MJRefresh */, + 85A26EC9BC9FA781385D9AC8F9C05D82 /* NJKWebViewProgress */, + 4E14C5E5AA1EAFC384548D710ACC3AC0 /* SDWebImage */, + A8FCFF06C4D1130E14692E5D37CE3D59 /* Socket.IO-Client-Swift */, + 0EF92FF4BFE7198041C98370B38AC200 /* SocketRocket */, + 18E1175011CBB9572369C6CA9BE3815C /* Starscream */, + E0AB66D2C96E63CD3CA32758697A0143 /* Toast */, + C64A38BCDA1A3F78AC00751F0655D817 /* TTTAttributedLabel */, + E1DEBC0332688293576CF0781BF2B546 /* UITableView+FDTemplateLayoutCell */, + 3FA6FECB2F4E709818F954A6F37A1BEF /* UMCAnalytics */, + 013670849AE4267794D106DE6D68390F /* UMCCommon */, + 34BF9873AA18621242204EC26A23EAFF /* UMCSecurityPlugins */, + 0E2DC586C78EE009373398774B584AAB /* WechatOpenSDK */, + 4BD68F65A4F8243DB4D58D528B382734 /* YTKKeyValueStore */, + ); + name = Pods; + sourceTree = ""; + }; + 34BF9873AA18621242204EC26A23EAFF /* UMCSecurityPlugins */ = { + isa = PBXGroup; + children = ( + 11B681A4FA849059ADA6D37CE843A314 /* Frameworks */, + ); + name = UMCSecurityPlugins; + path = UMCSecurityPlugins; + sourceTree = ""; + }; + 3C6ECA84E263337ACC001FB248021E44 /* Support Files */ = { + isa = PBXGroup; + children = ( + 8CC12A9C12532CB9C97DB1F60227C686 /* Info.plist */, + 4840A6FC48CB8E524D7A7D2DEF0DC1A0 /* NJKWebViewProgress.modulemap */, + A1E47E6E0B0C4589F0066EB47D2EFB1E /* NJKWebViewProgress.xcconfig */, + 27481864BFB4AD24155BCC2551337DB6 /* NJKWebViewProgress-dummy.m */, + 9A3CCB6C657E89D308B34C47CC5B789F /* NJKWebViewProgress-prefix.pch */, + 10209B83220731CD89F3BE7CE9C254D0 /* NJKWebViewProgress-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/NJKWebViewProgress"; + sourceTree = ""; + }; + 3CD692616588D8B0B76B05D8F9BBFE7E /* Products */ = { + isa = PBXGroup; + children = ( + 06F7DF71211917C6613F190B1D9CEA2B /* AFNetworking.framework */, + 3F9C38A75057CBD015D16FAA76005ECB /* FMDB.framework */, + A087BAC4F72D6A1D75482DB745BF663D /* IQKeyboardManager.framework */, + 935FBB07F207A53D79856BDDE153E292 /* JSONModel.framework */, + 5290E81387FC7DE33A6834ABB78CD62C /* LKDBHelper.framework */, + 2493EEFA5275F1BFBB2AF35F11BED82C /* Masonry.framework */, + A0E77CB702D048DE8D95D7B71073CB5A /* MBProgressHUD.framework */, + 029A3331019368C8C30B8DA9778E0794 /* MJRefresh.framework */, + 23E3DFBE5E063BE6E4D93A3E77F032ED /* NJKWebViewProgress.framework */, + BEA40D79454E792C12261F3AF180920F /* Pods_GIGA.framework */, + E84CE3A7FDCD3AE81A473F6C746504A2 /* SDWebImage.framework */, + 0F329A9EA016DA0D20BA2C5C7D0DAC79 /* SocketIO.framework */, + 67C8BFEE51B5F26E6EB7520C972CD09A /* SocketRocket.framework */, + DDE1008593C16D5180F63ED51EC27802 /* Starscream.framework */, + 547FB455959DBDAB1B311703DC4655D1 /* Toast.framework */, + 22776590D888620F659DDF182BE8BEFC /* TTTAttributedLabel.framework */, + 4819F4658B859A7A2B63B28F360E7FFD /* UITableView_FDTemplateLayoutCell.framework */, + 99792AD152EC0F67CE203E29D0DACFC0 /* YTKKeyValueStore.framework */, + ); + name = Products; + sourceTree = ""; + }; + 3FA6FECB2F4E709818F954A6F37A1BEF /* UMCAnalytics */ = { + isa = PBXGroup; + children = ( + D4D12C5B91A26ECDA4A6A7DBDF734592 /* Frameworks */, + ); + name = UMCAnalytics; + path = UMCAnalytics; + sourceTree = ""; + }; + 44CAD7891D251809201C7D44DC9CDB01 /* Reachability */ = { + isa = PBXGroup; + children = ( + FBF2BC661F74DEDD633BF2098800BCB7 /* AFNetworkReachabilityManager.h */, + 042DC3BCC2842104D6A45CA51DC3F42C /* AFNetworkReachabilityManager.m */, + ); + name = Reachability; + sourceTree = ""; + }; + 4A2373D34CC5044D9944C2330307DC57 /* MBProgressHUD */ = { + isa = PBXGroup; + children = ( + AFEF7822284D0740E9439FDA575D9C21 /* MBProgressHUD.h */, + 24B2D873DD726E1CB92080AB5A4C458F /* MBProgressHUD.m */, + 2205098B27469BCD7B87D25D45F35101 /* Support Files */, + ); + name = MBProgressHUD; + path = MBProgressHUD; + sourceTree = ""; + }; + 4BC5DD01B88C70485C05DCF48B936BD1 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D9976EC54E15F0720C2031B0C2BE45A7 /* Bugly.framework */, ); name = Frameworks; sourceTree = ""; }; - 77C3F9B503649FFBDD7BE70E2C9B6949 /* NSURLSession */ = { + 4BD68F65A4F8243DB4D58D528B382734 /* YTKKeyValueStore */ = { isa = PBXGroup; children = ( - 326D9D7C8343049CC1BD9D2FDB760C14 /* AFCompatibilityMacros.h */, - 2AD4DBAC3BDC47AAD73A71ABC44B7E2A /* AFHTTPSessionManager.h */, - A3A2A54A6B463F84E2F775E3871BAF60 /* AFHTTPSessionManager.m */, - 502C292A182DA48DE6398B906F782175 /* AFURLSessionManager.h */, - CFCF048332BA95A163C798AC2CDF14E6 /* AFURLSessionManager.m */, + 419688D30BFAF6943FBE6304B83E2FC3 /* YTKKeyValueStore.h */, + 266860A64CA3E38126FD443422246252 /* YTKKeyValueStore.m */, + D2250417B8C5D2E16EEF527DAF5DD1A2 /* Support Files */, ); - name = NSURLSession; + name = YTKKeyValueStore; + path = YTKKeyValueStore; + sourceTree = ""; + }; + 4E14C5E5AA1EAFC384548D710ACC3AC0 /* SDWebImage */ = { + isa = PBXGroup; + children = ( + 8ECAC204F8287FAD67B6CC17235AA448 /* Core */, + FF13C69FA758102BC163770F349C96CA /* Support Files */, + ); + name = SDWebImage; + path = SDWebImage; + sourceTree = ""; + }; + 56D87990CE17BF3E4B7E67FAA38846C4 /* Support Files */ = { + isa = PBXGroup; + children = ( + 42D7E898DE58FC64D5A1CAC1E601DEF1 /* Info.plist */, + C1ADBB706FDB59836CD7FB8B56580BFE /* Toast.modulemap */, + A71A2EDB7D80E8B54C1540FA4E2B8A8D /* Toast.xcconfig */, + DB5CDE6B616CD12A18C278C6799A0094 /* Toast-dummy.m */, + 2FB887DABDFF1B6A7789155364DD4D45 /* Toast-prefix.pch */, + 72F5A09FBDED1F72A04C3E335DE0A1BA /* Toast-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Toast"; + sourceTree = ""; + }; + 5D18979E16AA15B8FC94B1945A0FB2AB /* standard */ = { + isa = PBXGroup; + children = ( + C53B6F23513590B1B35519E049C3AD72 /* FMDatabase.h */, + D4BFC19B6137B925C0EDE4EBABA27FC7 /* FMDatabase.m */, + F75D6F9A7E4B4F68F38B9CF845506873 /* FMDatabaseAdditions.h */, + 531AF42C28A0891D1E91B6BEA86844D7 /* FMDatabaseAdditions.m */, + FC329F809B6649CDA966EB263EF68FB2 /* FMDatabasePool.h */, + 00CC387D226EFBC6389FAA62F3DD873A /* FMDatabasePool.m */, + DA25A84A833228F9B77716016FCF329F /* FMDatabaseQueue.h */, + 6C79216DF49554E23B9DFC5FAABDB967 /* FMDatabaseQueue.m */, + 9E5007EEC9570DEC0914742C5AA50210 /* FMDB.h */, + 9A594A8236E67EB8170C115C30847FF7 /* FMResultSet.h */, + 2FD77768BDABBF2BB48928067588B12C /* FMResultSet.m */, + ); + name = standard; + sourceTree = ""; + }; + 6135153B546AEC4D283A511C77C42214 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 82167F073127B543CC843A71E2E2F134 /* libjcore-ios-1.2.2.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 61689A30C6F58A44CA0916A9797C0BC4 /* Support Files */ = { + isa = PBXGroup; + children = ( + 720A2501ACCEF31CAEFCF72E5A1755D8 /* Info.plist */, + 0B2F88F5CE468EE56C4A34CF3433FFE0 /* SocketRocket.modulemap */, + 3761E6FC8FB2C049CFB42B5DF219C572 /* SocketRocket.xcconfig */, + 5A1F61FFDF1CF20E149F6B0F6B0FF24A /* SocketRocket-dummy.m */, + 2E3AF8E64808C4D50ED1EE668DCDFBBA /* SocketRocket-prefix.pch */, + 7476095E7330D9DBD36D76CCE3773573 /* SocketRocket-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SocketRocket"; + sourceTree = ""; + }; + 61C0046882C98AAEC1ECEB7607191880 /* Support Files */ = { + isa = PBXGroup; + children = ( + DE39B5880E93ED7DB42C862E7B216691 /* Info.plist */, + F270EF20130EC0714D627B3FC934F8B8 /* JSONModel.modulemap */, + 9000E691EFB3E3B3FF8C0EB04CFB70DB /* JSONModel.xcconfig */, + 60A50FB199FB6B0C5EA49A62A4C863D8 /* JSONModel-dummy.m */, + A2D6F39FC472C9C3E27C6635ECE723DE /* JSONModel-prefix.pch */, + A3F1A8219D19797685AF2D8E9EAFE675 /* JSONModel-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/JSONModel"; + sourceTree = ""; + }; + 638FE4730E65D92ADBB4F31EC2BCD78C /* Security */ = { + isa = PBXGroup; + children = ( + D6CDF2935BA2A5F043D6242F45854A06 /* AFSecurityPolicy.h */, + B01D2A082D8362F5E95027DBAE3D1DFD /* AFSecurityPolicy.m */, + ); + name = Security; + sourceTree = ""; + }; + 6B27D673B93E9DDC83DD64013DDF4CFB /* UIKit */ = { + isa = PBXGroup; + children = ( + BB129160697EBA00C13DD98D69D252F7 /* AFAutoPurgingImageCache.h */, + E7A5DB8DF2295A90EB25F7E495E5F62B /* AFAutoPurgingImageCache.m */, + 8574AA1B5AD318AF02BC4D3B68F81E58 /* AFImageDownloader.h */, + C73F80367886F94832EE106D9F164391 /* AFImageDownloader.m */, + F8A4A704B12B0E5FCD4942063E450299 /* AFNetworkActivityIndicatorManager.h */, + 8E6E813A4FEA7EAA36447924B0005A89 /* AFNetworkActivityIndicatorManager.m */, + 9BB3C77E5D6641E78ECDFF85F30BD25A /* UIActivityIndicatorView+AFNetworking.h */, + 6C55D9F05AB29EF41FFA46E6095CFF72 /* UIActivityIndicatorView+AFNetworking.m */, + 5B8A96A9F8907E36AEE053151EF55E0B /* UIButton+AFNetworking.h */, + 9524B522E6F3A1198F46B4ED841E5662 /* UIButton+AFNetworking.m */, + DBF35F229F62DAFB1E3D7FA0942B6D8A /* UIImage+AFNetworking.h */, + 37359E3E690C6350F9602BFFDBB04147 /* UIImageView+AFNetworking.h */, + 71B92D24C35F51B3A3A9626DD861EF1E /* UIImageView+AFNetworking.m */, + A9341A0F668333A93B6FBD08098250C4 /* UIKit+AFNetworking.h */, + 8BF67949298271264E085700428A4FCF /* UIProgressView+AFNetworking.h */, + 3FC3B9F0418FF6AD9307259ADB289A07 /* UIProgressView+AFNetworking.m */, + 059F55EFCCF65A29688CF615E5AD5415 /* UIRefreshControl+AFNetworking.h */, + A1476EF51AAC4F331DC16EE15A7C9A52 /* UIRefreshControl+AFNetworking.m */, + B755A7EEE0FDDBCCB793F3ED139513EF /* UIWebView+AFNetworking.h */, + F45B85ABF6C73FC46039EF4A3D28A28D /* UIWebView+AFNetworking.m */, + ); + name = UIKit; + sourceTree = ""; + }; + 794AD9C3DAC5F29468B7EB72907FDA6E /* IQKeyboardManager */ = { + isa = PBXGroup; + children = ( + 0EE88FA017BECDD56594C950358507E0 /* IQBarButtonItem.h */, + 82C2BD5350645441DD92F95DC5E589DD /* IQBarButtonItem.m */, + 7B077190F4428101E2C3FCA4A0F17CA1 /* IQKeyboardManager.h */, + 3484FF439E2DBB5367ED00A1BCD06905 /* IQKeyboardManager.m */, + BBDC6D1622DB585841784A5DED1346FA /* IQKeyboardManagerConstants.h */, + BEDD0B27A048E132CE68F433D20A9480 /* IQKeyboardManagerConstantsInternal.h */, + 8779B2CA7289D6A7185C91312B6BD88D /* IQKeyboardReturnKeyHandler.h */, + CF40AB4FCB400AB1D8CC624FF95B74E4 /* IQKeyboardReturnKeyHandler.m */, + D917488C1503A8C83A348CD03817262E /* IQNSArray+Sort.h */, + E03910B7599DBB9DE52BA6B580D5420C /* IQNSArray+Sort.m */, + 7916596619DEA640BF07E493F03AE462 /* IQPreviousNextView.h */, + 17CD040301E2941CF1307C11668F0335 /* IQPreviousNextView.m */, + D15A13B4D2D795A0C6BFDD4C3D657FCF /* IQTextView.h */, + 296D773846653A12BF592FA3AEE99EE7 /* IQTextView.m */, + 2CDD19D40A0561AC2EEC7572402D3D1F /* IQTitleBarButtonItem.h */, + C52D5FBF7AC49549CACAB8E226E06A55 /* IQTitleBarButtonItem.m */, + BFC2CEE4A1CC40C763FF7873BA8B56D1 /* IQToolbar.h */, + B4AA799A01CF6F84D07EBC2151183FE8 /* IQToolbar.m */, + 3707B0F6D5D2EB50CB0191D8FC9A3E26 /* IQUIScrollView+Additions.h */, + CCBD06AABD5DDD4CA2D79364A77DF3BF /* IQUIScrollView+Additions.m */, + 243FE71724C73A1404F864718F47B574 /* IQUITextFieldView+Additions.h */, + B37CE92BCFA7B9F94F1EC5EEE702D1C8 /* IQUITextFieldView+Additions.m */, + 07BAC4DCA1D385E6719FCD0A2C3518E8 /* IQUIView+Hierarchy.h */, + CDA517AA74DD3581625EABAFCF57A1F3 /* IQUIView+Hierarchy.m */, + 7491AD0045ED41AE8F08FD751720691E /* IQUIView+IQKeyboardToolbar.h */, + 6388F569E994C890615BAAE8A1012286 /* IQUIView+IQKeyboardToolbar.m */, + EAB909A57EFF13EAD51EF05B4F73395B /* IQUIViewController+Additions.h */, + CBE54AA9DF51DD23D24F6D99DBE4D170 /* IQUIViewController+Additions.m */, + 0A1A7675F7A7DD5E2EA307B7ECB550F9 /* Resources */, + 0B18D1637A92C37E605C2538A55FC3F5 /* Support Files */, + ); + name = IQKeyboardManager; + path = IQKeyboardManager; + sourceTree = ""; + }; + 7BEC3C845B8C6751D4BEC247118F7419 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2B6CE4C2E0F43E8B914EC3D2DA1985F3 /* Info.plist */, + 69E99651489B054F900280430368B177 /* Masonry.modulemap */, + 61C2C19E65EA773F183A0CC25BA57237 /* Masonry.xcconfig */, + C0FD05EAF05C6EE6CD501AA135B3FC66 /* Masonry-dummy.m */, + 8999757F73DE228D5570C79E04DDE6E3 /* Masonry-prefix.pch */, + 55D47BD7E8E69B61DB9C10FE582F0F77 /* Masonry-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Masonry"; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - B46F6D1AC0DA31D8B1B98490D3896990 /* Frameworks */, - 3462FBC925208A4E2D068AE34243BA0F /* Pods */, - 544FB77D6D6BCB080AE979EA734CA3D9 /* Products */, + C9AC7881E3A93086F2058658C83B43BE /* Frameworks */, + 33D4CBA68C2A74D2CBF4FC67C67DB070 /* Pods */, + 3CD692616588D8B0B76B05D8F9BBFE7E /* Products */, 204D78156C2EC3DBC444EB544EC0A6C9 /* Targets Support Files */, ); sourceTree = ""; }; - 7DF9D56403A3D1A4DD06CA5F7F3BE79D /* Frameworks */ = { + 7E69D627DEF05060BADCBCC9B07E96BB /* iOS */ = { isa = PBXGroup; children = ( - 144D01D28CAD550DC15B9FEA3275EF9B /* SecurityEnvSDK.framework */, - 1D8E30B8D56773C01F2C4431609211FF /* UTDID.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 860006E26B914B66BE397F7DFFE7B494 /* Resources */ = { - isa = PBXGroup; - children = ( - 2AD44F79BFF5ACB1AEBA9E98380AE9AD /* MJRefresh.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 8BB0D4514B5B5753AFD22BD4E96D19E9 /* Support Files */ = { - isa = PBXGroup; - children = ( - 99C5EF09BEEC7A9E54566B3EE818D85F /* Info.plist */, - D28105FED83DECE58DADDCAA20FA08EA /* NJKWebViewProgress.modulemap */, - 909A78FB70C93FA0E34E4B3F09EB708D /* NJKWebViewProgress.xcconfig */, - 384F6E2B0FAC4209C35BAEB1F919D66D /* NJKWebViewProgress-dummy.m */, - 88B5555B15A631734C78FAF503CB0021 /* NJKWebViewProgress-prefix.pch */, - 905348BDB8E6B079B5430CF3BE868DF5 /* NJKWebViewProgress-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/NJKWebViewProgress"; - sourceTree = ""; - }; - 928268AEB74A23825EDCF31FD4C740EF /* SocketRocket */ = { - isa = PBXGroup; - children = ( - 91AE4A65DA845395D949F108CE789B39 /* SocketRocket.h */, - 20B82B3673CA958EA419C7F2C3921FD2 /* SRWebSocket.h */, - E44DA37275684EA3A83F7B4546DEF10C /* SRWebSocket.m */, - 97459DD1BA54D7BCA9DC0DB633766E3F /* Support Files */, - ); - name = SocketRocket; - path = SocketRocket; - sourceTree = ""; - }; - 949F94C11E1D4AB1FC129B603A6E251C /* NJKWebViewProgress */ = { - isa = PBXGroup; - children = ( - F91319FF5B6C5334AFA343B85B499520 /* Core */, - E5D610EE05D0F609302E4247E21F2D71 /* ProgressView */, - 8BB0D4514B5B5753AFD22BD4E96D19E9 /* Support Files */, - ); - name = NJKWebViewProgress; - path = NJKWebViewProgress; - sourceTree = ""; - }; - 97459DD1BA54D7BCA9DC0DB633766E3F /* Support Files */ = { - isa = PBXGroup; - children = ( - 4EBFF93D40DE026DFDA03E2DD66D11AB /* Info.plist */, - 63688EDE6A5EA2EBAB3BCF3A99A16FB9 /* SocketRocket.modulemap */, - C59D3FCABF89A223424416FCCF12B670 /* SocketRocket.xcconfig */, - F50B0F68470FA444E926132799716530 /* SocketRocket-dummy.m */, - C4BDFC17DB434F4FA868FD6D82577910 /* SocketRocket-prefix.pch */, - 2AF51CA7545F890601168CFECF2A8BFB /* SocketRocket-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/SocketRocket"; - sourceTree = ""; - }; - 9B1DA81ACC29D7C234D010E9F46892B3 /* Serialization */ = { - isa = PBXGroup; - children = ( - FC70088183A39614A3A3BAD11F21A7EC /* AFURLRequestSerialization.h */, - E2623D539C17BD1BC944362048A0EB22 /* AFURLRequestSerialization.m */, - 19FCBE0EEEBEAA24D79B250A5866E949 /* AFURLResponseSerialization.h */, - E67557DBF26DB5257919A8170EF851D1 /* AFURLResponseSerialization.m */, - ); - name = Serialization; - sourceTree = ""; - }; - A0A790EF8A87147F98DDEF211744CFF7 /* JPush */ = { - isa = PBXGroup; - children = ( - EB0E2C14BE354FEEEBF03E24DE5D621D /* JPUSHService.h */, - 3028CA09137356289969750BEE2C6877 /* Frameworks */, - ); - name = JPush; - path = JPush; - sourceTree = ""; - }; - A1C70AA343FEC366C912710C48C0E041 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7FCDCD0E88EE45EDEAA56A085B4EC12A /* Info.plist */, - A0F3772ACE7A6D60B053804229D7A2D9 /* YTKKeyValueStore.modulemap */, - 52F93BEAAD4FA805CB1F4C7A12E71F45 /* YTKKeyValueStore.xcconfig */, - 2F603D3FC35FE557B8C5E6EBCB9120C5 /* YTKKeyValueStore-dummy.m */, - 885E57B71A67BF6DA5156A4CEEDFD6D6 /* YTKKeyValueStore-prefix.pch */, - 23CF3C3B336872BE627191D587A2F784 /* YTKKeyValueStore-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/YTKKeyValueStore"; - sourceTree = ""; - }; - A7718A347318FF9A0224F3629433DA16 /* TTTAttributedLabel */ = { - isa = PBXGroup; - children = ( - E08CCF3A89E086CCE8DC38AC4B14AFDE /* TTTAttributedLabel.h */, - 804037B37C8061F50A6D0B27F526F26F /* TTTAttributedLabel.m */, - 0D614A495680244C7AB5FA376D3159DA /* Support Files */, - ); - name = TTTAttributedLabel; - path = TTTAttributedLabel; - sourceTree = ""; - }; - A83804453FC7D973AEFD5E2423FC76D1 /* iOS */ = { - isa = PBXGroup; - children = ( - 9C52134DD48D89A347BF80B6D47974CD /* CFNetwork.framework */, - 223CC88B609D08C4EA1EC854A8D73AD1 /* CoreGraphics.framework */, - 7B66A6C8F7C747D007AEDA080245D186 /* CoreText.framework */, - 87C13B7502C32A61BD1DA18FC68E4DF3 /* Foundation.framework */, - 0ABED0039D2F20276FEA3153C100C8EA /* ImageIO.framework */, - BDA80F5D7B6C75DE56A43090A20E478E /* MobileCoreServices.framework */, - 2C5FBC24791EAE0728C65D6F9B9912B2 /* QuartzCore.framework */, - 47FC8BC593D3C4A9BCFAAB1AD76AC13D /* Security.framework */, - F79298FCF0E5B2FCDD163272B33DB5DE /* SystemConfiguration.framework */, - DD9F8097FDD26C1A767654BEFDB692CC /* UIKit.framework */, + FF2567DE02E414DB1FBB3C77E2FD44B1 /* CFNetwork.framework */, + F043DBEAB75100EC409BEDF3E58A8BC0 /* CoreGraphics.framework */, + 78F07669D4FDF923215E34924891CA68 /* CoreText.framework */, + 9F1EE390CF6C51DBF46349E43BDC2804 /* Foundation.framework */, + 3E2FB8AE972E929400C566BC03FB6468 /* ImageIO.framework */, + D8B941495F77E08AA9AD977942455F90 /* MobileCoreServices.framework */, + 70BC8DC64FAC8894D27E1964CC8CD209 /* QuartzCore.framework */, + FED1ACDE4726A20CC2932BCDC66F5787 /* Security.framework */, + 5925EC6C2B2151154E2F24CC70D04AEC /* SystemConfiguration.framework */, + 3693DA67EFBAB281959594641A587872 /* UIKit.framework */, ); name = iOS; sourceTree = ""; }; - AB69C68D4733A53B6E8A13E3AD3FB8C0 /* Support Files */ = { + 81A5C6070FCB3F6939686860D1F6C46B /* Masonry */ = { isa = PBXGroup; children = ( - 90C70CE2FEF3C7E41FEAB6FA41E3C83D /* Info.plist */, - B4E855885058F0ABFDAD0B5745319918 /* JSONModel.modulemap */, - 66890DF77BDD3EBEC82AA947599CC390 /* JSONModel.xcconfig */, - 2E03D26FF38E5DEA11D31A78840F818A /* JSONModel-dummy.m */, - 975B76CF1CC88D339A129F655F224CB8 /* JSONModel-prefix.pch */, - 4FEE187FABEDD0249D0FC827637A740A /* JSONModel-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/JSONModel"; - sourceTree = ""; - }; - AC4FC3D67813B8671BA2A9E0DBEE7331 /* standard */ = { - isa = PBXGroup; - children = ( - 2774326B60C328374835C7204E3258BB /* LKDB+Mapping.h */, - CFFD009D1F00116A643D51E243330C18 /* LKDB+Mapping.m */, - 20537A66C31276B9C55B927BE953BCE0 /* LKDBHelper.h */, - FAC5C4AB91E3784CBF6873F18B5036F9 /* LKDBHelper.m */, - F66F22D2B5E6EF98C875A78C8164C54F /* LKDBUtils.h */, - F039F4116C29A97EC5D13C82BBDE9CBC /* LKDBUtils.m */, - 26D2F25DB89878A577283A85A9771121 /* NSObject+LKDBHelper.h */, - CA54827F20BD0ACFF5163BE7B247199D /* NSObject+LKDBHelper.m */, - 3590C8A8B61E435CEE0D6D946D21CBE7 /* NSObject+LKModel.h */, - D3E25E1FF09446A49CA57D4B31A21248 /* NSObject+LKModel.m */, - ); - name = standard; - sourceTree = ""; - }; - ADD3009A7D53F79CC090C9CA16A2630B /* LKDBHelper */ = { - isa = PBXGroup; - children = ( - AC4FC3D67813B8671BA2A9E0DBEE7331 /* standard */, - 478867C3117F0540081089FD042DE4A6 /* Support Files */, - ); - name = LKDBHelper; - path = LKDBHelper; - sourceTree = ""; - }; - B46F6D1AC0DA31D8B1B98490D3896990 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 167E9F1BB5C566ED575F9AFA45711349 /* FMDB.framework */, - A83804453FC7D973AEFD5E2423FC76D1 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - BCF3F9D96FA1BFAAD6CD5E3D33703C00 /* UIKit */ = { - isa = PBXGroup; - children = ( - F3CF70BCE274B4CF992203FFBB582A3F /* AFAutoPurgingImageCache.h */, - 767AE6C3AA2783369EC065DD68C0350A /* AFAutoPurgingImageCache.m */, - D6E61B0B01019595C39208492A85E4B6 /* AFImageDownloader.h */, - 6F12E93671661EA8481386A3C4606195 /* AFImageDownloader.m */, - 534AFA8647F5E60163BF084285B3AD9E /* AFNetworkActivityIndicatorManager.h */, - A18C184E0BDB545829E6779CE4D2CBF6 /* AFNetworkActivityIndicatorManager.m */, - 4599E0AD06AD0BA1330C3AA05D64C91E /* UIActivityIndicatorView+AFNetworking.h */, - B5FA4B859A0AB80E8E3D57CBCE80F2AF /* UIActivityIndicatorView+AFNetworking.m */, - 5F43BA94179B9F1CCF49654AABC0F5FD /* UIButton+AFNetworking.h */, - F0D2E0E7AF262CBBB18CB5A5451749B5 /* UIButton+AFNetworking.m */, - 7E62F2772B21E9A1BC6397BA887E30B9 /* UIImage+AFNetworking.h */, - 2AE40C42B298EF2078BE77D91816800C /* UIImageView+AFNetworking.h */, - 8E06194D6A9AC6C15350A40AA681FBFA /* UIImageView+AFNetworking.m */, - CA531EAD1D1DA49EA987BF74F9ACAF04 /* UIKit+AFNetworking.h */, - 81DD8B0857F2146245797014DE93A83D /* UIProgressView+AFNetworking.h */, - 46216AC6D1DE54C7D1A75F0B8C0093DB /* UIProgressView+AFNetworking.m */, - EB897736B08CBFD5003426DB8418C016 /* UIRefreshControl+AFNetworking.h */, - 1C8FCB66D43C7435A706DE7458C249FD /* UIRefreshControl+AFNetworking.m */, - A364A67DDFA37096812E036AE6662AF8 /* UIWebView+AFNetworking.h */, - 88EC8169C53FD5C4C1F10D7DE2B6977D /* UIWebView+AFNetworking.m */, - ); - name = UIKit; - sourceTree = ""; - }; - C32FC395EAE1634C88483D598DFD1E52 /* YTKKeyValueStore */ = { - isa = PBXGroup; - children = ( - 47C190CC048C31F66701A5CFE68AFC16 /* YTKKeyValueStore.h */, - D05590B969E6F4407F4F99FA703CE7C5 /* YTKKeyValueStore.m */, - A1C70AA343FEC366C912710C48C0E041 /* Support Files */, - ); - name = YTKKeyValueStore; - path = YTKKeyValueStore; - sourceTree = ""; - }; - C34A43A43F16DD9F0B39A5D9BB41B514 /* UMCAnalytics */ = { - isa = PBXGroup; - children = ( - EAAC5BEAEA02EC6BD847E2F38A1B2EAB /* Frameworks */, - ); - name = UMCAnalytics; - path = UMCAnalytics; - sourceTree = ""; - }; - CA822960B097DCA9E4BE7C8C24AA75C2 /* AFNetworking */ = { - isa = PBXGroup; - children = ( - ABE17D577EA9792121FB2D749B0D28E7 /* AFNetworking.h */, - 77C3F9B503649FFBDD7BE70E2C9B6949 /* NSURLSession */, - 0E3DEEB65D8DA0F2EF5BB320D6194C96 /* Reachability */, - 5D7877A56330D68E9B32C62F952C37C2 /* Security */, - 9B1DA81ACC29D7C234D010E9F46892B3 /* Serialization */, - F45A1ECE10E465E390F43661E6E54ABD /* Support Files */, - BCF3F9D96FA1BFAAD6CD5E3D33703C00 /* UIKit */, - ); - name = AFNetworking; - path = AFNetworking; - sourceTree = ""; - }; - CC653850EC41F033E4A77415895D6E22 /* IQKeyboardManager */ = { - isa = PBXGroup; - children = ( - BBCFD7D46489AF21D3BE448635C95E1D /* IQBarButtonItem.h */, - B4BEEF21A4371EE181D00D9011BBF232 /* IQBarButtonItem.m */, - C77CDBC148BD82CC4B3944A93E1DB7B7 /* IQKeyboardManager.h */, - BC5F392919A89D0D4529C78A9B24CBD9 /* IQKeyboardManager.m */, - 201107C26A4A8E4C7AF38062FB36DAC9 /* IQKeyboardManagerConstants.h */, - 3E3D817354B9C74183C0CFB0E3992AE8 /* IQKeyboardManagerConstantsInternal.h */, - CE8F79F2B661D3DE763707D9654DAFE1 /* IQKeyboardReturnKeyHandler.h */, - 909C68A3CB1E26AA254E32962530E43B /* IQKeyboardReturnKeyHandler.m */, - 9F87B11135AE32B18FF626C3C9FEDBD4 /* IQNSArray+Sort.h */, - E89E9BC7945C12B0A0EED41916A4781C /* IQNSArray+Sort.m */, - 42EC7B58D17C0B661489B46B9964BB39 /* IQPreviousNextView.h */, - 54EE76760BCE3CE9DF646FA567859799 /* IQPreviousNextView.m */, - 534BD366DA913764FB6A895F29C1927B /* IQTextView.h */, - 09810BACD97137F26F4754BC992B0AA0 /* IQTextView.m */, - 4D575D477CF437DBE80BC55A1C483416 /* IQTitleBarButtonItem.h */, - 68EDBAD7D8432FBE29F349FBF59D2764 /* IQTitleBarButtonItem.m */, - CC66366B9AC6F1CAD6AEB88A67337C78 /* IQToolbar.h */, - 1B3ACA6ACCDCAA17E0E866CCDFAE3007 /* IQToolbar.m */, - 56A2F501E263C4D6F46D6F2B4C136A82 /* IQUIScrollView+Additions.h */, - 6B1F3AFC056F49920009E97EE8C75CDF /* IQUIScrollView+Additions.m */, - FA55F0051E01EDB4CA0293C6E7AA0B30 /* IQUITextFieldView+Additions.h */, - A9ED647F3BCC607702655683BF6F3A7C /* IQUITextFieldView+Additions.m */, - 57C8DA5F56CB13BC5C9D4F68770068B1 /* IQUIView+Hierarchy.h */, - ED1FDA2FAAE502AF2BE82854AC2AB913 /* IQUIView+Hierarchy.m */, - D89B744364C5A695E25E01776410B652 /* IQUIView+IQKeyboardToolbar.h */, - 8286B6FF56944ED90439B26B99F71F2E /* IQUIView+IQKeyboardToolbar.m */, - 18739420269C3D2C4EE0ACA8031B5D8A /* IQUIViewController+Additions.h */, - 86F728BB3275544EC6BCA5CE8CCA0E85 /* IQUIViewController+Additions.m */, - E11D8B98DDB9B50639EADDF0960C55C8 /* Resources */, - 226A624819850261870B6E2EABBA90E5 /* Support Files */, - ); - name = IQKeyboardManager; - path = IQKeyboardManager; - sourceTree = ""; - }; - CE5138699B31F14078F7F694C28E973A /* Bugly */ = { - isa = PBXGroup; - children = ( - 03CF7294D96317716FC201C235556DF9 /* Frameworks */, - ); - name = Bugly; - path = Bugly; - sourceTree = ""; - }; - E11D8B98DDB9B50639EADDF0960C55C8 /* Resources */ = { - isa = PBXGroup; - children = ( - 0E5D86CCB42BDD31167BAAA320D2297A /* IQKeyboardManager.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - E1865480BAF1C01B525CD6A102187DF3 /* MBProgressHUD */ = { - isa = PBXGroup; - children = ( - 0D812A41395AD0523CBC5D8963604A69 /* MBProgressHUD.h */, - C023374A920B06BAE8BF866C24C7881A /* MBProgressHUD.m */, - 6E81EE4638E7A41210C64D87EF14F7E7 /* Support Files */, - ); - name = MBProgressHUD; - path = MBProgressHUD; - sourceTree = ""; - }; - E5D610EE05D0F609302E4247E21F2D71 /* ProgressView */ = { - isa = PBXGroup; - children = ( - 507DB5C53EF2AECDB84A4B07F77E623B /* NJKWebViewProgressView.h */, - D657D2753D62E6E0FCEA4ABCF2F254DB /* NJKWebViewProgressView.m */, - ); - name = ProgressView; - sourceTree = ""; - }; - EAAC5BEAEA02EC6BD847E2F38A1B2EAB /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1CBD9EDCE583C2D898104B9EDA4E32A7 /* UMAnalytics.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - F3A51B0E7B4040E650A6BCF7D5A4C457 /* Masonry */ = { - isa = PBXGroup; - children = ( - 5C999B9FC2FBE9386AB1D815E7FEBCDE /* MASCompositeConstraint.h */, - 856E5A9F492377BE16CFF6F2EDB3EAD1 /* MASCompositeConstraint.m */, - 9061C7534C913C5303067FDB0D7A4F38 /* MASConstraint.h */, - 1C4E3C0E3F1B4968E82E901DBFE63970 /* MASConstraint.m */, - 5D86675944859EEA91AE297DBF2625BB /* MASConstraint+Private.h */, - FFAE6EC09F0505803E8392F2F6D4F3CC /* MASConstraintMaker.h */, - 3E657879A95ECD51B70B71C0752EAFEA /* MASConstraintMaker.m */, - D58483E70F4485E0D9E8F722A5917F44 /* MASLayoutConstraint.h */, - BDA8DA7D100B6495E2D43C82C7612A51 /* MASLayoutConstraint.m */, - 948A76E77D933AFB7F2E7F84DACCAF7F /* Masonry.h */, - D4EA592E4C7AC121AEDC66B83365EE25 /* MASUtilities.h */, - 5E63CCA35446BF2A18EC1177DC3DD8D9 /* MASViewAttribute.h */, - 9A217F63722F5C203E7C70902378EB14 /* MASViewAttribute.m */, - FCB338378A6A733051501E8BA0537EF5 /* MASViewConstraint.h */, - 7BFA8F4568DC6993DAA1E49FE4F9CE3E /* MASViewConstraint.m */, - F910EF56BD99E5E61575785D13E304E2 /* NSArray+MASAdditions.h */, - 959711D42295318CCA4EA87A792B3D84 /* NSArray+MASAdditions.m */, - B1B186968A284B72578A24B12864BEE1 /* NSArray+MASShorthandAdditions.h */, - 4BA631C4B98CD911AA42A46B1DD32925 /* NSLayoutConstraint+MASDebugAdditions.h */, - 5AA08622D5A5D33841C028CADDB93243 /* NSLayoutConstraint+MASDebugAdditions.m */, - AE0A7F1098573A8863A3DAFD6F5C0B3B /* View+MASAdditions.h */, - 7B07345DBE7B43EA49615E8040B44B9B /* View+MASAdditions.m */, - 21D3B009BFC3E1090BAA9060143EAC16 /* View+MASShorthandAdditions.h */, - F4AEF4063D5D16018040686460892C7D /* ViewController+MASAdditions.h */, - 72D3BAE7F54AA38BF7C28C5BEF554271 /* ViewController+MASAdditions.m */, - 422B949EEADCCDF0B2081EE5FE485349 /* Support Files */, + 32C89BF4798AB4ED10E9969C07146751 /* MASCompositeConstraint.h */, + 4253E7F7448B089D6F4CDECD149486CB /* MASCompositeConstraint.m */, + ADD95A322AD6CC6DFF9662EE73FD3866 /* MASConstraint.h */, + 6E421B865FF1305197CC9C5DB303BB22 /* MASConstraint.m */, + CA9FD8A6D417DF1249A66C83FFBE8E4C /* MASConstraint+Private.h */, + 237BE841F4D7796F3834F60938E612E9 /* MASConstraintMaker.h */, + 9C199822C99C320281338D998C03B995 /* MASConstraintMaker.m */, + AAF305E6DECD78168E49221E61B947D7 /* MASLayoutConstraint.h */, + B84232FF804EAAE9753EE17FCA85A8AE /* MASLayoutConstraint.m */, + B88609AD20FB25EC23E9CB38EFA4261C /* Masonry.h */, + 363026D36FA7E4000010BC1B5CD2B8E3 /* MASUtilities.h */, + EFC686D628AA3C2CFA30D354721530B4 /* MASViewAttribute.h */, + 1D11F0C588A7F5B9D6536F3DFDEFD786 /* MASViewAttribute.m */, + 07A743B083B30311B1DDC3865184A2E6 /* MASViewConstraint.h */, + 367D41745AB1AEBE8A1FFB6DB552ECEB /* MASViewConstraint.m */, + 5CFFA0AAC1274F48CF9BBAF77F583DE9 /* NSArray+MASAdditions.h */, + 463DAC3C5F6EF0A1CB5D363A99DD84AC /* NSArray+MASAdditions.m */, + 21D29A4125F838745482898EE34D680D /* NSArray+MASShorthandAdditions.h */, + 384EDBAD900277643587B535751AFC42 /* NSLayoutConstraint+MASDebugAdditions.h */, + 577E3F36FE44476EE775746E6BC7F3F2 /* NSLayoutConstraint+MASDebugAdditions.m */, + CA55885292577F09084E8F2BB1E84632 /* View+MASAdditions.h */, + FF6734BB50A15C4D259D3C14C0F70697 /* View+MASAdditions.m */, + 1942BB9A9B0208E8A598BB2F1563A2D0 /* View+MASShorthandAdditions.h */, + 40995236A773C9D30F835E44168085B1 /* ViewController+MASAdditions.h */, + 36EBA45514DE97C348F33C685F5897DD /* ViewController+MASAdditions.m */, + 7BEC3C845B8C6751D4BEC247118F7419 /* Support Files */, ); name = Masonry; path = Masonry; sourceTree = ""; }; - F45A1ECE10E465E390F43661E6E54ABD /* Support Files */ = { + 85A26EC9BC9FA781385D9AC8F9C05D82 /* NJKWebViewProgress */ = { isa = PBXGroup; children = ( - 54CF9BC5979AC4781A179C3A41CFC384 /* AFNetworking.modulemap */, - 399D564FB809301AF166719C68708229 /* AFNetworking.xcconfig */, - EBF593E3360685A3AAA0ECCC2F7F5BAE /* AFNetworking-dummy.m */, - 7599803B7C5D9F3EFB9E55E45EDD8677 /* AFNetworking-prefix.pch */, - 190821EE03B1A6308F75163E7C398205 /* AFNetworking-umbrella.h */, - 910B13121211FE5C2828D04AF6199605 /* Info.plist */, + D932A45A0149DAE2EFA50BB134CAAEC4 /* Core */, + A9519EB88243D934E8393F78AA2ADDCE /* ProgressView */, + 3C6ECA84E263337ACC001FB248021E44 /* Support Files */, + ); + name = NJKWebViewProgress; + path = NJKWebViewProgress; + sourceTree = ""; + }; + 85A7F2BEA5CCD1B360818E0ABC07C4FC /* Support Files */ = { + isa = PBXGroup; + children = ( + C933FC7192774929912447057B8E4562 /* Info.plist */, + ABEE1B30110BC813D624D9257CEA50D1 /* LKDBHelper.modulemap */, + 8B5E70F380A1881B0AE8CC9EF93F5CC3 /* LKDBHelper.xcconfig */, + 48886EB74B58FC75012D8AB06D74F958 /* LKDBHelper-dummy.m */, + 435EA74A816C71AE5579FF600A20AF60 /* LKDBHelper-prefix.pch */, + 61FE2DC3E37626E602B4123EBB968B51 /* LKDBHelper-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/LKDBHelper"; + sourceTree = ""; + }; + 8ECAC204F8287FAD67B6CC17235AA448 /* Core */ = { + isa = PBXGroup; + children = ( + B900B84AB25BE438B82CB50415C5ADE5 /* NSButton+WebCache.h */, + D1192940DD792A9A986CB6606BFB24E8 /* NSButton+WebCache.m */, + 4CFCC52EC62F150CB4DFCDB379045F8F /* NSData+ImageContentType.h */, + 4105F4E767CE55C31AE0E2A6D969A996 /* NSData+ImageContentType.m */, + 85FA16278B2D2A724F98F1B98A871074 /* NSImage+WebCache.h */, + CD9FF2C9E2179EFB4B65EAA1F59EB227 /* NSImage+WebCache.m */, + B391B9DE52D6245F6A0358F52F1E44B0 /* SDAnimatedImageRep.h */, + A683976152674929538EEEC6EFF05A4B /* SDAnimatedImageRep.m */, + 75491F997888B75AAB2C0AB027F83D5C /* SDImageCache.h */, + BEA9D04E7D8139122C3891161371C04F /* SDImageCache.m */, + B2EF076F89FAD3ACFE9DCCC73E3553A3 /* SDImageCacheConfig.h */, + 25972EA3E10BED458FF978D175A9C263 /* SDImageCacheConfig.m */, + AE85EEFEF754EE2C913DA2E906A10FD0 /* SDWebImageCoder.h */, + 1B118355C6E3369C778E749125C4F8AA /* SDWebImageCoder.m */, + 72575B068A276F2F8A0CF243743B3E74 /* SDWebImageCoderHelper.h */, + 91A39121A9FBC45737A0102A4364012D /* SDWebImageCoderHelper.m */, + AF292596176CE1B357AB1A3CC5FC2AA6 /* SDWebImageCodersManager.h */, + 07CCB23292D6E83E10E681E65611A521 /* SDWebImageCodersManager.m */, + 88446EB28B584D07BED817C62D06D29D /* SDWebImageCompat.h */, + B416F9C983C43629DD021B63239CC1E0 /* SDWebImageCompat.m */, + CB4643E8EBAD5EE3D3BEF6DE78EBAA46 /* SDWebImageDownloader.h */, + 12BE137618AD905F6C08A0688A5AEC0F /* SDWebImageDownloader.m */, + B946CD9D828545C56B16DD0BAE1A4357 /* SDWebImageDownloaderOperation.h */, + 84A34E767AC05FDBD3D849436D0BCCEA /* SDWebImageDownloaderOperation.m */, + 6F53130DDA9FEA279EEACE1E1D479D77 /* SDWebImageFrame.h */, + C7D7CD906FAB43D44FF0E620B8F6644C /* SDWebImageFrame.m */, + CCD140D091E406CA53B6F3992BBDB579 /* SDWebImageGIFCoder.h */, + D526289C8F52F38595B594AF6ED917FA /* SDWebImageGIFCoder.m */, + 1B2009C43A73788FC750D0B1C40ECA60 /* SDWebImageImageIOCoder.h */, + EC02366395598C42E28F51101028C3D3 /* SDWebImageImageIOCoder.m */, + 2E18D0C002A9B8B1BFB6F6FD63278467 /* SDWebImageManager.h */, + F6D2D8438420EB7A9186D08660AD7BD6 /* SDWebImageManager.m */, + 10EDF99232E824A4129018791B729BC7 /* SDWebImageOperation.h */, + C5DC2D40CE636899E96F07F2E86609A7 /* SDWebImagePrefetcher.h */, + CDF02B7C8432A7AF339B1C46A875FAA1 /* SDWebImagePrefetcher.m */, + 4895A24A9EA8533671D64541ECA375BD /* SDWebImageTransition.h */, + 8C47585F4328CD92273C4B86865F9F95 /* SDWebImageTransition.m */, + FEE4923BAFE446FDB51B8375C4DA4869 /* UIButton+WebCache.h */, + 73A0A8125787204B223B07F7C9F0A42E /* UIButton+WebCache.m */, + C74B6FEF3E092E16E6AA34C13A34D0B9 /* UIImage+ForceDecode.h */, + BB8ED24222958BA93B420822394B77BC /* UIImage+ForceDecode.m */, + 9265EF5245C8B9E17305393357C5D93F /* UIImage+GIF.h */, + 7D5D3928FE1E7CA0D8E3A946574DC2F0 /* UIImage+GIF.m */, + 897350FBCDF747BE59B857BB5740214A /* UIImage+MultiFormat.h */, + C4E76FAF8061A10B224E54FE0D78F122 /* UIImage+MultiFormat.m */, + 26168530D466303D1859051CADEAF5EB /* UIImageView+HighlightedWebCache.h */, + 59E8BF8E1889AB501DDF9C32A0B690F8 /* UIImageView+HighlightedWebCache.m */, + D1C4ECF2FBF4E01A9207EE8FD4F3FF66 /* UIImageView+WebCache.h */, + B66D98C970953F228BE3D0F043AA6859 /* UIImageView+WebCache.m */, + C5AB81B04A2D01A1380ED02CA7F95DE4 /* UIView+WebCache.h */, + CADC5017C63268D068AD5B7FB33E0BFC /* UIView+WebCache.m */, + AC5B168B958ECE131EC368A4E10C6DEB /* UIView+WebCacheOperation.h */, + 250AC017E1404E43770F53CAC6280DC7 /* UIView+WebCacheOperation.m */, + ); + name = Core; + sourceTree = ""; + }; + 912D0FA9DD1FA891FC42F760869ABA1F /* Serialization */ = { + isa = PBXGroup; + children = ( + 88FA75A73C1252600B984CF5DE17B8CE /* AFURLRequestSerialization.h */, + 805D42FFE0EC9DD228E5EB6C75F8E9AA /* AFURLRequestSerialization.m */, + A21BBBF163BCA4C3910C8490302E3372 /* AFURLResponseSerialization.h */, + 967F8C400CE4F9921B132F3F960E9FF0 /* AFURLResponseSerialization.m */, + ); + name = Serialization; + sourceTree = ""; + }; + 95FEF0CE2F0A92C7121D81C2CB15AC44 /* Support Files */ = { + isa = PBXGroup; + children = ( + EEB3011FEE0FAEAB95CDBD6F94B6266A /* Info.plist */, + C49E0B9B92E3FB3DF23C94F2D7F2B819 /* MJRefresh.modulemap */, + 7F2A106A290EC7B512FC0E8A9C14E807 /* MJRefresh.xcconfig */, + 74C8E35BDB3CC1024935C804E53F0DD2 /* MJRefresh-dummy.m */, + E34D12543D1E0D6B0197D19F99328425 /* MJRefresh-prefix.pch */, + 0D16FD952562C34388EC43F2A7733B27 /* MJRefresh-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/MJRefresh"; + sourceTree = ""; + }; + A633D579D4B888F7971A6C11883C1718 /* AFNetworking */ = { + isa = PBXGroup; + children = ( + 404662E4EA47719280C225A3F07A8A6A /* AFNetworking.h */, + E94D47C3F28D29C969506120624B288D /* NSURLSession */, + 44CAD7891D251809201C7D44DC9CDB01 /* Reachability */, + 638FE4730E65D92ADBB4F31EC2BCD78C /* Security */, + 912D0FA9DD1FA891FC42F760869ABA1F /* Serialization */, + F3C3E5A59E64EBF70E1674F01580AE36 /* Support Files */, + 6B27D673B93E9DDC83DD64013DDF4CFB /* UIKit */, + ); + name = AFNetworking; + path = AFNetworking; + sourceTree = ""; + }; + A8FCFF06C4D1130E14692E5D37CE3D59 /* Socket.IO-Client-Swift */ = { + isa = PBXGroup; + children = ( + D82A606DAFFFB4961C3B9C2FA8505535 /* SocketAckEmitter.swift */, + 3D3288F586F676906211064535ACEA59 /* SocketAckManager.swift */, + 027B44E48FB40AD9D0DC25B70D6AE8CE /* SocketAnyEvent.swift */, + 22A12862A28052673208D864DF5F8671 /* SocketEngine.swift */, + 002CC32FEB8FB1D1B4D4BA9D7AE0CB41 /* SocketEngineClient.swift */, + 7BD28F6214D96C6BCC2EAF3C08B2EBA4 /* SocketEnginePacketType.swift */, + B4AF1BBB3946B6E0D89CDC1AE59011B0 /* SocketEnginePollable.swift */, + 936CB1BC52F552DA2661695DAD338FA0 /* SocketEngineSpec.swift */, + EAB6CB6F47D077D87B2488C5A7D01EE4 /* SocketEngineWebsocket.swift */, + 6191ABE66A1BB9B2F88FFD6AF6186D63 /* SocketEventHandler.swift */, + 93BF77A950CD15978D9DA654DDF789CD /* SocketExtensions.swift */, + 986BB8C05577A2D5C64F498406015E85 /* SocketIOClient.swift */, + 768A5DE5D08824954B4B101A2FB6B2BD /* SocketIOClientConfiguration.swift */, + 90609B4B8F17E6BD520EC73A397904D4 /* SocketIOClientOption.swift */, + 79898C8FB8D364D3B8B09502372E9F0B /* SocketIOClientSpec.swift */, + 3859DA0DF93E825130ADB78D0E66166E /* SocketIOStatus.swift */, + 55CDFB91944CA5A1481875292A58F12A /* SocketLogger.swift */, + A6DAF6AA9DC71209F96E9D4506478663 /* SocketManager.swift */, + 6F43E521A7D9B6E90D0A9E791D4C725D /* SocketManagerSpec.swift */, + D2C3B4A8303BF777A59CF2BAC331C8B6 /* SocketPacket.swift */, + C722C8355643E88536A2074EFDB9B2DA /* SocketParsable.swift */, + F30327CFECF1D69BC51289B5CCC97712 /* SocketRawView.swift */, + 7704E7E2B7BD84344BB610CC27D5A70E /* SocketStringReader.swift */, + 852AB63551AC52D340F98C97A94D9FD6 /* SocketTypes.swift */, + E3949679577E6689BFFF358B9518FE13 /* SSLSecurity.swift */, + C052FF26712528C42D280946BC5DD978 /* Support Files */, + ); + name = "Socket.IO-Client-Swift"; + path = "Socket.IO-Client-Swift"; + sourceTree = ""; + }; + A9519EB88243D934E8393F78AA2ADDCE /* ProgressView */ = { + isa = PBXGroup; + children = ( + B8C80B2C162E2DADAE6E64B7C59BD395 /* NJKWebViewProgressView.h */, + 7D0587B9F9A54258E4EC092F7FCE94EC /* NJKWebViewProgressView.m */, + ); + name = ProgressView; + sourceTree = ""; + }; + AD0DF298644AA6EFB83ADF5D1723BD32 /* LKDBHelper */ = { + isa = PBXGroup; + children = ( + 0664FE391669606C208EA556EBDD28A5 /* standard */, + 85A7F2BEA5CCD1B360818E0ABC07C4FC /* Support Files */, + ); + name = LKDBHelper; + path = LKDBHelper; + sourceTree = ""; + }; + C052FF26712528C42D280946BC5DD978 /* Support Files */ = { + isa = PBXGroup; + children = ( + 5EA0FD074C76AC8611D95613CDEB4311 /* Info.plist */, + E2ED3BE7480909B51B50DE2998A28003 /* Socket.IO-Client-Swift.modulemap */, + 86A54BF6E391B76DFBE0F0695DB27785 /* Socket.IO-Client-Swift.xcconfig */, + 1501D5687E1AF56AAF3E46B413F8A46B /* Socket.IO-Client-Swift-dummy.m */, + 7E9D6482F9A7BDDA51F2CA23CC989F00 /* Socket.IO-Client-Swift-prefix.pch */, + 1CA5AAF13D2E09670AF9CBA0B18BF39F /* Socket.IO-Client-Swift-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Socket.IO-Client-Swift"; + sourceTree = ""; + }; + C64A38BCDA1A3F78AC00751F0655D817 /* TTTAttributedLabel */ = { + isa = PBXGroup; + children = ( + D18BF93986D1392783B2FEBA0B4EEBE5 /* TTTAttributedLabel.h */, + 98D89B37F7C92F976B671CF4941E8120 /* TTTAttributedLabel.m */, + CFAE78A59712B086D2CC3BDF37EEC08B /* Support Files */, + ); + name = TTTAttributedLabel; + path = TTTAttributedLabel; + sourceTree = ""; + }; + C7192BD386630DD39E6C218B6259B956 /* Support Files */ = { + isa = PBXGroup; + children = ( + E64BCF4BA39828C61CC26523596F36BC /* Info.plist */, + 59B9D327C5265DEE8087CB64AB64426F /* Starscream.modulemap */, + 53F4D20C7F0D216C630BE1353AC09D55 /* Starscream.xcconfig */, + 5BC61B5225D9CEE976A35A242843BF85 /* Starscream-dummy.m */, + 4C5390F4E86B7D09F66AD00A442AB988 /* Starscream-prefix.pch */, + 270472B1F4EA9863212F85E4EAB5B497 /* Starscream-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Starscream"; + sourceTree = ""; + }; + C9AC7881E3A93086F2058658C83B43BE /* Frameworks */ = { + isa = PBXGroup; + children = ( + 23AAFF4BE17FB72260148442F598E055 /* FMDB.framework */, + D8509BE0EBE02FAB118A15EBE60C8E47 /* Starscream.framework */, + 7E69D627DEF05060BADCBCC9B07E96BB /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + CCA25ECCC450E021E069120D409442A4 /* FMDB */ = { + isa = PBXGroup; + children = ( + 5D18979E16AA15B8FC94B1945A0FB2AB /* standard */, + 0C0EA7F3A802D825B66C8E23BA35A161 /* Support Files */, + ); + name = FMDB; + path = FMDB; + sourceTree = ""; + }; + CFAE78A59712B086D2CC3BDF37EEC08B /* Support Files */ = { + isa = PBXGroup; + children = ( + 4F5A634FE6A212612B8063E798439185 /* Info.plist */, + 8B7517F6F47C3E3DBDDC7897D5532B4E /* TTTAttributedLabel.modulemap */, + 558D6E7CB99E8F711140222C4C7FD6C0 /* TTTAttributedLabel.xcconfig */, + CECF499859A92AC25079255ECACA8E36 /* TTTAttributedLabel-dummy.m */, + 4A22823A58050582ED95D1A767F76671 /* TTTAttributedLabel-prefix.pch */, + 044E5621EF88BE1E4C8B35094500FCA8 /* TTTAttributedLabel-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/TTTAttributedLabel"; + sourceTree = ""; + }; + D2250417B8C5D2E16EEF527DAF5DD1A2 /* Support Files */ = { + isa = PBXGroup; + children = ( + ADA2CB35E59C1515D5BED389D956661B /* Info.plist */, + 2347C099D7F33A036587B18EE3CEFEB6 /* YTKKeyValueStore.modulemap */, + 18230792D7301ED554D8EBE3D27C83C6 /* YTKKeyValueStore.xcconfig */, + 9E018CB10D71F6E7076E334BE4031987 /* YTKKeyValueStore-dummy.m */, + 727870954CC82AAEDD7172910D081D2F /* YTKKeyValueStore-prefix.pch */, + FAA85730E7ECFBD1CCEB7260FF00F4C2 /* YTKKeyValueStore-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/YTKKeyValueStore"; + sourceTree = ""; + }; + D2A62A7B2591E116CD2CB1E591BABAED /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6C9A66715097B49E44CC06CFE998E3B8 /* UMCommon.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D4D12C5B91A26ECDA4A6A7DBDF734592 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 46F020E16865FD56CE53816167224099 /* UMAnalytics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D932A45A0149DAE2EFA50BB134CAAEC4 /* Core */ = { + isa = PBXGroup; + children = ( + BB6C3ABE582E083225418DE0C8C70C57 /* NJKWebViewProgress.h */, + B3FC77617DC552A6560A5396024E9F3E /* NJKWebViewProgress.m */, + ); + name = Core; + sourceTree = ""; + }; + E0AB66D2C96E63CD3CA32758697A0143 /* Toast */ = { + isa = PBXGroup; + children = ( + D03FDD61963B602D63D86983F58A4B56 /* Toast.h */, + EC74917D726BBCA053741855222BD20F /* UIView+Toast.h */, + 6594B566BAF22CF7F3BF954283907D88 /* UIView+Toast.m */, + 56D87990CE17BF3E4B7E67FAA38846C4 /* Support Files */, + ); + name = Toast; + path = Toast; + sourceTree = ""; + }; + E1DEBC0332688293576CF0781BF2B546 /* UITableView+FDTemplateLayoutCell */ = { + isa = PBXGroup; + children = ( + F51B36454E6DCF580D43CCFCB03FC536 /* UITableView+FDIndexPathHeightCache.h */, + 3DF7CF70E97B77C95449324D577D2DE5 /* UITableView+FDIndexPathHeightCache.m */, + 18DDE12559A163C7C94F4FE3A82C3212 /* UITableView+FDKeyedHeightCache.h */, + ECFAC79A556CD170296E2CF2FDE40919 /* UITableView+FDKeyedHeightCache.m */, + F76496371A94D04C6DEB3EBEEB62540B /* UITableView+FDTemplateLayoutCell.h */, + 5F1558AF059B62809206FC3CD1039CBA /* UITableView+FDTemplateLayoutCell.m */, + EF79A7916BB6B36C2A83C99F45DDA1C3 /* UITableView+FDTemplateLayoutCellDebug.h */, + E3206BC9B15475420835FF224D6604E1 /* UITableView+FDTemplateLayoutCellDebug.m */, + 337E1E73A7CE2DEDA6F9FB1837F71269 /* Support Files */, + ); + name = "UITableView+FDTemplateLayoutCell"; + path = "UITableView+FDTemplateLayoutCell"; + sourceTree = ""; + }; + E63D2863D5FB7DC212A24B273C014E03 /* JSONModel */ = { + isa = PBXGroup; + children = ( + C8B763BF7B2D2A4C39D2DC28299CEF57 /* JSONAPI.h */, + B2DEBA7CEFB5421B185C9365A7AA8A75 /* JSONAPI.m */, + DCF6F5650FAA9B82ED6F665EAB1DE040 /* JSONHTTPClient.h */, + 1B4BDE950FE4B829BD4E2D8E0B86A002 /* JSONHTTPClient.m */, + D143D5CBDD8A310F6BE8B5FE049E63B7 /* JSONKeyMapper.h */, + BDB59FA6744E05662DDE8F5FB6697313 /* JSONKeyMapper.m */, + A2092DB43436F5251A059C3C4A62A935 /* JSONModel.h */, + F6F9763802AC8D472A1FFBF6A867B33D /* JSONModel.m */, + 66D6A876FB337C3A5AEC09F74362A022 /* JSONModel+networking.h */, + E88C81586D204E9EC5AB0CBFE3620057 /* JSONModel+networking.m */, + 774A10F51C61AA781BFD1C4397931231 /* JSONModelClassProperty.h */, + 6779C8F389FC4B45319BDA12E59B2BFD /* JSONModelClassProperty.m */, + 65FA72B7E48A3FABA22AE5D855BB186C /* JSONModelError.h */, + A1D013A487C85EC1042B4A1ED71E7C6D /* JSONModelError.m */, + 7E7D955074A0ED0B9FF131595E872064 /* JSONModelLib.h */, + 6FF4D47DF573B44C28B3DF814C3E50CB /* JSONValueTransformer.h */, + 118814FC7D9B5A7CF1BF99F325AF8488 /* JSONValueTransformer.m */, + 61C0046882C98AAEC1ECEB7607191880 /* Support Files */, + ); + name = JSONModel; + path = JSONModel; + sourceTree = ""; + }; + E94D47C3F28D29C969506120624B288D /* NSURLSession */ = { + isa = PBXGroup; + children = ( + B6841A5F308297E91E99E7B83292909E /* AFCompatibilityMacros.h */, + FEAAD1709AA2F9B0C1E7F611FA261B98 /* AFHTTPSessionManager.h */, + 531C313E293B098E8DD0AE16F9F05E50 /* AFHTTPSessionManager.m */, + 7F8965BFE9CC1CE8B5CFC2B14D7E2DA8 /* AFURLSessionManager.h */, + C5E794D2376437EFF78B2C7EB9D7060B /* AFURLSessionManager.m */, + ); + name = NSURLSession; + sourceTree = ""; + }; + F3C3E5A59E64EBF70E1674F01580AE36 /* Support Files */ = { + isa = PBXGroup; + children = ( + 7544FB7D9022E74937D8BE12C05191AA /* AFNetworking.modulemap */, + CC29AB6DCE0390D33472279DBF9F826F /* AFNetworking.xcconfig */, + D083351E8A8E8A86A59BA3A3863723C4 /* AFNetworking-dummy.m */, + F0A568A70445E76EE1B2DC6996139B64 /* AFNetworking-prefix.pch */, + 79CF50141FCA7A6797717FC93955DAF1 /* AFNetworking-umbrella.h */, + D04F3E0E968470EBB1EC4F70818FABF3 /* Info.plist */, ); name = "Support Files"; path = "../Target Support Files/AFNetworking"; sourceTree = ""; }; - F69DFF2722014995F8918FD2D2074633 /* Frameworks */ = { + F3CDD0BE903CBFB244CDB880490A04EC /* Frameworks */ = { isa = PBXGroup; children = ( - F0AC7473E3EE53CA223DF55277610DA9 /* UMCommon.framework */, + 5842466C4060B5C8F8FB2C92F2D73D97 /* libjpush-ios-3.1.0.a */, ); name = Frameworks; sourceTree = ""; }; - F91319FF5B6C5334AFA343B85B499520 /* Core */ = { - isa = PBXGroup; - children = ( - D092048B929608F69E9F23C84179CEC2 /* NJKWebViewProgress.h */, - 8D6CD4E8532F4326AFE1388B3C37F1A9 /* NJKWebViewProgress.m */, - ); - name = Core; - sourceTree = ""; - }; FBB949B909D1BC7355CE4C96A365A607 /* Pods-GIGA */ = { isa = PBXGroup; children = ( @@ -1901,6 +2065,37 @@ path = "Target Support Files/Pods-GIGA"; sourceTree = ""; }; + FBDA7C8860678A5E3250E18D9655919E /* Bugly */ = { + isa = PBXGroup; + children = ( + 4BC5DD01B88C70485C05DCF48B936BD1 /* Frameworks */, + ); + name = Bugly; + path = Bugly; + sourceTree = ""; + }; + FCCB57F67790368B6E845405EBA032D6 /* Resources */ = { + isa = PBXGroup; + children = ( + 3AB36856959C85924D590AFD2695D2B6 /* MJRefresh.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + FF13C69FA758102BC163770F349C96CA /* Support Files */ = { + isa = PBXGroup; + children = ( + B9995F667229F5D1A39B33E48EA6FCD5 /* Info.plist */, + C35DDEF1EDC8880803553CEF5DDDCA6A /* SDWebImage.modulemap */, + D9BDB47A250C4BB9FE058D907EC81077 /* SDWebImage.xcconfig */, + 1512D35F866701255C740BB8D89CB037 /* SDWebImage-dummy.m */, + 7C57BCFDE1C485BAE504B6F82A3BCAC0 /* SDWebImage-prefix.pch */, + 5660075EFC0AA10C221C3D12FB6522F3 /* SDWebImage-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -1955,6 +2150,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 3D1D3FD07EADAAA80F00A5970E4DE970 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3463AED0AFF441E7AE64C5818A235DEE /* YTKKeyValueStore-umbrella.h in Headers */, + 0BD29DA68F0ECBAED7316565DCA70D64 /* YTKKeyValueStore.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3D2A080C5CD4ED4520C6AEFA1D6BA26F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1969,15 +2173,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 437257DE3C6D9F839BDC24CB20C0A24B /* Headers */ = { + 407CE9FF1A14D66AD1FE967456A950E9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 91D993FDEE2D0C2D3B4047D9E8BEE9BA /* UITableView+FDIndexPathHeightCache.h in Headers */, - 4BA2F37913AFB59DC45A84CA29AAB2F8 /* UITableView+FDKeyedHeightCache.h in Headers */, - D88C9F75BDFC1CE7034687208D830D81 /* UITableView+FDTemplateLayoutCell-umbrella.h in Headers */, - C5BCB61A9B530249DD0CEC33C6E07EB3 /* UITableView+FDTemplateLayoutCell.h in Headers */, - CB8230F8171A44F80B11C0BE0E8420AC /* UITableView+FDTemplateLayoutCellDebug.h in Headers */, + 9701C0D167F477E53632D1A8FBDF6556 /* Socket.IO-Client-Swift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2008,22 +2208,41 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4BA32C028BF2AB9BF5D03EAACD01702B /* Headers */ = { + 4564ABBA1717987BB224F78BEAEA3C8C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 95A76E599F3448FD0E5C736D98354DA8 /* YTKKeyValueStore-umbrella.h in Headers */, - 65EC43DAB5ACAAEE8F1CE61529A09102 /* YTKKeyValueStore.h in Headers */, + 1F150FE6E6E8D78C6DBBA7870EA8E4C4 /* UITableView+FDIndexPathHeightCache.h in Headers */, + 7072311B8847A2004F9C31069CC00E19 /* UITableView+FDKeyedHeightCache.h in Headers */, + 5C33A1FFCCF56C70F3BEF5C8A478712B /* UITableView+FDTemplateLayoutCell-umbrella.h in Headers */, + 511F4CF798D6A4A3688B6BB842C48D87 /* UITableView+FDTemplateLayoutCell.h in Headers */, + 53DB4048614C4483D678AF52930E9ECD /* UITableView+FDTemplateLayoutCellDebug.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5C04B9F89558E45F265E0006FBC995EE /* Headers */ = { + 512E6EE9FA761557E8CCF9BF26270143 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - ECD71FC38CCAFD1ACC2E546FAAEC0D60 /* SocketRocket-umbrella.h in Headers */, - 106D6F89336E06DBE4E973818BD887AA /* SocketRocket.h in Headers */, - 16831E5AE64E97E9BD8FA96E93C8DF19 /* SRWebSocket.h in Headers */, + 3DF9076C816AE6338CE95412E588DF54 /* Pods-GIGA-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5BCF5028D69FA0C4AF14DA4074F13C7D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 5239E6CA49837A90A08639E1E4CBB3B1 /* Toast-umbrella.h in Headers */, + 13F320C89A0757B4DBD7A1B0C47B7B46 /* Toast.h in Headers */, + 57C1171188E1A77E65C670ED986D46DD /* UIView+Toast.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A8626284EBDE24E4BF46F02D9E3FF648 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 42B30C255DE8D19534405DAD5EA14C91 /* Starscream-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2063,33 +2282,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DD5EB35A6633261597F3AA694BC6C2A4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 3ACB80ACD4B743F9EAD47339F10594A0 /* Toast-umbrella.h in Headers */, - AF5A5DF8096192FC74E02A3408AADC21 /* Toast.h in Headers */, - 4CC5EC830A89C3CB7F53C52CDF13CF81 /* UIView+Toast.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DEBE5273066D0E9ECC684BD423857AA5 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - AB2CEAF630532A05339889D5663E1C08 /* TTTAttributedLabel-umbrella.h in Headers */, - 4B8BFD0889A2513D7BAB9D582C077810 /* TTTAttributedLabel.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E5AB7E4C7C9142C52B005A940AFAC12E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - EBA34A3FBF57D5834C2EC4722210066A /* Pods-GIGA-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; ED8FF911FDD33A3EF0E4C647B44A922E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2103,6 +2295,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + EE5D40E224195E31FA50038B96EEA6A5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 271DED3D581E835D146A9B5800F50339 /* SocketRocket-umbrella.h in Headers */, + BAF4176A24E04B8CBE0FA434C1BF810B /* SocketRocket.h in Headers */, + D5153467E7A41556D6ECF2FF3627EF13 /* SRWebSocket.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F3E9930C736C01D12F5733EFD1F0A948 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -2126,44 +2328,87 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FEDF3C3884236EB4E61F6B9D4D2048BA /* Headers */ = { + F94C73A9196403C827ADA2B7D78833DE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 93BF58C19C5E6A78EDAA38855DDDE348 /* NSButton+WebCache.h in Headers */, - 68168E99337712B83A79810B55602D01 /* NSData+ImageContentType.h in Headers */, - 2D170EDC2BE147629AF7D661BCDBD2AF /* NSImage+WebCache.h in Headers */, - 538E922BA03E8B2C147BF047ED195DF4 /* SDAnimatedImageRep.h in Headers */, - 5423F7BB578AF69EEFD339909261F01E /* SDImageCache.h in Headers */, - E82991D928C3CFEDC23555B3F2CB017D /* SDImageCacheConfig.h in Headers */, - 48EEC19D6C3DCAD43836914B8D0F1EB9 /* SDWebImage-umbrella.h in Headers */, - 5E0CA8102FFB7E6CB9B04DF6DEC83AEE /* SDWebImageCoder.h in Headers */, - 43E74DBE8C8D7F79A45B9344D2D2D1BD /* SDWebImageCoderHelper.h in Headers */, - 0B53B4188A47FECDD7E1798EAB8B6B9D /* SDWebImageCodersManager.h in Headers */, - 39530A48FC40F64E8B08B45AD5555D0A /* SDWebImageCompat.h in Headers */, - A9A91BA2015E3033BF4DAD29264D03F0 /* SDWebImageDownloader.h in Headers */, - E23258A837180BD5EBE5217D1D69909B /* SDWebImageDownloaderOperation.h in Headers */, - 182956A69F1B4571D23008AD8C160B3E /* SDWebImageFrame.h in Headers */, - 76C5CEA598337CC1FC825899FF1CDAD9 /* SDWebImageGIFCoder.h in Headers */, - B215AD383364D4C829F4EC9803568809 /* SDWebImageImageIOCoder.h in Headers */, - B1C1164914E351C022A5C6637E8599BF /* SDWebImageManager.h in Headers */, - E008B05370128F8FD8B4B627C8C4D4F4 /* SDWebImageOperation.h in Headers */, - D16764F0C1C13D1FE859B4EA2B33E474 /* SDWebImagePrefetcher.h in Headers */, - 53514C9A8CBD604E5DE2ABFFB322C3AE /* SDWebImageTransition.h in Headers */, - F3FBCDC1B575D58AD9F78DA4AF687438 /* UIButton+WebCache.h in Headers */, - 7E653E1D9DF593D82DEA20D2340F2C1E /* UIImage+ForceDecode.h in Headers */, - 0ABD694709F6B146E908A254CDF1A968 /* UIImage+GIF.h in Headers */, - 38A1AC3A26C93B53FCD959E136990990 /* UIImage+MultiFormat.h in Headers */, - 1624AFE5A1732E1D58AB884329EB4C94 /* UIImageView+HighlightedWebCache.h in Headers */, - 6115C3ED460710318D33BBB7375B07A9 /* UIImageView+WebCache.h in Headers */, - 0F3CEE11E6552204415ED069B86372BC /* UIView+WebCache.h in Headers */, - 7F37E7BCFFC785854FD19F23B89C39AE /* UIView+WebCacheOperation.h in Headers */, + 1C22674A488487F3510ED9E6C484C937 /* TTTAttributedLabel-umbrella.h in Headers */, + A6CED0722D83F40F3462956E04841AC8 /* TTTAttributedLabel.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FEC5DE9A4AF76643C746A6BC541B1999 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DEFF8A97422F8839254684CE8C88F4E /* NSButton+WebCache.h in Headers */, + 5F6ABD27328146E613415A59A1521EB6 /* NSData+ImageContentType.h in Headers */, + C25A6DEF8B9F5859BF6E8FACD53F88BB /* NSImage+WebCache.h in Headers */, + EF09BB047F4238F812F93E5FA7F31E0E /* SDAnimatedImageRep.h in Headers */, + 80C7997C4D60D2103A63AAE65EA63C8B /* SDImageCache.h in Headers */, + 17E52896A3ABBD4CCAB35046E48BE055 /* SDImageCacheConfig.h in Headers */, + 790B528109D306DAF9105F80D932F218 /* SDWebImage-umbrella.h in Headers */, + CB52B7EF0160C5FC511C13D7E6D2A8B7 /* SDWebImageCoder.h in Headers */, + DDEA8BEE980D9DD7E9E746DFEAB726E4 /* SDWebImageCoderHelper.h in Headers */, + FA1282B06560C854E5FD9022B8429FFC /* SDWebImageCodersManager.h in Headers */, + 4B2CCAA899BA00D1D49EC70C0BCF57BF /* SDWebImageCompat.h in Headers */, + 7B7402278FE9063BB449B30F22B09DF7 /* SDWebImageDownloader.h in Headers */, + E82DEF0A70F9ABCC6EAA900B9BA3AB16 /* SDWebImageDownloaderOperation.h in Headers */, + 206E174869FE4C5679DC9EFADE9FDC0E /* SDWebImageFrame.h in Headers */, + E023B49FEB84BA9DC22FBB8CC7B348FD /* SDWebImageGIFCoder.h in Headers */, + 4A712D32646F119F208BBA3D2A7C0672 /* SDWebImageImageIOCoder.h in Headers */, + EEDE8B3B8AF5A20C039DB6F1DD25BCC6 /* SDWebImageManager.h in Headers */, + 16AB19AD78FA194D0ED3A8EBE7A347FB /* SDWebImageOperation.h in Headers */, + 7BD298BE626433E40A97797DFBF271A8 /* SDWebImagePrefetcher.h in Headers */, + 87C7C6E2F687289E7EFB48EA630B3EB9 /* SDWebImageTransition.h in Headers */, + 307ADC5FBF528D9C850F5CEB47EFCC99 /* UIButton+WebCache.h in Headers */, + 781BC730696BEA5F8680861CE876AA2C /* UIImage+ForceDecode.h in Headers */, + E26423151F8032E63A36100AABB61D43 /* UIImage+GIF.h in Headers */, + F1560689B79F19D606B9EA5205BA7C80 /* UIImage+MultiFormat.h in Headers */, + BACE840E379E35D62AE29B87B8337CDB /* UIImageView+HighlightedWebCache.h in Headers */, + 83EB76688541963CC6A7837966631AFD /* UIImageView+WebCache.h in Headers */, + 9939FB017D464F93944D8624AD4EB0D1 /* UIView+WebCache.h in Headers */, + 00D9918CA212DF704D4248EF869DB868 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 1EB527CCE1B0F3D64088AFF319F1FBA4 /* TTTAttributedLabel */ = { + isa = PBXNativeTarget; + buildConfigurationList = FE1D69742C36F3E572A7171E67E92F3C /* Build configuration list for PBXNativeTarget "TTTAttributedLabel" */; + buildPhases = ( + 9C25B5FA35DC9EC5F136CC6548A928D0 /* Sources */, + E7CEC03E6403E87DB68C93D8409CC6A1 /* Frameworks */, + F94C73A9196403C827ADA2B7D78833DE /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TTTAttributedLabel; + productName = TTTAttributedLabel; + productReference = 22776590D888620F659DDF182BE8BEFC /* TTTAttributedLabel.framework */; + productType = "com.apple.product-type.framework"; + }; + 203E2ACFC533A5A3C189DF6DCDF9A3CA /* Toast */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9C1388254385C167C3486774DFA19E4B /* Build configuration list for PBXNativeTarget "Toast" */; + buildPhases = ( + 5AB88D7903550EABB072B69F1E682D00 /* Sources */, + 924592AD76A1CAF35F2E54F909E21BCC /* Frameworks */, + 5BCF5028D69FA0C4AF14DA4074F13C7D /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Toast; + productName = Toast; + productReference = 547FB455959DBDAB1B311703DC4655D1 /* Toast.framework */; + productType = "com.apple.product-type.framework"; + }; 251BAD17812F7EBF6532EACF66F941C3 /* FMDB */ = { isa = PBXNativeTarget; buildConfigurationList = 5B0566FF0CE681AC326D316CEC45A8CF /* Build configuration list for PBXNativeTarget "FMDB" */; @@ -2178,41 +2423,94 @@ ); name = FMDB; productName = FMDB; - productReference = 8E5DA37AC55ADD979E448DB4CCE99D62 /* FMDB.framework */; + productReference = 3F9C38A75057CBD015D16FAA76005ECB /* FMDB.framework */; productType = "com.apple.product-type.framework"; }; - 37E3F76B9AB64BE59F26C42C0DB02B51 /* SocketRocket */ = { + 3578E512F8C94E9B49F88CAA98690402 /* Socket.IO-Client-Swift */ = { isa = PBXNativeTarget; - buildConfigurationList = CEE1C7C5EB2923B3BFB904DF6E10ABAE /* Build configuration list for PBXNativeTarget "SocketRocket" */; + buildConfigurationList = AD43B7EE0B1CE05F5620E0CB4E98AA04 /* Build configuration list for PBXNativeTarget "Socket.IO-Client-Swift" */; buildPhases = ( - 9FF620AC95D419DCDC9860DC4E44F14E /* Sources */, - 89CB805BF93CBFFF9178240B3DA62840 /* Frameworks */, - 5C04B9F89558E45F265E0006FBC995EE /* Headers */, + C0BD0068ECDB12149AD4414CBA31B505 /* Sources */, + 975519A8DD8D28FC91AEE205A5ED5A3F /* Frameworks */, + 407CE9FF1A14D66AD1FE967456A950E9 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 9CAF310FFB6FDCB7682F7D72D8E2A542 /* PBXTargetDependency */, + ); + name = "Socket.IO-Client-Swift"; + productName = "Socket.IO-Client-Swift"; + productReference = 0F329A9EA016DA0D20BA2C5C7D0DAC79 /* SocketIO.framework */; + productType = "com.apple.product-type.framework"; + }; + 41BE4379487F65BC8832BC9F797E1290 /* Pods-GIGA */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1E5906AA4CEA8D63C4872E060D702ED0 /* Build configuration list for PBXNativeTarget "Pods-GIGA" */; + buildPhases = ( + 4EE946193A9F32FB7CAFC4A21B5EA358 /* Sources */, + 718E88DD1843C285DD139D86BA77F7FB /* Frameworks */, + 512E6EE9FA761557E8CCF9BF26270143 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 3474D6C3280BAA5B3AE4B633886CFAFD /* PBXTargetDependency */, + 8C3790FF34469A5A4973C79FADDC3A8C /* PBXTargetDependency */, + BC40A9A910B2C3270FB0877043CE564C /* PBXTargetDependency */, + 34FD209D36BCC2071BC143882F6FFD7F /* PBXTargetDependency */, + E99E9B707573763E42EBDE5EFD4BB215 /* PBXTargetDependency */, + F5433A64C8D149225D11B9976EEA15C2 /* PBXTargetDependency */, + 7B269A4DC3EE69401D85709E40F00741 /* PBXTargetDependency */, + ADC0001F8C3FA28B1BD19C658A16229E /* PBXTargetDependency */, + 0BE77DA234F6DEC499E903B8E7EB5483 /* PBXTargetDependency */, + 079925957D86D489BC666F7FA843B6FA /* PBXTargetDependency */, + 8090D0FCF9F29403D4F000D942D9F481 /* PBXTargetDependency */, + D39B75EEFD12FE7DB170D1185F47889C /* PBXTargetDependency */, + 2465E7DF59E294D30DF9A4A33577D4E3 /* PBXTargetDependency */, + 2628552A12C2EACA98125D6931C82E07 /* PBXTargetDependency */, + D709F92486254BF5CB45836CBA34C204 /* PBXTargetDependency */, + EE4738C2A350C865467010A20947D4AD /* PBXTargetDependency */, + BD746092D8282A48023C6DD462B91812 /* PBXTargetDependency */, + ); + name = "Pods-GIGA"; + productName = "Pods-GIGA"; + productReference = BEA40D79454E792C12261F3AF180920F /* Pods_GIGA.framework */; + productType = "com.apple.product-type.framework"; + }; + 43F697FCA8E9557F575EBF7DC785AFD4 /* YTKKeyValueStore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4342C6E210ABD2AA884A6763AD5DFC1B /* Build configuration list for PBXNativeTarget "YTKKeyValueStore" */; + buildPhases = ( + 1C4846445598AC676D2EBB4484C533B3 /* Sources */, + 081BAF7030A01DB5133B8E011BB888BF /* Frameworks */, + 3D1D3FD07EADAAA80F00A5970E4DE970 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + BFEE35A4C49AB945CAEC4362F733E394 /* PBXTargetDependency */, + ); + name = YTKKeyValueStore; + productName = YTKKeyValueStore; + productReference = 99792AD152EC0F67CE203E29D0DACFC0 /* YTKKeyValueStore.framework */; + productType = "com.apple.product-type.framework"; + }; + 57DFE3ED684FE796F4717C7ABAE517F8 /* UITableView+FDTemplateLayoutCell */ = { + isa = PBXNativeTarget; + buildConfigurationList = D773EDDAA9E875352723DC73E02DDFE5 /* Build configuration list for PBXNativeTarget "UITableView+FDTemplateLayoutCell" */; + buildPhases = ( + 332FDFAE5F0A731100B7DA84FF1C4493 /* Sources */, + 81F903C6F2439B4DE4CACDA906440A2D /* Frameworks */, + 4564ABBA1717987BB224F78BEAEA3C8C /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = SocketRocket; - productName = SocketRocket; - productReference = 9E43D4748ACBDE3E7E8E94CCE6225EFE /* SocketRocket.framework */; - productType = "com.apple.product-type.framework"; - }; - 5CC70589280C1B49544760FFD838E2A4 /* TTTAttributedLabel */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4DC283BD16CE8D51C0C47A03AE2B9931 /* Build configuration list for PBXNativeTarget "TTTAttributedLabel" */; - buildPhases = ( - 9CAE333B428F0263F4FD761FC1E2B4D0 /* Sources */, - F8B6CBF4BE519D592974034E0A5D06DA /* Frameworks */, - DEBE5273066D0E9ECC684BD423857AA5 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = TTTAttributedLabel; - productName = TTTAttributedLabel; - productReference = A57F7F0A6AB5550D6C39E86241A2C3B4 /* TTTAttributedLabel.framework */; + name = "UITableView+FDTemplateLayoutCell"; + productName = "UITableView+FDTemplateLayoutCell"; + productReference = 4819F4658B859A7A2B63B28F360E7FFD /* UITableView_FDTemplateLayoutCell.framework */; productType = "com.apple.product-type.framework"; }; 6B1714E816AE794962516E2ECBB40A5A /* MBProgressHUD */ = { @@ -2229,7 +2527,24 @@ ); name = MBProgressHUD; productName = MBProgressHUD; - productReference = 4738089B8361F3D3AB1BCED704498464 /* MBProgressHUD.framework */; + productReference = A0E77CB702D048DE8D95D7B71073CB5A /* MBProgressHUD.framework */; + productType = "com.apple.product-type.framework"; + }; + 6B8D192C8CBB4BF55A7F9B79C12280DB /* SocketRocket */ = { + isa = PBXNativeTarget; + buildConfigurationList = FD3E3AC28A10371D2EC0FED80CFD7E84 /* Build configuration list for PBXNativeTarget "SocketRocket" */; + buildPhases = ( + BADE9C1D2BCD00ED4F4CA4A4E9457DFA /* Sources */, + 092CD07E711BB27E0075AC3ADF20915B /* Frameworks */, + EE5D40E224195E31FA50038B96EEA6A5 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SocketRocket; + productName = SocketRocket; + productReference = 67C8BFEE51B5F26E6EB7520C972CD09A /* SocketRocket.framework */; productType = "com.apple.product-type.framework"; }; 826EFF975442065A54A0B2D3103EE6A4 /* NJKWebViewProgress */ = { @@ -2246,73 +2561,7 @@ ); name = NJKWebViewProgress; productName = NJKWebViewProgress; - productReference = 4AFDFD2D9A90BF4BB9DD861020532888 /* NJKWebViewProgress.framework */; - productType = "com.apple.product-type.framework"; - }; - 95BEAA384CB15B77BDF7ACD211017BBF /* UITableView+FDTemplateLayoutCell */ = { - isa = PBXNativeTarget; - buildConfigurationList = 529362CDA42ABA356BEDB1C8DE1878E5 /* Build configuration list for PBXNativeTarget "UITableView+FDTemplateLayoutCell" */; - buildPhases = ( - DC6EE35E0B75550D805CBE30078E9EC7 /* Sources */, - CCB6C94A3B7F7AF612CA6128178B688A /* Frameworks */, - 437257DE3C6D9F839BDC24CB20C0A24B /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "UITableView+FDTemplateLayoutCell"; - productName = "UITableView+FDTemplateLayoutCell"; - productReference = B02F00E2B5DA269DDA1D546D77FD45BA /* UITableView_FDTemplateLayoutCell.framework */; - productType = "com.apple.product-type.framework"; - }; - 9F61A37FCA87A09637399EBB3DE84342 /* Pods-GIGA */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0012A7CF52D71D63FC55A4D5A6AC4075 /* Build configuration list for PBXNativeTarget "Pods-GIGA" */; - buildPhases = ( - 27F6CE0C00F35EB887C1A6E900A26E62 /* Sources */, - B8E0CDE9D6B78B63BC6132265D5D95E0 /* Frameworks */, - E5AB7E4C7C9142C52B005A940AFAC12E /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 52C881058B7DC72C4AF030FA8F99288E /* PBXTargetDependency */, - C06C0264289BBBE19528702557CC8FC1 /* PBXTargetDependency */, - 471DD9226DF1018D260537872E4FBDAE /* PBXTargetDependency */, - 57816986BEF7436716C5170BA0F6A708 /* PBXTargetDependency */, - 23C83C77DA981D934463D2CBA4E59819 /* PBXTargetDependency */, - 44A9CFDCB06EA5269E4C950DAD8ED972 /* PBXTargetDependency */, - 71A30A7A2718C8461D0FF1BE77A2D699 /* PBXTargetDependency */, - BCD3529C382009CD52BA7FE04C413E02 /* PBXTargetDependency */, - AB64071AA32D5C7F56262E76491764BE /* PBXTargetDependency */, - 47FBEED3E9AA3E4E9EC7667FF3B4777E /* PBXTargetDependency */, - 15B63977E3E79F3D3D3A1CC2E997A2AD /* PBXTargetDependency */, - 99A84B27A5415B21021711DF73056760 /* PBXTargetDependency */, - 43C4C6615D3225CE5887349E1E308532 /* PBXTargetDependency */, - 758008F7D1531C273A6CDA6ABA85E20B /* PBXTargetDependency */, - 52EFABC352FCC5BC3BEE5E4B4735B33D /* PBXTargetDependency */, - ); - name = "Pods-GIGA"; - productName = "Pods-GIGA"; - productReference = 1DB7026C750DB559A03CDBE2742DC1B3 /* Pods_GIGA.framework */; - productType = "com.apple.product-type.framework"; - }; - BC65E926DB84B0281E512834BE47D80A /* SDWebImage */ = { - isa = PBXNativeTarget; - buildConfigurationList = B54043E8C4A49656CF64035A2F5B237A /* Build configuration list for PBXNativeTarget "SDWebImage" */; - buildPhases = ( - AD6EFB2F02B9791F95156117142A99BE /* Sources */, - F43DF7F5860C5353DC417595794C69DB /* Frameworks */, - FEDF3C3884236EB4E61F6B9D4D2048BA /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SDWebImage; - productName = SDWebImage; - productReference = E4811330CBE4D8F15CD07A0E6B28196A /* SDWebImage.framework */; + productReference = 23E3DFBE5E063BE6E4D93A3E77F032ED /* NJKWebViewProgress.framework */; productType = "com.apple.product-type.framework"; }; CCA9C33B127D6C859A3F8AFBEFCBABF0 /* LKDBHelper */ = { @@ -2330,25 +2579,7 @@ ); name = LKDBHelper; productName = LKDBHelper; - productReference = 961B9982B287A938D23CE983804F2FC5 /* LKDBHelper.framework */; - productType = "com.apple.product-type.framework"; - }; - CF1D6BC4AC3FC60A30FB00811CF01999 /* YTKKeyValueStore */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9CCFEAF1989FAB852D4659E698888A02 /* Build configuration list for PBXNativeTarget "YTKKeyValueStore" */; - buildPhases = ( - CCF8135D6E7EC6FF96D1888CC3999B4D /* Sources */, - 2F6AD2793DCCAC8655F20980C31F5B6E /* Frameworks */, - 4BA32C028BF2AB9BF5D03EAACD01702B /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - F615009BA540330ABAB8C97015D7E9D7 /* PBXTargetDependency */, - ); - name = YTKKeyValueStore; - productName = YTKKeyValueStore; - productReference = B72C980E30572DC8C26C148404219FE9 /* YTKKeyValueStore.framework */; + productReference = 5290E81387FC7DE33A6834ABB78CD62C /* LKDBHelper.framework */; productType = "com.apple.product-type.framework"; }; D52144DE9D7255DE912490FF5A806573 /* Masonry */ = { @@ -2365,7 +2596,7 @@ ); name = Masonry; productName = Masonry; - productReference = 0D6854C9307CDCC712B55D7EC927935E /* Masonry.framework */; + productReference = 2493EEFA5275F1BFBB2AF35F11BED82C /* Masonry.framework */; productType = "com.apple.product-type.framework"; }; D55833EC3DE9EBD9B329CAEB983D5A9D /* IQKeyboardManager */ = { @@ -2383,7 +2614,24 @@ ); name = IQKeyboardManager; productName = IQKeyboardManager; - productReference = 581983071B50ED00E03BBC3807ED5DEB /* IQKeyboardManager.framework */; + productReference = A087BAC4F72D6A1D75482DB745BF663D /* IQKeyboardManager.framework */; + productType = "com.apple.product-type.framework"; + }; + D90CADD9FA47277BDDDE85CFC0082CA0 /* SDWebImage */ = { + isa = PBXNativeTarget; + buildConfigurationList = FD8A0CB03AC21C5BCB521E0FC6235E48 /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildPhases = ( + 965333B574D4C1404A50E045E0E55524 /* Sources */, + 77DFA32B5A12FCE9A60389FE17A7F94B /* Frameworks */, + FEC5DE9A4AF76643C746A6BC541B1999 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SDWebImage; + productName = SDWebImage; + productReference = E84CE3A7FDCD3AE81A473F6C746504A2 /* SDWebImage.framework */; productType = "com.apple.product-type.framework"; }; DC3688684BF42A20A8998F31DDA51A49 /* JSONModel */ = { @@ -2400,7 +2648,24 @@ ); name = JSONModel; productName = JSONModel; - productReference = 342C32AD5BF61779D426BDA9F82DEDE5 /* JSONModel.framework */; + productReference = 935FBB07F207A53D79856BDDE153E292 /* JSONModel.framework */; + productType = "com.apple.product-type.framework"; + }; + E0D1006C742EBDDD3F2BF40A564ACBCB /* Starscream */ = { + isa = PBXNativeTarget; + buildConfigurationList = E72A11DB5C3E9606198B359389FDF949 /* Build configuration list for PBXNativeTarget "Starscream" */; + buildPhases = ( + FA2E591FE6FE4CD342ACA3F8A3757326 /* Sources */, + 8CECDEE34E27741BF2EF71AF71CDA5FC /* Frameworks */, + A8626284EBDE24E4BF46F02D9E3FF648 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Starscream; + productName = Starscream; + productReference = DDE1008593C16D5180F63ED51EC27802 /* Starscream.framework */; productType = "com.apple.product-type.framework"; }; E14A62900910444707A5504D25EC98DC /* MJRefresh */ = { @@ -2418,24 +2683,7 @@ ); name = MJRefresh; productName = MJRefresh; - productReference = 2312E64F77FC628042C95F6F42AC9204 /* MJRefresh.framework */; - productType = "com.apple.product-type.framework"; - }; - E16D87E1F5CFFF8F722CF5A492B046B9 /* Toast */ = { - isa = PBXNativeTarget; - buildConfigurationList = 22083EC4897837089BD9F11DA45914F5 /* Build configuration list for PBXNativeTarget "Toast" */; - buildPhases = ( - 80EEAAD750B7EB5C6DB3F55299EBE91F /* Sources */, - 99BF636A9F3AC96472168608CED7A74E /* Frameworks */, - DD5EB35A6633261597F3AA694BC6C2A4 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Toast; - productName = Toast; - productReference = A7319007CA14024A0376E223A1A702CB /* Toast.framework */; + productReference = 029A3331019368C8C30B8DA9778E0794 /* MJRefresh.framework */; productType = "com.apple.product-type.framework"; }; F4160500DCEA3DA3E93FBA579E88CA0A /* AFNetworking */ = { @@ -2452,7 +2700,7 @@ ); name = AFNetworking; productName = AFNetworking; - productReference = 8126B93DD8D474B90337F38D978130C5 /* AFNetworking.framework */; + productReference = 06F7DF71211917C6613F190B1D9CEA2B /* AFNetworking.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -2472,7 +2720,7 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 544FB77D6D6BCB080AE979EA734CA3D9 /* Products */; + productRefGroup = 3CD692616588D8B0B76B05D8F9BBFE7E /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -2485,13 +2733,15 @@ 6B1714E816AE794962516E2ECBB40A5A /* MBProgressHUD */, E14A62900910444707A5504D25EC98DC /* MJRefresh */, 826EFF975442065A54A0B2D3103EE6A4 /* NJKWebViewProgress */, - 9F61A37FCA87A09637399EBB3DE84342 /* Pods-GIGA */, - BC65E926DB84B0281E512834BE47D80A /* SDWebImage */, - 37E3F76B9AB64BE59F26C42C0DB02B51 /* SocketRocket */, - E16D87E1F5CFFF8F722CF5A492B046B9 /* Toast */, - 5CC70589280C1B49544760FFD838E2A4 /* TTTAttributedLabel */, - 95BEAA384CB15B77BDF7ACD211017BBF /* UITableView+FDTemplateLayoutCell */, - CF1D6BC4AC3FC60A30FB00811CF01999 /* YTKKeyValueStore */, + 41BE4379487F65BC8832BC9F797E1290 /* Pods-GIGA */, + D90CADD9FA47277BDDDE85CFC0082CA0 /* SDWebImage */, + 3578E512F8C94E9B49F88CAA98690402 /* Socket.IO-Client-Swift */, + 6B8D192C8CBB4BF55A7F9B79C12280DB /* SocketRocket */, + E0D1006C742EBDDD3F2BF40A564ACBCB /* Starscream */, + 203E2ACFC533A5A3C189DF6DCDF9A3CA /* Toast */, + 1EB527CCE1B0F3D64088AFF319F1FBA4 /* TTTAttributedLabel */, + 57DFE3ED684FE796F4717C7ABAE517F8 /* UITableView+FDTemplateLayoutCell */, + 43F697FCA8E9557F575EBF7DC785AFD4 /* YTKKeyValueStore */, ); }; /* End PBXProject section */ @@ -2534,11 +2784,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 27F6CE0C00F35EB887C1A6E900A26E62 /* Sources */ = { + 1C4846445598AC676D2EBB4484C533B3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6A30D4D71707D4B4B6033AA5399D35C6 /* Pods-GIGA-dummy.m in Sources */, + BCC67B107B611B06ABD214407B69B62F /* YTKKeyValueStore-dummy.m in Sources */, + A9545DE6CA040EF32EC94145E3D1F49A /* YTKKeyValueStore.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2555,6 +2806,18 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 332FDFAE5F0A731100B7DA84FF1C4493 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 46A64AC807BC0DBFDA09A579EA0CF3E6 /* UITableView+FDIndexPathHeightCache.m in Sources */, + E05E5C1BD849F31A27B68D75DEF07E30 /* UITableView+FDKeyedHeightCache.m in Sources */, + A5B3E46D3763A25BD3BAF0CFFDEAA24D /* UITableView+FDTemplateLayoutCell-dummy.m in Sources */, + 7FBCD08C954F8BE3AF648806C1ACFF0B /* UITableView+FDTemplateLayoutCell.m in Sources */, + 01069C1B4E0135AF251E5CE7659768B3 /* UITableView+FDTemplateLayoutCellDebug.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 333271689444C03071D8092853B02EDD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2588,6 +2851,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4EE946193A9F32FB7CAFC4A21B5EA358 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2EE716A52967138FD6916F5F0F0F63B3 /* Pods-GIGA-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5AB88D7903550EABB072B69F1E682D00 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 95E0F7FDECABE72E262C058CB72C7DFB /* Toast-dummy.m in Sources */, + 97D9744D1FA62E10C2F3180A4B0128E5 /* UIView+Toast.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5D9F4A386169F298C8544D099324BB28 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2624,15 +2904,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 80EEAAD750B7EB5C6DB3F55299EBE91F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 601FD63D1FC6DBB1277966362EE290CD /* Toast-dummy.m in Sources */, - D51D64915E3DDF60300CB400C1F49027 /* UIView+Toast.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 8FE0D4B503A94502F3431DC0DCB58040 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2646,64 +2917,88 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9CAE333B428F0263F4FD761FC1E2B4D0 /* Sources */ = { + 965333B574D4C1404A50E045E0E55524 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7DE362297135870194FA02C34D3135E7 /* TTTAttributedLabel-dummy.m in Sources */, - C0F07BA73BBC072EFCABCED3B6D24604 /* TTTAttributedLabel.m in Sources */, + 980E0C1816124A0343E2EA2CF7F30EE5 /* NSButton+WebCache.m in Sources */, + F2DBE008FD27BC11699DB76F11074A94 /* NSData+ImageContentType.m in Sources */, + 3A0419540405C51EA35937E39E985E9D /* NSImage+WebCache.m in Sources */, + 7FFE6B83CA9E5A9A1D23F9F7FC320E65 /* SDAnimatedImageRep.m in Sources */, + A78A1ABBC5D657764E754959BF9BD290 /* SDImageCache.m in Sources */, + 78D1AB77E0145AD1E77DC9CE0B8C4D49 /* SDImageCacheConfig.m in Sources */, + 91F8ACC960F47860C2BFD36E1AB3DC2D /* SDWebImage-dummy.m in Sources */, + E630FECF3706C1EC8EE717263D1B2FF5 /* SDWebImageCoder.m in Sources */, + D0E2C9455FAC089FF047113E8B217CC8 /* SDWebImageCoderHelper.m in Sources */, + EDE0C584CA148C197740CCB795E2120A /* SDWebImageCodersManager.m in Sources */, + 018E193AC91FD48C64A9ED15D58AC95D /* SDWebImageCompat.m in Sources */, + CAE88A60F8C6CD6AE662BAFA5ED3B373 /* SDWebImageDownloader.m in Sources */, + 6F5E56A1D7E89F2B0A2692CF780EFE7C /* SDWebImageDownloaderOperation.m in Sources */, + B1BDB5153E77DA6754E2364A3BB4D20A /* SDWebImageFrame.m in Sources */, + 2CB401BA28E91577E8318A7BD8D03192 /* SDWebImageGIFCoder.m in Sources */, + 82E73BD4532D89B27F8F209781C134AE /* SDWebImageImageIOCoder.m in Sources */, + 57D1433F37CDBBC61AEC35D00F8F5CA7 /* SDWebImageManager.m in Sources */, + 3B31BC5E11334050DEE2597D1196D8A1 /* SDWebImagePrefetcher.m in Sources */, + 2C70FC786858E6FFD02177DD4DF6DEFB /* SDWebImageTransition.m in Sources */, + 0CDCF95E1063393825F8FC7FFD04726A /* UIButton+WebCache.m in Sources */, + FBE6911E3E07AED7313FC851407687B7 /* UIImage+ForceDecode.m in Sources */, + EB0A377753BF36E5018176EF7A4AF774 /* UIImage+GIF.m in Sources */, + 45AAEFF6FFBCEE5DA0A7377AE556CE7B /* UIImage+MultiFormat.m in Sources */, + 9C54C073493FCFF4AE07427E9CC72DB2 /* UIImageView+HighlightedWebCache.m in Sources */, + 9ADBC57B36C223E3C5BE5DFCD8197971 /* UIImageView+WebCache.m in Sources */, + B1F714AD50E405F4DD3C865A7D823EAB /* UIView+WebCache.m in Sources */, + 03FF8A989242213A9B392E66E53BE8C1 /* UIView+WebCacheOperation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9FF620AC95D419DCDC9860DC4E44F14E /* Sources */ = { + 9C25B5FA35DC9EC5F136CC6548A928D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB596BB8F97C2B0A0CA72695B4010141 /* SocketRocket-dummy.m in Sources */, - 8138BA0A46637819E90CE18C773CA9FD /* SRWebSocket.m in Sources */, + 14441D47B616C056BC4F532352A3091D /* TTTAttributedLabel-dummy.m in Sources */, + F35840AED8A0E374320B77F3E86D1FA3 /* TTTAttributedLabel.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AD6EFB2F02B9791F95156117142A99BE /* Sources */ = { + BADE9C1D2BCD00ED4F4CA4A4E9457DFA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C0BD02712FC62F45C60CA65FDCF21D80 /* NSButton+WebCache.m in Sources */, - 09FD31B5AA4FD8F5D8691D0A3ACF1A6B /* NSData+ImageContentType.m in Sources */, - E8DAB555F27A1AF5B02B19282B609B8E /* NSImage+WebCache.m in Sources */, - 59F5736C531C7F4C5F79C9EDDACC0B64 /* SDAnimatedImageRep.m in Sources */, - 0CAD81FA7346928A75DFA501EDF7A678 /* SDImageCache.m in Sources */, - E2E95C8112B691A912057A2DCD2B9297 /* SDImageCacheConfig.m in Sources */, - C0337E1DD3AA7BD36B20A9C92EA3208F /* SDWebImage-dummy.m in Sources */, - DE83F763EE2F69844D4359D9E80840F2 /* SDWebImageCoder.m in Sources */, - B72A7B6970A8E91258D4AC521B86A8B0 /* SDWebImageCoderHelper.m in Sources */, - A91C005A46878C2DB5B6B4A67CC1DDC4 /* SDWebImageCodersManager.m in Sources */, - E504492C8894D7522724712EFA67C7D1 /* SDWebImageCompat.m in Sources */, - B26E3D1F70F70E23C4EDA96CC327BC1E /* SDWebImageDownloader.m in Sources */, - 39A98121DA410F19CE5F46E280F22179 /* SDWebImageDownloaderOperation.m in Sources */, - 8EF496E24AC25617194114DDB71D5385 /* SDWebImageFrame.m in Sources */, - 92126299C232FC474021BADE26F056A4 /* SDWebImageGIFCoder.m in Sources */, - 7E40D4939F89C4852C4224D6A65E6BD5 /* SDWebImageImageIOCoder.m in Sources */, - 39120D78F1F32B35C353A9EBA0149B45 /* SDWebImageManager.m in Sources */, - D7814F3ED165AA11096F7B172D35FD5F /* SDWebImagePrefetcher.m in Sources */, - 3376AE1663C14F1926F04D4FE0225E97 /* SDWebImageTransition.m in Sources */, - FA0124E4B3FEA15F037A936E569EBAEF /* UIButton+WebCache.m in Sources */, - 5BC4E3F5EFAE7516C06D8A357407DCAF /* UIImage+ForceDecode.m in Sources */, - 81D12B648C1E782DEC1B2566EE17FB6A /* UIImage+GIF.m in Sources */, - ACA82B48BEE47C89F7AEE07F4F8B462E /* UIImage+MultiFormat.m in Sources */, - 327E1782C89B350FDE631F3CACD4C8A2 /* UIImageView+HighlightedWebCache.m in Sources */, - DA6FBCC4512298773ABFFA8A1F8BD972 /* UIImageView+WebCache.m in Sources */, - B0E60D4A86434F567D7F9E590161AA7C /* UIView+WebCache.m in Sources */, - 5B9AB2E420B063C994B8295F4EF48E37 /* UIView+WebCacheOperation.m in Sources */, + 5BC8CFF572E6322BA5BDC91D816D94DB /* SocketRocket-dummy.m in Sources */, + 572BCA39E6087AD4DE4BD534943A67C9 /* SRWebSocket.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CCF8135D6E7EC6FF96D1888CC3999B4D /* Sources */ = { + C0BD0068ECDB12149AD4414CBA31B505 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5E1468EA73C7741EEC370E4A15167D0E /* YTKKeyValueStore-dummy.m in Sources */, - 02307CD9BE8AB7050090F7CE6AA1C4E8 /* YTKKeyValueStore.m in Sources */, + A0303675DA1D1590CCCBDAA2B5A7F560 /* Socket.IO-Client-Swift-dummy.m in Sources */, + 5F0B1C5637118C157A9B60D62896F846 /* SocketAckEmitter.swift in Sources */, + 08F144BF3E6E8F423644771FDC299B88 /* SocketAckManager.swift in Sources */, + 97A034AF6314B2F2799F157CB5701E9E /* SocketAnyEvent.swift in Sources */, + 8DFCB3EDAF8FA11CB49B473AE187B5F3 /* SocketEngine.swift in Sources */, + 0D820188A3982F77A8C2FD47F4249F25 /* SocketEngineClient.swift in Sources */, + 104BE926FFFB5C942A7A0FAC05920132 /* SocketEnginePacketType.swift in Sources */, + 71E99398CEF7E77AFD550582A21DF6A9 /* SocketEnginePollable.swift in Sources */, + 162595288B55C740806E9BF91E39A9FA /* SocketEngineSpec.swift in Sources */, + D55F4366DC3D822A511513DF4E5D6AF5 /* SocketEngineWebsocket.swift in Sources */, + 2C4EF1B590BD389FF42157519B73A70C /* SocketEventHandler.swift in Sources */, + 72E566862803FE9B1DE0D4A246E34DA9 /* SocketExtensions.swift in Sources */, + 40A9F401B6A8B531B3CF176B6EA4C0AB /* SocketIOClient.swift in Sources */, + A1DF5B0FADB9E502553372C3347042A2 /* SocketIOClientConfiguration.swift in Sources */, + C5BDD2876FB1BBF95F1EC56250280365 /* SocketIOClientOption.swift in Sources */, + 82C00DBA894D53CDD0AD35BE2BBFEC0B /* SocketIOClientSpec.swift in Sources */, + F82FA69799081C549A687B2B72DB7ECA /* SocketIOStatus.swift in Sources */, + 322539ED22E284D2B69C53BB5298C282 /* SocketLogger.swift in Sources */, + CF957309306A61F1A68EC08E1152AB3E /* SocketManager.swift in Sources */, + A0FB2FBEADC2C2FA597C80290DF6B809 /* SocketManagerSpec.swift in Sources */, + 580C49850ED7094BC4D197E27DDB07CE /* SocketPacket.swift in Sources */, + 3C52DF3086A7BA2E047AFFFCBFEC1E0B /* SocketParsable.swift in Sources */, + C4A53AB41B17060209A7059F727FCB9F /* SocketRawView.swift in Sources */, + 7854DF5B9510FA3584D187A9D20B2F18 /* SocketStringReader.swift in Sources */, + EA0E9DCCA7F7A4B3B582E34AC137C2A3 /* SocketTypes.swift in Sources */, + 2BF9244FC886AC7E571F140F13713AFC /* SSLSecurity.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2723,18 +3018,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DC6EE35E0B75550D805CBE30078E9EC7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8C2908931C952C7B1801BC7D5D321BED /* UITableView+FDIndexPathHeightCache.m in Sources */, - 6FAE8BF1BF564D1F2D5F368F8704A6D1 /* UITableView+FDKeyedHeightCache.m in Sources */, - E624C54E55BFAE88D8EC8492E2B62619 /* UITableView+FDTemplateLayoutCell-dummy.m in Sources */, - 971255F19D9DC5EEC2566D186FB5A433 /* UITableView+FDTemplateLayoutCell.m in Sources */, - D54920CE34AFF30F529E61D9459C5006 /* UITableView+FDTemplateLayoutCellDebug.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; EF7C3A296212CFB87AC9B8A7939E3733 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2756,98 +3039,103 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + FA2E591FE6FE4CD342ACA3F8A3757326 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 37BC04B72C67B4A408D409660D3B790C /* Compression.swift in Sources */, + 1AB30B2D8CA8C6F55177330FA38BA5B3 /* SSLSecurity.swift in Sources */, + 877908A157CA3CC4687710B1F8C43117 /* Starscream-dummy.m in Sources */, + B4137607C73DB4C84CA0EF8163BDD6F0 /* WebSocket.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 15B63977E3E79F3D3D3A1CC2E997A2AD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SocketRocket; - target = 37E3F76B9AB64BE59F26C42C0DB02B51 /* SocketRocket */; - targetProxy = 79CCAC30E08937B11F101E7A789BF6A9 /* PBXContainerItemProxy */; - }; - 23C83C77DA981D934463D2CBA4E59819 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = LKDBHelper; - target = CCA9C33B127D6C859A3F8AFBEFCBABF0 /* LKDBHelper */; - targetProxy = D16DEB882FB3ACDF2B1D59F84EB72924 /* PBXContainerItemProxy */; - }; - 43C4C6615D3225CE5887349E1E308532 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Toast; - target = E16D87E1F5CFFF8F722CF5A492B046B9 /* Toast */; - targetProxy = 12C08506A8A26019CD1B7D866E2D9AE0 /* PBXContainerItemProxy */; - }; - 44A9CFDCB06EA5269E4C950DAD8ED972 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MBProgressHUD; - target = 6B1714E816AE794962516E2ECBB40A5A /* MBProgressHUD */; - targetProxy = 10C19AB1817BEF22435DC5055DE4F0F4 /* PBXContainerItemProxy */; - }; - 471DD9226DF1018D260537872E4FBDAE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardManager; - target = D55833EC3DE9EBD9B329CAEB983D5A9D /* IQKeyboardManager */; - targetProxy = D55D2D92CB19AF61F08790B384A513E0 /* PBXContainerItemProxy */; - }; - 47FBEED3E9AA3E4E9EC7667FF3B4777E /* PBXTargetDependency */ = { + 079925957D86D489BC666F7FA843B6FA /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SDWebImage; - target = BC65E926DB84B0281E512834BE47D80A /* SDWebImage */; - targetProxy = 448C316EBC342AEAB86CA07E51B7CCEB /* PBXContainerItemProxy */; + target = D90CADD9FA47277BDDDE85CFC0082CA0 /* SDWebImage */; + targetProxy = DED752E9FC0AA5300D528DB0E9124181 /* PBXContainerItemProxy */; }; - 52C881058B7DC72C4AF030FA8F99288E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AFNetworking; - target = F4160500DCEA3DA3E93FBA579E88CA0A /* AFNetworking */; - targetProxy = 23CDBC7F0F0884CFA75FBBEF10D3B03D /* PBXContainerItemProxy */; - }; - 52EFABC352FCC5BC3BEE5E4B4735B33D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = YTKKeyValueStore; - target = CF1D6BC4AC3FC60A30FB00811CF01999 /* YTKKeyValueStore */; - targetProxy = F9DD1D0D243D5BA994B993C063F16F85 /* PBXContainerItemProxy */; - }; - 57816986BEF7436716C5170BA0F6A708 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = JSONModel; - target = DC3688684BF42A20A8998F31DDA51A49 /* JSONModel */; - targetProxy = 14399779F1E76914D37F4F6C523906BB /* PBXContainerItemProxy */; - }; - 71A30A7A2718C8461D0FF1BE77A2D699 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MJRefresh; - target = E14A62900910444707A5504D25EC98DC /* MJRefresh */; - targetProxy = 07FD3E22A9DD4A1B99981D75716BD3AE /* PBXContainerItemProxy */; - }; - 758008F7D1531C273A6CDA6ABA85E20B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "UITableView+FDTemplateLayoutCell"; - target = 95BEAA384CB15B77BDF7ACD211017BBF /* UITableView+FDTemplateLayoutCell */; - targetProxy = 43E5D6A14DFB2BB82D0E18797207D59C /* PBXContainerItemProxy */; - }; - 99A84B27A5415B21021711DF73056760 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = TTTAttributedLabel; - target = 5CC70589280C1B49544760FFD838E2A4 /* TTTAttributedLabel */; - targetProxy = 0624AA154FDA56AB497466DC03BB55B6 /* PBXContainerItemProxy */; - }; - AB64071AA32D5C7F56262E76491764BE /* PBXTargetDependency */ = { + 0BE77DA234F6DEC499E903B8E7EB5483 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = NJKWebViewProgress; target = 826EFF975442065A54A0B2D3103EE6A4 /* NJKWebViewProgress */; - targetProxy = 90FC23568A2780CCB2D594FAE3F3B4B3 /* PBXContainerItemProxy */; + targetProxy = 9C3EF21F4556D671BA3BE7400A55E897 /* PBXContainerItemProxy */; }; - BCD3529C382009CD52BA7FE04C413E02 /* PBXTargetDependency */ = { + 2465E7DF59E294D30DF9A4A33577D4E3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Masonry; - target = D52144DE9D7255DE912490FF5A806573 /* Masonry */; - targetProxy = C250CB5A26266169FD4E1B35C6267674 /* PBXContainerItemProxy */; + name = Starscream; + target = E0D1006C742EBDDD3F2BF40A564ACBCB /* Starscream */; + targetProxy = C76985D2A0135055E2ABBA833FC64D06 /* PBXContainerItemProxy */; }; - C06C0264289BBBE19528702557CC8FC1 /* PBXTargetDependency */ = { + 2628552A12C2EACA98125D6931C82E07 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = TTTAttributedLabel; + target = 1EB527CCE1B0F3D64088AFF319F1FBA4 /* TTTAttributedLabel */; + targetProxy = BC9806EDCB11E0B99C6381C9C331547D /* PBXContainerItemProxy */; + }; + 3474D6C3280BAA5B3AE4B633886CFAFD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AFNetworking; + target = F4160500DCEA3DA3E93FBA579E88CA0A /* AFNetworking */; + targetProxy = 7CEAB308D3E048B456470272A1F49E79 /* PBXContainerItemProxy */; + }; + 34FD209D36BCC2071BC143882F6FFD7F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = JSONModel; + target = DC3688684BF42A20A8998F31DDA51A49 /* JSONModel */; + targetProxy = AC37C85FA38ECD5BF75ADA47577069D8 /* PBXContainerItemProxy */; + }; + 7B269A4DC3EE69401D85709E40F00741 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MJRefresh; + target = E14A62900910444707A5504D25EC98DC /* MJRefresh */; + targetProxy = 01E07FDE67675FAB1B4CDDB0CFB15A5A /* PBXContainerItemProxy */; + }; + 8090D0FCF9F29403D4F000D942D9F481 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Socket.IO-Client-Swift"; + target = 3578E512F8C94E9B49F88CAA98690402 /* Socket.IO-Client-Swift */; + targetProxy = DA15677B5BEEF2B52CC8D1DB79DA0071 /* PBXContainerItemProxy */; + }; + 8C3790FF34469A5A4973C79FADDC3A8C /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FMDB; target = 251BAD17812F7EBF6532EACF66F941C3 /* FMDB */; - targetProxy = C3C1D0DAF595497F4E217F601FF28DE8 /* PBXContainerItemProxy */; + targetProxy = 1E4EF142FFB1473CAEC44BD562F17C8F /* PBXContainerItemProxy */; + }; + 9CAF310FFB6FDCB7682F7D72D8E2A542 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Starscream; + target = E0D1006C742EBDDD3F2BF40A564ACBCB /* Starscream */; + targetProxy = 88165B3DC6F1DD9D85F485FF523A7B7F /* PBXContainerItemProxy */; + }; + ADC0001F8C3FA28B1BD19C658A16229E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Masonry; + target = D52144DE9D7255DE912490FF5A806573 /* Masonry */; + targetProxy = 02AD085923257926101043ECBDA0B642 /* PBXContainerItemProxy */; + }; + BC40A9A910B2C3270FB0877043CE564C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardManager; + target = D55833EC3DE9EBD9B329CAEB983D5A9D /* IQKeyboardManager */; + targetProxy = 565145C78EF9F332BB48DEDC973C1DA9 /* PBXContainerItemProxy */; + }; + BD746092D8282A48023C6DD462B91812 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = YTKKeyValueStore; + target = 43F697FCA8E9557F575EBF7DC785AFD4 /* YTKKeyValueStore */; + targetProxy = 174E6C2171B05DD68BDA9FF3114D98FD /* PBXContainerItemProxy */; + }; + BFEE35A4C49AB945CAEC4362F733E394 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FMDB; + target = 251BAD17812F7EBF6532EACF66F941C3 /* FMDB */; + targetProxy = 0CB6BCAA410A24DDCAB7891977A91996 /* PBXContainerItemProxy */; }; C5949C3702F8D473B24B99AF83A168EA /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -2855,18 +3143,42 @@ target = 251BAD17812F7EBF6532EACF66F941C3 /* FMDB */; targetProxy = 8A906A446E3695C9C80C35AF0D8D128A /* PBXContainerItemProxy */; }; - F615009BA540330ABAB8C97015D7E9D7 /* PBXTargetDependency */ = { + D39B75EEFD12FE7DB170D1185F47889C /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = FMDB; - target = 251BAD17812F7EBF6532EACF66F941C3 /* FMDB */; - targetProxy = FDFB12CC87933DAABA8E177FE069CD99 /* PBXContainerItemProxy */; + name = SocketRocket; + target = 6B8D192C8CBB4BF55A7F9B79C12280DB /* SocketRocket */; + targetProxy = 96033F3DE39CB124CE5C342CDB6D3638 /* PBXContainerItemProxy */; + }; + D709F92486254BF5CB45836CBA34C204 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Toast; + target = 203E2ACFC533A5A3C189DF6DCDF9A3CA /* Toast */; + targetProxy = 476568165F539EF85B0F5D26800B1E50 /* PBXContainerItemProxy */; + }; + E99E9B707573763E42EBDE5EFD4BB215 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = LKDBHelper; + target = CCA9C33B127D6C859A3F8AFBEFCBABF0 /* LKDBHelper */; + targetProxy = D4BE66B430547E25A22F38975F6DA9C5 /* PBXContainerItemProxy */; + }; + EE4738C2A350C865467010A20947D4AD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "UITableView+FDTemplateLayoutCell"; + target = 57DFE3ED684FE796F4717C7ABAE517F8 /* UITableView+FDTemplateLayoutCell */; + targetProxy = F3C75840DD6E63711A0AEAEDF330E105 /* PBXContainerItemProxy */; + }; + F5433A64C8D149225D11B9976EEA15C2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MBProgressHUD; + target = 6B1714E816AE794962516E2ECBB40A5A /* MBProgressHUD */; + targetProxy = 42C98B0B09DABB12204DFF9FDEFE2BEB /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 030147F75322C49391CC6A180694DA1A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66890DF77BDD3EBEC82AA947599CC390 /* JSONModel.xcconfig */; + baseConfigurationReference = 9000E691EFB3E3B3FF8C0EB04CFB70DB /* JSONModel.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2895,6 +3207,69 @@ }; name = Release; }; + 15BBFED7520799B81C419B9659B126FA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 86A54BF6E391B76DFBE0F0695DB27785 /* Socket.IO-Client-Swift.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Socket.IO-Client-Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift.modulemap"; + PRODUCT_MODULE_NAME = SocketIO; + PRODUCT_NAME = SocketIO; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 1DA9018703D5845007DEFB59F340E13F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 18230792D7301ED554D8EBE3D27C83C6 /* YTKKeyValueStore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/YTKKeyValueStore/YTKKeyValueStore-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/YTKKeyValueStore/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/YTKKeyValueStore/YTKKeyValueStore.modulemap"; + PRODUCT_MODULE_NAME = YTKKeyValueStore; + PRODUCT_NAME = YTKKeyValueStore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 1EE19F5DD95931924296F637BF18BD8F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2958,74 +3333,9 @@ }; name = Debug; }; - 2B8A6007035DBC0EFFEAF10089E67972 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B724EFE1A35CEE6EE7D804EBC9E9B647 /* TTTAttributedLabel.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TTTAttributedLabel/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel.modulemap"; - PRODUCT_MODULE_NAME = TTTAttributedLabel; - PRODUCT_NAME = TTTAttributedLabel; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 3229F5219B17A9A0A495A822D0D76552 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9574A12E8279712E0544674068BEC2E1 /* Pods-GIGA.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-GIGA/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-GIGA/Pods-GIGA.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 3845069A573E47CF21533487C497A730 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4E23A195A0FEDD4FE55DB45C9D24DB0D /* Masonry.xcconfig */; + baseConfigurationReference = 61C2C19E65EA773F183A0CC25BA57237 /* Masonry.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3053,9 +3363,41 @@ }; name = Debug; }; + 3B3B79288247B2E1243D4ADBF87333CE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 53F4D20C7F0D216C630BE1353AC09D55 /* Starscream.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Starscream/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; + PRODUCT_MODULE_NAME = Starscream; + PRODUCT_NAME = Starscream; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 3FDE1A3479CDFFEC9781B7D059673D86 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 66890DF77BDD3EBEC82AA947599CC390 /* JSONModel.xcconfig */; + baseConfigurationReference = 9000E691EFB3E3B3FF8C0EB04CFB70DB /* JSONModel.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3083,40 +3425,9 @@ }; name = Debug; }; - 437D32CF66962E25C97C70E374F699A6 /* Release */ = { + 43F7BB0B35A73F6686758F4D9F7A3322 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 52F93BEAAD4FA805CB1F4C7A12E71F45 /* YTKKeyValueStore.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/YTKKeyValueStore/YTKKeyValueStore-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/YTKKeyValueStore/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/YTKKeyValueStore/YTKKeyValueStore.modulemap"; - PRODUCT_MODULE_NAME = YTKKeyValueStore; - PRODUCT_NAME = YTKKeyValueStore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 43EAA89AC085B77AAC7B6708389028D8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 52F93BEAAD4FA805CB1F4C7A12E71F45 /* YTKKeyValueStore.xcconfig */; + baseConfigurationReference = 18230792D7301ED554D8EBE3D27C83C6 /* YTKKeyValueStore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3146,7 +3457,7 @@ }; 4F8845C8AA7628D814E62D3DA5BBE94C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9CC9FBF8AF1D72E7C9B5EC4112586103 /* LKDBHelper.xcconfig */; + baseConfigurationReference = 8B5E70F380A1881B0AE8CC9EF93F5CC3 /* LKDBHelper.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3176,7 +3487,7 @@ }; 5158EC3BBBE24D0DC0B7FD8485499D50 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 909A78FB70C93FA0E34E4B3F09EB708D /* NJKWebViewProgress.xcconfig */; + baseConfigurationReference = A1E47E6E0B0C4589F0066EB47D2EFB1E /* NJKWebViewProgress.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3204,9 +3515,70 @@ }; name = Debug; }; + 51F80CF25424DE3FA510FB9288900CC5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D7AFFE638A1D3629C5C2E838084B7CB7 /* UITableView+FDTemplateLayoutCell.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UITableView+FDTemplateLayoutCell/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell.modulemap"; + PRODUCT_MODULE_NAME = UITableView_FDTemplateLayoutCell; + PRODUCT_NAME = UITableView_FDTemplateLayoutCell; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 5A63432C9ABA464AE372CE9DC734EFC2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 558D6E7CB99E8F711140222C4C7FD6C0 /* TTTAttributedLabel.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TTTAttributedLabel/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel.modulemap"; + PRODUCT_MODULE_NAME = TTTAttributedLabel; + PRODUCT_NAME = TTTAttributedLabel; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 5EA25C1E9FDF8DEF6A53F68A6237E686 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4CB26BDB578D1FBADD2EF6665F4C62CC /* FMDB.xcconfig */; + baseConfigurationReference = 053338AFC5DFA5DC334E688DA16499C6 /* FMDB.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3234,9 +3606,39 @@ }; name = Debug; }; + 64F425AD1ABDBE7B571C3EE6AB4454E7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A71A2EDB7D80E8B54C1540FA4E2B8A8D /* Toast.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Toast/Toast-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Toast/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Toast/Toast.modulemap"; + PRODUCT_MODULE_NAME = Toast; + PRODUCT_NAME = Toast; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 6B20280CE6A95E2D8D451B55CDA5C940 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 70CE012FB313B9D041F010EDCACCC25C /* MJRefresh.xcconfig */; + baseConfigurationReference = 7F2A106A290EC7B512FC0E8A9C14E807 /* MJRefresh.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3265,9 +3667,40 @@ }; name = Release; }; + 6D17A2E9C19EFB3CEFB664ED5349ED7F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D7AFFE638A1D3629C5C2E838084B7CB7 /* UITableView+FDTemplateLayoutCell.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/UITableView+FDTemplateLayoutCell/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell.modulemap"; + PRODUCT_MODULE_NAME = UITableView_FDTemplateLayoutCell; + PRODUCT_NAME = UITableView_FDTemplateLayoutCell; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 6FDB77145A49DA9893642D8226EBEFB5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 909A78FB70C93FA0E34E4B3F09EB708D /* NJKWebViewProgress.xcconfig */; + baseConfigurationReference = A1E47E6E0B0C4589F0066EB47D2EFB1E /* NJKWebViewProgress.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3296,9 +3729,70 @@ }; name = Release; }; + 74F14DAD92525F5165930D906F7BDCC5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D9BDB47A250C4BB9FE058D907EC81077 /* SDWebImage.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 77B29220E68FD63B7DF07B8DADE69E58 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 86A54BF6E391B76DFBE0F0695DB27785 /* Socket.IO-Client-Swift.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Socket.IO-Client-Swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift.modulemap"; + PRODUCT_MODULE_NAME = SocketIO; + PRODUCT_NAME = SocketIO; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 7D95619E7EDE9F3FC6AD74F265102D66 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4CB26BDB578D1FBADD2EF6665F4C62CC /* FMDB.xcconfig */; + baseConfigurationReference = 053338AFC5DFA5DC334E688DA16499C6 /* FMDB.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3327,10 +3821,11 @@ }; name = Release; }; - 91A17F62BDD3A47B620B8F785CC8B605 /* Debug */ = { + 94A04F2FDCA78F1527BDF81A7D819E00 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C59D3FCABF89A223424416FCCF12B670 /* SocketRocket.xcconfig */; + baseConfigurationReference = 9574A12E8279712E0544674068BEC2E1 /* Pods-GIGA.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -3340,56 +3835,30 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SocketRocket/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-GIGA/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap"; - PRODUCT_MODULE_NAME = SocketRocket; - PRODUCT_NAME = SocketRocket; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-GIGA/Pods-GIGA.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - 98220769C0FAD22BA9763C663E86BBDA /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 35EAE74E5132A23FB8A5DEAD9F2ED8FE /* UITableView+FDTemplateLayoutCell.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UITableView+FDTemplateLayoutCell/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell.modulemap"; - PRODUCT_MODULE_NAME = UITableView_FDTemplateLayoutCell; - PRODUCT_NAME = UITableView_FDTemplateLayoutCell; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; + name = Release; }; 9DB789882BAFB3FAAAC0CE3010D697E4 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 399D564FB809301AF166719C68708229 /* AFNetworking.xcconfig */; + baseConfigurationReference = CC29AB6DCE0390D33472279DBF9F826F /* AFNetworking.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3419,7 +3888,7 @@ }; A1F2087375C7B0E0FC17B7C69C343A24 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9CC9FBF8AF1D72E7C9B5EC4112586103 /* LKDBHelper.xcconfig */; + baseConfigurationReference = 8B5E70F380A1881B0AE8CC9EF93F5CC3 /* LKDBHelper.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3448,9 +3917,9 @@ }; name = Release; }; - A500AE804E9C41A4C32A283EE0F9FE17 /* Release */ = { + A779DC8723C1EB601F70FC8F2170010B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C59D3FCABF89A223424416FCCF12B670 /* SocketRocket.xcconfig */; + baseConfigurationReference = 53F4D20C7F0D216C630BE1353AC09D55 /* Starscream.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3461,58 +3930,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SocketRocket/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Starscream/Starscream-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Starscream/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap"; - PRODUCT_MODULE_NAME = SocketRocket; - PRODUCT_NAME = SocketRocket; + MODULEMAP_FILE = "Target Support Files/Starscream/Starscream.modulemap"; + PRODUCT_MODULE_NAME = Starscream; + PRODUCT_NAME = Starscream; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - B47DB8873BD38F138D40B5834981E81C /* Release */ = { + B15B60D56D4801C4BB2840A791584455 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 35EAE74E5132A23FB8A5DEAD9F2ED8FE /* UITableView+FDTemplateLayoutCell.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/UITableView+FDTemplateLayoutCell/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/UITableView+FDTemplateLayoutCell/UITableView+FDTemplateLayoutCell.modulemap"; - PRODUCT_MODULE_NAME = UITableView_FDTemplateLayoutCell; - PRODUCT_NAME = UITableView_FDTemplateLayoutCell; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C2562A2CCB1E969A1C97ED084AF1D0A2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 52C76AE5C4FEB2823CB9B6FA40CB9312 /* SDWebImage.xcconfig */; + baseConfigurationReference = D9BDB47A250C4BB9FE058D907EC81077 /* SDWebImage.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3541,9 +3979,70 @@ }; name = Release; }; + B7DFA3A9CFCC2DE983F00C6B24B38672 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 558D6E7CB99E8F711140222C4C7FD6C0 /* TTTAttributedLabel.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TTTAttributedLabel/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel.modulemap"; + PRODUCT_MODULE_NAME = TTTAttributedLabel; + PRODUCT_NAME = TTTAttributedLabel; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + C1EAD11CCF0B74622AA2C8426F33EEC6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3761E6FC8FB2C049CFB42B5DF219C572 /* SocketRocket.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SocketRocket/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap"; + PRODUCT_MODULE_NAME = SocketRocket; + PRODUCT_NAME = SocketRocket; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; C31D4A60B85340BE5612ED03122BB05A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 61615A4BA5FD1E80D97AD163695F7253 /* IQKeyboardManager.xcconfig */; + baseConfigurationReference = 206777951591DDC2438D5F454A71CB8A /* IQKeyboardManager.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3571,73 +4070,9 @@ }; name = Debug; }; - C7C4781DE4E0F4EACA91CAF393AB7B31 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AF17F320B7EE79DE46A5FD89542A6FA /* Toast.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Toast/Toast-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Toast/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Toast/Toast.modulemap"; - PRODUCT_MODULE_NAME = Toast; - PRODUCT_NAME = Toast; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - CAE49E0E245A9D9D88D399CCA82567F0 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 218B6E61733A5B9138CB4D0815133580 /* Pods-GIGA.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-GIGA/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-GIGA/Pods-GIGA.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; CF7020C6E9C00CE59577DC6F9E4255AF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0A605A9C44A718DE8A45059C9828A9F0 /* MBProgressHUD.xcconfig */; + baseConfigurationReference = 36C94757ECFB0CDBFD720B0C11F08BC1 /* MBProgressHUD.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3667,7 +4102,7 @@ }; D0283D74AA9E4B0F055622C3C9C03217 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 70CE012FB313B9D041F010EDCACCC25C /* MJRefresh.xcconfig */; + baseConfigurationReference = 7F2A106A290EC7B512FC0E8A9C14E807 /* MJRefresh.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3695,69 +4130,9 @@ }; name = Debug; }; - D58874A0278544B4451530E213B17915 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AF17F320B7EE79DE46A5FD89542A6FA /* Toast.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Toast/Toast-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Toast/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Toast/Toast.modulemap"; - PRODUCT_MODULE_NAME = Toast; - PRODUCT_NAME = Toast; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - D8013C7029DB0DC9BF66FCEA8D372A24 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 52C76AE5C4FEB2823CB9B6FA40CB9312 /* SDWebImage.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; D958D0B06505E793082732152F56DAB8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 61615A4BA5FD1E80D97AD163695F7253 /* IQKeyboardManager.xcconfig */; + baseConfigurationReference = 206777951591DDC2438D5F454A71CB8A /* IQKeyboardManager.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3786,9 +4161,39 @@ }; name = Release; }; + DB6B8C92D8C6DDD73048B46FE91C4FB9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3761E6FC8FB2C049CFB42B5DF219C572 /* SocketRocket.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SocketRocket/SocketRocket-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SocketRocket/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SocketRocket/SocketRocket.modulemap"; + PRODUCT_MODULE_NAME = SocketRocket; + PRODUCT_NAME = SocketRocket; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; DF7FA40181E08DC392346D86E3A8405C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 399D564FB809301AF166719C68708229 /* AFNetworking.xcconfig */; + baseConfigurationReference = CC29AB6DCE0390D33472279DBF9F826F /* AFNetworking.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3817,9 +4222,75 @@ }; name = Release; }; + EAD68733C951B7827F1B8D1C845E080F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A71A2EDB7D80E8B54C1540FA4E2B8A8D /* Toast.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Toast/Toast-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Toast/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Toast/Toast.modulemap"; + PRODUCT_MODULE_NAME = Toast; + PRODUCT_NAME = Toast; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + EF3B39AB7B1FB9966CE26F11E192097A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 218B6E61733A5B9138CB4D0815133580 /* Pods-GIGA.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-GIGA/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-GIGA/Pods-GIGA.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; F147DE2EB0DE030E54C6E63C35F621A1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0A605A9C44A718DE8A45059C9828A9F0 /* MBProgressHUD.xcconfig */; + baseConfigurationReference = 36C94757ECFB0CDBFD720B0C11F08BC1 /* MBProgressHUD.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3906,39 +4377,9 @@ }; name = Release; }; - FC7B99973F9E44159F9D60984F5CB4EC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B724EFE1A35CEE6EE7D804EBC9E9B647 /* TTTAttributedLabel.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TTTAttributedLabel/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TTTAttributedLabel/TTTAttributedLabel.modulemap"; - PRODUCT_MODULE_NAME = TTTAttributedLabel; - PRODUCT_NAME = TTTAttributedLabel; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; FE3EC76958EB417BB5A9577967FD1019 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4E23A195A0FEDD4FE55DB45C9D24DB0D /* Masonry.xcconfig */; + baseConfigurationReference = 61C2C19E65EA773F183A0CC25BA57237 /* Masonry.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -3970,15 +4411,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0012A7CF52D71D63FC55A4D5A6AC4075 /* Build configuration list for PBXNativeTarget "Pods-GIGA" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CAE49E0E245A9D9D88D399CCA82567F0 /* Debug */, - 3229F5219B17A9A0A495A822D0D76552 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 02D024184BD368B565F3B6257DF3C605 /* Build configuration list for PBXNativeTarget "Masonry" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3988,6 +4420,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 1E5906AA4CEA8D63C4872E060D702ED0 /* Build configuration list for PBXNativeTarget "Pods-GIGA" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EF3B39AB7B1FB9966CE26F11E192097A /* Debug */, + 94A04F2FDCA78F1527BDF81A7D819E00 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 1EFADDC2BB6831ED43B76E0241CCDB75 /* Build configuration list for PBXNativeTarget "MJRefresh" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -3997,15 +4438,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 22083EC4897837089BD9F11DA45914F5 /* Build configuration list for PBXNativeTarget "Toast" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D58874A0278544B4451530E213B17915 /* Debug */, - C7C4781DE4E0F4EACA91CAF393AB7B31 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 22A2379BF2B87BFC7BA495F9BD85DD28 /* Build configuration list for PBXNativeTarget "IQKeyboardManager" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4042,20 +4474,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4DC283BD16CE8D51C0C47A03AE2B9931 /* Build configuration list for PBXNativeTarget "TTTAttributedLabel" */ = { + 4342C6E210ABD2AA884A6763AD5DFC1B /* Build configuration list for PBXNativeTarget "YTKKeyValueStore" */ = { isa = XCConfigurationList; buildConfigurations = ( - FC7B99973F9E44159F9D60984F5CB4EC /* Debug */, - 2B8A6007035DBC0EFFEAF10089E67972 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 529362CDA42ABA356BEDB1C8DE1878E5 /* Build configuration list for PBXNativeTarget "UITableView+FDTemplateLayoutCell" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 98220769C0FAD22BA9763C663E86BBDA /* Debug */, - B47DB8873BD38F138D40B5834981E81C /* Release */, + 43F7BB0B35A73F6686758F4D9F7A3322 /* Debug */, + 1DA9018703D5845007DEFB59F340E13F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -4087,29 +4510,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9CCFEAF1989FAB852D4659E698888A02 /* Build configuration list for PBXNativeTarget "YTKKeyValueStore" */ = { + 9C1388254385C167C3486774DFA19E4B /* Build configuration list for PBXNativeTarget "Toast" */ = { isa = XCConfigurationList; buildConfigurations = ( - 43EAA89AC085B77AAC7B6708389028D8 /* Debug */, - 437D32CF66962E25C97C70E374F699A6 /* Release */, + 64F425AD1ABDBE7B571C3EE6AB4454E7 /* Debug */, + EAD68733C951B7827F1B8D1C845E080F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B54043E8C4A49656CF64035A2F5B237A /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + AD43B7EE0B1CE05F5620E0CB4E98AA04 /* Build configuration list for PBXNativeTarget "Socket.IO-Client-Swift" */ = { isa = XCConfigurationList; buildConfigurations = ( - D8013C7029DB0DC9BF66FCEA8D372A24 /* Debug */, - C2562A2CCB1E969A1C97ED084AF1D0A2 /* Release */, + 77B29220E68FD63B7DF07B8DADE69E58 /* Debug */, + 15BBFED7520799B81C419B9659B126FA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CEE1C7C5EB2923B3BFB904DF6E10ABAE /* Build configuration list for PBXNativeTarget "SocketRocket" */ = { + D773EDDAA9E875352723DC73E02DDFE5 /* Build configuration list for PBXNativeTarget "UITableView+FDTemplateLayoutCell" */ = { isa = XCConfigurationList; buildConfigurations = ( - 91A17F62BDD3A47B620B8F785CC8B605 /* Debug */, - A500AE804E9C41A4C32A283EE0F9FE17 /* Release */, + 51F80CF25424DE3FA510FB9288900CC5 /* Debug */, + 6D17A2E9C19EFB3CEFB664ED5349ED7F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E72A11DB5C3E9606198B359389FDF949 /* Build configuration list for PBXNativeTarget "Starscream" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A779DC8723C1EB601F70FC8F2170010B /* Debug */, + 3B3B79288247B2E1243D4ADBF87333CE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -4123,6 +4555,33 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + FD3E3AC28A10371D2EC0FED80CFD7E84 /* Build configuration list for PBXNativeTarget "SocketRocket" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB6B8C92D8C6DDD73048B46FE91C4FB9 /* Debug */, + C1EAD11CCF0B74622AA2C8426F33EEC6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FD8A0CB03AC21C5BCB521E0FC6235E48 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 74F14DAD92525F5165930D906F7BDCC5 /* Debug */, + B15B60D56D4801C4BB2840A791584455 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FE1D69742C36F3E572A7171E67E92F3C /* Build configuration list for PBXNativeTarget "TTTAttributedLabel" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B7DFA3A9CFCC2DE983F00C6B24B38672 /* Debug */, + 5A63432C9ABA464AE372CE9DC734EFC2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Pods-GIGA.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Pods-GIGA.xcscheme index 4777095..322012a 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Pods-GIGA.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Pods-GIGA.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -45,7 +45,7 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/SDWebImage.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/SDWebImage.xcscheme index 1a0b46d..8af0096 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/SDWebImage.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/SDWebImage.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Socket.IO-Client-Swift.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Socket.IO-Client-Swift.xcscheme new file mode 100644 index 0000000..6bb6a26 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Socket.IO-Client-Swift.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/SocketRocket.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/SocketRocket.xcscheme index cfd853c..8787c69 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/SocketRocket.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/SocketRocket.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Starscream.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Starscream.xcscheme new file mode 100644 index 0000000..92d95a0 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Starscream.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/TTTAttributedLabel.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/TTTAttributedLabel.xcscheme index 19a9f4e..33ce620 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/TTTAttributedLabel.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/TTTAttributedLabel.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Toast.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Toast.xcscheme index 49d0d78..3be888a 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Toast.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/Toast.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/UITableView+FDTemplateLayoutCell.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/UITableView+FDTemplateLayoutCell.xcscheme index 9e7cc16..3f10f55 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/UITableView+FDTemplateLayoutCell.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/UITableView+FDTemplateLayoutCell.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -45,7 +45,7 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/YTKKeyValueStore.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/YTKKeyValueStore.xcscheme index 40b4587..07fb3a0 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/YTKKeyValueStore.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/YTKKeyValueStore.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/xcschememanagement.plist index ae6ee25..7771d00 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/lianxiang.xcuserdatad/xcschemes/xcschememanagement.plist @@ -81,41 +81,55 @@ orderHint 10 - SocketRocket.xcscheme + Socket.IO-Client-Swift.xcscheme isShown orderHint 11 - TTTAttributedLabel.xcscheme - - isShown - - orderHint - 13 - - Toast.xcscheme + SocketRocket.xcscheme isShown orderHint 12 - UITableView+FDTemplateLayoutCell.xcscheme + Starscream.xcscheme isShown orderHint - 14 + 13 - YTKKeyValueStore.xcscheme + TTTAttributedLabel.xcscheme isShown orderHint 15 + Toast.xcscheme + + isShown + + orderHint + 14 + + UITableView+FDTemplateLayoutCell.xcscheme + + isShown + + orderHint + 16 + + YTKKeyValueStore.xcscheme + + isShown + + orderHint + 17 + SuppressBuildableAutocreation diff --git a/Pods/Socket.IO-Client-Swift/LICENSE b/Pods/Socket.IO-Client-Swift/LICENSE new file mode 100644 index 0000000..1274e18 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/LICENSE @@ -0,0 +1,230 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015 Erik Little + +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. + + + +This library makes use of the following third party libraries: + +Starscream +---------- + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Pods/Socket.IO-Client-Swift/README.md b/Pods/Socket.IO-Client-Swift/README.md new file mode 100644 index 0000000..eea6ed0 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/README.md @@ -0,0 +1,153 @@ +[![Build Status](https://travis-ci.org/socketio/socket.io-client-swift.svg?branch=master)](https://travis-ci.org/socketio/socket.io-client-swift) + +# Socket.IO-Client-Swift +Socket.IO-client for iOS/OS X. + +## Example +```swift +import SocketIO + +let manager = SocketManager(socketURL: URL(string: "http://localhost:8080")!, config: [.log(true), .compress]) +let socket = manager.defaultSocket + +socket.on(clientEvent: .connect) {data, ack in + print("socket connected") +} + +socket.on("currentAmount") {data, ack in + guard let cur = data[0] as? Double else { return } + + socket.emitWithAck("canUpdate", cur).timingOut(after: 0) {data in + socket.emit("update", ["amount": cur + 2.50]) + } + + ack.with("Got your currentAmount", "dude") +} + +socket.connect() +``` + +## Objective-C Example +```objective-c +@import SocketIO; + +NSURL* url = [[NSURL alloc] initWithString:@"http://localhost:8080"]; +SocketManager* manager = [[SocketManager alloc] initWithSocketURL:url config:@{@"log": @YES, @"compress": @YES}]; +SocketIOClient* socket = manager.defaultSocket; + +[socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) { + NSLog(@"socket connected"); +}]; + +[socket on:@"currentAmount" callback:^(NSArray* data, SocketAckEmitter* ack) { + double cur = [[data objectAtIndex:0] floatValue]; + + [[socket emitWithAck:@"canUpdate" with:@[@(cur)]] timingOutAfter:0 callback:^(NSArray* data) { + [socket emit:@"update" with:@[@{@"amount": @(cur + 2.50)}]]; + }]; + + [ack with:@[@"Got your currentAmount, ", @"dude"]]; +}]; + +[socket connect]; + +``` + +## Features +- Supports socket.io 2.0+ (For socket.io 1.0 use v9.x) +- Supports binary +- Supports Polling and WebSockets +- Supports TLS/SSL +- Can be used from Objective-C + +## FAQS +Checkout the [FAQs](https://nuclearace.github.io/Socket.IO-Client-Swift/faq.html) for commonly asked questions. + +Checkout the [12to13](https://nuclearace.github.io/Socket.IO-Client-Swift/12to13.html) guide for migrating to v13. + + +## Installation +Requires Swift 4/Xcode 9.x + +If you need Swift 2.3 use the [swift2.3 tag](https://github.com/socketio/socket.io-client-swift/releases/tag/swift2.3) (Pre-Swift 4 support is no longer maintained) + +If you need Swift 3.x use v11.1.3. + +### Swift Package Manager +Add the project as a dependency to your Package.swift: +```swift +// swift-tools-version:4.0 + +import PackageDescription + +let package = Package( + name: "socket.io-test", + products: [ + .executable(name: "socket.io-test", targets: ["YourTargetName"]) + ], + dependencies: [ + .package(url: "https://github.com/socketio/socket.io-client-swift", .upToNextMinor(from: "13.3.0")) + ], + targets: [ + .target(name: "YourTargetName", dependencies: ["SocketIO"], path: "./Path/To/Your/Sources") + ] +) +``` + +Then import `import SocketIO`. + +### Carthage +Add this line to your `Cartfile`: +``` +github "socketio/socket.io-client-swift" ~> 13.3.0 +``` + +Run `carthage update --platform ios,macosx`. + +Add the `Starscream` and `SocketIO` frameworks to your projects and follow the usual Carthage process. + +### CocoaPods 1.0.0 or later +Create `Podfile` and add `pod 'Socket.IO-Client-Swift'`: + +```ruby +use_frameworks! + +target 'YourApp' do + pod 'Socket.IO-Client-Swift', '~> 13.3.0' +end +``` + +Install pods: + +``` +$ pod install +``` + +Import the module: + +Swift: +```swift +import SocketIO +``` + +Objective-C: + +```Objective-C +@import SocketIO; +``` + + +# [Docs](https://nuclearace.github.io/Socket.IO-Client-Swift/index.html) + +- [Client](https://nuclearace.github.io/Socket.IO-Client-Swift/Classes/SocketIOClient.html) +- [Manager](https://nuclearace.github.io/Socket.IO-Client-Swift/Classes/SocketManager.html) +- [Engine](https://nuclearace.github.io/Socket.IO-Client-Swift/Classes/SocketEngine.html) +- [Options](https://nuclearace.github.io/Socket.IO-Client-Swift/Enums/SocketIOClientOption.html) + +## Detailed Example +A more detailed example can be found [here](https://github.com/nuclearace/socket.io-client-swift-example) + +An example using the Swift Package Manager can be found [here](https://github.com/nuclearace/socket.io-client-swift-spm-example) + +## License +MIT diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Ack/SocketAckEmitter.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Ack/SocketAckEmitter.swift new file mode 100644 index 0000000..de45a39 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Ack/SocketAckEmitter.swift @@ -0,0 +1,145 @@ +// +// SocketAckEmitter.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 9/16/15. +// +// 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. + +import Dispatch +import Foundation + +/// A class that represents a waiting ack call. +/// +/// **NOTE**: You should not store this beyond the life of the event handler. +public final class SocketAckEmitter : NSObject { + private unowned let socket: SocketIOClient + private let ackNum: Int + + /// A view into this emitter where emits do not check for binary data. + /// + /// Usage: + /// + /// ```swift + /// ack.rawEmitView.with(myObject) + /// ``` + /// + /// **NOTE**: It is not safe to hold on to this view beyond the life of the socket. + @objc + public private(set) lazy var rawEmitView = SocketRawAckView(socket: socket, ackNum: ackNum) + + // MARK: Properties + + /// If true, this handler is expecting to be acked. Call `with(_: SocketData...)` to ack. + public var expected: Bool { + return ackNum != -1 + } + + // MARK: Initializers + + /// Creates a new `SocketAckEmitter`. + /// + /// - parameter socket: The socket for this emitter. + /// - parameter ackNum: The ack number for this emitter. + public init(socket: SocketIOClient, ackNum: Int) { + self.socket = socket + self.ackNum = ackNum + } + + // MARK: Methods + + /// Call to ack receiving this event. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[ackNum, items, theError]` + /// + /// - parameter items: A variable number of items to send when acking. + public func with(_ items: SocketData...) { + guard ackNum != -1 else { return } + + do { + socket.emitAck(ackNum, with: try items.map({ try $0.socketRepresentation() })) + } catch { + socket.handleClientEvent(.error, data: [ackNum, items, error]) + } + } + + /// Call to ack receiving this event. + /// + /// - parameter items: An array of items to send when acking. Use `[]` to send nothing. + @objc + public func with(_ items: [Any]) { + guard ackNum != -1 else { return } + + socket.emitAck(ackNum, with: items) + } + +} + +/// A class that represents an emit that will request an ack that has not yet been sent. +/// Call `timingOut(after:callback:)` to complete the emit +/// Example: +/// +/// ```swift +/// socket.emitWithAck("myEvent").timingOut(after: 1) {data in +/// ... +/// } +/// ``` +public final class OnAckCallback : NSObject { + private let ackNumber: Int + private let binary: Bool + private let items: [Any] + + private weak var socket: SocketIOClient? + + init(ackNumber: Int, items: [Any], socket: SocketIOClient, binary: Bool = true) { + self.ackNumber = ackNumber + self.items = items + self.socket = socket + self.binary = binary + } + + deinit { + DefaultSocketLogger.Logger.log("OnAckCallback for \(ackNumber) being released", type: "OnAckCallback") + } + + // MARK: Methods + + /// Completes an emitWithAck. If this isn't called, the emit never happens. + /// + /// - parameter seconds: The number of seconds before this emit times out if an ack hasn't been received. + /// - parameter callback: The callback called when an ack is received, or when a timeout happens. + /// To check for timeout, use `SocketAckStatus`'s `noAck` case. + @objc + public func timingOut(after seconds: Double, callback: @escaping AckCallback) { + guard let socket = self.socket, ackNumber != -1 else { return } + + socket.ackHandlers.addAck(ackNumber, callback: callback) + socket.emit(items, ack: ackNumber, binary: binary) + + guard seconds != 0 else { return } + + socket.manager?.handleQueue.asyncAfter(deadline: DispatchTime.now() + seconds) {[weak socket] in + guard let socket = socket else { return } + + socket.ackHandlers.timeoutAck(self.ackNumber) + } + } + +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Ack/SocketAckManager.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Ack/SocketAckManager.swift new file mode 100644 index 0000000..4679f37 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Ack/SocketAckManager.swift @@ -0,0 +1,77 @@ +// +// SocketAckManager.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 4/3/15. +// +// 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. + +import Dispatch +import Foundation + +/// The status of an ack. +public enum SocketAckStatus : String { + // MARK: Cases + + /// The ack timed out. + case noAck = "NO ACK" +} + +private struct SocketAck : Hashable { + let ack: Int + var callback: AckCallback! + var hashValue: Int { + return ack.hashValue + } + + init(ack: Int) { + self.ack = ack + } + + init(ack: Int, callback: @escaping AckCallback) { + self.ack = ack + self.callback = callback + } + + fileprivate static func <(lhs: SocketAck, rhs: SocketAck) -> Bool { + return lhs.ack < rhs.ack + } + + fileprivate static func ==(lhs: SocketAck, rhs: SocketAck) -> Bool { + return lhs.ack == rhs.ack + } +} + +class SocketAckManager { + private var acks = Set(minimumCapacity: 1) + + func addAck(_ ack: Int, callback: @escaping AckCallback) { + acks.insert(SocketAck(ack: ack, callback: callback)) + } + + /// Should be called on handle queue + func executeAck(_ ack: Int, with items: [Any]) { + acks.remove(SocketAck(ack: ack))?.callback(items) + } + + /// Should be called on handle queue + func timeoutAck(_ ack: Int) { + acks.remove(SocketAck(ack: ack))?.callback?([SocketAckStatus.noAck.rawValue]) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketAnyEvent.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketAnyEvent.swift new file mode 100644 index 0000000..441e8c5 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketAnyEvent.swift @@ -0,0 +1,48 @@ +// +// SocketAnyEvent.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 3/28/15. +// +// 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. + +import Foundation + +/// Represents some event that was received. +public final class SocketAnyEvent : NSObject { + // MARK: Properties + + /// The event name. + @objc + public let event: String + + /// The data items for this event. + @objc + public let items: [Any]? + + /// The description of this event. + override public var description: String { + return "SocketAnyEvent: Event: \(event) items: \(String(describing: items))" + } + + init(event: String, items: [Any]?) { + self.event = event + self.items = items + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketEventHandler.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketEventHandler.swift new file mode 100644 index 0000000..4f75a5a --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketEventHandler.swift @@ -0,0 +1,50 @@ +// +// EventHandler.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 1/18/15. +// +// 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. + +import Foundation + +/// A wrapper around a handler. +public struct SocketEventHandler { + // MARK: Properties + + /// The event for this handler. + public let event: String + + /// A unique identifier for this handler. + public let id: UUID + + /// The actual handler function. + public let callback: NormalCallback + + // MARK: Methods + + /// Causes this handler to be executed. + /// + /// - parameter with: The data that this handler should be called with. + /// - parameter withAck: The ack number that this event expects. Pass -1 to say this event doesn't expect an ack. + /// - parameter withSocket: The socket that is calling this event. + public func executeCallback(with items: [Any], withAck ack: Int, withSocket socket: SocketIOClient) { + callback(items, SocketAckEmitter(socket: socket, ackNum: ack)) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClient.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClient.swift new file mode 100644 index 0000000..501fe30 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClient.swift @@ -0,0 +1,535 @@ +// +// SocketIOClient.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 11/23/14. +// +// 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. + +import Dispatch +import Foundation + +/// Represents a socket.io-client. +/// +/// Clients are created through a `SocketManager`, which owns the `SocketEngineSpec` that controls the connection to the server. +/// +/// For example: +/// +/// ```swift +/// // Create a socket for the /swift namespace +/// let socket = manager.socket(forNamespace: "/swift") +/// +/// // Add some handlers and connect +/// ``` +/// +/// **NOTE**: The client is not thread/queue safe, all interaction with the socket should be done on the `manager.handleQueue` +/// +open class SocketIOClient : NSObject, SocketIOClientSpec { + // MARK: Properties + + /// The namespace that this socket is currently connected to. + /// + /// **Must** start with a `/`. + @objc + public let nsp: String + + /// The session id of this client. + @objc + public var sid: String { + guard let engine = manager?.engine else { return "" } + + return nsp == "/" ? engine.sid : "\(nsp)#\(engine.sid)" + } + + /// A handler that will be called on any event. + public private(set) var anyHandler: ((SocketAnyEvent) -> ())? + + /// The array of handlers for this socket. + public private(set) var handlers = [SocketEventHandler]() + + /// The manager for this socket. + @objc + public private(set) weak var manager: SocketManagerSpec? + + /// A view into this socket where emits do not check for binary data. + /// + /// Usage: + /// + /// ```swift + /// socket.rawEmitView.emit("myEvent", myObject) + /// ``` + /// + /// **NOTE**: It is not safe to hold on to this view beyond the life of the socket. + @objc + public private(set) lazy var rawEmitView = SocketRawView(socket: self) + + /// The status of this client. + @objc + public private(set) var status = SocketIOStatus.notConnected { + didSet { + handleClientEvent(.statusChange, data: [status]) + } + } + + let ackHandlers = SocketAckManager() + + private(set) var currentAck = -1 + + private lazy var logType = "SocketIOClient{\(nsp)}" + + // MARK: Initializers + + /// Type safe way to create a new SocketIOClient. `opts` can be omitted. + /// + /// - parameter manager: The manager for this socket. + /// - parameter nsp: The namespace of the socket. + @objc + public init(manager: SocketManagerSpec, nsp: String) { + self.manager = manager + self.nsp = nsp + + super.init() + } + + deinit { + DefaultSocketLogger.Logger.log("Client is being released", type: logType) + } + + // MARK: Methods + + /// Connect to the server. The same as calling `connect(timeoutAfter:withHandler:)` with a timeout of 0. + /// + /// Only call after adding your event listeners, unless you know what you're doing. + @objc + open func connect() { + connect(timeoutAfter: 0, withHandler: nil) + } + + /// Connect to the server. If we aren't connected after `timeoutAfter` seconds, then `withHandler` is called. + /// + /// Only call after adding your event listeners, unless you know what you're doing. + /// + /// - parameter timeoutAfter: The number of seconds after which if we are not connected we assume the connection + /// has failed. Pass 0 to never timeout. + /// - parameter handler: The handler to call when the client fails to connect. + @objc + open func connect(timeoutAfter: Double, withHandler handler: (() -> ())?) { + assert(timeoutAfter >= 0, "Invalid timeout: \(timeoutAfter)") + + guard let manager = self.manager, status != .connected else { + DefaultSocketLogger.Logger.log("Tried connecting on an already connected socket", type: logType) + return + } + + status = .connecting + + joinNamespace() + + if manager.status == .connected && nsp == "/" { + // We might not get a connect event for the default nsp, fire immediately + didConnect(toNamespace: nsp) + + return + } + + guard timeoutAfter != 0 else { return } + + manager.handleQueue.asyncAfter(deadline: DispatchTime.now() + timeoutAfter) {[weak self] in + guard let this = self, this.status == .connecting || this.status == .notConnected else { return } + + this.status = .disconnected + this.leaveNamespace() + + handler?() + } + } + + func createOnAck(_ items: [Any], binary: Bool = true) -> OnAckCallback { + currentAck += 1 + + return OnAckCallback(ackNumber: currentAck, items: items, socket: self) + } + + /// Called when the client connects to a namespace. If the client was created with a namespace upfront, + /// then this is only called when the client connects to that namespace. + /// + /// - parameter toNamespace: The namespace that was connected to. + open func didConnect(toNamespace namespace: String) { + guard status != .connected else { return } + + DefaultSocketLogger.Logger.log("Socket connected", type: logType) + + status = .connected + + handleClientEvent(.connect, data: [namespace]) + } + + /// Called when the client has disconnected from socket.io. + /// + /// - parameter reason: The reason for the disconnection. + open func didDisconnect(reason: String) { + guard status != .disconnected else { return } + + DefaultSocketLogger.Logger.log("Disconnected: \(reason)", type: logType) + + status = .disconnected + + handleClientEvent(.disconnect, data: [reason]) + } + + /// Disconnects the socket. + /// + /// This will cause the socket to leave the namespace it is associated to, as well as remove itself from the + /// `manager`. + @objc + open func disconnect() { + DefaultSocketLogger.Logger.log("Closing socket", type: logType) + + leaveNamespace() + } + + /// Send an event to the server, with optional data items. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[eventName, items, theError]` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. May be left out. + open func emit(_ event: String, _ items: SocketData...) { + do { + try emit(event, with: items.map({ try $0.socketRepresentation() })) + } catch { + DefaultSocketLogger.Logger.error("Error creating socketRepresentation for emit: \(event), \(items)", + type: logType) + + handleClientEvent(.error, data: [event, items, error]) + } + } + + /// Same as emit, but meant for Objective-C + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. Send an empty array to send no data. + @objc + open func emit(_ event: String, with items: [Any]) { + emit([event] + items) + } + + /// Sends a message to the server, requesting an ack. + /// + /// **NOTE**: It is up to the server send an ack back, just calling this method does not mean the server will ack. + /// Check that your server's api will ack the event being sent. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[eventName, items, theError]` + /// + /// Example: + /// + /// ```swift + /// socket.emitWithAck("myEvent", 1).timingOut(after: 1) {data in + /// ... + /// } + /// ``` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. May be left out. + /// - returns: An `OnAckCallback`. You must call the `timingOut(after:)` method before the event will be sent. + open func emitWithAck(_ event: String, _ items: SocketData...) -> OnAckCallback { + do { + return emitWithAck(event, with: try items.map({ try $0.socketRepresentation() })) + } catch { + DefaultSocketLogger.Logger.error("Error creating socketRepresentation for emit: \(event), \(items)", + type: logType) + + handleClientEvent(.error, data: [event, items, error]) + + return OnAckCallback(ackNumber: -1, items: [], socket: self) + } + } + + /// Same as emitWithAck, but for Objective-C + /// + /// **NOTE**: It is up to the server send an ack back, just calling this method does not mean the server will ack. + /// Check that your server's api will ack the event being sent. + /// + /// Example: + /// + /// ```swift + /// socket.emitWithAck("myEvent", with: [1]).timingOut(after: 1) {data in + /// ... + /// } + /// ``` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. Use `[]` to send nothing. + /// - returns: An `OnAckCallback`. You must call the `timingOut(after:)` method before the event will be sent. + @objc + open func emitWithAck(_ event: String, with items: [Any]) -> OnAckCallback { + return createOnAck([event] + items) + } + + func emit(_ data: [Any], ack: Int? = nil, binary: Bool = true, isAck: Bool = false) { + guard status == .connected else { + handleClientEvent(.error, data: ["Tried emitting when not connected"]) + return + } + + let packet = SocketPacket.packetFromEmit(data, id: ack ?? -1, nsp: nsp, ack: isAck, checkForBinary: binary) + let str = packet.packetString + + DefaultSocketLogger.Logger.log("Emitting: \(str), Ack: \(isAck)", type: logType) + + manager?.engine?.send(str, withData: packet.binary) + } + + /// Call when you wish to tell the server that you've received the event for `ack`. + /// + /// **You shouldn't need to call this directly.** Instead use an `SocketAckEmitter` that comes in an event callback. + /// + /// - parameter ack: The ack number. + /// - parameter with: The data for this ack. + open func emitAck(_ ack: Int, with items: [Any]) { + emit(items, ack: ack, binary: true, isAck: true) + } + + /// Called when socket.io has acked one of our emits. Causes the corresponding ack callback to be called. + /// + /// - parameter ack: The number for this ack. + /// - parameter data: The data sent back with this ack. + @objc + open func handleAck(_ ack: Int, data: [Any]) { + guard status == .connected else { return } + + DefaultSocketLogger.Logger.log("Handling ack: \(ack) with data: \(data)", type: logType) + + ackHandlers.executeAck(ack, with: data) + } + + /// Called on socket.io specific events. + /// + /// - parameter event: The `SocketClientEvent`. + /// - parameter data: The data for this event. + open func handleClientEvent(_ event: SocketClientEvent, data: [Any]) { + handleEvent(event.rawValue, data: data, isInternalMessage: true) + } + + /// Called when we get an event from socket.io. + /// + /// - parameter event: The name of the event. + /// - parameter data: The data that was sent with this event. + /// - parameter isInternalMessage: Whether this event was sent internally. If `true` it is always sent to handlers. + /// - parameter ack: If > 0 then this event expects to get an ack back from the client. + @objc + open func handleEvent(_ event: String, data: [Any], isInternalMessage: Bool, withAck ack: Int = -1) { + guard status == .connected || isInternalMessage else { return } + + DefaultSocketLogger.Logger.log("Handling event: \(event) with data: \(data)", type: logType) + + anyHandler?(SocketAnyEvent(event: event, items: data)) + + for handler in handlers where handler.event == event { + handler.executeCallback(with: data, withAck: ack, withSocket: self) + } + } + + /// Causes a client to handle a socket.io packet. The namespace for the packet must match the namespace of the + /// socket. + /// + /// - parameter packet: The packet to handle. + open func handlePacket(_ packet: SocketPacket) { + guard packet.nsp == nsp else { return } + + switch packet.type { + case .event, .binaryEvent: + handleEvent(packet.event, data: packet.args, isInternalMessage: false, withAck: packet.id) + case .ack, .binaryAck: + handleAck(packet.id, data: packet.data) + case .connect: + didConnect(toNamespace: nsp) + case .disconnect: + didDisconnect(reason: "Got Disconnect") + case .error: + handleEvent("error", data: packet.data, isInternalMessage: true, withAck: packet.id) + } + } + + /// Call when you wish to leave a namespace and disconnect this socket. + @objc + open func leaveNamespace() { + manager?.disconnectSocket(self) + } + + /// Joins `nsp`. + @objc + open func joinNamespace() { + DefaultSocketLogger.Logger.log("Joining namespace \(nsp)", type: logType) + + manager?.connectSocket(self) + } + + /// Removes handler(s) for a client event. + /// + /// If you wish to remove a client event handler, call the `off(id:)` with the UUID received from its `on` call. + /// + /// - parameter clientEvent: The event to remove handlers for. + open func off(clientEvent event: SocketClientEvent) { + off(event.rawValue) + } + + /// Removes handler(s) based on an event name. + /// + /// If you wish to remove a specific event, call the `off(id:)` with the UUID received from its `on` call. + /// + /// - parameter event: The event to remove handlers for. + @objc + open func off(_ event: String) { + DefaultSocketLogger.Logger.log("Removing handler for event: \(event)", type: logType) + + handlers = handlers.filter({ $0.event != event }) + } + + /// Removes a handler with the specified UUID gotten from an `on` or `once` + /// + /// If you want to remove all events for an event, call the off `off(_:)` method with the event name. + /// + /// - parameter id: The UUID of the handler you wish to remove. + @objc + open func off(id: UUID) { + DefaultSocketLogger.Logger.log("Removing handler with id: \(id)", type: logType) + + handlers = handlers.filter({ $0.id != id }) + } + + /// Adds a handler for an event. + /// + /// - parameter event: The event name for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + @objc + @discardableResult + open func on(_ event: String, callback: @escaping NormalCallback) -> UUID { + DefaultSocketLogger.Logger.log("Adding handler for event: \(event)", type: logType) + + let handler = SocketEventHandler(event: event, id: UUID(), callback: callback) + handlers.append(handler) + + return handler.id + } + + /// Adds a handler for a client event. + /// + /// Example: + /// + /// ```swift + /// socket.on(clientEvent: .connect) {data, ack in + /// ... + /// } + /// ``` + /// + /// - parameter event: The event for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + @discardableResult + open func on(clientEvent event: SocketClientEvent, callback: @escaping NormalCallback) -> UUID { + return on(event.rawValue, callback: callback) + } + + /// Adds a single-use handler for a client event. + /// + /// - parameter clientEvent: The event for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + @discardableResult + open func once(clientEvent event: SocketClientEvent, callback: @escaping NormalCallback) -> UUID { + return once(event.rawValue, callback: callback) + } + + /// Adds a single-use handler for an event. + /// + /// - parameter event: The event name for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + @objc + @discardableResult + open func once(_ event: String, callback: @escaping NormalCallback) -> UUID { + DefaultSocketLogger.Logger.log("Adding once handler for event: \(event)", type: logType) + + let id = UUID() + + let handler = SocketEventHandler(event: event, id: id) {[weak self] data, ack in + guard let this = self else { return } + this.off(id: id) + callback(data, ack) + } + + handlers.append(handler) + + return handler.id + } + + /// Adds a handler that will be called on every event. + /// + /// - parameter handler: The callback that will execute whenever an event is received. + @objc + open func onAny(_ handler: @escaping (SocketAnyEvent) -> ()) { + anyHandler = handler + } + + /// Tries to reconnect to the server. + @objc + @available(*, unavailable, message: "Call the manager's reconnect method") + open func reconnect() { } + + /// Removes all handlers. + /// + /// Can be used after disconnecting to break any potential remaining retain cycles. + @objc + open func removeAllHandlers() { + handlers.removeAll(keepingCapacity: false) + } + + /// Puts the socket back into the connecting state. + /// Called when the manager detects a broken connection, or when a manual reconnect is triggered. + /// + /// - parameter reason: The reason this socket is reconnecting. + @objc + open func setReconnecting(reason: String) { + status = .connecting + + handleClientEvent(.reconnect, data: [reason]) + } + + // Test properties + + var testHandlers: [SocketEventHandler] { + return handlers + } + + func setTestable() { + status = .connected + } + + func setTestStatus(_ status: SocketIOStatus) { + self.status = status + } + + func emitTest(event: String, _ data: Any...) { + emit([event] + data) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClientConfiguration.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClientConfiguration.swift new file mode 100644 index 0000000..0ccaace --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClientConfiguration.swift @@ -0,0 +1,138 @@ +// +// SocketIOClientConfiguration.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 8/13/16. +// +// 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. + +/// An array-like type that holds `SocketIOClientOption`s +public struct SocketIOClientConfiguration : ExpressibleByArrayLiteral, Collection, MutableCollection { + // MARK: Typealiases + + /// Type of element stored. + public typealias Element = SocketIOClientOption + + /// Index type. + public typealias Index = Array.Index + + /// Iterator type. + public typealias Iterator = Array.Iterator + + /// SubSequence type. + public typealias SubSequence = Array.SubSequence + + // MARK: Properties + + private var backingArray = [SocketIOClientOption]() + + /// The start index of this collection. + public var startIndex: Index { + return backingArray.startIndex + } + + /// The end index of this collection. + public var endIndex: Index { + return backingArray.endIndex + } + + /// Whether this collection is empty. + public var isEmpty: Bool { + return backingArray.isEmpty + } + + /// The number of elements stored in this collection. + public var count: Index.Stride { + return backingArray.count + } + + /// The first element in this collection. + public var first: Element? { + return backingArray.first + } + + public subscript(position: Index) -> Element { + get { + return backingArray[position] + } + + set { + backingArray[position] = newValue + } + } + + public subscript(bounds: Range) -> SubSequence { + get { + return backingArray[bounds] + } + + set { + backingArray[bounds] = newValue + } + } + + // MARK: Initializers + + /// Creates a new `SocketIOClientConfiguration` from an array literal. + /// + /// - parameter arrayLiteral: The elements. + public init(arrayLiteral elements: Element...) { + backingArray = elements + } + + // MARK: Methods + + /// Creates an iterator for this collection. + /// + /// - returns: An iterator over this collection. + public func makeIterator() -> Iterator { + return backingArray.makeIterator() + } + + /// - returns: The index after index. + public func index(after i: Index) -> Index { + return backingArray.index(after: i) + } + + /// Special method that inserts `element` into the collection, replacing any other instances of `element`. + /// + /// - parameter element: The element to insert. + /// - parameter replacing: Whether to replace any occurrences of element to the new item. Default is `true`. + public mutating func insert(_ element: Element, replacing replace: Bool = true) { + for i in 0.. Any +} + +/// The options for a client. +public enum SocketIOClientOption : ClientOption { + /// If given, the WebSocket transport will attempt to use compression. + case compress + + /// A dictionary of GET parameters that will be included in the connect url. + case connectParams([String: Any]) + + /// An array of cookies that will be sent during the initial connection. + case cookies([HTTPCookie]) + + /// Any extra HTTP headers that should be sent during the initial connection. + case extraHeaders([String: String]) + + /// If passed `true`, will cause the client to always create a new engine. Useful for debugging, + /// or when you want to be sure no state from previous engines is being carried over. + case forceNew(Bool) + + /// If passed `true`, the only transport that will be used will be HTTP long-polling. + case forcePolling(Bool) + + /// If passed `true`, the only transport that will be used will be WebSockets. + case forceWebsockets(Bool) + + /// The queue that all interaction with the client should occur on. This is the queue that event handlers are + /// called on. + /// + /// **This should be a serial queue! Concurrent queues are not supported and might cause crashes and races**. + case handleQueue(DispatchQueue) + + /// If passed `true`, the client will log debug information. This should be turned off in production code. + case log(Bool) + + /// Used to pass in a custom logger. + case logger(SocketLogger) + + /// A custom path to socket.io. Only use this if the socket.io server is configured to look for this path. + case path(String) + + /// If passed `false`, the client will not reconnect when it loses connection. Useful if you want full control + /// over when reconnects happen. + case reconnects(Bool) + + /// The number of times to try and reconnect before giving up. Pass `-1` to [never give up](https://www.youtube.com/watch?v=dQw4w9WgXcQ). + case reconnectAttempts(Int) + + /// The number of seconds to wait before reconnect attempts. + case reconnectWait(Int) + + /// Set `true` if your server is using secure transports. + case secure(Bool) + + /// Allows you to set which certs are valid. Useful for SSL pinning. + case security(SSLSecurity) + + /// If you're using a self-signed set. Only use for development. + case selfSigned(Bool) + + /// Sets an NSURLSessionDelegate for the underlying engine. Useful if you need to handle self-signed certs. + case sessionDelegate(URLSessionDelegate) + + // MARK: Properties + + /// The description of this option. + public var description: String { + let description: String + + switch self { + case .compress: + description = "compress" + case .connectParams: + description = "connectParams" + case .cookies: + description = "cookies" + case .extraHeaders: + description = "extraHeaders" + case .forceNew: + description = "forceNew" + case .forcePolling: + description = "forcePolling" + case .forceWebsockets: + description = "forceWebsockets" + case .handleQueue: + description = "handleQueue" + case .log: + description = "log" + case .logger: + description = "logger" + case .path: + description = "path" + case .reconnects: + description = "reconnects" + case .reconnectAttempts: + description = "reconnectAttempts" + case .reconnectWait: + description = "reconnectWait" + case .secure: + description = "secure" + case .selfSigned: + description = "selfSigned" + case .security: + description = "security" + case .sessionDelegate: + description = "sessionDelegate" + } + + return description + } + + func getSocketIOOptionValue() -> Any { + let value: Any + + switch self { + case .compress: + value = true + case let .connectParams(params): + value = params + case let .cookies(cookies): + value = cookies + case let .extraHeaders(headers): + value = headers + case let .forceNew(force): + value = force + case let .forcePolling(force): + value = force + case let .forceWebsockets(force): + value = force + case let .handleQueue(queue): + value = queue + case let .log(log): + value = log + case let .logger(logger): + value = logger + case let .path(path): + value = path + case let .reconnects(reconnects): + value = reconnects + case let .reconnectAttempts(attempts): + value = attempts + case let .reconnectWait(wait): + value = wait + case let .secure(secure): + value = secure + case let .security(security): + value = security + case let .selfSigned(signed): + value = signed + case let .sessionDelegate(delegate): + value = delegate + } + + return value + } + + // MARK: Operators + + /// Compares whether two options are the same. + /// + /// - parameter lhs: Left operand to compare. + /// - parameter rhs: Right operand to compare. + /// - returns: `true` if the two are the same option. + public static func ==(lhs: SocketIOClientOption, rhs: SocketIOClientOption) -> Bool { + return lhs.description == rhs.description + } + +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClientSpec.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClientSpec.swift new file mode 100644 index 0000000..3835412 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOClientSpec.swift @@ -0,0 +1,337 @@ +// +// SocketIOClientSpec.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 1/3/16. +// +// 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. + +import Dispatch +import Foundation + +/// Defines the interface for a SocketIOClient. +public protocol SocketIOClientSpec : AnyObject { + // MARK: Properties + + /// A handler that will be called on any event. + var anyHandler: ((SocketAnyEvent) -> ())? { get } + + /// The array of handlers for this socket. + var handlers: [SocketEventHandler] { get } + + /// The manager for this socket. + var manager: SocketManagerSpec? { get } + + /// The namespace that this socket is currently connected to. + /// + /// **Must** start with a `/`. + var nsp: String { get } + + /// A view into this socket where emits do not check for binary data. + /// + /// Usage: + /// + /// ```swift + /// socket.rawEmitView.emit("myEvent", myObject) + /// ``` + /// + /// **NOTE**: It is not safe to hold on to this view beyond the life of the socket. + var rawEmitView: SocketRawView { get } + + /// The status of this client. + var status: SocketIOStatus { get } + + // MARK: Methods + + /// Connect to the server. The same as calling `connect(timeoutAfter:withHandler:)` with a timeout of 0. + /// + /// Only call after adding your event listeners, unless you know what you're doing. + func connect() + + /// Connect to the server. If we aren't connected after `timeoutAfter` seconds, then `withHandler` is called. + /// + /// Only call after adding your event listeners, unless you know what you're doing. + /// + /// - parameter timeoutAfter: The number of seconds after which if we are not connected we assume the connection + /// has failed. Pass 0 to never timeout. + /// - parameter handler: The handler to call when the client fails to connect. + func connect(timeoutAfter: Double, withHandler handler: (() -> ())?) + + /// Called when the client connects to a namespace. If the client was created with a namespace upfront, + /// then this is only called when the client connects to that namespace. + /// + /// - parameter toNamespace: The namespace that was connected to. + func didConnect(toNamespace namespace: String) + + /// Called when the client has disconnected from socket.io. + /// + /// - parameter reason: The reason for the disconnection. + func didDisconnect(reason: String) + + /// Called when the client encounters an error. + /// + /// - parameter reason: The reason for the disconnection. + func didError(reason: String) + + /// Disconnects the socket. + func disconnect() + + /// Send an event to the server, with optional data items. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[eventName, items, theError]` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. May be left out. + func emit(_ event: String, _ items: SocketData...) + + /// Call when you wish to tell the server that you've received the event for `ack`. + /// + /// - parameter ack: The ack number. + /// - parameter with: The data for this ack. + func emitAck(_ ack: Int, with items: [Any]) + + /// Sends a message to the server, requesting an ack. + /// + /// **NOTE**: It is up to the server send an ack back, just calling this method does not mean the server will ack. + /// Check that your server's api will ack the event being sent. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[eventName, items, theError]` + /// + /// Example: + /// + /// ```swift + /// socket.emitWithAck("myEvent", 1).timingOut(after: 1) {data in + /// ... + /// } + /// ``` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. May be left out. + /// - returns: An `OnAckCallback`. You must call the `timingOut(after:)` method before the event will be sent. + func emitWithAck(_ event: String, _ items: SocketData...) -> OnAckCallback + + /// Called when socket.io has acked one of our emits. Causes the corresponding ack callback to be called. + /// + /// - parameter ack: The number for this ack. + /// - parameter data: The data sent back with this ack. + func handleAck(_ ack: Int, data: [Any]) + + /// Called on socket.io specific events. + /// + /// - parameter event: The `SocketClientEvent`. + /// - parameter data: The data for this event. + func handleClientEvent(_ event: SocketClientEvent, data: [Any]) + + /// Called when we get an event from socket.io. + /// + /// - parameter event: The name of the event. + /// - parameter data: The data that was sent with this event. + /// - parameter isInternalMessage: Whether this event was sent internally. If `true` it is always sent to handlers. + /// - parameter ack: If > 0 then this event expects to get an ack back from the client. + func handleEvent(_ event: String, data: [Any], isInternalMessage: Bool, withAck ack: Int) + + /// Causes a client to handle a socket.io packet. The namespace for the packet must match the namespace of the + /// socket. + /// + /// - parameter packet: The packet to handle. + func handlePacket(_ packet: SocketPacket) + + /// Call when you wish to leave a namespace and disconnect this socket. + func leaveNamespace() + + /// Joins `nsp`. + func joinNamespace() + + /// Removes handler(s) for a client event. + /// + /// If you wish to remove a client event handler, call the `off(id:)` with the UUID received from its `on` call. + /// + /// - parameter clientEvent: The event to remove handlers for. + func off(clientEvent event: SocketClientEvent) + + /// Removes handler(s) based on an event name. + /// + /// If you wish to remove a specific event, call the `off(id:)` with the UUID received from its `on` call. + /// + /// - parameter event: The event to remove handlers for. + func off(_ event: String) + + /// Removes a handler with the specified UUID gotten from an `on` or `once` + /// + /// If you want to remove all events for an event, call the off `off(_:)` method with the event name. + /// + /// - parameter id: The UUID of the handler you wish to remove. + func off(id: UUID) + + /// Adds a handler for an event. + /// + /// - parameter event: The event name for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + func on(_ event: String, callback: @escaping NormalCallback) -> UUID + + /// Adds a handler for a client event. + /// + /// Example: + /// + /// ```swift + /// socket.on(clientEvent: .connect) {data, ack in + /// ... + /// } + /// ``` + /// + /// - parameter event: The event for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + func on(clientEvent event: SocketClientEvent, callback: @escaping NormalCallback) -> UUID + + /// Adds a single-use handler for a client event. + /// + /// - parameter clientEvent: The event for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + func once(clientEvent event: SocketClientEvent, callback: @escaping NormalCallback) -> UUID + + /// Adds a single-use handler for an event. + /// + /// - parameter event: The event name for this handler. + /// - parameter callback: The callback that will execute when this event is received. + /// - returns: A unique id for the handler that can be used to remove it. + func once(_ event: String, callback: @escaping NormalCallback) -> UUID + + /// Adds a handler that will be called on every event. + /// + /// - parameter handler: The callback that will execute whenever an event is received. + func onAny(_ handler: @escaping (SocketAnyEvent) -> ()) + + /// Removes all handlers. + /// + /// Can be used after disconnecting to break any potential remaining retain cycles. + func removeAllHandlers() + + /// Puts the socket back into the connecting state. + /// Called when the manager detects a broken connection, or when a manual reconnect is triggered. + /// + /// parameter reason: The reason this socket is going reconnecting. + func setReconnecting(reason: String) +} + +public extension SocketIOClientSpec { + /// Default implementation. + public func didError(reason: String) { + DefaultSocketLogger.Logger.error("\(reason)", type: "SocketIOClient") + + handleClientEvent(.error, data: [reason]) + } +} + +/// The set of events that are generated by the client. +public enum SocketClientEvent : String { + // MARK: Cases + + /// Emitted when the client connects. This is also called on a successful reconnection. A connect event gets one + /// data item: the namespace that was connected to. + /// + /// ```swift + /// socket.on(clientEvent: .connect) {data, ack in + /// guard let nsp = data[0] as? String else { return } + /// // Some logic using the nsp + /// } + /// ``` + case connect + + /// Emitted when the socket has disconnected and will not attempt to try to reconnect. + /// + /// Usage: + /// + /// ```swift + /// socket.on(clientEvent: .disconnect) {data, ack in + /// // Some cleanup logic + /// } + /// ``` + case disconnect + + /// Emitted when an error occurs. + /// + /// Usage: + /// + /// ```swift + /// socket.on(clientEvent: .error) {data, ack in + /// // Some logging + /// } + /// ``` + case error + + /// Emitted whenever the engine sends a ping. + /// + /// Usage: + /// + /// ```swift + /// socket.on(clientEvent: .ping) {_, _ in + /// // Maybe keep track of latency? + /// } + /// ``` + case ping + + /// Emitted whenever the engine gets a pong. + /// + /// Usage: + /// + /// ```swift + /// socket.on(clientEvent: .pong) {_, _ in + /// // Maybe keep track of latency? + /// } + /// ``` + case pong + + /// Emitted when the client begins the reconnection process. + /// + /// Usage: + /// + /// ```swift + /// socket.on(clientEvent: .reconnect) {data, ack in + /// // Some reconnect event logic + /// } + /// ``` + case reconnect + + /// Emitted each time the client tries to reconnect to the server. + /// + /// Usage: + /// + /// ```swift + /// socket.on(clientEvent: .reconnectAttempt) {data, ack in + /// // Some reconnect attempt logging + /// } + /// ``` + case reconnectAttempt + + /// Emitted every time there is a change in the client's status. + /// + /// Usage: + /// + /// ```swift + /// socket.on(clientEvent: .statusChange) {data, ack in + /// // Some status changing logging + /// } + /// ``` + case statusChange +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOStatus.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOStatus.swift new file mode 100644 index 0000000..4f298a2 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketIOStatus.swift @@ -0,0 +1,59 @@ +// +// SocketIOStatus.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 8/14/15. +// +// 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. + +import Foundation + +/// Represents state of a manager or client. +@objc +public enum SocketIOStatus : Int, CustomStringConvertible { + // MARK: Cases + + /// The client/manager has never been connected. Or the client has been reset. + case notConnected + + /// The client/manager was once connected, but not anymore. + case disconnected + + /// The client/manager is in the process of connecting. + case connecting + + /// The client/manager is currently connected. + case connected + + // MARK: Properties + + /// - returns: True if this client/manager is connected/connecting to a server. + public var active: Bool { + return self == .connected || self == .connecting + } + + public var description: String { + switch self { + case .connected: return "connected" + case .connecting: return "connecting" + case .disconnected: return "disconnected" + case .notConnected: return "notConnected" + } + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketRawView.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketRawView.swift new file mode 100644 index 0000000..e348ade --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Client/SocketRawView.swift @@ -0,0 +1,163 @@ +// +// SocketRawView.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 3/30/18. +// +// 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. + +import Foundation + +/// Class that gives a backwards compatible way to cause an emit not to recursively check for Data objects. +/// +/// Usage: +/// +/// ```swift +/// socket.rawEmitView.emit("myEvent", myObject) +/// ``` +public final class SocketRawView : NSObject { + private unowned let socket: SocketIOClient + + init(socket: SocketIOClient) { + self.socket = socket + } + + /// Send an event to the server, with optional data items. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[eventName, items, theError]` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. May be left out. + public func emit(_ event: String, _ items: SocketData...) { + do { + try emit(event, with: items.map({ try $0.socketRepresentation() })) + } catch { + DefaultSocketLogger.Logger.error("Error creating socketRepresentation for emit: \(event), \(items)", + type: "SocketIOClient") + + socket.handleClientEvent(.error, data: [event, items, error]) + } + } + + /// Same as emit, but meant for Objective-C + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. Send an empty array to send no data. + @objc + public func emit(_ event: String, with items: [Any]) { + socket.emit([event] + items, binary: false) + } + + /// Sends a message to the server, requesting an ack. + /// + /// **NOTE**: It is up to the server send an ack back, just calling this method does not mean the server will ack. + /// Check that your server's api will ack the event being sent. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[eventName, items, theError]` + /// + /// Example: + /// + /// ```swift + /// socket.emitWithAck("myEvent", 1).timingOut(after: 1) {data in + /// ... + /// } + /// ``` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. May be left out. + /// - returns: An `OnAckCallback`. You must call the `timingOut(after:)` method before the event will be sent. + public func emitWithAck(_ event: String, _ items: SocketData...) -> OnAckCallback { + do { + return emitWithAck(event, with: try items.map({ try $0.socketRepresentation() })) + } catch { + DefaultSocketLogger.Logger.error("Error creating socketRepresentation for emit: \(event), \(items)", + type: "SocketIOClient") + + socket.handleClientEvent(.error, data: [event, items, error]) + + return OnAckCallback(ackNumber: -1, items: [], socket: socket) + } + } + + /// Same as emitWithAck, but for Objective-C + /// + /// **NOTE**: It is up to the server send an ack back, just calling this method does not mean the server will ack. + /// Check that your server's api will ack the event being sent. + /// + /// Example: + /// + /// ```swift + /// socket.emitWithAck("myEvent", with: [1]).timingOut(after: 1) {data in + /// ... + /// } + /// ``` + /// + /// - parameter event: The event to send. + /// - parameter items: The items to send with this event. Use `[]` to send nothing. + /// - returns: An `OnAckCallback`. You must call the `timingOut(after:)` method before the event will be sent. + @objc + public func emitWithAck(_ event: String, with items: [Any]) -> OnAckCallback { + return socket.createOnAck([event] + items, binary: false) + } +} + +/// Class that gives a backwards compatible way to cause an emit not to recursively check for Data objects. +/// +/// Usage: +/// +/// ```swift +/// ack.rawEmitView.with(myObject) +/// ``` +public final class SocketRawAckView : NSObject { + private unowned let socket: SocketIOClient + private let ackNum: Int + + init(socket: SocketIOClient, ackNum: Int) { + self.socket = socket + self.ackNum = ackNum + } + + /// Call to ack receiving this event. + /// + /// If an error occurs trying to transform `items` into their socket representation, a `SocketClientEvent.error` + /// will be emitted. The structure of the error data is `[ackNum, items, theError]` + /// + /// - parameter items: A variable number of items to send when acking. + public func with(_ items: SocketData...) { + guard ackNum != -1 else { return } + + do { + socket.emit(try items.map({ try $0.socketRepresentation() }), ack: ackNum, binary: false, isAck: true) + } catch { + socket.handleClientEvent(.error, data: [ackNum, items, error]) + } + } + + /// Call to ack receiving this event. + /// + /// - parameter items: An array of items to send when acking. Use `[]` to send nothing. + @objc + public func with(_ items: [Any]) { + guard ackNum != -1 else { return } + + socket.emit(items, ack: ackNum, binary: false, isAck: true) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngine.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngine.swift new file mode 100644 index 0000000..738bf30 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngine.swift @@ -0,0 +1,688 @@ +// +// SocketEngine.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 3/3/15. +// +// 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. + +import Dispatch +import Foundation +import Starscream + +/// The class that handles the engine.io protocol and transports. +/// See `SocketEnginePollable` and `SocketEngineWebsocket` for transport specific methods. +open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, SocketEngineWebsocket, ConfigSettable { + // MARK: Properties + + private static let logType = "SocketEngine" + + /// The queue that all engine actions take place on. + public let engineQueue = DispatchQueue(label: "com.socketio.engineHandleQueue") + + /// The connect parameters sent during a connect. + public var connectParams: [String: Any]? { + didSet { + (urlPolling, urlWebSocket) = createURLs() + } + } + + /// A dictionary of extra http headers that will be set during connection. + public var extraHeaders: [String: String]? + + /// A queue of engine.io messages waiting for POSTing + /// + /// **You should not touch this directly** + public var postWait = [String]() + + /// `true` if there is an outstanding poll. Trying to poll before the first is done will cause socket.io to + /// disconnect us. + /// + /// **Do not touch this directly** + public var waitingForPoll = false + + /// `true` if there is an outstanding post. Trying to post before the first is done will cause socket.io to + /// disconnect us. + /// + /// **Do not touch this directly** + public var waitingForPost = false + + /// `true` if this engine is closed. + public private(set) var closed = false + + /// If `true` the engine will attempt to use WebSocket compression. + public private(set) var compress = false + + /// `true` if this engine is connected. Connected means that the initial poll connect has succeeded. + public private(set) var connected = false + + /// An array of HTTPCookies that are sent during the connection. + public private(set) var cookies: [HTTPCookie]? + + /// When `true`, the engine is in the process of switching to WebSockets. + /// + /// **Do not touch this directly** + public private(set) var fastUpgrade = false + + /// When `true`, the engine will only use HTTP long-polling as a transport. + public private(set) var forcePolling = false + + /// When `true`, the engine will only use WebSockets as a transport. + public private(set) var forceWebsockets = false + + /// `true` If engine's session has been invalidated. + public private(set) var invalidated = false + + /// If `true`, the engine is currently in HTTP long-polling mode. + public private(set) var polling = true + + /// If `true`, the engine is currently seeing whether it can upgrade to WebSockets. + public private(set) var probing = false + + /// The URLSession that will be used for polling. + public private(set) var session: URLSession? + + /// The session id for this engine. + public private(set) var sid = "" + + /// The path to engine.io. + public private(set) var socketPath = "/engine.io/" + + /// The url for polling. + public private(set) var urlPolling = URL(string: "http://localhost/")! + + /// The url for WebSockets. + public private(set) var urlWebSocket = URL(string: "http://localhost/")! + + /// If `true`, then the engine is currently in WebSockets mode. + @available(*, deprecated, message: "No longer needed, if we're not polling, then we must be doing websockets") + public private(set) var websocket = false + + /// The WebSocket for this engine. + public private(set) var ws: WebSocket? + + /// The client for this engine. + public weak var client: SocketEngineClient? + + private weak var sessionDelegate: URLSessionDelegate? + + private let url: URL + + private var pingInterval: Int? + private var pingTimeout = 0 { + didSet { + pongsMissedMax = Int(pingTimeout / (pingInterval ?? 25000)) + } + } + + private var pongsMissed = 0 + private var pongsMissedMax = 0 + private var probeWait = ProbeWaitQueue() + private var secure = false + private var security: SocketIO.SSLSecurity? + private var selfSigned = false + + // MARK: Initializers + + /// Creates a new engine. + /// + /// - parameter client: The client for this engine. + /// - parameter url: The url for this engine. + /// - parameter config: An array of configuration options for this engine. + public init(client: SocketEngineClient, url: URL, config: SocketIOClientConfiguration) { + self.client = client + self.url = url + + super.init() + + setConfigs(config) + + sessionDelegate = sessionDelegate ?? self + + (urlPolling, urlWebSocket) = createURLs() + } + + /// Creates a new engine. + /// + /// - parameter client: The client for this engine. + /// - parameter url: The url for this engine. + /// - parameter options: The options for this engine. + public required convenience init(client: SocketEngineClient, url: URL, options: [String: Any]?) { + self.init(client: client, url: url, config: options?.toSocketConfiguration() ?? []) + } + + deinit { + DefaultSocketLogger.Logger.log("Engine is being released", type: SocketEngine.logType) + closed = true + stopPolling() + } + + // MARK: Methods + + private func checkAndHandleEngineError(_ msg: String) { + do { + let dict = try msg.toDictionary() + guard let error = dict["message"] as? String else { return } + + /* + 0: Unknown transport + 1: Unknown sid + 2: Bad handshake request + 3: Bad request + */ + didError(reason: error) + } catch { + client?.engineDidError(reason: "Got unknown error from server \(msg)") + } + } + + private func handleBase64(message: String) { + // binary in base64 string + let noPrefix = String(message[message.index(message.startIndex, offsetBy: 2).. (URL, URL) { + if client == nil { + return (URL(string: "http://localhost/")!, URL(string: "http://localhost/")!) + } + + var urlPolling = URLComponents(string: url.absoluteString)! + var urlWebSocket = URLComponents(string: url.absoluteString)! + var queryString = "" + + urlWebSocket.path = socketPath + urlPolling.path = socketPath + + if secure { + urlPolling.scheme = "https" + urlWebSocket.scheme = "wss" + } else { + urlPolling.scheme = "http" + urlWebSocket.scheme = "ws" + } + + if let connectParams = self.connectParams { + for (key, value) in connectParams { + let keyEsc = key.urlEncode()! + let valueEsc = "\(value)".urlEncode()! + + queryString += "&\(keyEsc)=\(valueEsc)" + } + } + + urlWebSocket.percentEncodedQuery = "transport=websocket" + queryString + urlPolling.percentEncodedQuery = "transport=polling&b64=1" + queryString + + return (urlPolling.url!, urlWebSocket.url!) + } + + private func createWebSocketAndConnect() { + var req = URLRequest(url: urlWebSocketWithSid) + + addHeaders(to: &req, includingCookies: session?.configuration.httpCookieStorage?.cookies) + + ws = WebSocket(request: req) + ws?.callbackQueue = engineQueue + ws?.enableCompression = compress + ws?.disableSSLCertValidation = selfSigned + ws?.security = security?.security + + ws?.onConnect = {[weak self] in + guard let this = self else { return } + + this.websocketDidConnect() + } + + ws?.onDisconnect = {[weak self] error in + guard let this = self else { return } + + this.websocketDidDisconnect(error: error) + } + + ws?.onData = {[weak self] data in + guard let this = self else { return } + + this.parseEngineData(data) + } + + ws?.onText = {[weak self] message in + guard let this = self else { return } + + this.parseEngineMessage(message) + } + + ws?.connect() + } + + /// Called when an error happens during execution. Causes a disconnection. + open func didError(reason: String) { + DefaultSocketLogger.Logger.error("\(reason)", type: SocketEngine.logType) + client?.engineDidError(reason: reason) + disconnect(reason: reason) + } + + /// Disconnects from the server. + /// + /// - parameter reason: The reason for the disconnection. This is communicated up to the client. + open func disconnect(reason: String) { + engineQueue.async { + self._disconnect(reason: reason) + } + } + + private func _disconnect(reason: String) { + guard connected && !closed else { return closeOutEngine(reason: reason) } + + DefaultSocketLogger.Logger.log("Engine is being closed.", type: SocketEngine.logType) + + if polling { + disconnectPolling(reason: reason) + } else { + sendWebSocketMessage("", withType: .close, withData: []) + closeOutEngine(reason: reason) + } + } + + // We need to take special care when we're polling that we send it ASAP + // Also make sure we're on the emitQueue since we're touching postWait + private func disconnectPolling(reason: String) { + postWait.append(String(SocketEnginePacketType.close.rawValue)) + + doRequest(for: createRequestForPostWithPostWait()) {_, _, _ in } + closeOutEngine(reason: reason) + } + + /// Called to switch from HTTP long-polling to WebSockets. After calling this method the engine will be in + /// WebSocket mode. + /// + /// **You shouldn't call this directly** + open func doFastUpgrade() { + if waitingForPoll { + DefaultSocketLogger.Logger.error("Outstanding poll when switched to WebSockets," + + "we'll probably disconnect soon. You should report this.", type: SocketEngine.logType) + } + + DefaultSocketLogger.Logger.log("Switching to WebSockets", type: SocketEngine.logType) + + sendWebSocketMessage("", withType: .upgrade, withData: []) + polling = false + fastUpgrade = false + probing = false + flushProbeWait() + + // Need to flush postWait to socket since it connected successfully + // moved from flushProbeWait() since it is also called on connected failure, and we don't want to try and send + // packets through WebSockets when WebSockets has failed! + if !postWait.isEmpty { + flushWaitingForPostToWebSocket() + } + } + + private func flushProbeWait() { + DefaultSocketLogger.Logger.log("Flushing probe wait", type: SocketEngine.logType) + + for waiter in probeWait { + write(waiter.msg, withType: waiter.type, withData: waiter.data) + } + + probeWait.removeAll(keepingCapacity: false) + } + + /// Causes any packets that were waiting for POSTing to be sent through the WebSocket. This happens because when + /// the engine is attempting to upgrade to WebSocket it does not do any POSTing. + /// + /// **You shouldn't call this directly** + open func flushWaitingForPostToWebSocket() { + guard let ws = self.ws else { return } + + for msg in postWait { + ws.write(string: msg) + } + + postWait.removeAll(keepingCapacity: false) + } + + private func handleClose(_ reason: String) { + client?.engineDidClose(reason: reason) + } + + private func handleMessage(_ message: String) { + client?.parseEngineMessage(message) + } + + private func handleNOOP() { + doPoll() + } + + private func handleOpen(openData: String) { + guard let json = try? openData.toDictionary() else { + didError(reason: "Error parsing open packet") + + return + } + + guard let sid = json["sid"] as? String else { + didError(reason: "Open packet contained no sid") + + return + } + + let upgradeWs: Bool + + self.sid = sid + connected = true + pongsMissed = 0 + + if let upgrades = json["upgrades"] as? [String] { + upgradeWs = upgrades.contains("websocket") + } else { + upgradeWs = false + } + + if let pingInterval = json["pingInterval"] as? Int, let pingTimeout = json["pingTimeout"] as? Int { + self.pingInterval = pingInterval + self.pingTimeout = pingTimeout + } + + if !forcePolling && !forceWebsockets && upgradeWs { + createWebSocketAndConnect() + } + + sendPing() + + if !forceWebsockets { + doPoll() + } + + client?.engineDidOpen(reason: "Connect") + } + + private func handlePong(with message: String) { + pongsMissed = 0 + + // We should upgrade + if message == "3probe" { + DefaultSocketLogger.Logger.log("Received probe response, should upgrade to WebSockets", + type: SocketEngine.logType) + + upgradeTransport() + } + + client?.engineDidReceivePong() + } + + /// Parses raw binary received from engine.io. + /// + /// - parameter data: The data to parse. + open func parseEngineData(_ data: Data) { + DefaultSocketLogger.Logger.log("Got binary data: \(data)", type: SocketEngine.logType) + + client?.parseEngineBinaryData(data.subdata(in: 1.. pongsMissedMax { + client?.engineDidClose(reason: "Ping timeout") + + return + } + + pongsMissed += 1 + write("", withType: .ping, withData: []) + + engineQueue.asyncAfter(deadline: DispatchTime.now() + .milliseconds(pingInterval)) {[weak self, id = self.sid] in + // Make sure not to ping old connections + guard let this = self, this.sid == id else { return } + + this.sendPing() + } + + client?.engineDidSendPing() + } + + /// Called when the engine should set/update its configs from a given configuration. + /// + /// parameter config: The `SocketIOClientConfiguration` that should be used to set/update configs. + open func setConfigs(_ config: SocketIOClientConfiguration) { + for option in config { + switch option { + case let .connectParams(params): + connectParams = params + case let .cookies(cookies): + self.cookies = cookies + case let .extraHeaders(headers): + extraHeaders = headers + case let .sessionDelegate(delegate): + sessionDelegate = delegate + case let .forcePolling(force): + forcePolling = force + case let .forceWebsockets(force): + forceWebsockets = force + case let .path(path): + socketPath = path + + if !socketPath.hasSuffix("/") { + socketPath += "/" + } + case let .secure(secure): + self.secure = secure + case let .selfSigned(selfSigned): + self.selfSigned = selfSigned + case let .security(security): + self.security = security + case .compress: + self.compress = true + default: + continue + } + } + } + + // Moves from long-polling to websockets + private func upgradeTransport() { + if ws?.isConnected ?? false { + DefaultSocketLogger.Logger.log("Upgrading transport to WebSockets", type: SocketEngine.logType) + + fastUpgrade = true + sendPollMessage("", withType: .noop, withData: []) + // After this point, we should not send anymore polling messages + } + } + + /// Writes a message to engine.io, independent of transport. + /// + /// - parameter msg: The message to send. + /// - parameter type: The type of this message. + /// - parameter data: Any data that this message has. + open func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [Data]) { + engineQueue.async { + guard self.connected else { return } + guard !self.probing else { + self.probeWait.append((msg, type, data)) + + return + } + + if self.polling { + DefaultSocketLogger.Logger.log("Writing poll: \(msg) has data: \(data.count != 0)", + type: SocketEngine.logType) + self.sendPollMessage(msg, withType: type, withData: data) + } else { + DefaultSocketLogger.Logger.log("Writing ws: \(msg) has data: \(data.count != 0)", + type: SocketEngine.logType) + self.sendWebSocketMessage(msg, withType: type, withData: data) + } + } + } + + // WebSocket Methods + + private func websocketDidConnect() { + if !forceWebsockets { + probing = true + probeWebSocket() + } else { + connected = true + probing = false + polling = false + } + } + + private func websocketDidDisconnect(error: Error?) { + probing = false + + if closed { + client?.engineDidClose(reason: "Disconnect") + + return + } + + guard !polling else { + flushProbeWait() + + return + } + + connected = false + polling = true + + if let reason = error?.localizedDescription { + didError(reason: reason) + } else { + client?.engineDidClose(reason: "Socket Disconnected") + } + } + + // Test Properties + + func setConnected(_ value: Bool) { + connected = value + } +} + +extension SocketEngine { + // MARK: URLSessionDelegate methods + + /// Delegate called when the session becomes invalid. + public func URLSession(session: URLSession, didBecomeInvalidWithError error: NSError?) { + DefaultSocketLogger.Logger.error("Engine URLSession became invalid", type: "SocketEngine") + + didError(reason: "Engine URLSession became invalid") + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineClient.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineClient.swift new file mode 100644 index 0000000..eefc2ac --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineClient.swift @@ -0,0 +1,62 @@ +// +// SocketEngineClient.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 3/19/15. +// +// 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. +// + +import Foundation + +/// Declares that a type will be a delegate to an engine. +@objc public protocol SocketEngineClient { + // MARK: Methods + + /// Called when the engine errors. + /// + /// - parameter reason: The reason the engine errored. + func engineDidError(reason: String) + + /// Called when the engine closes. + /// + /// - parameter reason: The reason that the engine closed. + func engineDidClose(reason: String) + + /// Called when the engine opens. + /// + /// - parameter reason: The reason the engine opened. + func engineDidOpen(reason: String) + + /// Called when the engine receives a pong message. + func engineDidReceivePong() + + /// Called when the engine sends a ping to the server. + func engineDidSendPing() + + /// Called when the engine has a message that must be parsed. + /// + /// - parameter msg: The message that needs parsing. + func parseEngineMessage(_ msg: String) + + /// Called when the engine receives binary data. + /// + /// - parameter data: The data the engine received. + func parseEngineBinaryData(_ data: Data) +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEnginePacketType.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEnginePacketType.swift new file mode 100644 index 0000000..b420ff2 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEnginePacketType.swift @@ -0,0 +1,50 @@ +// +// SocketEnginePacketType.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 10/7/15. +// +// 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. +// + +import Foundation + +/// Represents the type of engine.io packet types. +@objc public enum SocketEnginePacketType : Int { + /// Open message. + case open + + /// Close message. + case close + + /// Ping message. + case ping + + /// Pong message. + case pong + + /// Regular message. + case message + + /// Upgrade message. + case upgrade + + /// NOOP. + case noop +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEnginePollable.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEnginePollable.swift new file mode 100644 index 0000000..faec93a --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEnginePollable.swift @@ -0,0 +1,234 @@ +// +// SocketEnginePollable.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 1/15/16. +// +// 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. + +import Foundation + +/// Protocol that is used to implement socket.io polling support +public protocol SocketEnginePollable : SocketEngineSpec { + // MARK: Properties + + /// `true` If engine's session has been invalidated. + var invalidated: Bool { get } + + /// A queue of engine.io messages waiting for POSTing + /// + /// **You should not touch this directly** + var postWait: [String] { get set } + + /// The URLSession that will be used for polling. + var session: URLSession? { get } + + /// `true` if there is an outstanding poll. Trying to poll before the first is done will cause socket.io to + /// disconnect us. + /// + /// **Do not touch this directly** + var waitingForPoll: Bool { get set } + + /// `true` if there is an outstanding post. Trying to post before the first is done will cause socket.io to + /// disconnect us. + /// + /// **Do not touch this directly** + var waitingForPost: Bool { get set } + + // MARK: Methods + + /// Call to send a long-polling request. + /// + /// You shouldn't need to call this directly, the engine should automatically maintain a long-poll request. + func doPoll() + + /// Sends an engine.io message through the polling transport. + /// + /// You shouldn't call this directly, instead call the `write` method on `SocketEngine`. + /// + /// - parameter message: The message to send. + /// - parameter withType: The type of message to send. + /// - parameter withData: The data associated with this message. + func sendPollMessage(_ message: String, withType type: SocketEnginePacketType, withData datas: [Data]) + + /// Call to stop polling and invalidate the URLSession. + func stopPolling() +} + +// Default polling methods +extension SocketEnginePollable { + func createRequestForPostWithPostWait() -> URLRequest { + defer { postWait.removeAll(keepingCapacity: true) } + + var postStr = "" + + for packet in postWait { + postStr += "\(packet.utf16.count):\(packet)" + } + + DefaultSocketLogger.Logger.log("Created POST string: \(postStr)", type: "SocketEnginePolling") + + var req = URLRequest(url: urlPollingWithSid) + let postData = postStr.data(using: .utf8, allowLossyConversion: false)! + + addHeaders(to: &req) + + req.httpMethod = "POST" + req.setValue("text/plain; charset=UTF-8", forHTTPHeaderField: "Content-Type") + req.httpBody = postData + req.setValue(String(postData.count), forHTTPHeaderField: "Content-Length") + + return req + } + + /// Call to send a long-polling request. + /// + /// You shouldn't need to call this directly, the engine should automatically maintain a long-poll request. + public func doPoll() { + guard polling && !waitingForPoll && connected && !closed else { return } + + var req = URLRequest(url: urlPollingWithSid) + addHeaders(to: &req) + + doLongPoll(for: req) + } + + func doRequest(for req: URLRequest, callbackWith callback: @escaping (Data?, URLResponse?, Error?) -> ()) { + guard polling && !closed && !invalidated && !fastUpgrade else { return } + + DefaultSocketLogger.Logger.log("Doing polling \(req.httpMethod ?? "") \(req)", type: "SocketEnginePolling") + + session?.dataTask(with: req, completionHandler: callback).resume() + } + + func doLongPoll(for req: URLRequest) { + waitingForPoll = true + + doRequest(for: req) {[weak self] data, res, err in + guard let this = self, this.polling else { return } + + if err != nil || data == nil { + DefaultSocketLogger.Logger.error(err?.localizedDescription ?? "Error", type: "SocketEnginePolling") + + if this.polling { + this.didError(reason: err?.localizedDescription ?? "Error") + } + + return + } + + DefaultSocketLogger.Logger.log("Got polling response", type: "SocketEnginePolling") + + if let str = String(data: data!, encoding: .utf8) { + this.parsePollingMessage(str) + } + + this.waitingForPoll = false + + if this.fastUpgrade { + this.doFastUpgrade() + } else if !this.closed && this.polling { + this.doPoll() + } + } + } + + private func flushWaitingForPost() { + guard postWait.count != 0 && connected else { return } + guard polling else { + flushWaitingForPostToWebSocket() + + return + } + + let req = createRequestForPostWithPostWait() + + waitingForPost = true + + DefaultSocketLogger.Logger.log("POSTing", type: "SocketEnginePolling") + + doRequest(for: req) {[weak self] data, res, err in + guard let this = self else { return } + + if err != nil { + DefaultSocketLogger.Logger.error(err?.localizedDescription ?? "Error", type: "SocketEnginePolling") + + if this.polling { + this.didError(reason: err?.localizedDescription ?? "Error") + } + + return + } + + this.waitingForPost = false + + if !this.fastUpgrade { + this.flushWaitingForPost() + this.doPoll() + } + } + } + + func parsePollingMessage(_ str: String) { + guard str.count != 1 else { return } + + DefaultSocketLogger.Logger.log("Got poll message: \(str)", type: "SocketEnginePolling") + + var reader = SocketStringReader(message: str) + + while reader.hasNext { + if let n = Int(reader.readUntilOccurence(of: ":")) { + parseEngineMessage(reader.read(count: n)) + } else { + parseEngineMessage(str) + break + } + } + } + + /// Sends an engine.io message through the polling transport. + /// + /// You shouldn't call this directly, instead call the `write` method on `SocketEngine`. + /// + /// - parameter message: The message to send. + /// - parameter withType: The type of message to send. + /// - parameter withData: The data associated with this message. + public func sendPollMessage(_ message: String, withType type: SocketEnginePacketType, withData datas: [Data]) { + DefaultSocketLogger.Logger.log("Sending poll: \(message) as type: \(type.rawValue)", type: "SocketEnginePolling") + + postWait.append(String(type.rawValue) + message) + + for data in datas { + if case let .right(bin) = createBinaryDataForSend(using: data) { + postWait.append(bin) + } + } + + if !waitingForPost { + flushWaitingForPost() + } + } + + /// Call to stop polling and invalidate the URLSession. + public func stopPolling() { + waitingForPoll = false + waitingForPost = false + session?.finishTasksAndInvalidate() + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineSpec.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineSpec.swift new file mode 100644 index 0000000..4078535 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineSpec.swift @@ -0,0 +1,185 @@ +// +// SocketEngineSpec.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 10/7/15. +// +// 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. +// + +import Foundation +import Starscream + +/// Specifies a SocketEngine. +@objc public protocol SocketEngineSpec { + // MARK: Properties + + /// The client for this engine. + var client: SocketEngineClient? { get set } + + /// `true` if this engine is closed. + var closed: Bool { get } + + /// If `true` the engine will attempt to use WebSocket compression. + var compress: Bool { get } + + /// `true` if this engine is connected. Connected means that the initial poll connect has succeeded. + var connected: Bool { get } + + /// The connect parameters sent during a connect. + var connectParams: [String: Any]? { get set } + + /// An array of HTTPCookies that are sent during the connection. + var cookies: [HTTPCookie]? { get } + + /// The queue that all engine actions take place on. + var engineQueue: DispatchQueue { get } + + /// A dictionary of extra http headers that will be set during connection. + var extraHeaders: [String: String]? { get set } + + /// When `true`, the engine is in the process of switching to WebSockets. + var fastUpgrade: Bool { get } + + /// When `true`, the engine will only use HTTP long-polling as a transport. + var forcePolling: Bool { get } + + /// When `true`, the engine will only use WebSockets as a transport. + var forceWebsockets: Bool { get } + + /// If `true`, the engine is currently in HTTP long-polling mode. + var polling: Bool { get } + + /// If `true`, the engine is currently seeing whether it can upgrade to WebSockets. + var probing: Bool { get } + + /// The session id for this engine. + var sid: String { get } + + /// The path to engine.io. + var socketPath: String { get } + + /// The url for polling. + var urlPolling: URL { get } + + /// The url for WebSockets. + var urlWebSocket: URL { get } + + /// If `true`, then the engine is currently in WebSockets mode. + @available(*, deprecated, message: "No longer needed, if we're not polling, then we must be doing websockets") + var websocket: Bool { get } + + /// The WebSocket for this engine. + var ws: WebSocket? { get } + + // MARK: Initializers + + /// Creates a new engine. + /// + /// - parameter client: The client for this engine. + /// - parameter url: The url for this engine. + /// - parameter options: The options for this engine. + init(client: SocketEngineClient, url: URL, options: [String: Any]?) + + // MARK: Methods + + /// Starts the connection to the server. + func connect() + + /// Called when an error happens during execution. Causes a disconnection. + func didError(reason: String) + + /// Disconnects from the server. + /// + /// - parameter reason: The reason for the disconnection. This is communicated up to the client. + func disconnect(reason: String) + + /// Called to switch from HTTP long-polling to WebSockets. After calling this method the engine will be in + /// WebSocket mode. + /// + /// **You shouldn't call this directly** + func doFastUpgrade() + + /// Causes any packets that were waiting for POSTing to be sent through the WebSocket. This happens because when + /// the engine is attempting to upgrade to WebSocket it does not do any POSTing. + /// + /// **You shouldn't call this directly** + func flushWaitingForPostToWebSocket() + + /// Parses raw binary received from engine.io. + /// + /// - parameter data: The data to parse. + func parseEngineData(_ data: Data) + + /// Parses a raw engine.io packet. + /// + /// - parameter message: The message to parse. + func parseEngineMessage(_ message: String) + + /// Writes a message to engine.io, independent of transport. + /// + /// - parameter msg: The message to send. + /// - parameter type: The type of this message. + /// - parameter data: Any data that this message has. + func write(_ msg: String, withType type: SocketEnginePacketType, withData data: [Data]) +} + +extension SocketEngineSpec { + var urlPollingWithSid: URL { + var com = URLComponents(url: urlPolling, resolvingAgainstBaseURL: false)! + com.percentEncodedQuery = com.percentEncodedQuery! + "&sid=\(sid.urlEncode()!)" + + return com.url! + } + + var urlWebSocketWithSid: URL { + var com = URLComponents(url: urlWebSocket, resolvingAgainstBaseURL: false)! + com.percentEncodedQuery = com.percentEncodedQuery! + (sid == "" ? "" : "&sid=\(sid.urlEncode()!)") + + return com.url! + } + + func addHeaders(to req: inout URLRequest, includingCookies additionalCookies: [HTTPCookie]? = nil) { + var cookiesToAdd: [HTTPCookie] = cookies ?? [] + cookiesToAdd += additionalCookies ?? [] + + if !cookiesToAdd.isEmpty { + req.allHTTPHeaderFields = HTTPCookie.requestHeaderFields(with: cookiesToAdd) + } + + if let extraHeaders = extraHeaders { + for (headerName, value) in extraHeaders { + req.setValue(value, forHTTPHeaderField: headerName) + } + } + } + + func createBinaryDataForSend(using data: Data) -> Either { + if polling { + return .right("b4" + data.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0))) + } else { + return .left(Data(bytes: [0x4]) + data) + } + } + + /// Send an engine message (4) + func send(_ msg: String, withData datas: [Data]) { + write(msg, withType: .message, withData: datas) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineWebsocket.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineWebsocket.swift new file mode 100644 index 0000000..6dc11ac --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Engine/SocketEngineWebsocket.swift @@ -0,0 +1,69 @@ +// +// SocketEngineWebsocket.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 1/15/16. +// +// 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. +// + +import Foundation +import Starscream + +/// Protocol that is used to implement socket.io WebSocket support +public protocol SocketEngineWebsocket : SocketEngineSpec { + // MARK: Methods + + /// Sends an engine.io message through the WebSocket transport. + /// + /// You shouldn't call this directly, instead call the `write` method on `SocketEngine`. + /// + /// - parameter message: The message to send. + /// - parameter withType: The type of message to send. + /// - parameter withData: The data associated with this message. + func sendWebSocketMessage(_ str: String, withType type: SocketEnginePacketType, withData datas: [Data]) +} + +// WebSocket methods +extension SocketEngineWebsocket { + func probeWebSocket() { + if ws?.isConnected ?? false { + sendWebSocketMessage("probe", withType: .ping, withData: []) + } + } + + /// Sends an engine.io message through the WebSocket transport. + /// + /// You shouldn't call this directly, instead call the `write` method on `SocketEngine`. + /// + /// - parameter message: The message to send. + /// - parameter withType: The type of message to send. + /// - parameter withData: The data associated with this message. + public func sendWebSocketMessage(_ str: String, withType type: SocketEnginePacketType, withData datas: [Data]) { + DefaultSocketLogger.Logger.log("Sending ws: \(str) as type: \(type.rawValue)", type: "SocketEngineWebSocket") + + ws?.write(string: "\(type.rawValue)\(str)") + + for data in datas { + if case let .left(bin) = createBinaryDataForSend(using: data) { + ws?.write(data: bin) + } + } + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Manager/SocketManager.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Manager/SocketManager.swift new file mode 100644 index 0000000..126aec1 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Manager/SocketManager.swift @@ -0,0 +1,539 @@ +// +// Created by Erik Little on 10/14/17. +// +// 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. + +import Dispatch +import Foundation + +/// +/// A manager for a socket.io connection. +/// +/// A `SocketManager` is responsible for multiplexing multiple namespaces through a single `SocketEngineSpec`. +/// +/// Example: +/// +/// ```swift +/// let manager = SocketManager(socketURL: URL(string:"http://localhost:8080/")!) +/// let defaultNamespaceSocket = manager.defaultSocket +/// let swiftSocket = manager.socket(forNamespace: "/swift") +/// +/// // defaultNamespaceSocket and swiftSocket both share a single connection to the server +/// ``` +/// +/// Sockets created through the manager are retained by the manager. So at the very least, a single strong reference +/// to the manager must be maintained to keep sockets alive. +/// +/// To disconnect a socket and remove it from the manager, either call `SocketIOClient.disconnect()` on the socket, +/// or call one of the `disconnectSocket` methods on this class. +/// +/// **NOTE**: The manager is not thread/queue safe, all interaction with the manager should be done on the `handleQueue` +/// +open class SocketManager : NSObject, SocketManagerSpec, SocketParsable, SocketDataBufferable, ConfigSettable { + private static let logType = "SocketManager" + + // MARK: Properties + + /// The socket associated with the default namespace ("/"). + public var defaultSocket: SocketIOClient { + return socket(forNamespace: "/") + } + + /// The URL of the socket.io server. + /// + /// If changed after calling `init`, `forceNew` must be set to `true`, or it will only connect to the url set in the + /// init. + public let socketURL: URL + + /// The configuration for this client. + /// + /// **Some configs will not take affect until after a reconnect if set after calling a connect method**. + public var config: SocketIOClientConfiguration { + get { + return _config + } + + set { + if status.active { + DefaultSocketLogger.Logger.log("Setting configs on active manager. Some configs may not be applied until reconnect", + type: SocketManager.logType) + } + + setConfigs(newValue) + } + } + + /// The engine for this manager. + public var engine: SocketEngineSpec? + + /// If `true` then every time `connect` is called, a new engine will be created. + public var forceNew = false + + /// The queue that all interaction with the client should occur on. This is the queue that event handlers are + /// called on. + /// + /// **This should be a serial queue! Concurrent queues are not supported and might cause crashes and races**. + public var handleQueue = DispatchQueue.main + + /// The sockets in this manager indexed by namespace. + public var nsps = [String: SocketIOClient]() + + /// If `true`, this client will try and reconnect on any disconnects. + public var reconnects = true + + /// The number of seconds to wait before attempting to reconnect. + public var reconnectWait = 10 + + /// The status of this manager. + public private(set) var status: SocketIOStatus = .notConnected { + didSet { + switch status { + case .connected: + reconnecting = false + currentReconnectAttempt = 0 + default: + break + } + } + } + + /// A list of packets that are waiting for binary data. + /// + /// The way that socket.io works all data should be sent directly after each packet. + /// So this should ideally be an array of one packet waiting for data. + /// + /// **This should not be modified directly.** + public var waitingPackets = [SocketPacket]() + + private(set) var reconnectAttempts = -1 + + private var _config: SocketIOClientConfiguration + private var currentReconnectAttempt = 0 + private var reconnecting = false + + // MARK: Initializers + + /// Type safe way to create a new SocketIOClient. `opts` can be omitted. + /// + /// - parameter socketURL: The url of the socket.io server. + /// - parameter config: The config for this socket. + public init(socketURL: URL, config: SocketIOClientConfiguration = []) { + self._config = config + self.socketURL = socketURL + + if socketURL.absoluteString.hasPrefix("https://") { + self._config.insert(.secure(true)) + } + + super.init() + + setConfigs(_config) + } + + /// Not so type safe way to create a SocketIOClient, meant for Objective-C compatiblity. + /// If using Swift it's recommended to use `init(socketURL: NSURL, options: Set)` + /// + /// - parameter socketURL: The url of the socket.io server. + /// - parameter config: The config for this socket. + @objc + public convenience init(socketURL: URL, config: [String: Any]?) { + self.init(socketURL: socketURL, config: config?.toSocketConfiguration() ?? []) + } + + deinit { + DefaultSocketLogger.Logger.log("Manager is being released", type: SocketManager.logType) + + engine?.disconnect(reason: "Manager Deinit") + } + + // MARK: Methods + + private func addEngine() { + DefaultSocketLogger.Logger.log("Adding engine", type: SocketManager.logType) + + engine?.engineQueue.sync { + self.engine?.client = nil + + // Close old engine so it will not leak because of URLSession if in polling mode + self.engine?.disconnect(reason: "Adding new engine") + } + + engine = SocketEngine(client: self, url: socketURL, config: config) + } + + /// Connects the underlying transport and the default namespace socket. + /// + /// Override if you wish to attach a custom `SocketEngineSpec`. + open func connect() { + guard !status.active else { + DefaultSocketLogger.Logger.log("Tried connecting an already active socket", type: SocketManager.logType) + + return + } + + if engine == nil || forceNew { + addEngine() + } + + status = .connecting + + engine?.connect() + } + + /// Connects a socket through this manager's engine. + /// + /// - parameter socket: The socket who we should connect through this manager. + open func connectSocket(_ socket: SocketIOClient) { + guard status == .connected else { + DefaultSocketLogger.Logger.log("Tried connecting socket when engine isn't open. Connecting", + type: SocketManager.logType) + + connect() + return + } + + engine?.send("0\(socket.nsp),", withData: []) + } + + /// Called when the manager has disconnected from socket.io. + /// + /// - parameter reason: The reason for the disconnection. + open func didDisconnect(reason: String) { + forAll {socket in + socket.didDisconnect(reason: reason) + } + } + + /// Disconnects the manager and all associated sockets. + open func disconnect() { + DefaultSocketLogger.Logger.log("Manager closing", type: SocketManager.logType) + + status = .disconnected + + engine?.disconnect(reason: "Disconnect") + } + + /// Disconnects the given socket. + /// + /// This will remove the socket for the manager's control, and make the socket instance useless and ready for + /// releasing. + /// + /// - parameter socket: The socket to disconnect. + open func disconnectSocket(_ socket: SocketIOClient) { + engine?.send("1\(socket.nsp),", withData: []) + + socket.didDisconnect(reason: "Namespace leave") + } + + /// Disconnects the socket associated with `forNamespace`. + /// + /// This will remove the socket for the manager's control, and make the socket instance useless and ready for + /// releasing. + /// + /// - parameter nsp: The namespace to disconnect from. + open func disconnectSocket(forNamespace nsp: String) { + guard let socket = nsps.removeValue(forKey: nsp) else { + DefaultSocketLogger.Logger.log("Could not find socket for \(nsp) to disconnect", + type: SocketManager.logType) + + return + } + + disconnectSocket(socket) + } + + /// Sends a client event to all sockets in `nsps` + /// + /// - parameter clientEvent: The event to emit. + open func emitAll(clientEvent event: SocketClientEvent, data: [Any]) { + forAll {socket in + socket.handleClientEvent(event, data: data) + } + } + + /// Sends an event to the server on all namespaces in this manager. + /// + /// - parameter event: The event to send. + /// - parameter items: The data to send with this event. + open func emitAll(_ event: String, _ items: SocketData...) { + guard let emitData = try? items.map({ try $0.socketRepresentation() }) else { + DefaultSocketLogger.Logger.error("Error creating socketRepresentation for emit: \(event), \(items)", + type: SocketManager.logType) + + return + } + + emitAll(event, withItems: emitData) + } + + /// Sends an event to the server on all namespaces in this manager. + /// + /// Same as `emitAll(_:_:)`, but meant for Objective-C. + /// + /// - parameter event: The event to send. + /// - parameter items: The data to send with this event. + open func emitAll(_ event: String, withItems items: [Any]) { + forAll {socket in + socket.emit(event, with: items) + } + } + + /// Called when the engine closes. + /// + /// - parameter reason: The reason that the engine closed. + open func engineDidClose(reason: String) { + handleQueue.async { + self._engineDidClose(reason: reason) + } + } + + private func _engineDidClose(reason: String) { + waitingPackets.removeAll() + + if status != .disconnected { + status = .notConnected + } + + if status == .disconnected || !reconnects { + didDisconnect(reason: reason) + } else if !reconnecting { + reconnecting = true + tryReconnect(reason: reason) + } + } + + /// Called when the engine errors. + /// + /// - parameter reason: The reason the engine errored. + open func engineDidError(reason: String) { + handleQueue.async { + self._engineDidError(reason: reason) + } + } + + private func _engineDidError(reason: String) { + DefaultSocketLogger.Logger.error("\(reason)", type: SocketManager.logType) + + emitAll(clientEvent: .error, data: [reason]) + } + + /// Called when the engine opens. + /// + /// - parameter reason: The reason the engine opened. + open func engineDidOpen(reason: String) { + handleQueue.async { + self._engineDidOpen(reason: reason) + } + } + + private func _engineDidOpen(reason: String) { + DefaultSocketLogger.Logger.log("Engine opened \(reason)", type: SocketManager.logType) + + status = .connected + nsps["/"]?.didConnect(toNamespace: "/") + + for (nsp, socket) in nsps where nsp != "/" && socket.status == .connecting { + connectSocket(socket) + } + } + + /// Called when the engine receives a pong message. + open func engineDidReceivePong() { + handleQueue.async { + self._engineDidReceivePong() + } + } + + private func _engineDidReceivePong() { + emitAll(clientEvent: .pong, data: []) + } + + /// Called when the sends a ping to the server. + open func engineDidSendPing() { + handleQueue.async { + self._engineDidSendPing() + } + } + + private func _engineDidSendPing() { + emitAll(clientEvent: .ping, data: []) + } + + private func forAll(do: (SocketIOClient) throws -> ()) rethrows { + for (_, socket) in nsps { + try `do`(socket) + } + } + + /// Called when the engine has a message that must be parsed. + /// + /// - parameter msg: The message that needs parsing. + open func parseEngineMessage(_ msg: String) { + handleQueue.async { + self._parseEngineMessage(msg) + } + } + + private func _parseEngineMessage(_ msg: String) { + guard let packet = parseSocketMessage(msg) else { return } + guard !packet.type.isBinary else { + waitingPackets.append(packet) + + return + } + + nsps[packet.nsp]?.handlePacket(packet) + } + + /// Called when the engine receives binary data. + /// + /// - parameter data: The data the engine received. + open func parseEngineBinaryData(_ data: Data) { + handleQueue.async { + self._parseEngineBinaryData(data) + } + } + + private func _parseEngineBinaryData(_ data: Data) { + guard let packet = parseBinaryData(data) else { return } + + nsps[packet.nsp]?.handlePacket(packet) + } + + /// Tries to reconnect to the server. + /// + /// This will cause a `SocketClientEvent.reconnect` event to be emitted, as well as + /// `SocketClientEvent.reconnectAttempt` events. + open func reconnect() { + guard !reconnecting else { return } + + engine?.disconnect(reason: "manual reconnect") + } + + /// Removes the socket from the manager's control. One of the disconnect methods should be called before calling this + /// method. + /// + /// After calling this method the socket should no longer be considered usable. + /// + /// - parameter socket: The socket to remove. + /// - returns: The socket removed, if it was owned by the manager. + @discardableResult + open func removeSocket(_ socket: SocketIOClient) -> SocketIOClient? { + return nsps.removeValue(forKey: socket.nsp) + } + + private func tryReconnect(reason: String) { + guard reconnecting else { return } + + DefaultSocketLogger.Logger.log("Starting reconnect", type: SocketManager.logType) + + // Set status to connecting and emit reconnect for all sockets + forAll {socket in + guard socket.status == .connected else { return } + + socket.setReconnecting(reason: reason) + } + + _tryReconnect() + } + + private func _tryReconnect() { + guard reconnects && reconnecting && status != .disconnected else { return } + + if reconnectAttempts != -1 && currentReconnectAttempt + 1 > reconnectAttempts { + return didDisconnect(reason: "Reconnect Failed") + } + + DefaultSocketLogger.Logger.log("Trying to reconnect", type: SocketManager.logType) + emitAll(clientEvent: .reconnectAttempt, data: [(reconnectAttempts - currentReconnectAttempt)]) + + currentReconnectAttempt += 1 + connect() + + handleQueue.asyncAfter(deadline: DispatchTime.now() + Double(reconnectWait), execute: _tryReconnect) + } + + /// Sets manager specific configs. + /// + /// parameter config: The configs that should be set. + open func setConfigs(_ config: SocketIOClientConfiguration) { + for option in config { + switch option { + case let .forceNew(new): + self.forceNew = new + case let .handleQueue(queue): + self.handleQueue = queue + case let .reconnects(reconnects): + self.reconnects = reconnects + case let .reconnectAttempts(attempts): + self.reconnectAttempts = attempts + case let .reconnectWait(wait): + reconnectWait = abs(wait) + case let .log(log): + DefaultSocketLogger.Logger.log = log + case let .logger(logger): + DefaultSocketLogger.Logger = logger + default: + continue + } + } + + _config = config + _config.insert(.path("/socket.io/"), replacing: false) + + // If `ConfigSettable` & `SocketEngineSpec`, update its configs. + if var settableEngine = engine as? ConfigSettable & SocketEngineSpec { + settableEngine.engineQueue.sync { + settableEngine.setConfigs(self._config) + } + + engine = settableEngine + } + } + + /// Returns a `SocketIOClient` for the given namespace. This socket shares a transport with the manager. + /// + /// Calling multiple times returns the same socket. + /// + /// Sockets created from this method are retained by the manager. + /// Call one of the `disconnectSocket` methods on this class to remove the socket from manager control. + /// Or call `SocketIOClient.disconnect()` on the client. + /// + /// - parameter nsp: The namespace for the socket. + /// - returns: A `SocketIOClient` for the given namespace. + open func socket(forNamespace nsp: String) -> SocketIOClient { + assert(nsp.hasPrefix("/"), "forNamespace must have a leading /") + + if let socket = nsps[nsp] { + return socket + } + + let client = SocketIOClient(manager: self, nsp: nsp) + + nsps[nsp] = client + + return client + } + + // Test properties + + func setTestStatus(_ status: SocketIOStatus) { + self.status = status + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Manager/SocketManagerSpec.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Manager/SocketManagerSpec.swift new file mode 100644 index 0000000..4440193 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Manager/SocketManagerSpec.swift @@ -0,0 +1,139 @@ +// +// Created by Erik Little on 10/18/17. +// +// 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. + +import Dispatch +import Foundation + +// TODO Fix the types so that we aren't using concrete types + +/// +/// A manager for a socket.io connection. +/// +/// A `SocketManagerSpec` is responsible for multiplexing multiple namespaces through a single `SocketEngineSpec`. +/// +/// Example with `SocketManager`: +/// +/// ```swift +/// let manager = SocketManager(socketURL: URL(string:"http://localhost:8080/")!) +/// let defaultNamespaceSocket = manager.defaultSocket +/// let swiftSocket = manager.socket(forNamespace: "/swift") +/// +/// // defaultNamespaceSocket and swiftSocket both share a single connection to the server +/// ``` +/// +/// Sockets created through the manager are retained by the manager. So at the very least, a single strong reference +/// to the manager must be maintained to keep sockets alive. +/// +/// To disconnect a socket and remove it from the manager, either call `SocketIOClient.disconnect()` on the socket, +/// or call one of the `disconnectSocket` methods on this class. +/// +@objc +public protocol SocketManagerSpec : AnyObject, SocketEngineClient { + // MARK: Properties + + /// Returns the socket associated with the default namespace ("/"). + var defaultSocket: SocketIOClient { get } + + /// The engine for this manager. + var engine: SocketEngineSpec? { get set } + + /// If `true` then every time `connect` is called, a new engine will be created. + var forceNew: Bool { get set } + + // TODO Per socket queues? + /// The queue that all interaction with the client should occur on. This is the queue that event handlers are + /// called on. + var handleQueue: DispatchQueue { get set } + + /// The sockets in this manager indexed by namespace. + var nsps: [String: SocketIOClient] { get set } + + /// If `true`, this manager will try and reconnect on any disconnects. + var reconnects: Bool { get set } + + /// The number of seconds to wait before attempting to reconnect. + var reconnectWait: Int { get set } + + /// The URL of the socket.io server. + var socketURL: URL { get } + + /// The status of this manager. + var status: SocketIOStatus { get } + + // MARK: Methods + + /// Connects the underlying transport. + func connect() + + /// Connects a socket through this manager's engine. + /// + /// - parameter socket: The socket who we should connect through this manager. + func connectSocket(_ socket: SocketIOClient) + + /// Called when the manager has disconnected from socket.io. + /// + /// - parameter reason: The reason for the disconnection. + func didDisconnect(reason: String) + + /// Disconnects the manager and all associated sockets. + func disconnect() + + /// Disconnects the given socket. + /// + /// - parameter socket: The socket to disconnect. + func disconnectSocket(_ socket: SocketIOClient) + + /// Disconnects the socket associated with `forNamespace`. + /// + /// - parameter nsp: The namespace to disconnect from. + func disconnectSocket(forNamespace nsp: String) + + /// Sends an event to the server on all namespaces in this manager. + /// + /// - parameter event: The event to send. + /// - parameter items: The data to send with this event. + func emitAll(_ event: String, withItems items: [Any]) + + /// Tries to reconnect to the server. + /// + /// This will cause a `disconnect` event to be emitted, as well as an `reconnectAttempt` event. + func reconnect() + + /// Removes the socket from the manager's control. + /// After calling this method the socket should no longer be considered usable. + /// + /// - parameter socket: The socket to remove. + /// - returns: The socket removed, if it was owned by the manager. + @discardableResult + func removeSocket(_ socket: SocketIOClient) -> SocketIOClient? + + /// Returns a `SocketIOClient` for the given namespace. This socket shares a transport with the manager. + /// + /// Calling multiple times returns the same socket. + /// + /// Sockets created from this method are retained by the manager. + /// Call one of the `disconnectSocket` methods on the implementing class to remove the socket from manager control. + /// Or call `SocketIOClient.disconnect()` on the client. + /// + /// - parameter nsp: The namespace for the socket. + /// - returns: A `SocketIOClient` for the given namespace. + func socket(forNamespace nsp: String) -> SocketIOClient +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Parse/SocketPacket.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Parse/SocketPacket.swift new file mode 100644 index 0000000..e715d04 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Parse/SocketPacket.swift @@ -0,0 +1,250 @@ +// +// SocketPacket.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 1/18/15. +// +// 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. +// + +import Foundation + +/// A struct that represents a socket.io packet. +public struct SocketPacket : CustomStringConvertible { + // MARK: Properties + + private static let logType = "SocketPacket" + + /// The namespace for this packet. + public let nsp: String + + /// If > 0 then this packet is using acking. + public let id: Int + + /// The type of this packet. + public let type: PacketType + + /// An array of binary data for this packet. + public internal(set) var binary: [Data] + + /// The data for this event. + /// + /// Note: This includes all data inside of the socket.io packet payload array, which includes the event name for + /// event type packets. + public internal(set) var data: [Any] + + /// Returns the payload for this packet, minus the event name if this is an event or binaryEvent type packet. + public var args: [Any] { + if type == .event || type == .binaryEvent && data.count != 0 { + return Array(data.dropFirst()) + } else { + return data + } + } + + private let placeholders: Int + + /// A string representation of this packet. + public var description: String { + return "SocketPacket {type: \(String(type.rawValue)); data: " + + "\(String(describing: data)); id: \(id); placeholders: \(placeholders); nsp: \(nsp)}" + } + + /// The event name for this packet. + public var event: String { + return String(describing: data[0]) + } + + /// A string representation of this packet. + public var packetString: String { + return createPacketString() + } + + init(type: PacketType, data: [Any] = [Any](), id: Int = -1, nsp: String, placeholders: Int = 0, + binary: [Data] = [Data]()) { + self.data = data + self.id = id + self.nsp = nsp + self.type = type + self.placeholders = placeholders + self.binary = binary + } + + mutating func addData(_ data: Data) -> Bool { + if placeholders == binary.count { + return true + } + + binary.append(data) + + if placeholders == binary.count { + fillInPlaceholders() + return true + } else { + return false + } + } + + private func completeMessage(_ message: String) -> String { + guard data.count != 0 else { return message + "[]" } + guard let jsonSend = try? data.toJSON(), let jsonString = String(data: jsonSend, encoding: .utf8) else { + DefaultSocketLogger.Logger.error("Error creating JSON object in SocketPacket.completeMessage", + type: SocketPacket.logType) + + return message + "[]" + } + + return message + jsonString + } + + private func createPacketString() -> String { + let typeString = String(type.rawValue) + // Binary count? + let binaryCountString = typeString + (type.isBinary ? "\(String(binary.count))-" : "") + // Namespace? + let nspString = binaryCountString + (nsp != "/" ? "\(nsp)," : "") + // Ack number? + let idString = nspString + (id != -1 ? String(id) : "") + + return completeMessage(idString) + } + + // Called when we have all the binary data for a packet + // calls _fillInPlaceholders, which replaces placeholders with the + // corresponding binary + private mutating func fillInPlaceholders() { + data = data.map(_fillInPlaceholders) + } + + // Helper method that looks for placeholders + // If object is a collection it will recurse + // Returns the object if it is not a placeholder or the corresponding + // binary data + private func _fillInPlaceholders(_ object: Any) -> Any { + switch object { + case let dict as JSON: + if dict["_placeholder"] as? Bool ?? false { + return binary[dict["num"] as! Int] + } else { + return dict.reduce(into: JSON(), {cur, keyValue in + cur[keyValue.0] = _fillInPlaceholders(keyValue.1) + }) + } + case let arr as [Any]: + return arr.map(_fillInPlaceholders) + default: + return object + } + } +} + +public extension SocketPacket { + // MARK: PacketType enum + + /// The type of packets. + public enum PacketType: Int { + // MARK: Cases + + /// Connect: 0 + case connect + + /// Disconnect: 1 + case disconnect + + /// Event: 2 + case event + + /// Ack: 3 + case ack + + /// Error: 4 + case error + + /// Binary Event: 5 + case binaryEvent + + /// Binary Ack: 6 + case binaryAck + + // MARK: Properties + + /// Whether or not this type is binary + public var isBinary: Bool { + return self == .binaryAck || self == .binaryEvent + } + } +} + +extension SocketPacket { + private static func findType(_ binCount: Int, ack: Bool) -> PacketType { + switch binCount { + case 0 where !ack: + return .event + case 0 where ack: + return .ack + case _ where !ack: + return .binaryEvent + case _ where ack: + return .binaryAck + default: + return .error + } + } + + static func packetFromEmit(_ items: [Any], id: Int, nsp: String, ack: Bool, checkForBinary: Bool = true) -> SocketPacket { + if checkForBinary { + let (parsedData, binary) = deconstructData(items) + + return SocketPacket(type: findType(binary.count, ack: ack), data: parsedData, id: id, nsp: nsp, + binary: binary) + } else { + return SocketPacket(type: findType(0, ack: ack), data: items, id: id, nsp: nsp) + } + } +} + +private extension SocketPacket { + // Recursive function that looks for NSData in collections + static func shred(_ data: Any, binary: inout [Data]) -> Any { + let placeholder = ["_placeholder": true, "num": binary.count] as JSON + + switch data { + case let bin as Data: + binary.append(bin) + + return placeholder + case let arr as [Any]: + return arr.map({shred($0, binary: &binary)}) + case let dict as JSON: + return dict.reduce(into: JSON(), {cur, keyValue in + cur[keyValue.0] = shred(keyValue.1, binary: &binary) + }) + default: + return data + } + } + + // Removes binary data from emit data + // Returns a type containing the de-binaryed data and the binary + static func deconstructData(_ data: [Any]) -> ([Any], [Data]) { + var binary = [Data]() + + return (data.map({ shred($0, binary: &binary) }), binary) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Parse/SocketParsable.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Parse/SocketParsable.swift new file mode 100644 index 0000000..1c8b963 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Parse/SocketParsable.swift @@ -0,0 +1,184 @@ +// +// SocketParsable.swift +// Socket.IO-Client-Swift +// +// 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. + +import Foundation + +/// Defines that a type will be able to parse socket.io-protocol messages. +public protocol SocketParsable : AnyObject { + // MARK: Methods + + /// Called when the engine has received some binary data that should be attached to a packet. + /// + /// Packets binary data should be sent directly after the packet that expects it, so there's confusion over + /// where the data should go. Data should be received in the order it is sent, so that the correct data is put + /// into the correct placeholder. + /// + /// - parameter data: The data that should be attached to a packet. + func parseBinaryData(_ data: Data) -> SocketPacket? + + /// Called when the engine has received a string that should be parsed into a socket.io packet. + /// + /// - parameter message: The string that needs parsing. + /// - returns: A completed socket packet if there is no more data left to collect. + func parseSocketMessage(_ message: String) -> SocketPacket? +} + +/// Errors that can be thrown during parsing. +public enum SocketParsableError : Error { + // MARK: Cases + + /// Thrown when a packet received has an invalid data array, or is missing the data array. + case invalidDataArray + + /// Thrown when an malformed packet is received. + case invalidPacket + + /// Thrown when the parser receives an unknown packet type. + case invalidPacketType +} + +/// Says that a type will be able to buffer binary data before all data for an event has come in. +public protocol SocketDataBufferable : AnyObject { + // MARK: Properties + + /// A list of packets that are waiting for binary data. + /// + /// The way that socket.io works all data should be sent directly after each packet. + /// So this should ideally be an array of one packet waiting for data. + /// + /// **This should not be modified directly.** + var waitingPackets: [SocketPacket] { get set } +} + +public extension SocketParsable where Self: SocketManagerSpec & SocketDataBufferable { + /// Parses a message from the engine, returning a complete SocketPacket or throwing. + /// + /// - parameter message: The message to parse. + /// - returns: A completed packet, or throwing. + internal func parseString(_ message: String) throws -> SocketPacket { + var reader = SocketStringReader(message: message) + + guard let type = Int(reader.read(count: 1)).flatMap({ SocketPacket.PacketType(rawValue: $0) }) else { + throw SocketParsableError.invalidPacketType + } + + if !reader.hasNext { + return SocketPacket(type: type, nsp: "/") + } + + var namespace = "/" + var placeholders = -1 + + if type.isBinary { + if let holders = Int(reader.readUntilOccurence(of: "-")) { + placeholders = holders + } else { + throw SocketParsableError.invalidPacket + } + } + + if reader.currentCharacter == "/" { + namespace = reader.readUntilOccurence(of: ",") + } + + if !reader.hasNext { + return SocketPacket(type: type, nsp: namespace, placeholders: placeholders) + } + + var idString = "" + + if type == .error { + reader.advance(by: -1) + } else { + while reader.hasNext { + if let int = Int(reader.read(count: 1)) { + idString += String(int) + } else { + reader.advance(by: -2) + break + } + } + } + + var dataArray = String(message.utf16[message.utf16.index(reader.currentIndex, offsetBy: 1)...])! + + if type == .error && !dataArray.hasPrefix("[") && !dataArray.hasSuffix("]") { + dataArray = "[" + dataArray + "]" + } + + let data = try parseData(dataArray) + + return SocketPacket(type: type, data: data, id: Int(idString) ?? -1, nsp: namespace, placeholders: placeholders) + } + + // Parses data for events + private func parseData(_ data: String) throws -> [Any] { + do { + return try data.toArray() + } catch { + throw SocketParsableError.invalidDataArray + } + } + + /// Called when the engine has received a string that should be parsed into a socket.io packet. + /// + /// - parameter message: The string that needs parsing. + /// - returns: A completed socket packet or nil if the packet is invalid. + public func parseSocketMessage(_ message: String) -> SocketPacket? { + guard !message.isEmpty else { return nil } + + DefaultSocketLogger.Logger.log("Parsing \(message)", type: "SocketParser") + + do { + let packet = try parseString(message) + + DefaultSocketLogger.Logger.log("Decoded packet as: \(packet.description)", type: "SocketParser") + + return packet + } catch { + DefaultSocketLogger.Logger.error("\(error): \(message)", type: "SocketParser") + + return nil + } + } + + /// Called when the engine has received some binary data that should be attached to a packet. + /// + /// Packets binary data should be sent directly after the packet that expects it, so there's confusion over + /// where the data should go. Data should be received in the order it is sent, so that the correct data is put + /// into the correct placeholder. + /// + /// - parameter data: The data that should be attached to a packet. + /// - returns: A completed socket packet if there is no more data left to collect. + public func parseBinaryData(_ data: Data) -> SocketPacket? { + guard !waitingPackets.isEmpty else { + DefaultSocketLogger.Logger.error("Got data when not remaking packet", type: "SocketParser") + + return nil + } + + // Should execute event? + guard waitingPackets[waitingPackets.count - 1].addData(data) else { return nil } + + return waitingPackets.removeLast() + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SSLSecurity.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SSLSecurity.swift new file mode 100644 index 0000000..2035265 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SSLSecurity.swift @@ -0,0 +1,72 @@ +// +// SSLSecurity.swift +// SocketIO-iOS +// +// Created by Lukas Schmidt on 24.09.17. +// +// 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. + +import Foundation +import Starscream + +/// A wrapper around Starscream's SSLSecurity that provides a minimal Objective-C interface. +open class SSLSecurity : NSObject { + // MARK: Properties + + /// The internal Starscream SSLSecurity. + public let security: Starscream.SSLSecurity + + init(security: Starscream.SSLSecurity) { + self.security = security + } + + // MARK: Methods + + /// Creates a new SSLSecurity that specifies whether to use publicKeys or certificates should be used for SSL + /// pinning validation + /// + /// - parameter usePublicKeys: is to specific if the publicKeys or certificates should be used for SSL pinning + /// validation + @objc + public convenience init(usePublicKeys: Bool = true) { + let security = Starscream.SSLSecurity(usePublicKeys: usePublicKeys) + self.init(security: security) + } + + + /// Designated init + /// + /// - parameter certs: is the certificates or public keys to use + /// - parameter usePublicKeys: is to specific if the publicKeys or certificates should be used for SSL pinning + /// validation + /// - returns: a representation security object to be used with + public convenience init(certs: [SSLCert], usePublicKeys: Bool) { + let security = Starscream.SSLSecurity(certs: certs, usePublicKeys: usePublicKeys) + self.init(security: security) + } + + /// Returns whether or not the given trust is valid. + /// + /// - parameter trust: The trust to validate. + /// - parameter domain: The CN domain to validate. + /// - returns: Whether or not this is valid. + public func isValid(_ trust: SecTrust, domain: String?) -> Bool { + return security.isValid(trust, domain: domain) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketExtensions.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketExtensions.swift new file mode 100644 index 0000000..fe9086f --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketExtensions.swift @@ -0,0 +1,124 @@ +// +// SocketExtensions.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 7/1/2016. +// +// 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. + +import Foundation +import Starscream + +enum JSONError : Error { + case notArray + case notNSDictionary +} + +extension Array { + func toJSON() throws -> Data { + return try JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions(rawValue: 0)) + } +} + +extension CharacterSet { + static var allowedURLCharacterSet: CharacterSet { + return CharacterSet(charactersIn: "!*'();:@&=+$,/?%#[]\" {}^").inverted + } +} + +extension Dictionary where Key == String, Value == Any { + private static func keyValueToSocketIOClientOption(key: String, value: Any) -> SocketIOClientOption? { + switch (key, value) { + case let ("connectParams", params as [String: Any]): + return .connectParams(params) + case let ("cookies", cookies as [HTTPCookie]): + return .cookies(cookies) + case let ("extraHeaders", headers as [String: String]): + return .extraHeaders(headers) + case let ("forceNew", force as Bool): + return .forceNew(force) + case let ("forcePolling", force as Bool): + return .forcePolling(force) + case let ("forceWebsockets", force as Bool): + return .forceWebsockets(force) + case let ("handleQueue", queue as DispatchQueue): + return .handleQueue(queue) + case let ("log", log as Bool): + return .log(log) + case let ("logger", logger as SocketLogger): + return .logger(logger) + case let ("path", path as String): + return .path(path) + case let ("reconnects", reconnects as Bool): + return .reconnects(reconnects) + case let ("reconnectAttempts", attempts as Int): + return .reconnectAttempts(attempts) + case let ("reconnectWait", wait as Int): + return .reconnectWait(wait) + case let ("secure", secure as Bool): + return .secure(secure) + case let ("security", security as SSLSecurity): + return .security(security) + case let ("selfSigned", selfSigned as Bool): + return .selfSigned(selfSigned) + case let ("sessionDelegate", delegate as URLSessionDelegate): + return .sessionDelegate(delegate) + case let ("compress", compress as Bool): + return compress ? .compress : nil + default: + return nil + } + } + + func toSocketConfiguration() -> SocketIOClientConfiguration { + var options = [] as SocketIOClientConfiguration + + for (rawKey, value) in self { + if let opt = Dictionary.keyValueToSocketIOClientOption(key: rawKey, value: value) { + options.insert(opt) + } + } + + return options + } +} + +extension String { + func toArray() throws -> [Any] { + guard let stringData = data(using: .utf16, allowLossyConversion: false) else { return [] } + guard let array = try JSONSerialization.jsonObject(with: stringData, options: .mutableContainers) as? [Any] else { + throw JSONError.notArray + } + + return array + } + + func toDictionary() throws -> [String: Any] { + guard let binData = data(using: .utf16, allowLossyConversion: false) else { return [:] } + guard let json = try JSONSerialization.jsonObject(with: binData, options: .allowFragments) as? [String: Any] else { + throw JSONError.notNSDictionary + } + + return json + } + + func urlEncode() -> String? { + return addingPercentEncoding(withAllowedCharacters: .allowedURLCharacterSet) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketLogger.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketLogger.swift new file mode 100644 index 0000000..69293fb --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketLogger.swift @@ -0,0 +1,73 @@ +// +// SocketLogger.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 4/11/15. +// +// 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. + +import Foundation + +/// Represents a class will log client events. +public protocol SocketLogger : AnyObject { + // MARK: Properties + + /// Whether to log or not + var log: Bool { get set } + + // MARK: Methods + + /// Normal log messages + /// + /// - parameter message: The message being logged. Can include `%@` that will be replaced with `args` + /// - parameter type: The type of entity that called for logging. + /// - parameter args: Any args that should be inserted into the message. May be left out. + func log(_ message: @autoclosure () -> String, type: String) + + /// Error Messages + /// + /// - parameter message: The message being logged. Can include `%@` that will be replaced with `args` + /// - parameter type: The type of entity that called for logging. + /// - parameter args: Any args that should be inserted into the message. May be left out. + func error(_ message: @autoclosure () -> String, type: String) +} + +public extension SocketLogger { + /// Default implementation. + func log(_ message: @autoclosure () -> String, type: String) { + abstractLog("LOG", message: message, type: type) + } + + /// Default implementation. + func error(_ message: @autoclosure () -> String, type: String) { + abstractLog("ERROR", message: message, type: type) + } + + private func abstractLog(_ logType: String, message: @autoclosure () -> String, type: String) { + guard log else { return } + + NSLog("\(logType) \(type): %@", message()) + } +} + +class DefaultSocketLogger : SocketLogger { + static var Logger: SocketLogger = DefaultSocketLogger() + + var log = false +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketStringReader.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketStringReader.swift new file mode 100644 index 0000000..0a74344 --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketStringReader.swift @@ -0,0 +1,73 @@ +// +// SocketStringReader.swift +// Socket.IO-Client-Swift +// +// Created by Lukas Schmidt on 07.09.15. +// +// 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. + +struct SocketStringReader { + let message: String + var currentIndex: String.UTF16View.Index + var hasNext: Bool { + return currentIndex != message.utf16.endIndex + } + + var currentCharacter: String { + return String(UnicodeScalar(message.utf16[currentIndex])!) + } + + init(message: String) { + self.message = message + currentIndex = message.utf16.startIndex + } + + @discardableResult + mutating func advance(by: Int) -> String.UTF16View.Index { + currentIndex = message.utf16.index(currentIndex, offsetBy: by) + + return currentIndex + } + + mutating func read(count: Int) -> String { + let readString = String(message.utf16[currentIndex.. String { + let substring = message.utf16[currentIndex...] + + guard let foundIndex = substring.index(of: string.utf16.first!) else { + currentIndex = message.utf16.endIndex + + return String(substring)! + } + + advance(by: substring.distance(from: substring.startIndex, to: foundIndex) + 1) + + return String(substring[substring.startIndex.. String { + return read(count: message.utf16.distance(from: currentIndex, to: message.utf16.endIndex)) + } +} diff --git a/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketTypes.swift b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketTypes.swift new file mode 100644 index 0000000..bbc1b6d --- /dev/null +++ b/Pods/Socket.IO-Client-Swift/Source/SocketIO/Util/SocketTypes.swift @@ -0,0 +1,83 @@ +// +// SocketTypes.swift +// Socket.IO-Client-Swift +// +// Created by Erik Little on 4/8/15. +// +// 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. + +import Foundation + +/// A marking protocol that says a type can be represented in a socket.io packet. +/// +/// Example: +/// +/// ```swift +/// struct CustomData : SocketData { +/// let name: String +/// let age: Int +/// +/// func socketRepresentation() -> SocketData { +/// return ["name": name, "age": age] +/// } +/// } +/// +/// socket.emit("myEvent", CustomData(name: "Erik", age: 24)) +/// ``` +public protocol SocketData { + // MARK: Methods + + /// A representation of self that can sent over socket.io. + func socketRepresentation() throws -> SocketData +} + +public extension SocketData { + /// Default implementation. Only works for native Swift types and a few Foundation types. + func socketRepresentation() -> SocketData { + return self + } +} + +extension Array : SocketData { } +extension Bool : SocketData { } +extension Dictionary : SocketData { } +extension Double : SocketData { } +extension Int : SocketData { } +extension NSArray : SocketData { } +extension Data : SocketData { } +extension NSData : SocketData { } +extension NSDictionary : SocketData { } +extension NSString : SocketData { } +extension NSNull : SocketData { } +extension String : SocketData { } + +/// A typealias for an ack callback. +public typealias AckCallback = ([Any]) -> () + +/// A typealias for a normal callback. +public typealias NormalCallback = ([Any], SocketAckEmitter) -> () + +typealias JSON = [String: Any] +typealias Probe = (msg: String, type: SocketEnginePacketType, data: [Data]) +typealias ProbeWaitQueue = [Probe] + +enum Either { + case left(E) + case right(V) +} diff --git a/Pods/Starscream/LICENSE b/Pods/Starscream/LICENSE new file mode 100644 index 0000000..d6ab2f1 --- /dev/null +++ b/Pods/Starscream/LICENSE @@ -0,0 +1,176 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + Copyright (c) 2014-2016 Dalton Cherry. + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. \ No newline at end of file diff --git a/Pods/Starscream/README.md b/Pods/Starscream/README.md new file mode 100644 index 0000000..004fcd5 --- /dev/null +++ b/Pods/Starscream/README.md @@ -0,0 +1,405 @@ +![starscream](https://raw.githubusercontent.com/daltoniam/starscream/assets/starscream.jpg) + +Starscream is a conforming WebSocket ([RFC 6455](http://tools.ietf.org/html/rfc6455)) client library in Swift. + +Its Objective-C counterpart can be found here: [Jetfire](https://github.com/acmacalister/jetfire) + +## Features + +- Conforms to all of the base [Autobahn test suite](http://autobahn.ws/testsuite/). +- Nonblocking. Everything happens in the background, thanks to GCD. +- TLS/WSS support. +- Compression Extensions support ([RFC 7692](https://tools.ietf.org/html/rfc7692)) +- Simple concise codebase at just a few hundred LOC. + +## Example + +First thing is to import the framework. See the Installation instructions on how to add the framework to your project. + +```swift +import Starscream +``` + +Once imported, you can open a connection to your WebSocket server. Note that `socket` is probably best as a property, so it doesn't get deallocated right after being setup. + +```swift +socket = WebSocket(url: URL(string: "ws://localhost:8080/")!) +socket.delegate = self +socket.connect() +``` + +After you are connected, there are some delegate methods that we need to implement. + +### websocketDidConnect + +websocketDidConnect is called as soon as the client connects to the server. + +```swift +func websocketDidConnect(socket: WebSocketClient) { + print("websocket is connected") +} +``` + +### websocketDidDisconnect + +websocketDidDisconnect is called as soon as the client is disconnected from the server. + +```swift +func websocketDidDisconnect(socket: WebSocketClient, error: Error?) { + print("websocket is disconnected: \(error?.localizedDescription)") +} +``` + +### websocketDidReceiveMessage + +websocketDidReceiveMessage is called when the client gets a text frame from the connection. + +```swift +func websocketDidReceiveMessage(socket: WebSocketClient, text: String) { + print("got some text: \(text)") +} +``` + +### websocketDidReceiveData + +websocketDidReceiveData is called when the client gets a binary frame from the connection. + +```swift +func websocketDidReceiveData(socket: WebSocketClient, data: Data) { + print("got some data: \(data.count)") +} +``` + +### Optional: websocketDidReceivePong *(required protocol: WebSocketPongDelegate)* + +websocketDidReceivePong is called when the client gets a pong response from the connection. You need to implement the WebSocketPongDelegate protocol and set an additional delegate, eg: ` socket.pongDelegate = self` + +```swift +func websocketDidReceivePong(socket: WebSocketClient, data: Data?) { + print("Got pong! Maybe some data: \(data?.count)") +} +``` + +Or you can use closures. + +```swift +socket = WebSocket(url: URL(string: "ws://localhost:8080/")!) +//websocketDidConnect +socket.onConnect = { + print("websocket is connected") +} +//websocketDidDisconnect +socket.onDisconnect = { (error: Error?) in + print("websocket is disconnected: \(error?.localizedDescription)") +} +//websocketDidReceiveMessage +socket.onText = { (text: String) in + print("got some text: \(text)") +} +//websocketDidReceiveData +socket.onData = { (data: Data) in + print("got some data: \(data.count)") +} +//you could do onPong as well. +socket.connect() +``` + +One more: you can listen to socket connection and disconnection via notifications. Starscream posts `WebsocketDidConnectNotification` and `WebsocketDidDisconnectNotification`. You can find an `Error` that caused the disconection by accessing `WebsocketDisconnectionErrorKeyName` on notification `userInfo`. + + +## The delegate methods give you a simple way to handle data from the server, but how do you send data? + +### write a binary frame + +The writeData method gives you a simple way to send `Data` (binary) data to the server. + +```swift +socket.write(data: data) //write some Data over the socket! +``` + +### write a string frame + +The writeString method is the same as writeData, but sends text/string. + +```swift +socket.write(string: "Hi Server!") //example on how to write text over the socket! +``` + +### write a ping frame + +The writePing method is the same as write, but sends a ping control frame. + +```swift +socket.write(ping: Data()) //example on how to write a ping control frame over the socket! +``` + +### write a pong frame + + +the writePong method is the same as writePing, but sends a pong control frame. + +```swift +socket.write(pong: Data()) //example on how to write a pong control frame over the socket! +``` + +Starscream will automatically respond to incoming `ping` control frames so you do not need to manually send `pong`s. + +However if for some reason you need to control this prosses you can turn off the automatic `ping` response by disabling `respondToPingWithPong`. + +```swift +socket.respondToPingWithPong = false //Do not automaticaly respond to incoming pings with pongs. +``` + +In most cases you will not need to do this. + +### disconnect + +The disconnect method does what you would expect and closes the socket. + +```swift +socket.disconnect() +``` + +### isConnected + +Returns if the socket is connected or not. + +```swift +if socket.isConnected { + // do cool stuff. +} +``` + +### Custom Headers + +You can also override the default websocket headers with your own custom ones like so: + +```swift +var request = URLRequest(url: URL(string: "ws://localhost:8080/")!) +request.timeoutInterval = 5 +request.setValue("someother protocols", forHTTPHeaderField: "Sec-WebSocket-Protocol") +request.setValue("14", forHTTPHeaderField: "Sec-WebSocket-Version") +request.setValue("Everything is Awesome!", forHTTPHeaderField: "My-Awesome-Header") +let socket = WebSocket(request: request) +``` + +### Custom HTTP Method + +Your server may use a different HTTP method when connecting to the websocket: + +```swift +var request = URLRequest(url: URL(string: "ws://localhost:8080/")!) +request.httpMethod = "POST" +request.timeoutInterval = 5 +let socket = WebSocket(request: request) +``` + +### Protocols + +If you need to specify a protocol, simple add it to the init: + +```swift +//chat and superchat are the example protocols here +socket = WebSocket(url: URL(string: "ws://localhost:8080/")!, protocols: ["chat","superchat"]) +socket.delegate = self +socket.connect() +``` + +### Self Signed SSL + +```swift +socket = WebSocket(url: URL(string: "ws://localhost:8080/")!, protocols: ["chat","superchat"]) + +//set this if you want to ignore SSL cert validation, so a self signed SSL certificate can be used. +socket.disableSSLCertValidation = true +``` + +### SSL Pinning + +SSL Pinning is also supported in Starscream. + +```swift +socket = WebSocket(url: URL(string: "ws://localhost:8080/")!, protocols: ["chat","superchat"]) +let data = ... //load your certificate from disk +socket.security = SSLSecurity(certs: [SSLCert(data: data)], usePublicKeys: true) +//socket.security = SSLSecurity() //uses the .cer files in your app's bundle +``` +You load either a `Data` blob of your certificate or you can use a `SecKeyRef` if you have a public key you want to use. The `usePublicKeys` bool is whether to use the certificates for validation or the public keys. The public keys will be extracted from the certificates automatically if `usePublicKeys` is choosen. + +### SSL Cipher Suites + +To use an SSL encrypted connection, you need to tell Starscream about the cipher suites your server supports. + +```swift +socket = WebSocket(url: URL(string: "wss://localhost:8080/")!, protocols: ["chat","superchat"]) + +// Set enabled cipher suites to AES 256 and AES 128 +socket.enabledSSLCipherSuites = [TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256] +``` + +If you don't know which cipher suites are supported by your server, you can try pointing [SSL Labs](https://www.ssllabs.com/ssltest/) at it and checking the results. + +### Compression Extensions + +Compression Extensions ([RFC 7692](https://tools.ietf.org/html/rfc7692)) is supported in Starscream. Compression is enabled by default, however compression will only be used if it is supported by the server as well. You may enable or disable compression via the `.enableCompression` property: + +```swift +socket = WebSocket(url: URL(string: "ws://localhost:8080/")!) +socket.enableCompression = false +``` + +Compression should be disabled if your application is transmitting already-compressed, random, or other uncompressable data. + +### Custom Queue + +A custom queue can be specified when delegate methods are called. By default `DispatchQueue.main` is used, thus making all delegate methods calls run on the main thread. It is important to note that all WebSocket processing is done on a background thread, only the delegate method calls are changed when modifying the queue. The actual processing is always on a background thread and will not pause your app. + +```swift +socket = WebSocket(url: URL(string: "ws://localhost:8080/")!, protocols: ["chat","superchat"]) +//create a custom queue +socket.callbackQueue = DispatchQueue(label: "com.vluxe.starscream.myapp") +``` + +## Example Project + +Check out the SimpleTest project in the examples directory to see how to setup a simple connection to a WebSocket server. + +## Requirements + +Starscream works with iOS 7/OSX 10.9 or above. It is recommended to use iOS 8/10.10 or above for CocoaPods/framework support. To use Starscream with a project targeting iOS 7, you must include all Swift files directly in your project. + +## Installation + +### CocoaPods + +Check out [Get Started](http://cocoapods.org/) tab on [cocoapods.org](http://cocoapods.org/). + +To use Starscream in your project add the following 'Podfile' to your project + + source 'https://github.com/CocoaPods/Specs.git' + platform :ios, '9.0' + use_frameworks! + + pod 'Starscream', '~> 3.0.2' + +Then run: + + pod install + +### Carthage + +Check out the [Carthage](https://github.com/Carthage/Carthage) docs on how to add a install. The `Starscream` framework is already setup with shared schemes. + +[Carthage Install](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) + +You can install Carthage with [Homebrew](http://brew.sh/) using the following command: + +```bash +$ brew update +$ brew install carthage +``` + +To integrate Starscream into your Xcode project using Carthage, specify it in your `Cartfile`: + +``` +github "daltoniam/Starscream" >= 3.0.2 +``` + +### Rogue + +First see the [installation docs](https://github.com/acmacalister/Rogue) for how to install Rogue. + +To install Starscream run the command below in the directory you created the rogue file. + +``` +rogue add https://github.com/daltoniam/Starscream +``` + +Next open the `libs` folder and add the `Starscream.xcodeproj` to your Xcode project. Once that is complete, in your "Build Phases" add the `Starscream.framework` to your "Link Binary with Libraries" phase. Make sure to add the `libs` folder to your `.gitignore` file. + +### Swift Package Manager + +The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. + +Once you have your Swift package set up, adding Starscream as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. + +```swift +dependencies: [ + .Package(url: "https://github.com/daltoniam/Starscream.git", majorVersion: 3) +] +``` + +### Other + +Simply grab the framework (either via git submodule or another package manager). + +Add the `Starscream.xcodeproj` to your Xcode project. Once that is complete, in your "Build Phases" add the `Starscream.framework` to your "Link Binary with Libraries" phase. + +### Add Copy Frameworks Phase + +If you are running this in an OSX app or on a physical iOS device you will need to make sure you add the `Starscream.framework` to be included in your app bundle. To do this, in Xcode, navigate to the target configuration window by clicking on the blue project icon, and selecting the application target under the "Targets" heading in the sidebar. In the tab bar at the top of that window, open the "Build Phases" panel. Expand the "Link Binary with Libraries" group, and add `Starscream.framework`. Click on the + button at the top left of the panel and select "New Copy Files Phase". Rename this new phase to "Copy Frameworks", set the "Destination" to "Frameworks", and add `Starscream.framework` respectively. + + +## WebSocketAdvancedDelegate +The advanced delegate acts just like the simpler delegate but provides some additional information on the connection and incoming frames. + +```swift +socket.advancedDelegate = self +``` + +In most cases you do not need the extra info and should use the normal delegate. + +#### websocketDidReceiveMessage +```swift +func websocketDidReceiveMessage(socket: WebSocketClient, text: String, response: WebSocket.WSResponse) { + print("got some text: \(text)") + print("First frame for this message arrived on \(response.firstFrame)") +} +``` + +#### websocketDidReceiveData +```swift +func websocketDidReceiveData(socket: WebSocketClient, data: Date, response: WebSocket.WSResponse) { + print("got some data it long: \(data.count)") + print("A total of \(response.frameCount) frames were used to send this data") +} +``` + +#### websocketHttpUpgrade +These methods are called when the HTTP upgrade request is sent and when the response returns. +```swift +func websocketHttpUpgrade(socket: WebSocketClient, request: CFHTTPMessage) { + print("the http request was sent we can check the raw http if we need to") +} +``` + +```swift +func websocketHttpUpgrade(socket: WebSocketClient, response: CFHTTPMessage) { + print("the http response has returned.") +} +``` + +## KNOWN ISSUES +- WatchOS does not have the the CFNetwork String constants to modify the stream's SSL behavior. It will be the default Foundation SSL behavior. This means watchOS CANNOT use `SSLCiphers`, `disableSSLCertValidation`, or SSL pinning. All these values set on watchOS will do nothing. +- Linux does not have the security framework, so it CANNOT use SSL pinning or `SSLCiphers` either. + + +## TODOs + +- [ ] Add Unit Tests - Local WebSocket server that runs against Autobahn + +## License + +Starscream is licensed under the Apache v2 License. + +## Contact + +### Dalton Cherry +* https://github.com/daltoniam +* http://twitter.com/daltoniam +* http://daltoniam.com + +### Austin Cherry ### +* https://github.com/acmacalister +* http://twitter.com/acmacalister +* http://austincherry.me diff --git a/Pods/Starscream/Sources/Compression.swift b/Pods/Starscream/Sources/Compression.swift new file mode 100644 index 0000000..f20ff75 --- /dev/null +++ b/Pods/Starscream/Sources/Compression.swift @@ -0,0 +1,177 @@ +////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Compression.swift +// +// Created by Joseph Ross on 7/16/14. +// Copyright © 2017 Joseph Ross. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +////////////////////////////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Compression implementation is implemented in conformance with RFC 7692 Compression Extensions +// for WebSocket: https://tools.ietf.org/html/rfc7692 +// +////////////////////////////////////////////////////////////////////////////////////////////////// + +import Foundation +import SSCZLib + +class Decompressor { + private var strm = z_stream() + private var buffer = [UInt8](repeating: 0, count: 0x2000) + private var inflateInitialized = false + private let windowBits:Int + + init?(windowBits:Int) { + self.windowBits = windowBits + guard initInflate() else { return nil } + } + + private func initInflate() -> Bool { + if Z_OK == inflateInit2_(&strm, -CInt(windowBits), + ZLIB_VERSION, CInt(MemoryLayout.size)) + { + inflateInitialized = true + return true + } + return false + } + + func reset() throws { + teardownInflate() + guard initInflate() else { throw WSError(type: .compressionError, message: "Error for decompressor on reset", code: 0) } + } + + func decompress(_ data: Data, finish: Bool) throws -> Data { + return try data.withUnsafeBytes { (bytes:UnsafePointer) -> Data in + return try decompress(bytes: bytes, count: data.count, finish: finish) + } + } + + func decompress(bytes: UnsafePointer, count: Int, finish: Bool) throws -> Data { + var decompressed = Data() + try decompress(bytes: bytes, count: count, out: &decompressed) + + if finish { + let tail:[UInt8] = [0x00, 0x00, 0xFF, 0xFF] + try decompress(bytes: tail, count: tail.count, out: &decompressed) + } + + return decompressed + + } + + private func decompress(bytes: UnsafePointer, count: Int, out:inout Data) throws { + var res:CInt = 0 + strm.next_in = UnsafeMutablePointer(mutating: bytes) + strm.avail_in = CUnsignedInt(count) + + repeat { + strm.next_out = UnsafeMutablePointer(&buffer) + strm.avail_out = CUnsignedInt(buffer.count) + + res = inflate(&strm, 0) + + let byteCount = buffer.count - Int(strm.avail_out) + out.append(buffer, count: byteCount) + } while res == Z_OK && strm.avail_out == 0 + + guard (res == Z_OK && strm.avail_out > 0) + || (res == Z_BUF_ERROR && Int(strm.avail_out) == buffer.count) + else { + throw WSError(type: .compressionError, message: "Error on decompressing", code: 0) + } + } + + private func teardownInflate() { + if inflateInitialized, Z_OK == inflateEnd(&strm) { + inflateInitialized = false + } + } + + deinit { + teardownInflate() + } +} + +class Compressor { + private var strm = z_stream() + private var buffer = [UInt8](repeating: 0, count: 0x2000) + private var deflateInitialized = false + private let windowBits:Int + + init?(windowBits: Int) { + self.windowBits = windowBits + guard initDeflate() else { return nil } + } + + private func initDeflate() -> Bool { + if Z_OK == deflateInit2_(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, + -CInt(windowBits), 8, Z_DEFAULT_STRATEGY, + ZLIB_VERSION, CInt(MemoryLayout.size)) + { + deflateInitialized = true + return true + } + return false + } + + func reset() throws { + teardownDeflate() + guard initDeflate() else { throw WSError(type: .compressionError, message: "Error for compressor on reset", code: 0) } + } + + func compress(_ data: Data) throws -> Data { + var compressed = Data() + var res:CInt = 0 + data.withUnsafeBytes { (ptr:UnsafePointer) -> Void in + strm.next_in = UnsafeMutablePointer(mutating: ptr) + strm.avail_in = CUnsignedInt(data.count) + + repeat { + strm.next_out = UnsafeMutablePointer(&buffer) + strm.avail_out = CUnsignedInt(buffer.count) + + res = deflate(&strm, Z_SYNC_FLUSH) + + let byteCount = buffer.count - Int(strm.avail_out) + compressed.append(buffer, count: byteCount) + } + while res == Z_OK && strm.avail_out == 0 + + } + + guard res == Z_OK && strm.avail_out > 0 + || (res == Z_BUF_ERROR && Int(strm.avail_out) == buffer.count) + else { + throw WSError(type: .compressionError, message: "Error on compressing", code: 0) + } + + compressed.removeLast(4) + return compressed + } + + private func teardownDeflate() { + if deflateInitialized, Z_OK == deflateEnd(&strm) { + deflateInitialized = false + } + } + + deinit { + teardownDeflate() + } +} + diff --git a/Pods/Starscream/Sources/SSLSecurity.swift b/Pods/Starscream/Sources/SSLSecurity.swift new file mode 100644 index 0000000..627529c --- /dev/null +++ b/Pods/Starscream/Sources/SSLSecurity.swift @@ -0,0 +1,266 @@ +////////////////////////////////////////////////////////////////////////////////////////////////// +// +// SSLSecurity.swift +// Starscream +// +// Created by Dalton Cherry on 5/16/15. +// Copyright (c) 2014-2016 Dalton Cherry. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +////////////////////////////////////////////////////////////////////////////////////////////////// +#if os(Linux) +#else +import Foundation +import Security + +public protocol SSLTrustValidator { + func isValid(_ trust: SecTrust, domain: String?) -> Bool +} + +open class SSLCert { + var certData: Data? + var key: SecKey? + + /** + Designated init for certificates + + - parameter data: is the binary data of the certificate + + - returns: a representation security object to be used with + */ + public init(data: Data) { + self.certData = data + } + + /** + Designated init for public keys + + - parameter key: is the public key to be used + + - returns: a representation security object to be used with + */ + public init(key: SecKey) { + self.key = key + } +} + +open class SSLSecurity : SSLTrustValidator { + public var validatedDN = true //should the domain name be validated? + public var validateEntireChain = true //should the entire cert chain be validated + + var isReady = false //is the key processing done? + var certificates: [Data]? //the certificates + var pubKeys: [SecKey]? //the public keys + var usePublicKeys = false //use public keys or certificate validation? + + /** + Use certs from main app bundle + + - parameter usePublicKeys: is to specific if the publicKeys or certificates should be used for SSL pinning validation + + - returns: a representation security object to be used with + */ + public convenience init(usePublicKeys: Bool = false) { + let paths = Bundle.main.paths(forResourcesOfType: "cer", inDirectory: ".") + + let certs = paths.reduce([SSLCert]()) { (certs: [SSLCert], path: String) -> [SSLCert] in + var certs = certs + if let data = NSData(contentsOfFile: path) { + certs.append(SSLCert(data: data as Data)) + } + return certs + } + + self.init(certs: certs, usePublicKeys: usePublicKeys) + } + + /** + Designated init + + - parameter certs: is the certificates or public keys to use + - parameter usePublicKeys: is to specific if the publicKeys or certificates should be used for SSL pinning validation + + - returns: a representation security object to be used with + */ + public init(certs: [SSLCert], usePublicKeys: Bool) { + self.usePublicKeys = usePublicKeys + + if self.usePublicKeys { + DispatchQueue.global(qos: .default).async { + let pubKeys = certs.reduce([SecKey]()) { (pubKeys: [SecKey], cert: SSLCert) -> [SecKey] in + var pubKeys = pubKeys + if let data = cert.certData, cert.key == nil { + cert.key = self.extractPublicKey(data) + } + if let key = cert.key { + pubKeys.append(key) + } + return pubKeys + } + + self.pubKeys = pubKeys + self.isReady = true + } + } else { + let certificates = certs.reduce([Data]()) { (certificates: [Data], cert: SSLCert) -> [Data] in + var certificates = certificates + if let data = cert.certData { + certificates.append(data) + } + return certificates + } + self.certificates = certificates + self.isReady = true + } + } + + /** + Valid the trust and domain name. + + - parameter trust: is the serverTrust to validate + - parameter domain: is the CN domain to validate + + - returns: if the key was successfully validated + */ + public func isValid(_ trust: SecTrust, domain: String?) -> Bool { + + var tries = 0 + while !self.isReady { + usleep(1000) + tries += 1 + if tries > 5 { + return false //doesn't appear it is going to ever be ready... + } + } + var policy: SecPolicy + if self.validatedDN { + policy = SecPolicyCreateSSL(true, domain as NSString?) + } else { + policy = SecPolicyCreateBasicX509() + } + SecTrustSetPolicies(trust,policy) + if self.usePublicKeys { + if let keys = self.pubKeys { + let serverPubKeys = publicKeyChain(trust) + for serverKey in serverPubKeys as [AnyObject] { + for key in keys as [AnyObject] { + if serverKey.isEqual(key) { + return true + } + } + } + } + } else if let certs = self.certificates { + let serverCerts = certificateChain(trust) + var collect = [SecCertificate]() + for cert in certs { + collect.append(SecCertificateCreateWithData(nil,cert as CFData)!) + } + SecTrustSetAnchorCertificates(trust,collect as NSArray) + var result: SecTrustResultType = .unspecified + SecTrustEvaluate(trust,&result) + if result == .unspecified || result == .proceed { + if !validateEntireChain { + return true + } + var trustedCount = 0 + for serverCert in serverCerts { + for cert in certs { + if cert == serverCert { + trustedCount += 1 + break + } + } + } + if trustedCount == serverCerts.count { + return true + } + } + } + return false + } + + /** + Get the public key from a certificate data + + - parameter data: is the certificate to pull the public key from + + - returns: a public key + */ + func extractPublicKey(_ data: Data) -> SecKey? { + guard let cert = SecCertificateCreateWithData(nil, data as CFData) else { return nil } + + return extractPublicKey(cert, policy: SecPolicyCreateBasicX509()) + } + + /** + Get the public key from a certificate + + - parameter data: is the certificate to pull the public key from + + - returns: a public key + */ + func extractPublicKey(_ cert: SecCertificate, policy: SecPolicy) -> SecKey? { + var possibleTrust: SecTrust? + SecTrustCreateWithCertificates(cert, policy, &possibleTrust) + + guard let trust = possibleTrust else { return nil } + var result: SecTrustResultType = .unspecified + SecTrustEvaluate(trust, &result) + return SecTrustCopyPublicKey(trust) + } + + /** + Get the certificate chain for the trust + + - parameter trust: is the trust to lookup the certificate chain for + + - returns: the certificate chain for the trust + */ + func certificateChain(_ trust: SecTrust) -> [Data] { + let certificates = (0.. [Data] in + var certificates = certificates + let cert = SecTrustGetCertificateAtIndex(trust, index) + certificates.append(SecCertificateCopyData(cert!) as Data) + return certificates + } + + return certificates + } + + /** + Get the public key chain for the trust + + - parameter trust: is the trust to lookup the certificate chain and extract the public keys + + - returns: the public keys from the certifcate chain for the trust + */ + func publicKeyChain(_ trust: SecTrust) -> [SecKey] { + let policy = SecPolicyCreateBasicX509() + let keys = (0.. [SecKey] in + var keys = keys + let cert = SecTrustGetCertificateAtIndex(trust, index) + if let key = extractPublicKey(cert!, policy: policy) { + keys.append(key) + } + + return keys + } + + return keys + } + + +} +#endif diff --git a/Pods/Starscream/Sources/WebSocket.swift b/Pods/Starscream/Sources/WebSocket.swift new file mode 100644 index 0000000..cdae507 --- /dev/null +++ b/Pods/Starscream/Sources/WebSocket.swift @@ -0,0 +1,1342 @@ +////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Websocket.swift +// +// Created by Dalton Cherry on 7/16/14. +// Copyright (c) 2014-2017 Dalton Cherry. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +////////////////////////////////////////////////////////////////////////////////////////////////// + +import Foundation +import CoreFoundation +import SSCommonCrypto + +public let WebsocketDidConnectNotification = "WebsocketDidConnectNotification" +public let WebsocketDidDisconnectNotification = "WebsocketDidDisconnectNotification" +public let WebsocketDisconnectionErrorKeyName = "WebsocketDisconnectionErrorKeyName" + +//Standard WebSocket close codes +public enum CloseCode : UInt16 { + case normal = 1000 + case goingAway = 1001 + case protocolError = 1002 + case protocolUnhandledType = 1003 + // 1004 reserved. + case noStatusReceived = 1005 + //1006 reserved. + case encoding = 1007 + case policyViolated = 1008 + case messageTooBig = 1009 +} + +public enum ErrorType: Error { + case outputStreamWriteError //output stream error during write + case compressionError + case invalidSSLError //Invalid SSL certificate + case writeTimeoutError //The socket timed out waiting to be ready to write + case protocolError //There was an error parsing the WebSocket frames + case upgradeError //There was an error during the HTTP upgrade + case closeError //There was an error during the close (socket probably has been dereferenced) +} + +public struct WSError: Error { + public let type: ErrorType + public let message: String + public let code: Int +} + +//WebSocketClient is setup to be dependency injection for testing +public protocol WebSocketClient: class { + var delegate: WebSocketDelegate? {get set} + var disableSSLCertValidation: Bool {get set} + var overrideTrustHostname: Bool {get set} + var desiredTrustHostname: String? {get set} + #if os(Linux) + #else + var security: SSLTrustValidator? {get set} + var enabledSSLCipherSuites: [SSLCipherSuite]? {get set} + #endif + var isConnected: Bool {get} + + func connect() + func disconnect(forceTimeout: TimeInterval?, closeCode: UInt16) + func write(string: String, completion: (() -> ())?) + func write(data: Data, completion: (() -> ())?) + func write(ping: Data, completion: (() -> ())?) + func write(pong: Data, completion: (() -> ())?) +} + +//implements some of the base behaviors +extension WebSocketClient { + public func write(string: String) { + write(string: string, completion: nil) + } + + public func write(data: Data) { + write(data: data, completion: nil) + } + + public func write(ping: Data) { + write(ping: ping, completion: nil) + } + + public func write(pong: Data) { + write(pong: pong, completion: nil) + } + + public func disconnect() { + disconnect(forceTimeout: nil, closeCode: CloseCode.normal.rawValue) + } +} + +//SSL settings for the stream +public struct SSLSettings { + public let useSSL: Bool + public let disableCertValidation: Bool + public var overrideTrustHostname: Bool + public var desiredTrustHostname: String? + #if os(Linux) + #else + public let cipherSuites: [SSLCipherSuite]? + #endif +} + +public protocol WSStreamDelegate: class { + func newBytesInStream() + func streamDidError(error: Error?) +} + +//This protocol is to allow custom implemention of the underlining stream. This way custom socket libraries (e.g. linux) can be used +public protocol WSStream { + var delegate: WSStreamDelegate? {get set} + func connect(url: URL, port: Int, timeout: TimeInterval, ssl: SSLSettings, completion: @escaping ((Error?) -> Void)) + func write(data: Data) -> Int + func read() -> Data? + func cleanup() + #if os(Linux) || os(watchOS) + #else + func sslTrust() -> (trust: SecTrust?, domain: String?) + #endif +} + +open class FoundationStream : NSObject, WSStream, StreamDelegate { + private static let sharedWorkQueue = DispatchQueue(label: "com.vluxe.starscream.websocket", attributes: []) + private var inputStream: InputStream? + private var outputStream: OutputStream? + public weak var delegate: WSStreamDelegate? + let BUFFER_MAX = 4096 + + public var enableSOCKSProxy = false + + public func connect(url: URL, port: Int, timeout: TimeInterval, ssl: SSLSettings, completion: @escaping ((Error?) -> Void)) { + var readStream: Unmanaged? + var writeStream: Unmanaged? + let h = url.host! as NSString + CFStreamCreatePairWithSocketToHost(nil, h, UInt32(port), &readStream, &writeStream) + inputStream = readStream!.takeRetainedValue() + outputStream = writeStream!.takeRetainedValue() + + #if os(watchOS) //watchOS us unfortunately is missing the kCFStream properties to make this work + #else + if enableSOCKSProxy { + let proxyDict = CFNetworkCopySystemProxySettings() + let socksConfig = CFDictionaryCreateMutableCopy(nil, 0, proxyDict!.takeRetainedValue()) + let propertyKey = CFStreamPropertyKey(rawValue: kCFStreamPropertySOCKSProxy) + CFWriteStreamSetProperty(outputStream, propertyKey, socksConfig) + CFReadStreamSetProperty(inputStream, propertyKey, socksConfig) + } + #endif + + guard let inStream = inputStream, let outStream = outputStream else { return } + inStream.delegate = self + outStream.delegate = self + if ssl.useSSL { + inStream.setProperty(StreamSocketSecurityLevel.negotiatedSSL as AnyObject, forKey: Stream.PropertyKey.socketSecurityLevelKey) + outStream.setProperty(StreamSocketSecurityLevel.negotiatedSSL as AnyObject, forKey: Stream.PropertyKey.socketSecurityLevelKey) + #if os(watchOS) //watchOS us unfortunately is missing the kCFStream properties to make this work + #else + var settings = [NSObject: NSObject]() + if ssl.disableCertValidation { + settings[kCFStreamSSLValidatesCertificateChain] = NSNumber(value: false) + } + if ssl.overrideTrustHostname { + if let hostname = ssl.desiredTrustHostname { + settings[kCFStreamSSLPeerName] = hostname as NSString + } else { + settings[kCFStreamSSLPeerName] = kCFNull + } + } + inStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as Stream.PropertyKey) + outStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as Stream.PropertyKey) + #endif + + #if os(Linux) + #else + if let cipherSuites = ssl.cipherSuites { + #if os(watchOS) //watchOS us unfortunately is missing the kCFStream properties to make this work + #else + if let sslContextIn = CFReadStreamCopyProperty(inputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext?, + let sslContextOut = CFWriteStreamCopyProperty(outputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext? { + let resIn = SSLSetEnabledCiphers(sslContextIn, cipherSuites, cipherSuites.count) + let resOut = SSLSetEnabledCiphers(sslContextOut, cipherSuites, cipherSuites.count) + if resIn != errSecSuccess { + completion(WSError(type: .invalidSSLError, message: "Error setting ingoing cypher suites", code: Int(resIn))) + } + if resOut != errSecSuccess { + completion(WSError(type: .invalidSSLError, message: "Error setting outgoing cypher suites", code: Int(resOut))) + } + } + #endif + } + #endif + } + + CFReadStreamSetDispatchQueue(inStream, FoundationStream.sharedWorkQueue) + CFWriteStreamSetDispatchQueue(outStream, FoundationStream.sharedWorkQueue) + inStream.open() + outStream.open() + + var out = timeout// wait X seconds before giving up + FoundationStream.sharedWorkQueue.async { [weak self] in + while !outStream.hasSpaceAvailable { + usleep(100) // wait until the socket is ready + out -= 100 + if out < 0 { + completion(WSError(type: .writeTimeoutError, message: "Timed out waiting for the socket to be ready for a write", code: 0)) + return + } else if let error = outStream.streamError { + completion(error) + return // disconnectStream will be called. + } else if self == nil { + completion(WSError(type: .closeError, message: "socket object has been dereferenced", code: 0)) + return + } + } + completion(nil) //success! + } + } + + public func write(data: Data) -> Int { + guard let outStream = outputStream else {return -1} + let buffer = UnsafeRawPointer((data as NSData).bytes).assumingMemoryBound(to: UInt8.self) + return outStream.write(buffer, maxLength: data.count) + } + + public func read() -> Data? { + guard let stream = inputStream else {return nil} + let buf = NSMutableData(capacity: BUFFER_MAX) + let buffer = UnsafeMutableRawPointer(mutating: buf!.bytes).assumingMemoryBound(to: UInt8.self) + let length = stream.read(buffer, maxLength: BUFFER_MAX) + if length < 1 { + return nil + } + return Data(bytes: buffer, count: length) + } + + public func cleanup() { + if let stream = inputStream { + stream.delegate = nil + CFReadStreamSetDispatchQueue(stream, nil) + stream.close() + } + if let stream = outputStream { + stream.delegate = nil + CFWriteStreamSetDispatchQueue(stream, nil) + stream.close() + } + outputStream = nil + inputStream = nil + } + + #if os(Linux) || os(watchOS) + #else + public func sslTrust() -> (trust: SecTrust?, domain: String?) { + let trust = outputStream!.property(forKey: kCFStreamPropertySSLPeerTrust as Stream.PropertyKey) as! SecTrust? + var domain = outputStream!.property(forKey: kCFStreamSSLPeerName as Stream.PropertyKey) as? String + if domain == nil, + let sslContextOut = CFWriteStreamCopyProperty(outputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext? { + var peerNameLen: Int = 0 + SSLGetPeerDomainNameLength(sslContextOut, &peerNameLen) + var peerName = Data(count: peerNameLen) + let _ = peerName.withUnsafeMutableBytes { (peerNamePtr: UnsafeMutablePointer) in + SSLGetPeerDomainName(sslContextOut, peerNamePtr, &peerNameLen) + } + if let peerDomain = String(bytes: peerName, encoding: .utf8), peerDomain.count > 0 { + domain = peerDomain + } + } + + return (trust, domain) + } + #endif + + /** + Delegate for the stream methods. Processes incoming bytes + */ + open func stream(_ aStream: Stream, handle eventCode: Stream.Event) { + if eventCode == .hasBytesAvailable { + if aStream == inputStream { + delegate?.newBytesInStream() + } + } else if eventCode == .errorOccurred { + delegate?.streamDidError(error: aStream.streamError) + } else if eventCode == .endEncountered { + delegate?.streamDidError(error: nil) + } + } +} + +//WebSocket implementation + +//standard delegate you should use +public protocol WebSocketDelegate: class { + func websocketDidConnect(socket: WebSocketClient) + func websocketDidDisconnect(socket: WebSocketClient, error: Error?) + func websocketDidReceiveMessage(socket: WebSocketClient, text: String) + func websocketDidReceiveData(socket: WebSocketClient, data: Data) +} + +//got pongs +public protocol WebSocketPongDelegate: class { + func websocketDidReceivePong(socket: WebSocketClient, data: Data?) +} + +// A Delegate with more advanced info on messages and connection etc. +public protocol WebSocketAdvancedDelegate: class { + func websocketDidConnect(socket: WebSocket) + func websocketDidDisconnect(socket: WebSocket, error: Error?) + func websocketDidReceiveMessage(socket: WebSocket, text: String, response: WebSocket.WSResponse) + func websocketDidReceiveData(socket: WebSocket, data: Data, response: WebSocket.WSResponse) + func websocketHttpUpgrade(socket: WebSocket, request: String) + func websocketHttpUpgrade(socket: WebSocket, response: String) +} + + +open class WebSocket : NSObject, StreamDelegate, WebSocketClient, WSStreamDelegate { + + public enum OpCode : UInt8 { + case continueFrame = 0x0 + case textFrame = 0x1 + case binaryFrame = 0x2 + // 3-7 are reserved. + case connectionClose = 0x8 + case ping = 0x9 + case pong = 0xA + // B-F reserved. + } + + public static let ErrorDomain = "WebSocket" + + // Where the callback is executed. It defaults to the main UI thread queue. + public var callbackQueue = DispatchQueue.main + + // MARK: - Constants + + let headerWSUpgradeName = "Upgrade" + let headerWSUpgradeValue = "websocket" + let headerWSHostName = "Host" + let headerWSConnectionName = "Connection" + let headerWSConnectionValue = "Upgrade" + let headerWSProtocolName = "Sec-WebSocket-Protocol" + let headerWSVersionName = "Sec-WebSocket-Version" + let headerWSVersionValue = "13" + let headerWSExtensionName = "Sec-WebSocket-Extensions" + let headerWSKeyName = "Sec-WebSocket-Key" + let headerOriginName = "Origin" + let headerWSAcceptName = "Sec-WebSocket-Accept" + let BUFFER_MAX = 4096 + let FinMask: UInt8 = 0x80 + let OpCodeMask: UInt8 = 0x0F + let RSVMask: UInt8 = 0x70 + let RSV1Mask: UInt8 = 0x40 + let MaskMask: UInt8 = 0x80 + let PayloadLenMask: UInt8 = 0x7F + let MaxFrameSize: Int = 32 + let httpSwitchProtocolCode = 101 + let supportedSSLSchemes = ["wss", "https"] + + public class WSResponse { + var isFin = false + public var code: OpCode = .continueFrame + var bytesLeft = 0 + public var frameCount = 0 + public var buffer: NSMutableData? + public let firstFrame = { + return Date() + }() + } + + // MARK: - Delegates + + /// Responds to callback about new messages coming in over the WebSocket + /// and also connection/disconnect messages. + public weak var delegate: WebSocketDelegate? + + /// The optional advanced delegate can be used instead of of the delegate + public weak var advancedDelegate: WebSocketAdvancedDelegate? + + /// Receives a callback for each pong message recived. + public weak var pongDelegate: WebSocketPongDelegate? + + public var onConnect: (() -> Void)? + public var onDisconnect: ((Error?) -> Void)? + public var onText: ((String) -> Void)? + public var onData: ((Data) -> Void)? + public var onPong: ((Data?) -> Void)? + + public var disableSSLCertValidation = false + public var overrideTrustHostname = false + public var desiredTrustHostname: String? = nil + + public var enableCompression = true + #if os(Linux) + #else + public var security: SSLTrustValidator? + public var enabledSSLCipherSuites: [SSLCipherSuite]? + #endif + + public var isConnected: Bool { + mutex.lock() + let isConnected = connected + mutex.unlock() + return isConnected + } + public var request: URLRequest //this is only public to allow headers, timeout, etc to be modified on reconnect + public var currentURL: URL { return request.url! } + + public var respondToPingWithPong: Bool = true + + // MARK: - Private + + private struct CompressionState { + var supportsCompression = false + var messageNeedsDecompression = false + var serverMaxWindowBits = 15 + var clientMaxWindowBits = 15 + var clientNoContextTakeover = false + var serverNoContextTakeover = false + var decompressor:Decompressor? = nil + var compressor:Compressor? = nil + } + + private var stream: WSStream + private var connected = false + private var isConnecting = false + private let mutex = NSLock() + private var compressionState = CompressionState() + private var writeQueue = OperationQueue() + private var readStack = [WSResponse]() + private var inputQueue = [Data]() + private var fragBuffer: Data? + private var certValidated = false + private var didDisconnect = false + private var readyToWrite = false + private var headerSecKey = "" + private var canDispatch: Bool { + mutex.lock() + let canWork = readyToWrite + mutex.unlock() + return canWork + } + + /// Used for setting protocols. + public init(request: URLRequest, protocols: [String]? = nil, stream: WSStream = FoundationStream()) { + self.request = request + self.stream = stream + if request.value(forHTTPHeaderField: headerOriginName) == nil { + guard let url = request.url else {return} + var origin = url.absoluteString + if let hostUrl = URL (string: "/", relativeTo: url) { + origin = hostUrl.absoluteString + origin.remove(at: origin.index(before: origin.endIndex)) + } + self.request.setValue(origin, forHTTPHeaderField: headerOriginName) + } + if let protocols = protocols { + self.request.setValue(protocols.joined(separator: ","), forHTTPHeaderField: headerWSProtocolName) + } + writeQueue.maxConcurrentOperationCount = 1 + } + + public convenience init(url: URL, protocols: [String]? = nil) { + var request = URLRequest(url: url) + request.timeoutInterval = 5 + self.init(request: request, protocols: protocols) + } + + // Used for specifically setting the QOS for the write queue. + public convenience init(url: URL, writeQueueQOS: QualityOfService, protocols: [String]? = nil) { + self.init(url: url, protocols: protocols) + writeQueue.qualityOfService = writeQueueQOS + } + + /** + Connect to the WebSocket server on a background thread. + */ + open func connect() { + guard !isConnecting else { return } + didDisconnect = false + isConnecting = true + createHTTPRequest() + } + + /** + Disconnect from the server. I send a Close control frame to the server, then expect the server to respond with a Close control frame and close the socket from its end. I notify my delegate once the socket has been closed. + + If you supply a non-nil `forceTimeout`, I wait at most that long (in seconds) for the server to close the socket. After the timeout expires, I close the socket and notify my delegate. + + If you supply a zero (or negative) `forceTimeout`, I immediately close the socket (without sending a Close control frame) and notify my delegate. + + - Parameter forceTimeout: Maximum time to wait for the server to close the socket. + - Parameter closeCode: The code to send on disconnect. The default is the normal close code for cleanly disconnecting a webSocket. + */ + open func disconnect(forceTimeout: TimeInterval? = nil, closeCode: UInt16 = CloseCode.normal.rawValue) { + guard isConnected else { return } + switch forceTimeout { + case .some(let seconds) where seconds > 0: + let milliseconds = Int(seconds * 1_000) + callbackQueue.asyncAfter(deadline: .now() + .milliseconds(milliseconds)) { [weak self] in + self?.disconnectStream(nil) + } + fallthrough + case .none: + writeError(closeCode) + default: + disconnectStream(nil) + break + } + } + + /** + Write a string to the websocket. This sends it as a text frame. + + If you supply a non-nil completion block, I will perform it when the write completes. + + - parameter string: The string to write. + - parameter completion: The (optional) completion handler. + */ + open func write(string: String, completion: (() -> ())? = nil) { + guard isConnected else { return } + dequeueWrite(string.data(using: String.Encoding.utf8)!, code: .textFrame, writeCompletion: completion) + } + + /** + Write binary data to the websocket. This sends it as a binary frame. + + If you supply a non-nil completion block, I will perform it when the write completes. + + - parameter data: The data to write. + - parameter completion: The (optional) completion handler. + */ + open func write(data: Data, completion: (() -> ())? = nil) { + guard isConnected else { return } + dequeueWrite(data, code: .binaryFrame, writeCompletion: completion) + } + + /** + Write a ping to the websocket. This sends it as a control frame. + Yodel a sound to the planet. This sends it as an astroid. http://youtu.be/Eu5ZJELRiJ8?t=42s + */ + open func write(ping: Data, completion: (() -> ())? = nil) { + guard isConnected else { return } + dequeueWrite(ping, code: .ping, writeCompletion: completion) + } + + /** + Write a pong to the websocket. This sends it as a control frame. + Respond to a Yodel. + */ + open func write(pong: Data, completion: (() -> ())? = nil) { + guard isConnected else { return } + dequeueWrite(pong, code: .pong, writeCompletion: completion) + } + + /** + Private method that starts the connection. + */ + private func createHTTPRequest() { + guard let url = request.url else {return} + var port = url.port + if port == nil { + if supportedSSLSchemes.contains(url.scheme!) { + port = 443 + } else { + port = 80 + } + } + request.setValue(headerWSUpgradeValue, forHTTPHeaderField: headerWSUpgradeName) + request.setValue(headerWSConnectionValue, forHTTPHeaderField: headerWSConnectionName) + headerSecKey = generateWebSocketKey() + request.setValue(headerWSVersionValue, forHTTPHeaderField: headerWSVersionName) + request.setValue(headerSecKey, forHTTPHeaderField: headerWSKeyName) + + if enableCompression { + let val = "permessage-deflate; client_max_window_bits; server_max_window_bits=15" + request.setValue(val, forHTTPHeaderField: headerWSExtensionName) + } + let hostValue = request.allHTTPHeaderFields?[headerWSHostName] ?? "\(url.host!):\(port!)" + request.setValue(hostValue, forHTTPHeaderField: headerWSHostName) + + var path = url.absoluteString + let offset = (url.scheme?.count ?? 2) + 3 + path = String(path[path.index(path.startIndex, offsetBy: offset).. String { + var key = "" + let seed = 16 + for _ in 0.., bufferLen: Int) { + let code = processHTTP(buffer, bufferLen: bufferLen) + switch code { + case 0: + break + case -1: + fragBuffer = Data(bytes: buffer, count: bufferLen) + break // do nothing, we are going to collect more data + default: + doDisconnect(WSError(type: .upgradeError, message: "Invalid HTTP upgrade", code: code)) + } + } + + /** + Finds the HTTP Packet in the TCP stream, by looking for the CRLF. + */ + private func processHTTP(_ buffer: UnsafePointer, bufferLen: Int) -> Int { + let CRLFBytes = [UInt8(ascii: "\r"), UInt8(ascii: "\n"), UInt8(ascii: "\r"), UInt8(ascii: "\n")] + var k = 0 + var totalSize = 0 + for i in 0.. 0 { + let code = validateResponse(buffer, bufferLen: totalSize) + if code != 0 { + return code + } + isConnecting = false + mutex.lock() + connected = true + mutex.unlock() + didDisconnect = false + if canDispatch { + callbackQueue.async { [weak self] in + guard let s = self else { return } + s.onConnect?() + s.delegate?.websocketDidConnect(socket: s) + s.advancedDelegate?.websocketDidConnect(socket: s) + NotificationCenter.default.post(name: NSNotification.Name(WebsocketDidConnectNotification), object: self) + } + } + //totalSize += 1 //skip the last \n + let restSize = bufferLen - totalSize + if restSize > 0 { + processRawMessagesInBuffer(buffer + totalSize, bufferLen: restSize) + } + return 0 //success + } + return -1 // Was unable to find the full TCP header. + } + + /** + Validates the HTTP is a 101 as per the RFC spec. + */ + private func validateResponse(_ buffer: UnsafePointer, bufferLen: Int) -> Int { + guard let str = String(data: Data(bytes: buffer, count: bufferLen), encoding: .utf8) else { return -1 } + let splitArr = str.components(separatedBy: "\r\n") + var code = -1 + var i = 0 + var headers = [String: String]() + for str in splitArr { + if i == 0 { + let responseSplit = str.components(separatedBy: .whitespaces) + guard responseSplit.count > 1 else { return -1 } + if let c = Int(responseSplit[1]) { + code = c + } + } else { + let responseSplit = str.components(separatedBy: ":") + guard responseSplit.count > 1 else { break } + let key = responseSplit[0].trimmingCharacters(in: .whitespaces) + let val = responseSplit[1].trimmingCharacters(in: .whitespaces) + headers[key.lowercased()] = val + } + i += 1 + } + advancedDelegate?.websocketHttpUpgrade(socket: self, response: str) + if code != httpSwitchProtocolCode { + return code + } + + if let extensionHeader = headers[headerWSExtensionName.lowercased()] { + processExtensionHeader(extensionHeader) + } + + if let acceptKey = headers[headerWSAcceptName.lowercased()] { + if acceptKey.count > 0 { + if headerSecKey.count > 0 { + let sha = "\(headerSecKey)258EAFA5-E914-47DA-95CA-C5AB0DC85B11".sha1Base64() + if sha != acceptKey as String { + return -1 + } + } + return 0 + } + } + return -1 + } + + /** + Parses the extension header, setting up the compression parameters. + */ + func processExtensionHeader(_ extensionHeader: String) { + let parts = extensionHeader.components(separatedBy: ";") + for p in parts { + let part = p.trimmingCharacters(in: .whitespaces) + if part == "permessage-deflate" { + compressionState.supportsCompression = true + } else if part.hasPrefix("server_max_window_bits=") { + let valString = part.components(separatedBy: "=")[1] + if let val = Int(valString.trimmingCharacters(in: .whitespaces)) { + compressionState.serverMaxWindowBits = val + } + } else if part.hasPrefix("client_max_window_bits=") { + let valString = part.components(separatedBy: "=")[1] + if let val = Int(valString.trimmingCharacters(in: .whitespaces)) { + compressionState.clientMaxWindowBits = val + } + } else if part == "client_no_context_takeover" { + compressionState.clientNoContextTakeover = true + } else if part == "server_no_context_takeover" { + compressionState.serverNoContextTakeover = true + } + } + if compressionState.supportsCompression { + compressionState.decompressor = Decompressor(windowBits: compressionState.serverMaxWindowBits) + compressionState.compressor = Compressor(windowBits: compressionState.clientMaxWindowBits) + } + } + + /** + Read a 16 bit big endian value from a buffer + */ + private static func readUint16(_ buffer: UnsafePointer, offset: Int) -> UInt16 { + return (UInt16(buffer[offset + 0]) << 8) | UInt16(buffer[offset + 1]) + } + + /** + Read a 64 bit big endian value from a buffer + */ + private static func readUint64(_ buffer: UnsafePointer, offset: Int) -> UInt64 { + var value = UInt64(0) + for i in 0...7 { + value = (value << 8) | UInt64(buffer[offset + i]) + } + return value + } + + /** + Write a 16-bit big endian value to a buffer. + */ + private static func writeUint16(_ buffer: UnsafeMutablePointer, offset: Int, value: UInt16) { + buffer[offset + 0] = UInt8(value >> 8) + buffer[offset + 1] = UInt8(value & 0xff) + } + + /** + Write a 64-bit big endian value to a buffer. + */ + private static func writeUint64(_ buffer: UnsafeMutablePointer, offset: Int, value: UInt64) { + for i in 0...7 { + buffer[offset + i] = UInt8((value >> (8*UInt64(7 - i))) & 0xff) + } + } + + /** + Process one message at the start of `buffer`. Return another buffer (sharing storage) that contains the leftover contents of `buffer` that I didn't process. + */ + private func processOneRawMessage(inBuffer buffer: UnsafeBufferPointer) -> UnsafeBufferPointer { + let response = readStack.last + guard let baseAddress = buffer.baseAddress else {return emptyBuffer} + let bufferLen = buffer.count + if response != nil && bufferLen < 2 { + fragBuffer = Data(buffer: buffer) + return emptyBuffer + } + if let response = response, response.bytesLeft > 0 { + var len = response.bytesLeft + var extra = bufferLen - response.bytesLeft + if response.bytesLeft > bufferLen { + len = bufferLen + extra = 0 + } + response.bytesLeft -= len + response.buffer?.append(Data(bytes: baseAddress, count: len)) + _ = processResponse(response) + return buffer.fromOffset(bufferLen - extra) + } else { + let isFin = (FinMask & baseAddress[0]) + let receivedOpcodeRawValue = (OpCodeMask & baseAddress[0]) + let receivedOpcode = OpCode(rawValue: receivedOpcodeRawValue) + let isMasked = (MaskMask & baseAddress[1]) + let payloadLen = (PayloadLenMask & baseAddress[1]) + var offset = 2 + if compressionState.supportsCompression && receivedOpcode != .continueFrame { + compressionState.messageNeedsDecompression = (RSV1Mask & baseAddress[0]) > 0 + } + if (isMasked > 0 || (RSVMask & baseAddress[0]) > 0) && receivedOpcode != .pong && !compressionState.messageNeedsDecompression { + let errCode = CloseCode.protocolError.rawValue + doDisconnect(WSError(type: .protocolError, message: "masked and rsv data is not currently supported", code: Int(errCode))) + writeError(errCode) + return emptyBuffer + } + let isControlFrame = (receivedOpcode == .connectionClose || receivedOpcode == .ping) + if !isControlFrame && (receivedOpcode != .binaryFrame && receivedOpcode != .continueFrame && + receivedOpcode != .textFrame && receivedOpcode != .pong) { + let errCode = CloseCode.protocolError.rawValue + doDisconnect(WSError(type: .protocolError, message: "unknown opcode: \(receivedOpcodeRawValue)", code: Int(errCode))) + writeError(errCode) + return emptyBuffer + } + if isControlFrame && isFin == 0 { + let errCode = CloseCode.protocolError.rawValue + doDisconnect(WSError(type: .protocolError, message: "control frames can't be fragmented", code: Int(errCode))) + writeError(errCode) + return emptyBuffer + } + var closeCode = CloseCode.normal.rawValue + if receivedOpcode == .connectionClose { + if payloadLen == 1 { + closeCode = CloseCode.protocolError.rawValue + } else if payloadLen > 1 { + closeCode = WebSocket.readUint16(baseAddress, offset: offset) + if closeCode < 1000 || (closeCode > 1003 && closeCode < 1007) || (closeCode > 1013 && closeCode < 3000) { + closeCode = CloseCode.protocolError.rawValue + } + } + if payloadLen < 2 { + doDisconnect(WSError(type: .protocolError, message: "connection closed by server", code: Int(closeCode))) + writeError(closeCode) + return emptyBuffer + } + } else if isControlFrame && payloadLen > 125 { + writeError(CloseCode.protocolError.rawValue) + return emptyBuffer + } + var dataLength = UInt64(payloadLen) + if dataLength == 127 { + dataLength = WebSocket.readUint64(baseAddress, offset: offset) + offset += MemoryLayout.size + } else if dataLength == 126 { + dataLength = UInt64(WebSocket.readUint16(baseAddress, offset: offset)) + offset += MemoryLayout.size + } + if bufferLen < offset || UInt64(bufferLen - offset) < dataLength { + fragBuffer = Data(bytes: baseAddress, count: bufferLen) + return emptyBuffer + } + var len = dataLength + if dataLength > UInt64(bufferLen) { + len = UInt64(bufferLen-offset) + } + if receivedOpcode == .connectionClose && len > 0 { + let size = MemoryLayout.size + offset += size + len -= UInt64(size) + } + let data: Data + if compressionState.messageNeedsDecompression, let decompressor = compressionState.decompressor { + do { + data = try decompressor.decompress(bytes: baseAddress+offset, count: Int(len), finish: isFin > 0) + if isFin > 0 && compressionState.serverNoContextTakeover { + try decompressor.reset() + } + } catch { + let closeReason = "Decompression failed: \(error)" + let closeCode = CloseCode.encoding.rawValue + doDisconnect(WSError(type: .protocolError, message: closeReason, code: Int(closeCode))) + writeError(closeCode) + return emptyBuffer + } + } else { + data = Data(bytes: baseAddress+offset, count: Int(len)) + } + + if receivedOpcode == .connectionClose { + var closeReason = "connection closed by server" + if let customCloseReason = String(data: data, encoding: .utf8) { + closeReason = customCloseReason + } else { + closeCode = CloseCode.protocolError.rawValue + } + doDisconnect(WSError(type: .protocolError, message: closeReason, code: Int(closeCode))) + writeError(closeCode) + return emptyBuffer + } + if receivedOpcode == .pong { + if canDispatch { + callbackQueue.async { [weak self] in + guard let s = self else { return } + let pongData: Data? = data.count > 0 ? data : nil + s.onPong?(pongData) + s.pongDelegate?.websocketDidReceivePong(socket: s, data: pongData) + } + } + return buffer.fromOffset(offset + Int(len)) + } + var response = readStack.last + if isControlFrame { + response = nil // Don't append pings. + } + if isFin == 0 && receivedOpcode == .continueFrame && response == nil { + let errCode = CloseCode.protocolError.rawValue + doDisconnect(WSError(type: .protocolError, message: "continue frame before a binary or text frame", code: Int(errCode))) + writeError(errCode) + return emptyBuffer + } + var isNew = false + if response == nil { + if receivedOpcode == .continueFrame { + let errCode = CloseCode.protocolError.rawValue + doDisconnect(WSError(type: .protocolError, message: "first frame can't be a continue frame", code: Int(errCode))) + writeError(errCode) + return emptyBuffer + } + isNew = true + response = WSResponse() + response!.code = receivedOpcode! + response!.bytesLeft = Int(dataLength) + response!.buffer = NSMutableData(data: data) + } else { + if receivedOpcode == .continueFrame { + response!.bytesLeft = Int(dataLength) + } else { + let errCode = CloseCode.protocolError.rawValue + doDisconnect(WSError(type: .protocolError, message: "second and beyond of fragment message must be a continue frame", code: Int(errCode))) + writeError(errCode) + return emptyBuffer + } + response!.buffer!.append(data) + } + if let response = response { + response.bytesLeft -= Int(len) + response.frameCount += 1 + response.isFin = isFin > 0 ? true : false + if isNew { + readStack.append(response) + } + _ = processResponse(response) + } + + let step = Int(offset + numericCast(len)) + return buffer.fromOffset(step) + } + } + + /** + Process all messages in the buffer if possible. + */ + private func processRawMessagesInBuffer(_ pointer: UnsafePointer, bufferLen: Int) { + var buffer = UnsafeBufferPointer(start: pointer, count: bufferLen) + repeat { + buffer = processOneRawMessage(inBuffer: buffer) + } while buffer.count >= 2 + if buffer.count > 0 { + fragBuffer = Data(buffer: buffer) + } + } + + /** + Process the finished response of a buffer. + */ + private func processResponse(_ response: WSResponse) -> Bool { + if response.isFin && response.bytesLeft <= 0 { + if response.code == .ping { + if respondToPingWithPong { + let data = response.buffer! // local copy so it is perverse for writing + dequeueWrite(data as Data, code: .pong) + } + } else if response.code == .textFrame { + guard let str = String(data: response.buffer! as Data, encoding: .utf8) else { + writeError(CloseCode.encoding.rawValue) + return false + } + if canDispatch { + callbackQueue.async { [weak self] in + guard let s = self else { return } + s.onText?(str) + s.delegate?.websocketDidReceiveMessage(socket: s, text: str) + s.advancedDelegate?.websocketDidReceiveMessage(socket: s, text: str, response: response) + } + } + } else if response.code == .binaryFrame { + if canDispatch { + let data = response.buffer! // local copy so it is perverse for writing + callbackQueue.async { [weak self] in + guard let s = self else { return } + s.onData?(data as Data) + s.delegate?.websocketDidReceiveData(socket: s, data: data as Data) + s.advancedDelegate?.websocketDidReceiveData(socket: s, data: data as Data, response: response) + } + } + } + readStack.removeLast() + return true + } + return false + } + + /** + Write an error to the socket + */ + private func writeError(_ code: UInt16) { + let buf = NSMutableData(capacity: MemoryLayout.size) + let buffer = UnsafeMutableRawPointer(mutating: buf!.bytes).assumingMemoryBound(to: UInt8.self) + WebSocket.writeUint16(buffer, offset: 0, value: code) + dequeueWrite(Data(bytes: buffer, count: MemoryLayout.size), code: .connectionClose) + } + + /** + Used to write things to the stream + */ + private func dequeueWrite(_ data: Data, code: OpCode, writeCompletion: (() -> ())? = nil) { + let operation = BlockOperation() + operation.addExecutionBlock { [weak self, weak operation] in + //stream isn't ready, let's wait + guard let s = self else { return } + guard let sOperation = operation else { return } + var offset = 2 + var firstByte:UInt8 = s.FinMask | code.rawValue + var data = data + if [.textFrame, .binaryFrame].contains(code), let compressor = s.compressionState.compressor { + do { + data = try compressor.compress(data) + if s.compressionState.clientNoContextTakeover { + try compressor.reset() + } + firstByte |= s.RSV1Mask + } catch { + // TODO: report error? We can just send the uncompressed frame. + } + } + let dataLength = data.count + let frame = NSMutableData(capacity: dataLength + s.MaxFrameSize) + let buffer = UnsafeMutableRawPointer(frame!.mutableBytes).assumingMemoryBound(to: UInt8.self) + buffer[0] = firstByte + if dataLength < 126 { + buffer[1] = CUnsignedChar(dataLength) + } else if dataLength <= Int(UInt16.max) { + buffer[1] = 126 + WebSocket.writeUint16(buffer, offset: offset, value: UInt16(dataLength)) + offset += MemoryLayout.size + } else { + buffer[1] = 127 + WebSocket.writeUint64(buffer, offset: offset, value: UInt64(dataLength)) + offset += MemoryLayout.size + } + buffer[1] |= s.MaskMask + let maskKey = UnsafeMutablePointer(buffer + offset) + _ = SecRandomCopyBytes(kSecRandomDefault, Int(MemoryLayout.size), maskKey) + offset += MemoryLayout.size + + for i in 0...size] + offset += 1 + } + var total = 0 + while !sOperation.isCancelled { + if !s.readyToWrite { + s.doDisconnect(WSError(type: .outputStreamWriteError, message: "output stream had an error during write", code: 0)) + break + } + let stream = s.stream + let writeBuffer = UnsafeRawPointer(frame!.bytes+total).assumingMemoryBound(to: UInt8.self) + let len = stream.write(data: Data(bytes: writeBuffer, count: offset-total)) + if len <= 0 { + s.doDisconnect(WSError(type: .outputStreamWriteError, message: "output stream had an error during write", code: 0)) + break + } else { + total += len + } + if total >= offset { + if let queue = self?.callbackQueue, let callback = writeCompletion { + queue.async { + callback() + } + } + + break + } + } + } + writeQueue.addOperation(operation) + } + + /** + Used to preform the disconnect delegate + */ + private func doDisconnect(_ error: Error?) { + guard !didDisconnect else { return } + didDisconnect = true + isConnecting = false + mutex.lock() + connected = false + mutex.unlock() + guard canDispatch else {return} + callbackQueue.async { [weak self] in + guard let s = self else { return } + s.onDisconnect?(error) + s.delegate?.websocketDidDisconnect(socket: s, error: error) + s.advancedDelegate?.websocketDidDisconnect(socket: s, error: error) + let userInfo = error.map{ [WebsocketDisconnectionErrorKeyName: $0] } + NotificationCenter.default.post(name: NSNotification.Name(WebsocketDidDisconnectNotification), object: self, userInfo: userInfo) + } + } + + // MARK: - Deinit + + deinit { + mutex.lock() + readyToWrite = false + cleanupStream() + mutex.unlock() + writeQueue.cancelAllOperations() + } + +} + +private extension String { + func sha1Base64() -> String { + let data = self.data(using: String.Encoding.utf8)! + var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH)) + data.withUnsafeBytes { _ = CC_SHA1($0, CC_LONG(data.count), &digest) } + return Data(bytes: digest).base64EncodedString() + } +} + +private extension Data { + + init(buffer: UnsafeBufferPointer) { + self.init(bytes: buffer.baseAddress!, count: buffer.count) + } + +} + +private extension UnsafeBufferPointer { + + func fromOffset(_ offset: Int) -> UnsafeBufferPointer { + return UnsafeBufferPointer(start: baseAddress?.advanced(by: offset), count: count - offset) + } + +} + +private let emptyBuffer = UnsafeBufferPointer(start: nil, count: 0) + +#if swift(>=4) +#else +fileprivate extension String { + var count: Int { + return self.characters.count + } +} +#endif diff --git a/Pods/Starscream/zlib/include.h b/Pods/Starscream/zlib/include.h new file mode 100644 index 0000000..cb3747f --- /dev/null +++ b/Pods/Starscream/zlib/include.h @@ -0,0 +1,2 @@ +#include +#include diff --git a/Pods/Starscream/zlib/module.modulemap b/Pods/Starscream/zlib/module.modulemap new file mode 100644 index 0000000..ed0676f --- /dev/null +++ b/Pods/Starscream/zlib/module.modulemap @@ -0,0 +1,9 @@ +module SSCZLib [system] { + header "include.h" + link "z" + export * +} +module SSCommonCrypto [system] { + header "include.h" + export * +} diff --git a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-acknowledgements.markdown b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-acknowledgements.markdown index 9b90b5e..93ff96b 100644 --- a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-acknowledgements.markdown @@ -252,6 +252,240 @@ THE SOFTWARE. +## Socket.IO-Client-Swift + +The MIT License (MIT) + +Copyright (c) 2014-2015 Erik Little + +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. + + + +This library makes use of the following third party libraries: + +Starscream +---------- + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + ## SocketRocket @@ -271,6 +505,185 @@ THE SOFTWARE. +## Starscream + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + Copyright (c) 2014-2016 Dalton Cherry. + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + ## TTTAttributedLabel Copyright (c) 2011 Mattt Thompson (http://mattt.me/) diff --git a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-acknowledgements.plist b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-acknowledgements.plist index a333b72..66fc486 100644 --- a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-acknowledgements.plist @@ -341,6 +341,246 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + The MIT License (MIT) + +Copyright (c) 2014-2015 Erik Little + +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. + + + +This library makes use of the following third party libraries: + +Starscream +---------- + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + License + MIT + Title + Socket.IO-Client-Swift + Type + PSGroupSpecifier + FooterText @@ -366,6 +606,191 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + Copyright (c) 2014-2016 Dalton Cherry. + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + License + Apache License, Version 2.0 + Title + Starscream + Type + PSGroupSpecifier + FooterText Copyright (c) 2011 Mattt Thompson (http://mattt.me/) diff --git a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-frameworks.sh b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-frameworks.sh index ab9240e..1405e7b 100755 --- a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-frameworks.sh +++ b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA-frameworks.sh @@ -153,7 +153,9 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework" install_framework "${BUILT_PRODUCTS_DIR}/NJKWebViewProgress/NJKWebViewProgress.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Socket.IO-Client-Swift/SocketIO.framework" install_framework "${BUILT_PRODUCTS_DIR}/SocketRocket/SocketRocket.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" install_framework "${BUILT_PRODUCTS_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework" install_framework "${BUILT_PRODUCTS_DIR}/Toast/Toast.framework" install_framework "${BUILT_PRODUCTS_DIR}/UITableView+FDTemplateLayoutCell/UITableView_FDTemplateLayoutCell.framework" @@ -170,7 +172,9 @@ if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework" install_framework "${BUILT_PRODUCTS_DIR}/NJKWebViewProgress/NJKWebViewProgress.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Socket.IO-Client-Swift/SocketIO.framework" install_framework "${BUILT_PRODUCTS_DIR}/SocketRocket/SocketRocket.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Starscream/Starscream.framework" install_framework "${BUILT_PRODUCTS_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework" install_framework "${BUILT_PRODUCTS_DIR}/Toast/Toast.framework" install_framework "${BUILT_PRODUCTS_DIR}/UITableView+FDTemplateLayoutCell/UITableView_FDTemplateLayoutCell.framework" diff --git a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA.debug.xcconfig b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA.debug.xcconfig index c79557d..3845a42 100644 --- a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA.debug.xcconfig +++ b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA.debug.xcconfig @@ -1,10 +1,12 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/JSONModel" "${PODS_CONFIGURATION_BUILD_DIR}/LKDBHelper" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/NJKWebViewProgress" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Toast" "${PODS_CONFIGURATION_BUILD_DIR}/UITableView+FDTemplateLayoutCell" "${PODS_CONFIGURATION_BUILD_DIR}/YTKKeyValueStore" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/UMCAnalytics" "${PODS_ROOT}/UMCCommon" "${PODS_ROOT}/UMCSecurityPlugins/thirdparties" +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/JSONModel" "${PODS_CONFIGURATION_BUILD_DIR}/LKDBHelper" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/NJKWebViewProgress" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/Socket.IO-Client-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Toast" "${PODS_CONFIGURATION_BUILD_DIR}/UITableView+FDTemplateLayoutCell" "${PODS_CONFIGURATION_BUILD_DIR}/YTKKeyValueStore" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/UMCAnalytics" "${PODS_ROOT}/UMCCommon" "${PODS_ROOT}/UMCSecurityPlugins/thirdparties" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/WechatOpenSDK" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush" "${PODS_ROOT}/WechatOpenSDK/WechatSDK1.8.2" -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/JSONModel/JSONModel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/LKDBHelper/LKDBHelper.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/NJKWebViewProgress/NJKWebViewProgress.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Toast/Toast.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/UITableView+FDTemplateLayoutCell/UITableView_FDTemplateLayoutCell.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/YTKKeyValueStore/YTKKeyValueStore.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/WechatOpenSDK" -OTHER_LDFLAGS = $(inherited) -ObjC -l"WeChatSDK" -l"c++" -l"jcore-ios-1.2.2" -l"jpush-ios-3.1.0" -l"resolv" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "AFNetworking" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "FMDB" -framework "Foundation" -framework "IQKeyboardManager" -framework "JSONModel" -framework "LKDBHelper" -framework "MBProgressHUD" -framework "MJRefresh" -framework "Masonry" -framework "NJKWebViewProgress" -framework "SDWebImage" -framework "Security" -framework "SecurityEnvSDK" -framework "SocketRocket" -framework "SystemConfiguration" -framework "TTTAttributedLabel" -framework "Toast" -framework "UIKit" -framework "UITableView_FDTemplateLayoutCell" -framework "UMAnalytics" -framework "UMCommon" -framework "UTDID" -framework "YTKKeyValueStore" -weak_framework "UserNotifications" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/JSONModel/JSONModel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/LKDBHelper/LKDBHelper.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/NJKWebViewProgress/NJKWebViewProgress.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Socket.IO-Client-Swift/SocketIO.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Toast/Toast.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/UITableView+FDTemplateLayoutCell/UITableView_FDTemplateLayoutCell.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/YTKKeyValueStore/YTKKeyValueStore.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/WechatOpenSDK" +OTHER_LDFLAGS = $(inherited) -ObjC -l"WeChatSDK" -l"c++" -l"jcore-ios-1.2.2" -l"jpush-ios-3.1.0" -l"resolv" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "AFNetworking" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "FMDB" -framework "Foundation" -framework "IQKeyboardManager" -framework "JSONModel" -framework "LKDBHelper" -framework "MBProgressHUD" -framework "MJRefresh" -framework "Masonry" -framework "NJKWebViewProgress" -framework "SDWebImage" -framework "Security" -framework "SecurityEnvSDK" -framework "SocketIO" -framework "SocketRocket" -framework "Starscream" -framework "SystemConfiguration" -framework "TTTAttributedLabel" -framework "Toast" -framework "UIKit" -framework "UITableView_FDTemplateLayoutCell" -framework "UMAnalytics" -framework "UMCommon" -framework "UTDID" -framework "YTKKeyValueStore" -weak_framework "UserNotifications" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA.release.xcconfig b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA.release.xcconfig index c79557d..3845a42 100644 --- a/Pods/Target Support Files/Pods-GIGA/Pods-GIGA.release.xcconfig +++ b/Pods/Target Support Files/Pods-GIGA/Pods-GIGA.release.xcconfig @@ -1,10 +1,12 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/JSONModel" "${PODS_CONFIGURATION_BUILD_DIR}/LKDBHelper" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/NJKWebViewProgress" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Toast" "${PODS_CONFIGURATION_BUILD_DIR}/UITableView+FDTemplateLayoutCell" "${PODS_CONFIGURATION_BUILD_DIR}/YTKKeyValueStore" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/UMCAnalytics" "${PODS_ROOT}/UMCCommon" "${PODS_ROOT}/UMCSecurityPlugins/thirdparties" +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking" "${PODS_CONFIGURATION_BUILD_DIR}/FMDB" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/JSONModel" "${PODS_CONFIGURATION_BUILD_DIR}/LKDBHelper" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/NJKWebViewProgress" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/Socket.IO-Client-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket" "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Toast" "${PODS_CONFIGURATION_BUILD_DIR}/UITableView+FDTemplateLayoutCell" "${PODS_CONFIGURATION_BUILD_DIR}/YTKKeyValueStore" "${PODS_ROOT}/Bugly" "${PODS_ROOT}/UMCAnalytics" "${PODS_ROOT}/UMCCommon" "${PODS_ROOT}/UMCSecurityPlugins/thirdparties" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/JPush" "${PODS_ROOT}/Headers/Public/WechatOpenSDK" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush" "${PODS_ROOT}/WechatOpenSDK/WechatSDK1.8.2" -OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/JSONModel/JSONModel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/LKDBHelper/LKDBHelper.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/NJKWebViewProgress/NJKWebViewProgress.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Toast/Toast.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/UITableView+FDTemplateLayoutCell/UITableView_FDTemplateLayoutCell.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/YTKKeyValueStore/YTKKeyValueStore.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/WechatOpenSDK" -OTHER_LDFLAGS = $(inherited) -ObjC -l"WeChatSDK" -l"c++" -l"jcore-ios-1.2.2" -l"jpush-ios-3.1.0" -l"resolv" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "AFNetworking" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "FMDB" -framework "Foundation" -framework "IQKeyboardManager" -framework "JSONModel" -framework "LKDBHelper" -framework "MBProgressHUD" -framework "MJRefresh" -framework "Masonry" -framework "NJKWebViewProgress" -framework "SDWebImage" -framework "Security" -framework "SecurityEnvSDK" -framework "SocketRocket" -framework "SystemConfiguration" -framework "TTTAttributedLabel" -framework "Toast" -framework "UIKit" -framework "UITableView_FDTemplateLayoutCell" -framework "UMAnalytics" -framework "UMCommon" -framework "UTDID" -framework "YTKKeyValueStore" -weak_framework "UserNotifications" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking/AFNetworking.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/JSONModel/JSONModel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/LKDBHelper/LKDBHelper.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/NJKWebViewProgress/NJKWebViewProgress.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Socket.IO-Client-Swift/SocketIO.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/SocketRocket/SocketRocket.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Starscream/Starscream.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TTTAttributedLabel/TTTAttributedLabel.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Toast/Toast.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/UITableView+FDTemplateLayoutCell/UITableView_FDTemplateLayoutCell.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/YTKKeyValueStore/YTKKeyValueStore.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/JPush" -isystem "${PODS_ROOT}/Headers/Public/WechatOpenSDK" +OTHER_LDFLAGS = $(inherited) -ObjC -l"WeChatSDK" -l"c++" -l"jcore-ios-1.2.2" -l"jpush-ios-3.1.0" -l"resolv" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "AFNetworking" -framework "Bugly" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "FMDB" -framework "Foundation" -framework "IQKeyboardManager" -framework "JSONModel" -framework "LKDBHelper" -framework "MBProgressHUD" -framework "MJRefresh" -framework "Masonry" -framework "NJKWebViewProgress" -framework "SDWebImage" -framework "Security" -framework "SecurityEnvSDK" -framework "SocketIO" -framework "SocketRocket" -framework "Starscream" -framework "SystemConfiguration" -framework "TTTAttributedLabel" -framework "Toast" -framework "UIKit" -framework "UITableView_FDTemplateLayoutCell" -framework "UMAnalytics" -framework "UMCommon" -framework "UTDID" -framework "YTKKeyValueStore" -weak_framework "UserNotifications" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Socket.IO-Client-Swift/Info.plist b/Pods/Target Support Files/Socket.IO-Client-Swift/Info.plist new file mode 100644 index 0000000..816ed55 --- /dev/null +++ b/Pods/Target Support Files/Socket.IO-Client-Swift/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 13.3.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-dummy.m b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-dummy.m new file mode 100644 index 0000000..cf4ff51 --- /dev/null +++ b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Socket_IO_Client_Swift : NSObject +@end +@implementation PodsDummy_Socket_IO_Client_Swift +@end diff --git a/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-prefix.pch b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-umbrella.h b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-umbrella.h new file mode 100644 index 0000000..6a25533 --- /dev/null +++ b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double SocketIOVersionNumber; +FOUNDATION_EXPORT const unsigned char SocketIOVersionString[]; + diff --git a/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift.modulemap b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift.modulemap new file mode 100644 index 0000000..f91c479 --- /dev/null +++ b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift.modulemap @@ -0,0 +1,6 @@ +framework module SocketIO { + umbrella header "Socket.IO-Client-Swift-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift.xcconfig b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift.xcconfig new file mode 100644 index 0000000..fb3fe60 --- /dev/null +++ b/Pods/Target Support Files/Socket.IO-Client-Swift/Socket.IO-Client-Swift.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Socket.IO-Client-Swift +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Starscream" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Socket.IO-Client-Swift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_VERSION = 4.0 diff --git a/Pods/Target Support Files/Starscream/Info.plist b/Pods/Target Support Files/Starscream/Info.plist new file mode 100644 index 0000000..1862433 --- /dev/null +++ b/Pods/Target Support Files/Starscream/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.0.5 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Starscream/Starscream-dummy.m b/Pods/Target Support Files/Starscream/Starscream-dummy.m new file mode 100644 index 0000000..94456b3 --- /dev/null +++ b/Pods/Target Support Files/Starscream/Starscream-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Starscream : NSObject +@end +@implementation PodsDummy_Starscream +@end diff --git a/Pods/Target Support Files/Starscream/Starscream-prefix.pch b/Pods/Target Support Files/Starscream/Starscream-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/Starscream/Starscream-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Starscream/Starscream-umbrella.h b/Pods/Target Support Files/Starscream/Starscream-umbrella.h new file mode 100644 index 0000000..7bffee0 --- /dev/null +++ b/Pods/Target Support Files/Starscream/Starscream-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double StarscreamVersionNumber; +FOUNDATION_EXPORT const unsigned char StarscreamVersionString[]; + diff --git a/Pods/Target Support Files/Starscream/Starscream.modulemap b/Pods/Target Support Files/Starscream/Starscream.modulemap new file mode 100644 index 0000000..2b90970 --- /dev/null +++ b/Pods/Target Support Files/Starscream/Starscream.modulemap @@ -0,0 +1,6 @@ +framework module Starscream { + umbrella header "Starscream-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Starscream/Starscream.xcconfig b/Pods/Target Support Files/Starscream/Starscream.xcconfig new file mode 100644 index 0000000..5382d89 --- /dev/null +++ b/Pods/Target Support Files/Starscream/Starscream.xcconfig @@ -0,0 +1,12 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Starscream +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = -l"z" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Starscream +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) $(PODS_ROOT)/Starscream/zlib +SWIFT_VERSION = 4.1