Browse Source

搭建 使用bilibili swift 框架

openlockPPP 1 year ago
parent
commit
7099e4d846
100 changed files with 4061 additions and 1171 deletions
  1. 186 16
      JSJP_Student_sw.xcodeproj/project.pbxproj
  2. 1 1
      JSJP_Student_sw.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist
  3. 6 0
      JSJP_Student_sw/Assets.xcassets/Launch/Contents.json
  4. 21 0
      JSJP_Student_sw/Assets.xcassets/Launch/launch_background.imageset/Contents.json
  5. BIN
      JSJP_Student_sw/Assets.xcassets/Launch/launch_background.imageset/launch_background@3x.png
  6. 23 0
      JSJP_Student_sw/Assets.xcassets/Launch/launch_splash.imageset/Contents.json
  7. BIN
      JSJP_Student_sw/Assets.xcassets/Launch/launch_splash.imageset/launcher_default_inner.png
  8. BIN
      JSJP_Student_sw/Assets.xcassets/Launch/launch_splash.imageset/launcher_default_inner@2x.png
  9. BIN
      JSJP_Student_sw/Assets.xcassets/Launch/launch_splash.imageset/launcher_default_inner@3x.png
  10. 0 0
      JSJP_Student_sw/Main.storyboard
  11. 23 6
      JSJP_Student_sw/Sources/AppDelegate.swift
  12. 32 34
      JSJP_Student_sw/Sources/CompositionRoot.swift
  13. 26 0
      JSJP_Student_sw/Sources/Custom/View/Toaster/NYSwToaster.swift
  14. 95 0
      JSJP_Student_sw/Sources/Main/BaseViewController.swift
  15. 41 0
      JSJP_Student_sw/Sources/Main/MainNavigationController.swift
  16. 83 0
      JSJP_Student_sw/Sources/Main/MainTabBarController.swift
  17. 17 0
      JSJP_Student_sw/Sources/Main/MainTabBarViewReactor.swift
  18. 26 0
      JSJP_Student_sw/Sources/Modulars/Home/Controllers/HomeParentViewController.swift
  19. 160 0
      JSJP_Student_sw/Sources/Modulars/Home/Helper/HomeEnum.swift
  20. 78 0
      JSJP_Student_sw/Sources/Modulars/Home/Helper/TogetherDataManager.swift
  21. 28 0
      JSJP_Student_sw/Sources/Modulars/Mine/Controllers/MineParentViewController.swift
  22. 99 0
      JSJP_Student_sw/Sources/Modulars/Splash/SplashModel.swift
  23. 64 0
      JSJP_Student_sw/Sources/Modulars/Splash/SplashViewController.swift
  24. 28 0
      JSJP_Student_sw/Sources/Modulars/Timekeep/Controllers/TimeKeepParentViewController.swift
  25. 3 3
      JSJP_Student_sw/Sources/Networking/NetEnvironment.swift
  26. 101 0
      JSJP_Student_sw/Sources/Networking/Networking.swift
  27. 34 0
      JSJP_Student_sw/Sources/Networking/Plugins/LoadingPlugin.swift
  28. 145 0
      JSJP_Student_sw/Sources/Services/HomeAPI.swift
  29. 50 0
      JSJP_Student_sw/Sources/Services/HomeService.swift
  30. 77 0
      JSJP_Student_sw/Sources/Utils/NYSwRouter.swift
  31. 3 3
      Podfile
  32. 27 2
      Podfile.lock
  33. 27 2
      Pods/Manifest.lock
  34. 1382 1010
      Pods/Pods.xcodeproj/project.pbxproj
  35. 182 71
      Pods/Pods.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist
  36. 1 1
      Pods/Target Support Files/Alamofire/Alamofire-Info.plist
  37. 1 0
      Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig
  38. 1 0
      Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig
  39. 1 1
      Pods/Target Support Files/CGFloatLiteral/CGFloatLiteral-Info.plist
  40. 1 0
      Pods/Target Support Files/CGFloatLiteral/CGFloatLiteral.debug.xcconfig
  41. 1 0
      Pods/Target Support Files/CGFloatLiteral/CGFloatLiteral.release.xcconfig
  42. 1 1
      Pods/Target Support Files/CocoaLumberjack/CocoaLumberjack-Info.plist
  43. 1 0
      Pods/Target Support Files/CocoaLumberjack/CocoaLumberjack.debug.xcconfig
  44. 1 0
      Pods/Target Support Files/CocoaLumberjack/CocoaLumberjack.release.xcconfig
  45. 1 1
      Pods/Target Support Files/Differentiator/Differentiator-Info.plist
  46. 1 0
      Pods/Target Support Files/Differentiator/Differentiator.debug.xcconfig
  47. 1 0
      Pods/Target Support Files/Differentiator/Differentiator.release.xcconfig
  48. 1 1
      Pods/Target Support Files/Dollar/Dollar-Info.plist
  49. 1 0
      Pods/Target Support Files/Dollar/Dollar.debug.xcconfig
  50. 1 0
      Pods/Target Support Files/Dollar/Dollar.release.xcconfig
  51. 1 1
      Pods/Target Support Files/ESPullToRefresh/ESPullToRefresh-Info.plist
  52. 1 0
      Pods/Target Support Files/ESPullToRefresh/ESPullToRefresh.debug.xcconfig
  53. 1 0
      Pods/Target Support Files/ESPullToRefresh/ESPullToRefresh.release.xcconfig
  54. 1 1
      Pods/Target Support Files/ESPullToRefresh/ResourceBundle-ESPullToRefresh-ESPullToRefresh-Info.plist
  55. 1 1
      Pods/Target Support Files/EmptyKit/EmptyKit-Info.plist
  56. 1 0
      Pods/Target Support Files/EmptyKit/EmptyKit.debug.xcconfig
  57. 1 0
      Pods/Target Support Files/EmptyKit/EmptyKit.release.xcconfig
  58. 1 1
      Pods/Target Support Files/FSPagerView/FSPagerView-Info.plist
  59. 1 0
      Pods/Target Support Files/FSPagerView/FSPagerView.debug.xcconfig
  60. 1 0
      Pods/Target Support Files/FSPagerView/FSPagerView.release.xcconfig
  61. 1 1
      Pods/Target Support Files/GDPerformanceView-Swift/GDPerformanceView-Swift-Info.plist
  62. 1 0
      Pods/Target Support Files/GDPerformanceView-Swift/GDPerformanceView-Swift.debug.xcconfig
  63. 1 0
      Pods/Target Support Files/GDPerformanceView-Swift/GDPerformanceView-Swift.release.xcconfig
  64. 1 1
      Pods/Target Support Files/Kingfisher/Kingfisher-Info.plist
  65. 1 0
      Pods/Target Support Files/Kingfisher/Kingfisher.debug.xcconfig
  66. 1 0
      Pods/Target Support Files/Kingfisher/Kingfisher.release.xcconfig
  67. 1 1
      Pods/Target Support Files/ManualLayout/ManualLayout-Info.plist
  68. 1 0
      Pods/Target Support Files/ManualLayout/ManualLayout.debug.xcconfig
  69. 1 0
      Pods/Target Support Files/ManualLayout/ManualLayout.release.xcconfig
  70. 1 1
      Pods/Target Support Files/Moya/Moya-Info.plist
  71. 1 0
      Pods/Target Support Files/Moya/Moya.debug.xcconfig
  72. 1 0
      Pods/Target Support Files/Moya/Moya.release.xcconfig
  73. 1 1
      Pods/Target Support Files/NSObject+Rx/NSObject+Rx-Info.plist
  74. 1 0
      Pods/Target Support Files/NSObject+Rx/NSObject+Rx.debug.xcconfig
  75. 1 0
      Pods/Target Support Files/NSObject+Rx/NSObject+Rx.release.xcconfig
  76. 1 1
      Pods/Target Support Files/ObjectMapper/ObjectMapper-Info.plist
  77. 1 0
      Pods/Target Support Files/ObjectMapper/ObjectMapper.debug.xcconfig
  78. 1 0
      Pods/Target Support Files/ObjectMapper/ObjectMapper.release.xcconfig
  79. 1 1
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-Info.plist
  80. 437 0
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-acknowledgements.markdown
  81. 467 0
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-acknowledgements.plist
  82. 5 0
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks-Debug-input-files.xcfilelist
  83. 5 0
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks-Debug-output-files.xcfilelist
  84. 5 0
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks-Release-input-files.xcfilelist
  85. 5 0
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks-Release-output-files.xcfilelist
  86. 11 1
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks.sh
  87. 1 1
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw.debug.xcconfig
  88. 1 1
      Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw.release.xcconfig
  89. 1 1
      Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist
  90. 1 0
      Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig
  91. 1 0
      Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig
  92. 1 1
      Pods/Target Support Files/ReusableKit/ReusableKit-Info.plist
  93. 1 0
      Pods/Target Support Files/ReusableKit/ReusableKit.debug.xcconfig
  94. 1 0
      Pods/Target Support Files/ReusableKit/ReusableKit.release.xcconfig
  95. 1 1
      Pods/Target Support Files/RxCocoa/RxCocoa-Info.plist
  96. 1 0
      Pods/Target Support Files/RxCocoa/RxCocoa.debug.xcconfig
  97. 1 0
      Pods/Target Support Files/RxCocoa/RxCocoa.release.xcconfig
  98. 1 1
      Pods/Target Support Files/RxDataSources/RxDataSources-Info.plist
  99. 1 0
      Pods/Target Support Files/RxDataSources/RxDataSources.debug.xcconfig
  100. 1 0
      Pods/Target Support Files/RxDataSources/RxDataSources.release.xcconfig

+ 186 - 16
JSJP_Student_sw.xcodeproj/project.pbxproj

@@ -8,9 +8,27 @@
 
 /* Begin PBXBuildFile section */
 		2281B61AEFC76AFFBF9C29DD /* Pods_JSJP_Student_sw.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C45679F20E7108A4E8C08D40 /* Pods_JSJP_Student_sw.framework */; };
+		90A64B902A25A49500D8BED6 /* URLNavigationMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64B8F2A25A49500D8BED6 /* URLNavigationMap.swift */; };
+		90A64B922A25A4DC00D8BED6 /* NYSwRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64B912A25A4DC00D8BED6 /* NYSwRouter.swift */; };
+		90A64B972A25A57C00D8BED6 /* NYSwToaster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64B962A25A57C00D8BED6 /* NYSwToaster.swift */; };
+		90A64B992A25A7F100D8BED6 /* MainNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64B982A25A7F100D8BED6 /* MainNavigationController.swift */; };
+		90A64B9B2A25A91B00D8BED6 /* HomeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64B9A2A25A91B00D8BED6 /* HomeService.swift */; };
+		90A64BA02A25AA0900D8BED6 /* SplashModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64B9F2A25AA0900D8BED6 /* SplashModel.swift */; };
+		90A64BA42A25BD1400D8BED6 /* LoadingPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BA32A25BD1400D8BED6 /* LoadingPlugin.swift */; };
+		90A64BA62A25BD3A00D8BED6 /* Networking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BA52A25BD3A00D8BED6 /* Networking.swift */; };
+		90A64BA82A25BF8100D8BED6 /* HomeAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BA72A25BF8100D8BED6 /* HomeAPI.swift */; };
+		90A64BAD2A25C32900D8BED6 /* HomeParentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BAC2A25C32900D8BED6 /* HomeParentViewController.swift */; };
+		90A64BAF2A25C35700D8BED6 /* HomeEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BAE2A25C35700D8BED6 /* HomeEnum.swift */; };
+		90A64BB12A25D03700D8BED6 /* SplashViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BB02A25D03700D8BED6 /* SplashViewController.swift */; };
+		90A64BB32A25D11800D8BED6 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BB22A25D11800D8BED6 /* BaseViewController.swift */; };
+		90A64BB72A25D56700D8BED6 /* TimeKeepParentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BB62A25D56700D8BED6 /* TimeKeepParentViewController.swift */; };
+		90A64BBB2A25D76100D8BED6 /* MineParentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BBA2A25D76100D8BED6 /* MineParentViewController.swift */; };
+		90A64BBD2A25D9D300D8BED6 /* MainTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BBC2A25D9D300D8BED6 /* MainTabBarController.swift */; };
+		90A64BBF2A25DFDB00D8BED6 /* MainTabBarViewReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BBE2A25DFDA00D8BED6 /* MainTabBarViewReactor.swift */; };
+		90A64BC12A25E1CF00D8BED6 /* TogetherDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BC02A25E1CF00D8BED6 /* TogetherDataManager.swift */; };
+		90A64BC82A25E98C00D8BED6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 90A64BC62A25E98B00D8BED6 /* Main.storyboard */; };
+		90A64BC92A25E98C00D8BED6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90A64BC72A25E98C00D8BED6 /* ViewController.swift */; };
 		B204266C2A1B0E50009FAC45 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B204266B2A1B0E50009FAC45 /* AppDelegate.swift */; };
