Przeglądaj źródła

新项目 Redant Mobile

目前无法编译通过
Ray Zhang 8 lat temu
rodzic
commit
740340de7c
48 zmienionych plików z 3589 dodań i 0 usunięć
  1. 14 0
      RedAnt Mobile/DefaultAppearance.h
  2. 20 0
      RedAnt Mobile/DefaultAppearance.m
  3. 13 0
      RedAnt Mobile/MainViewController.h
  4. 39 0
      RedAnt Mobile/MainViewController.m
  5. 818 0
      RedAnt Mobile/RedAnt Mobile.xcodeproj/project.pbxproj
  6. 7 0
      RedAnt Mobile/RedAnt Mobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  7. BIN
      RedAnt Mobile/RedAnt Mobile.xcodeproj/project.xcworkspace/xcuserdata/ray.xcuserdatad/UserInterfaceState.xcuserstate
  8. 91 0
      RedAnt Mobile/RedAnt Mobile.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/RedAnt Mobile.xcscheme
  9. 22 0
      RedAnt Mobile/RedAnt Mobile.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/xcschememanagement.plist
  10. 24 0
      RedAnt Mobile/RedAnt Mobile/AppDelegate.h
  11. 53 0
      RedAnt Mobile/RedAnt Mobile/AppDelegate.m
  12. 48 0
      RedAnt Mobile/RedAnt Mobile/Assets.xcassets/AppIcon.appiconset/Contents.json
  13. 23 0
      RedAnt Mobile/RedAnt Mobile/Assets.xcassets/setting.imageset/Contents.json
  14. BIN
      RedAnt Mobile/RedAnt Mobile/Assets.xcassets/setting.imageset/设置.png
  15. BIN
      RedAnt Mobile/RedAnt Mobile/Assets.xcassets/setting.imageset/设置@2x.png
  16. BIN
      RedAnt Mobile/RedAnt Mobile/Assets.xcassets/setting.imageset/设置@3x.png
  17. 27 0
      RedAnt Mobile/RedAnt Mobile/Base.lproj/LaunchScreen.storyboard
  18. 343 0
      RedAnt Mobile/RedAnt Mobile/Base.lproj/Main.storyboard
  19. 36 0
      RedAnt Mobile/RedAnt Mobile/BasicViewController.h
  20. 167 0
      RedAnt Mobile/RedAnt Mobile/BasicViewController.m
  21. 14 0
      RedAnt Mobile/RedAnt Mobile/FullyShowViewController.h
  22. 38 0
      RedAnt Mobile/RedAnt Mobile/FullyShowViewController.m
  23. 38 0
      RedAnt Mobile/RedAnt Mobile/Info.plist
  24. 39 0
      RedAnt Mobile/RedAnt Mobile/JLKeyboardListener.h
  25. 119 0
      RedAnt Mobile/RedAnt Mobile/JLKeyboardListener.m
  26. 17 0
      RedAnt Mobile/RedAnt Mobile/LoginSettingViewController.h
  27. 258 0
      RedAnt Mobile/RedAnt Mobile/LoginSettingViewController.m
  28. 26 0
      RedAnt Mobile/RedAnt Mobile/LoginSwitchCell.h
  29. 29 0
      RedAnt Mobile/RedAnt Mobile/LoginSwitchCell.m
  30. 16 0
      RedAnt Mobile/RedAnt Mobile/LoginTextFiledCell.h
  31. 24 0
      RedAnt Mobile/RedAnt Mobile/LoginTextFiledCell.m
  32. 13 0
      RedAnt Mobile/RedAnt Mobile/LoginViewController.h
  33. 284 0
      RedAnt Mobile/RedAnt Mobile/LoginViewController.m
  34. 13 0
      RedAnt Mobile/RedAnt Mobile/RAMobileNetwork.h
  35. 121 0
      RedAnt Mobile/RedAnt Mobile/RAMobileNetwork.m
  36. 22 0
      RedAnt Mobile/RedAnt Mobile/ResultViewController.h
  37. 353 0
      RedAnt Mobile/RedAnt Mobile/ResultViewController.m
  38. 15 0
      RedAnt Mobile/RedAnt Mobile/ViewController.h
  39. 29 0
      RedAnt Mobile/RedAnt Mobile/ViewController.m
  40. 145 0
      RedAnt Mobile/RedAnt Mobile/commoneditor.phone.xib
  41. 58 0
      RedAnt Mobile/RedAnt Mobile/config.h
  42. 49 0
      RedAnt Mobile/RedAnt Mobile/const.h
  43. 29 0
      RedAnt Mobile/RedAnt Mobile/login.json
  44. 16 0
      RedAnt Mobile/RedAnt Mobile/main.m
  45. 3 0
      RedAnt Mobile/default_appearance.json
  46. 14 0
      RedAnt Mobile/testViewController.h
  47. 42 0
      RedAnt Mobile/testViewController.m
  48. 20 0
      RedAnt Mobile/testViewController.xib

+ 14 - 0
RedAnt Mobile/DefaultAppearance.h

@@ -0,0 +1,14 @@
+//
+//  DefaultAppearance.h
+//  RedAnt Mobile
+//
+//  Created by Ray on 08/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface DefaultAppearance : NSObject
++(void)init_appearance;
++(NSString*)get_noneappearance_value:(NSString*) control valuename:(NSString*)valuename;
+@end

+ 20 - 0
RedAnt Mobile/DefaultAppearance.m

@@ -0,0 +1,20 @@
+//
+//  DefaultAppearance.m
+//  RedAnt Mobile
+//
+//  Created by Ray on 08/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import "DefaultAppearance.h"
+
+@implementation DefaultAppearance
++(void)init_appearance
+{
+    
+}
++(NSString*)get_noneappearance_value:(NSString*) control valuename:(NSString*)valuename
+{
+    return nil;
+}
+@end

+ 13 - 0
RedAnt Mobile/MainViewController.h

@@ -0,0 +1,13 @@
+//
+//  MainViewController.h
+//  RedAnt Mobile
+//
+//  Created by Ray on 08/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface MainViewController : UIViewController
+
+@end

+ 39 - 0
RedAnt Mobile/MainViewController.m

@@ -0,0 +1,39 @@
+//
+//  MainViewController.m
+//  RedAnt Mobile
+//
+//  Created by Ray on 08/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import "MainViewController.h"
+
+@interface MainViewController ()
+
+@end
+
+@implementation MainViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    
+    NSAssert(1==1,@"无用类");
+    // 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

+ 818 - 0
RedAnt Mobile/RedAnt Mobile.xcodeproj/project.pbxproj

