Explorar o código

1.创建新工程

time %!s(int64=6) %!d(string=hai) anos
achega
d4a90ad1c9
Modificáronse 41 ficheiros con 2663 adicións e 0 borrados
  1. 52 0
      .gitignore
  2. 23 0
      UU_Ent/Podfile
  3. 69 0
      UU_Ent/UU_Ent.podspec
  4. 1107 0
      UU_Ent/UU_Ent.xcodeproj/project.pbxproj
  5. 14 0
      UU_Ent/UU_Ent.xcodeproj/xcuserdata/ime.xcuserdatad/xcschemes/xcschememanagement.plist
  6. 17 0
      UU_Ent/UU_Ent/Modules/App/AppDelegate.h
  7. 60 0
      UU_Ent/UU_Ent/Modules/App/AppDelegate.m
  8. 17 0
      UU_Ent/UU_Ent/Modules/Base/YRBaseNav.h
  9. 24 0
      UU_Ent/UU_Ent/Modules/Base/YRBaseNav.m
  10. 21 0
      UU_Ent/UU_Ent/Modules/Base/YRBaseVC.h
  11. 41 0
      UU_Ent/UU_Ent/Modules/Base/YRBaseVC.m
  12. 17 0
      UU_Ent/UU_Ent/Modules/Contacts/Main/Controllers/YRContactVC.h
  13. 23 0
      UU_Ent/UU_Ent/Modules/Contacts/Main/Controllers/YRContactVC.m
  14. 17 0
      UU_Ent/UU_Ent/Modules/Login/Main/Controllers/YRVLoginVC.h
  15. 24 0
      UU_Ent/UU_Ent/Modules/Login/Main/Controllers/YRVLoginVC.m
  16. 17 0
      UU_Ent/UU_Ent/Modules/Main/Main/Controllers/YRMainVC.h
  17. 124 0
      UU_Ent/UU_Ent/Modules/Main/Main/Controllers/YRMainVC.m
  18. 17 0
      UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabBar.h
  19. 15 0
      UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabBar.m
  20. 17 0
      UU_Ent/UU_Ent/Modules/Message/Main/Controllers/YRMsgVC.h
  21. 25 0
      UU_Ent/UU_Ent/Modules/Message/Main/Controllers/YRMsgVC.m
  22. 17 0
      UU_Ent/UU_Ent/Modules/Mine/Main/Controllers/YRMineVC.h
  23. 25 0
      UU_Ent/UU_Ent/Modules/Mine/Main/Controllers/YRMineVC.m
  24. 19 0
      UU_Ent/UU_Ent/Modules/Web/Main/YRWebVC.h
  25. 25 0
      UU_Ent/UU_Ent/Modules/Web/Main/YRWebVC.m
  26. 17 0
      UU_Ent/UU_Ent/Modules/Work/Main/Controllers/YRWorkVC.h
  27. 23 0
      UU_Ent/UU_Ent/Modules/Work/Main/Controllers/YRWorkVC.m
  28. 98 0
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json
  29. 6 0
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Contents.json
  30. 25 0
      UU_Ent/UU_Ent/Supporting Files/Base.lproj/LaunchScreen.storyboard
  31. 43 0
      UU_Ent/UU_Ent/Supporting Files/Info.plist
  32. 16 0
      UU_Ent/UU_Ent/Supporting Files/main.m
  33. 22 0
      UU_Ent/UU_EntTests/Info.plist
  34. 37 0
      UU_Ent/UU_EntTests/UU_EntTests.m
  35. 22 0
      UU_Ent/UU_EntUITests/Info.plist
  36. 38 0
      UU_Ent/UU_EntUITests/UU_EntUITests.m
  37. 193 0
      UU_Ent/protos/account.proto
  38. 24 0
      UU_Ent/protos/app.proto
  39. 170 0
      UU_Ent/protos/base.proto
  40. 24 0
      UU_Ent/protos/home.proto
  41. 78 0
      UU_Ent/protos/message.proto

+ 52 - 0
.gitignore

@@ -0,0 +1,52 @@
+# Xcode
+#
+# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
+
+## Build generated
+build/
+DerivedData/
+
+## Various settings
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata/
+
+## Other
+*.moved-aside
+*.xcuserstate
+
+## Obj-C/Swift specific
+*.hmap
+*.ipa
+
+#CocoaPods
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+#
+Pods/
+
+Podfile.lock
+# Carthage
+#
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
+
+Carthage/Build
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 
+# screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
+
+fastlane/report.xml
+fastlane/screenshots

+ 23 - 0
UU_Ent/Podfile

@@ -0,0 +1,23 @@
+# Uncomment the next line to define a global platform for your project
+# platform :ios, '9.0'
+
+target 'UU_Ent' do
+  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
+  # use_frameworks!
+
+  # Pods for UU_Ent
+
+   pod 'UU_Ent', :path => '.'
+   pod 'MJExtension'
+
+  target 'UU_EntTests' do
+    inherit! :search_paths
+    # Pods for testing
+  end
+
+  target 'UU_EntUITests' do
+    inherit! :search_paths
+    # Pods for testing
+  end
+
+end

+ 69 - 0
UU_Ent/UU_Ent.podspec

@@ -0,0 +1,69 @@
+Pod::Spec.new do |s|
+  s.name     = "UU_Ent"
+  s.version  = "0.0.1"
+  s.license  = "Apache License, Version 2.0"
+  s.authors  = { 'gRPC contributors' => 'grpc-io@googlegroups.com' }
+  s.homepage = "https://grpc.io/"
+  s.summary = "GRPCOne example"
+  s.source = { :git => 'https://github.com/grpc/grpc.git' }
+
+  s.ios.deployment_target = "7.1"
+  s.osx.deployment_target = "10.9"
+
+  # Base directory where the .proto files are.
+  src = "protos"
+
+  # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.
+  s.dependency "!ProtoCompiler-gRPCPlugin", "~> 1.0"
+
+  # Pods directory corresponding to this app's Podfile, relative to the location of this podspec.
+  pods_root = 'Pods'
+
+  # Path where Cocoapods downloads protoc and the gRPC plugin.
+  protoc_dir = "#{pods_root}/!ProtoCompiler"
+  protoc = "#{protoc_dir}/protoc"
+  plugin = "#{pods_root}/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin"
+
+  # Directory where the generated files will be placed.
+  dir = "#{pods_root}/#{s.name}"
+
+  s.prepare_command = <<-CMD
+    mkdir -p #{dir}
+    #{protoc} \
+        --plugin=protoc-gen-grpc=#{plugin} \
+        --objc_out=#{dir} \
+        --grpc_out=#{dir} \
+        -I #{src} \
+        -I #{protoc_dir} \
+      #{src}/base.proto\
+      #{src}/account.proto\
+      #{src}/message.proto\
+
+  CMD
+
+  # Files generated by protoc
+  s.subspec "Messages" do |ms|
+    ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}"
+    ms.header_mappings_dir = dir
+    ms.requires_arc = false
+    # The generated files depend on the protobuf runtime.
+    ms.dependency "Protobuf"
+  end
+
+  # Files generated by the gRPC plugin
+  s.subspec "Services" do |ss|
+    ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}"
+    ss.header_mappings_dir = dir
+    ss.requires_arc = true
+    # The generated files depend on the gRPC runtime, and on the files generated by protoc.
+    ss.dependency "gRPC-ProtoRPC"
+    ss.dependency "#{s.name}/Messages"
+  end
+
+  s.pod_target_xcconfig = {
+    # This is needed by all pods that depend on Protobuf:
+    'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1',
+    # This is needed by all pods that depend on gRPC-RxLibrary:
+    'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',
+  }
+end

+ 1107 - 0
UU_Ent/UU_Ent.xcodeproj/project.pbxproj

