Commit accc5f8b2565219e4d45d81422588e2b1ff2eb59

Authored by niudaojian
2 parents c20e4191 2330cd7b

Merge branch 'master' of bj.gitlab.cnlive.com:ios-team/CNLiveMateCode

# Conflicts:
#	metaCode/Classes/Main/LoginPage/Controller/CNLiveLoginViewController.swift
Showing 26 changed files with 1837 additions and 193 deletions
... ... @@ -22,6 +22,8 @@ target 'metaCode' do
22 22 pod 'IQKeyboardManagerSwift'
23 23 #布局文件
24 24 pod 'SnapKit'
  25 + #加载框
  26 + pod 'MBProgressHUD'
25 27  
26 28 target 'metaCodeTests' do
27 29 inherit! :search_paths
... ...
metaCode.xcodeproj/project.pbxproj
... ... @@ -10,12 +10,16 @@
10 10 0D39E93D7229931C86EB1161 /* Pods_metaCode_metaCodeUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63D879B49B1E42F1584DD75E /* Pods_metaCode_metaCodeUITests.framework */; };
11 11 1DD2808DF02C120276F99F4D /* Pods_metaCode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1C55A719CFEE073C06D37CE /* Pods_metaCode.framework */; };
12 12 790D01822A2D88FC00C5978D /* CNLiveConfigMacro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01812A2D88FC00C5978D /* CNLiveConfigMacro.swift */; };
13   - 790D01852A2D89E100C5978D /* CNHexColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01842A2D89E100C5978D /* CNHexColor.swift */; };
  13 + 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01842A2D89E100C5978D /* UIColor+CNHexColor.swift */; };
14 14 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D018A2A2D8B3300C5978D /* CNLiveLoginViewController.swift */; };
15 15 790D01912A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01902A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift */; };
16   - 796398932A260C0100D045EB /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988C2A260C0100D045EB /* ViewController.swift */; };
17   - 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01842A2D89E100C5978D /* UIColor+CNHexColor.swift */; };
18   - 796398932A260C0100D045EB /* CNMineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988C2A260C0100D045EB /* CNMineViewController.swift */; };
  16 + 790D019A2A2DCAE400C5978D /* CNMineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01992A2DCAE400C5978D /* CNMineViewController.swift */; };
  17 + 790D019D2A2DCBD000C5978D /* UIView+CNGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */; };
  18 + 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */; };
  19 + 790D01A12A2DD69200C5978D /* CNLiveTips.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A02A2DD69200C5978D /* CNLiveTips.swift */; };
  20 + 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */; };
  21 + 790D01A52A2DF65E00C5978D /* CNLiveLoginPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */; };
  22 + 790D01A72A2DF84C00C5978D /* countries.plist in Resources */ = {isa = PBXBuildFile; fileRef = 790D01A62A2DF84C00C5978D /* countries.plist */; };
19 23 796398942A260C0100D045EB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963988D2A260C0100D045EB /* AppDelegate.swift */; };
20 24 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */; };
21 25 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */ = {isa = PBXBuildFile; };
... ... @@ -67,12 +71,16 @@
67 71 67F8190701D1AB7F7724E8BA /* Pods-metaCodeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-metaCodeTests.release.xcconfig"; path = "Target Support Files/Pods-metaCodeTests/Pods-metaCodeTests.release.xcconfig"; sourceTree = "<group>"; };
68 72 721865F548C997EFAE525B6F /* Pods-metaCode-metaCodeUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-metaCode-metaCodeUITests.release.xcconfig"; path = "Target Support Files/Pods-metaCode-metaCodeUITests/Pods-metaCode-metaCodeUITests.release.xcconfig"; sourceTree = "<group>"; };
69 73 790D01812A2D88FC00C5978D /* CNLiveConfigMacro.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveConfigMacro.swift; sourceTree = "<group>"; };
70   - 790D01842A2D89E100C5978D /* CNHexColor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNHexColor.swift; sourceTree = "<group>"; };
  74 + 790D01842A2D89E100C5978D /* UIColor+CNHexColor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+CNHexColor.swift"; sourceTree = "<group>"; };
71 75 790D018A2A2D8B3300C5978D /* CNLiveLoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginViewController.swift; sourceTree = "<group>"; };
72 76 790D01902A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigFontMacro.swift; sourceTree = "<group>"; };
73   - 7963988C2A260C0100D045EB /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
74   - 790D01842A2D89E100C5978D /* UIColor+CNHexColor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+CNHexColor.swift"; sourceTree = "<group>"; };
75   - 7963988C2A260C0100D045EB /* CNMineViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNMineViewController.swift; sourceTree = "<group>"; };
  77 + 790D01992A2DCAE400C5978D /* CNMineViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNMineViewController.swift; sourceTree = "<group>"; };
  78 + 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+CNGradient.swift"; sourceTree = "<group>"; };
  79 + 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginViewModel.swift; sourceTree = "<group>"; };
  80 + 790D01A02A2DD69200C5978D /* CNLiveTips.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveTips.swift; sourceTree = "<group>"; };
  81 + 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveConfigManager.swift; sourceTree = "<group>"; };
  82 + 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveLoginPickerView.swift; sourceTree = "<group>"; };
  83 + 790D01A62A2DF84C00C5978D /* countries.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = countries.plist; sourceTree = "<group>"; };
76 84 7963988D2A260C0100D045EB /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
77 85 7963989C2A260E6200D045EB /* CNLiveBaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CNLiveBaseViewController.swift; sourceTree = "<group>"; };
78 86 79A68C512A26F59C00DC3B43 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = metaCode/Info.plist; sourceTree = "<group>"; };
... ... @@ -153,41 +161,12 @@
153 161 children = (
154 162 790D01842A2D89E100C5978D /* UIColor+CNHexColor.swift */,
155 163 7C49312C2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift */,
  164 + 790D019C2A2DCBD000C5978D /* UIView+CNGradient.swift */,
  165 + 790D01A02A2DD69200C5978D /* CNLiveTips.swift */,