@@ -0,0 +1,818 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		71F3A9A21F5F8E22001036C8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9A11F5F8E22001036C8 /* main.m */; };
+		71F3A9A51F5F8E22001036C8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9A41F5F8E22001036C8 /* AppDelegate.m */; };
+		71F3A9A81F5F8E22001036C8 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9A71F5F8E22001036C8 /* ViewController.m */; };
+		71F3A9AB1F5F8E22001036C8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71F3A9A91F5F8E22001036C8 /* Main.storyboard */; };
+		71F3A9AD1F5F8E22001036C8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 71F3A9AC1F5F8E22001036C8 /* Assets.xcassets */; };
+		71F3A9B01F5F8E22001036C8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71F3A9AE1F5F8E22001036C8 /* LaunchScreen.storyboard */; };
+		71F3A9B91F5F8E73001036C8 /* ResultViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9B81F5F8E73001036C8 /* ResultViewController.m */; };
+		71F3A9BD1F5F8EAE001036C8 /* FullyShowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9BC1F5F8EAE001036C8 /* FullyShowViewController.m */; };
+		71F3A9C91F5FA11F001036C8 /* login.json in Resources */ = {isa = PBXBuildFile; fileRef = 71F3A9C01F5FA11F001036C8 /* login.json */; };
+		71F3A9CB1F5FA11F001036C8 /* LoginSwitchCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9C41F5FA11F001036C8 /* LoginSwitchCell.m */; };
+		71F3A9CC1F5FA11F001036C8 /* LoginTextFiledCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9C61F5FA11F001036C8 /* LoginTextFiledCell.m */; };
+		71F3A9CD1F5FA11F001036C8 /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9C81F5FA11F001036C8 /* LoginViewController.m */; };
+		71F3A9D01F5FA277001036C8 /* BasicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9CF1F5FA277001036C8 /* BasicViewController.m */; };
+		71F3A9D61F5FA2F4001036C8 /* NetworkUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9D51F5FA2F4001036C8 /* NetworkUtils.m */; };
+		71F3A9D91F5FA3B9001036C8 /* RAMobileNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9D81F5FA3B9001036C8 /* RAMobileNetwork.m */; };
+		71F3A9DC1F5FA458001036C8 /* RANetworkTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9DB1F5FA458001036C8 /* RANetworkTaskDelegate.m */; };
+		71F3A9E01F5FA484001036C8 /* RAUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9DF1F5FA484001036C8 /* RAUtils.m */; };
+		71F3A9E31F5FA531001036C8 /* JLKeyboardListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9E21F5FA531001036C8 /* JLKeyboardListener.m */; };
+		71F3A9ED1F5FA557001036C8 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9E61F5FA557001036C8 /* ioapi.c */; };
+		71F3A9EE1F5FA557001036C8 /* mztools.c in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9E81F5FA557001036C8 /* mztools.c */; };
+		71F3A9EF1F5FA557001036C8 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9EA1F5FA557001036C8 /* unzip.c */; };
+		71F3A9F01F5FA557001036C8 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9EB1F5FA557001036C8 /* zip.c */; };
+		71F3A9F31F5FA56E001036C8 /* ZipArchive.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9F21F5FA56E001036C8 /* ZipArchive.mm */; };
+		71F3A9F61F5FA64F001036C8 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 71F3A9F51F5FA64F001036C8 /* libz.tbd */; };
+		71F3A9F91F5FA688001036C8 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9F81F5FA688001036C8 /* Reachability.m */; };
+		71F3A9FC1F5FCC79001036C8 /* LoginSettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9FB1F5FCC79001036C8 /* LoginSettingViewController.m */; };
+		71F3AA071F5FDDFE001036C8 /* AESCrypt.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3A9FF1F5FDDFE001036C8 /* AESCrypt.m */; };
+		71F3AA081F5FDDFE001036C8 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 71F3AA001F5FDDFE001036C8 /* LICENSE */; };
+		71F3AA091F5FDDFE001036C8 /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA021F5FDDFE001036C8 /* NSData+Base64.m */; };
+		71F3AA0A1F5FDDFE001036C8 /* NSData+CommonCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA041F5FDDFE001036C8 /* NSData+CommonCrypto.m */; };
+		71F3AA0B1F5FDDFE001036C8 /* NSString+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA061F5FDDFE001036C8 /* NSString+Base64.m */; };
+		71F3AA0D1F61151D001036C8 /* commoneditor.phone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 71F3AA0C1F61151D001036C8 /* commoneditor.phone.xib */; };
+		71F3AA111F611FC4001036C8 /* testViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA0F1F611FC4001036C8 /* testViewController.m */; };
+		71F3AA121F611FC4001036C8 /* testViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 71F3AA101F611FC4001036C8 /* testViewController.xib */; };
+		71F3AA361F612369001036C8 /* CommonEditor.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71F3AA151F612369001036C8 /* CommonEditor.storyboard */; };
+		71F3AA371F612369001036C8 /* CommonEditorCellAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA171F612369001036C8 /* CommonEditorCellAction.m */; };
+		71F3AA381F612369001036C8 /* CommonEditorCellEdit.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA191F612369001036C8 /* CommonEditorCellEdit.m */; };
+		71F3AA391F612369001036C8 /* CommonEditorCellEnum.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA1B1F612369001036C8 /* CommonEditorCellEnum.m */; };
+		71F3AA3A1F612369001036C8 /* CommonEditorCellImg.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA1D1F612369001036C8 /* CommonEditorCellImg.m */; };
+		71F3AA3B1F612369001036C8 /* CommonEditorCellLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA1F1F612369001036C8 /* CommonEditorCellLabel.m */; };
+		71F3AA3C1F612369001036C8 /* CommonEditorCellMAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA211F612369001036C8 /* CommonEditorCellMAction.m */; };
+		71F3AA3D1F612369001036C8 /* CommonEditorCellModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA231F612369001036C8 /* CommonEditorCellModel.m */; };
+		71F3AA3E1F612369001036C8 /* CommonEditorCellSignature.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA251F612369001036C8 /* CommonEditorCellSignature.m */; };
+		71F3AA3F1F612369001036C8 /* CommonEditorCellSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA271F612369001036C8 /* CommonEditorCellSwitch.m */; };
+		71F3AA401F612369001036C8 /* CommonEditorCellTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA291F612369001036C8 /* CommonEditorCellTextView.m */; };
+		71F3AA411F612369001036C8 /* CommonEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA2B1F612369001036C8 /* CommonEditorViewController.m */; };
+		71F3AA421F612369001036C8 /* DatePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA2D1F612369001036C8 /* DatePickerViewController.m */; };
+		71F3AA431F612369001036C8 /* EnumSelectorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA2F1F612369001036C8 /* EnumSelectorCell.m */; };
+		71F3AA441F612369001036C8 /* EnumSelectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA311F612369001036C8 /* EnumSelectViewController.m */; };
+		71F3AA451F612369001036C8 /* MonthPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA331F612369001036C8 /* MonthPickerViewController.m */; };
+		71F3AA461F612369001036C8 /* SRMonthPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA351F612369001036C8 /* SRMonthPicker.m */; };
+		71F3AA4A1F612415001036C8 /* RTLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA491F612415001036C8 /* RTLabel.m */; };
+		71F3AA4D1F6124A2001036C8 /* TouchImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA4C1F6124A2001036C8 /* TouchImageView.m */; };
+		71F3AA501F6124C4001036C8 /* ImageUploadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA4F1F6124C4001036C8 /* ImageUploadViewController.m */; };
+		71F3AA531F6125ED001036C8 /* ImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA521F6125ED001036C8 /* ImageViewController.m */; };
+		71F3AA5A1F624A88001036C8 /* signature.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 71F3AA551F624A88001036C8 /* signature.storyboard */; };
+		71F3AA5B1F624A88001036C8 /* SignatureView.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA571F624A88001036C8 /* SignatureView.m */; };
+		71F3AA5C1F624A88001036C8 /* SignatureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA591F624A88001036C8 /* SignatureViewController.m */; };
+		71F3AA5F1F624AD4001036C8 /* StrikethroughLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA5E1F624AD4001036C8 /* StrikethroughLabel.m */; };
+		71F3AA641F624B2F001036C8 /* BundleModelCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA611F624B2F001036C8 /* BundleModelCell.m */; };
+		71F3AA651F624B2F001036C8 /* BundleModelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA631F624B2F001036C8 /* BundleModelViewController.m */; };
+		71F3AA681F624E19001036C8 /* JKTimerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA671F624E19001036C8 /* JKTimerManager.m */; };
+		71F3AA6B1F624EAF001036C8 /* AddressEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA6A1F624EAF001036C8 /* AddressEditorViewController.m */; };
+		71F3AA6E1F624EE0001036C8 /* CreditCardEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA6D1F624EE0001036C8 /* CreditCardEditorViewController.m */; };
+		71F3AA731F625F60001036C8 /* ContactListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA701F625F60001036C8 /* ContactListTableViewCell.m */; };
+		71F3AA741F625F60001036C8 /* ContactListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA721F625F60001036C8 /* ContactListViewController.m */; };
+		71F3AA771F625FAD001036C8 /* ActiveViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA761F625FAD001036C8 /* ActiveViewController.m */; };
+		71F3AA7D1F62617D001036C8 /* NetworkUtils+Contact.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA7C1F62617D001036C8 /* NetworkUtils+Contact.m */; };
+		71F3AA801F626309001036C8 /* CustomIOSAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA7F1F626309001036C8 /* CustomIOSAlertView.m */; };
+		71F3AA831F6263B2001036C8 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA821F6263B2001036C8 /* MainViewController.m */; };
+		71F3AA861F626E14001036C8 /* RAConvertor.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA851F626E14001036C8 /* RAConvertor.m */; };
+		71F3AA891F62732A001036C8 /* FileCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA881F62732A001036C8 /* FileCache.m */; };
+		71F3AA8F1F6276B0001036C8 /* default_appearance.json in Resources */ = {isa = PBXBuildFile; fileRef = 71F3AA8E1F6276B0001036C8 /* default_appearance.json */; };
+		71F3AA921F627700001036C8 /* DefaultTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA911F627700001036C8 /* DefaultTableHeaderView.m */; };
+		71F3AA951F6277DE001036C8 /* DefaultAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3AA941F6277DE001036C8 /* DefaultAppearance.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		71F3A99D1F5F8E22001036C8 /* RedAnt Mobile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RedAnt Mobile.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		71F3A9A11F5F8E22001036C8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		71F3A9A31F5F8E22001036C8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+		71F3A9A41F5F8E22001036C8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+		71F3A9A61F5F8E22001036C8 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
+		71F3A9A71F5F8E22001036C8 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
+		71F3A9AA1F5F8E22001036C8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		71F3A9AC1F5F8E22001036C8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		71F3A9AF1F5F8E22001036C8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		71F3A9B11F5F8E22001036C8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		71F3A9B71F5F8E73001036C8 /* ResultViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResultViewController.h; sourceTree = "<group>"; };
+		71F3A9B81F5F8E73001036C8 /* ResultViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ResultViewController.m; sourceTree = "<group>"; };
+		71F3A9BB1F5F8EAE001036C8 /* FullyShowViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FullyShowViewController.h; sourceTree = "<group>"; };
+		71F3A9BC1F5F8EAE001036C8 /* FullyShowViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FullyShowViewController.m; sourceTree = "<group>"; };
+		71F3A9C01F5FA11F001036C8 /* login.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = login.json; sourceTree = "<group>"; };
+		71F3A9C31F5FA11F001036C8 /* LoginSwitchCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginSwitchCell.h; sourceTree = "<group>"; };
+		71F3A9C41F5FA11F001036C8 /* LoginSwitchCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginSwitchCell.m; sourceTree = "<group>"; };
+		71F3A9C51F5FA11F001036C8 /* LoginTextFiledCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginTextFiledCell.h; sourceTree = "<group>"; };
+		71F3A9C61F5FA11F001036C8 /* LoginTextFiledCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginTextFiledCell.m; sourceTree = "<group>"; };
+		71F3A9C71F5FA11F001036C8 /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = "<group>"; };
+		71F3A9C81F5FA11F001036C8 /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = "<group>"; };
+		71F3A9CE1F5FA277001036C8 /* BasicViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasicViewController.h; sourceTree = "<group>"; };
+		71F3A9CF1F5FA277001036C8 /* BasicViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BasicViewController.m; sourceTree = "<group>"; };
+		71F3A9D11F5FA2A4001036C8 /* const.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = const.h; sourceTree = "<group>"; };
+		71F3A9D21F5FA2B3001036C8 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
+		71F3A9D41F5FA2F4001036C8 /* NetworkUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkUtils.h; path = "../../RedAnt ERP Mobile/common/NetworkUtils.h"; sourceTree = "<group>"; };
+		71F3A9D51F5FA2F4001036C8 /* NetworkUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NetworkUtils.m; path = "../../RedAnt ERP Mobile/common/NetworkUtils.m"; sourceTree = "<group>"; };
+		71F3A9D71F5FA3B9001036C8 /* RAMobileNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RAMobileNetwork.h; sourceTree = "<group>"; };
+		71F3A9D81F5FA3B9001036C8 /* RAMobileNetwork.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RAMobileNetwork.m; sourceTree = "<group>"; };
+		71F3A9DA1F5FA458001036C8 /* RANetworkTaskDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RANetworkTaskDelegate.h; path = ../../common/upload/RANetworkTaskDelegate.h; sourceTree = "<group>"; };
+		71F3A9DB1F5FA458001036C8 /* RANetworkTaskDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RANetworkTaskDelegate.m; path = ../../common/upload/RANetworkTaskDelegate.m; sourceTree = "<group>"; };
+		71F3A9DE1F5FA484001036C8 /* RAUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RAUtils.h; path = "../../RedAnt ERP Mobile/common/RAUtils.h"; sourceTree = "<group>"; };
+		71F3A9DF1F5FA484001036C8 /* RAUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RAUtils.m; path = "../../RedAnt ERP Mobile/common/RAUtils.m"; sourceTree = "<group>"; };
+		71F3A9E11F5FA531001036C8 /* JLKeyboardListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JLKeyboardListener.h; sourceTree = "<group>"; };
+		71F3A9E21F5FA531001036C8 /* JLKeyboardListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JLKeyboardListener.m; sourceTree = "<group>"; };
+		71F3A9E51F5FA557001036C8 /* crypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crypt.h; path = "../../RedAnt ERP Mobile/common/zip/minizip/crypt.h"; sourceTree = "<group>"; };
+		71F3A9E61F5FA557001036C8 /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ioapi.c; path = "../../RedAnt ERP Mobile/common/zip/minizip/ioapi.c"; sourceTree = "<group>"; };
+		71F3A9E71F5FA557001036C8 /* ioapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ioapi.h; path = "../../RedAnt ERP Mobile/common/zip/minizip/ioapi.h"; sourceTree = "<group>"; };
+		71F3A9E81F5FA557001036C8 /* mztools.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mztools.c; path = "../../RedAnt ERP Mobile/common/zip/minizip/mztools.c"; sourceTree = "<group>"; };
+		71F3A9E91F5FA557001036C8 /* mztools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mztools.h; path = "../../RedAnt ERP Mobile/common/zip/minizip/mztools.h"; sourceTree = "<group>"; };
+		71F3A9EA1F5FA557001036C8 /* unzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = unzip.c; path = "../../RedAnt ERP Mobile/common/zip/minizip/unzip.c"; sourceTree = "<group>"; };
+		71F3A9EB1F5FA557001036C8 /* zip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zip.c; path = "../../RedAnt ERP Mobile/common/zip/minizip/zip.c"; sourceTree = "<group>"; };
+		71F3A9EC1F5FA557001036C8 /* zip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zip.h; path = "../../RedAnt ERP Mobile/common/zip/minizip/zip.h"; sourceTree = "<group>"; };
+		71F3A9F11F5FA56E001036C8 /* ZipArchive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ZipArchive.h; path = "../../RedAnt ERP Mobile/common/zip/ZipArchive.h"; sourceTree = "<group>"; };
+		71F3A9F21F5FA56E001036C8 /* ZipArchive.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = ZipArchive.mm; path = "../../RedAnt ERP Mobile/common/zip/ZipArchive.mm"; sourceTree = "<group>"; };
+		71F3A9F51F5FA64F001036C8 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+		71F3A9F71F5FA688001036C8 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Reachability.h; path = "../../RedAnt ERP Mobile/common/Reachability.h"; sourceTree = "<group>"; };
+		71F3A9F81F5FA688001036C8 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Reachability.m; path = "../../RedAnt ERP Mobile/common/Reachability.m"; sourceTree = "<group>"; };
+		71F3A9FA1F5FCC79001036C8 /* LoginSettingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginSettingViewController.h; sourceTree = "<group>"; };
+		71F3A9FB1F5FCC79001036C8 /* LoginSettingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginSettingViewController.m; sourceTree = "<group>"; };
+		71F3A9FE1F5FDDFE001036C8 /* AESCrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AESCrypt.h; path = "../../RedAnt ERP Mobile/common/AES/AESCrypt.h"; sourceTree = "<group>"; };
+		71F3A9FF1F5FDDFE001036C8 /* AESCrypt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AESCrypt.m; path = "../../RedAnt ERP Mobile/common/AES/AESCrypt.m"; sourceTree = "<group>"; };
+		71F3AA001F5FDDFE001036C8 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = LICENSE; path = "../../RedAnt ERP Mobile/common/AES/LICENSE"; sourceTree = "<group>"; };
+		71F3AA011F5FDDFE001036C8 /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+Base64.h"; path = "../../RedAnt ERP Mobile/common/AES/NSData+Base64.h"; sourceTree = "<group>"; };
+		71F3AA021F5FDDFE001036C8 /* NSData+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSData+Base64.m"; path = "../../RedAnt ERP Mobile/common/AES/NSData+Base64.m"; sourceTree = "<group>"; };
+		71F3AA031F5FDDFE001036C8 /* NSData+CommonCrypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+CommonCrypto.h"; path = "../../RedAnt ERP Mobile/common/AES/NSData+CommonCrypto.h"; sourceTree = "<group>"; };
+		71F3AA041F5FDDFE001036C8 /* NSData+CommonCrypto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSData+CommonCrypto.m"; path = "../../RedAnt ERP Mobile/common/AES/NSData+CommonCrypto.m"; sourceTree = "<group>"; };
+		71F3AA051F5FDDFE001036C8 /* NSString+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+Base64.h"; path = "../../RedAnt ERP Mobile/common/AES/NSString+Base64.h"; sourceTree = "<group>"; };
+		71F3AA061F5FDDFE001036C8 /* NSString+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+Base64.m"; path = "../../RedAnt ERP Mobile/common/AES/NSString+Base64.m"; sourceTree = "<group>"; };
+		71F3AA0C1F61151D001036C8 /* commoneditor.phone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = commoneditor.phone.xib; sourceTree = "<group>"; };
+		71F3AA0E1F611FC4001036C8 /* testViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = testViewController.h; sourceTree = "<group>"; };
+		71F3AA0F1F611FC4001036C8 /* testViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = testViewController.m; sourceTree = "<group>"; };
+		71F3AA101F611FC4001036C8 /* testViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = testViewController.xib; sourceTree = "<group>"; };
+		71F3AA151F612369001036C8 /* CommonEditor.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CommonEditor.storyboard; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditor.storyboard"; sourceTree = "<group>"; };
+		71F3AA161F612369001036C8 /* CommonEditorCellAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellAction.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellAction.h"; sourceTree = "<group>"; };
+		71F3AA171F612369001036C8 /* CommonEditorCellAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellAction.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellAction.m"; sourceTree = "<group>"; };
+		71F3AA181F612369001036C8 /* CommonEditorCellEdit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellEdit.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellEdit.h"; sourceTree = "<group>"; };
+		71F3AA191F612369001036C8 /* CommonEditorCellEdit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellEdit.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellEdit.m"; sourceTree = "<group>"; };
+		71F3AA1A1F612369001036C8 /* CommonEditorCellEnum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellEnum.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellEnum.h"; sourceTree = "<group>"; };
+		71F3AA1B1F612369001036C8 /* CommonEditorCellEnum.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellEnum.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellEnum.m"; sourceTree = "<group>"; };
+		71F3AA1C1F612369001036C8 /* CommonEditorCellImg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellImg.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellImg.h"; sourceTree = "<group>"; };
+		71F3AA1D1F612369001036C8 /* CommonEditorCellImg.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellImg.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellImg.m"; sourceTree = "<group>"; };
+		71F3AA1E1F612369001036C8 /* CommonEditorCellLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellLabel.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellLabel.h"; sourceTree = "<group>"; };
+		71F3AA1F1F612369001036C8 /* CommonEditorCellLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellLabel.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellLabel.m"; sourceTree = "<group>"; };
+		71F3AA201F612369001036C8 /* CommonEditorCellMAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellMAction.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellMAction.h"; sourceTree = "<group>"; };
+		71F3AA211F612369001036C8 /* CommonEditorCellMAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellMAction.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellMAction.m"; sourceTree = "<group>"; };
+		71F3AA221F612369001036C8 /* CommonEditorCellModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellModel.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellModel.h"; sourceTree = "<group>"; };
+		71F3AA231F612369001036C8 /* CommonEditorCellModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellModel.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellModel.m"; sourceTree = "<group>"; };
+		71F3AA241F612369001036C8 /* CommonEditorCellSignature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellSignature.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellSignature.h"; sourceTree = "<group>"; };
+		71F3AA251F612369001036C8 /* CommonEditorCellSignature.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellSignature.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellSignature.m"; sourceTree = "<group>"; };
+		71F3AA261F612369001036C8 /* CommonEditorCellSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellSwitch.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellSwitch.h"; sourceTree = "<group>"; };
+		71F3AA271F612369001036C8 /* CommonEditorCellSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellSwitch.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellSwitch.m"; sourceTree = "<group>"; };
+		71F3AA281F612369001036C8 /* CommonEditorCellTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorCellTextView.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellTextView.h"; sourceTree = "<group>"; };
+		71F3AA291F612369001036C8 /* CommonEditorCellTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorCellTextView.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorCellTextView.m"; sourceTree = "<group>"; };
+		71F3AA2A1F612369001036C8 /* CommonEditorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonEditorViewController.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorViewController.h"; sourceTree = "<group>"; };
+		71F3AA2B1F612369001036C8 /* CommonEditorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonEditorViewController.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/CommonEditorViewController.m"; sourceTree = "<group>"; };
+		71F3AA2C1F612369001036C8 /* DatePickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DatePickerViewController.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/DatePickerViewController.h"; sourceTree = "<group>"; };
+		71F3AA2D1F612369001036C8 /* DatePickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DatePickerViewController.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/DatePickerViewController.m"; sourceTree = "<group>"; };
+		71F3AA2E1F612369001036C8 /* EnumSelectorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EnumSelectorCell.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/EnumSelectorCell.h"; sourceTree = "<group>"; };
+		71F3AA2F1F612369001036C8 /* EnumSelectorCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EnumSelectorCell.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/EnumSelectorCell.m"; sourceTree = "<group>"; };
+		71F3AA301F612369001036C8 /* EnumSelectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EnumSelectViewController.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/EnumSelectViewController.h"; sourceTree = "<group>"; };
+		71F3AA311F612369001036C8 /* EnumSelectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EnumSelectViewController.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/EnumSelectViewController.m"; sourceTree = "<group>"; };
+		71F3AA321F612369001036C8 /* MonthPickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MonthPickerViewController.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/MonthPickerViewController.h"; sourceTree = "<group>"; };
+		71F3AA331F612369001036C8 /* MonthPickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MonthPickerViewController.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/MonthPickerViewController.m"; sourceTree = "<group>"; };
+		71F3AA341F612369001036C8 /* SRMonthPicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SRMonthPicker.h; path = "../../RedAnt ERP Mobile/common/CommonEditor/SRMonthPicker.h"; sourceTree = "<group>"; };
+		71F3AA351F612369001036C8 /* SRMonthPicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SRMonthPicker.m; path = "../../RedAnt ERP Mobile/common/CommonEditor/SRMonthPicker.m"; sourceTree = "<group>"; };
+		71F3AA481F612415001036C8 /* RTLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RTLabel.h; path = "../../RedAnt ERP Mobile/common/customUI/RTLabel.h"; sourceTree = "<group>"; };
+		71F3AA491F612415001036C8 /* RTLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RTLabel.m; path = "../../RedAnt ERP Mobile/common/customUI/RTLabel.m"; sourceTree = "<group>"; };
+		71F3AA4B1F6124A2001036C8 /* TouchImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchImageView.h; path = "../../RedAnt ERP Mobile/common/customUI/TouchImageView.h"; sourceTree = "<group>"; };
+		71F3AA4C1F6124A2001036C8 /* TouchImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TouchImageView.m; path = "../../RedAnt ERP Mobile/common/customUI/TouchImageView.m"; sourceTree = "<group>"; };
+		71F3AA4E1F6124C4001036C8 /* ImageUploadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageUploadViewController.h; path = "../../RedAnt ERP Mobile/common/customUI/ImageUploadViewController.h"; sourceTree = "<group>"; };
+		71F3AA4F1F6124C4001036C8 /* ImageUploadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ImageUploadViewController.m; path = "../../RedAnt ERP Mobile/common/customUI/ImageUploadViewController.m"; sourceTree = "<group>"; };
+		71F3AA511F6125ED001036C8 /* ImageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageViewController.h; path = "../../RedAnt ERP Mobile/common/customUI/ImageViewController.h"; sourceTree = "<group>"; };
+		71F3AA521F6125ED001036C8 /* ImageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ImageViewController.m; path = "../../RedAnt ERP Mobile/common/customUI/ImageViewController.m"; sourceTree = "<group>"; };
+		71F3AA551F624A88001036C8 /* signature.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = signature.storyboard; path = "../../RedAnt ERP Mobile/common/Functions/signature/signature.storyboard"; sourceTree = "<group>"; };
+		71F3AA561F624A88001036C8 /* SignatureView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SignatureView.h; path = "../../RedAnt ERP Mobile/common/Functions/signature/SignatureView.h"; sourceTree = "<group>"; };
+		71F3AA571F624A88001036C8 /* SignatureView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SignatureView.m; path = "../../RedAnt ERP Mobile/common/Functions/signature/SignatureView.m"; sourceTree = "<group>"; };
+		71F3AA581F624A88001036C8 /* SignatureViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SignatureViewController.h; path = "../../RedAnt ERP Mobile/common/Functions/signature/SignatureViewController.h"; sourceTree = "<group>"; };
+		71F3AA591F624A88001036C8 /* SignatureViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SignatureViewController.m; path = "../../RedAnt ERP Mobile/common/Functions/signature/SignatureViewController.m"; sourceTree = "<group>"; };
+		71F3AA5D1F624AD4001036C8 /* StrikethroughLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StrikethroughLabel.h; path = "../../RedAnt ERP Mobile/common/customUI/StrikethroughLabel.h"; sourceTree = "<group>"; };
+		71F3AA5E1F624AD4001036C8 /* StrikethroughLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = StrikethroughLabel.m; path = "../../RedAnt ERP Mobile/common/customUI/StrikethroughLabel.m"; sourceTree = "<group>"; };
+		71F3AA601F624B2F001036C8 /* BundleModelCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BundleModelCell.h; path = "../../RedAnt ERP Mobile/common/Functions/cart/BundleModelCell.h"; sourceTree = "<group>"; };
+		71F3AA611F624B2F001036C8 /* BundleModelCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BundleModelCell.m; path = "../../RedAnt ERP Mobile/common/Functions/cart/BundleModelCell.m"; sourceTree = "<group>"; };
+		71F3AA621F624B2F001036C8 /* BundleModelViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BundleModelViewController.h; path = "../../RedAnt ERP Mobile/common/Functions/cart/BundleModelViewController.h"; sourceTree = "<group>"; };
+		71F3AA631F624B2F001036C8 /* BundleModelViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BundleModelViewController.m; path = "../../RedAnt ERP Mobile/common/Functions/cart/BundleModelViewController.m"; sourceTree = "<group>"; };
+		71F3AA661F624E19001036C8 /* JKTimerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JKTimerManager.h; path = "../../RedAnt ERP Mobile/common/JKTimer/JKTimerManager.h"; sourceTree = "<group>"; };
+		71F3AA671F624E19001036C8 /* JKTimerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JKTimerManager.m; path = "../../RedAnt ERP Mobile/common/JKTimer/JKTimerManager.m"; sourceTree = "<group>"; };
+		71F3AA691F624EAF001036C8 /* AddressEditorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AddressEditorViewController.h; path = "../../RedAnt ERP Mobile/common/Functions/address/AddressEditorViewController.h"; sourceTree = "<group>"; };
+		71F3AA6A1F624EAF001036C8 /* AddressEditorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AddressEditorViewController.m; path = "../../RedAnt ERP Mobile/common/Functions/address/AddressEditorViewController.m"; sourceTree = "<group>"; };
+		71F3AA6C1F624EE0001036C8 /* CreditCardEditorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CreditCardEditorViewController.h; path = "../../RedAnt ERP Mobile/common/Functions/creditcard/CreditCardEditorViewController.h"; sourceTree = "<group>"; };
+		71F3AA6D1F624EE0001036C8 /* CreditCardEditorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CreditCardEditorViewController.m; path = "../../RedAnt ERP Mobile/common/Functions/creditcard/CreditCardEditorViewController.m"; sourceTree = "<group>"; };
+		71F3AA6F1F625F60001036C8 /* ContactListTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ContactListTableViewCell.h; path = "../../RedAnt ERP Mobile/common/Functions/contact/ContactListTableViewCell.h"; sourceTree = "<group>"; };
+		71F3AA701F625F60001036C8 /* ContactListTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ContactListTableViewCell.m; path = "../../RedAnt ERP Mobile/common/Functions/contact/ContactListTableViewCell.m"; sourceTree = "<group>"; };
+		71F3AA711F625F60001036C8 /* ContactListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ContactListViewController.h; path = "../../RedAnt ERP Mobile/common/Functions/contact/ContactListViewController.h"; sourceTree = "<group>"; };
+		71F3AA721F625F60001036C8 /* ContactListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ContactListViewController.m; path = "../../RedAnt ERP Mobile/common/Functions/contact/ContactListViewController.m"; sourceTree = "<group>"; };
+		71F3AA751F625FAD001036C8 /* ActiveViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ActiveViewController.h; path = "../../RedAnt ERP Mobile/common/ActiveViewController.h"; sourceTree = "<group>"; };
+		71F3AA761F625FAD001036C8 /* ActiveViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ActiveViewController.m; path = "../../RedAnt ERP Mobile/common/ActiveViewController.m"; sourceTree = "<group>"; };
+		71F3AA7B1F62617D001036C8 /* NetworkUtils+Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NetworkUtils+Contact.h"; path = "../../common/NetworkUtils+Contact.h"; sourceTree = "<group>"; };
+		71F3AA7C1F62617D001036C8 /* NetworkUtils+Contact.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NetworkUtils+Contact.m"; path = "../../common/NetworkUtils+Contact.m"; sourceTree = "<group>"; };
+		71F3AA7E1F626309001036C8 /* CustomIOSAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomIOSAlertView.h; path = "../../RedAnt ERP Mobile/common/customUI/CustomIOSAlertView.h"; sourceTree = "<group>"; };
+		71F3AA7F1F626309001036C8 /* CustomIOSAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CustomIOSAlertView.m; path = "../../RedAnt ERP Mobile/common/customUI/CustomIOSAlertView.m"; sourceTree = "<group>"; };
+		71F3AA811F6263B2001036C8 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = "<group>"; };
+		71F3AA821F6263B2001036C8 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = "<group>"; };
+		71F3AA841F626E14001036C8 /* RAConvertor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RAConvertor.h; path = ../../common/RAConvertor.h; sourceTree = "<group>"; };
+		71F3AA851F626E14001036C8 /* RAConvertor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RAConvertor.m; path = ../../common/RAConvertor.m; sourceTree = "<group>"; };
+		71F3AA871F62732A001036C8 /* FileCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileCache.h; path = ../../common/FileCache.h; sourceTree = "<group>"; };
+		71F3AA881F62732A001036C8 /* FileCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileCache.m; path = ../../common/FileCache.m; sourceTree = "<group>"; };
+		71F3AA8E1F6276B0001036C8 /* default_appearance.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = default_appearance.json; sourceTree = "<group>"; };
+		71F3AA901F627700001036C8 /* DefaultTableHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DefaultTableHeaderView.h; path = "../RedAnt ERP Mobile/common/customUI/DefaultTableHeaderView.h"; sourceTree = "<group>"; };
+		71F3AA911F627700001036C8 /* DefaultTableHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DefaultTableHeaderView.m; path = "../RedAnt ERP Mobile/common/customUI/DefaultTableHeaderView.m"; sourceTree = "<group>"; };
+		71F3AA931F6277DE001036C8 /* DefaultAppearance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultAppearance.h; sourceTree = "<group>"; };
+		71F3AA941F6277DE001036C8 /* DefaultAppearance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DefaultAppearance.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		71F3A99A1F5F8E22001036C8 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				71F3A9F61F5FA64F001036C8 /* libz.tbd in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		71F3A9941F5F8E22001036C8 = {
+			isa = PBXGroup;
+			children = (
+				71F3AA8A1F627676001036C8 /* appearance */,
+				71F3AA811F6263B2001036C8 /* MainViewController.h */,
+				71F3AA821F6263B2001036C8 /* MainViewController.m */,
+				71F3AA0E1F611FC4001036C8 /* testViewController.h */,
+				71F3AA0F1F611FC4001036C8 /* testViewController.m */,
+				71F3AA101F611FC4001036C8 /* testViewController.xib */,
+				71F3A99F1F5F8E22001036C8 /* RedAnt Mobile */,
+				71F3A99E1F5F8E22001036C8 /* Products */,
+				71F3A9F41F5FA64E001036C8 /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		71F3A99E1F5F8E22001036C8 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A99D1F5F8E22001036C8 /* RedAnt Mobile.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		71F3A99F1F5F8E22001036C8 /* RedAnt Mobile */ = {
+			isa = PBXGroup;
+			children = (
+				71F3AA541F624A78001036C8 /* signature */,
+				71F3AA131F612347001036C8 /* commonUI */,
+				71F3A9DD1F5FA479001036C8 /* utils */,
+				71F3A9D31F5FA2E0001036C8 /* network */,
+				71F3A9D11F5FA2A4001036C8 /* const.h */,
+				71F3A9D21F5FA2B3001036C8 /* config.h */,
+				71F3A9CE1F5FA277001036C8 /* BasicViewController.h */,
+				71F3A9CF1F5FA277001036C8 /* BasicViewController.m */,
+				71F3A9E11F5FA531001036C8 /* JLKeyboardListener.h */,
+				71F3A9E21F5FA531001036C8 /* JLKeyboardListener.m */,
+				71F3A9BF1F5FA109001036C8 /* login */,
+				71F3A9BA1F5F8E89001036C8 /* result */,
+				71F3A9A31F5F8E22001036C8 /* AppDelegate.h */,
+				71F3A9A41F5F8E22001036C8 /* AppDelegate.m */,
+				71F3A9A61F5F8E22001036C8 /* ViewController.h */,
+				71F3A9A71F5F8E22001036C8 /* ViewController.m */,
+				71F3A9A91F5F8E22001036C8 /* Main.storyboard */,
+				71F3A9AC1F5F8E22001036C8 /* Assets.xcassets */,
+				71F3A9AE1F5F8E22001036C8 /* LaunchScreen.storyboard */,
+				71F3A9B11F5F8E22001036C8 /* Info.plist */,
+				71F3A9A01F5F8E22001036C8 /* Supporting Files */,
+			);
+			path = "RedAnt Mobile";
+			sourceTree = "<group>";
+		};
+		71F3A9A01F5F8E22001036C8 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A9A11F5F8E22001036C8 /* main.m */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		71F3A9BA1F5F8E89001036C8 /* result */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A9B71F5F8E73001036C8 /* ResultViewController.h */,
+				71F3A9B81F5F8E73001036C8 /* ResultViewController.m */,
+				71F3A9BB1F5F8EAE001036C8 /* FullyShowViewController.h */,
+				71F3A9BC1F5F8EAE001036C8 /* FullyShowViewController.m */,
+			);
+			name = result;
+			sourceTree = "<group>";
+		};
+		71F3A9BF1F5FA109001036C8 /* login */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A9C01F5FA11F001036C8 /* login.json */,
+				71F3A9C31F5FA11F001036C8 /* LoginSwitchCell.h */,
+				71F3A9C41F5FA11F001036C8 /* LoginSwitchCell.m */,
+				71F3A9C51F5FA11F001036C8 /* LoginTextFiledCell.h */,
+				71F3A9C61F5FA11F001036C8 /* LoginTextFiledCell.m */,
+				71F3A9C71F5FA11F001036C8 /* LoginViewController.h */,
+				71F3A9C81F5FA11F001036C8 /* LoginViewController.m */,
+				71F3A9FA1F5FCC79001036C8 /* LoginSettingViewController.h */,
+				71F3A9FB1F5FCC79001036C8 /* LoginSettingViewController.m */,
+			);
+			name = login;
+			sourceTree = "<group>";
+		};
+		71F3A9D31F5FA2E0001036C8 /* network */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A9F71F5FA688001036C8 /* Reachability.h */,
+				71F3A9F81F5FA688001036C8 /* Reachability.m */,
+				71F3A9D41F5FA2F4001036C8 /* NetworkUtils.h */,
+				71F3A9D51F5FA2F4001036C8 /* NetworkUtils.m */,
+				71F3A9D71F5FA3B9001036C8 /* RAMobileNetwork.h */,
+				71F3A9D81F5FA3B9001036C8 /* RAMobileNetwork.m */,
+				71F3A9DA1F5FA458001036C8 /* RANetworkTaskDelegate.h */,
+				71F3A9DB1F5FA458001036C8 /* RANetworkTaskDelegate.m */,
+				71F3AA7B1F62617D001036C8 /* NetworkUtils+Contact.h */,
+				71F3AA7C1F62617D001036C8 /* NetworkUtils+Contact.m */,
+			);
+			name = network;
+			sourceTree = "<group>";
+		};
+		71F3A9DD1F5FA479001036C8 /* utils */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A9FD1F5FDDF3001036C8 /* AES */,
+				71F3A9E41F5FA54A001036C8 /* zip */,
+				71F3A9DE1F5FA484001036C8 /* RAUtils.h */,
+				71F3A9DF1F5FA484001036C8 /* RAUtils.m */,
+				71F3AA661F624E19001036C8 /* JKTimerManager.h */,
+				71F3AA671F624E19001036C8 /* JKTimerManager.m */,
+				71F3AA841F626E14001036C8 /* RAConvertor.h */,
+				71F3AA851F626E14001036C8 /* RAConvertor.m */,
+				71F3AA871F62732A001036C8 /* FileCache.h */,
+				71F3AA881F62732A001036C8 /* FileCache.m */,
+			);
+			name = utils;
+			sourceTree = "<group>";
+		};
+		71F3A9E41F5FA54A001036C8 /* zip */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A9E51F5FA557001036C8 /* crypt.h */,
+				71F3A9E61F5FA557001036C8 /* ioapi.c */,
+				71F3A9E71F5FA557001036C8 /* ioapi.h */,
+				71F3A9E81F5FA557001036C8 /* mztools.c */,
+				71F3A9E91F5FA557001036C8 /* mztools.h */,
+				71F3A9EA1F5FA557001036C8 /* unzip.c */,
+				71F3A9EB1F5FA557001036C8 /* zip.c */,
+				71F3A9EC1F5FA557001036C8 /* zip.h */,
+				71F3A9F11F5FA56E001036C8 /* ZipArchive.h */,
+				71F3A9F21F5FA56E001036C8 /* ZipArchive.mm */,
+			);
+			name = zip;
+			sourceTree = "<group>";
+		};
+		71F3A9F41F5FA64E001036C8 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A9F51F5FA64F001036C8 /* libz.tbd */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		71F3A9FD1F5FDDF3001036C8 /* AES */ = {
+			isa = PBXGroup;
+			children = (
+				71F3A9FE1F5FDDFE001036C8 /* AESCrypt.h */,
+				71F3A9FF1F5FDDFE001036C8 /* AESCrypt.m */,
+				71F3AA001F5FDDFE001036C8 /* LICENSE */,
+				71F3AA011F5FDDFE001036C8 /* NSData+Base64.h */,
+				71F3AA021F5FDDFE001036C8 /* NSData+Base64.m */,
+				71F3AA031F5FDDFE001036C8 /* NSData+CommonCrypto.h */,
+				71F3AA041F5FDDFE001036C8 /* NSData+CommonCrypto.m */,
+				71F3AA051F5FDDFE001036C8 /* NSString+Base64.h */,
+				71F3AA061F5FDDFE001036C8 /* NSString+Base64.m */,
+			);
+			name = AES;
+			sourceTree = "<group>";
+		};
+		71F3AA131F612347001036C8 /* commonUI */ = {
+			isa = PBXGroup;
+			children = (
+				71F3AA601F624B2F001036C8 /* BundleModelCell.h */,
+				71F3AA611F624B2F001036C8 /* BundleModelCell.m */,
+				71F3AA621F624B2F001036C8 /* BundleModelViewController.h */,
+				71F3AA631F624B2F001036C8 /* BundleModelViewController.m */,
+				71F3AA691F624EAF001036C8 /* AddressEditorViewController.h */,
+				71F3AA6A1F624EAF001036C8 /* AddressEditorViewController.m */,
+				71F3AA6C1F624EE0001036C8 /* CreditCardEditorViewController.h */,
+				71F3AA6D1F624EE0001036C8 /* CreditCardEditorViewController.m */,
+				71F3AA6F1F625F60001036C8 /* ContactListTableViewCell.h */,
+				71F3AA701F625F60001036C8 /* ContactListTableViewCell.m */,
+				71F3AA711F625F60001036C8 /* ContactListViewController.h */,
+				71F3AA721F625F60001036C8 /* ContactListViewController.m */,
+				71F3AA751F625FAD001036C8 /* ActiveViewController.h */,
+				71F3AA761F625FAD001036C8 /* ActiveViewController.m */,
+				71F3AA7E1F626309001036C8 /* CustomIOSAlertView.h */,
+				71F3AA7F1F626309001036C8 /* CustomIOSAlertView.m */,
+				71F3AA471F61240A001036C8 /* customUI */,
+				71F3AA141F612350001036C8 /* commonEditor */,
+			);
+			name = commonUI;
+			sourceTree = "<group>";
+		};
+		71F3AA141F612350001036C8 /* commonEditor */ = {
+			isa = PBXGroup;
+			children = (
+				71F3AA0C1F61151D001036C8 /* commoneditor.phone.xib */,
+				71F3AA151F612369001036C8 /* CommonEditor.storyboard */,
+				71F3AA161F612369001036C8 /* CommonEditorCellAction.h */,
+				71F3AA171F612369001036C8 /* CommonEditorCellAction.m */,
+				71F3AA181F612369001036C8 /* CommonEditorCellEdit.h */,
+				71F3AA191F612369001036C8 /* CommonEditorCellEdit.m */,
+				71F3AA1A1F612369001036C8 /* CommonEditorCellEnum.h */,
+				71F3AA1B1F612369001036C8 /* CommonEditorCellEnum.m */,
+				71F3AA1C1F612369001036C8 /* CommonEditorCellImg.h */,
+				71F3AA1D1F612369001036C8 /* CommonEditorCellImg.m */,
+				71F3AA1E1F612369001036C8 /* CommonEditorCellLabel.h */,
+				71F3AA1F1F612369001036C8 /* CommonEditorCellLabel.m */,
+				71F3AA201F612369001036C8 /* CommonEditorCellMAction.h */,
+				71F3AA211F612369001036C8 /* CommonEditorCellMAction.m */,
+				71F3AA221F612369001036C8 /* CommonEditorCellModel.h */,
+				71F3AA231F612369001036C8 /* CommonEditorCellModel.m */,
+				71F3AA241F612369001036C8 /* CommonEditorCellSignature.h */,
+				71F3AA251F612369001036C8 /* CommonEditorCellSignature.m */,
+				71F3AA261F612369001036C8 /* CommonEditorCellSwitch.h */,
+				71F3AA271F612369001036C8 /* CommonEditorCellSwitch.m */,
+				71F3AA281F612369001036C8 /* CommonEditorCellTextView.h */,
+				71F3AA291F612369001036C8 /* CommonEditorCellTextView.m */,
+				71F3AA2A1F612369001036C8 /* CommonEditorViewController.h */,
+				71F3AA2B1F612369001036C8 /* CommonEditorViewController.m */,
+				71F3AA2C1F612369001036C8 /* DatePickerViewController.h */,
+				71F3AA2D1F612369001036C8 /* DatePickerViewController.m */,
+				71F3AA2E1F612369001036C8 /* EnumSelectorCell.h */,
+				71F3AA2F1F612369001036C8 /* EnumSelectorCell.m */,
+				71F3AA301F612369001036C8 /* EnumSelectViewController.h */,
+				71F3AA311F612369001036C8 /* EnumSelectViewController.m */,
+				71F3AA321F612369001036C8 /* MonthPickerViewController.h */,
+				71F3AA331F612369001036C8 /* MonthPickerViewController.m */,
+				71F3AA341F612369001036C8 /* SRMonthPicker.h */,
+				71F3AA351F612369001036C8 /* SRMonthPicker.m */,
+			);
+			name = commonEditor;
+			sourceTree = "<group>";
+		};
+		71F3AA471F61240A001036C8 /* customUI */ = {
+			isa = PBXGroup;
+			children = (
+				71F3AA5D1F624AD4001036C8 /* StrikethroughLabel.h */,
+				71F3AA5E1F624AD4001036C8 /* StrikethroughLabel.m */,
+				71F3AA511F6125ED001036C8 /* ImageViewController.h */,
+				71F3AA521F6125ED001036C8 /* ImageViewController.m */,
+				71F3AA4E1F6124C4001036C8 /* ImageUploadViewController.h */,
+				71F3AA4F1F6124C4001036C8 /* ImageUploadViewController.m */,
+				71F3AA4B1F6124A2001036C8 /* TouchImageView.h */,
+				71F3AA4C1F6124A2001036C8 /* TouchImageView.m */,
+				71F3AA481F612415001036C8 /* RTLabel.h */,
+				71F3AA491F612415001036C8 /* RTLabel.m */,
+			);
+			name = customUI;
+			sourceTree = "<group>";
+		};
+		71F3AA541F624A78001036C8 /* signature */ = {
+			isa = PBXGroup;
+			children = (
+				71F3AA551F624A88001036C8 /* signature.storyboard */,
+				71F3AA561F624A88001036C8 /* SignatureView.h */,
+				71F3AA571F624A88001036C8 /* SignatureView.m */,
+				71F3AA581F624A88001036C8 /* SignatureViewController.h */,
+				71F3AA591F624A88001036C8 /* SignatureViewController.m */,
+			);
+			name = signature;
+			sourceTree = "<group>";
+		};
+		71F3AA8A1F627676001036C8 /* appearance */ = {
+			isa = PBXGroup;
+			children = (
+				71F3AA8E1F6276B0001036C8 /* default_appearance.json */,
+				71F3AA901F627700001036C8 /* DefaultTableHeaderView.h */,
+				71F3AA911F627700001036C8 /* DefaultTableHeaderView.m */,
+				71F3AA931F6277DE001036C8 /* DefaultAppearance.h */,
+				71F3AA941F6277DE001036C8 /* DefaultAppearance.m */,
+			);
+			name = appearance;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		71F3A99C1F5F8E22001036C8 /* RedAnt Mobile */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 71F3A9B41F5F8E22001036C8 /* Build configuration list for PBXNativeTarget "RedAnt Mobile" */;
+			buildPhases = (
+				71F3A9991F5F8E22001036C8 /* Sources */,
+				71F3A99A1F5F8E22001036C8 /* Frameworks */,
+				71F3A99B1F5F8E22001036C8 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "RedAnt Mobile";
+			productName = "RedAnt Mobile";
+			productReference = 71F3A99D1F5F8E22001036C8 /* RedAnt Mobile.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		71F3A9951F5F8E22001036C8 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0830;
+				ORGANIZATIONNAME = Ray;
+				TargetAttributes = {
+					71F3A99C1F5F8E22001036C8 = {
+						CreatedOnToolsVersion = 8.3.2;
+						DevelopmentTeam = HXWLAA5YN5;
+						ProvisioningStyle = Automatic;
+					};
+				};
+			};
+			buildConfigurationList = 71F3A9981F5F8E22001036C8 /* Build configuration list for PBXProject "RedAnt Mobile" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 71F3A9941F5F8E22001036C8;
+			productRefGroup = 71F3A99E1F5F8E22001036C8 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				71F3A99C1F5F8E22001036C8 /* RedAnt Mobile */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		71F3A99B1F5F8E22001036C8 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				71F3A9B01F5F8E22001036C8 /* LaunchScreen.storyboard in Resources */,
+				71F3AA0D1F61151D001036C8 /* commoneditor.phone.xib in Resources */,
+				71F3AA5A1F624A88001036C8 /* signature.storyboard in Resources */,
+				71F3AA121F611FC4001036C8 /* testViewController.xib in Resources */,
+				71F3A9AD1F5F8E22001036C8 /* Assets.xcassets in Resources */,
+				71F3AA8F1F6276B0001036C8 /* default_appearance.json in Resources */,
+				71F3A9AB1F5F8E22001036C8 /* Main.storyboard in Resources */,
+				71F3A9C91F5FA11F001036C8 /* login.json in Resources */,
+				71F3AA361F612369001036C8 /* CommonEditor.storyboard in Resources */,
+				71F3AA081F5FDDFE001036C8 /* LICENSE in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		71F3A9991F5F8E22001036C8 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				71F3AA3E1F612369001036C8 /* CommonEditorCellSignature.m in Sources */,
+				71F3AA441F612369001036C8 /* EnumSelectViewController.m in Sources */,
+				71F3A9E31F5FA531001036C8 /* JLKeyboardListener.m in Sources */,
+				71F3A9A81F5F8E22001036C8 /* ViewController.m in Sources */,
+				71F3AA921F627700001036C8 /* DefaultTableHeaderView.m in Sources */,
+				71F3AA5F1F624AD4001036C8 /* StrikethroughLabel.m in Sources */,
+				71F3A9EE1F5FA557001036C8 /* mztools.c in Sources */,
+				71F3AA861F626E14001036C8 /* RAConvertor.m in Sources */,
+				71F3A9F01F5FA557001036C8 /* zip.c in Sources */,
+				71F3AA7D1F62617D001036C8 /* NetworkUtils+Contact.m in Sources */,
+				71F3AA3B1F612369001036C8 /* CommonEditorCellLabel.m in Sources */,
+				71F3AA891F62732A001036C8 /* FileCache.m in Sources */,
+				71F3AA651F624B2F001036C8 /* BundleModelViewController.m in Sources */,
+				71F3AA5B1F624A88001036C8 /* SignatureView.m in Sources */,
+				71F3A9CC1F5FA11F001036C8 /* LoginTextFiledCell.m in Sources */,
+				71F3AA371F612369001036C8 /* CommonEditorCellAction.m in Sources */,
+				71F3A9D61F5FA2F4001036C8 /* NetworkUtils.m in Sources */,
+				71F3AA381F612369001036C8 /* CommonEditorCellEdit.m in Sources */,
+				71F3AA641F624B2F001036C8 /* BundleModelCell.m in Sources */,
+				71F3A9FC1F5FCC79001036C8 /* LoginSettingViewController.m in Sources */,
+				71F3AA4D1F6124A2001036C8 /* TouchImageView.m in Sources */,
+				71F3A9A51F5F8E22001036C8 /* AppDelegate.m in Sources */,
+				71F3AA0A1F5FDDFE001036C8 /* NSData+CommonCrypto.m in Sources */,
+				71F3AA0B1F5FDDFE001036C8 /* NSString+Base64.m in Sources */,
+				71F3AA111F611FC4001036C8 /* testViewController.m in Sources */,
+				71F3AA431F612369001036C8 /* EnumSelectorCell.m in Sources */,
+				71F3AA3F1F612369001036C8 /* CommonEditorCellSwitch.m in Sources */,
+				71F3A9E01F5FA484001036C8 /* RAUtils.m in Sources */,
+				71F3AA401F612369001036C8 /* CommonEditorCellTextView.m in Sources */,
+				71F3AA4A1F612415001036C8 /* RTLabel.m in Sources */,
+				71F3AA3C1F612369001036C8 /* CommonEditorCellMAction.m in Sources */,
+				71F3AA501F6124C4001036C8 /* ImageUploadViewController.m in Sources */,
+				71F3AA451F612369001036C8 /* MonthPickerViewController.m in Sources */,
+				71F3AA741F625F60001036C8 /* ContactListViewController.m in Sources */,
+				71F3A9A21F5F8E22001036C8 /* main.m in Sources */,
+				71F3AA951F6277DE001036C8 /* DefaultAppearance.m in Sources */,
+				71F3A9CD1F5FA11F001036C8 /* LoginViewController.m in Sources */,
+				71F3A9D01F5FA277001036C8 /* BasicViewController.m in Sources */,
+				71F3AA531F6125ED001036C8 /* ImageViewController.m in Sources */,
+				71F3AA411F612369001036C8 /* CommonEditorViewController.m in Sources */,
+				71F3AA6E1F624EE0001036C8 /* CreditCardEditorViewController.m in Sources */,
+				71F3A9ED1F5FA557001036C8 /* ioapi.c in Sources */,
+				71F3AA391F612369001036C8 /* CommonEditorCellEnum.m in Sources */,
+				71F3AA731F625F60001036C8 /* ContactListTableViewCell.m in Sources */,
+				71F3AA3A1F612369001036C8 /* CommonEditorCellImg.m in Sources */,
+				71F3A9EF1F5FA557001036C8 /* unzip.c in Sources */,
+				71F3AA071F5FDDFE001036C8 /* AESCrypt.m in Sources */,
+				71F3AA831F6263B2001036C8 /* MainViewController.m in Sources */,
+				71F3A9CB1F5FA11F001036C8 /* LoginSwitchCell.m in Sources */,
+				71F3AA801F626309001036C8 /* CustomIOSAlertView.m in Sources */,
+				71F3AA5C1F624A88001036C8 /* SignatureViewController.m in Sources */,
+				71F3A9F91F5FA688001036C8 /* Reachability.m in Sources */,
+				71F3AA461F612369001036C8 /* SRMonthPicker.m in Sources */,
+				71F3AA421F612369001036C8 /* DatePickerViewController.m in Sources */,
+				71F3AA6B1F624EAF001036C8 /* AddressEditorViewController.m in Sources */,
+				71F3AA771F625FAD001036C8 /* ActiveViewController.m in Sources */,
+				71F3A9D91F5FA3B9001036C8 /* RAMobileNetwork.m in Sources */,
+				71F3AA091F5FDDFE001036C8 /* NSData+Base64.m in Sources */,
+				71F3A9DC1F5FA458001036C8 /* RANetworkTaskDelegate.m in Sources */,
+				71F3AA3D1F612369001036C8 /* CommonEditorCellModel.m in Sources */,
+				71F3AA681F624E19001036C8 /* JKTimerManager.m in Sources */,
+				71F3A9F31F5FA56E001036C8 /* ZipArchive.mm in Sources */,
+				71F3A9BD1F5F8EAE001036C8 /* FullyShowViewController.m in Sources */,
+				71F3A9B91F5F8E73001036C8 /* ResultViewController.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		71F3A9A91F5F8E22001036C8 /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				71F3A9AA1F5F8E22001036C8 /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+		71F3A9AE1F5F8E22001036C8 /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				71F3A9AF1F5F8E22001036C8 /* Base */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		71F3A9B21F5F8E22001036C8 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 10.3;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+			};
+			name = Debug;
+		};
+		71F3A9B31F5F8E22001036C8 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 10.3;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		71F3A9B51F5F8E22001036C8 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				DEVELOPMENT_TEAM = HXWLAA5YN5;
+				INFOPLIST_FILE = "RedAnt Mobile/Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = "usai.redant.RedAnt-Mobile";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		71F3A9B61F5F8E22001036C8 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				DEVELOPMENT_TEAM = HXWLAA5YN5;
+				INFOPLIST_FILE = "RedAnt Mobile/Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = "usai.redant.RedAnt-Mobile";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		71F3A9981F5F8E22001036C8 /* Build configuration list for PBXProject "RedAnt Mobile" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				71F3A9B21F5F8E22001036C8 /* Debug */,
+				71F3A9B31F5F8E22001036C8 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		71F3A9B41F5F8E22001036C8 /* Build configuration list for PBXNativeTarget "RedAnt Mobile" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				71F3A9B51F5F8E22001036C8 /* Debug */,
+				71F3A9B61F5F8E22001036C8 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 71F3A9951F5F8E22001036C8 /* Project object */;
+}