@@ -0,0 +1,1107 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 50;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		3FE47A8D89A70D18F98B1E41 /* libPods-UU_EntUITests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F4F857DEEC69AEDCFACDFD51 /* libPods-UU_EntUITests.a */; };
+		99C6FE6122768B5C00C7070A /* UU_EntTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FE6022768B5C00C7070A /* UU_EntTests.m */; };
+		99C6FE6C22768B5C00C7070A /* UU_EntUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FE6B22768B5C00C7070A /* UU_EntUITests.m */; };
+		99C6FE8F22768EC000C7070A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FE7E22768EC000C7070A /* AppDelegate.m */; };
+		99C6FE9022768EC000C7070A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 99C6FE8722768EC000C7070A /* Assets.xcassets */; };
+		99C6FE9122768EC000C7070A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 99C6FE8822768EC000C7070A /* LaunchScreen.storyboard */; };
+		99C6FE9222768EC000C7070A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FE8A22768EC000C7070A /* main.m */; };
+		99C6FE96227690BE00C7070A /* YRBaseVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FE95227690BE00C7070A /* YRBaseVC.m */; };
+		99C6FE99227690F800C7070A /* YRBaseNav.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FE98227690F800C7070A /* YRBaseNav.m */; };
+		99C6FEBA2276950C00C7070A /* YRMainVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FEB92276950C00C7070A /* YRMainVC.m */; };
+		99C6FEBD2276953E00C7070A /* YRVLoginVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FEBC2276953E00C7070A /* YRVLoginVC.m */; };
+		99C6FEC02276957400C7070A /* YRMineVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FEBF2276957400C7070A /* YRMineVC.m */; };
+		99C6FEC32276959B00C7070A /* YRWorkVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FEC22276959B00C7070A /* YRWorkVC.m */; };
+		99C6FEC82276966600C7070A /* YRWebVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FEC72276966600C7070A /* YRWebVC.m */; };
+		99C6FECB227696CA00C7070A /* YRMsgVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FECA227696CA00C7070A /* YRMsgVC.m */; };
+		99C6FECE227697DA00C7070A /* YRContactVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FECD227697DA00C7070A /* YRContactVC.m */; };
+		99C6FED12276982F00C7070A /* YRTabBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FED02276982F00C7070A /* YRTabBar.m */; };
+		C2FE1204E87AA4AC2511A808 /* libPods-UU_Ent.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F21F3925C5D7942C9E06A9B7 /* libPods-UU_Ent.a */; };
+		F135D5FAC9D7DD2641DAF236 /* libPods-UU_EntTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 102F3AF440E73FF2A1EB3208 /* libPods-UU_EntTests.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		99C6FE5D22768B5C00C7070A /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 99C6FE3C22768B5B00C7070A /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 99C6FE4322768B5B00C7070A;
+			remoteInfo = UU_Ent;
+		};
+		99C6FE6822768B5C00C7070A /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 99C6FE3C22768B5B00C7070A /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 99C6FE4322768B5B00C7070A;
+			remoteInfo = UU_Ent;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		102F3AF440E73FF2A1EB3208 /* libPods-UU_EntTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-UU_EntTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		13A4F2D13DACD5857BD40BDE /* Pods-UU_Ent.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UU_Ent.release.xcconfig"; path = "Pods/Target Support Files/Pods-UU_Ent/Pods-UU_Ent.release.xcconfig"; sourceTree = "<group>"; };
+		49A8B37D50A80EFFD84620EC /* Pods-UU_EntTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UU_EntTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-UU_EntTests/Pods-UU_EntTests.release.xcconfig"; sourceTree = "<group>"; };
+		49D3F089EECE8E3EDF7D2E1C /* Pods-UU_EntUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UU_EntUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-UU_EntUITests/Pods-UU_EntUITests.release.xcconfig"; sourceTree = "<group>"; };
+		71B4DF45C8EC3368ACFC4193 /* Pods-UU_Ent.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UU_Ent.debug.xcconfig"; path = "Pods/Target Support Files/Pods-UU_Ent/Pods-UU_Ent.debug.xcconfig"; sourceTree = "<group>"; };
+		99C6FE4422768B5B00C7070A /* UU_Ent.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = UU_Ent.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		99C6FE5C22768B5C00C7070A /* UU_EntTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UU_EntTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		99C6FE6022768B5C00C7070A /* UU_EntTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UU_EntTests.m; sourceTree = "<group>"; };
+		99C6FE6222768B5C00C7070A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		99C6FE6722768B5C00C7070A /* UU_EntUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UU_EntUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		99C6FE6B22768B5C00C7070A /* UU_EntUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UU_EntUITests.m; sourceTree = "<group>"; };
+		99C6FE6D22768B5C00C7070A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		99C6FE7D22768EC000C7070A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+		99C6FE7E22768EC000C7070A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+		99C6FE8722768EC000C7070A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		99C6FE8922768EC000C7070A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		99C6FE8A22768EC000C7070A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		99C6FE8B22768EC000C7070A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		99C6FE94227690BE00C7070A /* YRBaseVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRBaseVC.h; sourceTree = "<group>"; };
+		99C6FE95227690BE00C7070A /* YRBaseVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRBaseVC.m; sourceTree = "<group>"; };
+		99C6FE97227690F800C7070A /* YRBaseNav.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRBaseNav.h; sourceTree = "<group>"; };
+		99C6FE98227690F800C7070A /* YRBaseNav.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRBaseNav.m; sourceTree = "<group>"; };
+		99C6FEB82276950C00C7070A /* YRMainVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRMainVC.h; sourceTree = "<group>"; };
+		99C6FEB92276950C00C7070A /* YRMainVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRMainVC.m; sourceTree = "<group>"; };
+		99C6FEBB2276953E00C7070A /* YRVLoginVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRVLoginVC.h; sourceTree = "<group>"; };
+		99C6FEBC2276953E00C7070A /* YRVLoginVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRVLoginVC.m; sourceTree = "<group>"; };
+		99C6FEBE2276957400C7070A /* YRMineVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRMineVC.h; sourceTree = "<group>"; };
+		99C6FEBF2276957400C7070A /* YRMineVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRMineVC.m; sourceTree = "<group>"; };
+		99C6FEC12276959B00C7070A /* YRWorkVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRWorkVC.h; sourceTree = "<group>"; };
+		99C6FEC22276959B00C7070A /* YRWorkVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRWorkVC.m; sourceTree = "<group>"; };
+		99C6FEC62276966600C7070A /* YRWebVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRWebVC.h; sourceTree = "<group>"; };
+		99C6FEC72276966600C7070A /* YRWebVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRWebVC.m; sourceTree = "<group>"; };
+		99C6FEC9227696CA00C7070A /* YRMsgVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRMsgVC.h; sourceTree = "<group>"; };
+		99C6FECA227696CA00C7070A /* YRMsgVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRMsgVC.m; sourceTree = "<group>"; };
+		99C6FECC227697DA00C7070A /* YRContactVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRContactVC.h; sourceTree = "<group>"; };
+		99C6FECD227697DA00C7070A /* YRContactVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRContactVC.m; sourceTree = "<group>"; };
+		99C6FECF2276982F00C7070A /* YRTabBar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRTabBar.h; sourceTree = "<group>"; };
+		99C6FED02276982F00C7070A /* YRTabBar.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRTabBar.m; sourceTree = "<group>"; };
+		B5220A6F4D02F3A377D1E1D6 /* Pods-UU_EntUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UU_EntUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-UU_EntUITests/Pods-UU_EntUITests.debug.xcconfig"; sourceTree = "<group>"; };
+		DA26F5F8909B0156F0F3EC26 /* Pods-UU_EntTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-UU_EntTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-UU_EntTests/Pods-UU_EntTests.debug.xcconfig"; sourceTree = "<group>"; };
+		F21F3925C5D7942C9E06A9B7 /* libPods-UU_Ent.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-UU_Ent.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		F4F857DEEC69AEDCFACDFD51 /* libPods-UU_EntUITests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-UU_EntUITests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		99C6FE4122768B5B00C7070A /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				C2FE1204E87AA4AC2511A808 /* libPods-UU_Ent.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		99C6FE5922768B5C00C7070A /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F135D5FAC9D7DD2641DAF236 /* libPods-UU_EntTests.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		99C6FE6422768B5C00C7070A /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				3FE47A8D89A70D18F98B1E41 /* libPods-UU_EntUITests.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		99C6FE3B22768B5B00C7070A = {
+			isa = PBXGroup;
+			children = (
+				99C6FE4622768B5B00C7070A /* UU_Ent */,
+				99C6FE5F22768B5C00C7070A /* UU_EntTests */,
+				99C6FE6A22768B5C00C7070A /* UU_EntUITests */,
+				99C6FE4522768B5B00C7070A /* Products */,
+				DEB95212CB06CC2B2E94075E /* Pods */,
+				C72D523677B19DCBAEBD26E1 /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		99C6FE4522768B5B00C7070A /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE4422768B5B00C7070A /* UU_Ent.app */,
+				99C6FE5C22768B5C00C7070A /* UU_EntTests.xctest */,
+				99C6FE6722768B5C00C7070A /* UU_EntUITests.xctest */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		99C6FE4622768B5B00C7070A /* UU_Ent */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE7B22768EC000C7070A /* Modules */,
+				99C6FE8C22768EC000C7070A /* Resources */,
+				99C6FE8622768EC000C7070A /* Supporting Files */,
+				99C6FE8E22768EC000C7070A /* ThirdLib */,
+				99C6FE8D22768EC000C7070A /* Utils */,
+			);
+			path = UU_Ent;
+			sourceTree = "<group>";
+		};
+		99C6FE5F22768B5C00C7070A /* UU_EntTests */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE6022768B5C00C7070A /* UU_EntTests.m */,
+				99C6FE6222768B5C00C7070A /* Info.plist */,
+			);
+			path = UU_EntTests;
+			sourceTree = "<group>";
+		};
+		99C6FE6A22768B5C00C7070A /* UU_EntUITests */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE6B22768B5C00C7070A /* UU_EntUITests.m */,
+				99C6FE6D22768B5C00C7070A /* Info.plist */,
+			);
+			path = UU_EntUITests;
+			sourceTree = "<group>";
+		};
+		99C6FE7B22768EC000C7070A /* Modules */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE8522768EC000C7070A /* Base */,
+				99C6FE7C22768EC000C7070A /* App */,
+				99C6FE7F22768EC000C7070A /* Contacts */,
+				99C6FE8022768EC000C7070A /* Message */,
+				99C6FE8122768EC000C7070A /* Work */,
+				99C6FE8222768EC000C7070A /* Mine */,
+				99C6FE8322768EC000C7070A /* Main */,
+				99C6FE8422768EC000C7070A /* Login */,
+				99C6FEC42276962800C7070A /* Web */,
+			);
+			path = Modules;
+			sourceTree = "<group>";
+		};
+		99C6FE7C22768EC000C7070A /* App */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE7D22768EC000C7070A /* AppDelegate.h */,
+				99C6FE7E22768EC000C7070A /* AppDelegate.m */,
+			);
+			path = App;
+			sourceTree = "<group>";
+		};
+		99C6FE7F22768EC000C7070A /* Contacts */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE9C2276934900C7070A /* Main */,
+			);
+			path = Contacts;
+			sourceTree = "<group>";
+		};
+		99C6FE8022768EC000C7070A /* Message */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE9D2276935400C7070A /* Main */,
+			);
+			path = Message;
+			sourceTree = "<group>";
+		};
+		99C6FE8122768EC000C7070A /* Work */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE9A2276933100C7070A /* Main */,
+			);
+			path = Work;
+			sourceTree = "<group>";
+		};
+		99C6FE8222768EC000C7070A /* Mine */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE9B2276933F00C7070A /* Main */,
+			);
+			path = Mine;
+			sourceTree = "<group>";
+		};
+		99C6FE8322768EC000C7070A /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE9E227693EB00C7070A /* Main */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		99C6FE8422768EC000C7070A /* Login */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEA32276940600C7070A /* Main */,
+			);
+			path = Login;
+			sourceTree = "<group>";
+		};
+		99C6FE8522768EC000C7070A /* Base */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE94227690BE00C7070A /* YRBaseVC.h */,
+				99C6FE95227690BE00C7070A /* YRBaseVC.m */,
+				99C6FE97227690F800C7070A /* YRBaseNav.h */,
+				99C6FE98227690F800C7070A /* YRBaseNav.m */,
+			);
+			path = Base;
+			sourceTree = "<group>";
+		};
+		99C6FE8622768EC000C7070A /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE8722768EC000C7070A /* Assets.xcassets */,
+				99C6FE8822768EC000C7070A /* LaunchScreen.storyboard */,
+				99C6FE8A22768EC000C7070A /* main.m */,
+				99C6FE8B22768EC000C7070A /* Info.plist */,
+			);
+			path = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		99C6FE8C22768EC000C7070A /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Resources;
+			sourceTree = "<group>";
+		};
+		99C6FE8D22768EC000C7070A /* Utils */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Utils;
+			sourceTree = "<group>";
+		};
+		99C6FE8E22768EC000C7070A /* ThirdLib */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = ThirdLib;
+			sourceTree = "<group>";
+		};
+		99C6FE9A2276933100C7070A /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEAF2276942900C7070A /* Controllers */,
+				99C6FEAE2276942900C7070A /* Models */,
+				99C6FEAD2276942900C7070A /* Others */,
+				99C6FEAC2276942900C7070A /* Views */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		99C6FE9B2276933F00C7070A /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEAA2276941A00C7070A /* Controllers */,
+				99C6FEA82276941900C7070A /* Models */,
+				99C6FEA92276941900C7070A /* Others */,
+				99C6FEAB2276941A00C7070A /* Views */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		99C6FE9C2276934900C7070A /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEB42276944800C7070A /* Controllers */,
+				99C6FEB62276944800C7070A /* Models */,
+				99C6FEB52276944800C7070A /* Others */,
+				99C6FEB72276944800C7070A /* Views */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		99C6FE9D2276935400C7070A /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEB32276943C00C7070A /* Controllers */,
+				99C6FEB02276943B00C7070A /* Models */,
+				99C6FEB12276943B00C7070A /* Others */,
+				99C6FEB22276943C00C7070A /* Views */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		99C6FE9E227693EB00C7070A /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FE9F227693EB00C7070A /* Others */,
+				99C6FEA0227693EB00C7070A /* Models */,
+				99C6FEA1227693EB00C7070A /* Controllers */,
+				99C6FEA2227693EB00C7070A /* Views */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		99C6FE9F227693EB00C7070A /* Others */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Others;
+			sourceTree = "<group>";
+		};
+		99C6FEA0227693EB00C7070A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		99C6FEA1227693EB00C7070A /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEB82276950C00C7070A /* YRMainVC.h */,
+				99C6FEB92276950C00C7070A /* YRMainVC.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		99C6FEA2227693EB00C7070A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FECF2276982F00C7070A /* YRTabBar.h */,
+				99C6FED02276982F00C7070A /* YRTabBar.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		99C6FEA32276940600C7070A /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEA42276940600C7070A /* Others */,
+				99C6FEA52276940600C7070A /* Models */,
+				99C6FEA62276940600C7070A /* Controllers */,
+				99C6FEA72276940600C7070A /* Views */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		99C6FEA42276940600C7070A /* Others */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Others;
+			sourceTree = "<group>";
+		};
+		99C6FEA52276940600C7070A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		99C6FEA62276940600C7070A /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEBB2276953E00C7070A /* YRVLoginVC.h */,
+				99C6FEBC2276953E00C7070A /* YRVLoginVC.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		99C6FEA72276940600C7070A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		99C6FEA82276941900C7070A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		99C6FEA92276941900C7070A /* Others */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Others;
+			sourceTree = "<group>";
+		};
+		99C6FEAA2276941A00C7070A /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEBE2276957400C7070A /* YRMineVC.h */,
+				99C6FEBF2276957400C7070A /* YRMineVC.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		99C6FEAB2276941A00C7070A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		99C6FEAC2276942900C7070A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		99C6FEAD2276942900C7070A /* Others */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Others;
+			sourceTree = "<group>";
+		};
+		99C6FEAE2276942900C7070A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		99C6FEAF2276942900C7070A /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEC12276959B00C7070A /* YRWorkVC.h */,
+				99C6FEC22276959B00C7070A /* YRWorkVC.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		99C6FEB02276943B00C7070A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		99C6FEB12276943B00C7070A /* Others */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Others;
+			sourceTree = "<group>";
+		};
+		99C6FEB22276943C00C7070A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		99C6FEB32276943C00C7070A /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEC9227696CA00C7070A /* YRMsgVC.h */,
+				99C6FECA227696CA00C7070A /* YRMsgVC.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		99C6FEB42276944800C7070A /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FECC227697DA00C7070A /* YRContactVC.h */,
+				99C6FECD227697DA00C7070A /* YRContactVC.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		99C6FEB52276944800C7070A /* Others */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Others;
+			sourceTree = "<group>";
+		};
+		99C6FEB62276944800C7070A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		99C6FEB72276944800C7070A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		99C6FEC42276962800C7070A /* Web */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEC52276965200C7070A /* Main */,
+			);
+			name = Web;
+			path = UU_Ent/Modules/Web;
+			sourceTree = SOURCE_ROOT;
+		};
+		99C6FEC52276965200C7070A /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				99C6FEC62276966600C7070A /* YRWebVC.h */,
+				99C6FEC72276966600C7070A /* YRWebVC.m */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		C72D523677B19DCBAEBD26E1 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				F21F3925C5D7942C9E06A9B7 /* libPods-UU_Ent.a */,
+				102F3AF440E73FF2A1EB3208 /* libPods-UU_EntTests.a */,
+				F4F857DEEC69AEDCFACDFD51 /* libPods-UU_EntUITests.a */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		DEB95212CB06CC2B2E94075E /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				71B4DF45C8EC3368ACFC4193 /* Pods-UU_Ent.debug.xcconfig */,
+				13A4F2D13DACD5857BD40BDE /* Pods-UU_Ent.release.xcconfig */,
+				DA26F5F8909B0156F0F3EC26 /* Pods-UU_EntTests.debug.xcconfig */,
+				49A8B37D50A80EFFD84620EC /* Pods-UU_EntTests.release.xcconfig */,
+				B5220A6F4D02F3A377D1E1D6 /* Pods-UU_EntUITests.debug.xcconfig */,
+				49D3F089EECE8E3EDF7D2E1C /* Pods-UU_EntUITests.release.xcconfig */,
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		99C6FE4322768B5B00C7070A /* UU_Ent */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 99C6FE7022768B5C00C7070A /* Build configuration list for PBXNativeTarget "UU_Ent" */;
+			buildPhases = (
+				090EEC0300D50242E42AF186 /* [CP] Check Pods Manifest.lock */,
+				99C6FE4022768B5B00C7070A /* Sources */,
+				99C6FE4122768B5B00C7070A /* Frameworks */,
+				99C6FE4222768B5B00C7070A /* Resources */,
+				79C55E5CC58E2B8BA0FAD00C /* [CP] Copy Pods Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = UU_Ent;
+			productName = UU_Ent;
+			productReference = 99C6FE4422768B5B00C7070A /* UU_Ent.app */;
+			productType = "com.apple.product-type.application";
+		};
+		99C6FE5B22768B5C00C7070A /* UU_EntTests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 99C6FE7322768B5C00C7070A /* Build configuration list for PBXNativeTarget "UU_EntTests" */;
+			buildPhases = (
+				448E7422669634DE3F6256F2 /* [CP] Check Pods Manifest.lock */,
+				99C6FE5822768B5C00C7070A /* Sources */,
+				99C6FE5922768B5C00C7070A /* Frameworks */,
+				99C6FE5A22768B5C00C7070A /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				99C6FE5E22768B5C00C7070A /* PBXTargetDependency */,
+			);
+			name = UU_EntTests;
+			productName = UU_EntTests;
+			productReference = 99C6FE5C22768B5C00C7070A /* UU_EntTests.xctest */;
+			productType = "com.apple.product-type.bundle.unit-test";
+		};
+		99C6FE6622768B5C00C7070A /* UU_EntUITests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 99C6FE7622768B5C00C7070A /* Build configuration list for PBXNativeTarget "UU_EntUITests" */;
+			buildPhases = (
+				A2F6040888740937A057571A /* [CP] Check Pods Manifest.lock */,
+				99C6FE6322768B5C00C7070A /* Sources */,
+				99C6FE6422768B5C00C7070A /* Frameworks */,
+				99C6FE6522768B5C00C7070A /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				99C6FE6922768B5C00C7070A /* PBXTargetDependency */,
+			);
+			name = UU_EntUITests;
+			productName = UU_EntUITests;
+			productReference = 99C6FE6722768B5C00C7070A /* UU_EntUITests.xctest */;
+			productType = "com.apple.product-type.bundle.ui-testing";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		99C6FE3C22768B5B00C7070A /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				CLASSPREFIX = YR;
+				LastUpgradeCheck = 1020;
+				ORGANIZATIONNAME = UAS;
+				TargetAttributes = {
+					99C6FE4322768B5B00C7070A = {
+						CreatedOnToolsVersion = 10.2.1;
+					};
+					99C6FE5B22768B5C00C7070A = {
+						CreatedOnToolsVersion = 10.2.1;
+						TestTargetID = 99C6FE4322768B5B00C7070A;
+					};
+					99C6FE6622768B5C00C7070A = {
+						CreatedOnToolsVersion = 10.2.1;
+						TestTargetID = 99C6FE4322768B5B00C7070A;
+					};
+				};
+			};
+			buildConfigurationList = 99C6FE3F22768B5B00C7070A /* Build configuration list for PBXProject "UU_Ent" */;
+			compatibilityVersion = "Xcode 9.3";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 99C6FE3B22768B5B00C7070A;
+			productRefGroup = 99C6FE4522768B5B00C7070A /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				99C6FE4322768B5B00C7070A /* UU_Ent */,
+				99C6FE5B22768B5C00C7070A /* UU_EntTests */,
+				99C6FE6622768B5C00C7070A /* UU_EntUITests */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		99C6FE4222768B5B00C7070A /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				99C6FE9022768EC000C7070A /* Assets.xcassets in Resources */,
+				99C6FE9122768EC000C7070A /* LaunchScreen.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		99C6FE5A22768B5C00C7070A /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		99C6FE6522768B5C00C7070A /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		090EEC0300D50242E42AF186 /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-UU_Ent-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
+		448E7422669634DE3F6256F2 /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-UU_EntTests-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
+		79C55E5CC58E2B8BA0FAD00C /* [CP] Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${SRCROOT}/Pods/Target Support Files/Pods-UU_Ent/Pods-UU_Ent-resources.sh",
+				"${PODS_CONFIGURATION_BUILD_DIR}/gRPC/gRPCCertificates.bundle",
+			);
+			name = "[CP] Copy Pods Resources";
+			outputPaths = (
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-UU_Ent/Pods-UU_Ent-resources.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		A2F6040888740937A057571A /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-UU_EntUITests-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		99C6FE4022768B5B00C7070A /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				99C6FED12276982F00C7070A /* YRTabBar.m in Sources */,
+				99C6FEBD2276953E00C7070A /* YRVLoginVC.m in Sources */,
+				99C6FECB227696CA00C7070A /* YRMsgVC.m in Sources */,
+				99C6FE9222768EC000C7070A /* main.m in Sources */,
+				99C6FE99227690F800C7070A /* YRBaseNav.m in Sources */,
+				99C6FE96227690BE00C7070A /* YRBaseVC.m in Sources */,
+				99C6FEC32276959B00C7070A /* YRWorkVC.m in Sources */,
+				99C6FECE227697DA00C7070A /* YRContactVC.m in Sources */,
+				99C6FEC82276966600C7070A /* YRWebVC.m in Sources */,
+				99C6FEC02276957400C7070A /* YRMineVC.m in Sources */,
+				99C6FE8F22768EC000C7070A /* AppDelegate.m in Sources */,
+				99C6FEBA2276950C00C7070A /* YRMainVC.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		99C6FE5822768B5C00C7070A /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				99C6FE6122768B5C00C7070A /* UU_EntTests.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		99C6FE6322768B5C00C7070A /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				99C6FE6C22768B5C00C7070A /* UU_EntUITests.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		99C6FE5E22768B5C00C7070A /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 99C6FE4322768B5B00C7070A /* UU_Ent */;
+			targetProxy = 99C6FE5D22768B5C00C7070A /* PBXContainerItemProxy */;
+		};
+		99C6FE6922768B5C00C7070A /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 99C6FE4322768B5B00C7070A /* UU_Ent */;
+			targetProxy = 99C6FE6822768B5C00C7070A /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		99C6FE8822768EC000C7070A /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				99C6FE8922768EC000C7070A /* Base */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		99C6FE6E22768B5C00C7070A /* 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++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				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 = 12.2;
+				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+				MTL_FAST_MATH = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+			};
+			name = Debug;
+		};
+		99C6FE6F22768B5C00C7070A /* 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++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "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 = gnu11;
+				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 = 12.2;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				MTL_FAST_MATH = YES;
+				SDKROOT = iphoneos;
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		99C6FE7122768B5C00C7070A /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 71B4DF45C8EC3368ACFC4193 /* Pods-UU_Ent.debug.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_STYLE = Automatic;
+				INFOPLIST_FILE = "UU_Ent/Supporting Files/Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = "YR.UU-Ent";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		99C6FE7222768B5C00C7070A /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 13A4F2D13DACD5857BD40BDE /* Pods-UU_Ent.release.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_STYLE = Automatic;
+				INFOPLIST_FILE = "UU_Ent/Supporting Files/Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = "YR.UU-Ent";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Release;
+		};
+		99C6FE7422768B5C00C7070A /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = DA26F5F8909B0156F0F3EC26 /* Pods-UU_EntTests.debug.xcconfig */;
+			buildSettings = {
+				BUNDLE_LOADER = "$(TEST_HOST)";
+				CODE_SIGN_STYLE = Automatic;
+				INFOPLIST_FILE = UU_EntTests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = "YR.UU-EntTests";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/UU_Ent.app/UU_Ent";
+			};
+			name = Debug;
+		};
+		99C6FE7522768B5C00C7070A /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 49A8B37D50A80EFFD84620EC /* Pods-UU_EntTests.release.xcconfig */;
+			buildSettings = {
+				BUNDLE_LOADER = "$(TEST_HOST)";
+				CODE_SIGN_STYLE = Automatic;
+				INFOPLIST_FILE = UU_EntTests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = "YR.UU-EntTests";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/UU_Ent.app/UU_Ent";
+			};
+			name = Release;
+		};
+		99C6FE7722768B5C00C7070A /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = B5220A6F4D02F3A377D1E1D6 /* Pods-UU_EntUITests.debug.xcconfig */;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				INFOPLIST_FILE = UU_EntUITests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = "YR.UU-EntUITests";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = UU_Ent;
+			};
+			name = Debug;
+		};
+		99C6FE7822768B5C00C7070A /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 49D3F089EECE8E3EDF7D2E1C /* Pods-UU_EntUITests.release.xcconfig */;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				INFOPLIST_FILE = UU_EntUITests/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = "YR.UU-EntUITests";
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = UU_Ent;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		99C6FE3F22768B5B00C7070A /* Build configuration list for PBXProject "UU_Ent" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				99C6FE6E22768B5C00C7070A /* Debug */,
+				99C6FE6F22768B5C00C7070A /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		99C6FE7022768B5C00C7070A /* Build configuration list for PBXNativeTarget "UU_Ent" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				99C6FE7122768B5C00C7070A /* Debug */,
+				99C6FE7222768B5C00C7070A /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		99C6FE7322768B5C00C7070A /* Build configuration list for PBXNativeTarget "UU_EntTests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				99C6FE7422768B5C00C7070A /* Debug */,
+				99C6FE7522768B5C00C7070A /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		99C6FE7622768B5C00C7070A /* Build configuration list for PBXNativeTarget "UU_EntUITests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				99C6FE7722768B5C00C7070A /* Debug */,
+				99C6FE7822768B5C00C7070A /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 99C6FE3C22768B5B00C7070A /* Project object */;
+}

