├── .gitignore ├── LICENSE ├── Podfile ├── README.md ├── Twilight.xcodeproj ├── project.pbxproj └── xcshareddata │ └── xcschemes │ └── Twilight.xcscheme └── Twilight ├── AppDelegate.swift ├── Assets.xcassets ├── AppIcon.appiconset │ ├── Contents.json │ ├── Group-20@2x.png │ ├── Group-20@3x.png │ ├── Group-60@2x.png │ ├── Group-60@3x.png │ ├── Group-Small-40@2x.png │ ├── Group-Small-40@3x.png │ ├── Icon-Small@2x.png │ ├── Icon-Small@3x.png │ └── icon.png ├── Contents.json ├── iconfontback.imageset │ ├── Contents.json │ └── iconfontback@2x.png └── tabbar │ ├── Contents.json │ ├── category_selected.imageset │ ├── Contents.json │ └── category_selected@2x.png │ ├── category_unselected.imageset │ ├── Contents.json │ └── category_unselected@2x.png │ ├── discovery_selected.imageset │ ├── Contents.json │ └── discovery_selected@2x.png │ ├── discovery_unselected.imageset │ ├── Contents.json │ └── discovery_unselected@2x.png │ ├── home_selected.imageset │ ├── Contents.json │ └── home_selected@2x.png │ ├── home_unselected.imageset │ ├── Contents.json │ └── home_unselected@2x.png │ ├── me_selected.imageset │ ├── Contents.json │ └── me_selected@2x.png │ ├── me_unselected.imageset │ ├── Contents.json │ └── me_unselected@2x.png │ ├── shopcart_selected.imageset │ ├── Contents.json │ └── shopcart_selected@2x.png │ └── shopcart_unselected.imageset │ ├── Contents.json │ └── shopcart_unselected@2x.png ├── Base.lproj ├── LaunchScreen.storyboard └── Main.storyboard ├── Config └── AppRouter.swift ├── Info.plist └── TabBarVc ├── Discovery_vc.swift ├── Me_vc.swift └── Shopcart_vc.swift /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | *.xcworkspace 22 | 23 | # Bundler 24 | .bundle 25 | 26 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 27 | # Carthage/Checkouts 28 | 29 | Carthage/Build 30 | 31 | # We recommend against adding the Pods directory to your .gitignore. However 32 | # you should judge for yourself, the pros and cons are mentioned at: 33 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 34 | # 35 | # Note: if you ignore the Pods directory, make sure to uncomment 36 | # `pod install` in .travis.yml 37 | # 38 | Pods 39 | Podfile.lock 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' # 官方库 2 | source 'https://github.com/seongbrave/TwilightSpecs.git' # 私有库 3 | use_frameworks! 4 | 5 | 6 | target 'Twilight' do 7 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 8 | use_frameworks! 9 | pod 'Jacob', '~> 0.0.1' 10 | pod 'Carlisle', '~> 0.0.1' 11 | 12 | # Pods for Twilight 13 | 14 | end 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Twilight 2 | 3 | > 主工程模块,项目取自暮光之城名字 4 | > 模块路由注册、主题等参数配置 5 | 6 | ## 模块说明 7 | 8 | ### 业务模块 9 | 10 | | 模块 | 介绍 | 地址 | 11 | | ------------- | ------------------ | --------------------------------------------- | 12 | | Carlisle | 登陆注册模块 | `https://github.com/SeongBrave/Carlisle.git` | 13 | | Bella | 上下文模块 | `https://github.com/SeongBrave/Bella.git` | 14 | | Alice | 项目配置模块 | `https://github.com/SeongBrave/Alice.git` | 15 | | Jacob | 首页模块 | `https://github.com/SeongBrave/Jacob` | 16 | | Twilight | 主工程项目 | `https://github.com/SeongBrave/Twilight.git` | 17 | | TwilightSpecs | CocoaPods 私有仓储 | `https://github.com/SeongBrave/TwilightSpecs` | 18 | 19 | ### 公用模块 20 | 21 | | 模块 | 介绍 | 地址 | 22 | | ------------- | -------------------------- | --------------------------------------------- | 23 | | UtilCore | 基础工具库 | `https://github.com/SeongBrave/UtilCore` | 24 | | NetWorkCore | 网络工具库 | `https://github.com/SeongBrave/NetWorkCore` | 25 | | EmptyDataView | 列表为空时自定义展示空界面 | `https://github.com/SeongBrave/EmptyDataView` | 26 | 27 | ## 路由注册 28 | 29 | ```Swift 30 | public struct AppRouter { 31 | 32 | public static func initialize(navigator: NavigatorType) { 33 | UtilCoreNavigatorMap.initialize(navigator: navigator) 34 | Carlisle_router.initialize(navigator: navigator) 35 | Jacob_router.initialize(navigator: navigator) 36 | } 37 | } 38 | ``` 39 | -------------------------------------------------------------------------------- /Twilight.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | C9B2A9F0223E1E7800EF5751 /* Me_vc.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9B2A9EF223E1E7800EF5751 /* Me_vc.swift */; }; 11 | C9B2A9F2223E1EAB00EF5751 /* Discovery_vc.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9B2A9F1223E1EAB00EF5751 /* Discovery_vc.swift */; }; 12 | C9B2A9F4223E1EC600EF5751 /* Shopcart_vc.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9B2A9F3223E1EC600EF5751 /* Shopcart_vc.swift */; }; 13 | C9BC232821BDF91500C7C21C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9BC232721BDF91500C7C21C /* AppDelegate.swift */; }; 14 | C9BC232D21BDF91500C7C21C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C9BC232B21BDF91500C7C21C /* Main.storyboard */; }; 15 | C9BC232F21BDF91600C7C21C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C9BC232E21BDF91600C7C21C /* Assets.xcassets */; }; 16 | C9BC233221BDF91600C7C21C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C9BC233021BDF91600C7C21C /* LaunchScreen.storyboard */; }; 17 | C9D966FE223CE8F600500279 /* AppRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9D966FD223CE8F600500279 /* AppRouter.swift */; }; 18 | D6BA075EC3A4ED237494DA73 /* Pods_Twilight.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EE9B51C268F9C23D1B91982 /* Pods_Twilight.framework */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXFileReference section */ 22 | 3EE9B51C268F9C23D1B91982 /* Pods_Twilight.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Twilight.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 23 | 5DEDABBB8043D10BD22C7507 /* Pods-Twilight.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Twilight.debug.xcconfig"; path = "Target Support Files/Pods-Twilight/Pods-Twilight.debug.xcconfig"; sourceTree = ""; }; 24 | 6C3BCC3BA39B40CE4350002A /* Pods-Twilight.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Twilight.release.xcconfig"; path = "Target Support Files/Pods-Twilight/Pods-Twilight.release.xcconfig"; sourceTree = ""; }; 25 | C9B2A9EF223E1E7800EF5751 /* Me_vc.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Me_vc.swift; sourceTree = ""; }; 26 | C9B2A9F1223E1EAB00EF5751 /* Discovery_vc.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Discovery_vc.swift; sourceTree = ""; }; 27 | C9B2A9F3223E1EC600EF5751 /* Shopcart_vc.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shopcart_vc.swift; sourceTree = ""; }; 28 | C9BC232421BDF91500C7C21C /* Twilight.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Twilight.app; sourceTree = BUILT_PRODUCTS_DIR; }; 29 | C9BC232721BDF91500C7C21C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 30 | C9BC232C21BDF91500C7C21C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 31 | C9BC232E21BDF91600C7C21C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 32 | C9BC233121BDF91600C7C21C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 33 | C9BC233321BDF91600C7C21C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 34 | C9D966FD223CE8F600500279 /* AppRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRouter.swift; sourceTree = ""; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | C9BC232121BDF91500C7C21C /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | D6BA075EC3A4ED237494DA73 /* Pods_Twilight.framework in Frameworks */, 43 | ); 44 | runOnlyForDeploymentPostprocessing = 0; 45 | }; 46 | /* End PBXFrameworksBuildPhase section */ 47 | 48 | /* Begin PBXGroup section */ 49 | 499799CC761A549850091683 /* Frameworks */ = { 50 | isa = PBXGroup; 51 | children = ( 52 | 3EE9B51C268F9C23D1B91982 /* Pods_Twilight.framework */, 53 | ); 54 | name = Frameworks; 55 | sourceTree = ""; 56 | }; 57 | C9B2A9EE223E1E5000EF5751 /* TabBarVc */ = { 58 | isa = PBXGroup; 59 | children = ( 60 | C9B2A9EF223E1E7800EF5751 /* Me_vc.swift */, 61 | C9B2A9F1223E1EAB00EF5751 /* Discovery_vc.swift */, 62 | C9B2A9F3223E1EC600EF5751 /* Shopcart_vc.swift */, 63 | ); 64 | path = TabBarVc; 65 | sourceTree = ""; 66 | }; 67 | C9BC231B21BDF91500C7C21C = { 68 | isa = PBXGroup; 69 | children = ( 70 | C9BC232621BDF91500C7C21C /* Twilight */, 71 | C9BC232521BDF91500C7C21C /* Products */, 72 | E71050BDBD93ECBEE655723A /* Pods */, 73 | 499799CC761A549850091683 /* Frameworks */, 74 | ); 75 | sourceTree = ""; 76 | }; 77 | C9BC232521BDF91500C7C21C /* Products */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | C9BC232421BDF91500C7C21C /* Twilight.app */, 81 | ); 82 | name = Products; 83 | sourceTree = ""; 84 | }; 85 | C9BC232621BDF91500C7C21C /* Twilight */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | C9B2A9EE223E1E5000EF5751 /* TabBarVc */, 89 | C9D966FF223CE98600500279 /* AppDelegate */, 90 | C9D966FC223CE8DC00500279 /* Config */, 91 | ); 92 | path = Twilight; 93 | sourceTree = ""; 94 | }; 95 | C9D966FC223CE8DC00500279 /* Config */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | C9D966FD223CE8F600500279 /* AppRouter.swift */, 99 | ); 100 | path = Config; 101 | sourceTree = ""; 102 | }; 103 | C9D966FF223CE98600500279 /* AppDelegate */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | C9BC232B21BDF91500C7C21C /* Main.storyboard */, 107 | C9BC232E21BDF91600C7C21C /* Assets.xcassets */, 108 | C9BC233021BDF91600C7C21C /* LaunchScreen.storyboard */, 109 | C9BC233321BDF91600C7C21C /* Info.plist */, 110 | C9BC232721BDF91500C7C21C /* AppDelegate.swift */, 111 | ); 112 | name = AppDelegate; 113 | sourceTree = ""; 114 | }; 115 | E71050BDBD93ECBEE655723A /* Pods */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 5DEDABBB8043D10BD22C7507 /* Pods-Twilight.debug.xcconfig */, 119 | 6C3BCC3BA39B40CE4350002A /* Pods-Twilight.release.xcconfig */, 120 | ); 121 | path = Pods; 122 | sourceTree = ""; 123 | }; 124 | /* End PBXGroup section */ 125 | 126 | /* Begin PBXNativeTarget section */ 127 | C9BC232321BDF91500C7C21C /* Twilight */ = { 128 | isa = PBXNativeTarget; 129 | buildConfigurationList = C9BC233621BDF91600C7C21C /* Build configuration list for PBXNativeTarget "Twilight" */; 130 | buildPhases = ( 131 | A02D6B2A6E2F3EFD2E155B7E /* [CP] Check Pods Manifest.lock */, 132 | C9BC232021BDF91500C7C21C /* Sources */, 133 | C9BC232121BDF91500C7C21C /* Frameworks */, 134 | C9BC232221BDF91500C7C21C /* Resources */, 135 | 0B058572B3F3CD584E301C20 /* [CP] Embed Pods Frameworks */, 136 | ); 137 | buildRules = ( 138 | ); 139 | dependencies = ( 140 | ); 141 | name = Twilight; 142 | productName = Twilight; 143 | productReference = C9BC232421BDF91500C7C21C /* Twilight.app */; 144 | productType = "com.apple.product-type.application"; 145 | }; 146 | /* End PBXNativeTarget section */ 147 | 148 | /* Begin PBXProject section */ 149 | C9BC231C21BDF91500C7C21C /* Project object */ = { 150 | isa = PBXProject; 151 | attributes = { 152 | LastSwiftUpdateCheck = 1010; 153 | LastUpgradeCheck = 1010; 154 | ORGANIZATIONNAME = GCKIT; 155 | TargetAttributes = { 156 | C9BC232321BDF91500C7C21C = { 157 | CreatedOnToolsVersion = 10.1; 158 | }; 159 | }; 160 | }; 161 | buildConfigurationList = C9BC231F21BDF91500C7C21C /* Build configuration list for PBXProject "Twilight" */; 162 | compatibilityVersion = "Xcode 9.3"; 163 | developmentRegion = en; 164 | hasScannedForEncodings = 0; 165 | knownRegions = ( 166 | en, 167 | Base, 168 | ); 169 | mainGroup = C9BC231B21BDF91500C7C21C; 170 | productRefGroup = C9BC232521BDF91500C7C21C /* Products */; 171 | projectDirPath = ""; 172 | projectRoot = ""; 173 | targets = ( 174 | C9BC232321BDF91500C7C21C /* Twilight */, 175 | ); 176 | }; 177 | /* End PBXProject section */ 178 | 179 | /* Begin PBXResourcesBuildPhase section */ 180 | C9BC232221BDF91500C7C21C /* Resources */ = { 181 | isa = PBXResourcesBuildPhase; 182 | buildActionMask = 2147483647; 183 | files = ( 184 | C9BC233221BDF91600C7C21C /* LaunchScreen.storyboard in Resources */, 185 | C9BC232F21BDF91600C7C21C /* Assets.xcassets in Resources */, 186 | C9BC232D21BDF91500C7C21C /* Main.storyboard in Resources */, 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | /* End PBXResourcesBuildPhase section */ 191 | 192 | /* Begin PBXShellScriptBuildPhase section */ 193 | 0B058572B3F3CD584E301C20 /* [CP] Embed Pods Frameworks */ = { 194 | isa = PBXShellScriptBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | ); 198 | inputFileListPaths = ( 199 | ); 200 | inputPaths = ( 201 | "${PODS_ROOT}/Target Support Files/Pods-Twilight/Pods-Twilight-frameworks.sh", 202 | "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework", 203 | "${BUILT_PRODUCTS_DIR}/Alice/Alice.framework", 204 | "${BUILT_PRODUCTS_DIR}/Bella/Bella.framework", 205 | "${BUILT_PRODUCTS_DIR}/Carlisle/Carlisle.framework", 206 | "${BUILT_PRODUCTS_DIR}/CryptoSwift/CryptoSwift.framework", 207 | "${BUILT_PRODUCTS_DIR}/EmptyDataView/EmptyDataView.framework", 208 | "${BUILT_PRODUCTS_DIR}/Jacob/Jacob.framework", 209 | "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework", 210 | "${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework", 211 | "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework", 212 | "${BUILT_PRODUCTS_DIR}/ModelProtocol/ModelProtocol.framework", 213 | "${BUILT_PRODUCTS_DIR}/NVActivityIndicatorView/NVActivityIndicatorView.framework", 214 | "${BUILT_PRODUCTS_DIR}/NetWorkCore/NetWorkCore.framework", 215 | "${BUILT_PRODUCTS_DIR}/Result/Result.framework", 216 | "${BUILT_PRODUCTS_DIR}/RxAtomic/RxAtomic.framework", 217 | "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework", 218 | "${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework", 219 | "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework", 220 | "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework", 221 | "${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework", 222 | "${BUILT_PRODUCTS_DIR}/Toast-Swift/Toast_Swift.framework", 223 | "${BUILT_PRODUCTS_DIR}/URLNavigator/URLNavigator.framework", 224 | "${BUILT_PRODUCTS_DIR}/UtilCore/UtilCore.framework", 225 | "${BUILT_PRODUCTS_DIR}/WebViewJavascriptBridge/WebViewJavascriptBridge.framework", 226 | ); 227 | name = "[CP] Embed Pods Frameworks"; 228 | outputFileListPaths = ( 229 | ); 230 | outputPaths = ( 231 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework", 232 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alice.framework", 233 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bella.framework", 234 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Carlisle.framework", 235 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CryptoSwift.framework", 236 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/EmptyDataView.framework", 237 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Jacob.framework", 238 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework", 239 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework", 240 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework", 241 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ModelProtocol.framework", 242 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NVActivityIndicatorView.framework", 243 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NetWorkCore.framework", 244 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Result.framework", 245 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxAtomic.framework", 246 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework", 247 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework", 248 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework", 249 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework", 250 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyUserDefaults.framework", 251 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast_Swift.framework", 252 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/URLNavigator.framework", 253 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UtilCore.framework", 254 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebViewJavascriptBridge.framework", 255 | ); 256 | runOnlyForDeploymentPostprocessing = 0; 257 | shellPath = /bin/sh; 258 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Twilight/Pods-Twilight-frameworks.sh\"\n"; 259 | showEnvVarsInLog = 0; 260 | }; 261 | A02D6B2A6E2F3EFD2E155B7E /* [CP] Check Pods Manifest.lock */ = { 262 | isa = PBXShellScriptBuildPhase; 263 | buildActionMask = 2147483647; 264 | files = ( 265 | ); 266 | inputFileListPaths = ( 267 | ); 268 | inputPaths = ( 269 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 270 | "${PODS_ROOT}/Manifest.lock", 271 | ); 272 | name = "[CP] Check Pods Manifest.lock"; 273 | outputFileListPaths = ( 274 | ); 275 | outputPaths = ( 276 | "$(DERIVED_FILE_DIR)/Pods-Twilight-checkManifestLockResult.txt", 277 | ); 278 | runOnlyForDeploymentPostprocessing = 0; 279 | shellPath = /bin/sh; 280 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 281 | showEnvVarsInLog = 0; 282 | }; 283 | /* End PBXShellScriptBuildPhase section */ 284 | 285 | /* Begin PBXSourcesBuildPhase section */ 286 | C9BC232021BDF91500C7C21C /* Sources */ = { 287 | isa = PBXSourcesBuildPhase; 288 | buildActionMask = 2147483647; 289 | files = ( 290 | C9B2A9F4223E1EC600EF5751 /* Shopcart_vc.swift in Sources */, 291 | C9B2A9F0223E1E7800EF5751 /* Me_vc.swift in Sources */, 292 | C9BC232821BDF91500C7C21C /* AppDelegate.swift in Sources */, 293 | C9D966FE223CE8F600500279 /* AppRouter.swift in Sources */, 294 | C9B2A9F2223E1EAB00EF5751 /* Discovery_vc.swift in Sources */, 295 | ); 296 | runOnlyForDeploymentPostprocessing = 0; 297 | }; 298 | /* End PBXSourcesBuildPhase section */ 299 | 300 | /* Begin PBXVariantGroup section */ 301 | C9BC232B21BDF91500C7C21C /* Main.storyboard */ = { 302 | isa = PBXVariantGroup; 303 | children = ( 304 | C9BC232C21BDF91500C7C21C /* Base */, 305 | ); 306 | name = Main.storyboard; 307 | sourceTree = ""; 308 | }; 309 | C9BC233021BDF91600C7C21C /* LaunchScreen.storyboard */ = { 310 | isa = PBXVariantGroup; 311 | children = ( 312 | C9BC233121BDF91600C7C21C /* Base */, 313 | ); 314 | name = LaunchScreen.storyboard; 315 | sourceTree = ""; 316 | }; 317 | /* End PBXVariantGroup section */ 318 | 319 | /* Begin XCBuildConfiguration section */ 320 | C9BC233421BDF91600C7C21C /* Debug */ = { 321 | isa = XCBuildConfiguration; 322 | buildSettings = { 323 | ALWAYS_SEARCH_USER_PATHS = NO; 324 | CLANG_ANALYZER_NONNULL = YES; 325 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 326 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 327 | CLANG_CXX_LIBRARY = "libc++"; 328 | CLANG_ENABLE_MODULES = YES; 329 | CLANG_ENABLE_OBJC_ARC = YES; 330 | CLANG_ENABLE_OBJC_WEAK = YES; 331 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 332 | CLANG_WARN_BOOL_CONVERSION = YES; 333 | CLANG_WARN_COMMA = YES; 334 | CLANG_WARN_CONSTANT_CONVERSION = YES; 335 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 336 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 337 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 338 | CLANG_WARN_EMPTY_BODY = YES; 339 | CLANG_WARN_ENUM_CONVERSION = YES; 340 | CLANG_WARN_INFINITE_RECURSION = YES; 341 | CLANG_WARN_INT_CONVERSION = YES; 342 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 343 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 344 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 345 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 346 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 347 | CLANG_WARN_STRICT_PROTOTYPES = YES; 348 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 349 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 350 | CLANG_WARN_UNREACHABLE_CODE = YES; 351 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 352 | CODE_SIGN_IDENTITY = "iPhone Developer"; 353 | COPY_PHASE_STRIP = NO; 354 | DEBUG_INFORMATION_FORMAT = dwarf; 355 | ENABLE_STRICT_OBJC_MSGSEND = YES; 356 | ENABLE_TESTABILITY = YES; 357 | GCC_C_LANGUAGE_STANDARD = gnu11; 358 | GCC_DYNAMIC_NO_PIC = NO; 359 | GCC_NO_COMMON_BLOCKS = YES; 360 | GCC_OPTIMIZATION_LEVEL = 0; 361 | GCC_PREPROCESSOR_DEFINITIONS = ( 362 | "DEBUG=1", 363 | "$(inherited)", 364 | ); 365 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 366 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 367 | GCC_WARN_UNDECLARED_SELECTOR = YES; 368 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 369 | GCC_WARN_UNUSED_FUNCTION = YES; 370 | GCC_WARN_UNUSED_VARIABLE = YES; 371 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 372 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 373 | MTL_FAST_MATH = YES; 374 | ONLY_ACTIVE_ARCH = YES; 375 | SDKROOT = iphoneos; 376 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 377 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 378 | }; 379 | name = Debug; 380 | }; 381 | C9BC233521BDF91600C7C21C /* Release */ = { 382 | isa = XCBuildConfiguration; 383 | buildSettings = { 384 | ALWAYS_SEARCH_USER_PATHS = NO; 385 | CLANG_ANALYZER_NONNULL = YES; 386 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 387 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 388 | CLANG_CXX_LIBRARY = "libc++"; 389 | CLANG_ENABLE_MODULES = YES; 390 | CLANG_ENABLE_OBJC_ARC = YES; 391 | CLANG_ENABLE_OBJC_WEAK = YES; 392 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 393 | CLANG_WARN_BOOL_CONVERSION = YES; 394 | CLANG_WARN_COMMA = YES; 395 | CLANG_WARN_CONSTANT_CONVERSION = YES; 396 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 397 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 398 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 399 | CLANG_WARN_EMPTY_BODY = YES; 400 | CLANG_WARN_ENUM_CONVERSION = YES; 401 | CLANG_WARN_INFINITE_RECURSION = YES; 402 | CLANG_WARN_INT_CONVERSION = YES; 403 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 404 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 405 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 406 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 407 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 408 | CLANG_WARN_STRICT_PROTOTYPES = YES; 409 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 410 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 411 | CLANG_WARN_UNREACHABLE_CODE = YES; 412 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 413 | CODE_SIGN_IDENTITY = "iPhone Developer"; 414 | COPY_PHASE_STRIP = NO; 415 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 416 | ENABLE_NS_ASSERTIONS = NO; 417 | ENABLE_STRICT_OBJC_MSGSEND = YES; 418 | GCC_C_LANGUAGE_STANDARD = gnu11; 419 | GCC_NO_COMMON_BLOCKS = YES; 420 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 421 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 422 | GCC_WARN_UNDECLARED_SELECTOR = YES; 423 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 424 | GCC_WARN_UNUSED_FUNCTION = YES; 425 | GCC_WARN_UNUSED_VARIABLE = YES; 426 | IPHONEOS_DEPLOYMENT_TARGET = 12.1; 427 | MTL_ENABLE_DEBUG_INFO = NO; 428 | MTL_FAST_MATH = YES; 429 | SDKROOT = iphoneos; 430 | SWIFT_COMPILATION_MODE = wholemodule; 431 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 432 | VALIDATE_PRODUCT = YES; 433 | }; 434 | name = Release; 435 | }; 436 | C9BC233721BDF91600C7C21C /* Debug */ = { 437 | isa = XCBuildConfiguration; 438 | baseConfigurationReference = 5DEDABBB8043D10BD22C7507 /* Pods-Twilight.debug.xcconfig */; 439 | buildSettings = { 440 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 441 | CODE_SIGN_STYLE = Automatic; 442 | DEVELOPMENT_TEAM = 6GU5V4X2VU; 443 | INFOPLIST_FILE = Twilight/Info.plist; 444 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 445 | LD_RUNPATH_SEARCH_PATHS = ( 446 | "$(inherited)", 447 | "@executable_path/Frameworks", 448 | ); 449 | PRODUCT_BUNDLE_IDENTIFIER = seongbrave.cn; 450 | PRODUCT_NAME = "$(TARGET_NAME)"; 451 | SWIFT_VERSION = 4.2; 452 | TARGETED_DEVICE_FAMILY = 1; 453 | }; 454 | name = Debug; 455 | }; 456 | C9BC233821BDF91600C7C21C /* Release */ = { 457 | isa = XCBuildConfiguration; 458 | baseConfigurationReference = 6C3BCC3BA39B40CE4350002A /* Pods-Twilight.release.xcconfig */; 459 | buildSettings = { 460 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 461 | CODE_SIGN_STYLE = Automatic; 462 | DEVELOPMENT_TEAM = 6GU5V4X2VU; 463 | INFOPLIST_FILE = Twilight/Info.plist; 464 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 465 | LD_RUNPATH_SEARCH_PATHS = ( 466 | "$(inherited)", 467 | "@executable_path/Frameworks", 468 | ); 469 | PRODUCT_BUNDLE_IDENTIFIER = seongbrave.cn; 470 | PRODUCT_NAME = "$(TARGET_NAME)"; 471 | SWIFT_VERSION = 4.2; 472 | TARGETED_DEVICE_FAMILY = 1; 473 | }; 474 | name = Release; 475 | }; 476 | /* End XCBuildConfiguration section */ 477 | 478 | /* Begin XCConfigurationList section */ 479 | C9BC231F21BDF91500C7C21C /* Build configuration list for PBXProject "Twilight" */ = { 480 | isa = XCConfigurationList; 481 | buildConfigurations = ( 482 | C9BC233421BDF91600C7C21C /* Debug */, 483 | C9BC233521BDF91600C7C21C /* Release */, 484 | ); 485 | defaultConfigurationIsVisible = 0; 486 | defaultConfigurationName = Release; 487 | }; 488 | C9BC233621BDF91600C7C21C /* Build configuration list for PBXNativeTarget "Twilight" */ = { 489 | isa = XCConfigurationList; 490 | buildConfigurations = ( 491 | C9BC233721BDF91600C7C21C /* Debug */, 492 | C9BC233821BDF91600C7C21C /* Release */, 493 | ); 494 | defaultConfigurationIsVisible = 0; 495 | defaultConfigurationName = Release; 496 | }; 497 | /* End XCConfigurationList section */ 498 | }; 499 | rootObject = C9BC231C21BDF91500C7C21C /* Project object */; 500 | } 501 | -------------------------------------------------------------------------------- /Twilight.xcodeproj/xcshareddata/xcschemes/Twilight.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Twilight/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Twilight 4 | // 5 | // Created by Gckit on 2019/04/07. 6 | // Copyright (c) 2019 SeongBrave. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import UtilCore 11 | import Carlisle 12 | import Alice 13 | import URLNavigator 14 | import NetWorkCore 15 | import Bella 16 | import Jacob 17 | 18 | @UIApplicationMain 19 | class AppDelegate: UIResponder, UIApplicationDelegate { 20 | 21 | var window: UIWindow? 22 | let navigator = Navigator() 23 | 24 | 25 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 26 | AppRouter.initialize(navigator: navigator) 27 | setCommonAppleance() 28 | configModule() 29 | setupRootViewController() 30 | // Override point for customization after application launch. 31 | return true 32 | } 33 | 34 | func applicationWillResignActive(_ application: UIApplication) { 35 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 36 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 37 | } 38 | 39 | func applicationDidEnterBackground(_ application: UIApplication) { 40 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 41 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 42 | } 43 | 44 | func applicationWillEnterForeground(_ application: UIApplication) { 45 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 46 | } 47 | 48 | func applicationDidBecomeActive(_ application: UIApplication) { 49 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 50 | } 51 | 52 | func applicationWillTerminate(_ application: UIApplication) { 53 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 54 | } 55 | 56 | 57 | } 58 | 59 | extension AppDelegate { 60 | 61 | /** 62 | 设置导航等 的主题颜色 63 | */ 64 | func setCommonAppleance(){ 65 | 66 | UIApplication.shared.statusBarStyle = .lightContent 67 | let navigationBarAppearance = UINavigationBar.appearance() 68 | //设置显示的颜色 69 | navigationBarAppearance.barTintColor = UIColor.white 70 | navigationBarAppearance.tintColor = Theme.btn.normal 71 | UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.black] 72 | 73 | let tabBarAppearance = UITabBar.appearance() 74 | tabBarAppearance.tintColor = Theme.btn.normal 75 | tabBarAppearance.barTintColor = UIColor.white 76 | tabBarAppearance.isOpaque = true 77 | 78 | } 79 | 80 | /* 81 | 模块化基础配置 82 | */ 83 | func configModule() { 84 | Envs.baseUrl = ["http://seongbrave.cn/api/v1/"] 85 | Envs.isDebug = true 86 | NetWorkCore.baseUrl = Envs.baseUrl 87 | Global.shared.updateUserFromService() 88 | //错误码为200010 表示回话过期 89 | UtilCore.sharedInstance.toLoginErrorCode = 200010; 90 | } 91 | 92 | func setupRootViewController() { 93 | self.window = UIWindow(frame: UIScreen.main.bounds); 94 | self.window!.backgroundColor=UIColor.white; 95 | setTabBarVc() 96 | } 97 | 98 | func setTabBarVc() { 99 | let tabbar0 = UITabBarItem(title: "首页", image:UIImage(named: "home_unselected") ,selectedImage:UIImage(named: "home_selected")?.withRenderingMode(.alwaysOriginal)) 100 | tabbar0.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -2) 101 | let tabbar1 = UITabBarItem(title: "分类", image:UIImage(named: "category_unselected") ,selectedImage:UIImage(named: "category_selected")?.withRenderingMode(.alwaysOriginal)) 102 | tabbar1.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -2) 103 | let tabbar2 = UITabBarItem(title: "发现", image:UIImage(named: "discovery_unselected") ,selectedImage:UIImage(named: "discovery_selected")?.withRenderingMode(.alwaysOriginal)) 104 | tabbar2.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -2) 105 | let tabbar3 = UITabBarItem(title: "购物车", image:UIImage(named: "shopcart_unselected") ,selectedImage:UIImage(named: "shopcart_selected")?.withRenderingMode(.alwaysOriginal)) 106 | tabbar3.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -2) 107 | let tabbar4 = UITabBarItem(title: "我的", image:UIImage(named: "me_unselected") ,selectedImage:UIImage(named: "me_selected")?.withRenderingMode(.alwaysOriginal)) 108 | tabbar4.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -2) 109 | 110 | let homeVc = JacobCore.home_vc 111 | homeVc.title = "首页" 112 | let nav0 = Base_Nav(rootViewController: homeVc) 113 | nav0.tabBarItem = tabbar0 114 | 115 | let categoryVc = JacobCore.productVc 116 | categoryVc.title = "分类" 117 | let nav1 = Base_Nav(rootViewController: categoryVc) 118 | nav1.tabBarItem = tabbar1 119 | 120 | /* 121 | 🥳 这块由于精力有限,其它模块其实和JacobCore(商品相关的)模块类似了,这块为了测试简单在主项目中完成其它模块的界面,正常情况下是主工程只负责配置,关联各个模块,没有任何业务相关的界面 122 | */ 123 | let mainStoryboard = UIStoryboard.init(name: "Main", bundle: nil) 124 | 125 | let discoveryVc = mainStoryboard.instantiateViewController(withIdentifier: "Discovery_vc") 126 | let nav2 = Base_Nav(rootViewController: discoveryVc) 127 | nav2.tabBarItem = tabbar2 128 | 129 | let shopCartVc = mainStoryboard.instantiateViewController(withIdentifier: "Shopcart_vc") 130 | let nav3 = Base_Nav(rootViewController: shopCartVc) 131 | nav3.tabBarItem = tabbar3 132 | 133 | let meVc = mainStoryboard.instantiateViewController(withIdentifier: "Me_vc") 134 | let nav4 = Base_Nav(rootViewController: meVc) 135 | nav4.tabBarItem = tabbar4 136 | 137 | let tabVc = UITabBarController() 138 | tabVc.viewControllers = [nav0,nav1,nav2,nav3,nav4] 139 | self.window?.rootViewController = tabVc 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Group-20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Group-20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-Small@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-Small@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Group-Small-40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Group-Small-40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Group-60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Group-60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "1024x1024", 53 | "idiom" : "ios-marketing", 54 | "filename" : "icon.png", 55 | "scale" : "1x" 56 | } 57 | ], 58 | "info" : { 59 | "version" : 1, 60 | "author" : "xcode" 61 | } 62 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Group-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/Group-20@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Group-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/Group-20@3x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Group-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/Group-60@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Group-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/Group-60@3x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Group-Small-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/Group-Small-40@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Group-Small-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/Group-Small-40@3x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/AppIcon.appiconset/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/AppIcon.appiconset/icon.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/iconfontback.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "iconfontback@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/iconfontback.imageset/iconfontback@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/iconfontback.imageset/iconfontback@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/category_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "category_selected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/category_selected.imageset/category_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/category_selected.imageset/category_selected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/category_unselected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "category_unselected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/category_unselected.imageset/category_unselected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/category_unselected.imageset/category_unselected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/discovery_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "discovery_selected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/discovery_selected.imageset/discovery_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/discovery_selected.imageset/discovery_selected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/discovery_unselected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "discovery_unselected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/discovery_unselected.imageset/discovery_unselected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/discovery_unselected.imageset/discovery_unselected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/home_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "home_selected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/home_selected.imageset/home_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/home_selected.imageset/home_selected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/home_unselected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "home_unselected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/home_unselected.imageset/home_unselected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/home_unselected.imageset/home_unselected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/me_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "me_selected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/me_selected.imageset/me_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/me_selected.imageset/me_selected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/me_unselected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "me_unselected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/me_unselected.imageset/me_unselected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/me_unselected.imageset/me_unselected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/shopcart_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "shopcart_selected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/shopcart_selected.imageset/shopcart_selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/shopcart_selected.imageset/shopcart_selected@2x.png -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/shopcart_unselected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "shopcart_unselected@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Twilight/Assets.xcassets/tabbar/shopcart_unselected.imageset/shopcart_unselected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SeongBrave/Twilight/394587957164dc4c835c505c00602e0c66778b5c/Twilight/Assets.xcassets/tabbar/shopcart_unselected.imageset/shopcart_unselected@2x.png -------------------------------------------------------------------------------- /Twilight/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Twilight/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Twilight/Config/AppRouter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppRouter.swift 3 | // Twilight 4 | // 5 | // Created by Gckit on 2019/04/07. 6 | // Copyright (c) 2019 SeongBrave. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import URLNavigator 11 | import UtilCore 12 | import Carlisle 13 | import Jacob 14 | 15 | public struct AppRouter { 16 | 17 | public static func initialize(navigator: NavigatorType) { 18 | UtilCoreNavigatorMap.initialize(navigator: navigator) 19 | Carlisle_router.initialize(navigator: navigator) 20 | Jacob_router.initialize(navigator: navigator) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Twilight/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Gckit 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | NSCameraUsageDescription 20 | 使用相机 扫一扫 21 | CFBundleShortVersionString 22 | 1.0 23 | CFBundleVersion 24 | 1 25 | LSRequiresIPhoneOS 26 | 27 | NSAppTransportSecurity 28 | 29 | NSAllowsArbitraryLoads 30 | 31 | 32 | UILaunchStoryboardName 33 | LaunchScreen 34 | UIMainStoryboardFile 35 | Main 36 | UIRequiredDeviceCapabilities 37 | 38 | armv7 39 | 40 | UISupportedInterfaceOrientations 41 | 42 | UIInterfaceOrientationPortrait 43 | 44 | UISupportedInterfaceOrientations~ipad 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationPortraitUpsideDown 48 | UIInterfaceOrientationLandscapeLeft 49 | UIInterfaceOrientationLandscapeRight 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /Twilight/TabBarVc/Discovery_vc.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Discovery_vc.swift 3 | // Twilight 4 | // 5 | // Created by Gckit on 2019/04/07. 6 | // Copyright (c) 2019 SeongBrave. All rights reserved. 7 | // 8 | 9 | import RxSwift 10 | import UtilCore 11 | 12 | class Discovery_vc: Base_Vc { 13 | 14 | /****************************Storyboard UI设置区域****************************/ 15 | @IBOutlet weak var test_btn: UIButton! 16 | 17 | /*----------------------------  自定义属性区域 ----------------------------*/ 18 | 19 | 20 | /****************************Storyboard 绑定方法区域****************************/ 21 | 22 | 23 | 24 | /**************************** 以下是方法区域 ****************************/ 25 | override func viewDidLoad() { 26 | super.viewDidLoad() 27 | 28 | } 29 | 30 | override func viewWillAppear(_ animated: Bool) { 31 | super.viewWillAppear(animated) 32 | 33 | } 34 | 35 | override func viewWillDisappear(_ animated: Bool) { 36 | super.viewWillDisappear(animated) 37 | } 38 | 39 | override func didReceiveMemoryWarning() { 40 | super.didReceiveMemoryWarning() 41 | 42 | } 43 | 44 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 45 | 46 | } 47 | 48 | /** 49 | 界面基础设置 50 | */ 51 | override func setupUI() { 52 | 53 | } 54 | /** 55 | app 主题 设置 56 | */ 57 | override func setViewTheme() { 58 | 59 | } 60 | /** 61 | 绑定到viewmodel 设置 62 | */ 63 | override func bindToViewModel() { 64 | self.test_btn 65 | .rx.tap 66 | .map({("productvc",nil)}) 67 | .bind(to: self.view.rx_openUrl) 68 | .disposed(by: disposeBag) 69 | } 70 | } 71 | 72 | -------------------------------------------------------------------------------- /Twilight/TabBarVc/Me_vc.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Me_vc.swift 3 | // Twilight 4 | // 5 | // Created by Gckit on 2019/04/07. 6 | // Copyright (c) 2019 SeongBrave. All rights reserved. 7 | // 8 | 9 | import RxSwift 10 | import UtilCore 11 | 12 | class Me_vc: Base_Vc { 13 | 14 | /****************************Storyboard UI设置区域****************************/ 15 | 16 | @IBOutlet weak var test_btn: UIButton! 17 | 18 | /*----------------------------  自定义属性区域 ----------------------------*/ 19 | 20 | 21 | /****************************Storyboard 绑定方法区域****************************/ 22 | 23 | 24 | 25 | /**************************** 以下是方法区域 ****************************/ 26 | override func viewDidLoad() { 27 | super.viewDidLoad() 28 | 29 | } 30 | 31 | override func viewWillAppear(_ animated: Bool) { 32 | super.viewWillAppear(animated) 33 | 34 | } 35 | 36 | override func viewWillDisappear(_ animated: Bool) { 37 | super.viewWillDisappear(animated) 38 | } 39 | 40 | override func didReceiveMemoryWarning() { 41 | super.didReceiveMemoryWarning() 42 | 43 | } 44 | 45 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 46 | 47 | } 48 | 49 | /** 50 | 界面基础设置 51 | */ 52 | override func setupUI() { 53 | 54 | } 55 | /** 56 | app 主题 设置 57 | */ 58 | override func setViewTheme() { 59 | 60 | } 61 | /** 62 | 绑定到viewmodel 设置 63 | */ 64 | override func bindToViewModel() { 65 | self.test_btn 66 | .rx.tap 67 | .map({("login",nil)}) 68 | .bind(to: self.view.rx_openUrl) 69 | .disposed(by: disposeBag) 70 | 71 | } 72 | } 73 | 74 | -------------------------------------------------------------------------------- /Twilight/TabBarVc/Shopcart_vc.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Shopcart_vc.swift 3 | // Twilight 4 | // 5 | // Created by Gckit on 2019/04/07. 6 | // Copyright (c) 2019 SeongBrave. All rights reserved. 7 | // 8 | 9 | 10 | import RxSwift 11 | import UtilCore 12 | 13 | class Shopcart_vc: Base_Vc { 14 | 15 | /****************************Storyboard UI设置区域****************************/ 16 | @IBOutlet weak var test_btn: UIButton! 17 | 18 | /*----------------------------  自定义属性区域 ----------------------------*/ 19 | 20 | 21 | /****************************Storyboard 绑定方法区域****************************/ 22 | 23 | 24 | 25 | /**************************** 以下是方法区域 ****************************/ 26 | override func viewDidLoad() { 27 | super.viewDidLoad() 28 | 29 | } 30 | 31 | override func viewWillAppear(_ animated: Bool) { 32 | super.viewWillAppear(animated) 33 | 34 | } 35 | 36 | override func viewWillDisappear(_ animated: Bool) { 37 | super.viewWillDisappear(animated) 38 | } 39 | 40 | override func didReceiveMemoryWarning() { 41 | super.didReceiveMemoryWarning() 42 | 43 | } 44 | 45 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 46 | 47 | } 48 | 49 | /** 50 | 界面基础设置 51 | */ 52 | override func setupUI() { 53 | 54 | } 55 | /** 56 | app 主题 设置 57 | */ 58 | override func setViewTheme() { 59 | 60 | } 61 | /** 62 | 绑定到viewmodel 设置 63 | */ 64 | override func bindToViewModel() { 65 | self.test_btn 66 | .rx.tap 67 | .map({("homevc",nil)}) 68 | .bind(to: self.view.rx_openUrl) 69 | .disposed(by: disposeBag) 70 | } 71 | } 72 | --------------------------------------------------------------------------------