156 166 );
157 167 path = Extensions;
158 168 sourceTree = "<group>";
159 169 };
160   - 790D01862A2D8A7000C5978D /* MinePage */ = {
161   - isa = PBXGroup;
162   - children = (
163   - 790D01892A2D8A9600C5978D /* Controller */,
164   - 790D01872A2D8A9600C5978D /* View */,
165   - 790D01882A2D8A9600C5978D /* ViewModel */,
166   - );
167   - path = MinePage;
168   - sourceTree = "<group>";
169   - };
170   - 790D01872A2D8A9600C5978D /* View */ = {
171   - isa = PBXGroup;
172   - children = (
173   - );
174   - path = View;
175   - sourceTree = "<group>";
176   - };
177   - 790D01882A2D8A9600C5978D /* ViewModel */ = {
178   - isa = PBXGroup;
179   - children = (
180   - );
181   - path = ViewModel;
182   - sourceTree = "<group>";
183   - };
184   - 790D01892A2D8A9600C5978D /* Controller */ = {
185   - isa = PBXGroup;
186   - children = (
187   - );
188   - path = Controller;
189   - sourceTree = "<group>";
190   - };
191 170 790D018C2A2D8C9A00C5978D /* LoginPage */ = {
192 171 isa = PBXGroup;
193 172 children = (
... ... @@ -202,6 +181,7 @@
202 181 790D018D2A2D8C9A00C5978D /* ViewModel */ = {
203 182 isa = PBXGroup;
204 183 children = (
  184 + 790D019E2A2DD66E00C5978D /* CNLiveLoginViewModel.swift */,
205 185 );
206 186 path = ViewModel;
207 187 sourceTree = "<group>";
... ... @@ -224,10 +204,27 @@
224 204 790D01942A2DB9EF00C5978D /* View */ = {
225 205 isa = PBXGroup;
226 206 children = (
  207 + 790D01A42A2DF65E00C5978D /* CNLiveLoginPickerView.swift */,
227 208 );
228 209 path = View;
229 210 sourceTree = "<group>";
230 211 };
  212 + 790D01972A2DCAE400C5978D /* MinePage */ = {
  213 + isa = PBXGroup;
  214 + children = (
  215 + 790D01982A2DCAE400C5978D /* Controller */,
  216 + );
  217 + path = MinePage;
  218 + sourceTree = "<group>";
  219 + };
  220 + 790D01982A2DCAE400C5978D /* Controller */ = {
  221 + isa = PBXGroup;
  222 + children = (
  223 + 790D01992A2DCAE400C5978D /* CNMineViewController.swift */,
  224 + );
  225 + path = Controller;
  226 + sourceTree = "<group>";
  227 + };
231 228 7963988A2A260B3300D045EB /* Classes */ = {
232 229 isa = PBXGroup;
233 230 children = (
... ... @@ -254,6 +251,7 @@
254 251 7963988E2A260C0100D045EB /* Resources */ = {
255 252 isa = PBXGroup;
256 253 children = (
  254 + 790D01A62A2DF84C00C5978D /* countries.plist */,
257 255 );
258 256 path = Resources;
259 257 sourceTree = "<group>";
... ... @@ -275,9 +273,8 @@
275 273 796398902A260C0100D045EB /* Main */ = {
276 274 isa = PBXGroup;
277 275 children = (
  276 + 790D01972A2DCAE400C5978D /* MinePage */,
278 277 790D018C2A2D8C9A00C5978D /* LoginPage */,
279   - 790D01862A2D8A7000C5978D /* MinePage */,
280   - 7C49312E2A2DBCB4000E44B4 /* Mine */,
281 278 7CD675212A26F844008354C1 /* HomePage */,
282 279 );
283 280 path = Main;
... ... @@ -296,6 +293,7 @@
296 293 children = (
297 294 790D01812A2D88FC00C5978D /* CNLiveConfigMacro.swift */,
298 295 790D01902A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift */,
  296 + 790D01A22A2DDBA300C5978D /* CNLiveConfigManager.swift */,
299 297 );
300 298 path = Config;
301 299 sourceTree = "<group>";
... ... @@ -319,22 +317,6 @@
319 317 path = Base;
320 318 sourceTree = "<group>";
321 319 };
322   - 7C49312E2A2DBCB4000E44B4 /* Mine */ = {
323   - isa = PBXGroup;
324   - children = (
325   - 7C49312F2A2DBCC4000E44B4 /* Controller */,
326   - );
327   - path = Mine;
328   - sourceTree = "<group>";
329   - };
330   - 7C49312F2A2DBCC4000E44B4 /* Controller */ = {
331   - isa = PBXGroup;
332   - children = (
333   - 7963988C2A260C0100D045EB /* CNMineViewController.swift */,
334   - );
335   - path = Controller;
336   - sourceTree = "<group>";
337   - };
338 320 7CD675212A26F844008354C1 /* HomePage */ = {
339 321 isa = PBXGroup;
340 322 children = (
... ... @@ -545,6 +527,7 @@
545 527 buildActionMask = 2147483647;
546 528 files = (
547 529 818163C82A25CFCF00579C86 /* LaunchScreen.storyboard in Resources */,
  530 + 790D01A72A2DF84C00C5978D /* countries.plist in Resources */,
548 531 818163C52A25CFCF00579C86 /* Assets.xcassets in Resources */,
549 532 818163C32A25CFCC00579C86 /* Main.storyboard in Resources */,
550 533 );
... ... @@ -677,27 +660,31 @@
677 660 7CD675292A270F6A008354C1 /* WJColorChange.m in Sources */,
678 661 796398942A260C0100D045EB /* AppDelegate.swift in Sources */,
679 662 7963989D2A260E6200D045EB /* CNLiveBaseViewController.swift in Sources */,
  663 + 790D01A52A2DF65E00C5978D /* CNLiveLoginPickerView.swift in Sources */,
680 664 790D01822A2D88FC00C5978D /* CNLiveConfigMacro.swift in Sources */,
681 665 7CD675482A274167008354C1 /* PGIndexBannerSubiew.m in Sources */,
  666 + 790D019F2A2DD66E00C5978D /* CNLiveLoginViewModel.swift in Sources */,
  667 + 790D019D2A2DCBD000C5978D /* UIView+CNGradient.swift in Sources */,
682 668 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */,
683 669 7CD675522A29C04B008354C1 /* CNLiveConstant.swift in Sources */,
684 670 7CD6753E2A2740B0008354C1 /* CNPayMoneyCodeView.swift in Sources */,
  671 + 790D01A12A2DD69200C5978D /* CNLiveTips.swift in Sources */,
685 672 7CD675402A2740B0008354C1 /* CNCollectMoneyCodeView.swift in Sources */,
686 673 7CD6754F2A2840B9008354C1 /* CNMetaCodeHomePageController.swift in Sources */,
687 674 7CD675472A274167008354C1 /* NewPagedFlowView.m in Sources */,
  675 + 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */,
688 676 79A68C4A2A26E6CE00DC3B43 /* (null) in Sources */,
689   - 790D01852A2D89E100C5978D /* CNHexColor.swift in Sources */,
690   - 796398932A260C0100D045EB /* ViewController.swift in Sources */,
  677 + 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */,
691 678 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */,
692 679 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */,
693 680 790D01912A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift in Sources */,
694 681 790D01852A2D89E100C5978D /* UIColor+CNHexColor.swift in Sources */,
695   - 796398932A260C0100D045EB /* CNMineViewController.swift in Sources */,
696 682 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */,
697 683 7C4931292A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift in Sources */,
698 684 7CD6753F2A2740B0008354C1 /* CNTopCollectMoneyRemindView.swift in Sources */,
699 685 7CD6753C2A2740B0008354C1 /* CNBottomPayMoneyRemindView.swift in Sources */,
700 686 7C49312D2A2DB9FA000E44B4 /* UITabBar+CNBadge.swift in Sources */,
  687 + 790D019A2A2DCAE400C5978D /* CNMineViewController.swift in Sources */,
701 688 79A68C4C2A26EA6000DC3B43 /* (null) in Sources */,
702 689 );
703 690 runOnlyForDeploymentPostprocessing = 0;
... ...
metaCode/Classes/Config/CNLiveConfigManager.swift 0 → 100644
  1 +//
  2 +// CNLiveConfigManager.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/5.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +class CNLiveConfigManager : NSObject {
  11 +
  12 + static let shared = CNLiveConfigManager()
  13 +
  14 + public var keyboardDisplayHeight : CGFloat = 0
  15 +
  16 + private override init() {
  17 + super.init()
  18 + NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShowNotification), name: UIResponder.keyboardDidShowNotification, object: nil)
  19 + NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidChangeFrameNotification), name: UIResponder.keyboardDidChangeFrameNotification, object: nil)
  20 + NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidHideNotification), name: UIResponder.keyboardDidHideNotification, object: nil)
  21 + }
  22 +
  23 + deinit {
  24 + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidShowNotification, object: nil)
  25 + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidChangeFrameNotification, object: nil)
  26 + NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardDidHideNotification, object: nil)
  27 + }
  28 +
  29 + override class func copy() -> Any {
  30 + return self
  31 + }
  32 +
  33 + override class func mutableCopy() -> Any {
  34 + return self
  35 + }
  36 +
  37 + @objc private func keyboardDidShowNotification(notification : Notification) {
  38 + let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue
  39 + CNLiveConfigManager.shared.keyboardDisplayHeight = keyboardValue?.cgRectValue.size.height ?? 0
  40 + }
  41 + @objc private func keyboardDidChangeFrameNotification(notification : Notification) {
  42 + let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue
  43 + CNLiveConfigManager.shared.keyboardDisplayHeight = keyboardValue?.cgRectValue.size.height ?? 0
  44 + }
  45 + @objc private func keyboardDidHideNotification(notification : Notification) {
  46 + CNLiveConfigManager.shared.keyboardDisplayHeight = 0
  47 + }
  48 +
  49 +
  50 +
  51 +}
... ...
metaCode/Classes/Extensions/CNLiveTips.swift 0 → 100644
  1 +//
  2 +// CNLiveTips.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/5.
  6 +//
  7 +
  8 +import Foundation
  9 +import UIKit
  10 +import YYCategories
  11 +import MBProgressHUD
  12 +
  13 +class tip {
  14 +
  15 + static func showMessage(message : String) {
  16 +
  17 + if !message.isNotBlank() {
  18 + return
  19 + }
  20 +
  21 + let delegate = UIApplication.shared.delegate as! AppDelegate
  22 +
  23 + let bgView = UIView.init()
  24 + bgView.backgroundColor = UIColor(white: 0.1, alpha: 0.7)
  25 + bgView.layer.cornerRadius = 8.0
  26 + bgView.clipsToBounds = true
  27 + delegate.window?.addSubview(bgView)
  28 +
  29 + let remindLab = UILabel.init()
  30 + remindLab.textColor = .white
  31 + remindLab.font = Font_15_Fit
  32 + remindLab.textAlignment = .center
  33 + remindLab.numberOfLines = 1
  34 + remindLab.backgroundColor = .clear
  35 + remindLab.text = message
  36 + bgView.addSubview(remindLab)
  37 +
  38 + var width = message.boundingRect(with: CGSize(width: CGFloat(MAXFLOAT), height: delegate.window?.bounds.size.height ?? 0), options:.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font:Font_15_Fit], context: nil).size.width
  39 + if width > (delegate.window?.bounds.size.width ?? 0)/4.0 * 3.0 {
  40 + width = (delegate.window?.bounds.size.width ?? 0)/4.0 * 3.0
  41 + }
  42 +
  43 + let height = message.boundingRect(with: CGSize(width: width, height: CGFloat(MAXFLOAT)), options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font:Font_15_Fit], context: nil).size.height
  44 +
  45 + bgView.bounds = CGRect(x: 0, y: 0, width: width + 20, height: height + 20)
  46 + bgView.layer.position = CGPoint(x: (delegate.window?.bounds.size.width ?? 0) / 2.0, y: ( (delegate.window?.bounds.size.height ?? 0) - CNLiveConfigManager.shared.keyboardDisplayHeight) / 2.0)
  47 +
  48 + remindLab.bounds = CGRect(x: 0, y: 0, width: width, height: height)
  49 + remindLab.layer.position = CGPoint(x: bgView.bounds.size.width / 2, y: bgView.bounds.size.height / 2)
  50 +
  51 + UIView.animate(withDuration: 1, delay: 1, options: .curveEaseOut) {
  52 + bgView.alpha = 0
  53 + } completion: { finish in
  54 + bgView.removeFromSuperview()
  55 + }
  56 + }
  57 +
  58 + static func showLoading(message: String) {
  59 +
  60 + let delegate = UIApplication.shared.delegate as! AppDelegate
  61 +
  62 + delegate.window?.subviews.forEach({ view in
  63 + if view.isKind(of: MBProgressHUD.layerClass) {
  64 + let hub = view as! MBProgressHUD
  65 + hub.removeFromSuperview()
  66 + }
  67 + })
  68 +
  69 + let hub = MBProgressHUD.showAdded(to: delegate.window!, animated: true)
  70 + hub.mode = .indeterminate
  71 + hub.animationType = .fade
  72 + hub.contentColor = .white
  73 + hub.bezelView.backgroundColor = .black
  74 + hub.label.textColor = .white
  75 + if message.isNotBlank() {
  76 + hub.label.text = message
  77 + }
  78 + }
  79 +
  80 + static func hiddenLoading() {
  81 + let delegate = UIApplication.shared.delegate as! AppDelegate
  82 + MBProgressHUD.hide(for: delegate.window!, animated: true)
  83 + }
  84 +
  85 +}
  86 +