+ 14 - 0
UU_Ent/UU_Ent.xcodeproj/xcuserdata/ime.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -0,0 +1,14 @@
+<?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>UU_Ent.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+	</dict>
+</dict>
+</plist>

+ 17 - 0
UU_Ent/UU_Ent/Modules/App/AppDelegate.h

@@ -0,0 +1,17 @@
+//
+//  AppDelegate.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+
+@end
+

+ 60 - 0
UU_Ent/UU_Ent/Modules/App/AppDelegate.m

@@ -0,0 +1,60 @@
+//
+//  AppDelegate.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "AppDelegate.h"
+#import "YRMainVC.h"
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    // Override point for customization after application launch.
+    
+    YRMainVC *mainVC = [[YRMainVC alloc]init];
+    
+    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
+    
+    self.window.rootViewController = mainVC;
+    
+    [self.window makeKeyAndVisible];
+    
+    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

+ 17 - 0
UU_Ent/UU_Ent/Modules/Base/YRBaseNav.h

@@ -0,0 +1,17 @@
+//
+//  YRBaseNav.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRBaseNav : UINavigationController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 24 - 0
UU_Ent/UU_Ent/Modules/Base/YRBaseNav.m

@@ -0,0 +1,24 @@
+//
+//  YRBaseNav.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseNav.h"
+
+@interface YRBaseNav ()
+
+@end
+
+@implementation YRBaseNav
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+}
+
+
+
+@end