+ 7 - 0
RedAnt Mobile/RedAnt Mobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:RedAnt Mobile.xcodeproj">
+   </FileRef>
+</Workspace>

BIN
RedAnt Mobile/RedAnt Mobile.xcodeproj/project.xcworkspace/xcuserdata/ray.xcuserdatad/UserInterfaceState.xcuserstate


+ 91 - 0
RedAnt Mobile/RedAnt Mobile.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/RedAnt Mobile.xcscheme

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0830"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "71F3A99C1F5F8E22001036C8"
+               BuildableName = "RedAnt Mobile.app"
+               BlueprintName = "RedAnt Mobile"
+               ReferencedContainer = "container:RedAnt Mobile.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "71F3A99C1F5F8E22001036C8"
+            BuildableName = "RedAnt Mobile.app"
+            BlueprintName = "RedAnt Mobile"
+            ReferencedContainer = "container:RedAnt Mobile.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "71F3A99C1F5F8E22001036C8"
+            BuildableName = "RedAnt Mobile.app"
+            BlueprintName = "RedAnt Mobile"
+            ReferencedContainer = "container:RedAnt Mobile.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "71F3A99C1F5F8E22001036C8"
+            BuildableName = "RedAnt Mobile.app"
+            BlueprintName = "RedAnt Mobile"
+            ReferencedContainer = "container:RedAnt Mobile.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 22 - 0
RedAnt Mobile/RedAnt Mobile.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>SchemeUserState</key>
+	<dict>
+		<key>RedAnt Mobile.xcscheme</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict>
+		<key>71F3A99C1F5F8E22001036C8</key>
+		<dict>
+			<key>primary</key>
+			<true/>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 24 - 0
RedAnt Mobile/RedAnt Mobile/AppDelegate.h