... ...
metaCode/Classes/Extensions/UIView+CNGradient.swift 0 → 100644
  1 +//
  2 +// UIView+CNGradient.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/5.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +
  11 +extension UIView {
  12 +
  13 + private struct gradientLayerStr {
  14 + static var gradient:String! = "kGradientLayer"
  15 + }
  16 +
  17 + @discardableResult
  18 + func setGradient(colors: [UIColor], startPoint: CGPoint, endPoint: CGPoint) -> CAGradientLayer {
  19 + func setGradient(_ layer: CAGradientLayer) {
  20 + self.layoutIfNeeded()
  21 + var colorArr = [CGColor]()
  22 + for color in colors {
  23 + colorArr.append(color.cgColor)
  24 + }
  25 + CATransaction.begin()
  26 + CATransaction.setDisableActions(true)
  27 + layer.frame = self.bounds
  28 + CATransaction.commit()
  29 +
  30 + layer.colors = colorArr
  31 + layer.startPoint = startPoint
  32 + layer.endPoint = endPoint
  33 + }
  34 +
  35 + if let gradientLayer = objc_getAssociatedObject(self, &gradientLayerStr.gradient) as? CAGradientLayer {
  36 + setGradient(gradientLayer)
  37 + return gradientLayer
  38 + } else {
  39 + let gradientLayer = CAGradientLayer()
  40 + self.layer.insertSublayer(gradientLayer, at: 0)
  41 + setGradient(gradientLayer)
  42 + objc_setAssociatedObject(self, &gradientLayerStr.gradient, gradientLayer, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  43 + return gradientLayer
  44 + }
  45 + }
  46 +}
... ...
metaCode/Classes/Main/LoginPage/Controller/CNLiveLoginViewController.swift
... ... @@ -20,9 +20,25 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
20 20 return headerView
21 21 }()
22 22  
  23 + lazy var areaButton : UIButton = {
  24 + let areaButton = UIButton(type: .custom)
  25 + areaButton.backgroundColor = .white
  26 + areaButton.setTitle("+86", for: .normal)
  27 + areaButton.setTitle("+86", for: .highlighted)
  28 + areaButton.titleLabel?.font = BoldFont_16_Fit
  29 + areaButton.setTitleColor(HexColor("#333333"), for: .normal)
  30 + areaButton.setTitleColor(HexColor("#333333"), for: .highlighted)
  31 + areaButton.addTarget(self, action: #selector(changeCityNumberMothod), for: .touchUpInside)
  32 + return areaButton
  33 + }()
  34 +
  35 +
  36 +
23 37 var phoneText = UITextField()//手机号
24 38 var veriText = UITextField()//验证码
25 39  
  40 + var timeOut = 30//多少秒计时器
  41 +
26 42 override func viewDidLoad() {
27 43 super.viewDidLoad()
28 44  
... ... @@ -55,14 +71,6 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
55 71 make.height.equalTo(50)
56 72 }
57 73  
58   - let areaButton = UIButton(type: .custom)
59   - areaButton.backgroundColor = .white
60   - areaButton.setTitle("+86", for: .normal)
61   - areaButton.setTitle("+86", for: .highlighted)
62   - areaButton.titleLabel?.font = BoldFont_16_Fit
63   - areaButton.setTitleColor(HexColor("#333333"), for: .normal)
64   - areaButton.setTitleColor(HexColor("#333333"), for: .highlighted)
65   - areaButton.addTarget(self, action: #selector(changeCityNumberMothod), for: .touchUpInside)
66 74 phoneV.addSubview(areaButton)
67 75 areaButton.snp.makeConstraints { make in
68 76 make.centerY.equalTo(phoneV)
... ... @@ -133,12 +141,12 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
133 141 codeButton.titleLabel?.font = Font_16_Fit
134 142 codeButton.setTitleColor(HexColor("#0066FE"), for: .normal)
135 143 codeButton.setTitleColor(HexColor("#0066FE"), for: .highlighted)
136   - codeButton.addTarget(self, action: #selector(changeCityNumberMothod), for: .touchUpInside)
  144 + codeButton.addTarget(self, action: #selector(sendVerifiCodeMothod), for: .touchUpInside)
137 145 verView.addSubview(codeButton)
138 146 codeButton.snp.makeConstraints { make in
139 147 make.centerY.equalTo(verView)
140 148 make.right.equalTo(verView.snp.right).offset(-40)
141   - make.width.lessThanOrEqualTo(90)
  149 + make.width.lessThanOrEqualTo(100)
142 150 }
143 151  
144 152 self.veriText = UITextField.init()
... ... @@ -180,8 +188,8 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
180 188 view.addSubview(selectButton)
181 189 selectButton.snp.makeConstraints { make in
182 190 make.bottom.equalTo(view.snp.bottom).offset(-50)
183   - make.left.equalTo(view.snp.left).offset(30)
184   - make.height.equalTo(15)
  191 + make.left.equalTo(view.snp.left).offset(25)
  192 + make.size.equalTo(15)
185 193 }
186 194  
187 195 let attributedString = NSMutableAttributedString(string: "我已阅读并同意《APP用户服务协议》《个人信息保护政策》",
... ... @@ -200,11 +208,24 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
200 208 textView.snp.makeConstraints { make in
201 209 make.centerY.equalTo(selectButton)
202 210 make.left.equalTo(selectButton.snp.right)
203   - make.right.equalTo(view.snp.right).offset(-30)
  211 + make.right.equalTo(view.snp.right).offset(-25)
204 212 }
205 213  
206 214 let loginButton = UIButton(type: .custom)
207   -// loginButton.
  215 + loginButton.setTitle("登 陆", for: .normal)
  216 + loginButton.setTitleColor(.white, for: .normal)
  217 + loginButton.titleLabel?.font = BoldFont_16_Fit
  218 + loginButton.layer.cornerRadius = 20
  219 + loginButton.layer.masksToBounds = true
  220 + view.addSubview(loginButton)
  221 + loginButton.snp.makeConstraints { make in
  222 + make.centerX.equalTo(view)
  223 + make.bottom.equalTo(textView.snp.top).offset(-10)
  224 + make.left.equalTo(40)
  225 + make.right.equalTo(-40)
  226 + make.height.equalTo(40)
  227 + }
  228 + loginButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: 1),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: 1)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))
208 229  
209 230  
210 231 }
... ... @@ -213,15 +234,52 @@ class CNLiveLoginViewController : CNLiveBaseViewController, UITextViewDelegate {
213 234 extension CNLiveLoginViewController {
214 235  
215 236 @objc func changeCityNumberMothod(sender : UIButton) {
216   -
  237 + CNLiveLoginPickerView.showSelectView { [self] text in
  238 + areaButton.setTitle("+\(text)", for: .normal)
  239 + areaButton.setTitle("+\(text)", for: .highlighted)
  240 + }
217 241 }
218 242  
219 243 @objc func sendVerifiCodeMothod(sender : UIButton) {
220   -
  244 + var timeOut = self.timeOut
  245 + let queue: DispatchQueue = DispatchQueue.global(qos: DispatchQoS.QoSClass.default)
  246 + let _timer: DispatchSource = DispatchSource.makeTimerSource(flags: [], queue: queue) as! DispatchSource
  247 + _timer.schedule(wallDeadline: DispatchWallTime.now(), repeating: .seconds(1))
  248 + //一秒执行
  249 + _timer.setEventHandler(handler: { () -> Void in
  250 + if timeOut <= 0 {
  251 + _timer.cancel()
  252 + DispatchQueue.main.sync(execute: { () -> Void in
  253 + sender.setTitle("获取验证码", for: .normal)
  254 + sender.isEnabled = true
  255 + })
  256 + } else {
  257 + let seconds = timeOut
  258 + DispatchQueue.main.sync(execute: {() -> Void in
  259 + let str = String(describing: seconds)
  260 + sender.setTitle("\(str)s重新获取", for: .normal)
  261 + sender.isEnabled = false
  262 + })
  263 + timeOut -= 1
  264 + }
  265 + })
  266 + _timer.resume()
221 267 }
222 268  
223 269 @objc func changeSelectBtnMothod(sender : UIButton) {
224   -// sender.isSelected =
  270 + sender.isSelected = !sender.isSelected
  271 + }
  272 +
  273 + @objc func sendLoginActionMothod(sender : UIButton) {
  274 +
  275 + }
  276 +
  277 + @objc func pushAgreeActionMothod() {
  278 +
  279 + }
  280 +
  281 + @objc func pushInfoActionMothod() {
  282 +
225 283 }
226 284 }
227 285  
... ... @@ -231,10 +289,10 @@ extension CNLiveLoginViewController {
231 289 }
232 290 func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
233 291 if URL.absoluteString == "delegate://" {
234   - print("《APP用户服务协议》")
  292 + pushAgreeActionMothod()
235 293 return false
236   - }else{
237   - print("《个人信息保护政策》")
  294 + }else {
  295 + pushInfoActionMothod()
238 296 return false
239 297 }
240 298 }
... ...
metaCode/Classes/Main/LoginPage/View/CNLiveLoginPickerView.swift 0 → 100644
  1 +//
  2 +// CNLiveLoginPickerView.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/5.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +typealias CloseClickResultBlock = (_ text: String) ->Void
  11 +
  12 +class CNLiveLoginPickerView : UIView, UIPickerViewDelegate,UIPickerViewDataSource {
  13 +
  14 + lazy var tapGesture = UITapGestureRecognizer()
  15 + lazy var grayMaskView: UIView = {
  16 + let grayMaskView = UIView()
  17 + tapGesture.addTarget(self, action: #selector(setupCloseButtonAction))
  18 + grayMaskView.backgroundColor = UIColor.black.withAlphaComponent(0.2)
  19 + grayMaskView.addGestureRecognizer(tapGesture)
  20 + return grayMaskView
  21 + }()
  22 +
  23 + lazy var backView: UIView = {
  24 + let backView = UIView()
  25 + backView.backgroundColor = UIColor.white
  26 + backView.layer.cornerRadius = 12
  27 + return backView
  28 + }()
  29 +
  30 + lazy var pickerView : UIPickerView = {
  31 + let pickerView = UIPickerView.init()
  32 + pickerView.backgroundColor = .white
  33 + pickerView.showsSelectionIndicator = true
  34 + pickerView.delegate = self
  35 + pickerView.dataSource = self
  36 + return pickerView
  37 + }()
  38 +
  39 + lazy var lineLable : UILabel = {
  40 + let lineLable = UILabel.init()
  41 + lineLable.backgroundColor = HexColor("#E6E6E6")
  42 + return lineLable
  43 + }()
  44 +
  45 + lazy var doneButton : UIButton = {
  46 + let doneButton = UIButton(type: .custom)
  47 + doneButton.setTitle("确定", for: .normal)
  48 + doneButton.setTitleColor(HexColor("#0066FE"), for: .normal)
  49 + doneButton.titleLabel?.font = Font_16
  50 + doneButton.addTarget(self, action: #selector(setupDoneButtonAction), for: .touchUpInside)
  51 + return doneButton
  52 + }()
  53 +
  54 + lazy var closeButton : UIButton = {
  55 + let closeButton = UIButton(type: .custom)
  56 + closeButton.setImage(UIImage(named: "login_alert_country_close"), for: .normal)
  57 + closeButton.backgroundColor = .clear
  58 + closeButton.addTarget(self, action: #selector(setupCloseButtonAction), for: .touchUpInside)
  59 + return closeButton
  60 + }()
  61 +
  62 + lazy var country_array : NSArray = {
  63 + let array = NSArray(contentsOfFile: Bundle.main.path(forResource: "countries", ofType: "plist") ?? "")!
  64 + return array
  65 + }()
  66 +
  67 + var resutBlock : CloseClickResultBlock?
  68 + var result_string : String = ""
  69 +
  70 + override init(frame: CGRect) {
  71 + super.init(frame: frame)
  72 +
  73 + addSubview(grayMaskView)
  74 + addSubview(backView)
  75 + backView.addSubview(lineLable)
  76 + backView.addSubview(pickerView)
  77 + backView.addSubview(closeButton)
  78 + backView.addSubview(doneButton)
  79 +
  80 + setConstraints()
  81 + }
  82 +
  83 + func setConstraints() {
  84 + grayMaskView.snp.makeConstraints { make in
  85 + make.edges.equalToSuperview()
  86 + }
  87 + backView.snp.makeConstraints { make in
  88 + make.top.equalTo(self.snp.bottom).offset(0)
  89 + make.left.right.equalToSuperview()
  90 + }
  91 + var safeBottomHeight: CGFloat = 0
  92 + if #available(iOS 11.0, *) {
  93 + safeBottomHeight = UIApplication.shared.windows.last?.safeAreaInsets.bottom ?? 0
  94 + } else {
  95 + // Fallback on earlier versions
  96 + }
  97 + pickerView.snp.makeConstraints { make in
  98 + make.bottom.equalTo(-safeBottomHeight-20)
  99 + make.left.right.equalToSuperview()
  100 + make.top.equalTo(50)
  101 + }
  102 + doneButton.snp.makeConstraints { make in
  103 + make.right.equalToSuperview()
  104 + make.top.equalTo(10)
  105 + make.height.equalTo(30)
  106 + make.width.equalTo(60)
  107 + }
  108 + closeButton.snp.makeConstraints { make in
  109 + make.centerY.equalTo(doneButton)
  110 + make.left.equalTo(8)
  111 + make.size.equalTo(30)
  112 + }
  113 + lineLable.snp.makeConstraints { make in
  114 + make.left.right.equalToSuperview()
  115 + make.height.equalTo(1)
  116 + make.top.equalTo(pickerView.snp.top).offset(-1)
  117 + }
  118 + }
  119 +
  120 +
  121 +
  122 + static public func showSelectView(resultBlock: @escaping CloseClickResultBlock){
  123 + let pickerView = CNLiveLoginPickerView()
  124 + pickerView.resutBlock = resultBlock
  125 +
  126 + let window = UIApplication.shared.windows.last
  127 + window?.addSubview(pickerView)
  128 + pickerView.snp.makeConstraints { make in
  129 + make.edges.equalToSuperview()
  130 + }
  131 + window?.layoutIfNeeded()
  132 + pickerView.alpha = 0
  133 + UIView.animate(withDuration: 0.1) {
  134 + pickerView.alpha = 1
  135 + } completion: { _ in
  136 + UIView.animate(withDuration: 0.1) {
  137 + pickerView.backView.snp.updateConstraints { make in
  138 + make.top.equalTo(pickerView.snp.bottom).offset(-pickerView.backView.frame.height)
  139 + }
  140 + pickerView.layoutIfNeeded()
  141 + }
  142 + }
  143 + }
  144 +
  145 + required init?(coder: NSCoder) {
  146 + fatalError("init(coder:) has not been implemented")
  147 + }
  148 +
  149 + deinit {
  150 +
  151 + }
  152 +}
  153 +
  154 +extension CNLiveLoginPickerView {
  155 +
  156 + func numberOfComponents(in pickerView: UIPickerView) -> Int {
  157 + return 1
  158 + }
  159 +
  160 +
  161 + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
  162 + return country_array.count
  163 + }
  164 +
  165 + func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
  166 + let param = country_array[row] as! NSMutableDictionary
  167 + return param["name"] as? String
  168 + }
  169 +
  170 + func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
  171 + let param = country_array[row] as! NSMutableDictionary
  172 + result_string = param["code"] as! String
  173 + }
  174 +}
  175 +
  176 +extension CNLiveLoginPickerView {
  177 +
  178 + @objc func setupDoneButtonAction(){
  179 + if let resutBlock = resutBlock {
  180 + resutBlock(result_string)
  181 + }
  182 + disMissView()
  183 + }
  184 + @objc func setupCloseButtonAction() -> Void{
  185 + disMissView()
  186 + }
  187 + func disMissView() {
  188 + resutBlock = nil
  189 + removeFromSuperview()
  190 + }
  191 +
  192 +}
  193 +
  194 +
  195 +
  196 +