+ 21 - 0
UU_Ent/UU_Ent/Modules/Base/YRBaseVC.h

@@ -0,0 +1,21 @@
+//
+//  YRBaseVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRBaseVC : UIViewController
+
+@property(strong,nonatomic)NSDictionary *paramDic;
+
+-(void)setUpUI;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 41 - 0
UU_Ent/UU_Ent/Modules/Base/YRBaseVC.m

@@ -0,0 +1,41 @@
+//
+//  YRBaseVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseVC.h"
+
+@interface YRBaseVC ()
+
+@end
+
+@implementation YRBaseVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+}
+
+
+-(void)setUpUI{}
+
+
+-(void)setParamDic:(NSDictionary *)paramDic{
+    
+    _paramDic = paramDic;
+    
+    if (paramDic) {
+        
+        [self setValuesForKeysWithDictionary:paramDic];
+        
+    }
+    
+    
+}
+
+-(void)setValue:(id)value forUndefinedKey:(NSString *)key{}
+
+@end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Contacts/Main/Controllers/YRContactVC.h

@@ -0,0 +1,17 @@
+//
+//  YRContactVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseVC.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRContactVC : YRBaseVC
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 23 - 0
UU_Ent/UU_Ent/Modules/Contacts/Main/Controllers/YRContactVC.m