@@ -0,0 +1,24 @@
+//
+//  AppDelegate.h
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+@property (strong,nonatomic) NSString* user;
+@property (strong,nonatomic) NSString * password;
+@property (strong,nonatomic) NSString* build;
+@property (strong,nonatomic) NSString* shortver;
+
+@property bool bEnable_Cache;//图片缓存
+
+@property (nonatomic,strong) NSMutableDictionary *urgencyDic;///<程序闪退需要保存的数据
+@end
+

+ 53 - 0
RedAnt Mobile/RedAnt Mobile/AppDelegate.m

@@ -0,0 +1,53 @@
+//
+//  AppDelegate.m
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import "AppDelegate.h"
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    // Override point for customization after application launch.
+    
+    self.bEnable_Cache = true;
+    return YES;
+}
+
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
+}
+
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
+}
+
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+
+@end

+ 48 - 0
RedAnt Mobile/RedAnt Mobile/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,48 @@
+{
+  "images" : [
+    {
+      "idiom" : "iphone",
+      "size" : "20x20",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "20x20",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 23 - 0
RedAnt Mobile/RedAnt Mobile/Assets.xcassets/setting.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "设置.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "设置@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "设置@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
RedAnt Mobile/RedAnt Mobile/Assets.xcassets/setting.imageset/设置.png


BIN
RedAnt Mobile/RedAnt Mobile/Assets.xcassets/setting.imageset/设置@2x.png


BIN
RedAnt Mobile/RedAnt Mobile/Assets.xcassets/setting.imageset/设置@3x.png


+ 27 - 0
RedAnt Mobile/RedAnt Mobile/Base.lproj/LaunchScreen.storyboard

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
+                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="53" y="375"/>
+        </scene>
+    </scenes>
+</document>

+ 343 - 0
RedAnt Mobile/RedAnt Mobile/Base.lproj/Main.storyboard

@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12120" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="Oh6-Jk-fWH">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12088"/>
+        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="tne-QT-ifu">
+            <objects>
+                <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+            </objects>
+        </scene>
+        <!--Login View Controller-->
+        <scene sceneID="GQN-dS-T2m">
+            <objects>
+                <viewController storyboardIdentifier="LoginViewController" id="Oh6-Jk-fWH" customClass="LoginViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="3qW-uN-D4Q"/>
+                        <viewControllerLayoutGuide type="bottom" id="MDq-l9-lwo"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="82J-L4-G3a">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="RedAnt Mobile" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3rO-M6-J99">
+                                <rect key="frame" x="0.0" y="100" width="375" height="50"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="50" id="NhQ-AY-VlX"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="boldSystem" pointSize="30"/>
+                                <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" bouncesZoom="NO" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="50" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="enM-qf-Iwt">
+                                <rect key="frame" x="0.0" y="190" width="375" height="200"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="200" id="dvZ-nU-JS5"/>
+                                </constraints>
+                                <prototypes>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="LoginTextFiledCell" rowHeight="50" id="XVx-Pj-3l6" customClass="LoginTextFiledCell">
+                                        <rect key="frame" x="0.0" y="28" width="375" height="50"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="XVx-Pj-3l6" id="j2k-Zt-2jZ">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="50"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" placeholder="place order" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="O29-II-M5r">
+                                                    <rect key="frame" x="10" y="5" width="355" height="39.5"/>
+                                                    <nil key="textColor"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <textInputTraits key="textInputTraits"/>
+                                                    <connections>
+                                                        <outlet property="delegate" destination="Oh6-Jk-fWH" id="m1t-1R-TSm"/>
+                                                    </connections>
+                                                </textField>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="bottom" secondItem="O29-II-M5r" secondAttribute="bottom" constant="5" id="4fw-Jn-0HL"/>
+                                                <constraint firstItem="O29-II-M5r" firstAttribute="top" secondItem="j2k-Zt-2jZ" secondAttribute="top" constant="5" id="5AN-Ub-Nwr"/>
+                                                <constraint firstAttribute="trailing" secondItem="O29-II-M5r" secondAttribute="trailing" constant="10" id="dnU-CY-4ah"/>
+                                                <constraint firstItem="O29-II-M5r" firstAttribute="leading" secondItem="j2k-Zt-2jZ" secondAttribute="leading" constant="10" id="uxz-P8-BK5"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                        <connections>
+                                            <outlet property="textBox" destination="O29-II-M5r" id="MXJ-XS-gtP"/>
+                                        </connections>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="LoginSwitchCell" rowHeight="50" id="5oS-6f-gIz" customClass="LoginSwitchCell">
+                                        <rect key="frame" x="0.0" y="78" width="375" height="50"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="5oS-6f-gIz" id="Tg3-Nx-TXI">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="50"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="记住我的登录状态" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="68b-FX-thz">
+                                                    <rect key="frame" x="10" y="5" width="285" height="39.5"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EGU-U3-Ae6">
+                                                    <rect key="frame" x="315" y="9.5" width="52" height="31"/>
+                                                    <connections>
+                                                        <action selector="switchClick:" destination="5oS-6f-gIz" eventType="valueChanged" id="eP0-AU-jXq"/>
+                                                    </connections>
+                                                </switch>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="EGU-U3-Ae6" firstAttribute="centerY" secondItem="68b-FX-thz" secondAttribute="centerY" id="ACK-jJ-6Xc"/>
+                                                <constraint firstAttribute="bottom" secondItem="68b-FX-thz" secondAttribute="bottom" constant="5" id="JHq-cR-Eqn"/>
+                                                <constraint firstItem="68b-FX-thz" firstAttribute="leading" secondItem="Tg3-Nx-TXI" secondAttribute="leading" constant="10" id="SWv-va-nu1"/>
+                                                <constraint firstAttribute="trailing" secondItem="68b-FX-thz" secondAttribute="trailing" constant="80" id="buY-e0-G25"/>
+                                                <constraint firstItem="68b-FX-thz" firstAttribute="top" secondItem="Tg3-Nx-TXI" secondAttribute="top" constant="5" id="fDo-bV-hNH"/>
+                                                <constraint firstAttribute="trailing" secondItem="EGU-U3-Ae6" secondAttribute="trailing" constant="10" id="kem-cK-b3i"/>
+                                                <constraint firstItem="EGU-U3-Ae6" firstAttribute="leading" secondItem="68b-FX-thz" secondAttribute="trailing" constant="20" id="xdD-qi-RRD"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                        <connections>
+                                            <outlet property="msgLabel" destination="68b-FX-thz" id="F4i-hQ-AFo"/>
+                                            <outlet property="stateSwitch" destination="EGU-U3-Ae6" id="iO2-dT-Eer"/>
+                                        </connections>
+                                    </tableViewCell>
+                                </prototypes>
+                                <connections>
+                                    <outlet property="dataSource" destination="Oh6-Jk-fWH" id="etR-aD-5BW"/>
+                                    <outlet property="delegate" destination="Oh6-Jk-fWH" id="rMS-kC-pPX"/>
+                                </connections>
+                            </tableView>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9dT-Bs-qIE">
+                                <rect key="frame" x="10" y="627" width="30" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="DWd-cc-XuP"/>
+                                    <constraint firstAttribute="width" constant="30" id="fle-oc-oiL"/>
+                                </constraints>
+                                <state key="normal" image="setting"/>
+                                <connections>
+                                    <action selector="settingBtnClick:" destination="Oh6-Jk-fWH" eventType="touchUpInside" id="a0A-BM-MSs"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NDF-jH-CA9">
+                                <rect key="frame" x="20" y="420" width="335" height="50"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="50" id="oHp-9V-FnQ"/>
+                                </constraints>
+                                <state key="normal" title="Login">
+                                    <color key="titleColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                </state>
+                                <connections>
+                                    <action selector="loginBtnClick:" destination="Oh6-Jk-fWH" eventType="touchUpInside" id="I52-G3-8Go"/>
+                                </connections>
+                            </button>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="v1.0" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pqa-JO-nsA">
+                                <rect key="frame" x="197" y="637" width="168" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="rTj-Nb-bxm"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Sfr-OB-A5y">
+                                <rect key="frame" x="227" y="495" width="128" height="30"/>
+                                <state key="normal" title="Retrieve Password"/>
+                            </button>
+                        </subviews>
+                        <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstItem="MDq-l9-lwo" firstAttribute="top" secondItem="9dT-Bs-qIE" secondAttribute="bottom" constant="10" id="4Fy-Kj-fnj"/>
+                            <constraint firstItem="NDF-jH-CA9" firstAttribute="leading" secondItem="82J-L4-G3a" secondAttribute="leading" constant="20" id="4T4-aH-f5f"/>
+                            <constraint firstAttribute="trailingMargin" secondItem="Sfr-OB-A5y" secondAttribute="trailing" constant="4" id="8qH-eh-Pc7"/>
+                            <constraint firstItem="enM-qf-Iwt" firstAttribute="top" secondItem="3rO-M6-J99" secondAttribute="bottom" constant="40" id="AiN-Tc-vlT"/>
+                            <constraint firstItem="Sfr-OB-A5y" firstAttribute="top" secondItem="NDF-jH-CA9" secondAttribute="bottom" constant="25" id="DiM-Ok-EtU"/>
+                            <constraint firstAttribute="trailing" secondItem="3rO-M6-J99" secondAttribute="trailing" id="L7q-W8-eQ0"/>
+                            <constraint firstItem="NDF-jH-CA9" firstAttribute="top" secondItem="enM-qf-Iwt" secondAttribute="bottom" constant="30" id="P31-RN-gyW"/>
+                            <constraint firstItem="3rO-M6-J99" firstAttribute="leading" secondItem="82J-L4-G3a" secondAttribute="leading" id="ZrJ-Zc-Bh5"/>
+                            <constraint firstItem="9dT-Bs-qIE" firstAttribute="leading" secondItem="82J-L4-G3a" secondAttribute="leading" constant="10" id="dzu-oH-8Sg"/>
+                            <constraint firstAttribute="trailing" secondItem="pqa-JO-nsA" secondAttribute="trailing" constant="10" id="exT-k3-zkX"/>
+                            <constraint firstItem="enM-qf-Iwt" firstAttribute="centerX" secondItem="82J-L4-G3a" secondAttribute="centerX" id="fvD-Y1-fjT"/>
+                            <constraint firstAttribute="trailing" secondItem="NDF-jH-CA9" secondAttribute="trailing" constant="20" id="gax-j3-RJl"/>
+                            <constraint firstItem="pqa-JO-nsA" firstAttribute="bottom" secondItem="9dT-Bs-qIE" secondAttribute="bottom" id="u9I-FB-QTh"/>
+                            <constraint firstAttribute="trailing" secondItem="enM-qf-Iwt" secondAttribute="trailing" id="vEE-LN-y0U"/>
+                            <constraint firstItem="Sfr-OB-A5y" firstAttribute="leading" secondItem="82J-L4-G3a" secondAttribute="leadingMargin" constant="211" id="w00-4m-80H"/>
+                            <constraint firstItem="enM-qf-Iwt" firstAttribute="leading" secondItem="82J-L4-G3a" secondAttribute="leading" id="y1G-Yd-lgw"/>
+                            <constraint firstItem="3rO-M6-J99" firstAttribute="top" secondItem="3qW-uN-D4Q" secondAttribute="bottom" constant="80" id="y1k-fy-nvZ"/>
+                        </constraints>
+                    </view>
+                    <connections>
+                        <outlet property="loginBtn" destination="NDF-jH-CA9" id="Cs8-Hz-ohe"/>
+                        <outlet property="loginTable" destination="enM-qf-Iwt" id="VEl-Nr-pdt"/>
+                        <outlet property="settingBtn" destination="9dT-Bs-qIE" id="jYg-cV-r0g"/>
+                        <outlet property="versionLabel" destination="pqa-JO-nsA" id="GF9-Dn-dlu"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="o3o-1m-1FZ" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="920.79999999999995" y="123.68815592203899"/>
+        </scene>
+        <!--Server Setting-->
+        <scene sceneID="BVj-Ht-sjd">
+            <objects>
+                <viewController storyboardIdentifier="LoginSettingViewController" title="Server Setting" id="Lq6-b0-PbF" customClass="LoginSettingViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="n2Q-DQ-qrh"/>
+                        <viewControllerLayoutGuide type="bottom" id="IBa-Rw-HYJ"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="yjr-j3-Yaf">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Company ID" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OZs-Wi-1F2">
+                                <rect key="frame" x="26" y="30" width="94" height="21"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Name" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="JkQ-Sd-805">
+                                <rect key="frame" x="26" y="61" width="323" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="WQz-Yv-k0u"/>
+                                </constraints>
+                                <nil key="textColor"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <textInputTraits key="textInputTraits"/>
+                                <connections>
+                                    <outlet property="delegate" destination="Lq6-b0-PbF" id="E88-69-qZH"/>
+                                </connections>
+                            </textField>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Password" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vD8-kq-Tbx">
+                                <rect key="frame" x="26" y="101" width="323" height="21"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="J0x-c0-REl">
+                                <rect key="frame" x="26" y="132" width="323" height="30"/>
+                                <nil key="textColor"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <textInputTraits key="textInputTraits" secureTextEntry="YES"/>
+                                <connections>
+                                    <outlet property="delegate" destination="Lq6-b0-PbF" id="m3J-Bo-PeV"/>
+                                </connections>
+                            </textField>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="W1j-7t-7Iq">
+                                <rect key="frame" x="158" y="213" width="59" height="30"/>
+                                <state key="normal" title="Connect"/>
+                                <connections>
+                                    <action selector="onConnectClick:" destination="Lq6-b0-PbF" eventType="touchUpInside" id="rW5-3E-S0B"/>
+                                </connections>
+                            </button>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstItem="JkQ-Sd-805" firstAttribute="centerX" secondItem="yjr-j3-Yaf" secondAttribute="centerX" id="0W2-hL-zSy"/>
+                            <constraint firstItem="J0x-c0-REl" firstAttribute="leading" secondItem="JkQ-Sd-805" secondAttribute="leading" id="0pQ-Dd-RXb"/>
+                            <constraint firstItem="OZs-Wi-1F2" firstAttribute="leading" secondItem="yjr-j3-Yaf" secondAttribute="leadingMargin" constant="10" id="3LL-Ce-S29"/>
+                            <constraint firstItem="vD8-kq-Tbx" firstAttribute="top" secondItem="JkQ-Sd-805" secondAttribute="bottom" constant="10" id="85j-EY-MjI"/>
+                            <constraint firstItem="J0x-c0-REl" firstAttribute="top" secondItem="vD8-kq-Tbx" secondAttribute="bottom" constant="10.5" id="92l-qc-Ta6"/>
+                            <constraint firstItem="J0x-c0-REl" firstAttribute="trailing" secondItem="JkQ-Sd-805" secondAttribute="trailing" id="HZA-Av-uG1"/>
+                            <constraint firstItem="OZs-Wi-1F2" firstAttribute="top" secondItem="n2Q-DQ-qrh" secondAttribute="bottom" constant="10" id="HdL-OA-17H"/>
+                            <constraint firstItem="JkQ-Sd-805" firstAttribute="top" secondItem="OZs-Wi-1F2" secondAttribute="bottom" constant="10" id="R58-Ay-I3M"/>
+                            <constraint firstItem="W1j-7t-7Iq" firstAttribute="centerX" secondItem="yjr-j3-Yaf" secondAttribute="centerX" id="S5y-Kj-dNr"/>
+                            <constraint firstItem="JkQ-Sd-805" firstAttribute="leading" secondItem="vD8-kq-Tbx" secondAttribute="leading" id="UyA-qA-B2B"/>
+                            <constraint firstItem="JkQ-Sd-805" firstAttribute="leading" secondItem="yjr-j3-Yaf" secondAttribute="leadingMargin" constant="10" id="V4t-LK-yVM"/>
+                            <constraint firstItem="JkQ-Sd-805" firstAttribute="trailing" secondItem="vD8-kq-Tbx" secondAttribute="trailing" id="fiU-wZ-bvZ"/>
+                            <constraint firstItem="W1j-7t-7Iq" firstAttribute="top" secondItem="J0x-c0-REl" secondAttribute="bottom" constant="51" id="m38-fR-oCU"/>
+                        </constraints>
+                    </view>
+                    <connections>
+                        <outlet property="internalTextField" destination="J0x-c0-REl" id="6AG-6E-Rrz"/>
+                        <outlet property="nameTextField" destination="JkQ-Sd-805" id="WvJ-nB-A4Q"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="UAH-zw-wka" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="1706" y="124"/>
+        </scene>
+        <!--Result View Controller-->
+        <scene sceneID="spM-H5-A1H">
+            <objects>
+                <viewController id="Ekb-S8-yfK" customClass="ResultViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="QN9-la-fqb"/>
+                        <viewControllerLayoutGuide type="bottom" id="ifv-Jz-opQ"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="dFG-t0-Cuv">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" bounces="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wBM-b0-JRO">
+                                <rect key="frame" x="0.0" y="20" width="375" height="647"/>
+                                <subviews>
+                                    <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" dataMode="prototypes" style="plain" separatorStyle="default" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="IdY-hf-Rfp">
+                                        <rect key="frame" x="0.0" y="1" width="712" height="645"/>
+                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="712" id="8cn-Ix-LnS"/>
+                                        </constraints>
+                                        <prototypes>
+                                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="tCell" id="Z8S-HU-HU3">
+                                                <rect key="frame" x="0.0" y="28" width="712" height="44"/>
+                                                <autoresizingMask key="autoresizingMask"/>
+                                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Z8S-HU-HU3" id="dk1-pX-E1r">
+                                                    <rect key="frame" x="0.0" y="0.0" width="712" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                </tableViewCellContentView>
+                                            </tableViewCell>
+                                        </prototypes>
+                                        <connections>
+                                            <outlet property="dataSource" destination="Ekb-S8-yfK" id="Xqw-IK-F1M"/>
+                                            <outlet property="delegate" destination="Ekb-S8-yfK" id="OeX-tg-FFz"/>
+                                        </connections>
+                                    </tableView>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="IdY-hf-Rfp" secondAttribute="trailing" constant="-337" id="CNR-Yx-5ll"/>
+                                    <constraint firstItem="IdY-hf-Rfp" firstAttribute="top" secondItem="wBM-b0-JRO" secondAttribute="top" constant="1" id="Xjb-Av-XIt"/>
+                                    <constraint firstItem="IdY-hf-Rfp" firstAttribute="centerY" secondItem="wBM-b0-JRO" secondAttribute="centerY" id="hQM-i5-xul"/>
+                                    <constraint firstItem="IdY-hf-Rfp" firstAttribute="leading" secondItem="wBM-b0-JRO" secondAttribute="leading" id="lkr-4F-Blk"/>
+                                    <constraint firstAttribute="bottom" secondItem="IdY-hf-Rfp" secondAttribute="bottom" constant="1" id="vLc-bY-2Lk"/>
+                                </constraints>
+                            </scrollView>
+                        </subviews>
+                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <constraints>
+                            <constraint firstItem="wBM-b0-JRO" firstAttribute="bottom" secondItem="ifv-Jz-opQ" secondAttribute="top" id="Nu0-Vp-ZAh"/>
+                            <constraint firstItem="wBM-b0-JRO" firstAttribute="leading" secondItem="dFG-t0-Cuv" secondAttribute="leading" id="ciV-OT-89f"/>
+                            <constraint firstItem="wBM-b0-JRO" firstAttribute="top" secondItem="QN9-la-fqb" secondAttribute="bottom" id="dQB-on-U7m"/>
+                            <constraint firstAttribute="trailing" secondItem="wBM-b0-JRO" secondAttribute="trailing" id="nko-B7-ire"/>
+                        </constraints>
+                    </view>
+                    <connections>
+                        <outlet property="scrollview" destination="wBM-b0-JRO" id="8vF-OO-ThB"/>
+                        <outlet property="tableview" destination="IdY-hf-Rfp" id="4uF-UP-C5a"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="wtL-wa-ubV" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="-718" y="-34"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="setting" width="60" height="60"/>
+    </resources>
+</document>

+ 36 - 0
RedAnt Mobile/RedAnt Mobile/BasicViewController.h

@@ -0,0 +1,36 @@
+//
+//  BasicViewController.h
+//  RA Image
+//
+//  Created by Jack on 2017/4/27.
+//  Copyright © 2017年 USAI. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "const.h"
+#import "config.h"
+#import "RAMobileNetwork.h"
+#import "AppDelegate.h"
+#import "RAUtils.h"
+#import "JLKeyboardListener.h"
+
+extern NSString *const LogoutNotification;
+
+@interface BasicViewController : UIViewController<JLKeyboardListenerDelegate>
+
+#pragma mark - Property
+@property (nonatomic,weak) UIView *currentFirstResponder;
+@property (nonatomic,strong,readonly) NSNotificationCenter *notificationCenter;
+
+#pragma mark - Method
+
+- (id)userDefaultsValue:(NSString *)key;
+- (void)setUserDefaultsValue:(id)value forKey:(NSString *)key;
+- (void)userLogout:(NSNotification *)notification;
+- (UIViewController *)viewControllerInStoryboard:(NSString *)storyboard withId:(NSString *)storyboardId;
+- (void)tapResignFirstResponder:(UITapGestureRecognizer *)tap;
+- (void)removeFirstResponderTap;
+- (void)registListenKeyboard;
+- (void)startListenKeyboard;
+- (void)stopListenKeyboard;
+@end

+ 167 - 0
RedAnt Mobile/RedAnt Mobile/BasicViewController.m

@@ -0,0 +1,167 @@
+//
+//  BasicViewController.m
+//  RA Image
+//
+//  Created by Jack on 2017/4/27.
+//  Copyright © 2017年 USAI. All rights reserved.
+//
+
+#import "BasicViewController.h"
+
+NSString *const LogoutNotification = @"LogouNotification";
+
+@interface BasicViewController ()
+
+@property (nonatomic,strong) JLKeyboardListener *keyboardListener;
+@property (nonatomic,assign) CGFloat translateY;
+@property (nonatomic,strong) UITapGestureRecognizer *firstResponderTap;
+
+@end
+
+@implementation BasicViewController
+
+- (NSNotificationCenter *)notificationCenter {
+    return [NSNotificationCenter defaultCenter];
+}
+
+- (void)dealloc {
+    [self.notificationCenter removeObserver:self];
+}
+
+- (void)registNofitication {
+    [self.notificationCenter addObserver:self selector:@selector(userLogout:) name:LogoutNotification object:nil];
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+   
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapResignFirstResponder:)];
+    [self.view addGestureRecognizer:tap];
+    self.firstResponderTap = tap;
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self startListenKeyboard];
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    if (self.currentFirstResponder) {
+        [self tapResignFirstResponder:nil];
+    }
+    [self stopListenKeyboard];
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+- (id)userDefaultsValue:(NSString *)key {
+    
+    return [[NSUserDefaults standardUserDefaults] valueForKey:key];
+    
+}
+
+- (void)setUserDefaultsValue:(id)value forKey:(NSString *)key {
+    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
+    [userDefaults setValue:value forKey:key];
+    [userDefaults synchronize];
+}
+
+- (void)userLogout:(NSNotification *)notification {
+    if (self.presentedViewController) {
+        [self dismissViewControllerAnimated:NO completion:nil];
+        return;
+    }
+    if (self.navigationController) {
+        [self.navigationController popToRootViewControllerAnimated:NO];
+    }
+}
+
+- (UIViewController *)viewControllerInStoryboard:(NSString *)storyboard withId:(NSString *)storyboardId {
+    return [[UIStoryboard storyboardWithName:storyboard bundle:nil] instantiateViewControllerWithIdentifier:storyboardId];
+}
+
+
+#pragma mark - First Responder
+
+- (void)tapResignFirstResponder:(UITapGestureRecognizer *)tap {
+    if (self.currentFirstResponder) {
+        [self.currentFirstResponder resignFirstResponder];
+        self.currentFirstResponder = nil;
+        self.translateY = 0;
+    } else {
+        [self.view endEditing:YES];
+    }
+}
+
+- (void)removeFirstResponderTap {
+    if (self.firstResponderTap) {
+        [self.view removeGestureRecognizer:self.firstResponderTap];
+        self.firstResponderTap = nil;
+    }
+}
+
+#pragma mark - Keyboard Listener
+
+- (void)registListenKeyboard {
+    self.keyboardListener = [[JLKeyboardListener alloc] init];
+    self.keyboardListener.delegate = self;
+}
+
+- (void)startListenKeyboard {
+    if (self.keyboardListener) {
+        [self.keyboardListener startListen];
+    }
+}
+
+- (void)stopListenKeyboard {
+    if (self.keyboardListener) {
+        [self.keyboardListener stopListen];
+    }
+}
+
+#pragma mark - KeyboardListener Delegate
+
+- (void)keyboardWillShowHeight:(CGFloat)height withDuration:(NSTimeInterval)duration {
+    if (!self.currentFirstResponder) {
+        return;
+    }
+    CGFloat y = CGRectGetMaxY(self.currentFirstResponder.frame);
+    CGFloat maxH = CGRectGetMaxY(self.view.frame);
+    if (maxH - height < y) {
+        self.translateY = maxH - height - y;
+        
+        CGAffineTransform transform = self.view.transform;
+        transform = CGAffineTransformTranslate(transform, 0, self.translateY);
+        self.view.transform = transform;
+    }
+    
+}
+
+- (void)keyboardWillHideHeight:(CGFloat)height withDuration:(NSTimeInterval)duration {
+    self.view.transform = CGAffineTransformIdentity;
+}
+
+- (void)keyboardWillChangeHeight:(CGFloat)height offset:(CGFloat)heightOffset withDuration:(NSTimeInterval)duration {
+    if (!self.currentFirstResponder) {
+        return;
+    }
+    self.view.transform = CGAffineTransformIdentity;
+    CGFloat y = CGRectGetMaxY(self.currentFirstResponder.frame);
+    CGFloat maxH = CGRectGetMaxY(self.view.frame);
+    if (maxH - height < y) {
+        self.translateY = maxH - height - y;
+        CGAffineTransform transform = self.view.transform;
+        transform = CGAffineTransformTranslate(transform, 0, self.translateY);
+        self.view.transform = transform;
+    }
+    
+}
+
+
+
+@end

+ 14 - 0
RedAnt Mobile/RedAnt Mobile/FullyShowViewController.h

@@ -0,0 +1,14 @@
+//
+//  FullyShowViewController.h
+//  phoneTest
+//
+//  Created by Ray on 05/09/2017.
+//
+//
+
+#import <UIKit/UIKit.h>
+
+@interface FullyShowViewController : UIViewController
+@property (weak, nonatomic) IBOutlet UITextView *textView;
+@property (strong, nonatomic)  NSString *text;
+@end

+ 38 - 0
RedAnt Mobile/RedAnt Mobile/FullyShowViewController.m

@@ -0,0 +1,38 @@
+//
+//  FullyShowViewController.m
+//  phoneTest
+//
+//  Created by Ray on 05/09/2017.
+//
+//
+
+#import "FullyShowViewController.h"
+
+@interface FullyShowViewController ()
+
+@end
+
+@implementation FullyShowViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.textView.text = self.text;
+    // 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

+ 38 - 0
RedAnt Mobile/RedAnt Mobile/Info.plist

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIMainStoryboardFile</key>
+	<string>Main</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>

+ 39 - 0
RedAnt Mobile/RedAnt Mobile/JLKeyboardListener.h

@@ -0,0 +1,39 @@
+//
+//  JLKeyboardListener.h
+//  Keyboard
+//
+//  Created by Jack on 2017/4/11.
+//  Copyright © 2017年 buakaw. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@protocol JLKeyboardListenerDelegate <NSObject>
+
+@required
+- (void)keyboardWillShowHeight:(CGFloat)height withDuration:(NSTimeInterval)duration;
+
+- (void)keyboardWillHideHeight:(CGFloat)height withDuration:(NSTimeInterval)duration;
+
+/**
+ 键盘高度发生改变
+
+ @param height 新的键盘高度
+ @param heightOffset 发生改变偏移量,大于0表示高度增加
+ @param duration 动画持续时间
+ */
+- (void)keyboardWillChangeHeight:(CGFloat)height offset:(CGFloat)heightOffset withDuration:(NSTimeInterval)duration;
+
+@end
+
+@interface JLKeyboardListener : NSObject
+
+@property (nonatomic,weak) id<JLKeyboardListenerDelegate> delegate;
+
+@property (nonatomic,assign,readonly) CGFloat currentKeyboardHeight;
+
+- (void)startListen;
+
+- (void)stopListen;
+
+@end

+ 119 - 0
RedAnt Mobile/RedAnt Mobile/JLKeyboardListener.m

@@ -0,0 +1,119 @@
+//
+//  JLKeyboardListener.m
+//  Keyboard
+//
+//  Created by Jack on 2017/4/11.
+//  Copyright © 2017年 buakaw. All rights reserved.
+//
+
+#import "JLKeyboardListener.h"
+
+@interface JLKeyboardListener ()
+
+@property (nonatomic,assign) CGFloat keyboardHeight;
+@property (nonatomic,assign) NSTimeInterval keyboardAnimationDuration;
+@property (nonatomic,assign) BOOL showsKeyboard;
+
+@end
+
+@implementation JLKeyboardListener
+
+
+- (instancetype)init {
+    if (self = [super init]) {
+        self.showsKeyboard = NO;
+    }
+    return self;
+}
+
+- (void)dealloc {
+    [self stopListen];
+}
+
+- (void)startListen {
+    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
+    // 键盘通知
+    [notificationCenter addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
+    [notificationCenter addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
+    [notificationCenter addObserver:self selector:@selector(keyboardChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
+}
+
+- (void)stopListen {
+    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
+    [notificationCenter removeObserver:self];
+}
+
+
+#pragma mark - keyboard Notification
+
+/**键盘隐藏*/
+- (void)keyboardWillHide:(NSNotification *)notification {
+    
+    if (self.showsKeyboard) {
+        self.showsKeyboard = NO;
+
+        if (self.delegate && [self.delegate respondsToSelector:@selector(keyboardWillHideHeight:withDuration:)]) {
+            [self.delegate keyboardWillHideHeight:self.keyboardHeight withDuration:self.keyboardAnimationDuration];
+        }
+    }
+}
+
+/**键盘显示*/
+- (void)keyboardWillShow:(NSNotification *)notification {
+    
+    NSTimeInterval duration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
+    CGRect begin = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
+    CGRect end = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
+    
+    if (duration == 0) {
+        duration = 0.25;
+    }
+    self.keyboardAnimationDuration = duration;
+    if (!self.showsKeyboard) {
+        // 第三方键盘三次回调,仅执行最后一次(仅以搜狗输入法作的测试)
+        if (begin.size.height > 0 && begin.origin.y - end.origin.y > 0) {
+            
+            self.showsKeyboard = YES;
+            self.keyboardHeight = end.size.height;
+            if (self.delegate && [self.delegate respondsToSelector:@selector(keyboardWillShowHeight:withDuration:)]) {
+                [self.delegate keyboardWillShowHeight:self.keyboardHeight withDuration:self.keyboardAnimationDuration];
+            }
+            
+        }
+    }
+
+    
+}
+
+/**在使用过程中切换键盘*/
+- (void)keyboardChangeFrame:(NSNotification *)notification {
+    // 在屏幕旋转时也会走这个方法,但是此时键盘会 hide -> show -> changeFrame
+    if (self.showsKeyboard) {
+        CGRect begin = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
+        CGRect end = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
+        
+        // 在ip6s中使用搜狗输入法和系统键盘切换时发现
+        // sougou --> sys : 282 -> 258
+        // sys --> sougou : 258 -> 0 -> 216 -> 282 也就是说系统键盘先下去隐藏,再弹出搜狗,在弹出搜狗的过程中在216处有回调
+        
+        CGFloat offset = end.size.height - begin.size.height;
+        self.keyboardHeight = end.size.height;
+        
+        if (offset != 0) {
+            NSTimeInterval changeFrameAnimationDuartion = 0.25;
+            if (self.delegate && [self.delegate respondsToSelector:@selector(keyboardWillChangeHeight:offset:withDuration:)]) {
+                [self.delegate keyboardWillChangeHeight:self.keyboardHeight offset:offset withDuration:changeFrameAnimationDuartion];
+            }
+        }
+        
+        
+    }
+}
+
+#pragma mark - Getter
+
+- (CGFloat)currentKeyboardHeight {
+    return self.keyboardHeight;
+}
+
+@end

+ 17 - 0
RedAnt Mobile/RedAnt Mobile/LoginSettingViewController.h

@@ -0,0 +1,17 @@
+//
+//  LoginSettingViewController.h
+//  RA Image
+//
+//  Created by Jack on 2017/4/27.
+//  Copyright © 2017年 USAI. All rights reserved.
+//
+
+#import "BasicViewController.h"
+
+static NSString *kScanAddress = @"ServerSetting";
+
+@interface LoginSettingViewController : BasicViewController
+
+@property (nonatomic,copy) void(^returnValue)(NSString *);
+
+@end

+ 258 - 0
RedAnt Mobile/RedAnt Mobile/LoginSettingViewController.m

@@ -0,0 +1,258 @@
+//
+//  LoginSettingViewController.m
+//  RA Image
+//
+//  Created by Jack on 2017/4/27.
+//  Copyright © 2017年 USAI. All rights reserved.
+//
+
+#import "LoginSettingViewController.h"
+//#import "ScannerViewController.h"
+
+
+
+@interface LoginSettingViewController ()<UITextFieldDelegate>
+
+@property (strong, nonatomic) IBOutlet UITextField *nameTextField;
+@property (strong, nonatomic) IBOutlet UITextField *internalTextField;
+@property (nonatomic,copy) NSString *checkedAddress;
+
+@end
+
+@implementation LoginSettingViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    UIView *v = [UIView new];
+    [self.view insertSubview:v atIndex:0];
+    
+    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(OnBackClick:)];
+//    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Scan" style:UIBarButtonItemStylePlain target:self action:@selector(scanItemClick:)];
+    
+    [self loadAddress];
+    [self registListenKeyboard];
+    
+}
+
+- (IBAction)onConnectClick:(id)sender {
+    NSString *company = self.nameTextField.text;
+    NSString *password = self.internalTextField.text;
+if (password.length==0)
+{
+    [RAUtils message_alert:@"Password can not be empty" title:@"Server setting" controller:self];
+    return;
+}
+    if (company.length==0)
+    {
+        [RAUtils message_alert:@"Company ID can not be empty" title:@"Server setting" controller:self];
+        return;
+    }
+    NSMutableDictionary* params = [@{@"company_id":company,@"password":password} mutableCopy];
+    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+    //    appDelegate.address = self.address;
+    __weak typeof(self) weakself = self;
+    NSString* title=@"Request server information ";
+    UIAlertView *alert = [RAUtils waiting_alert:@"Please wait" title:title];
+    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+
+        NSDictionary *result_json = [RAMobileNetwork require_server:params];
+        dispatch_async(dispatch_get_main_queue(), ^{
+            [alert dismissWithClickedButtonIndex:0 animated:YES];
+            int result = [[result_json objectForKey:@"result"] intValue];
+            result=2;
+            switch (result) {
+                case RESULT_FALSE:
+                {
+                    //code not exist;
+                    
+//                    [RAUtils message_alert:weakself.verify_msg0 title:@"Warring" controller:weakself];
+                    //                            [weakself.view makeToast:weakself.verify_msg0 duration:3.0 position:CSToastPositionCenter];
+                    break;
+                }
+                case RESULT_TRUE:
+                {
+
+                    //            NSString *externalAddr = weakself.externalTextField.text;
+                    NSMutableDictionary *addressDic = [NSMutableDictionary dictionary];
+                    
+                    NSString* url = result_json[@"url"];
+                    if(url.length==0)
+                        url=@"";
+                        [addressDic setObject:url forKey:@"serverAddress"];
+                    [addressDic setObject:password forKey:@"password"];
+                    //            if (externalAddr.length) {
+                    //                [addressDic setObject:externalAddr forKey:@"externalAddress"];
+                    //            }
+                    
+                        [addressDic setObject:company forKey:@"companyID"];
+                    
+                    
+                    [weakself setUserDefaultsValue:addressDic forKey:kScanAddress];
+                    break;
+                }
+                case RESULT_NET_ERROR:
+                {
+                    [RAUtils message_alert:@"Can not connect to server" title:title controller:weakself];
+                }
+                default:
+                    break;
+            }
+            
+        });
+        
+        //  }
+    });
+    
+}
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+- (void)loadAddress {
+    NSDictionary *addressDic = [self userDefaultsValue:kScanAddress];
+    if (addressDic) {
+        NSString* company=addressDic[@"companyID"];
+        NSString* password=addressDic[@"password"];
+
+        self.internalTextField.text = password;
+        self.nameTextField.text = company;
+//        NSUInteger selectedIndex = [[addressDic objectForKey:@"selectedIndex"] integerValue];
+//        switch (selectedIndex) {
+//            case 0:
+//            case 1: {
+//                [self internalCheckBtnClick:self.internalCheckBtn];
+//            }
+//                break;
+//            case 2: {
+//                [self externalCheckBtnClick:self.externalCheckBtn];
+//            }
+//                break;
+//                
+//            default:
+//                break;
+//        }
+    } else {
+//        [self internalCheckBtnClick:self.internalCheckBtn];
+    }
+}
+
+
+#pragma mark - Button Click
+
+- (void)OnBackClick:(UIBarButtonItem *)sender {
+    
+    [self dismissViewControllerAnimated:false completion:nil];
+ /*   self.checkedAddress = nil;
+    NSUInteger selectedIndex = 1;
+    self.checkedAddress = self.internalTextField.text;
+//    if (self.internalCheckBtn.selected) {
+//        self.checkedAddress = self.internalTextField.text;
+//        selectedIndex = 1;
+//    }
+//    if (self.externalCheckBtn.selected) {
+//        self.checkedAddress = self.externalTextField.text;
+//        selectedIndex = 2;
+//    }
+    
+    if (self.returnValue) {
+        self.returnValue(self.checkedAddress);
+    }
+    __weak typeof(self) weakself = self;
+    [self.navigationController dismissViewControllerAnimated:YES completion:^{
+        if (weakself.checkedAddress.length) {
+            // 保存信息
+            NSString *name = weakself.nameTextField.text;
+            NSString *internalAddr = weakself.internalTextField.text;
+//            NSString *externalAddr = weakself.externalTextField.text;
+            NSMutableDictionary *addressDic = [NSMutableDictionary dictionary];
+            if (internalAddr.length) {
+                [addressDic setObject:internalAddr forKey:@"serverAddress"];
+            }
+//            if (externalAddr.length) {
+//                [addressDic setObject:externalAddr forKey:@"externalAddress"];
+//            }
+            if (name.length) {
+                [addressDic setObject:name forKey:@"name"];
+            }
+            [addressDic setObject:@(selectedIndex) forKey:@"selectedIndex"];
+            [weakself setUserDefaultsValue:addressDic forKey:kScanAddress];
+        }
+    }];*/
+}
+//
+//- (void)scanItemClick:(UIBarButtonItem *)sender {
+//    
+//    __weak typeof(self) weakself = self;
+//    ScannerViewController *scannerVC = [[UIStoryboard storyboardWithName:@"cam_scan" bundle:nil] instantiateViewControllerWithIdentifier:@"NewScannerViewController"];
+//    scannerVC.returnCode = ^(NSString *code) {
+//        // 扫描成功保存扫描值
+//        if (code.length) {
+//
+//            if (weakself) {
+//                __strong typeof(weakself) strongself = weakself;
+//                
+//                NSArray *dataArr = [code componentsSeparatedByString:@";"];
+//                if (dataArr.count == 3) {
+//                    NSString *name = [dataArr objectAtIndex:0];
+//                    NSString *internalAddr = [dataArr objectAtIndex:2];
+////                    NSString *externalAddr = [dataArr objectAtIndex:2];
+//                    
+//                    strongself.nameTextField.text = name;
+//                    strongself.internalTextField.text = internalAddr;
+////                    strongself.externalTextField.text = externalAddr;
+//                }
+//                else if (dataArr.count == 2) {
+//                    NSString *name = [dataArr objectAtIndex:0];
+//                    NSString *internalAddr = [dataArr objectAtIndex:1];
+//                    //                    NSString *externalAddr = [dataArr objectAtIndex:2];
+//                    
+//                    strongself.nameTextField.text = name;
+//                    strongself.internalTextField.text = internalAddr;
+//                    //                    strongself.externalTextField.text = externalAddr;
+//                }
+//                else {
+//                    [RAUtils alert_view:@"Wrong QR-CODE?" title:@"Can not setup server"];
+////                    strongself.nameTextField.text = nil;
+////                    strongself.internalTextField.text = [dataArr firstObject];
+////                    strongself.externalTextField.text = nil;
+//                }
+//                
+//            }
+//            
+//        }
+//    };
+//    [self presentViewController:scannerVC animated:YES completion:nil];
+//    
+//    
+//}
+
+//- (IBAction)internalCheckBtnClick:(UIButton *)sender {
+//    sender.selected = !sender.selected;
+//    if (sender.selected) self.externalCheckBtn.selected = NO;
+//}
+//
+//- (IBAction)externalCheckBtnClick:(UIButton *)sender {
+//    sender.selected = !sender.selected;
+//    if (sender.selected) self.internalCheckBtn.selected = NO;
+//}
+
+#pragma mark - TextField Delegate
+
+
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
+    self.currentFirstResponder = textField;
+    return YES;
+}
+
+- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
+    return YES;
+}
+
+
+
+
+@end