... ...
metaCode/Classes/Main/LoginPage/ViewModel/CNLiveLoginViewModel.swift 0 → 100644
  1 +//
  2 +// CNLiveLoginViewModel.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2023/6/5.
  6 +//
  7 +
  8 +import Foundation
  9 +import CNLiveRequestBastKit
  10 +
  11 +class CNLiveLoginViewModel : NSObject {
  12 +
  13 + static func requestVerCodeAction(phone: String) {
  14 +
  15 +
  16 +
  17 +// CNLiveNetworking.requestNetwork(with: .POST, urlString: "/user/sendVerifyCode", param: <#T##[AnyHashable : Any]!#>, cacheType: <#T##CNLiveNetworkCacheType#>, completionBlock: <#T##CNLiveNetworkCompletionBlock!##CNLiveNetworkCompletionBlock!##(URLSessionTask?, Any?, Error?) -> Void#>)
  18 + }
  19 +}
... ...
metaCode/Classes/Main/Mine/Controller/CNMineViewController.swift renamed to metaCode/Classes/Main/MinePage/Controller/CNMineViewController.swift
metaCode/Classes/Other/AppDelegate.swift
... ... @@ -19,7 +19,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
19 19 // Override point for customization after application launch.
20 20 window = UIWindow.init(frame: UIScreen.main.bounds)
21 21 window?.backgroundColor = KVCBackgroupColor
22   - window?.rootViewController = CNLiveBaseTabBarViewController.init()
  22 + window?.rootViewController = CNLiveLoginViewController.init()
23 23 window?.makeKeyAndVisible()
24 24  
25 25  
... ... @@ -52,6 +52,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
52 52 CNLiveNetworking.setupSignKey("ae3a7ad3e4b9beb7cfe2078db648ebb89aa249ca2e82ac")
53 53 CNLiveNetworking.setAllowRequestDefaultArgument(true)
54 54 CNLiveNetworking.setResponseSerializerType(.JSON)
  55 + CNLiveNetworking.setupBaseURL("https://api.cnlive.com/open/api2")