-		B20426702A1B0E50009FAC45 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B204266F2A1B0E50009FAC45 /* ViewController.swift */; };
-		B20426732A1B0E50009FAC45 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B20426712A1B0E50009FAC45 /* Main.storyboard */; };
 		B20426752A1B0E52009FAC45 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B20426742A1B0E52009FAC45 /* Assets.xcassets */; };
 		B20426782A1B0E52009FAC45 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B20426762A1B0E52009FAC45 /* LaunchScreen.storyboard */; };
 		B20426802A1B397E009FAC45 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B204267F2A1B397E009FAC45 /* libz.tbd */; };
@@ -92,10 +110,28 @@
 
 /* Begin PBXFileReference section */
 		0F56AF3A85733CC3ECD33CC5 /* Pods-JSJP_Student_sw.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JSJP_Student_sw.debug.xcconfig"; path = "Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw.debug.xcconfig"; sourceTree = "<group>"; };
+		90A64B8F2A25A49500D8BED6 /* URLNavigationMap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLNavigationMap.swift; sourceTree = "<group>"; };
+		90A64B912A25A4DC00D8BED6 /* NYSwRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYSwRouter.swift; sourceTree = "<group>"; };
+		90A64B962A25A57C00D8BED6 /* NYSwToaster.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYSwToaster.swift; sourceTree = "<group>"; };
+		90A64B982A25A7F100D8BED6 /* MainNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainNavigationController.swift; sourceTree = "<group>"; };
+		90A64B9A2A25A91B00D8BED6 /* HomeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeService.swift; sourceTree = "<group>"; };
+		90A64B9F2A25AA0900D8BED6 /* SplashModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashModel.swift; sourceTree = "<group>"; };
+		90A64BA32A25BD1400D8BED6 /* LoadingPlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadingPlugin.swift; sourceTree = "<group>"; };
+		90A64BA52A25BD3A00D8BED6 /* Networking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Networking.swift; sourceTree = "<group>"; };
+		90A64BA72A25BF8100D8BED6 /* HomeAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeAPI.swift; sourceTree = "<group>"; };
+		90A64BAC2A25C32900D8BED6 /* HomeParentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeParentViewController.swift; sourceTree = "<group>"; };
+		90A64BAE2A25C35700D8BED6 /* HomeEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeEnum.swift; sourceTree = "<group>"; };
+		90A64BB02A25D03700D8BED6 /* SplashViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashViewController.swift; sourceTree = "<group>"; };
+		90A64BB22A25D11800D8BED6 /* BaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = "<group>"; };
+		90A64BB62A25D56700D8BED6 /* TimeKeepParentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeKeepParentViewController.swift; sourceTree = "<group>"; };
+		90A64BBA2A25D76100D8BED6 /* MineParentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MineParentViewController.swift; sourceTree = "<group>"; };
+		90A64BBC2A25D9D300D8BED6 /* MainTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarController.swift; sourceTree = "<group>"; };
+		90A64BBE2A25DFDA00D8BED6 /* MainTabBarViewReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarViewReactor.swift; sourceTree = "<group>"; };
+		90A64BC02A25E1CF00D8BED6 /* TogetherDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TogetherDataManager.swift; sourceTree = "<group>"; };
+		90A64BC62A25E98B00D8BED6 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
+		90A64BC72A25E98C00D8BED6 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
 		B20426682A1B0E50009FAC45 /* JSJP_Student_sw.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JSJP_Student_sw.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		B204266B2A1B0E50009FAC45 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
-		B204266F2A1B0E50009FAC45 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
-		B20426722A1B0E50009FAC45 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
 		B20426742A1B0E52009FAC45 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		B20426772A1B0E52009FAC45 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
 		B20426792A1B0E52009FAC45 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -204,6 +240,114 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		90A64B932A25A55F00D8BED6 /* Toaster */ = {
+			isa = PBXGroup;
+			children = (
+				90A64B962A25A57C00D8BED6 /* NYSwToaster.swift */,
+			);
+			path = Toaster;
+			sourceTree = "<group>";
+		};
+		90A64B9C2A25A9BE00D8BED6 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		90A64B9D2A25A9D000D8BED6 /* Modulars */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BB82A25D60500D8BED6 /* Mine */,
+				90A64BB42A25D4E600D8BED6 /* Timekeep */,
+				90A64BA92A25C28A00D8BED6 /* Home */,
+				90A64B9E2A25A9E500D8BED6 /* Splash */,
+			);
+			path = Modulars;
+			sourceTree = "<group>";
+		};
+		90A64B9E2A25A9E500D8BED6 /* Splash */ = {
+			isa = PBXGroup;
+			children = (
+				90A64B9F2A25AA0900D8BED6 /* SplashModel.swift */,
+				90A64BB02A25D03700D8BED6 /* SplashViewController.swift */,
+			);
+			path = Splash;
+			sourceTree = "<group>";
+		};
+		90A64BA12A25BCAD00D8BED6 /* New Group */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = "New Group";
+			sourceTree = "<group>";
+		};
+		90A64BA22A25BCFA00D8BED6 /* Plugins */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BA32A25BD1400D8BED6 /* LoadingPlugin.swift */,
+			);
+			path = Plugins;
+			sourceTree = "<group>";
+		};
+		90A64BA92A25C28A00D8BED6 /* Home */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BAB2A25C2BE00D8BED6 /* Controllers */,
+				90A64BAA2A25C2B100D8BED6 /* Helper */,
+			);
+			path = Home;
+			sourceTree = "<group>";
+		};
+		90A64BAA2A25C2B100D8BED6 /* Helper */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BC02A25E1CF00D8BED6 /* TogetherDataManager.swift */,
+				90A64BAE2A25C35700D8BED6 /* HomeEnum.swift */,
+			);
+			path = Helper;
+			sourceTree = "<group>";
+		};
+		90A64BAB2A25C2BE00D8BED6 /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BAC2A25C32900D8BED6 /* HomeParentViewController.swift */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		90A64BB42A25D4E600D8BED6 /* Timekeep */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BB52A25D54600D8BED6 /* Controllers */,
+			);
+			path = Timekeep;
+			sourceTree = "<group>";
+		};
+		90A64BB52A25D54600D8BED6 /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BB62A25D56700D8BED6 /* TimeKeepParentViewController.swift */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		90A64BB82A25D60500D8BED6 /* Mine */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BB92A25D68700D8BED6 /* Controllers */,
+			);
+			path = Mine;
+			sourceTree = "<group>";
+		};
+		90A64BB92A25D68700D8BED6 /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				90A64BBA2A25D76100D8BED6 /* MineParentViewController.swift */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
 		B204265F2A1B0E50009FAC45 = {
 			isa = PBXGroup;
 			children = (
@@ -226,10 +370,10 @@
 			isa = PBXGroup;
 			children = (
 				B204269B2A1B4576009FAC45 /* Sources */,
-				B204266F2A1B0E50009FAC45 /* ViewController.swift */,
-				B20426712A1B0E50009FAC45 /* Main.storyboard */,
 				B20426742A1B0E52009FAC45 /* Assets.xcassets */,
 				B20426762A1B0E52009FAC45 /* LaunchScreen.storyboard */,
+				90A64BC62A25E98B00D8BED6 /* Main.storyboard */,
+				90A64BC72A25E98C00D8BED6 /* ViewController.swift */,
 				B20426792A1B0E52009FAC45 /* Info.plist */,
 			);
 			path = JSJP_Student_sw;
@@ -238,6 +382,9 @@
 		B204269B2A1B4576009FAC45 /* Sources */ = {
 			isa = PBXGroup;
 			children = (
+				90A64BA12A25BCAD00D8BED6 /* New Group */,
+				90A64B9D2A25A9D000D8BED6 /* Modulars */,
+				90A64B9C2A25A9BE00D8BED6 /* Models */,
 				B204266B2A1B0E50009FAC45 /* AppDelegate.swift */,
 				B20427332A1B5167009FAC45 /* CompositionRoot.swift */,
 				B20427392A1B558F009FAC45 /* NYAppCongfigure.swift */,
@@ -257,6 +404,10 @@
 		B204269C2A1B45A3009FAC45 /* Main */ = {
 			isa = PBXGroup;
 			children = (
+				90A64B982A25A7F100D8BED6 /* MainNavigationController.swift */,
+				90A64BB22A25D11800D8BED6 /* BaseViewController.swift */,
+				90A64BBC2A25D9D300D8BED6 /* MainTabBarController.swift */,
+				90A64BBE2A25DFDA00D8BED6 /* MainTabBarViewReactor.swift */,
 			);
 			path = Main;
 			sourceTree = "<group>";
@@ -264,7 +415,9 @@
 		B204269D2A1B45C1009FAC45 /* Utils */ = {
 			isa = PBXGroup;
 			children = (
+				90A64B8F2A25A49500D8BED6 /* URLNavigationMap.swift */,
 				B20427422A1B5846009FAC45 /* Snap.swift */,
+				90A64B912A25A4DC00D8BED6 /* NYSwRouter.swift */,
 			);
 			path = Utils;
 			sourceTree = "<group>";
@@ -272,6 +425,8 @@
 		B204269E2A1B45E6009FAC45 /* Services */ = {
 			isa = PBXGroup;
 			children = (
+				90A64B9A2A25A91B00D8BED6 /* HomeService.swift */,
+				90A64BA72A25BF8100D8BED6 /* HomeAPI.swift */,
 			);
 			path = Services;
 			sourceTree = "<group>";
@@ -279,8 +434,10 @@
 		B204269F2A1B4609009FAC45 /* Networking */ = {
 			isa = PBXGroup;
 			children = (
+				90A64BA22A25BCFA00D8BED6 /* Plugins */,
 				B20427372A1B549F009FAC45 /* RequestError.swift */,
 				B20427352A1B5420009FAC45 /* NetEnvironment.swift */,
+				90A64BA52A25BD3A00D8BED6 /* Networking.swift */,
 			);
 			path = Networking;
 			sourceTree = "<group>";
@@ -406,6 +563,7 @@
 		B20426EE2A1B4ED1009FAC45 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				90A64B932A25A55F00D8BED6 /* Toaster */,
 				B20426F12A1B4ED2009FAC45 /* CollectionViewLayout */,
 				B20426F32A1B4ED2009FAC45 /* GesConflictCollectionView */,
 				B20426F92A1B4ED2009FAC45 /* SearchBarView */,
@@ -574,8 +732,8 @@
 				B20427242A1B4ED2009FAC45 /* SearchBarView.xib in Resources */,
 				B20426782A1B0E52009FAC45 /* LaunchScreen.storyboard in Resources */,
 				B20427302A1B4ED2009FAC45 /* PopOverViewCell.xib in Resources */,
+				90A64BC82A25E98C00D8BED6 /* Main.storyboard in Resources */,
 				B20426752A1B0E52009FAC45 /* Assets.xcassets in Resources */,
-				B20426732A1B0E50009FAC45 /* Main.storyboard in Resources */,
 				B20427252A1B4ED2009FAC45 /* EmptyView.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -631,6 +789,7 @@
 			files = (
 				B20426CE2A1B4DB6009FAC45 /* UIImage+Placeholder.swift in Sources */,
 				B20427412A1B56B1009FAC45 /* NYNumber.swift in Sources */,
+				90A64BBB2A25D76100D8BED6 /* MineParentViewController.swift in Sources */,
 				B204273F2A1B5691009FAC45 /* NYFont.swift in Sources */,
 				B20427322A1B4ED2009FAC45 /* Action.swift in Sources */,
 				B20426B12A1B4738009FAC45 /* UICollectionView+Rx.swift in Sources */,
@@ -638,30 +797,39 @@
 				B20426B32A1B4738009FAC45 /* Logger.swift in Sources */,
 				B20426CF2A1B4DB6009FAC45 /* UIScrollView+Direction.swift in Sources */,
 				B204271A2A1B4ED2009FAC45 /* Refreshable.swift in Sources */,
+				90A64B922A25A4DC00D8BED6 /* NYSwRouter.swift in Sources */,
 				B20427272A1B4ED2009FAC45 /* NetAnimationView.swift in Sources */,
 				B20427262A1B4ED2009FAC45 /* EmptyView.swift in Sources */,
 				B20427432A1B5846009FAC45 /* Snap.swift in Sources */,
 				B204270F2A1B4ED2009FAC45 /* LWPlayer.swift in Sources */,
 				B20427162A1B4ED2009FAC45 /* LWPlayerUtils.swift in Sources */,
+				90A64BB32A25D11800D8BED6 /* BaseViewController.swift in Sources */,
 				B20427362A1B5420009FAC45 /* NetEnvironment.swift in Sources */,
+				90A64B902A25A49500D8BED6 /* URLNavigationMap.swift in Sources */,
 				B204271F2A1B4ED2009FAC45 /* GesConflictCollectionView.swift in Sources */,
 				B20427132A1B4ED2009FAC45 /* LWPlayerSlider.swift in Sources */,
+				90A64BA62A25BD3A00D8BED6 /* Networking.swift in Sources */,
 				B20426B22A1B4738009FAC45 /* PullToRefresh+Rx.swift in Sources */,
 				B204271E2A1B4ED2009FAC45 /* BilibiliCollectionViewLayout.swift in Sources */,
 				B20427102A1B4ED2009FAC45 /* LWPlayerView.swift in Sources */,
 				B20426C82A1B4DB6009FAC45 /* DefaultsKeys+Key.swift in Sources */,
 				B20427192A1B4ED2009FAC45 /* LWPlayerFullScreenViewController.swift in Sources */,
+				90A64BA82A25BF8100D8BED6 /* HomeAPI.swift in Sources */,
 				B20427122A1B4ED2009FAC45 /* LWPlayerControlView.swift in Sources */,
-				B20426702A1B0E50009FAC45 /* ViewController.swift in Sources */,
 				B20426CB2A1B4DB6009FAC45 /* DispatchQueue+Extension.swift in Sources */,
+				90A64BA42A25BD1400D8BED6 /* LoadingPlugin.swift in Sources */,
 				B20426D22A1B4DB6009FAC45 /* UIViewController+NetAnimation.swift in Sources */,
+				90A64BC12A25E1CF00D8BED6 /* TogetherDataManager.swift in Sources */,
 				B20427312A1B4ED2009FAC45 /* PopOverViewSettings.swift in Sources */,
 				B20426AE2A1B4738009FAC45 /* NotificationCenter+Rx.swift in Sources */,
 				B20426AC2A1B4738009FAC45 /* UIScrollView+Rx.swift in Sources */,
 				B20426D32A1B4DB6009FAC45 /* Array+SectionModel.swift in Sources */,
 				B20427182A1B4ED2009FAC45 /* LWPlayerEnum.swift in Sources */,
 				B20426CC2A1B4DB6009FAC45 /* UIButton+Kingfisher.swift in Sources */,
+				90A64B9B2A25A91B00D8BED6 /* HomeService.swift in Sources */,
 				B20426D12A1B4DB6009FAC45 /* UIBarButtonItem+FixSpace.swift in Sources */,
+				90A64BB12A25D03700D8BED6 /* SplashViewController.swift in Sources */,
+				90A64BA02A25AA0900D8BED6 /* SplashModel.swift in Sources */,
 				B20427172A1B4ED2009FAC45 /* LWPlayerDelegate.swift in Sources */,
 				B20426D82A1B4DB6009FAC45 /* VTContentView+Gesture.swift in Sources */,
 				B20427232A1B4ED2009FAC45 /* SearchBarView.swift in Sources */,
@@ -677,32 +845,32 @@
 				B20426D72A1B4DB6009FAC45 /* NSAttributedString+BoundingRect.swift in Sources */,
 				B20426D02A1B4DB6009FAC45 /* UIBarButtonItem+Init.swift in Sources */,
 				B20426AF2A1B4738009FAC45 /* UIView+Rx.swift in Sources */,
+				90A64B992A25A7F100D8BED6 /* MainNavigationController.swift in Sources */,
+				90A64BB72A25D56700D8BED6 /* TimeKeepParentViewController.swift in Sources */,
+				90A64BC92A25E98C00D8BED6 /* ViewController.swift in Sources */,
 				B20426C72A1B4DB6009FAC45 /* Data+Cache.swift in Sources */,
+				90A64BAD2A25C32900D8BED6 /* HomeParentViewController.swift in Sources */,
+				90A64BAF2A25C35700D8BED6 /* HomeEnum.swift in Sources */,
 				B20426B02A1B4738009FAC45 /* UICollectionViewFlexLayout+Rx.swift in Sources */,
 				B20427112A1B4ED2009FAC45 /* LWPlayerManager.swift in Sources */,
 				B20426D62A1B4DB6009FAC45 /* UIColor+Bilibili.swift in Sources */,
 				B204273A2A1B558F009FAC45 /* NYAppCongfigure.swift in Sources */,
 				B20427152A1B4ED2009FAC45 /* Timer+LWPlayer.swift in Sources */,
 				B20426CA2A1B4DB6009FAC45 /* UIImageView+Kingfisher.swift in Sources */,
+				90A64BBF2A25DFDB00D8BED6 /* MainTabBarViewReactor.swift in Sources */,
 				B204271B2A1B4ED2009FAC45 /* NetAnimationLoadable.swift in Sources */,
+				90A64BBD2A25D9D300D8BED6 /* MainTabBarController.swift in Sources */,
 				B20426AB2A1B4738009FAC45 /* Moya+Rx.swift in Sources */,
 				B204266C2A1B0E50009FAC45 /* AppDelegate.swift in Sources */,
 				B20427142A1B4ED2009FAC45 /* AVPlayer+LWPlayer.swift in Sources */,
 				B204273D2A1B567A009FAC45 /* NYImage.swift in Sources */,
+				90A64B972A25A57C00D8BED6 /* NYSwToaster.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
-		B20426712A1B0E50009FAC45 /* Main.storyboard */ = {
-			isa = PBXVariantGroup;
-			children = (
-				B20426722A1B0E50009FAC45 /* Base */,
-			);
-			name = Main.storyboard;
-			sourceTree = "<group>";
-		};
 		B20426762A1B0E52009FAC45 /* LaunchScreen.storyboard */ = {
 			isa = PBXVariantGroup;
 			children = (
@@ -844,6 +1012,7 @@
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = Main;
 				INFOPLIST_KEY_UIMainStoryboardFile = Main;
+				INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent;
 				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
 				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
 				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@@ -874,6 +1043,7 @@
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = Main;
 				INFOPLIST_KEY_UIMainStoryboardFile = Main;
+				INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent;
 				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
 				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
 				IPHONEOS_DEPLOYMENT_TARGET = 12.0;

+ 1 - 1
JSJP_Student_sw.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>JSJP_Student_sw.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>37</integer>
+			<integer>42</integer>
 		</dict>
 	</dict>
 </dict>

+ 6 - 0
JSJP_Student_sw/Assets.xcassets/Launch/Contents.json

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

+ 21 - 0
JSJP_Student_sw/Assets.xcassets/Launch/launch_background.imageset/Contents.json

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

BIN
JSJP_Student_sw/Assets.xcassets/Launch/launch_background.imageset/launch_background@3x.png


+ 23 - 0
JSJP_Student_sw/Assets.xcassets/Launch/launch_splash.imageset/Contents.json

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

BIN
JSJP_Student_sw/Assets.xcassets/Launch/launch_splash.imageset/launcher_default_inner.png


BIN
JSJP_Student_sw/Assets.xcassets/Launch/launch_splash.imageset/launcher_default_inner@2x.png


BIN
JSJP_Student_sw/Assets.xcassets/Launch/launch_splash.imageset/launcher_default_inner@3x.png


+ 0 - 0
JSJP_Student_sw/Base.lproj/Main.storyboard → JSJP_Student_sw/Main.storyboard


+ 23 - 6
JSJP_Student_sw/Sources/AppDelegate.swift

@@ -10,17 +10,34 @@ import UIKit
 @main
 class AppDelegate: UIResponder, UIApplicationDelegate {
 
+    // MARK: Properties
+    
+    var dependency: NYAppDependency!
+    
     var window: UIWindow?
 
-    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
-        // Override point for customization after application launch.
-        self.window = UIWindow.init(frame: UIScreen.main.bounds)
-        self.window?.makeKeyAndVisible()
-        self.window?.rootViewController = ViewController.init()
-
+    // MARK: UIApplicationDelegate
+
+    func application(_ application:UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+        
+        self.dependency = self.dependency ?? CompositionRoot.resolve()
+        self.window = self.dependency.window
+        self.dependency.configureSDKs()
+        self.dependency.configureAppearance()
+        self.dependency.configureUserAgent()
+        self.dependency.congigurePerformance()
+        
         return true
     }
 
+    func application(
+        _ app: UIApplication,
+        open url: URL,
+        options: [UIApplication.OpenURLOptionsKey: Any] = [:]
+    ) -> Bool {
+        return self.dependency.openURL(url, options)
+    }
+
 
 }
 

+ 32 - 34
JSJP_Student_sw/Sources/CompositionRoot.swift

@@ -47,27 +47,25 @@ final class CompositionRoot {
         window.backgroundColor = .white
         window.makeKeyAndVisible()
         
-//        URLNavigationMap.initialize(navigator: navigator)
-//
-//        let homeService = HomeService(networking: HomeNetworking())
-//
-//        var presentMainScreen: (() -> Void)!
-//
-//        presentMainScreen = {
-//
-//            let mainTabBarController = MainTabBarController(reactor: MainTabBarViewReactor(),
-//                                                            homeParentViewController: HomeParentViewController(service: homeService),
-//                                                            attentionListViewController: AttentionListViewController(),
-//                                                            categoryListViewController: CategoryListViewController(),
-//                                                            discoveryListViewController: DiscoveryListViewController(),
-//                                                            mineListViewController: MineListViewController())
-//
-//            window.rootViewController = mainTabBarController
-//        }
-//
-//        let splashViewController = SplashViewController(presentMainScreen: presentMainScreen)
-//
-//        window.rootViewController = splashViewController
+        URLNavigationMap.initialize(navigator: navigator)
+
+        let homeService = HomeService(networking: HomeNetworking())
+
+        var presentMainScreen: (() -> Void)!
+
+        presentMainScreen = {
+
+            let mainTabBarController = MainTabBarController(reactor: MainTabBarViewReactor(),
+                                                            homeParentViewController: HomeParentViewController(),
+                                                            timekeepViewController: TimeKeepParentViewController(),
+                                                            mineListViewController: MineParentViewController())
+
+            window.rootViewController = mainTabBarController
+        }
+
+        let splashViewController = SplashViewController(presentMainScreen: presentMainScreen)
+
+        window.rootViewController = splashViewController
         
         return NYAppDependency(
             window: window,
@@ -83,17 +81,17 @@ final class CompositionRoot {
     }
     
     static func configureAppearance() {
-//        //设置时区
-//        let _ = Region(calendar: Calendars.gregorian, zone: Zones.asiaShanghai, locale: Locales.chinese)
-//
-//        //打开app次数
+        //设置时区
+        let _ = Region(calendar: Calendars.gregorian, zone: Zones.asiaShanghai, locale: Locales.chinese)
+
+        //打开app次数
 //        LocalManager.userInfo.openTimes += 1
-//
-//        //设置环境  --默认是线上环境
-//        Defaults.currentEnvironment = .res
-//
-//        //ToastView
-//        ToastView.appearance().font = Font.SysFont.sys_15
+
+        //设置环境  --默认是线上环境
+        Defaults.currentEnvironment = .res
+
+        //ToastView
+        ToastView.appearance().font = NYFont.SysFont.sys_15
 //        ToastView.appearance().textColor = UIColor.db_white
         
     }
@@ -130,9 +128,9 @@ final class CompositionRoot {
             if navigator.open(url) {
                 return true
             }
-//            if navigator.present(url, wrap: MainNavigationController.self) != nil {
-//                return true
-//            }
+            if navigator.present(url, wrap: MainNavigationController.self) != nil {
+                return true
+            }
             return false
         }
     }

+ 26 - 0
JSJP_Student_sw/Sources/Custom/View/Toaster/NYSwToaster.swift

@@ -0,0 +1,26 @@
+//
+//  NYSwToaster.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+import Toaster
+
+final class NYSwToaster {
+
+   static func show(_ text: String,
+                    _ delay: TimeInterval = 0,
+                    _ duration: TimeInterval = 2,
+                    bottomOffsetPortrait: CGFloat = kToastBottomMaxSpace) {
+    
+        ToastView.appearance().bottomOffsetPortrait = bottomOffsetPortrait
+    
+        if ToastCenter.default.currentToast == nil {
+            
+           Toast(text: text, delay: delay, duration: duration).show()
+        }
+    }
+}

+ 95 - 0
JSJP_Student_sw/Sources/Main/BaseViewController.swift

@@ -0,0 +1,95 @@
+//
+//  BaseViewController.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+import RxSwift
+
+class BaseViewController: UIViewController, NetAnimationLoadable {
+
+    // MARK: Properties
+    lazy private(set) var className: String = {
+        return type(of: self).description().components(separatedBy: ".").last ?? ""
+    }()
+    
+    /// There is a bug when trying to go back to previous view controller in a navigation controller
+    /// on iOS 11, a scroll view in the previous screen scrolls weirdly. In order to get this fixed,
+    /// we have to set the scrollView's `contentInsetAdjustmentBehavior` property to `.never` on
+    /// `viewWillAppear()` and set back to the original value on `viewDidAppear()`.
+    private var scrollViewOriginalContentInsetAdjustmentBehaviorRawValue: Int?
+
+    
+    // MARK: Initializing
+    init() {
+        super.init(nibName: nil, bundle: nil)
+    }
+    
+    required convenience init?(coder aDecoder: NSCoder) {
+        self.init()
+    }
+    
+    deinit {
+        log.verbose("DEINIT: \(self.className)")
+    }
+    
+    // MARK: Rx
+    var disposeBag = DisposeBag()
+    
+
+    // MARK: View Lifecycle
+    override func viewWillAppear(_ animated: Bool) {
+        super.viewWillAppear(animated)
+        
+        // fix iOS 11 scroll view bug
+        if #available(iOS 11, *) {
+            if let scrollView = self.view.subviews.first as? UIScrollView {
+                self.scrollViewOriginalContentInsetAdjustmentBehaviorRawValue =
+                    scrollView.contentInsetAdjustmentBehavior.rawValue
+                scrollView.contentInsetAdjustmentBehavior = .never
+            }
+        }
+    }
+    
+    override func viewDidAppear(_ animated: Bool) {
+        super.viewDidAppear(animated)
+        
+        // fix iOS 11 scroll view bug
+        if #available(iOS 11, *) {
+            if let scrollView = self.view.subviews.first as? UIScrollView,
+               let rawValue = self.scrollViewOriginalContentInsetAdjustmentBehaviorRawValue,
+               let behavior = UIScrollView.ContentInsetAdjustmentBehavior(rawValue: rawValue) {
+                scrollView.contentInsetAdjustmentBehavior = behavior
+            }
+        }
+    }
+    
+    // MARK: Layout Constraints
+    
+    private(set) var didSetupConstraints = false
+    
+    override func viewDidLoad() {
+        
+        self.view.setNeedsUpdateConstraints()
+        
+        self.edgesForExtendedLayout = []
+        
+        self.view.backgroundColor = .db_gray
+    }
+    
+    override func updateViewConstraints() {
+        if !self.didSetupConstraints {
+            self.setupConstraints()
+            self.didSetupConstraints = true
+        }
+        super.updateViewConstraints()
+    }
+    
+    func setupConstraints() {
+        // Override point
+    }
+    
+}

+ 41 - 0
JSJP_Student_sw/Sources/Main/MainNavigationController.swift

@@ -0,0 +1,41 @@
+//
+//  MainNavigationController.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+import RxSwift
+
+final class MainNavigationController: UINavigationController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+        self.interactivePopGestureRecognizer?.delegate = self
+        
+        self.navigationBar.setBackgroundImage(UIImage.size(CGSize(width: 1, height: 1)).color(UIColor.db_pink).image, for: .default)
+        
+        self.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.db_white]
+       
+    }
+    
+    override func pushViewController(_ viewController: UIViewController, animated: Bool){
+        if children.count > 0 {
+            viewController.hidesBottomBarWhenPushed = true
+            let backItem = UIBarButtonItem(image: NYImage.Home.back?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(back))
+            viewController.navigationItem.leftBarButtonItems = [backItem]
+        }
+        super.pushViewController(viewController, animated: animated)
+    }
+    
+    @objc private func back() {
+        
+        self.popViewController(animated: true)
+        
+    }
+}
+
+extension MainNavigationController: UIGestureRecognizerDelegate {}

+ 83 - 0
JSJP_Student_sw/Sources/Main/MainTabBarController.swift

@@ -0,0 +1,83 @@
+//
+//  MainTabBarController.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+import ReactorKit
+import RxCocoa
+import RxSwift
+
+final class MainTabBarController: UITabBarController, View {
+
+    
+    // MARK: Constants
+    
+    fileprivate struct Metric {
+        static let tabBarHeight = 44.f
+    }
+    
+    // MARK: Properties
+    
+    var disposeBag = DisposeBag()
+
+    init(
+       reactor: MainTabBarViewReactor,
+       homeParentViewController:HomeParentViewController,
+       timekeepViewController:TimeKeepParentViewController,
+       mineListViewController:MineParentViewController
+     ) {
+        defer { self.reactor = reactor }
+        super.init(nibName: nil, bundle: nil)
+        self.viewControllers = [homeParentViewController,
+                                timekeepViewController,
+                                mineListViewController]
+            .map{ (viewController) -> UINavigationController in
+                let navigationController = MainNavigationController(rootViewController: viewController)
+                navigationController.tabBarItem.title = nil
+                navigationController.tabBarItem.imageInsets.top = 5
+                navigationController.tabBarItem.imageInsets.bottom = -5
+
+                return navigationController
+             }
+        self.tabBar.barTintColor = .db_white
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    // MARK: Configuring
+    
+    func bind(reactor: MainTabBarViewReactor) {
+        
+        self.rx.didSelect
+            .scan((nil, nil)) { state, viewController in
+                return (state.1, viewController)
+            }.subscribe(onNext: { (fromVc,toVc) in
+                
+                if fromVc == toVc || fromVc == nil {
+                    TogetherDataManager.refreshDataForTab(toVc, true)
+                } else {
+                    TogetherDataManager.refreshDataForTab(toVc, false)
+                }
+                if TogetherDataManager.homePageController(toVc) == nil {
+                   TogetherDataManager.referenceDate = Date()
+                }
+            }).disposed(by: disposeBag)
+    }
+    
+    
+    override func viewDidLayoutSubviews() {
+        super.viewDidLayoutSubviews()
+        if #available(iOS 11.0, *) {
+            self.tabBar.height = Metric.tabBarHeight + self.view.safeAreaInsets.bottom
+        } else {
+            self.tabBar.height = Metric.tabBarHeight
+        }
+        self.tabBar.bottom = self.view.height
+    }
+}

+ 17 - 0
JSJP_Student_sw/Sources/Main/MainTabBarViewReactor.swift

@@ -0,0 +1,17 @@
+//
+//  MainTabBarViewReactor.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import ReactorKit
+
+final class MainTabBarViewReactor: Reactor {
+    
+    typealias Action = NoAction
+    
+    struct State {}
+    
+    let initialState: State = State()
+}

+ 26 - 0
JSJP_Student_sw/Sources/Modulars/Home/Controllers/HomeParentViewController.swift

@@ -0,0 +1,26 @@
+//
+//  HomeParentViewController.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+final class HomeParentViewController: BaseViewController {
+
+    override init() {
+        super.init()
+        
+        self.tabBarItem.image = NYImage.TabBar.mine
+        self.tabBarItem.selectedImage = NYImage.TabBar.mine_s?.withRenderingMode(.alwaysOriginal)
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+
+        // Do any additional setup after loading the view.
+    }
+
+    
+
+
+}

+ 160 - 0
JSJP_Student_sw/Sources/Modulars/Home/Helper/HomeEnum.swift

@@ -0,0 +1,160 @@
+//
+//  HomeEnum.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+enum TogetherDataType : String {
+    case ad_s = "ad_web_s"
+    case ad = "ad_web"
+    case ad_av = "ad_av"
+    case ad_large = "ad_large"
+    case login = "login"
+    case rank = "rank"
+    case av = "av"
+    case article_rcmd = "article_s"
+    case article_branch = "article"
+    case player = "player"
+    case banner = "banner"
+    case bangumi = "bangumi"
+    case live = "live"
+    case audio = "audio"
+    case special_s = "special_s"
+    case special = "special"
+    case shopping_s = "shopping_s"
+    case converge = "converge"
+    case content_rcmd = "content_rcmd"
+    case tag_rcmd = "tag_rcmd"
+    case entrance = "entrance"
+    case web = "web"
+}
+
+enum TogetherRefreshType {
+    case none
+    case pullRefresh
+    case loadMore
+}
+
+enum TogetherDislikeType: Int {
+    case up = 4
+    case zone = 2
+    case remark = 3
+    case noInterest = 1
+}
+
+enum LiveModuleType: Int {
+    case banner = 1
+    case region = 2
+    case attention = 13
+    case recommed = 3
+    case hourRank = 4
+    case battlegrounds = 22  //绝地求生
+    case KingGlory = 24 //王者荣耀
+    case PCGame = 5
+    case fivePeople = 21 //第五人格
+    case mobileGame = 6
+    case videoSong = 20 //视频唱见
+    case enterment = 7
+    case draw = 8
+}
+
+extension LiveModuleType {
+    var showCount: Int {
+        switch self {
+        case .recommed:
+            return 6
+        default:
+            return 4
+        }
+    }
+    
+}
+
+enum LiveAllSubType: String {
+    case hottest = "最热直播"
+    case latest = "最新开播"
+    case roundroom = "视频轮播"
+}
+
+extension LiveAllSubType {
+    
+    var title: String {
+        switch self {
+        case .hottest:
+            return "hottest"
+        case .latest:
+            return "latest"
+        case .roundroom:
+            return "roundroom"
+        }
+    }
+}
+
+enum DramaVerticalPosition: Int {
+    case left = 0
+    case middle
+    case right
+}
+
+enum RankRegionType:Int {
+    
+    case wholeStation = 999999
+    case country = 167
+    case drama = 13
+    case animation = 1
+    case music = 3
+    case dance = 129
+    case game = 4
+    case technology = 36
+    case life = 160
+    case ghost = 119
+    case fashion = 155
+    case entertainment = 5
+    case movie = 181
+    case recoder = 177
+    case film = 23
+    case tv = 11
+}
+
+extension RankRegionType {
+    
+    var title: String {
+        switch self {
+        case .wholeStation:
+            return "全站"
+        case .country:
+            return "国创"
+        case .drama:
+            return "追番"
+        case .animation:
+            return "动画"
+        case .dance:
+            return "舞蹈"
+        case .entertainment:
+            return "娱乐"
+        case .fashion:
+            return "时尚"
+        case .film:
+            return "电影"
+        case .game:
+            return "游戏"
+        case .ghost:
+            return "鬼畜"
+        case .life:
+            return "生活"
+        case .movie:
+            return "影视"
+        case .music:
+            return "音乐"
+        case .recoder:
+            return "纪录片"
+        case .technology:
+            return "科技"
+        case .tv:
+            return "电视剧"
+        }
+    }
+}

+ 78 - 0
JSJP_Student_sw/Sources/Modulars/Home/Helper/TogetherDataManager.swift

@@ -0,0 +1,78 @@
+//
+//  TogetherDataManager.swift
+//  SwiftBilibili
+//
+//  Created by 罗文 on 2021/3/6.
+//  Copyright © 2021年 罗文. All rights reserved.
+//
+
+import UIKit
+
+class TogetherDataManager {
+
+    static var referenceDate: Date?
+    
+    class func homePageController(_ viewController: UIViewController?) -> HomeParentViewController? {
+        
+        if let navigationController = viewController as? UINavigationController {
+            let topViewController = navigationController.topViewController
+            if let viewController = topViewController, viewController is HomeParentViewController {
+                return viewController as? HomeParentViewController
+            }
+        }
+        
+        return nil
+    }
+    
+    class func refreshDataForTab(_ viewController: UIViewController?, _ isForceRefresh:Bool = false) {
+        
+        if let homeVc = homePageController(viewController) {
+            
+//            let magicController = homeVc.pageController
+//
+//            let currentPage = magicController.currentPage
+//
+//            if currentPage == 0 || currentPage == 1 {
+//
+//                if let currentVc = magicController.currentViewController {
+//
+//                    refreshDataForVTMagic(currentVc, isForceRefresh)
+//                }
+//            }
+        }
+    }
+    
+    class func refreshDataForVTMagic(_ viewController: UIViewController?,
+                                     _ isForceRefresh:Bool = false) {
+        
+//        if viewController is RecommendParentViewController {
+//            
+//            let currentRcmdVc = (viewController as! RecommendParentViewController).pageController.currentViewController
+//            
+//            let currentRcmdPage = (viewController as! RecommendParentViewController).pageController.currentPage
+//            
+//            if currentRcmdPage != 0 { return }
+//            
+//            if let currentRcmdVc = currentRcmdVc, currentRcmdVc is TogetherViewController {
+//                
+//                if isForceRefresh {
+//                    (currentRcmdVc as! TogetherViewController).startRefresh()
+//                } else {
+//                    let isOver = ProcessTimeManager.overSetTime(referenceDate: referenceDate, compareDate: Date(), targetMinute: 1)
+//                    
+//                    if isOver {
+//                        (currentRcmdVc as! TogetherViewController).startRefresh()
+//                    }
+//                }
+//            }
+//        } else if viewController is LiveListViewController {
+//            
+//            if isForceRefresh {
+//                (viewController as! LiveListViewController).startRefresh()
+//            } else {
+//                (viewController as! LiveListViewController).reactor?.action.onNext(.refresh)
+//            }
+//        }
+    }
+    
+}

+ 28 - 0
JSJP_Student_sw/Sources/Modulars/Mine/Controllers/MineParentViewController.swift

@@ -0,0 +1,28 @@
+//
+//  MineParentViewController.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+final class MineParentViewController: BaseViewController {
+
+    override init() {
+        super.init()
+        
+        self.tabBarItem.image = NYImage.TabBar.mine
+        self.tabBarItem.selectedImage = NYImage.TabBar.mine_s?.withRenderingMode(.alwaysOriginal)
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+
+        // Do any additional setup after loading the view.
+    }
+
+    
+
+
+}

+ 99 - 0
JSJP_Student_sw/Sources/Modulars/Splash/SplashModel.swift

@@ -0,0 +1,99 @@
+//
+//  SplashModel.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import ObjectMapper
+
+struct SplashModel:ImmutableMappable {
+    
+    var max_time: Int
+    var min_interval: Int
+    var pull_interval: Int
+    var list:[ListModel]
+    var show:[ShowModel]?
+    
+    init(map: Map) throws {
+        max_time = try map.value("max_time")
+        min_interval = try map.value("min_interval")
+        pull_interval = try map.value("pull_interval")
+        list = try map.value("list")
+        show = try? map.value("show")
+    }
+    
+}
+
+struct ListModel:ImmutableMappable {
+    
+    var id: Int
+    var type: Int
+    var card_type: Int
+    var duration: Int
+    var begin_time: Int
+    var end_time: Int
+    var thumb: String
+    var hash: String
+    var logo_url: String
+    var logo_hash: String
+    var skip: Int
+    var uri: String
+    var uri_title: String
+    var source: Int
+    var ad_cb: String
+    var resource_id: Int
+    var request_id: String
+    var client_ip: String
+    var is_ad: Bool
+    var is_ad_loc: Bool
+    var extra:ExtraModel
+    
+    init(map: Map) throws {
+        id = try map.value("id")
+        type = try map.value("type")
+        card_type = try map.value("card_type")
+        duration = try map.value("duration")
+        begin_time = try map.value("begin_time")
+        end_time = try map.value("end_time")
+        thumb = try map.value("thumb")
+        hash = try map.value("hash")
+        logo_url = try map.value("logo_url")
+        logo_hash = try map.value("logo_hash")
+        skip = try map.value("skip")
+        uri = try map.value("uri")
+        uri_title = try map.value("uri_title")
+        source = try map.value("source")
+        ad_cb = try map.value("ad_cb")
+        resource_id = try map.value("resource_id")
+        request_id = try map.value("request_id")
+        client_ip = try map.value("client_ip")
+        is_ad = try map.value("is_ad")
+        is_ad_loc = try map.value("is_ad_loc")
+        extra = try map.value("extra")
+    }
+    
+}
+
+struct ExtraModel:ImmutableMappable {
+    
+    var use_ad_web_v2: Bool
+    //show_urls: []
+    //click_urls: [""]
+    //download_whitelist: []
+    init(map: Map) throws {
+        use_ad_web_v2 = try map.value("use_ad_web_v2")
+    }
+}
+
+struct ShowModel:ImmutableMappable {
+    var id: Int
+    var stime: Int
+    var etime: Int
+    
+    init(map: Map) throws {
+        id = try map.value("id")
+        stime = try map.value("stime")
+        etime = try map.value("etime")
+    }
+}

+ 64 - 0
JSJP_Student_sw/Sources/Modulars/Splash/SplashViewController.swift

@@ -0,0 +1,64 @@
+//
+//  SplashViewController.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+final class SplashViewController: BaseViewController {
+
+    private let presentMainScreen: () -> Void
+    
+    private let backgroundImageView = UIImageView().then{
+        $0.image = NYImage.Launch.background
+    }
+    
+    private let splashImageView = UIImageView().then{
+        $0.image = NYImage.Launch.splash
+    }
+
+    override func setupConstraints() {
+        backgroundImageView.snp.makeConstraints { (make) in
+            make.edges.equalToSuperview()
+        }
+        
+        splashImageView.snp.makeConstraints { (make) in
+            make.width.equalTo(kScreenWidth - 60)
+            make.height.equalTo(kScreenHeight * 0.4)
+            make.centerX.equalToSuperview()
+            make.centerY.equalToSuperview()
+        }
+        
+    }
+    
+    init(presentMainScreen: @escaping () -> Void) {
+        
+        self.presentMainScreen = presentMainScreen
+        super.init()
+    }
+    
+    required convenience init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override var prefersStatusBarHidden: Bool {
+        return true
+    }
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+        view.addSubview(backgroundImageView)
+        backgroundImageView.addSubview(splashImageView)
+    }
+    
+    override func viewDidAppear(_ animated: Bool) {
+        super.viewDidAppear(animated)
+        
+        DispatchQueue.delay(time: 1.0, action: {[weak self] in
+            self?.presentMainScreen()
+        })
+    }
+    
+}

+ 28 - 0
JSJP_Student_sw/Sources/Modulars/Timekeep/Controllers/TimeKeepParentViewController.swift

@@ -0,0 +1,28 @@
+//
+//  TimeKeepParentViewController.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+final class TimeKeepParentViewController: BaseViewController {
+
+    override init() {
+        super.init()
+        
+        self.tabBarItem.image = NYImage.TabBar.mine
+        self.tabBarItem.selectedImage = NYImage.TabBar.mine_s?.withRenderingMode(.alwaysOriginal)
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+
+        // Do any additional setup after loading the view.
+    }
+
+    
+
+
+}