+ 26 - 0
RedAnt Mobile/RedAnt Mobile/LoginSwitchCell.h

@@ -0,0 +1,26 @@
+//
+//  LoginSwitchCell.h
+//  RA Image
+//
+//  Created by Jack on 2017/4/27.
+//  Copyright © 2017年 USAI. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@protocol LoginSwitchDelegate <NSObject>
+
+@optional
+
+- (void)switchButton:(UISwitch *)switchBtn valueChange:(BOOL)value;
+
+@end
+
+@interface LoginSwitchCell : UITableViewCell
+
+@property (strong, nonatomic) IBOutlet UILabel *msgLabel;
+@property (strong, nonatomic) IBOutlet UISwitch *stateSwitch;
+
+@property (nonatomic,weak) id<LoginSwitchDelegate> delegate;
+
+@end

+ 29 - 0
RedAnt Mobile/RedAnt Mobile/LoginSwitchCell.m

@@ -0,0 +1,29 @@
+//
+//  LoginSwitchCell.m
+//  RA Image
+//
+//  Created by Jack on 2017/4/27.
+//  Copyright © 2017年 USAI. All rights reserved.
+//
+
+#import "LoginSwitchCell.h"
+
+@implementation LoginSwitchCell
+
+- (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
+}
+- (IBAction)switchClick:(UISwitch *)sender {
+    if (self.delegate && [self.delegate respondsToSelector:@selector(switchButton:valueChange:)]) {
+        [self.delegate switchButton:sender valueChange:sender.isOn];
+    }
+}
+
+@end