55 56 }
56 57  
57 58  
... ...
metaCode/Classes/Resources/countries.plist 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<array>
  5 + <dict>
  6 + <key>name</key>
  7 + <string>阿尔巴尼亚</string>
  8 + <key>code</key>
  9 + <string>355</string>
  10 + </dict>
  11 + <dict>
  12 + <key>name</key>
  13 + <string>阿尔及利亚</string>
  14 + <key>code</key>
  15 + <string>213</string>
  16 + </dict>
  17 + <dict>
  18 + <key>name</key>
  19 + <string>阿富汗</string>
  20 + <key>code</key>
  21 + <string>93</string>
  22 + </dict>
  23 + <dict>
  24 + <key>name</key>
  25 + <string>阿根廷</string>
  26 + <key>code</key>
  27 + <string>54</string>
  28 + </dict>
  29 + <dict>
  30 + <key>name</key>
  31 + <string>阿拉伯联合酋长国</string>
  32 + <key>code</key>
  33 + <string>971</string>
  34 + </dict>
  35 + <dict>
  36 + <key>name</key>
  37 + <string>阿鲁巴</string>
  38 + <key>code</key>
  39 + <string>297</string>
  40 + </dict>
  41 + <dict>
  42 + <key>name</key>
  43 + <string>阿曼</string>
  44 + <key>code</key>
  45 + <string>968</string>
  46 + </dict>
  47 + <dict>
  48 + <key>name</key>
  49 + <string>阿塞拜疆</string>
  50 + <key>code</key>
  51 + <string>994</string>
  52 + </dict>
  53 + <dict>
  54 + <key>name</key>
  55 + <string>埃及</string>
  56 + <key>code</key>
  57 + <string>20</string>
  58 + </dict>
  59 + <dict>
  60 + <key>name</key>
  61 + <string>埃塞俄比亚</string>
  62 + <key>code</key>
  63 + <string>251</string>
  64 + </dict>
  65 + <dict>
  66 + <key>name</key>
  67 + <string>爱尔兰</string>
  68 + <key>code</key>
  69 + <string>353</string>
  70 + </dict>
  71 + <dict>
  72 + <key>name</key>
  73 + <string>爱沙尼亚</string>
  74 + <key>code</key>
  75 + <string>372</string>
  76 + </dict>
  77 + <dict>
  78 + <key>name</key>
  79 + <string>安道尔</string>
  80 + <key>code</key>
  81 + <string>376</string>
  82 + </dict>
  83 + <dict>
  84 + <key>name</key>
  85 + <string>安哥拉</string>
  86 + <key>code</key>
  87 + <string>244</string>
  88 + </dict>
  89 + <dict>
  90 + <key>name</key>
  91 + <string>安圭拉</string>
  92 + <key>code</key>
  93 + <string>1264</string>
  94 + </dict>
  95 + <dict>
  96 + <key>name</key>
  97 + <string>安提瓜和巴布达</string>
  98 + <key>code</key>
  99 + <string>1268</string>
  100 + </dict>
  101 + <dict>
  102 + <key>name</key>
  103 + <string>奥地利</string>
  104 + <key>code</key>
  105 + <string>43</string>
  106 + </dict>
  107 + <dict>
  108 + <key>name</key>
  109 + <string>澳大利亚</string>
  110 + <key>code</key>
  111 + <string>61</string>
  112 + </dict>
  113 + <dict>
  114 + <key>name</key>
  115 + <string>巴巴多斯</string>
  116 + <key>code</key>
  117 + <string>1246</string>
  118 + </dict>
  119 + <dict>
  120 + <key>name</key>
  121 + <string>巴布亚新几内亚</string>
  122 + <key>code</key>
  123 + <string>675</string>
  124 + </dict>
  125 + <dict>
  126 + <key>name</key>
  127 + <string>巴哈马</string>
  128 + <key>code</key>
  129 + <string>1242</string>
  130 + </dict>
  131 + <dict>
  132 + <key>name</key>
  133 + <string>巴基斯坦</string>
  134 + <key>code</key>
  135 + <string>92</string>
  136 + </dict>
  137 + <dict>
  138 + <key>name</key>
  139 + <string>巴拉圭</string>
  140 + <key>code</key>
  141 + <string>595</string>
  142 + </dict>
  143 + <dict>
  144 + <key>name</key>
  145 + <string>巴林</string>
  146 + <key>code</key>
  147 + <string>973</string>
  148 + </dict>
  149 + <dict>
  150 + <key>name</key>
  151 + <string>巴拿马</string>
  152 + <key>code</key>
  153 + <string>507</string>
  154 + </dict>
  155 + <dict>
  156 + <key>name</key>
  157 + <string>巴西</string>
  158 + <key>code</key>
  159 + <string>55</string>
  160 + </dict>
  161 + <dict>
  162 + <key>name</key>
  163 + <string>白俄罗斯</string>
  164 + <key>code</key>
  165 + <string>375</string>
  166 + </dict>
  167 + <dict>
  168 + <key>name</key>
  169 + <string>百慕大群岛</string>
  170 + <key>code</key>
  171 + <string>1441</string>
  172 + </dict>
  173 + <dict>
  174 + <key>name</key>
  175 + <string>保加利亚</string>
  176 + <key>code</key>
  177 + <string>359</string>
  178 + </dict>
  179 + <dict>
  180 + <key>name</key>
  181 + <string>贝宁</string>
  182 + <key>code</key>
  183 + <string>229</string>
  184 + </dict>
  185 + <dict>
  186 + <key>name</key>
  187 + <string>比利时</string>
  188 + <key>code</key>
  189 + <string>32</string>
  190 + </dict>
  191 + <dict>
  192 + <key>name</key>
  193 + <string>冰岛</string>
  194 + <key>code</key>
  195 + <string>354</string>
  196 + </dict>
  197 + <dict>
  198 + <key>name</key>
  199 + <string>波多黎各</string>
  200 + <key>code</key>
  201 + <string>1787</string>
  202 + </dict>
  203 + <dict>
  204 + <key>name</key>
  205 + <string>波兰</string>
  206 + <key>code</key>
  207 + <string>48</string>
  208 + </dict>
  209 + <dict>
  210 + <key>name</key>
  211 + <string>波斯尼亚和黑塞哥维那</string>
  212 + <key>code</key>
  213 + <string>387</string>
  214 + </dict>
  215 + <dict>
  216 + <key>name</key>
  217 + <string>玻利维亚</string>
  218 + <key>code</key>
  219 + <string>591</string>
  220 + </dict>
  221 + <dict>
  222 + <key>name</key>
  223 + <string>伯利兹</string>
  224 + <key>code</key>
  225 + <string>501</string>
  226 + </dict>
  227 + <dict>
  228 + <key>name</key>
  229 + <string>博茨瓦纳</string>
  230 + <key>code</key>
  231 + <string>267</string>
  232 + </dict>
  233 + <dict>
  234 + <key>name</key>
  235 + <string>不丹</string>
  236 + <key>code</key>
  237 + <string>975</string>
  238 + </dict>
  239 + <dict>
  240 + <key>name</key>
  241 + <string>布基纳法索</string>
  242 + <key>code</key>
  243 + <string>226</string>
  244 + </dict>
  245 + <dict>
  246 + <key>name</key>
  247 + <string>布隆迪</string>
  248 + <key>code</key>
  249 + <string>257</string>
  250 + </dict>
  251 + <dict>
  252 + <key>name</key>
  253 + <string>朝鲜</string>
  254 + <key>code</key>
  255 + <string>850</string>
  256 + </dict>
  257 + <dict>
  258 + <key>name</key>
  259 + <string>赤道几内亚</string>
  260 + <key>code</key>
  261 + <string>240</string>
  262 + </dict>
  263 + <dict>
  264 + <key>name</key>
  265 + <string>丹麦</string>
  266 + <key>code</key>
  267 + <string>45</string>
  268 + </dict>
  269 + <dict>
  270 + <key>name</key>
  271 + <string>德国</string>
  272 + <key>code</key>
  273 + <string>49</string>
  274 + </dict>
  275 + <dict>
  276 + <key>name</key>
  277 + <string>东帝汶</string>
  278 + <key>code</key>
  279 + <string>670</string>
  280 + </dict>
  281 + <dict>
  282 + <key>name</key>
  283 + <string>多哥</string>
  284 + <key>code</key>
  285 + <string>228</string>
  286 + </dict>
  287 + <dict>
  288 + <key>name</key>
  289 + <string>多米尼加</string>
  290 + <key>code</key>
  291 + <string>1767</string>
  292 + </dict>
  293 + <dict>
  294 + <key>name</key>
  295 + <string>多米尼加共和国</string>
  296 + <key>code</key>
  297 + <string>1809</string>
  298 + </dict>
  299 + <dict>
  300 + <key>name</key>
  301 + <string>俄罗斯</string>
  302 + <key>code</key>
  303 + <string>355</string>
  304 + </dict>
  305 + <dict>
  306 + <key>name</key>
  307 + <string>厄瓜多尔</string>
  308 + <key>code</key>
  309 + <string>593</string>
  310 + </dict>
  311 + <dict>
  312 + <key>name</key>
  313 + <string>厄立特里亚</string>
  314 + <key>code</key>
  315 + <string>291</string>
  316 + </dict>
  317 + <dict>
  318 + <key>name</key>
  319 + <string>法国</string>
  320 + <key>code</key>
  321 + <string>33</string>
  322 + </dict>
  323 + <dict>
  324 + <key>name</key>
  325 + <string>法罗群岛</string>
  326 + <key>code</key>
  327 + <string>298</string>
  328 + </dict>
  329 + <dict>
  330 + <key>name</key>
  331 + <string>法属波利尼西亚</string>
  332 + <key>code</key>
  333 + <string>689</string>
  334 + </dict>
  335 + <dict>
  336 + <key>name</key>
  337 + <string>法属圭亚那</string>
  338 + <key>code</key>
  339 + <string>594</string>
  340 + </dict>
  341 + <dict>
  342 + <key>name</key>
  343 + <string>菲律宾</string>
  344 + <key>code</key>
  345 + <string>63</string>
  346 + </dict>
  347 + <dict>
  348 + <key>name</key>
  349 + <string>斐济</string>
  350 + <key>code</key>
  351 + <string>679</string>
  352 + </dict>
  353 + <dict>
  354 + <key>name</key>
  355 + <string>芬兰</string>
  356 + <key>code</key>
  357 + <string>358</string>
  358 + </dict>
  359 + <dict>
  360 + <key>name</key>
  361 + <string>冈比亚</string>
  362 + <key>code</key>
  363 + <string>220</string>
  364 + </dict>
  365 + <dict>
  366 + <key>name</key>
  367 + <string>刚果共和国</string>
  368 + <key>code</key>
  369 + <string>242</string>
  370 + </dict>
  371 + <dict>
  372 + <key>name</key>
  373 + <string>刚果民主共和国</string>
  374 + <key>code</key>
  375 + <string>243</string>
  376 + </dict>
  377 + <dict>
  378 + <key>name</key>
  379 + <string>哥伦比亚</string>
  380 + <key>code</key>
  381 + <string>57</string>
  382 + </dict>
  383 + <dict>
  384 + <key>name</key>
  385 + <string>哥斯达黎加</string>
  386 + <key>code</key>
  387 + <string>506</string>
  388 + </dict>
  389 + <dict>
  390 + <key>name</key>
  391 + <string>格林纳达</string>
  392 + <key>code</key>
  393 + <string>1473</string>
  394 + </dict>
  395 + <dict>
  396 + <key>name</key>
  397 + <string>格陵兰岛</string>
  398 + <key>code</key>
  399 + <string>299</string>
  400 + </dict>
  401 + <dict>
  402 + <key>name</key>
  403 + <string>格鲁吉亚</string>
  404 + <key>code</key>
  405 + <string>995</string>
  406 + </dict>
  407 + <dict>
  408 + <key>name</key>
  409 + <string>古巴</string>
  410 + <key>code</key>
  411 + <string>53</string>
  412 + </dict>
  413 + <dict>
  414 + <key>name</key>
  415 + <string>瓜德罗普岛</string>
  416 + <key>code</key>
  417 + <string>590</string>
  418 + </dict>
  419 + <dict>
  420 + <key>name</key>
  421 + <string>瓜地马拉</string>
  422 + <key>code</key>
  423 + <string>502</string>
  424 + </dict>
  425 + <dict>
  426 + <key>name</key>
  427 + <string>关岛</string>
  428 + <key>code</key>
  429 + <string>1671</string>
  430 + </dict>
  431 + <dict>
  432 + <key>name</key>
  433 + <string>圭亚那</string>
  434 + <key>code</key>
  435 + <string>592</string>
  436 + </dict>
  437 + <dict>
  438 + <key>name</key>
  439 + <string>哈萨克斯坦</string>
  440 + <key>code</key>
  441 + <string>7</string>
  442 + </dict>
  443 + <dict>
  444 + <key>name</key>
  445 + <string>海地</string>
  446 + <key>code</key>
  447 + <string>509</string>
  448 + </dict>
  449 + <dict>
  450 + <key>name</key>
  451 + <string>韩国</string>
  452 + <key>code</key>
  453 + <string>82</string>
  454 + </dict>
  455 + <dict>
  456 + <key>name</key>
  457 + <string>荷兰</string>
  458 + <key>code</key>
  459 + <string>31</string>
  460 + </dict>
  461 + <dict>
  462 + <key>name</key>
  463 + <string>荷兰加勒比</string>
  464 + <key>code</key>
  465 + <string>599</string>
  466 + </dict>
  467 + <dict>
  468 + <key>name</key>
  469 + <string>黑山</string>
  470 + <key>code</key>
  471 + <string>382</string>
  472 + </dict>
  473 + <dict>
  474 + <key>name</key>
  475 + <string>洪都拉斯</string>
  476 + <key>code</key>
  477 + <string>504</string>
  478 + </dict>
  479 + <dict>
  480 + <key>name</key>
  481 + <string>基里巴斯</string>
  482 + <key>code</key>
  483 + <string>686</string>
  484 + </dict>
  485 + <dict>
  486 + <key>name</key>
  487 + <string>吉布提</string>
  488 + <key>code</key>
  489 + <string>253</string>
  490 + </dict>
  491 + <dict>
  492 + <key>name</key>
  493 + <string>吉尔吉斯斯坦</string>
  494 + <key>code</key>
  495 + <string>996</string>
  496 + </dict>
  497 + <dict>
  498 + <key>name</key>
  499 + <string>几内亚</string>
  500 + <key>code</key>
  501 + <string>224</string>
  502 + </dict>
  503 + <dict>
  504 + <key>name</key>
  505 + <string>几内亚比绍共和国</string>
  506 + <key>code</key>
  507 + <string>245</string>
  508 + </dict>
  509 + <dict>
  510 + <key>name</key>
  511 + <string>加拿大</string>
  512 + <key>code</key>
  513 + <string>1</string>
  514 + </dict>
  515 + <dict>
  516 + <key>name</key>
  517 + <string>加纳</string>
  518 + <key>code</key>
  519 + <string>233</string>
  520 + </dict>
  521 + <dict>
  522 + <key>name</key>
  523 + <string>加蓬</string>
  524 + <key>code</key>
  525 + <string>241</string>
  526 + </dict>
  527 + <dict>
  528 + <key>name</key>
  529 + <string>柬埔寨</string>
  530 + <key>code</key>
  531 + <string>855</string>
  532 + </dict>
  533 + <dict>
  534 + <key>name</key>
  535 + <string>捷克</string>
  536 + <key>code</key>
  537 + <string>420</string>
  538 + </dict>
  539 + <dict>
  540 + <key>name</key>
  541 + <string>津巴布韦</string>
  542 + <key>code</key>
  543 + <string>263</string>
  544 + </dict>
  545 + <dict>
  546 + <key>name</key>
  547 + <string>喀麦隆</string>
  548 + <key>code</key>
  549 + <string>237</string>
  550 + </dict>
  551 + <dict>
  552 + <key>name</key>
  553 + <string>卡塔尔</string>
  554 + <key>code</key>
  555 + <string>974</string>
  556 + </dict>
  557 + <dict>
  558 + <key>name</key>
  559 + <string>开曼群岛</string>
  560 + <key>code</key>
  561 + <string>1345</string>
  562 + </dict>
  563 + <dict>
  564 + <key>name</key>
  565 + <string>开普</string>
  566 + <key>code</key>
  567 + <string>238</string>
  568 + </dict>
  569 + <dict>
  570 + <key>name</key>
  571 + <string>科摩罗</string>
  572 + <key>code</key>
  573 + <string>269</string>
  574 + </dict>
  575 + <dict>
  576 + <key>name</key>
  577 + <string>科威特</string>
  578 + <key>code</key>
  579 + <string>965</string>
  580 + </dict>
  581 + <dict>
  582 + <key>name</key>
  583 + <string>克罗地亚</string>
  584 + <key>code</key>
  585 + <string>385</string>
  586 + </dict>
  587 + <dict>
  588 + <key>name</key>
  589 + <string>肯尼亚</string>
  590 + <key>code</key>
  591 + <string>254</string>
  592 + </dict>
  593 + <dict>
  594 + <key>name</key>
  595 + <string>库克群岛</string>
  596 + <key>code</key>
  597 + <string>682</string>
  598 + </dict>
  599 + <dict>
  600 + <key>name</key>
  601 + <string>库拉索</string>
  602 + <key>code</key>
  603 + <string>599</string>
  604 + </dict>
  605 + <dict>
  606 + <key>name</key>
  607 + <string>拉脱维亚</string>
  608 + <key>code</key>
  609 + <string>371</string>
  610 + </dict>
  611 + <dict>
  612 + <key>name</key>
  613 + <string>莱索托</string>
  614 + <key>code</key>
  615 + <string>266</string>
  616 + </dict>
  617 + <dict>
  618 + <key>name</key>
  619 + <string>老挝</string>
  620 + <key>code</key>
  621 + <string>856</string>
  622 + </dict>
  623 + <dict>
  624 + <key>name</key>
  625 + <string>黎巴嫩</string>
  626 + <key>code</key>
  627 + <string>961</string>
  628 + </dict>
  629 + <dict>
  630 + <key>name</key>
  631 + <string>立陶宛</string>
  632 + <key>code</key>
  633 + <string>370</string>
  634 + </dict>
  635 + <dict>
  636 + <key>name</key>
  637 + <string>利比里亚</string>
  638 + <key>code</key>
  639 + <string>231</string>
  640 + </dict>
  641 + <dict>
  642 + <key>name</key>
  643 + <string>利比亚</string>
  644 + <key>code</key>
  645 + <string>218</string>
  646 + </dict>
  647 + <dict>
  648 + <key>name</key>
  649 + <string>列支敦士登</string>
  650 + <key>code</key>
  651 + <string>423</string>
  652 + </dict>
  653 + <dict>
  654 + <key>name</key>
  655 + <string>留尼汪</string>
  656 + <key>code</key>
  657 + <string>262</string>
  658 + </dict>
  659 + <dict>
  660 + <key>name</key>
  661 + <string>卢森堡</string>
  662 + <key>code</key>
  663 + <string>352</string>
  664 + </dict>
  665 + <dict>
  666 + <key>name</key>
  667 + <string>卢旺达</string>
  668 + <key>code</key>
  669 + <string>250</string>
  670 + </dict>
  671 + <dict>
  672 + <key>name</key>
  673 + <string>罗马尼亚</string>
  674 + <key>code</key>
  675 + <string>40</string>
  676 + </dict>
  677 + <dict>
  678 + <key>name</key>
  679 + <string>马达加斯加</string>
  680 + <key>code</key>
  681 + <string>261</string>
  682 + </dict>
  683 + <dict>
  684 + <key>name</key>
  685 + <string>马尔代夫</string>
  686 + <key>code</key>
  687 + <string>960</string>
  688 + </dict>
  689 + <dict>
  690 + <key>name</key>
  691 + <string>马耳他</string>
  692 + <key>code</key>
  693 + <string>356</string>
  694 + </dict>
  695 + <dict>
  696 + <key>name</key>
  697 + <string>马拉维</string>
  698 + <key>code</key>
  699 + <string>265</string>
  700 + </dict>
  701 + <dict>
  702 + <key>name</key>
  703 + <string>马来西亚</string>
  704 + <key>code</key>
  705 + <string>60</string>
  706 + </dict>
  707 + <dict>
  708 + <key>name</key>
  709 + <string>马里</string>
  710 + <key>code</key>
  711 + <string>223</string>
  712 + </dict>
  713 + <dict>
  714 + <key>name</key>
  715 + <string>马其顿</string>
  716 + <key>code</key>
  717 + <string>389</string>
  718 + </dict>
  719 + <dict>
  720 + <key>name</key>
  721 + <string>马绍尔群岛</string>
  722 + <key>code</key>
  723 + <string>692</string>
  724 + </dict>
  725 + <dict>
  726 + <key>name</key>
  727 + <string>马约特</string>
  728 + <key>code</key>
  729 + <string>269</string>
  730 + </dict>
  731 + <dict>
  732 + <key>name</key>
  733 + <string>毛里求斯</string>
  734 + <key>code</key>
  735 + <string>230</string>
  736 + </dict>
  737 + <dict>
  738 + <key>name</key>
  739 + <string>毛里塔尼亚</string>
  740 + <key>code</key>
  741 + <string>222</string>
  742 + </dict>
  743 + <dict>
  744 + <key>name</key>
  745 + <string>美国</string>
  746 + <key>code</key>
  747 + <string>1</string>
  748 + </dict>
  749 + <dict>
  750 + <key>name</key>
  751 + <string>美属萨摩亚</string>
  752 + <key>code</key>
  753 + <string>1684</string>
  754 + </dict>
  755 + <dict>
  756 + <key>name</key>
  757 + <string>蒙古</string>
  758 + <key>code</key>
  759 + <string>976</string>
  760 + </dict>
  761 + <dict>
  762 + <key>name</key>
  763 + <string>蒙特塞拉特岛</string>
  764 + <key>code</key>
  765 + <string>1664</string>
  766 + </dict>
  767 + <dict>
  768 + <key>name</key>
  769 + <string>孟加拉国</string>
  770 + <key>code</key>
  771 + <string>880</string>
  772 + </dict>
  773 + <dict>
  774 + <key>name</key>
  775 + <string>秘鲁</string>
  776 + <key>code</key>
  777 + <string>51</string>
  778 + </dict>
  779 + <dict>
  780 + <key>name</key>
  781 + <string>密克罗尼西亚</string>
  782 + <key>code</key>
  783 + <string>691</string>
  784 + </dict>
  785 + <dict>
  786 + <key>name</key>
  787 + <string>缅甸</string>
  788 + <key>code</key>
  789 + <string>95</string>
  790 + </dict>
  791 + <dict>
  792 + <key>name</key>
  793 + <string>摩尔多瓦</string>
  794 + <key>code</key>
  795 + <string>373</string>
  796 + </dict>
  797 + <dict>
  798 + <key>name</key>
  799 + <string>摩洛哥</string>
  800 + <key>code</key>
  801 + <string>212</string>
  802 + </dict>
  803 + <dict>
  804 + <key>name</key>
  805 + <string>摩纳哥</string>
  806 + <key>code</key>
  807 + <string>377</string>
  808 + </dict>
  809 + <dict>
  810 + <key>name</key>
  811 + <string>莫桑比克</string>
  812 + <key>code</key>
  813 + <string>258</string>
  814 + </dict>
  815 + <dict>
  816 + <key>name</key>
  817 + <string>墨西哥</string>
  818 + <key>code</key>
  819 + <string>52</string>
  820 + </dict>
  821 + <dict>
  822 + <key>name</key>
  823 + <string>拿鲁岛</string>
  824 + <key>code</key>
  825 + <string>674</string>
  826 + </dict>
  827 + <dict>
  828 + <key>name</key>
  829 + <string>纳米比亚</string>
  830 + <key>code</key>
  831 + <string>264</string>
  832 + </dict>
  833 + <dict>
  834 + <key>name</key>
  835 + <string>南非</string>
  836 + <key>code</key>
  837 + <string>27</string>
  838 + </dict>
  839 + <dict>
  840 + <key>name</key>
  841 + <string>尼泊尔</string>
  842 + <key>code</key>
  843 + <string>977</string>
  844 + </dict>
  845 + <dict>
  846 + <key>name</key>
  847 + <string>尼加拉瓜</string>
  848 + <key>code</key>
  849 + <string>505</string>
  850 + </dict>
  851 + <dict>
  852 + <key>name</key>
  853 + <string>尼日尔</string>
  854 + <key>code</key>
  855 + <string>227</string>
  856 + </dict>
  857 + <dict>
  858 + <key>name</key>
  859 + <string>尼日利亚</string>
  860 + <key>code</key>
  861 + <string>234</string>
  862 + </dict>
  863 + <dict>
  864 + <key>name</key>
  865 + <string>挪威</string>
  866 + <key>code</key>
  867 + <string>47</string>
  868 + </dict>
  869 + <dict>
  870 + <key>name</key>
  871 + <string>帕劳</string>
  872 + <key>code</key>
  873 + <string>680</string>
  874 + </dict>
  875 + <dict>
  876 + <key>name</key>
  877 + <string>葡萄牙</string>
  878 + <key>code</key>
  879 + <string>351</string>
  880 + </dict>
  881 + <dict>
  882 + <key>name</key>
  883 + <string>日本</string>
  884 + <key>code</key>
  885 + <string>81</string>
  886 + </dict>
  887 + <dict>
  888 + <key>name</key>
  889 + <string>瑞典</string>
  890 + <key>code</key>
  891 + <string>46</string>
  892 + </dict>
  893 + <dict>
  894 + <key>name</key>
  895 + <string>瑞士</string>
  896 + <key>code</key>
  897 + <string>41</string>
  898 + </dict>
  899 + <dict>
  900 + <key>name</key>
  901 + <string>萨尔瓦多</string>
  902 + <key>code</key>
  903 + <string>503</string>
  904 + </dict>
  905 + <dict>
  906 + <key>name</key>
  907 + <string>萨摩亚</string>
  908 + <key>code</key>
  909 + <string>685</string>
  910 + </dict>
  911 + <dict>
  912 + <key>name</key>
  913 + <string>塞尔维亚</string>
  914 + <key>code</key>
  915 + <string>381</string>
  916 + </dict>
  917 + <dict>
  918 + <key>name</key>
  919 + <string>塞拉利昂</string>
  920 + <key>code</key>
  921 + <string>232</string>
  922 + </dict>
  923 + <dict>
  924 + <key>name</key>
  925 + <string>塞内加尔</string>
  926 + <key>code</key>
  927 + <string>221</string>
  928 + </dict>
  929 + <dict>
  930 + <key>name</key>
  931 + <string>塞浦路斯</string>
  932 + <key>code</key>
  933 + <string>357</string>
  934 + </dict>
  935 + <dict>
  936 + <key>name</key>
  937 + <string>塞舌尔</string>
  938 + <key>code</key>
  939 + <string>248</string>
  940 + </dict>
  941 + <dict>
  942 + <key>name</key>
  943 + <string>沙特阿拉伯</string>
  944 + <key>code</key>
  945 + <string>966</string>
  946 + </dict>
  947 + <dict>
  948 + <key>name</key>
  949 + <string>圣彼埃尔和密克隆岛</string>
  950 + <key>code</key>
  951 + <string>508</string>
  952 + </dict>
  953 + <dict>
  954 + <key>name</key>
  955 + <string>圣多美和普林西比</string>
  956 + <key>code</key>
  957 + <string>239</string>
  958 + </dict>
  959 + <dict>
  960 + <key>name</key>
  961 + <string>圣基茨和尼维斯</string>
  962 + <key>code</key>
  963 + <string>1869</string>
  964 + </dict>
  965 + <dict>
  966 + <key>name</key>
  967 + <string>圣露西亚</string>
  968 + <key>code</key>
  969 + <string>1758</string>
  970 + </dict>
  971 + <dict>
  972 + <key>name</key>
  973 + <string>圣马力诺</string>
  974 + <key>code</key>
  975 + <string>378</string>
  976 + </dict>
  977 + <dict>
  978 + <key>name</key>
  979 + <string>圣文森特和格林纳丁斯</string>
  980 + <key>code</key>
  981 + <string>1784</string>
  982 + </dict>
  983 + <dict>
  984 + <key>name</key>
  985 + <string>斯里兰卡</string>
  986 + <key>code</key>
  987 + <string>94</string>
  988 + </dict>
  989 + <dict>
  990 + <key>name</key>
  991 + <string>斯洛伐克</string>
  992 + <key>code</key>
  993 + <string>421</string>
  994 + </dict>
  995 + <dict>
  996 + <key>name</key>
  997 + <string>斯洛文尼亚</string>
  998 + <key>code</key>
  999 + <string>386</string>
  1000 + </dict>
  1001 + <dict>
  1002 + <key>name</key>
  1003 + <string>斯威士兰</string>
  1004 + <key>code</key>
  1005 + <string>268</string>
  1006 + </dict>
  1007 + <dict>
  1008 + <key>name</key>
  1009 + <string>苏丹</string>
  1010 + <key>code</key>
  1011 + <string>249</string>
  1012 + </dict>
  1013 + <dict>
  1014 + <key>name</key>
  1015 + <string>苏里南</string>
  1016 + <key>code</key>
  1017 + <string>597</string>
  1018 + </dict>
  1019 + <dict>
  1020 + <key>name</key>
  1021 + <string>所罗门群岛</string>
  1022 + <key>code</key>
  1023 + <string>677</string>
  1024 + </dict>
  1025 + <dict>
  1026 + <key>name</key>
  1027 + <string>索马里</string>
  1028 + <key>code</key>
  1029 + <string>252</string>
  1030 + </dict>
  1031 + <dict>
  1032 + <key>name</key>
  1033 + <string>塔吉克斯坦</string>
  1034 + <key>code</key>
  1035 + <string>992</string>
  1036 + </dict>
  1037 + <dict>
  1038 + <key>name</key>
  1039 + <string>泰国</string>
  1040 + <key>code</key>
  1041 + <string>66</string>
  1042 + </dict>
  1043 + <dict>
  1044 + <key>name</key>
  1045 + <string>坦桑尼亚</string>
  1046 + <key>code</key>
  1047 + <string>255</string>
  1048 + </dict>
  1049 + <dict>
  1050 + <key>name</key>
  1051 + <string>汤加</string>
  1052 + <key>code</key>
  1053 + <string>676</string>
  1054 + </dict>
  1055 + <dict>
  1056 + <key>name</key>
  1057 + <string>特克斯和凯科斯群岛</string>
  1058 + <key>code</key>
  1059 + <string>1649</string>
  1060 + </dict>
  1061 + <dict>
  1062 + <key>name</key>
  1063 + <string>特立尼达和多巴哥</string>
  1064 + <key>code</key>
  1065 + <string>1868</string>
  1066 + </dict>
  1067 + <dict>
  1068 + <key>name</key>
  1069 + <string>突尼斯</string>
  1070 + <key>code</key>
  1071 + <string>216</string>
  1072 + </dict>
  1073 + <dict>
  1074 + <key>name</key>
  1075 + <string>土耳其</string>
  1076 + <key>code</key>
  1077 + <string>90</string>
  1078 + </dict>
  1079 + <dict>
  1080 + <key>name</key>
  1081 + <string>土库曼斯坦</string>
  1082 + <key>code</key>
  1083 + <string>993</string>
  1084 + </dict>
  1085 + <dict>
  1086 + <key>name</key>
  1087 + <string>瓦努阿图</string>
  1088 + <key>code</key>
  1089 + <string>678</string>
  1090 + </dict>
  1091 + <dict>
  1092 + <key>name</key>
  1093 + <string>委内瑞拉</string>
  1094 + <key>code</key>
  1095 + <string>58</string>
  1096 + </dict>
  1097 + <dict>
  1098 + <key>name</key>
  1099 + <string>文莱</string>
  1100 + <key>code</key>
  1101 + <string>673</string>
  1102 + </dict>
  1103 + <dict>
  1104 + <key>name</key>
  1105 + <string>乌干达</string>
  1106 + <key>code</key>
  1107 + <string>256</string>
  1108 + </dict>
  1109 + <dict>
  1110 + <key>name</key>
  1111 + <string>乌克兰</string>
  1112 + <key>code</key>
  1113 + <string>380</string>
  1114 + </dict>
  1115 + <dict>
  1116 + <key>name</key>
  1117 + <string>乌拉圭</string>
  1118 + <key>code</key>
  1119 + <string>598</string>
  1120 + </dict>
  1121 + <dict>
  1122 + <key>name</key>
  1123 + <string>乌兹别克斯坦</string>
  1124 + <key>code</key>
  1125 + <string>998</string>
  1126 + </dict>
  1127 + <dict>
  1128 + <key>name</key>
  1129 + <string>西班牙</string>
  1130 + <key>code</key>
  1131 + <string>34</string>
  1132 + </dict>
  1133 + <dict>
  1134 + <key>name</key>
  1135 + <string>希腊</string>
  1136 + <key>code</key>
  1137 + <string>30</string>
  1138 + </dict>
  1139 + <dict>
  1140 + <key>name</key>
  1141 + <string>象牙海岸</string>
  1142 + <key>code</key>
  1143 + <string>225</string>
  1144 + </dict>
  1145 + <dict>
  1146 + <key>name</key>
  1147 + <string>新加坡</string>
  1148 + <key>code</key>
  1149 + <string>65</string>
  1150 + </dict>
  1151 + <dict>
  1152 + <key>name</key>
  1153 + <string>新喀里多尼亚</string>
  1154 + <key>code</key>
  1155 + <string>687</string>
  1156 + </dict>
  1157 + <dict>
  1158 + <key>name</key>
  1159 + <string>新西兰</string>
  1160 + <key>code</key>
  1161 + <string>64</string>
  1162 + </dict>
  1163 + <dict>
  1164 + <key>name</key>
  1165 + <string>匈牙利</string>
  1166 + <key>code</key>
  1167 + <string>36</string>
  1168 + </dict>
  1169 + <dict>
  1170 + <key>name</key>
  1171 + <string>叙利亚</string>
  1172 + <key>code</key>
  1173 + <string>963</string>
  1174 + </dict>
  1175 + <dict>
  1176 + <key>name</key>
  1177 + <string>牙买加</string>
  1178 + <key>code</key>
  1179 + <string>1876</string>
  1180 + </dict>
  1181 + <dict>
  1182 + <key>name</key>
  1183 + <string>亚美尼亚</string>
  1184 + <key>code</key>
  1185 + <string>374</string>
  1186 + </dict>
  1187 + <dict>
  1188 + <key>name</key>
  1189 + <string>也门</string>
  1190 + <key>code</key>
  1191 + <string>967</string>
  1192 + </dict>
  1193 + <dict>
  1194 + <key>name</key>
  1195 + <string>伊拉克</string>
  1196 + <key>code</key>
  1197 + <string>964</string>
  1198 + </dict>
  1199 + <dict>
  1200 + <key>name</key>
  1201 + <string>伊朗</string>
  1202 + <key>code</key>
  1203 + <string>98</string>
  1204 + </dict>
  1205 + <dict>
  1206 + <key>name</key>
  1207 + <string>以色列</string>
  1208 + <key>code</key>
  1209 + <string>972</string>
  1210 + </dict>
  1211 + <dict>
  1212 + <key>name</key>
  1213 + <string>意大利</string>
  1214 + <key>code</key>
  1215 + <string>39</string>
  1216 + </dict>
  1217 + <dict>
  1218 + <key>name</key>
  1219 + <string>印度</string>
  1220 + <key>code</key>
  1221 + <string>91</string>
  1222 + </dict>
  1223 + <dict>
  1224 + <key>name</key>
  1225 + <string>印度尼西亚</string>
  1226 + <key>code</key>
  1227 + <string>62</string>
  1228 + </dict>
  1229 + <dict>
  1230 + <key>name</key>
  1231 + <string>英国</string>
  1232 + <key>code</key>
  1233 + <string>44</string>
  1234 + </dict>
  1235 + <dict>
  1236 + <key>name</key>
  1237 + <string>英属处女群岛</string>
  1238 + <key>code</key>
  1239 + <string>1284</string>
  1240 + </dict>
  1241 + <dict>
  1242 + <key>name</key>
  1243 + <string>约旦</string>
  1244 + <key>code</key>
  1245 + <string>962</string>
  1246 + </dict>
  1247 + <dict>
  1248 + <key>name</key>
  1249 + <string>越南</string>
  1250 + <key>code</key>
  1251 + <string>84</string>
  1252 + </dict>
  1253 + <dict>
  1254 + <key>name</key>
  1255 + <string>赞比亚</string>
  1256 + <key>code</key>
  1257 + <string>260</string>
  1258 + </dict>
  1259 + <dict>
  1260 + <key>name</key>
  1261 + <string>乍得</string>
  1262 + <key>code</key>
  1263 + <string>235</string>
  1264 + </dict>
  1265 + <dict>
  1266 + <key>name</key>
  1267 + <string>直布罗陀</string>
  1268 + <key>code</key>
  1269 + <string>350</string>
  1270 + </dict>
  1271 + <dict>
  1272 + <key>name</key>
  1273 + <string>智利</string>
  1274 + <key>code</key>
  1275 + <string>56</string>
  1276 + </dict>
  1277 + <dict>
  1278 + <key>name</key>
  1279 + <string>中非共和国</string>
  1280 + <key>code</key>
  1281 + <string>236</string>
  1282 + </dict>
  1283 + <dict>
  1284 + <key>name</key>
  1285 + <string>中国</string>
  1286 + <key>code</key>
  1287 + <string>86</string>
  1288 + </dict>
  1289 + <dict>
  1290 + <key>name</key>
  1291 + <string>中国(澳门)</string>
  1292 + <key>code</key>
  1293 + <string>853</string>
  1294 + </dict>
  1295 + <dict>
  1296 + <key>name</key>
  1297 + <string>中国(台湾)</string>
  1298 + <key>code</key>
  1299 + <string>886</string>
  1300 + </dict>
  1301 + <dict>
  1302 + <key>name</key>
  1303 + <string>中国(香港)</string>
  1304 + <key>code</key>
  1305 + <string>852</string>
  1306 + </dict>
  1307 +</array>
  1308 +</plist>