@@ -0,0 +1,23 @@
+//
+//  YRContactVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRContactVC.h"
+
+@interface YRContactVC ()
+
+@end
+
+@implementation YRContactVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    self.title = @"联系人";
+}
+
+@end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Login/Main/Controllers/YRVLoginVC.h

@@ -0,0 +1,17 @@
+//
+//  YRVLoginVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseVC.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRVLoginVC : YRBaseVC
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 24 - 0
UU_Ent/UU_Ent/Modules/Login/Main/Controllers/YRVLoginVC.m

@@ -0,0 +1,24 @@
+//
+//  YRVLoginVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRVLoginVC.h"
+
+@interface YRVLoginVC ()
+
+@end
+
+@implementation YRVLoginVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+}
+
+
+
+@end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Main/Main/Controllers/YRMainVC.h

@@ -0,0 +1,17 @@
+//
+//  YRMainVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRMainVC : UITabBarController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 124 - 0
UU_Ent/UU_Ent/Modules/Main/Main/Controllers/YRMainVC.m

@@ -0,0 +1,124 @@
+//
+//  YRMainVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRMainVC.h"
+#import "YRTabBar.h"
+#import "YRBaseNav.h"
+#import "YRMsgVC.h"
+#import "YRContactVC.h"
+#import "YRWorkVC.h"
+#import "YRMineVC.h"
+@interface YRMainVC ()<UITabBarDelegate,UITabBarControllerDelegate>
+
+@property(strong,nonatomic)NSMutableArray<UIView *> *tarArr;
+
+@end
+
+@implementation YRMainVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    [self setTarbar];
+    
+    [self addChildControllers];
+    
+}
+
+-(void)setTarbar{
+    
+    self.view.backgroundColor = [UIColor whiteColor];
+    
+    YRTabBar *tarBar = [YRTabBar new];
+    
+    tarBar.delegate = self;
+    
+    [self setValue:tarBar forKey:@"tabBar"];
+    
+    self.tabBar.tintColor = [UIColor redColor];
+}
+
+
+-(void)addChildControllers{
+    
+    YRMsgVC *msgVc = [YRMsgVC new];
+    YRContactVC *conVc = [YRContactVC new];
+    YRWorkVC *workVc = [YRWorkVC new];
+    YRMineVC *mineVc = [YRMineVC new];
+    
+    [self subVcWith:msgVc title:@"消息" normalImgTitle:@"UU_TabMes_nor" selImgTitle:@"UU_TabMes_select"];
+    [self subVcWith:conVc title:@"联系人" normalImgTitle:@"UU_TabContact_nor" selImgTitle:@"UU_TabContact_select"];
+    [self subVcWith:workVc title:@"工作" normalImgTitle:@"UU_TabWork_nor" selImgTitle:@"UU_TabWork_select"];
+    [self subVcWith:mineVc title:@"我" normalImgTitle:@"UU_TabMe_nor" selImgTitle:@"UU_TabMe_select"];
+   
+    
+}
+
+-(void)subVcWith:(UIViewController *)vc title:(NSString *)title normalImgTitle:(NSString *)normalTitle selImgTitle:(NSString *)selTitle{
+    
+    UIImage *norImg = [UIImage imageNamed:normalTitle];
+    UIImage *selImg = [UIImage imageNamed:selTitle];
+    norImg = [norImg imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    selImg = [selImg imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    vc.tabBarItem.title = title;
+    vc.tabBarItem.image = norImg;
+    vc.tabBarItem.selectedImage = selImg;
+   
+     YRBaseNav *basNav = [[YRBaseNav alloc]initWithRootViewController:vc];
+    [self addChildViewController:basNav];
+    
+    
+}
+
+-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
+    
+    
+    if (self.tarArr == nil || self.tarArr.count != self.tabBar.items.count) {
+        
+        self.tarArr = [NSMutableArray array];
+        
+        for (UIView *view in self.tabBar.subviews) {
+            
+            Class class = NSClassFromString(@"UITabBarButton");
+            
+            if ([view isKindOfClass:class]) {
+                
+                [self.tarArr addObject:view];
+                
+            }
+            
+            
+        }
+    }
+    
+    int index = 0;
+    
+    for (int i=0; i<self.tabBar.items.count; i++) {
+        
+        if (item == self.tabBar.items[i]) {
+            
+            index = i;
+            
+        }
+        
+    }
+    
+    //缩放动画
+    CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
+    anima.fromValue = [NSNumber numberWithFloat:0.5f];
+    anima.toValue = [NSNumber numberWithFloat:1.0f];
+    anima.duration = 0.3f;
+    anima.repeatCount = 1;
+    [self.tarArr[index].layer addAnimation:anima forKey:@"scaleAnimation"];
+    
+    
+}
+
+
+@end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabBar.h

@@ -0,0 +1,17 @@
+//
+//  YRTabBar.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRTabBar : UITabBar
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 15 - 0
UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabBar.m

@@ -0,0 +1,15 @@
+//
+//  YRTabBar.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRTabBar.h"
+
+@implementation YRTabBar
+
+
+
+@end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Message/Main/Controllers/YRMsgVC.h

@@ -0,0 +1,17 @@
+//
+//  YRMsgVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseVC.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRMsgVC : YRBaseVC
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
UU_Ent/UU_Ent/Modules/Message/Main/Controllers/YRMsgVC.m

@@ -0,0 +1,25 @@
+//
+//  YRMsgVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRMsgVC.h"
+
+@interface YRMsgVC ()
+
+@end
+
+@implementation YRMsgVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    self.title = @"消息";
+}
+
+
+
+@end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Mine/Main/Controllers/YRMineVC.h