+ 16 - 0
RedAnt Mobile/RedAnt Mobile/LoginTextFiledCell.h

@@ -0,0 +1,16 @@
+//
+//  LoginTextFiledCell.h
+//  RA Image
+//
+//  Created by Jack on 2017/4/27.
+//  Copyright © 2017年 USAI. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface LoginTextFiledCell : UITableViewCell
+
+@property (strong, nonatomic) IBOutlet UITextField *textBox;
+
+
+@end

+ 24 - 0
RedAnt Mobile/RedAnt Mobile/LoginTextFiledCell.m

@@ -0,0 +1,24 @@
+//
+//  LoginTextFiledCell.m
+//  RA Image
+//
+//  Created by Jack on 2017/4/27.
+//  Copyright © 2017年 USAI. All rights reserved.
+//
+
+#import "LoginTextFiledCell.h"
+
+@implementation LoginTextFiledCell
+
+- (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

+ 13 - 0
RedAnt Mobile/RedAnt Mobile/LoginViewController.h

@@ -0,0 +1,13 @@
+//
+//  LoginViewController.h
+//  RA Image
+//
+//  Created by Ray on 27/04/2017.
+//  Copyright © 2017 USAI. All rights reserved.
+//
+
+#import "BasicViewController.h"
+
+@interface LoginViewController : BasicViewController
+
+@end

+ 284 - 0
RedAnt Mobile/RedAnt Mobile/LoginViewController.m

@@ -0,0 +1,284 @@
+//
+//  LoginViewController.m
+//  RA Image
+//
+//  Created by Ray on 27/04/2017.
+//  Copyright © 2017 USAI. All rights reserved.
+//
+
+#import "LoginViewController.h"
+#import "LoginTextFiledCell.h"
+#import "LoginSwitchCell.h"
+#import "LoginSettingViewController.h"
+
+static NSString *kRememberLogin = @"RememberLogin";
+static NSString *kLoginUserInfo = @"UserInfo";
+
+@interface LoginViewController ()<UITableViewDelegate,UITableViewDataSource,LoginSwitchDelegate,UITextFieldDelegate>
+{
+    BOOL _autoShowSetting;
+}
+@property (strong, nonatomic) IBOutlet UITableView *loginTable;
+@property (nonatomic,strong) NSDictionary *dataDic;
+@property (strong, nonatomic) IBOutlet UILabel *versionLabel;
+@property (strong, nonatomic) IBOutlet UIButton *loginBtn;
+@property (strong, nonatomic) IBOutlet UIButton *settingBtn;
+@property (nonatomic,copy) NSString *address;
+@property (nonatomic,copy) NSString *user;
+@property (nonatomic,copy) NSString *pwd;
+
+
+@end
+
+@implementation LoginViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    _autoShowSetting = NO;
+    [self initUserData];
+    [self loadData];
+    [self.loginTable reloadData];
+    [self registListenKeyboard];
+    
+    self.loginBtn.layer.cornerRadius = 25.0f;
+    self.loginBtn.clipsToBounds = YES;
+    
+    NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
+    NSString* build =[infoDict objectForKey:@"CFBundleVersion"];
+    NSString* short_version =[infoDict objectForKey:@"CFBundleShortVersionString"];
+    self.versionLabel.text = [NSString stringWithFormat:@"Ver: %@.%@",short_version,build];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if (_autoShowSetting) {
+         [self settingBtnClick:self.settingBtn];
+        _autoShowSetting = NO;
+    }
+}
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+#pragma mark - Private
+
+- (void)setAddress:(NSString *)address {
+    _address = address;
+    if (!address.length) {
+        _autoShowSetting = YES;
+    } else {
+        _autoShowSetting = NO;
+    }
+}
+
+- (void)loadData {
+    NSString *path = [[NSBundle mainBundle] pathForResource:@"login.json" ofType:nil];
+    NSData *data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedIfSafe error:nil];
+    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
+    self.dataDic = dic;
+}
+
+- (void)initUserData {
+    NSDictionary *addressDic = [self userDefaultsValue:kScanAddress];
+    if (addressDic) {
+//        NSUInteger selectedIndex = [[addressDic objectForKey:@"selectedIndex"] integerValue];
+//        if (selectedIndex == 1) {
+//            self.address = [addressDic objectForKey:@"serverAddress"];
+//        }
+//        if (selectedIndex == 2) {
+//            self.address = [addressDic objectForKey:@"serverAddress"];
+//        }
+        self.address = [addressDic objectForKey:@"serverAddress"];
+    }
+    
+    if (!self.address.length){
+        _autoShowSetting = YES;
+        return;
+    }
+    _autoShowSetting = NO;
+    
+    NSDictionary *userData = [self userDefaultsValue:kLoginUserInfo];
+    if (userData) {
+//        self.address = [userData objectForKey:@"address"];
+        self.user = [userData objectForKey:@"user"];
+        self.pwd = [userData objectForKey:@"pwd"];
+    }
+}
+
+- (void)prepareUserData { // 登录取数据
+    
+    int count = [[self.dataDic objectForKey:@"count"] intValue];
+    for (int i = 0; i < count; i++) {
+        NSDictionary *itemDic = [self.dataDic objectForKey:[NSString stringWithFormat:@"item_%d",i]];
+        if ([[itemDic objectForKey:@"type"] isEqualToString:@"text"]) {
+            LoginTextFiledCell *cell = [self.loginTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
+            NSString *placeOrder = cell.textBox.placeholder;
+            if ([placeOrder isEqualToString:@"Address"]) {
+                self.address = cell.textBox.text;
+            } else if ([placeOrder isEqualToString:@"user name"]) {
+                self.user = cell.textBox.text;
+            } else if ([placeOrder isEqualToString:@"password"]) {
+                self.pwd = cell.textBox.text;
+            }
+        }
+    }
+    
+}
+
+#pragma mark - Orientation
+
+- (BOOL)shouldAutorotate {
+    return YES;
+}
+
+- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
+    return UIInterfaceOrientationPortrait;
+}
+
+- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
+    return UIInterfaceOrientationMaskPortrait;
+}
+
+#pragma mark - DataSource
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return [[self.dataDic objectForKey:@"count"] intValue];
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *itemDic = [self.dataDic objectForKey:[NSString stringWithFormat:@"item_%ld",indexPath.row]];
+    
+    NSString *type = [itemDic objectForKey:@"type"];
+    BOOL rememberValue = [[self userDefaultsValue:kRememberLogin] boolValue];
+    
+    if ([type isEqualToString:@"text"]) {
+        
+        LoginTextFiledCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LoginTextFiledCell"];
+        cell.textBox.placeholder = [itemDic objectForKey:@"place_order"];
+        BOOL editable = [[itemDic objectForKey:@"edit"] boolValue];
+        cell.textBox.enabled = editable;
+        NSString *placeOrder = cell.textBox.placeholder;
+        if ([placeOrder isEqualToString:@"Address"]) {
+            cell.textBox.text = self.address;
+        } else if ([placeOrder isEqualToString:@"user name"]) {
+            cell.textBox.text = self.user;
+        } else if ([placeOrder isEqualToString:@"password"]) {
+            cell.textBox.text = self.pwd;
+        }
+        cell.textBox.secureTextEntry = [[itemDic objectForKey:@"security"] boolValue];
+        return cell;
+    
+    } else if ([type isEqualToString:@"switch"]) {
+        
+        LoginSwitchCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LoginSwitchCell"];
+        cell.msgLabel.text = [itemDic objectForKey:@"tip_msg"];
+        cell.stateSwitch.on = rememberValue;
+        cell.delegate = self;
+        return cell;
+    }
+    
+    return nil;
+}
+
+#pragma mark - Delegate
+
+- (void)switchButton:(UISwitch *)switchBtn valueChange:(BOOL)value {
+    
+    [self setUserDefaultsValue:@(value) forKey:kRememberLogin];
+}
+
+#pragma mark - Button Click
+
+- (IBAction)loginBtnClick:(UIButton *)sender {
+    [self prepareUserData];
+    if (!self.address.length) {
+        [RAUtils message_alert:@"Please choose an address in setting" title:@"Warning" controller:self];
+        return;
+    }
+    
+    if (!self.user.length) {
+        [RAUtils message_alert:@"User name cann't be blank" title:@"Warning" controller:self];
+        return;
+    }
+    
+    if (!self.pwd.length) {
+        [RAUtils message_alert:@"Password cann't be blank" title:@"Warning" controller:self];
+        return;
+    }
+/*    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+    appDelegate.address = self.address;
+    __weak typeof(self) weakself = self;
+    UIAlertView *alert = [RAUtils waiting_alert:@"Please wait" title:@"Login"];
+    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+        if (weakself) {
+            __strong typeof(weakself) strongself = weakself;
+            NSDictionary *loginDic = [RAINetwork Login:strongself.user password:strongself.pwd];
+            dispatch_async(dispatch_get_main_queue(), ^{
+                [alert dismissWithClickedButtonIndex:0 animated:YES];
+                int result = [[loginDic objectForKey:@"result"] intValue];
+                BOOL rememberLogin = [[strongself userDefaultsValue:kRememberLogin] boolValue];
+                if (result == RESULT_TRUE) {
+                    if (!rememberLogin) {
+                        [self setUserDefaultsValue:nil forKey:kLoginUserInfo];
+                    } else {
+                        [strongself setUserDefaultsValue:@{@"address" : strongself.address,@"user" : strongself.user,@"pwd" : strongself.pwd} forKey:kLoginUserInfo];
+                    }
+                    appDelegate.bLogin = YES;
+                    appDelegate.user = strongself.user;
+                    appDelegate.password = strongself.pwd;
+                    appDelegate.companyName = [loginDic objectForKey:@"company_name"];
+                    [appDelegate loadCompanyIcon:[loginDic objectForKey:@"company_icon"]];
+                    appDelegate.modeList = [loginDic objectForKey:@"modellist"];
+                    [appDelegate showNormalRootVC];
+                } else {
+                    NSString *msg = [loginDic objectForKey:@"err_msg"];
+                    [RAUtils message_alert:msg title:@"Warning" controller:strongself];
+                }
+            });
+
+        }
+    });*/
+}
+
+- (IBAction)settingBtnClick:(UIButton *)sender {
+    
+    LoginSettingViewController *loginSettingVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"LoginSettingViewController"];
+    __weak typeof(self) weakself = self;
+    loginSettingVC.returnValue = ^(NSString *address) {
+        if (weakself) {
+            __strong typeof(weakself) strongself = weakself;
+            strongself.address = address;
+            [strongself.loginTable reloadData];
+        }
+    };
+    UINavigationController *settingRootNav = [[UINavigationController alloc] initWithRootViewController:loginSettingVC];
+    [self presentViewController:settingRootNav animated:YES completion:nil];
+    
+}
+
+#pragma mark - TextField Delegate 
+
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
+    
+    return YES;
+}
+
+- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
+    
+    return YES;
+}
+
+- (void)textFieldDidEndEditing:(UITextField *)textField {
+    self.currentFirstResponder = nil;
+}
+
+- (void)textFieldDidBeginEditing:(UITextField *)textField {
+    self.currentFirstResponder = textField;
+}
+
+
+@end