... ...
metaCode/Supporting Files/Assets.xcassets/HomePage/Contents.json deleted 100644 → 0
1   -{
2   - "info" : {
3   - "author" : "xcode",
4   - "version" : 1
5   - }
6   -}
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_backViewImage.imageset/4671683516653_.pic.jpg deleted 100644 → 0

82.2 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_homePage_down.imageset/4491683252485_.pic.jpg deleted 100644 → 0

5.25 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_homePage_down.imageset/Contents.json deleted 100644 → 0
1   -{
2   - "images" : [
3   - {
4   - "idiom" : "universal",
5   - "scale" : "1x"
6   - },
7   - {
8   - "filename" : "4491683252485_.pic.jpg",
9   - "idiom" : "universal",
10   - "scale" : "2x"
11   - },
12   - {
13   - "idiom" : "universal",
14   - "scale" : "3x"
15   - }
16   - ],
17   - "info" : {
18   - "author" : "xcode",
19   - "version" : 1
20   - }
21   -}
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_mainView_front.imageset/4621683513846_.pic.jpg deleted 100644 → 0

56.9 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_mainView_front.imageset/Contents.json deleted 100644 → 0
1   -{
2   - "images" : [
3   - {
4   - "idiom" : "universal",
5   - "scale" : "1x"
6   - },
7   - {
8   - "filename" : "4621683513846_.pic.jpg",
9   - "idiom" : "universal",
10   - "scale" : "2x"
11   - },
12   - {
13   - "idiom" : "universal",
14   - "scale" : "3x"
15   - }
16   - ],
17   - "info" : {
18   - "author" : "xcode",
19   - "version" : 1
20   - }
21   -}
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_payMoneyImage.imageset/4651683514228_.pic.jpg deleted 100644 → 0