+ 3 - 3
JSJP_Student_sw/Sources/Networking/NetEnvironment.swift

@@ -9,12 +9,12 @@
 import Foundation
 import SwiftyUserDefaults
 
-enum NetEnvironment: String, Codable, DefaultsSerializable {
+enum NetEnvironment: String, DefaultsSerializable {
     case dev = "测试服"  //测试环境
     case res = "正式服"  //线上
     
-    public static var _defaults: DefaultsCodableBridge<Self> { return DefaultsCodableBridge() }
-    public static var _defaultsArray: DefaultsCodableBridge<[Self]> { return DefaultsCodableBridge() }
+//    public static var _defaults: DefaultsCodableBridge<Self> { return DefaultsCodableBridge() }
+//    public static var _defaultsArray: DefaultsCodableBridge<[Self]> { return DefaultsCodableBridge() }
 }
 
 

+ 101 - 0
JSJP_Student_sw/Sources/Networking/Networking.swift

@@ -0,0 +1,101 @@
+//
+//  Networking.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import Moya
+import RxSwift
+import Alamofire
+
+typealias HomeNetworking = Networking<HomeAPI>
+
+final class Networking<Target: TargetType>: MoyaProvider<Target> {
+    
+    init(plugins: [PluginType] = [LoadingPlugin()]) {
+        
+        let sessionManager: Session = {
+            let configuration = URLSessionConfiguration.default
+            configuration.httpAdditionalHeaders = HTTPHeaders.default.dictionary
+            configuration.timeoutIntervalForRequest = kTimeoutIntervalForRequest
+            return Session(configuration: configuration, startRequestsImmediately: false)
+        }()
+        
+        super.init(endpointClosure:Networking.endpointMapping, session:sessionManager, plugins:plugins)
+     }
+    
+    func request(
+        _ target: Target,
+        _ isCache: Bool = false,
+        file: StaticString = #file,
+        function: StaticString = #function,
+        line: UInt = #line
+    ) -> Single<Response> {
+        let requestString = "\(target.method) \(target.path)"
+        
+        return self.rx.request(target)
+            .filterSuccessfulStatusCodes()
+            .do(onSuccess: { (value) in
+                let message = "SUCCESS: \(requestString) (\(value.statusCode))"
+                log.debug(message, file: file, function: function, line: line)
+                
+            }, onError: {(error) in
+                
+                NotificationCenter.post(customNotification: .netError)
+                
+                if let response = (error as? MoyaError)?.response {
+                    if let jsonObject = try? response.mapJSON(failsOnEmptyData: false) {
+                        let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(jsonObject)"
+                        log.warning(message, file: file, function: function, line: line)
+                    } else if let rawString = String(data: response.data, encoding: .utf8) {
+                        let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(rawString)"
+                        log.warning(message, file: file, function: function, line: line)
+                    } else {
+                        let message = "FAILURE: \(requestString) (\(response.statusCode))"
+                        log.warning(message, file: file, function: function, line: line)
+                    }
+                } else {
+                    let message = "FAILURE: \(requestString)\n\(error)"
+                    log.warning(message, file: file, function: function, line: line)
+                }
+            }, onSubscribed: {
+                let message = "REQUEST: \(requestString)"
+                log.debug(message, file: file, function: function, line: line)
+            })
+    }
+    
+    private static func endpointMapping<Target: TargetType>(target: Target) -> Endpoint {
+    
+        var param: [String:Any] = [:]
+        switch target.task {
+        case let .requestParameters(parameters, _):
+            param = parameters
+        default:break
+        }
+    
+        var url = "\(target.baseURL)\(target.path)?"
+        
+        if target.method == .get {
+            
+            let s = param.map { (key,value) -> String in
+                return "\(key)=\(value)&"
+            }
+            
+            for p in s {
+                url += p
+            }
+            
+            url.remove(at: String.Index(utf16Offset: url.count - 1, in: url))
+            
+            log.info("请求链接:\(url) \n 请求方法:\(target.method)")
+            
+        } else {
+            log.info("请求链接:\(url) \n 参数:\(param) \n 请求方法:\(target.method)")
+        }
+    
+        return MoyaProvider.defaultEndpointMapping(for: target)
+    }
+    
+}
+

+ 34 - 0
JSJP_Student_sw/Sources/Networking/Plugins/LoadingPlugin.swift

@@ -0,0 +1,34 @@
+//
+//  LoadingPlugin.swift
+//  SwiftBilibili
+//
+//  Created by 罗文 on 2021/1/15.
+//  Copyright © 2021年 罗文. All rights reserved.
+//
+
+import Moya
+//import Result
+
+class LoadingPlugin : PluginType {
+    
+    func willSend(_ request: RequestType, target: TargetType) {
+//        if target is HomeAPI {
+//            let api = target as! HomeAPI
+//            if api.isShowLoading {
+//                guard let curController = UIViewController.topMost else { return }
+//                curController.showLoadingAnimation(superView: curController.view)
+//            }
+//        }
+    }
+    
+    func didReceive(_ result: Result<Response, MoyaError>, target: TargetType) {
+//        if target is HomeAPI {
+//            let api = target as! HomeAPI
+//            if api.isShowLoading {
+//                guard let curController = UIViewController.topMost else { return }
+//                curController.hideLoadingAnimation(superView: curController.view)
+//            }
+//        }
+    }
+
+}

+ 145 - 0
JSJP_Student_sw/Sources/Services/HomeAPI.swift

@@ -0,0 +1,145 @@
+//
+//  HomeAPI.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import Moya
+import SwiftyUserDefaults
+
+enum HomeAPI {
+    //广告页
+    case splash
+    
+    //推荐
+    case recommendTogetherList(refreshType:TogetherRefreshType, idx:String, hash:String)
+    case recommendBranch  //首页标题
+    case watchLater(idx:String)    //稍后观看
+    case rankWholeStation
+    case rankRegion(regionType:RankRegionType) //排行榜
+    case branchData(id: Int)
+    
+    //番剧
+    case dramaPage
+    case dramaFall(cursor:String)
+
+
+}
+
+extension HomeAPI: TargetType {
+    
+    var baseURL: URL {
+        switch self {
+        case .recommendTogetherList, .recommendBranch, .rankWholeStation, .rankRegion, .splash, .branchData:
+           return URL(string: HttpRequest.app.path)!
+        case .watchLater, .dramaPage, .dramaFall:
+           return URL(string: HttpRequest.api.path)!
+
+        }
+    }
+    
+    var path: String {
+        
+        switch self {
+        case .splash:
+            return "/x/v2/splash/list"
+        case .recommendTogetherList:
+            return "/x/feed/index"
+        case .recommendBranch, .branchData:
+            return "/x/feed/index/tab"
+        case .watchLater:
+            return "/x/member/v2/notice"
+        case .rankWholeStation:
+            return "/x/v2/rank"
+        case .rankRegion:
+            return "/x/v2/rank/region"
+        case .dramaPage:
+            return "/pgc/app/page/bangumi"
+        case .dramaFall:
+            return "/pgc/operation/api/fall"
+       
+        }
+    }
+    
+    var method: Moya.Method {
+        switch self {
+    case .splash,.recommendTogetherList,.recommendBranch,.branchData,.watchLater,.rankWholeStation,.rankRegion,.dramaPage,.dramaFall:
+            return .get
+        }
+    }
+    
+    var task: Task {
+        
+        switch self {
+        case .splash:
+            return .requestParameters(parameters: ["access_key":"922ba3eee4e6661a6414e665cd082351","actionKey":"appkey","appkey":"27eb53fc9058f8c3","birth":"0923","build":"6720","device":"phone","height":"2430","mobi_app":"iphone","platform":"ios","sign":"da8f43ed8908f3a31400e1f4652587e2","ts":"1528709529","width":"1125"], encoding: URLEncoding.default)
+            
+        case let .recommendTogetherList(refreshType, idx, hash):
+            var banner_hash: String = ""
+            var open_event: String = ""
+            var pull: String = ""
+            
+            let login_event: String = Defaults.isLogin ? "2" : "1"
+            let qn: String = Defaults.isLogin ? "32" : "16"
+            
+            switch refreshType {
+            case .none:
+                banner_hash = ""
+                open_event = "cold"
+                pull = "1"
+            case .pullRefresh:
+                banner_hash = hash
+                open_event = "hot"
+                pull = "1"
+            case .loadMore:
+                banner_hash = hash
+                pull = "0"
+                open_event = ""
+            }
+            var parameters = ["actionKey":"appkey","ad_extra":"810E76EA5A485E00B1241CDE55B074B4AF30DDAE19B8F880B3F2E63AE0B988D1675D9758CBDDF4F38FD87B3B16316423B2E7565A4BC0DB7414A1607B7CACCA4C08B25D229F8851C31628A43BA8BB7F322E712851346B9E110EAA6C6F859B726AE21A91134E1D8A1658637A7712A835A5DC4F8005DE2FF7983C5A3E1890C055AEDEEFA3A99EDD1AEF74733C9AD70198CD286B529EBAFB2C9B2345A06B1F97E249B8B08D894183BDAC7B55703192F16F585029D92CB6B612D3C3E101C994B778FA7F465CB22CF30D36CA90ADC413731BF5EB68FFC42AD2F63136323AFBD8588D7C9D48E8E320A2EE79E4CCB771DA0292CA7F5A26E85B910AFA72E7FDA0ED82174F1FE2C92088B86D5996E6E2B06F80D78DAFDDF94C08B2919E90F419DCA90DD91A4D428F4A5B33DA2BD535EF826CC2B181EC1DEBBB849532EF4A85F90395BC8499790910267C1ADAF4E73DFFF5ADD4D5113526B52C787FE4CF15CF00029C9B6DC1C2D9C5AEF9BDB81E448620E0BD67E173297835B9531F9AD0028872CC76ABB60CF898154644C195BB3038370CA80D200FD3830BA9F9917CBA76C116C8052087C20CF5BB16879BEE5C9C915635D5BC79C873A2C2E6ED820EADBE71090A0260D62C84E88BDD3F8D0DE64D7AEA7697928DB2F24A4ECECAB9DAA590EDD49ECA5FD57CFCB526E41624196A6A5EB5D790F27F172213A57FD88B7AB7B33B4D672D95AB99","appkey":"27eb53fc9058f8c3","appver":"6570", "banner_hash":banner_hash,"build":"6570","device":"phone","filtered":"1",  "idx":idx,"mobi_app":"iphone","network":"wifi","open_event":open_event,"platform":"ios","pull":pull,"qn":qn,"sign":"24e5a3bd21d8fa06136ffcff9ce2542c","style":"2", "ts":"1521019673"]
+            if refreshType == .none {
+                parameters.updateValue(login_event, forKey: "login_event")
+            }
+            return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
+        case .recommendBranch:
+            return .requestParameters(parameters: ["access_key":"1116bcaf932517678ab5dbae562d15bf","actionKey":"appkey","appkey":"27eb53fc9058f8c3","build":"6570","device":"phone","mobi_app":"iphone","platform":"ios","sign":"901747a5b6a429d230f291202dd4dbc9","ts":"1520592426"], encoding: URLEncoding.default)
+        case .branchData(let id):
+            return .requestParameters(parameters: ["access_key":"1116bcaf932517678ab5dbae562d15bf","actionKey":"appkey","appkey":"27eb53fc9058f8c3","build":"6570","device":"phone","mobi_app":"iphone","id":id,"platform":"ios","sign":"901747a5b6a429d230f291202dd4dbc9","ts":"1520592426"], encoding: URLEncoding.default)
+        case .watchLater:
+            return .requestParameters(parameters: ["access_key":"1116bcaf932517678ab5dbae562d15b","actionKey":"appkey","appkey":"27eb53fc9058f8c3","build":"6570","device":"phone","mid":"39225696","mobi_app":"iphone","platform":"ios","sign":"62d7090dbd7945a4611a531fee07bc46","ts":"1520589443","uuid":"8FBE4D89F6304A8EBEBE4ACEE3D43B1C"], encoding: URLEncoding.default)
+        case .rankWholeStation:
+            return .requestParameters(parameters: ["access_key":"1116bcaf932517678ab5dbae562d15b","actionKey":"appkey","appkey":"27eb53fc9058f8c3","build":"6620","device":"phone","mobi_app":"iphone","platform":"ios","pn":"0","ps":"100","order":"all","sign":"70cac15647144da1096a6e08552a5ae6","ts":"1524897741"], encoding: URLEncoding.default)
+        case .rankRegion(let regionType):
+            return .requestParameters(parameters: ["access_key":"1116bcaf932517678ab5dbae562d15b","actionKey":"appkey","appkey":"27eb53fc9058f8c3","build":"6620","device":"phone","mobi_app":"iphone","platform":"ios","pn":"0","ps":"100","rid":"\(regionType.rawValue)","sign":"70cac15647144da1096a6e08552a5ae6","ts":"1524897741"], encoding: URLEncoding.default)
+            
+        
+        case .dramaPage:
+            return .requestParameters(parameters: ["actionKey":"appkey","appkey":"27eb53fc9058f8c3","build":"8110","device":"phone","mobi_app":"iphone","platform":"ios","sign":"b0878d4162f46e28ff6f689630aece0a","ts":"1536557810"], encoding: URLEncoding.default)
+        case .dramaFall(let cursor):
+            return .requestParameters(parameters: ["actionKey":"appkey","appkey":"27eb53fc9058f8c3","area":"0","build":"8110","cursor":cursor,"device":"phone","mobi_app":"iphone","pageSize":"10","platform":"ios","sign":"27d40c17950ceb5654749458342fdd08","ts":"1536558477","wid":"78%2C79%2C80%2C81%2C59"], encoding: URLEncoding.default)
+
+
+        }
+    }
+
+    var headers: [String: String]? {
+        return ["Content-Type":"application/json", "Authorization":"e33df9f018ff40ecb025a2b9fee071f6"]
+    }
+    
+    var sampleData: Data {
+        return Data()
+    }
+    
+    private func allSign(_ subType: LiveAllSubType) -> String {
+        switch subType {
+        case .hottest:
+            return "601836cd52051dbcba792220dc7c3785"
+        case .latest:
+            return "7644428211e24cd2cce4200c95379d84"
+        case .roundroom:
+            return "dd16d5c3da2516cefa9b5e4ad4c12248&"
+        }
+    }
+    
+}

+ 50 - 0
JSJP_Student_sw/Sources/Services/HomeService.swift

@@ -0,0 +1,50 @@
+//
+//  HomeService.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import RxSwift
+import SwiftyJSON
+
+protocol HomeServiceType {
+
+    //var liveTotalModels: Observable<[LiveTotalModel]> { get }
+    
+    //启动页
+    func splash() -> Single<SplashModel>
+    
+
+}
+
+final class HomeService: HomeServiceType {
+
+    private let networking : HomeNetworking
+    
+    init(networking: HomeNetworking) {
+        self.networking = networking
+    }
+    
+    func splash() -> Single<SplashModel> {
+        return networking.request(.splash).map(SplashModel.self)
+    }
+    
+
+//    func watchLater(idx: String) -> Single<Void> {
+//        return networking.request(.watchLater(idx: idx)).map{ _ in }.handleError()
+//    }
+    
+//    func dramaPage() -> Single<DramaPageModel> {
+//        return networking.request(.dramaPage).map(DramaPageModel.self)
+//    }
+//
+//    func dramaFall(cursor:String) -> Single<[DramaItemModel]> {
+//
+//        return networking.request(.dramaFall(cursor: cursor)).map(DramaItemModel.self)
+//    }
+    
+
+    
+    
+}

+ 77 - 0
JSJP_Student_sw/Sources/Utils/NYSwRouter.swift

@@ -0,0 +1,77 @@
+//
+//  NYSwRouter.swift
+//  JSJP_Student_sw
+//
+//  Created by Ning.ge on 2023/5/30.
+//
+
+import UIKit
+
+import URLNavigator
+
+
+enum NYSwPushType {
+    case recommend_rank
+    case recommend_player
+    case live_room
+    case live_all
+    case drama_recommend
+}
+
+
+enum NYSwOpenType: String {
+    case area = "http://live.bilibili.com/app/area"
+    case common = "http://live.bilibili.com/app/mytag/"
+    case attention = "http://live.bilibili.com/app/myfollow/"
+    case all = "http://live.bilibili.com/app/all-live/"
+    
+    case login = "Bilibili://app/login"
+}
+
+extension NYSwPushType {
+
+    var path:String {
+        switch self {
+        case .recommend_rank:
+            return "Bilibili://recommend/rank"
+        case .recommend_player:
+            return "Bilibili://recommend/player"
+        case .live_all:
+            return "Bilibili://live/recommend"
+        case .live_room:
+            return "Bilibili://live/room"
+        case .drama_recommend:
+            return "Bilibili://drama/recommend"
+
+        }
+    }
+}
+
+class NYSwRouter {
+    
+    @discardableResult
+    class func push(_ type:NYSwPushType, context: Any? = nil) -> UIViewController? {
+       
+       return navigator.push(type.path, context: context)
+    }
+    
+    @discardableResult
+    class func push(_ url:String) -> UIViewController? {
+        
+        return navigator.push(url)
+    }
+    
+    @discardableResult
+    class func open(_ url:String) -> Bool? {
+        
+        guard let header = url.components(separatedBy: "?").first,
+              let _ = NYSwOpenType(rawValue: header)
+        else {
+            NYSwToaster.show("需要跳转的路径未找到,请先注册!")
+            return nil
+        }
+        
+        return navigator.open(url)
+    }
+}
+

+ 3 - 3
Podfile

@@ -33,8 +33,8 @@ target 'JSJP_Student_sw' do
   #], :path => '../node_modules/react-native'
 
   # Architecture
-#  pod 'ReactorKit'
-#  pod 'SectionReactor'
+  pod 'ReactorKit'
+  pod 'SectionReactor'
   
   # Networking
   pod 'Alamofire'
@@ -45,7 +45,7 @@ target 'JSJP_Student_sw' do
   pod 'ObjectMapper'
   
   # Persistence
-#  pod 'RealmSwift'
+  pod 'RealmSwift'
   
   # Rx
   pod 'RxSwift'

+ 27 - 2
Podfile.lock

@@ -21,6 +21,14 @@ PODS:
     - RxSwift (~> 5.1)
   - ObjectMapper (4.2.0)
   - ReachabilitySwift (5.0.0)
+  - ReactorKit (2.1.1):
+    - RxSwift (~> 5.0)
+    - WeakMapTable (~> 1.1)
+  - Realm (10.39.1):
+    - Realm/Headers (= 10.39.1)
+  - Realm/Headers (10.39.1)
+  - RealmSwift (10.39.1):
+    - Realm (= 10.39.1)
   - ReusableKit (3.0.0):
     - ReusableKit/Core (= 3.0.0)
   - ReusableKit/Core (3.0.0)
@@ -47,6 +55,9 @@ PODS:
   - RxViewController (1.0.0):
     - RxCocoa (~> 5.0)
     - RxSwift (~> 5.0)
+  - SectionReactor (1.0.0):
+    - ReactorKit (>= 2.0.0)
+    - RxDataSources (>= 4.0.0)
   - SnapKit (5.6.0)
   - SwiftDate (6.3.1)
   - SwiftTimer (2.0)
@@ -60,6 +71,7 @@ PODS:
   - VTMagic (1.2.4):
     - VTMagic/Core (= 1.2.4)
   - VTMagic/Core (1.2.4)
+  - WeakMapTable (1.2.0)
   - YYText (1.0.7)
 
 DEPENDENCIES:
@@ -77,6 +89,8 @@ DEPENDENCIES:
   - "NSObject+Rx"
   - ObjectMapper
   - ReachabilitySwift
+  - ReactorKit
+  - RealmSwift
   - ReusableKit
   - ReusableKit/RxSwift
   - RxCocoa
@@ -85,6 +99,7 @@ DEPENDENCIES:
   - RxOptional
   - RxSwift
   - RxViewController
+  - SectionReactor
   - SnapKit
   - SwiftDate
   - SwiftTimer
@@ -115,6 +130,9 @@ SPEC REPOS:
     - "NSObject+Rx"
     - ObjectMapper
     - ReachabilitySwift
+    - ReactorKit
+    - Realm
+    - RealmSwift
     - ReusableKit
     - RxCocoa
     - RxDataSources
@@ -123,6 +141,7 @@ SPEC REPOS:
     - RxRelay
     - RxSwift
     - RxViewController
+    - SectionReactor
     - SnapKit
     - SwiftDate
     - SwiftTimer
@@ -133,6 +152,7 @@ SPEC REPOS:
     - Then
     - Toaster
     - URLNavigator
+    - WeakMapTable
     - YYText
 
 EXTERNAL SOURCES:
@@ -160,6 +180,9 @@ SPEC CHECKSUMS:
   "NSObject+Rx": fa6bbcc1ab1faa06b01466bc09b1e0692bbc5946
   ObjectMapper: 1eb41f610210777375fa806bf161dc39fb832b81
   ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
+  ReactorKit: 6d894a20c3d508344320901cd8e386fde92df4b6
+  Realm: 1f3157edf145f4d9036765ab550c8cb18f62b700
+  RealmSwift: 8a69a1cb788cd5865966f49667b130567e07bceb
   ReusableKit: e5f853ad4652e411f96b6119b2488afa12929be6
   RxCocoa: e2ed092d5432e4296aa818021d27de4090ac0354
   RxDataSources: efee07fa4de48477eca0a4611e6d11e2da9c1114
@@ -168,6 +191,7 @@ SPEC CHECKSUMS:
   RxRelay: 5a18c2eb2d68326ebaf0112f80d837ae41b92b97
   RxSwift: 915abbdfb62214aa89ccd0b194d44fb478019b27
   RxViewController: 7330a46e5c31cd680db169da4c9fc8676e975a81
+  SectionReactor: 88cf2b79bdf33632c98583a574a17181a277fc33
   SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
   SwiftDate: 72d28954e8e1c6c1c0f917ccc8005e4f83c7d4b2
   SwiftTimer: 4d25ff045d81c3132e1161a3ba2353d06ff63c30
@@ -179,8 +203,9 @@ SPEC CHECKSUMS:
   Toaster: c3473963c78e8cabbf6ea6f11ad0fdaae6f54987
   URLNavigator: 0bffc3efdeb2d97f7b5eec7ac82d290f4a099431
   VTMagic: b49e5f456dbcbfd9a3588ba92417233a105bc193
+  WeakMapTable: 05c694ce8439a7a9ebabb56187287a63c57673d6
   YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
 
-PODFILE CHECKSUM: 156684894325c58b02b3cab018ba97652303ed5a
+PODFILE CHECKSUM: bb736d2641a838b8e5f0c5d76e8eb31062f15b37
 
-COCOAPODS: 1.11.3
+COCOAPODS: 1.12.1

+ 27 - 2
Pods/Manifest.lock

@@ -21,6 +21,14 @@ PODS:
     - RxSwift (~> 5.1)
   - ObjectMapper (4.2.0)
   - ReachabilitySwift (5.0.0)
+  - ReactorKit (2.1.1):
+    - RxSwift (~> 5.0)
+    - WeakMapTable (~> 1.1)
+  - Realm (10.39.1):
+    - Realm/Headers (= 10.39.1)
+  - Realm/Headers (10.39.1)
+  - RealmSwift (10.39.1):
+    - Realm (= 10.39.1)
   - ReusableKit (3.0.0):
     - ReusableKit/Core (= 3.0.0)
   - ReusableKit/Core (3.0.0)
@@ -47,6 +55,9 @@ PODS:
   - RxViewController (1.0.0):
     - RxCocoa (~> 5.0)
     - RxSwift (~> 5.0)
+  - SectionReactor (1.0.0):
+    - ReactorKit (>= 2.0.0)
+    - RxDataSources (>= 4.0.0)
   - SnapKit (5.6.0)
   - SwiftDate (6.3.1)
   - SwiftTimer (2.0)
@@ -60,6 +71,7 @@ PODS:
   - VTMagic (1.2.4):
     - VTMagic/Core (= 1.2.4)
   - VTMagic/Core (1.2.4)
+  - WeakMapTable (1.2.0)
   - YYText (1.0.7)
 
 DEPENDENCIES:
@@ -77,6 +89,8 @@ DEPENDENCIES:
   - "NSObject+Rx"
   - ObjectMapper
   - ReachabilitySwift
+  - ReactorKit
+  - RealmSwift
   - ReusableKit
   - ReusableKit/RxSwift
   - RxCocoa
@@ -85,6 +99,7 @@ DEPENDENCIES:
   - RxOptional
   - RxSwift
   - RxViewController
+  - SectionReactor
   - SnapKit
   - SwiftDate
   - SwiftTimer
@@ -115,6 +130,9 @@ SPEC REPOS:
     - "NSObject+Rx"
     - ObjectMapper
     - ReachabilitySwift
+    - ReactorKit
+    - Realm
+    - RealmSwift
     - ReusableKit
     - RxCocoa
     - RxDataSources
@@ -123,6 +141,7 @@ SPEC REPOS:
     - RxRelay
     - RxSwift
     - RxViewController
+    - SectionReactor
     - SnapKit
     - SwiftDate
     - SwiftTimer
@@ -133,6 +152,7 @@ SPEC REPOS:
     - Then
     - Toaster
     - URLNavigator
+    - WeakMapTable
     - YYText
 
 EXTERNAL SOURCES:
@@ -160,6 +180,9 @@ SPEC CHECKSUMS:
   "NSObject+Rx": fa6bbcc1ab1faa06b01466bc09b1e0692bbc5946
   ObjectMapper: 1eb41f610210777375fa806bf161dc39fb832b81
   ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
+  ReactorKit: 6d894a20c3d508344320901cd8e386fde92df4b6
+  Realm: 1f3157edf145f4d9036765ab550c8cb18f62b700
+  RealmSwift: 8a69a1cb788cd5865966f49667b130567e07bceb
   ReusableKit: e5f853ad4652e411f96b6119b2488afa12929be6
   RxCocoa: e2ed092d5432e4296aa818021d27de4090ac0354
   RxDataSources: efee07fa4de48477eca0a4611e6d11e2da9c1114
@@ -168,6 +191,7 @@ SPEC CHECKSUMS:
   RxRelay: 5a18c2eb2d68326ebaf0112f80d837ae41b92b97
   RxSwift: 915abbdfb62214aa89ccd0b194d44fb478019b27
   RxViewController: 7330a46e5c31cd680db169da4c9fc8676e975a81
+  SectionReactor: 88cf2b79bdf33632c98583a574a17181a277fc33
   SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25
   SwiftDate: 72d28954e8e1c6c1c0f917ccc8005e4f83c7d4b2
   SwiftTimer: 4d25ff045d81c3132e1161a3ba2353d06ff63c30
@@ -179,8 +203,9 @@ SPEC CHECKSUMS:
   Toaster: c3473963c78e8cabbf6ea6f11ad0fdaae6f54987
   URLNavigator: 0bffc3efdeb2d97f7b5eec7ac82d290f4a099431
   VTMagic: b49e5f456dbcbfd9a3588ba92417233a105bc193
+  WeakMapTable: 05c694ce8439a7a9ebabb56187287a63c57673d6
   YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
 
-PODFILE CHECKSUM: 156684894325c58b02b3cab018ba97652303ed5a
+PODFILE CHECKSUM: bb736d2641a838b8e5f0c5d76e8eb31062f15b37
 
-COCOAPODS: 1.11.3
+COCOAPODS: 1.12.1

File diff suppressed because it is too large
+ 1382 - 1010
Pods/Pods.xcodeproj/project.pbxproj


+ 182 - 71
Pods/Pods.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -4,191 +4,302 @@
 <dict>
 	<key>SchemeUserState</key>
 	<dict>
-		<key>Alamofire.xcscheme_^#shared#^_</key>
+		<key>Alamofire.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>17</integer>
+			<integer>0</integer>
 		</dict>
-		<key>CGFloatLiteral.xcscheme_^#shared#^_</key>
+		<key>CGFloatLiteral.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>31</integer>
+			<integer>1</integer>
 		</dict>
-		<key>CocoaLumberjack.xcscheme_^#shared#^_</key>
+		<key>CocoaLumberjack.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>25</integer>
+			<integer>2</integer>
 		</dict>
-		<key>Differentiator.xcscheme_^#shared#^_</key>
+		<key>Differentiator.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>27</integer>
+			<integer>3</integer>
 		</dict>
-		<key>Dollar.xcscheme_^#shared#^_</key>
+		<key>Dollar.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>14</integer>
+			<integer>4</integer>
 		</dict>
-		<key>ESPullToRefresh-ESPullToRefresh.xcscheme_^#shared#^_</key>
+		<key>ESPullToRefresh-ESPullToRefresh.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>24</integer>
+			<integer>7</integer>
 		</dict>
-		<key>ESPullToRefresh.xcscheme_^#shared#^_</key>
+		<key>ESPullToRefresh.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>32</integer>
+			<integer>6</integer>
 		</dict>
-		<key>EmptyKit.xcscheme_^#shared#^_</key>
+		<key>EmptyKit.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>0</integer>
+			<integer>5</integer>
+		</dict>
+		<key>FSPagerView.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>8</integer>
+		</dict>
+		<key>GDPerformanceView-Swift.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>9</integer>
 		</dict>
-		<key>FSPagerView.xcscheme_^#shared#^_</key>
+		<key>Kingfisher.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
 			<integer>10</integer>
 		</dict>
-		<key>GDPerformanceView-Swift.xcscheme_^#shared#^_</key>
+		<key>ManualLayout.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>36</integer>
+			<integer>11</integer>
 		</dict>
-		<key>Kingfisher.xcscheme_^#shared#^_</key>
+		<key>Moya.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>12</integer>
+		</dict>
+		<key>NSObject+Rx.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
 			<integer>13</integer>
 		</dict>
-		<key>ManualLayout.xcscheme_^#shared#^_</key>
+		<key>ObjectMapper.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>14</integer>
+		</dict>
+		<key>Pods-JSJP_Student_sw.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
 			<integer>15</integer>
 		</dict>
-		<key>Moya.xcscheme_^#shared#^_</key>
+		<key>ReachabilitySwift.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>5</integer>
+			<integer>16</integer>
 		</dict>
-		<key>NSObject+Rx.xcscheme_^#shared#^_</key>
+		<key>ReactorKit.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>19</integer>
+			<integer>17</integer>
 		</dict>
-		<key>ObjectMapper.xcscheme_^#shared#^_</key>
+		<key>Realm.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>8</integer>
+			<integer>18</integer>
 		</dict>
-		<key>Pods-JSJP_Student_sw.xcscheme_^#shared#^_</key>
+		<key>RealmSwift.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>6</integer>
+			<integer>19</integer>
 		</dict>
-		<key>ReachabilitySwift.xcscheme_^#shared#^_</key>
+		<key>ReusableKit.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>4</integer>
+			<integer>20</integer>
 		</dict>
-		<key>ReusableKit.xcscheme_^#shared#^_</key>
+		<key>RxCocoa.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>12</integer>
+			<integer>21</integer>
 		</dict>
-		<key>RxCocoa.xcscheme_^#shared#^_</key>
+		<key>RxDataSources.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>33</integer>
+			<integer>22</integer>
 		</dict>
-		<key>RxDataSources.xcscheme_^#shared#^_</key>
+		<key>RxGesture.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>21</integer>
+			<integer>23</integer>
 		</dict>
-		<key>RxGesture.xcscheme_^#shared#^_</key>
+		<key>RxOptional.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>18</integer>
+			<integer>24</integer>
 		</dict>
-		<key>RxOptional.xcscheme_^#shared#^_</key>
+		<key>RxRelay.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>2</integer>
+			<integer>25</integer>
 		</dict>
-		<key>RxRelay.xcscheme_^#shared#^_</key>
+		<key>RxSwift.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>16</integer>
+			<integer>26</integer>
 		</dict>
-		<key>RxSwift.xcscheme_^#shared#^_</key>
+		<key>RxViewController.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>20</integer>
+			<integer>27</integer>
 		</dict>
-		<key>RxViewController.xcscheme_^#shared#^_</key>
+		<key>SectionReactor.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>11</integer>
+			<integer>28</integer>
 		</dict>
-		<key>SnapKit.xcscheme_^#shared#^_</key>
+		<key>SnapKit.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>34</integer>
+			<integer>29</integer>
 		</dict>
-		<key>SwiftDate.xcscheme_^#shared#^_</key>
+		<key>SwiftDate.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>23</integer>
+			<integer>30</integer>
 		</dict>
-		<key>SwiftTimer.xcscheme_^#shared#^_</key>
+		<key>SwiftTimer.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>3</integer>
+			<integer>31</integer>
 		</dict>
-		<key>SwiftyColor.xcscheme_^#shared#^_</key>
+		<key>SwiftyColor.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>7</integer>
+			<integer>32</integer>
 		</dict>
-		<key>SwiftyImage.xcscheme_^#shared#^_</key>
+		<key>SwiftyImage.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>35</integer>
+			<integer>33</integer>
 		</dict>
-		<key>SwiftyJSON.xcscheme_^#shared#^_</key>
+		<key>SwiftyJSON.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>28</integer>
+			<integer>34</integer>
 		</dict>
-		<key>SwiftyUserDefaults.xcscheme_^#shared#^_</key>
+		<key>SwiftyUserDefaults.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>26</integer>
+			<integer>35</integer>
 		</dict>
-		<key>Then.xcscheme_^#shared#^_</key>
+		<key>Then.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>29</integer>
+			<integer>36</integer>
 		</dict>
-		<key>Toaster.xcscheme_^#shared#^_</key>
+		<key>Toaster.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>9</integer>
+			<integer>37</integer>
 		</dict>
-		<key>URLNavigator.xcscheme_^#shared#^_</key>
+		<key>URLNavigator.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>30</integer>
+			<integer>38</integer>
 		</dict>
-		<key>VTMagic.xcscheme_^#shared#^_</key>
+		<key>VTMagic.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>1</integer>
+			<integer>39</integer>
 		</dict>
-		<key>YYText.xcscheme_^#shared#^_</key>
+		<key>WeakMapTable.xcscheme</key>
 		<dict>
+			<key>isShown</key>
+			<false/>
 			<key>orderHint</key>
-			<integer>22</integer>
+			<integer>40</integer>
+		</dict>
+		<key>YYText.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>41</integer>
 		</dict>
 	</dict>
+	<key>SuppressBuildableAutocreation</key>
+	<dict/>
 </dict>
 </plist>

+ 1 - 1
Pods/Target Support Files/Alamofire/Alamofire-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "CFNetwork"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "CFNetwork"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/CGFloatLiteral/CGFloatLiteral-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/CGFloatLiteral/CGFloatLiteral.debug.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/CGFloatLiteral
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/CGFloatLiteral/CGFloatLiteral.release.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/CGFloatLiteral
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/CocoaLumberjack/CocoaLumberjack-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/CocoaLumberjack/CocoaLumberjack.debug.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/CocoaLumberjack
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/CocoaLumberjack/CocoaLumberjack.release.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/CocoaLumberjack
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/Differentiator/Differentiator-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/Differentiator/Differentiator.debug.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Differentiator
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/Differentiator/Differentiator.release.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Differentiator
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/Dollar/Dollar-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/Dollar/Dollar.debug.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Dollar
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/Dollar/Dollar.release.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Dollar
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/ESPullToRefresh/ESPullToRefresh-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/ESPullToRefresh/ESPullToRefresh.debug.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ESPullToRefresh
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/ESPullToRefresh/ESPullToRefresh.release.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ESPullToRefresh
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/ESPullToRefresh/ResourceBundle-ESPullToRefresh-ESPullToRefresh-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleIdentifier</key>
   <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
   <key>CFBundleInfoDictionaryVersion</key>

+ 1 - 1
Pods/Target Support Files/EmptyKit/EmptyKit-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/EmptyKit/EmptyKit.debug.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/EmptyKit
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/EmptyKit/EmptyKit.release.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/EmptyKit
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/FSPagerView/FSPagerView-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/FSPagerView/FSPagerView.debug.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/FSPagerView
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/FSPagerView/FSPagerView.release.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/FSPagerView
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/GDPerformanceView-Swift/GDPerformanceView-Swift-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/GDPerformanceView-Swift/GDPerformanceView-Swift.debug.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "QuartzCore" -fr
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/GDPerformanceView-Swift
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/GDPerformanceView-Swift/GDPerformanceView-Swift.release.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "QuartzCore" -fr
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/GDPerformanceView-Swift
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/Kingfisher/Kingfisher-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/Kingfisher/Kingfisher.debug.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "CFNetwork" -wea
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Kingfisher
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/Kingfisher/Kingfisher.release.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "CFNetwork" -wea
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Kingfisher
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/ManualLayout/ManualLayout-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/ManualLayout/ManualLayout.debug.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ManualLayout
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/ManualLayout/ManualLayout.release.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "UIKit"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ManualLayout
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/Moya/Moya-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/Moya/Moya.debug.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CFNetwork" -fram
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Moya
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/Moya/Moya.release.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CFNetwork" -fram
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/Moya
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/NSObject+Rx/NSObject+Rx-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/NSObject+Rx/NSObject+Rx.debug.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "RxSwift"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/NSObject+Rx
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/NSObject+Rx/NSObject+Rx.release.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "RxSwift"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/NSObject+Rx
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/ObjectMapper/ObjectMapper-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/ObjectMapper/ObjectMapper.debug.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ObjectMapper
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/ObjectMapper/ObjectMapper.release.xcconfig

@@ -5,6 +5,7 @@ LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFOR
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ObjectMapper
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 437 - 0
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-acknowledgements.markdown

@@ -351,6 +351,393 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
 
+## ReactorKit
+
+The MIT License (MIT)
+
+Copyright (c) 2017 Suyeol Jeon (xoul.kr)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+## Realm
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+
+## RealmSwift
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+
 ## ReusableKit
 
 The MIT License (MIT)
@@ -508,6 +895,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
+## SectionReactor
+
+The MIT License (MIT)
+
+Copyright (c) 2017 Suyeol Jeon (xoul.kr)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
 ## SnapKit
 
 Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
@@ -774,6 +1186,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
+## WeakMapTable
+
+The MIT License (MIT)
+
+Copyright (c) 2020 Suyeol Jeon (xoul.kr)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
 ## YYText
 
 The MIT License (MIT)

+ 467 - 0
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-acknowledgements.plist

@@ -456,6 +456,411 @@ THE SOFTWARE.
 			<key>FooterText</key>
 			<string>The MIT License (MIT)
 
+Copyright (c) 2017 Suyeol Jeon (xoul.kr)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>ReactorKit</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+</string>
+			<key>License</key>
+			<string>Apache 2.0</string>
+			<key>Title</key>
+			<string>Realm</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+</string>
+			<key>License</key>
+			<string>Apache 2.0</string>
+			<key>Title</key>
+			<string>RealmSwift</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>The MIT License (MIT)
+
 Copyright (c) 2016 Suyeol Jeon (xoul.kr)
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -657,6 +1062,37 @@ SOFTWARE.
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>The MIT License (MIT)
+
+Copyright (c) 2017 Suyeol Jeon (xoul.kr)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>SectionReactor</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit
@@ -993,6 +1429,37 @@ SOFTWARE.
 			<key>FooterText</key>
 			<string>The MIT License (MIT)
 
+Copyright (c) 2020 Suyeol Jeon (xoul.kr)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>WeakMapTable</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>The MIT License (MIT)
+
 Copyright (c) 2015 ibireme &lt;ibireme@gmail.com&gt;
 
 Permission is hereby granted, free of charge, to any person obtaining a copy

+ 5 - 0
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks-Debug-input-files.xcfilelist

@@ -14,6 +14,9 @@ ${BUILT_PRODUCTS_DIR}/Moya/Moya.framework
 ${BUILT_PRODUCTS_DIR}/NSObject+Rx/NSObject_Rx.framework
 ${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework
 ${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework
+${BUILT_PRODUCTS_DIR}/ReactorKit/ReactorKit.framework
+${BUILT_PRODUCTS_DIR}/Realm/Realm.framework
+${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework
 ${BUILT_PRODUCTS_DIR}/ReusableKit/ReusableKit.framework
 ${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework
 ${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework
@@ -22,6 +25,7 @@ ${BUILT_PRODUCTS_DIR}/RxOptional/RxOptional.framework
 ${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework
 ${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework
 ${BUILT_PRODUCTS_DIR}/RxViewController/RxViewController.framework
+${BUILT_PRODUCTS_DIR}/SectionReactor/SectionReactor.framework
 ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
 ${BUILT_PRODUCTS_DIR}/SwiftDate/SwiftDate.framework
 ${BUILT_PRODUCTS_DIR}/SwiftTimer/SwiftTimer.framework
@@ -33,4 +37,5 @@ ${BUILT_PRODUCTS_DIR}/Then/Then.framework
 ${BUILT_PRODUCTS_DIR}/Toaster/Toaster.framework
 ${BUILT_PRODUCTS_DIR}/URLNavigator/URLNavigator.framework
 ${BUILT_PRODUCTS_DIR}/VTMagic/VTMagic.framework
+${BUILT_PRODUCTS_DIR}/WeakMapTable/WeakMapTable.framework
 ${BUILT_PRODUCTS_DIR}/YYText/YYText.framework

+ 5 - 0
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks-Debug-output-files.xcfilelist

@@ -13,6 +13,9 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NSObject_Rx.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactorKit.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RealmSwift.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReusableKit.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxDataSources.framework
@@ -21,6 +24,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxOptional.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxRelay.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxViewController.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SectionReactor.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftDate.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftTimer.framework
@@ -32,4 +36,5 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Then.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toaster.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/URLNavigator.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VTMagic.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WeakMapTable.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YYText.framework

+ 5 - 0
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks-Release-input-files.xcfilelist

@@ -14,6 +14,9 @@ ${BUILT_PRODUCTS_DIR}/Moya/Moya.framework
 ${BUILT_PRODUCTS_DIR}/NSObject+Rx/NSObject_Rx.framework
 ${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework
 ${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework
+${BUILT_PRODUCTS_DIR}/ReactorKit/ReactorKit.framework
+${BUILT_PRODUCTS_DIR}/Realm/Realm.framework
+${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework
 ${BUILT_PRODUCTS_DIR}/ReusableKit/ReusableKit.framework
 ${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework
 ${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework
@@ -22,6 +25,7 @@ ${BUILT_PRODUCTS_DIR}/RxOptional/RxOptional.framework
 ${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework
 ${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework
 ${BUILT_PRODUCTS_DIR}/RxViewController/RxViewController.framework
+${BUILT_PRODUCTS_DIR}/SectionReactor/SectionReactor.framework
 ${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
 ${BUILT_PRODUCTS_DIR}/SwiftDate/SwiftDate.framework
 ${BUILT_PRODUCTS_DIR}/SwiftTimer/SwiftTimer.framework
@@ -33,4 +37,5 @@ ${BUILT_PRODUCTS_DIR}/Then/Then.framework
 ${BUILT_PRODUCTS_DIR}/Toaster/Toaster.framework
 ${BUILT_PRODUCTS_DIR}/URLNavigator/URLNavigator.framework
 ${BUILT_PRODUCTS_DIR}/VTMagic/VTMagic.framework
+${BUILT_PRODUCTS_DIR}/WeakMapTable/WeakMapTable.framework
 ${BUILT_PRODUCTS_DIR}/YYText/YYText.framework

+ 5 - 0
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks-Release-output-files.xcfilelist

@@ -13,6 +13,9 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NSObject_Rx.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactorKit.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RealmSwift.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReusableKit.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxDataSources.framework
@@ -21,6 +24,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxOptional.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxRelay.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxViewController.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SectionReactor.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftDate.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftTimer.framework
@@ -32,4 +36,5 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Then.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toaster.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/URLNavigator.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VTMagic.framework
+${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WeakMapTable.framework
 ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/YYText.framework

+ 11 - 1
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw-frameworks.sh

@@ -41,7 +41,7 @@ install_framework()
 
   if [ -L "${source}" ]; then
     echo "Symlinked..."
-    source="$(readlink "${source}")"
+    source="$(readlink -f "${source}")"
   fi
 
   if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
@@ -191,6 +191,9 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/NSObject+Rx/NSObject_Rx.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/ReactorKit/ReactorKit.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/Realm/Realm.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ReusableKit/ReusableKit.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework"
@@ -199,6 +202,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/RxViewController/RxViewController.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/SectionReactor/SectionReactor.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftDate/SwiftDate.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftTimer/SwiftTimer.framework"
@@ -210,6 +214,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/Toaster/Toaster.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/URLNavigator/URLNavigator.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/VTMagic/VTMagic.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/WeakMapTable/WeakMapTable.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/YYText/YYText.framework"
 fi
 if [[ "$CONFIGURATION" == "Release" ]]; then
@@ -228,6 +233,9 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/NSObject+Rx/NSObject_Rx.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/ReactorKit/ReactorKit.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/Realm/Realm.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/RealmSwift/RealmSwift.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/ReusableKit/ReusableKit.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/RxDataSources/RxDataSources.framework"
@@ -236,6 +244,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/RxRelay/RxRelay.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/RxViewController/RxViewController.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/SectionReactor/SectionReactor.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftDate/SwiftDate.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/SwiftTimer/SwiftTimer.framework"
@@ -247,6 +256,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/Toaster/Toaster.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/URLNavigator/URLNavigator.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/VTMagic/VTMagic.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/WeakMapTable/WeakMapTable.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/YYText/YYText.framework"
 fi
 if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then

File diff suppressed because it is too large
+ 1 - 1
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw.debug.xcconfig


File diff suppressed because it is too large
+ 1 - 1
Pods/Target Support Files/Pods-JSJP_Student_sw/Pods-JSJP_Student_sw.release.xcconfig


+ 1 - 1
Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "SystemConfig
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ReachabilitySwift
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig

@@ -6,6 +6,7 @@ OTHER_LDFLAGS = $(inherited) -framework "CoreTelephony" -framework "SystemConfig
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ReachabilitySwift
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/ReusableKit/ReusableKit-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/ReusableKit/ReusableKit.debug.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "RxCocoa" -frame
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ReusableKit
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/ReusableKit/ReusableKit.release.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "RxCocoa" -frame
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/ReusableKit
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/RxCocoa/RxCocoa-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/RxCocoa/RxCocoa.debug.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "RxRelay" -framework "RxSwift"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxCocoa
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/RxCocoa/RxCocoa.release.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "RxRelay" -framework "RxSwift"
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxCocoa
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 1
Pods/Target Support Files/RxDataSources/RxDataSources-Info.plist

@@ -3,7 +3,7 @@
 <plist version="1.0">
 <dict>
   <key>CFBundleDevelopmentRegion</key>
-  <string>en</string>
+  <string>${PODS_DEVELOPMENT_LANGUAGE}</string>
   <key>CFBundleExecutable</key>
   <string>${EXECUTABLE_NAME}</string>
   <key>CFBundleIdentifier</key>

+ 1 - 0
Pods/Target Support Files/RxDataSources/RxDataSources.debug.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Differentiator" -framework "RxCocoa" -f
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxDataSources
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

+ 1 - 0
Pods/Target Support Files/RxDataSources/RxDataSources.release.xcconfig

@@ -7,6 +7,7 @@ OTHER_LDFLAGS = $(inherited) -framework "Differentiator" -framework "RxCocoa" -f
 OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
 PODS_ROOT = ${SRCROOT}
 PODS_TARGET_SRCROOT = ${PODS_ROOT}/RxDataSources
 PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates

Some files were not shown because too many files changed in this diff