+ 13 - 0
RedAnt Mobile/RedAnt Mobile/RAMobileNetwork.h

@@ -0,0 +1,13 @@
+//
+//  RAMobileNetwork.h
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import "NetworkUtils.h"
+
+@interface RAMobileNetwork : NetworkUtils
++(NSDictionary*)require_server : (NSMutableDictionary*) params;
+@end

+ 121 - 0
RedAnt Mobile/RedAnt Mobile/RAMobileNetwork.m

@@ -0,0 +1,121 @@
+//
+//  RAMobileNetwork.m
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import "config.h"
+#import "RAUtils.h"
+#import "AESCrypt.h"
+#import "RAMobileNetwork.h"
+#import "AppDelegate.h"
+@implementation RAMobileNetwork
++(NSDictionary*)require_server : (NSMutableDictionary*) params
+{
+    
+    
+    
+    // params[@"_operate"]=@"valid_upload";
+    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+    
+    NSData *data = [self get_json:URL_REQUIRE_SERVER parameters:params file:nil];
+    NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
+    return resultDic;
+}
+
+
+
++(NSData*)get_json : (NSString*) url parameters:(NSMutableDictionary *) params file:(NSString *) file //delegate:(id < NSURLConnectionDelegate >)delegate
+{
+    
+    
+    
+    
+    //    NSString* e=[AESCrypt AES128Encrypt:@"密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 高级加密标准Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。 " key:@"usai2010"];
+    //    DebugLog(e);
+    //    NSString* d=[AESCrypt decrypt:@"VzB4+lENfbzWX7ggHh2Os1P69l5YBzKmM51yqA37AfoKgPY8bJgdK8M4WvF+wDyOsLWP\/o8H5+bHMivQp1u8wM2QV7SYzgzPwV85QKtYWIzEgLe9T0HO69EdutWz7k1rdAT\/mftsRin0Hy5SHk7txTZT\/zPH5X+FQiExCTFm5Zus39HYvp+VxCX4+kYeymn8B63AUd3mRQyscUvDjfgU2olKR\/TP8PV3g+VQMZxpKfol3P1iOtz3XQlHZV0pM6SAf+SwT0sPfrdn6CZFfNQlrKA9QjMrnBdMeSCquSIWXnmLv6okzvnlJnT0SjvJuUeqNdBC5EZ0ACnhI0MrXVZEsq1EuM9al7oPzvU5EZbjZpmx+fSFIkMzTT8bYClTnG1bsL1MCcU4pSODDorUj8zalA==" password:@"usai2010"];
+    params = [self prepare_addtional_params:params];
+    
+    return [super get_json:url parameters:params file:(NSString*)file err_recorder:URL_ERR_LOG result_handler:^NSMutableDictionary *(NSMutableDictionary *jsobj) {
+        int result=[[jsobj valueForKey:@"result"] intValue];
+        //        UIApplication * app = [UIApplication sharedApplication];
+        //        AppDelegate *appDelegate = (AppDelegate *)[app delegate];
+        
+        switch (result) {
+            case 0:
+                [jsobj setValue:MSG_USERAUTH_ERROR forKey:@"err_msg"];
+                break;
+            case 1:
+                [jsobj setValue:MSG_ERROR forKey:@"err_msg"];
+                break;
+            case 2:
+                [jsobj setValue:MSG_SUCCESS forKey:@"err_msg"];
+                break;
+            case 8:
+                [jsobj setValue:[jsobj valueForKey:@"msg"] forKey:@"err_msg"];
+                break;
+            case 9:
+                [jsobj setValue:[jsobj valueForKey:@"msg"] forKey:@"err_msg"];
+                break;
+            case 99:
+                [jsobj setValue:MSG_TIMEOUT forKey:@"err_msg"];
+                break;
+            default:
+                [jsobj setValue:MSG_ERROR forKey:@"err_msg"];
+                break;
+        }
+        
+        
+        //        if([appDelegate.build intValue]< [[jsobj valueForKey:@"min_ver"]intValue])
+        //        {
+        //            [jsobj setValue:@"9" forKey:@"result"];
+        //            [jsobj setValue:MSG_VER_LOW forKey:@"err_msg"];
+        //        }
+        return jsobj;
+    } decrypt_handler:^NSMutableDictionary *(NSMutableDictionary *jsobj) {
+        
+        NSString* base64str = jsobj[@"str"];
+        NSString* decryptstr=[AESCrypt AES128Decrypt:base64str key:@"usai2010"];
+        jsobj=[[RAUtils string2dict:decryptstr] mutableCopy];
+        return jsobj;
+    }];
+    
+    
+    /*
+     
+     
+     
+     */
+    return nil;
+}
++(NSMutableDictionary*) prepare_addtional_params:(NSMutableDictionary* ) params
+{
+    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
+    if(appDelegate.user!=nil)
+        [params setValue:[AESCrypt AES128Encrypt:appDelegate.user key:@"usai"] forKey:@"user"];
+    if(appDelegate.password!=nil)
+        [params setValue:[AESCrypt AES128Encrypt:appDelegate.password key:@"usai"] forKey:@"password"];
+    
+    
+    
+    [params setValue:appDelegate.build forKey:@"app_ver"];
+    
+    NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
+    NSString* short_version =[infoDict objectForKey:@"CFBundleShortVersionString"];
+    [params setValue:short_version forKey:@"app_short_ver"];
+    
+    
+    
+#if TARGET_IPHONE_SIMULATOR//模拟器
+    [params setValue:@"simulator_uuid" forKey:@"deviceid"];
+#elif TARGET_OS_IPHONE//真机
+    UIDevice * dev = [UIDevice currentDevice];
+    NSUUID* uuid =dev.identifierForVendor;
+    [params setValue:uuid.UUIDString forKey:@"deviceid"];
+#endif
+    
+    return params;
+}
+@end

+ 22 - 0
RedAnt Mobile/RedAnt Mobile/ResultViewController.h

@@ -0,0 +1,22 @@
+//
+//  ViewController.h
+//  phoneTest
+//
+//  Created by Ray on 01/09/2017.
+//
+//
+
+#import <UIKit/UIKit.h>
+//#import "TouchLabel.h"
+@interface ResultViewController : UIViewController<UIPopoverPresentationControllerDelegate>
+@property (weak, nonatomic) IBOutlet UITableView *tableview;
+@property (weak, nonatomic) IBOutlet UIScrollView *scrollview;
+@property (strong, nonatomic) NSMutableDictionary* content_layout;
+@property (strong, nonatomic) NSMutableDictionary* content_data;
+@property (strong, nonatomic) UILabel *label;
+
+//@property (strong, nonatomic)UITapGestureRecognizer* labelTap;
+//
+//@property (strong, nonatomic)UITapGestureRecognizer* cellDoubleTap;
+@end
+

+ 353 - 0
RedAnt Mobile/RedAnt Mobile/ResultViewController.m