52.1 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_payMoneyImage.imageset/Contents.json deleted 100644 → 0
1   -{
2   - "images" : [
3   - {
4   - "idiom" : "universal",
5   - "scale" : "1x"
6   - },
7   - {
8   - "filename" : "4651683514228_.pic.jpg",
9   - "idiom" : "universal",
10   - "scale" : "2x"
11   - },
12   - {
13   - "idiom" : "universal",
14   - "scale" : "3x"
15   - }
16   - ],
17   - "info" : {
18   - "author" : "xcode",
19   - "version" : 1
20   - }
21   -}
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_topImage.imageset/4771683609542_.pic.jpg deleted 100644 → 0

230 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_topImage.imageset/Contents.json deleted 100644 → 0
1   -{
2   - "images" : [
3   - {
4   - "idiom" : "universal",
5   - "scale" : "1x"
6   - },
7   - {
8   - "filename" : "4771683609542_.pic.jpg",
9   - "idiom" : "universal",
10   - "scale" : "2x"
11   - },
12   - {
13   - "idiom" : "universal",
14   - "scale" : "3x"
15   - }
16   - ],
17   - "info" : {
18   - "author" : "xcode",
19   - "version" : 1
20   - }
21   -}
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_zhongguorenming_bank.imageset/4431683250159_.pic.jpg deleted 100644 → 0