@@ -0,0 +1,17 @@
+//
+//  YRMineVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseVC.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRMineVC : YRBaseVC
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
UU_Ent/UU_Ent/Modules/Mine/Main/Controllers/YRMineVC.m

@@ -0,0 +1,25 @@
+//
+//  YRMineVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRMineVC.h"
+
+@interface YRMineVC ()
+
+@end
+
+@implementation YRMineVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    self.title = @"我";
+}
+
+
+
+@end

+ 19 - 0
UU_Ent/UU_Ent/Modules/Web/Main/YRWebVC.h

@@ -0,0 +1,19 @@
+//
+//  YRWebVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseVC.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRWebVC : YRBaseVC
+
+@property(copy,nonatomic)NSString *url;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 25 - 0
UU_Ent/UU_Ent/Modules/Web/Main/YRWebVC.m

@@ -0,0 +1,25 @@
+//
+//  YRWebVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRWebVC.h"
+#import <WebKit/WebKit.h>
+@interface YRWebVC ()
+
+
+@end
+
+@implementation YRWebVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+}
+
+
+
+@end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Work/Main/Controllers/YRWorkVC.h

@@ -0,0 +1,17 @@
+//
+//  YRWorkVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseVC.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRWorkVC : YRBaseVC
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 23 - 0
UU_Ent/UU_Ent/Modules/Work/Main/Controllers/YRWorkVC.m

@@ -0,0 +1,23 @@
+//
+//  YRWorkVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRWorkVC.h"
+
+@interface YRWorkVC ()
+
+@end
+
+@implementation YRWorkVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    self.title = @"工作";
+}
+
+@end

+ 98 - 0
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,98 @@
+{
+  "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"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "20x20",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "20x20",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "29x29",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "29x29",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "40x40",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "40x40",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "76x76",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "76x76",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ipad",
+      "size" : "83.5x83.5",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "ios-marketing",
+      "size" : "1024x1024",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 25 - 0
UU_Ent/UU_Ent/Supporting Files/Base.lproj/LaunchScreen.storyboard

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <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">
+                    <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"/>
+                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+                    </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>

+ 43 - 0
UU_Ent/UU_Ent/Supporting Files/Info.plist

@@ -0,0 +1,43 @@
+<?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>$(DEVELOPMENT_LANGUAGE)</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>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>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>

+ 16 - 0
UU_Ent/UU_Ent/Supporting Files/main.m

@@ -0,0 +1,16 @@
+//
+//  main.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. 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]));
+    }
+}

+ 22 - 0
UU_Ent/UU_EntTests/Info.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>CFBundleDevelopmentRegion</key>
+	<string>$(DEVELOPMENT_LANGUAGE)</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>BNDL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+</dict>
+</plist>