@@ -0,0 +1,353 @@
+//
+//  ViewController.m
+//  phoneTest
+//
+//  Created by Ray on 01/09/2017.
+//
+//
+#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
+
+#import "ResultViewController.h"
+#import "FullyShowViewController.h"
+
+@interface ResultViewController ()
+
+@end
+
+@implementation ResultViewController
+
+- (void)labelClick {
+    NSLog(@"underlineLabel被点击了");
+}
+
+- (void)viewDidLoad {
+    
+        [super viewDidLoad];
+    
+
+//    self.labelTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTapAction:)];
+//    
+//    self.labelTap.numberOfTouchesRequired = 1; //手指数
+//    self.labelTap.numberOfTapsRequired = 2; //tap次数
+//    
+//    
+//    
+//    
+//    self.cellDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellDoubleTapAction:)];
+//    
+//    self.cellDoubleTap.numberOfTouchesRequired = 1; //手指数
+//    self.cellDoubleTap.numberOfTapsRequired = 2; //tap次数
+    
+//    UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self
+//                                                                                      action:nil];
+//    singleFingerOne.numberOfTouchesRequired = 1; //手指数
+//    singleFingerOne.numberOfTapsRequired = 1; //tap次数
+//    
+//
+    
+    
+//    singleFingerTwo.delegate = self;
+    
+    self.label = [UILabel new];
+    NSString* Path = [[NSBundle mainBundle] pathForResource:@"layout.json" ofType:nil];
+    
+    NSData *data = [NSData dataWithContentsOfFile:Path];
+    self.content_layout = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy];
+    
+    
+    Path = [[NSBundle mainBundle] pathForResource:@"data.json" ofType:nil];
+    
+    data = [NSData dataWithContentsOfFile:Path];
+    self.content_data = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy];
+    
+    
+    int width=[self.content_layout[@"header"][@"width"] intValue];
+    if(width<self.tableview.frame.size.width)
+        width=self.tableview.frame.size.width;
+    
+    CGRect frame = CGRectMake(self.tableview.frame.origin.x, self.tableview.frame.origin.y, width, self.tableview.frame.size.height);
+    self.tableview.frame=frame;
+    self.scrollview.contentSize=self.tableview.frame.size;
+    // Do any additional setup after loading the view, typically from a nib.
+}
+
+-(void)cellDoubleTapAction:(UIGestureRecognizer*)gestureRecognizer
+{
+    NSLog(@"cell double tap");
+}
+-(void)labelTapAction:(UIGestureRecognizer*)gestureRecognizer
+{
+    
+    NSLog(@"label touched");
+    UILabel* label = (UILabel*)[gestureRecognizer view];
+    self.label.text = label.text;
+    [self.label sizeToFit];
+    if(self.label.frame.size.width>label.frame.size.width||self.label.frame.size.height>label.frame.size.height)
+    {
+        
+        
+        
+        
+        FullyShowViewController *fullVC = [ self.storyboard instantiateViewControllerWithIdentifier:@"fullyShowViewController"];
+        fullVC.text = label.text;
+        
+        fullVC.preferredContentSize = CGSizeMake(200, 240);
+        
+        fullVC.modalPresentationStyle=UIModalPresentationPopover;
+        
+        UIPopoverPresentationController* popPc = fullVC.popoverPresentationController;
+        popPc.permittedArrowDirections = UIPopoverArrowDirectionAny;
+        popPc.sourceView = label;
+        popPc.delegate = self;
+        
+        
+        
+        [self presentViewController:fullVC animated:true completion:nil];
+        
+    }
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
+    
+}
+-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
+{
+    self.scrollview.contentSize=self.tableview.frame.size;
+}
+#pragma mark - TableView DataSource
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    
+    return [self.content_data[@"count"] intValue];
+    
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
+{
+    int height=[self.content_layout[@"header"][@"height"] intValue];
+    return height;
+}
+- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
+{
+    
+    NSArray* arr_col=self.content_layout[@"header"][@"col"];
+    
+    
+    NSString* value =self.content_layout[@"header"][@"f_color"];//[DefaultAppearance get_noneappearance_value:@"DefaultTableHeaderView" valuename:@"title_text_color"];
+    
+    if(value==nil)
+        value=@"";
+    unsigned long fcolor = strtoul([value UTF8String],0,16);
+    
+    value =self.content_layout[@"header"][@"bg_color"];//[DefaultAppearance get_noneappearance_value:@"DefaultTableHeaderView" valuename:@"title_text_color"];
+    
+    if(value==nil)
+        value=@"";
+            unsigned long bgcolor = strtoul([value UTF8String],0,16);
+    
+    UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 0.0001)];
+    myView.backgroundColor =  UIColorFromRGB(bgcolor);
+    myView.layer.shadowPath =[UIBezierPath bezierPathWithRect:myView.bounds].CGPath;
+    myView.layer.shadowColor = [UIColor blackColor].CGColor;
+    myView.layer.shadowOffset = CGSizeMake(0, 0);
+    myView.layer.shadowOpacity = 0.5;
+    myView.layer.shadowRadius = 2.0;
+    
+    int x=0;//[self.content_layout[@"header"][@"margin_l"] intValue];
+    int y=0;//[self.content_layout[@"header"][@"margin_t"] intValue];;
+    int height = [self.content_layout[@"header"][@"height"] intValue];
+    for(int i=0;i<arr_col.count;i++)
+    {
+        
+
+        
+
+        
+        int width = [arr_col[i][@"width"] intValue];
+        UILabel *headerlabel = [[UILabel alloc] initWithFrame:CGRectMake(x, y, width, height)];
+        headerlabel.textColor=UIColorFromRGB(fcolor);//UIColor.blackColor;
+        headerlabel.backgroundColor = [UIColor clearColor];
+        headerlabel.text=arr_col[i][@"name"];
+        headerlabel.textAlignment= [self get_TextHAlign:arr_col[i][@"h_align"] ];
+        
+        headerlabel.font = [UIFont boldSystemFontOfSize:20];
+        //        [headerlabel sizeToFit];
+        
+        headerlabel.layer.borderWidth=0.5;
+        [myView addSubview:headerlabel];
+        x+=width;
+    }
+    
+    
+    myView.autoresizesSubviews=true;
+    // [myView setAutoresizingMask:UIViewAutoresizingFlexibleWidth  | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
+    
+    
+    
+    
+    //    modellabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+    //    pricelabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+    //    timelabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+    myView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+    //
+    return myView;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    int height=[self.content_layout[@"row"][@"height"] intValue];
+    return height;
+}
+-(NSTextAlignment) get_TextHAlign:(NSString*)textHAlign
+{
+    
+    if([textHAlign.lowercaseString isEqualToString:@"center"])
+        return NSTextAlignmentCenter;
+    else     if([textHAlign.lowercaseString isEqualToString:@"left"])
+        return NSTextAlignmentLeft;
+    else      if([textHAlign.lowercaseString isEqualToString:@"right"])
+        return NSTextAlignmentRight;
+    
+    return NSTextAlignmentLeft;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    
+    
+    
+    {
+        NSString *CellIdentifier = @"tCell";
+        UITableViewCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
+        
+        for(UIGestureRecognizer* g in cell.gestureRecognizers)
+           [ cell removeGestureRecognizer:g];
+        //        cell gesture
+//        [cell removeGestureRecognizer:self.cellDoubleTap];
+        for(UIView* v in cell.subviews)
+        {
+            for(UIGestureRecognizer* g in v.gestureRecognizers)
+                [ v removeGestureRecognizer:g];
+            
+            [v removeFromSuperview];
+        }
+        //        cell.detailTextLabel.text=@"detail";
+        //        cell.textLabel.text=[NSString stringWithFormat:@"%ld",indexPath.row];
+        
+        
+        
+        UITapGestureRecognizer *cellDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellDoubleTapAction:)];
+        
+        cellDoubleTap.numberOfTouchesRequired = 1; //手指数
+        cellDoubleTap.numberOfTapsRequired = 2; //tap次数
+        [cell addGestureRecognizer:cellDoubleTap];
+        
+        
+        
+        NSArray* arr_col=self.content_layout[@"header"][@"col"];
+        
+        NSArray* item =self.content_data[[NSString stringWithFormat:@"item_%ld",indexPath.row]];
+        
+        NSString* value =self.content_layout[@"row"][@"f_color"];//[DefaultAppearance get_noneappearance_value:@"DefaultTableHeaderView" valuename:@"title_text_color"];
+        
+        if(value==nil)
+            value=@"";
+        unsigned long fcolor = strtoul([value UTF8String],0,16);
+        
+        value =self.content_layout[@"row"][@"color_0"];//[DefaultAppearance get_noneappearance_value:@"DefaultTableHeaderView" valuename:@"title_text_color"];
+        
+        if(value==nil)
+            value=@"";
+        
+        unsigned long color0 = strtoul([value UTF8String],0,16);
+        
+        value =self.content_layout[@"row"][@"color_1"];//[DefaultAppearance get_noneappearance_value:@"DefaultTableHeaderView" valuename:@"title_text_color"];
+        
+        if(value==nil)
+            value=@"";
+        
+        unsigned long color1 = strtoul([value UTF8String],0,16);
+        
+        int x=0;//[self.content_layout[@"header"][@"margin_l"] intValue];
+        int y=0;//[self.content_layout[@"header"][@"margin_t"] intValue];;
+        int height = [self.content_layout[@"row"][@"height"] intValue];
+        for(int i=0;i<arr_col.count;i++)
+        {
+
+            
+            
+            int width = [arr_col[i][@"width"] intValue];;
+            UILabel *vallabel = [[UILabel alloc] initWithFrame:CGRectMake(x, y, width, height)];
+            vallabel.textColor=UIColorFromRGB(fcolor);//UIColor.blackColor;
+            vallabel.backgroundColor = [UIColor clearColor];
+            vallabel.text=item[i];
+            vallabel.textAlignment= [self get_TextHAlign:arr_col[i][@"h_align"] ];
+            
+            vallabel.layer.borderWidth=0.5;
+            
+           // UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(labelTapAction:)];
+            
+            UITapGestureRecognizer* labelTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTapAction:)];
+            
+            labelTap.numberOfTouchesRequired = 1; //手指数
+            labelTap.numberOfTapsRequired = 1; //tap次数
+            [vallabel addGestureRecognizer:labelTap];
+            
+            
+            [labelTap requireGestureRecognizerToFail:cellDoubleTap];
+//               [vallabel addGestureRecognizer:self.cellDoubleTap];
+            vallabel.userInteractionEnabled = YES;
+//            [vallabel becomeFirstResponder];
+//            vallabel.delegate = self;
+            //            [statuslabel sizeToFit];
+            [cell addSubview:vallabel];
+            x+=width;
+        }
+        
+        
+
+        if(indexPath.row%2==0)
+            cell.backgroundColor=UIColorFromRGB(color0);//[UIColor whiteColor];
+        else
+            cell.backgroundColor=UIColorFromRGB(color1);//[UIColor lightGrayColor];
+        return cell;
+    }
+    
+}
+//#pragma mark - TouchLabel Delegate
+//- (void)touchLabel:(TouchLabel *)touchLabel touchesWtihTag:(NSInteger)tag
+//{
+//    
+//}
+//-(void) empty
+//{
+//    
+//}
+#pragma mark - UIPopoverPresentationControllerDelegate Delegate
+//实现该代理方法,返回UIModalPresentationNone值,可以在iPhone设备实现popover效果
+-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{
+    return UIModalPresentationNone;//不适配(不区分ipad或iPhone)
+}
+
+
+
+#pragma mark - TableView Delegate
+
+
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    NSLog(@"cell selected");
+}
+
+- (UITableViewCellEditingStyle)tableView:(UITableView *)tv editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    return UITableViewCellEditingStyleDelete;
+    
+    
+}
+
+
+@end

+ 15 - 0
RedAnt Mobile/RedAnt Mobile/ViewController.h

@@ -0,0 +1,15 @@
+//
+//  ViewController.h
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface ViewController : UIViewController
+
+
+@end
+

+ 29 - 0
RedAnt Mobile/RedAnt Mobile/ViewController.m

@@ -0,0 +1,29 @@
+//
+//  ViewController.m
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import "ViewController.h"
+
+@interface ViewController ()
+
+@end
+
+@implementation ViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view, typically from a nib.
+}
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+
+@end

+ 145 - 0
RedAnt Mobile/RedAnt Mobile/commoneditor.phone.xib

@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12120" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12088"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="testViewController">
+            <connections>
+                <outlet property="tableview" destination="ebs-zF-tTp" id="j9o-X2-e4k"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="ebs-zF-tTp">
+                    <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                </tableView>
+            </subviews>
+            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="ebs-zF-tTp" firstAttribute="height" secondItem="iN0-l3-epB" secondAttribute="height" id="AWK-NW-Ya6"/>
+                <constraint firstItem="ebs-zF-tTp" firstAttribute="width" secondItem="iN0-l3-epB" secondAttribute="width" id="ony-jt-ZMf"/>
+                <constraint firstItem="ebs-zF-tTp" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="p54-jI-qTD"/>
+                <constraint firstItem="ebs-zF-tTp" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="pux-ts-RIc"/>
+            </constraints>
+            <point key="canvasLocation" x="24.5" y="52.5"/>
+        </view>
+        <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="CommonEditorCellSwitch" id="HlW-4i-fdR">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="HlW-4i-fdR" id="Lg3-Dd-1na">
+                <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="B1u-pi-BD9">
+                        <rect key="frame" x="0.0" y="11" width="42" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="R18-X7-Y6a">
+                        <rect key="frame" x="326" y="6" width="51" height="31"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                    </switch>
+                </subviews>
+            </tableViewCellContentView>
+            <point key="canvasLocation" x="-441" y="-37"/>
+        </tableViewCell>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="CommonEditorCellModel" rowHeight="160" id="v06-Df-Jhg" customClass="CommonEditorCellModel">
+            <rect key="frame" x="0.0" y="0.0" width="782" height="160"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="v06-Df-Jhg" id="ZZU-4e-UmO">
+                <rect key="frame" x="0.0" y="0.0" width="782" height="160"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qop-S8-vuX">
+                        <rect key="frame" x="20" y="20" width="100" height="100"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </imageView>
+                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="name&amp;description" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VIR-Xu-Swb">
+                        <rect key="frame" x="127" y="15" width="323" height="81"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="1234567.00" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fwu-l4-QV6">
+                        <rect key="frame" x="634" y="45" width="127" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="x9999" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GNW-Ul-rH8">
+                        <rect key="frame" x="634" y="75" width="127" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Masert pack:9999" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vkD-X8-tj9">
+                        <rect key="frame" x="461" y="15" width="142" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="$1234567.00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BjA-W7-8R0" customClass="StrikethroughLabel">
+                        <rect key="frame" x="481" y="45" width="102" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Discount 99.99% off" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PUi-AQ-jUe">
+                        <rect key="frame" x="454" y="75" width="156" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Price ($)" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BbQ-oI-PtK">
+                        <rect key="frame" x="622" y="15" width="126" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="123456789.00" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hLz-ET-xoZ">
+                        <rect key="frame" x="634" y="106" width="127" height="21"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6mg-nb-gdN">
+                        <rect key="frame" x="128" y="102" width="482" height="30"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <state key="normal" title="Button"/>
+                        <connections>
+                            <action selector="onClickBundle:" destination="v06-Df-Jhg" eventType="touchUpInside" id="n76-JD-xTP"/>
+                        </connections>
+                    </button>
+                </subviews>
+            </tableViewCellContentView>
+            <connections>
+                <outlet property="buttonBundle" destination="6mg-nb-gdN" id="cvi-RN-tl9"/>
+                <outlet property="imgModel" destination="qop-S8-vuX" id="YE3-On-XRv"/>
+                <outlet property="labelCount" destination="GNW-Ul-rH8" id="1Yv-Rg-EU6"/>
+                <outlet property="labelDescription" destination="VIR-Xu-Swb" id="7Yd-5Z-NDh"/>
+                <outlet property="labelDiscount" destination="PUi-AQ-jUe" id="kP7-Ft-0yQ"/>
+                <outlet property="labelMasterPack" destination="vkD-X8-tj9" id="JVT-Cm-uTI"/>
+                <outlet property="labelOldPrice" destination="BjA-W7-8R0" id="x5Y-me-e5t"/>
+                <outlet property="labelTotalPrice" destination="hLz-ET-xoZ" id="4DJ-3O-HsV"/>
+                <outlet property="labelUnitPrice" destination="fwu-l4-QV6" id="JnQ-vx-jHk"/>
+            </connections>
+            <point key="canvasLocation" x="-435" y="-406"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 58 - 0
RedAnt Mobile/RedAnt Mobile/config.h

@@ -0,0 +1,58 @@
+//
+//  config.h
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#ifndef config_h
+#define config_h
+
+
+
+
+# ifdef DEBUG
+#define test_server
+# else
+#define NO_SAVE_VERIFY false
+# endif
+
+
+# ifdef DEBUG
+#define NO_SAVE_VERIFY true
+#define test_server
+# else
+#define NO_SAVE_VERIFY false
+# endif
+
+#define DEBUG_PDFSIG false
+
+#define PDF_DEBUG false
+
+
+
+#ifdef test_server
+#define URL_CUSTOMER_ADV_SEARCH @""
+#define  URL_REQUIRE_SERVER  @""
+
+#define URL_UPLOAD_IMG @""
+
+#define  URL_ERR_LOG  @""
+
+#define  URL_NEW_CUSTOMER  @""
+
+#define  URL_ADDRESS_EDOTOR @""
+#define  URL_CREDITCARD_EDOTOR @""
+
+#else
+#define  URL_CREDITCARD_EDOTOR @""
+#define URL_CUSTOMER_ADV_SEARCH @""
+#define  URL_ERR_LOG  @""
+#define  URL_REQUIRE_SERVER  @""
+#define URL_UPLOAD_IMG @""
+#define  URL_NEW_CUSTOMER  @""
+#define  URL_ADDRESS_EDOTOR @""
+#endif
+
+#endif /* config_h */

+ 49 - 0
RedAnt Mobile/RedAnt Mobile/const.h

@@ -0,0 +1,49 @@
+//
+//  const.h
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#ifndef const_h
+#define const_h
+
+#define DEBUGLOG 1
+#ifdef DEBUGLOG
+#ifdef DEBUG
+//     #define DebugLog( s, ... ) fprintf(stderr,"%s\n",[[NSString stringWithFormat:s, ##__VA_ARGS__] UTF8String])//
+#define DebugLog( s, ... ) fprintf(stderr, "<%p %s:(%d)> %s \n", self, [[[NSString stringWithUTF8String:__FILE__] lastPathComponent]UTF8String], __LINE__, [[NSString stringWithFormat:(s), ##__VA_ARGS__]UTF8String] )
+
+#define blockDebugLog( s, ... ) fprintf(stderr, "<%p %s:(%d)> %s \n",weakself, [[[NSString stringWithUTF8String:__FILE__] lastPathComponent]UTF8String], __LINE__, [[NSString stringWithFormat:(s), ##__VA_ARGS__]UTF8String] )
+
+#else
+#define DebugLog( s, ... )
+
+#define blockDebugLog( s, ... )
+#endif
+#else
+#define DebugLog( s, ... )
+
+#define blockDebugLog( s, ... )
+#endif
+
+#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
+
+#define URL_REMOTE 1
+#define URL_LOCAL 0
+#define URL_NONE 2
+#define URL_RESTORE 3
+
+
+
+#define REFRESH_NONE 0
+#define REFRESH_VIEW 1
+#define REFRESH_DATA 2
+
+
+// 如何处理commoneditor action 类型调用的返回值
+#define  ACTION_SAVE_DATA 0
+#define ACTION_FILL_SECTION 1
+
+#endif /* const_h */

+ 29 - 0
RedAnt Mobile/RedAnt Mobile/login.json

@@ -0,0 +1,29 @@
+{
+  "count" : 4,
+  
+  "item_0" : {
+    "edit" : false,
+    "type" : "text",
+    "place_holder" : "Company",
+    "security" : false
+  },
+  "item_1" : {
+    "edit" : true,
+    "type" : "text",
+      "place_holder" : "user name",
+      "security" : false
+
+  },
+  "item_2" : {
+    "edit" : true,
+    "type" : "text",
+      "place_holder" : "password",
+      "security" : true
+
+  },
+  "item_3" : {
+    "type" : "switch",
+    "tip_msg" : "remember my login",
+    "status" : true
+  }
+}

+ 16 - 0
RedAnt Mobile/RedAnt Mobile/main.m

@@ -0,0 +1,16 @@
+//
+//  main.m
+//  RedAnt Mobile
+//
+//  Created by Ray on 06/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}

+ 3 - 0
RedAnt Mobile/default_appearance.json

@@ -0,0 +1,3 @@
+{
+    
+}

+ 14 - 0
RedAnt Mobile/testViewController.h

@@ -0,0 +1,14 @@
+//
+//  testViewController.h
+//  RedAnt Mobile
+//
+//  Created by Ray on 07/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface testViewController : UIViewController
+@property (weak, nonatomic) IBOutlet UITableView *tableview;
+
+@end

+ 42 - 0
RedAnt Mobile/testViewController.m

@@ -0,0 +1,42 @@
+//
+//  testViewController.m
+//  RedAnt Mobile
+//
+//  Created by Ray on 07/09/2017.
+//  Copyright © 2017 Ray. All rights reserved.
+//
+
+#import "testViewController.h"
+#import "CommonEditorCellSwitch.h"
+@interface testViewController ()
+
+@end
+
+@implementation testViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view from its nib.
+    
+    
+    
+//    [self.tableview registerClass:[CommonEditorCellSwitch class] forCellReuseIdentifier:IDENTIFIER];
+
+}
+
+- (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

+ 20 - 0
RedAnt Mobile/testViewController.xib

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11134" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="testViewController">
+            <connections>
+                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </view>
+    </objects>
+</document>