79.4 KB

metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_zhongguorenming_bank.imageset/Contents.json deleted 100644 → 0
1   -{
2   - "images" : [
3   - {
4   - "idiom" : "universal",
5   - "scale" : "1x"
6   - },
7   - {
8   - "filename" : "4431683250159_.pic.jpg",
9   - "idiom" : "universal",
10   - "scale" : "2x"
11   - },
12   - {
13   - "idiom" : "universal",
14   - "scale" : "3x"
15   - }
16   - ],
17   - "info" : {
18   - "author" : "xcode",
19   - "version" : 1
20   - }
21   -}
metaCode/Supporting Files/Assets.xcassets/HomePage/homePage_backViewImage.imageset/Contents.json renamed to metaCode/Supporting Files/Assets.xcassets/LoginPage/login_alert_country_close.imageset/Contents.json
1 1 {
2 2 "images" : [
3 3 {
4   - "filename" : "4671683516653_.pic.jpg",
5 4 "idiom" : "universal",
6 5 "scale" : "1x"
7 6 },
8 7 {
  8 + "filename" : "login_alert_country_close@2x.png",
9 9 "idiom" : "universal",
10 10 "scale" : "2x"
11 11 },
12 12 {
  13 + "filename" : "login_alert_country_close@3x.png",
13 14 "idiom" : "universal",
14 15 "scale" : "3x"
15 16 }
... ...
metaCode/Supporting Files/Assets.xcassets/LoginPage/login_alert_country_close.imageset/login_alert_country_close@2x.png 0 → 100644

544 Bytes

metaCode/Supporting Files/Assets.xcassets/LoginPage/login_alert_country_close.imageset/login_alert_country_close@3x.png 0 → 100644

1.06 KB