+ 37 - 0
UU_Ent/UU_EntTests/UU_EntTests.m

@@ -0,0 +1,37 @@
+//
+//  UU_EntTests.m
+//  UU_EntTests
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <XCTest/XCTest.h>
+
+@interface UU_EntTests : XCTestCase
+
+@end
+
+@implementation UU_EntTests
+
+- (void)setUp {
+    // Put setup code here. This method is called before the invocation of each test method in the class.
+}
+
+- (void)tearDown {
+    // Put teardown code here. This method is called after the invocation of each test method in the class.
+}
+
+- (void)testExample {
+    // This is an example of a functional test case.
+    // Use XCTAssert and related functions to verify your tests produce the correct results.
+}
+
+- (void)testPerformanceExample {
+    // This is an example of a performance test case.
+    [self measureBlock:^{
+        // Put the code you want to measure the time of here.
+    }];
+}
+
+@end

+ 22 - 0
UU_Ent/UU_EntUITests/Info.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>CFBundleDevelopmentRegion</key>
+	<string>$(DEVELOPMENT_LANGUAGE)</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>BNDL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+</dict>
+</plist>

+ 38 - 0
UU_Ent/UU_EntUITests/UU_EntUITests.m

@@ -0,0 +1,38 @@
+//
+//  UU_EntUITests.m
+//  UU_EntUITests
+//
+//  Created by liujl on 2019/4/29.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <XCTest/XCTest.h>
+
+@interface UU_EntUITests : XCTestCase
+
+@end
+
+@implementation UU_EntUITests
+
+- (void)setUp {
+    // Put setup code here. This method is called before the invocation of each test method in the class.
+
+    // In UI tests it is usually best to stop immediately when a failure occurs.
+    self.continueAfterFailure = NO;
+
+    // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
+    [[[XCUIApplication alloc] init] launch];
+
+    // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
+}
+
+- (void)tearDown {
+    // Put teardown code here. This method is called after the invocation of each test method in the class.
+}
+
+- (void)testExample {
+    // Use recording to get started writing UI tests.
+    // Use XCTAssert and related functions to verify your tests produce the correct results.
+}
+
+@end

+ 193 - 0
UU_Ent/protos/account.proto

@@ -0,0 +1,193 @@
+syntax = "proto3";
+
+package uu.mobile;
+
+import "base.proto";
+
+option java_multiple_files = true;
+option java_package = "com.usoftchina.uu.mobile.grpc.api";
+
+// 账户服务
+service AccountService {
+    // 注册
+    rpc signup (AccountSignupRequest) returns (AccountSignupResponse) {};
+    // 登录
+    rpc signin (AccountSigninRequest) returns (AccountSigninResponse) {};
+    // 切换公司
+    rpc switchCompany (SwitchCompanyRequest) returns (SwitchCompanyResponse) {};
+    // 获取已登录账户信息
+    rpc getInfo (GetAccountInfoRequest) returns (GetAccountInfoResponse) {};
+    // 保存账户信息
+    rpc saveInfo (SaveAccountInfoRequest) returns (SaveAccountInfoResponse) {};
+    // 退出
+    rpc signout (AccountSignoutRequest) returns (AccountSignoutResponse) {};
+}
+
+// 身份令牌,超时需重新登录
+message AuthedToken {
+    // 令牌
+    string token = 1;
+    // 有效期/秒
+    int32 expire = 2;
+    // 产生时间
+    int64 timestamp = 3;
+}
+
+// 注册请求参数
+message AccountSignupRequest {
+    // 手机号
+    string mobile = 1;
+    // 密码
+    string password = 2;
+    // 真实姓名
+    string realname = 3;
+    // 邮箱
+    string email = 4;
+    // 性别
+    AccountInfo.Sex sex = 5;
+    // 头像
+    string avatarUrl = 6;
+}
+
+// 注册响应参数
+message AccountSignupResponse {
+    ResponseHeader responseHeader = 1;
+}
+
+// 登录请求参数
+message AccountSigninRequest {
+    // 手机号
+    string mobile = 1;
+    // 密码
+    string password = 2;
+    // 设备信息
+    DeviceInfo deviceInfo = 3;
+}
+
+// 登录响应参数
+message AccountSigninResponse {
+    ResponseHeader responseHeader = 1;
+    // 身份令牌
+    AuthedToken authedToken = 2;
+    // 账户信息
+    AccountInfo account = 3;
+    // 当前选择的公司(如果只有一个公司,会自动登录到该公司)
+    int64 activeCompanyId = 4;
+    // 账户已绑定公司
+    repeated Company company = 5;
+}
+
+// 切换公司请求参数
+message SwitchCompanyRequest {
+    // 公司ID
+    int64 companyId = 1;
+}
+
+// 切换公司响应参数
+message SwitchCompanyResponse {
+    ResponseHeader responseHeader = 1;
+    // 身份令牌
+    AuthedToken authedToken = 2;
+}
+
+// 获取账户信息请求参数
+message GetAccountInfoRequest {
+}
+
+// 获取账户信息响应参数
+message GetAccountInfoResponse {
+    ResponseHeader responseHeader = 1;
+    // 账户信息
+    AccountInfo account = 2;
+    // 当前选择的公司
+    int64 activeCompanyId = 3;
+    // 账户已绑定公司
+    repeated Company company = 4;
+}
+
+// 保存账户信息请求参数
+message SaveAccountInfoRequest {
+    // 真实姓名
+    string realname = 1;
+    // 头像
+    string avatarUrl = 2;
+    // 性别
+    AccountInfo.Sex sex = 3;
+}
+
+// 保存账户信息响应参数
+message SaveAccountInfoResponse {
+    ResponseHeader responseHeader = 1;
+}
+
+// 退出请求参数
+message AccountSignoutRequest {
+}
+
+// 退出响应参数
+message AccountSignoutResponse {
+    ResponseHeader responseHeader = 1;
+}
+
+// 密码找回相关
+service PasswordService {
+    // 手机验证码方式找回密码,发送手机验证码
+    rpc sendCheckCodeByMobile (SendCheckCodeByMobileRequest) returns (SendCheckCodeByMobileResponse) {};
+    // 手机验证码方式找回密码,校验验证码
+    rpc resetByCheckCode (ResetByCheckCodeRequest) returns (ResetByCheckCodeResponse) {};
+    // 邮箱链接方式找回密码,按手机号获取邮箱号
+    rpc getEmailByMobile (GetEmailByMobileRequest) returns (GetEmailByMobileResponse) {};
+    // 发送带验证链接的邮件
+    rpc sendCheckEmail (SendCheckEmailRequest) returns (SendCheckEmailResponse) {};
+}
+
+// 手机验证码方式找回密码,发送手机验证码请求参数
+message SendCheckCodeByMobileRequest {
+    string mobile = 1;
+}
+
+// 手机验证码方式找回密码,发送手机验证码响应参数
+message SendCheckCodeByMobileResponse {
+    ResponseHeader responseHeader = 1;
+    // 本次验证标志
+    string token = 2;
+}
+
+// 手机验证码方式找回密码,重置密码请求参数
+message ResetByCheckCodeRequest {
+    string mobile = 1;
+    // SendCheckCodeByMobileResponse返回的token标志
+    string token = 2;
+    // 验证码
+    string code = 3;
+    // 新的密码
+    string password = 4;
+}
+
+// 手机验证码方式找回密码,重置密码响应参数
+message ResetByCheckCodeResponse {
+    ResponseHeader responseHeader = 1;
+}
+
+// 邮箱链接方式找回密码,按手机号获取邮箱号请求参数
+message GetEmailByMobileRequest {
+    string mobile = 1;
+}
+
+// 邮箱链接方式找回密码,按手机号获取邮箱号响应参数
+message GetEmailByMobileResponse {
+    ResponseHeader responseHeader = 1;
+    // 本次验证标志
+    string token = 2;
+    string email = 3;
+}
+
+// 发送带验证链接的邮件请求参数
+message SendCheckEmailRequest {
+    string token = 1;
+}
+
+// 发送带验证链接的邮件响应参数
+message SendCheckEmailResponse {
+    ResponseHeader responseHeader = 1;
+}

+ 24 - 0
UU_Ent/protos/app.proto

@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+package uu.mobile;
+
+import "base.proto";
+
+option java_multiple_files = true;
+option java_package = "com.usoftchina.uu.mobile.grpc.api";
+
+// 应用中心
+service AppService {
+    // 获取应用配置
+    rpc getConfig (GetAppConfigRequest) returns (GetAppConfigResponse) {};
+}
+
+// 获取应用配置请求参数
+message GetAppConfigRequest {
+}
+
+// 获取应用配置响应参数
+message GetAppConfigResponse {
+    ResponseHeader responseHeader = 1;
+    repeated AppGroupConfig config = 2;
+}

+ 170 - 0
UU_Ent/protos/base.proto

@@ -0,0 +1,170 @@
+syntax = "proto3";
+
+package uu.mobile;
+
+option java_multiple_files = true;
+option java_package = "com.usoftchina.uu.mobile.grpc.api";
+
+// 响应头
+message ResponseHeader {
+    // 是否成功
+    bool success = 1;
+    // 错误码
+    int32 code = 2;
+    // 错误信息
+    string message = 3;
+}
+
+// 分页信息
+message Paging {
+    // 总页数
+    int32 totalPage = 1;
+    // 总条数
+    int32 totalCount = 2;
+    // 每页条数
+    int32 pageSize = 3;
+    // 当前页
+    int32 pageNumber = 4;
+}
+
+// 账户
+message AccountInfo {
+    int64 id = 1;
+    // 真实姓名(考虑是企业应用,非社交类型,不需要昵称)
+    string realname = 2;
+    // 手机号
+    string mobile = 3;
+    // 邮箱
+    string email = 4;
+    // 头像
+    string avatarUrl = 5;
+    Sex sex = 6;
+    // 性别
+    enum Sex {
+        // 女
+        FEMALE = 0;
+        // 男
+        MALE = 1;
+    }
+}
+
+// 公司
+message Company {
+    int64 id = 1;
+    // 名称
+    string name = 2;
+}
+
+// 视图类型
+enum ViewType {
+    // 原生
+    WIDGET = 0;
+    // 网页
+    WEB = 1;
+}
+
+// 消息配置
+message MessageConfig {
+    // 唯一编码,例如 uas.todo
+    string code = 1;
+    // 消息名,例如 待办事项
+    string name = 2;
+    // 图标
+    string icon = 3;
+    // 打开视图类型
+    ViewType viewType = 4;
+    // Android
+    string androidWidget = 5;
+    // IOS
+    string iosWidget = 6;
+    // 网页
+    string webUrl = 7;
+}
+
+// 未读消息统计
+message UnreadMessageCount {
+    // 消息编码
+    string code = 1;
+    // 消息数
+    int32 count = 2;
+}
+
+// 消息
+message MessageInfo {
+    // ID
+    int64 id = 1;
+    // 消息内容
+    string body = 2;
+    // 状态
+    Status status = 3;
+    enum Status {
+        // 未读
+        UNREAD = 0;
+        // 已读
+        READ = 1;
+    }
+}
+
+// 应用组配置
+message AppGroupConfig {
+    string name = 1;
+    repeated AppConfig appConfig = 2;
+}
+
+// 应用配置
+message AppConfig {
+    int32 id = 1;
+    // 应用名
+    string name = 2;
+    // 图标
+    string icon = 3;
+    // 打开视图类型
+    ViewType viewType = 4;
+    // Android
+    string androidWidget = 5;
+    // IOS
+    string iosWidget = 6;
+    // 网页
+    string webUrl = 7;
+}
+
+// 我的主页配置
+message HomeConfig {
+    int32 id = 1;
+    // 显示名
+    string name = 2;
+    // 图标
+    string icon = 3;
+    // 显示/打开视图类型
+    ViewType viewType = 4;
+    // 显示/打开Android控件
+    string androidWidget = 5;
+    // 显示/打开IOS控件
+    string iosWidget = 6;
+    // 打开网页
+    string webUrl = 7;
+}
+
+// 设备信息
+message DeviceInfo {
+    // 客户端发行版本,例如1.0.0
+    string version = 1;
+    // 设备型号
+    string model = 2;
+    // 系统
+    OS os = 3;
+    enum OS {
+        ANDROID = 0;
+        IOS = 1;
+    }
+    // 系统版本,例如7.1
+    string osVersion = 4;
+    // 经度
+    double longitude = 5;
+    // 纬度
+    double latitude = 6;
+    // 位置
+    string location = 7;
+    // 语言
+    string lang = 8;
+}

+ 24 - 0
UU_Ent/protos/home.proto

@@ -0,0 +1,24 @@
+syntax = "proto3";
+
+package uu.mobile;
+
+import "base.proto";
+
+option java_multiple_files = true;
+option java_package = "com.usoftchina.uu.mobile.grpc.api";
+
+// 我的主页
+service HomeService {
+    // 获取我的主页配置
+    rpc getConfig (GetHomeConfigRequest) returns (GetHomeConfigResponse);
+}
+
+// 获取我的主页配置请求参数
+message GetHomeConfigRequest {
+}
+
+// 获取我的主页配置响应参数
+message GetHomeConfigResponse {
+    ResponseHeader responseHeader = 1;
+    repeated HomeConfig config = 2;
+}

+ 78 - 0
UU_Ent/protos/message.proto

@@ -0,0 +1,78 @@
+syntax = "proto3";
+
+package uu.mobile;
+
+import "base.proto";
+
+option java_multiple_files = true;
+option java_package = "com.usoftchina.uu.mobile.grpc.api";
+
+// 消息服务
+service MessageService {
+    // 获取消息配置
+    rpc getConfig (GetMessageConfigRequest) returns (GetMessageConfigResponse) {};
+    // 未读消息统计
+    rpc getUnreadCount (GetUnreadMessageCountRequest) returns (GetUnreadMessageCountResponse) {};
+    // 获取消息
+    rpc getMessages (GetMessagesRequest) returns (GetMessagesResponse) {};
+    // 设置为已读
+    rpc setRead (SetMessageReadRequest) returns (SetMessageReadResponse) {};
+}
+
+// 获取消息配置请求参数
+message GetMessageConfigRequest {
+}
+
+// 获取消息配置响应参数
+message GetMessageConfigResponse {
+    ResponseHeader responseHeader = 1;
+    repeated MessageConfig config = 2;
+}
+
+// 未读消息统计请求参数
+message GetUnreadMessageCountRequest {
+}
+
+// 未读消息统计响应参数
+message GetUnreadMessageCountResponse {
+    ResponseHeader responseHeader = 1;
+    repeated UnreadMessageCount unread = 2;
+}
+
+// 获取消息请求参数
+message GetMessagesRequest {
+    // 每页条数
+    int32 pageSize = 1;
+    // 当前页
+    int32 pageNumber = 2;
+    // 消息编码
+    string code = 3;
+    // 消息状态
+    Status status = 4;
+
+    enum Status {
+        // 未读
+        UNREAD = 0;
+        // 已读
+        READ = 1;
+        // 全部
+        ALL = 2;
+    }
+}
+
+// 获取消息响应参数
+message GetMessagesResponse {
+    ResponseHeader responseHeader = 1;
+    Paging paging = 2;
+    repeated MessageInfo message = 3;
+}
+
+// 设置消息已读请求参数
+message SetMessageReadRequest {
+    int64 messageId = 1;
+}
+
+// 设置消息已读响应参数
+message SetMessageReadResponse {
+    ResponseHeader responseHeader = 1;
+}