加了运动设置页
authorliangzhenying <867174124@qq.com>
Fri, 30 Jan 2026 08:17:27 +0000 (16:17 +0800)
committerliangzhenying <867174124@qq.com>
Fri, 30 Jan 2026 08:17:27 +0000 (16:17 +0800)
21 files changed:
ShenYin/Podfile.lock
ShenYin/Pods/Kingfisher/PrivacyInfo.xcprivacy [deleted file]
ShenYin/Pods/MBProgressHUD/PrivacyInfo.xcprivacy [deleted file]
ShenYin/ShenYin.xcodeproj/project.pbxproj
ShenYin/ShenYin/Launch/SceneDelegate.swift
ShenYin/ShenYin/Sdk/DcSdk/tool/CCBleManager.swift
ShenYin/ShenYin/Sdk/DcSdk/tool/CCConfig.swift
ShenYin/ShenYin/Sdk/DcSdk/tool/DcSdkManager.swift
ShenYin/ShenYin/UI/Mine/AboutVC.swift
ShenYin/ShenYin/UI/Mine/AccountSetVC.swift
ShenYin/ShenYin/UI/Mine/MoreSetVC.swift
ShenYin/ShenYin/UI/Mine/UserInfo/CustomCell.swift
ShenYin/ShenYin/UI/Mine/UserInfo/UserInfoCell.swift
ShenYin/ShenYin/UI/Mine/UserInfo/UserInfoVC.swift
ShenYin/ShenYin/UI/Sport/Sport/Set/SportSetCell.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Sport/Sport/Set/SportSetModel.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Sport/Sport/Set/SportSetVC.swift
ShenYin/ShenYin/UI/Sport/Sport/Set/SwitchCell.swift [deleted file]
ShenYin/ShenYin/UI/common/pop/CustomPicker4.swift [new file with mode: 0644]
ShenYin/playboy copy-Info.plist [new file with mode: 0644]
ShenYin/podfile

index b49030b..871b96f 100644 (file)
@@ -1,4 +1,11 @@
 PODS:
+  - AMap3DMap-NO-IDFA (10.0.700):
+    - AMapFoundation-NO-IDFA (>= 1.8.0)
+  - AMapFoundation-NO-IDFA (1.8.2)
+  - AMapLocation-NO-IDFA (2.10.0):
+    - AMapFoundation-NO-IDFA (>= 1.8.0)
+  - AMapSearch-NO-IDFA (9.7.0):
+    - AMapFoundation-NO-IDFA (>= 1.8.0)
   - CryptoSwift (1.8.4)
   - DeviceKit (5.4.0)
   - DGActivityIndicatorView (2.1.1)
@@ -70,6 +77,9 @@ PODS:
   - ZipArchive (1.4.0)
 
 DEPENDENCIES:
+  - AMap3DMap-NO-IDFA (= 10.0.700)
+  - AMapLocation-NO-IDFA
+  - AMapSearch-NO-IDFA (= 9.7.0)
   - CryptoSwift
   - DeviceKit (~> 5.4.0)
   - DGActivityIndicatorView
@@ -97,6 +107,10 @@ DEPENDENCIES:
 
 SPEC REPOS:
   https://gitee.com/mirrors/CocoaPods-Specs.git:
+    - AMap3DMap-NO-IDFA
+    - AMapFoundation-NO-IDFA
+    - AMapLocation-NO-IDFA
+    - AMapSearch-NO-IDFA
     - CryptoSwift
     - DeviceKit
     - DGActivityIndicatorView
@@ -130,6 +144,10 @@ SPEC REPOS:
     - ZipArchive
 
 SPEC CHECKSUMS:
+  AMap3DMap-NO-IDFA: e029d65ea35d3e4c0a948e1dab9e77109bf0e86a
+  AMapFoundation-NO-IDFA: 6ce0ef596d4eb8d934ff498e56747b6de1247b05
+  AMapLocation-NO-IDFA: 735791aeb1ba52dff666e4158b86caf4b68b5be7
+  AMapSearch-NO-IDFA: 749f73d5a773758f01a24eb8872f8798c8b47cb4
   CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90
   DeviceKit: bd34bb1766d926c3cc5a5f6e3e9a6dd10148b805
   DGActivityIndicatorView: ff2c76073d79692f724863c8dd38685866a03cb6
@@ -162,6 +180,6 @@ SPEC CHECKSUMS:
   YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
   ZipArchive: e25a4373192673e3229ac8d6e9f64a3e5713c966
 
-PODFILE CHECKSUM: 8be0cb581e3b6cc73fee508087fb68b46cbcd963
+PODFILE CHECKSUM: 72f4eaacbe6e66655fb7c7aef1807fd74a1fd9b2
 
 COCOAPODS: 1.16.2
diff --git a/ShenYin/Pods/Kingfisher/PrivacyInfo.xcprivacy b/ShenYin/Pods/Kingfisher/PrivacyInfo.xcprivacy
deleted file mode 100644 (file)
index 6af1641..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>NSPrivacyTracking</key>
-       <false/>
-       <key>NSPrivacyCollectedDataTypes</key>
-       <array/>
-       <key>NSPrivacyTrackingDomains</key>
-       <array/>
-       <key>NSPrivacyAccessedAPITypes</key>
-       <array/>
-</dict>
-</plist>
diff --git a/ShenYin/Pods/MBProgressHUD/PrivacyInfo.xcprivacy b/ShenYin/Pods/MBProgressHUD/PrivacyInfo.xcprivacy
deleted file mode 100644 (file)
index 6af1641..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>NSPrivacyTracking</key>
-       <false/>
-       <key>NSPrivacyCollectedDataTypes</key>
-       <array/>
-       <key>NSPrivacyTrackingDomains</key>
-       <array/>
-       <key>NSPrivacyAccessedAPITypes</key>
-       <array/>
-</dict>
-</plist>
index 7604f7b..39f6992 100644 (file)
@@ -8,6 +8,11 @@
 
 /* Begin PBXBuildFile section */
                30B13DEF1AA0E4C54D873276 /* Pods_playboy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4F1BB919D567C3B6B0EBAA7 /* Pods_playboy.framework */; };
+               3F0369602F2B604800F3CB95 /* DeepChordsSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D54E0EF2F0A61E600A80EE7 /* DeepChordsSdk.framework */; };
+               3F0369612F2B604800F3CB95 /* (null) in Frameworks */ = {isa = PBXBuildFile; };
+               3F0369622F2B604800F3CB95 /* Pods_playboy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4F1BB919D567C3B6B0EBAA7 /* Pods_playboy.framework */; };
+               3F0369642F2B604800F3CB95 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3F8F58282EBCA2B800FFC00B /* PrivacyInfo.xcprivacy */; };
+               3F0369672F2B604800F3CB95 /* DeepChordsSdk.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0D54E0EF2F0A61E600A80EE7 /* DeepChordsSdk.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
                3F8F58292EBCA2B800FFC00B /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3F8F58282EBCA2B800FFC00B /* PrivacyInfo.xcprivacy */; };
                3FD1DFED2F0E00BF00A62733 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3F8F58282EBCA2B800FFC00B /* PrivacyInfo.xcprivacy */; };
                3FFB77C12F179F3100EF9A60 /* DeepChordsSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D54E0EF2F0A61E600A80EE7 /* DeepChordsSdk.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
+               3F03695C2F2B604800F3CB95 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 3F887B942E38D8DC00C98658 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 0D54E0EE2F0A61E600A80EE7;
+                       remoteInfo = DeepChordsSdk;
+               };
                3FD1DFE52F0E00BF00A62733 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 3F887B942E38D8DC00C98658 /* Project object */;
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
+               3F0369662F2B604800F3CB95 /* Embed Frameworks */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 10;
+                       files = (
+                               3F0369672F2B604800F3CB95 /* DeepChordsSdk.framework in Embed Frameworks */,
+                       );
+                       name = "Embed Frameworks";
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                3FD1DFEF2F0E00BF00A62733 /* Embed Frameworks */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 2147483647;
@@ -69,6 +92,8 @@
                16E2FB8C843A2136E114E451 /* Pods-demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-demo.debug.xcconfig"; path = "Target Support Files/Pods-demo/Pods-demo.debug.xcconfig"; sourceTree = "<group>"; };
                248D8B53B5A178ACA5867275 /* Pods_DeepChordsSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DeepChordsSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
                34AD41433DCDC288CFB8C5DA /* Pods-playboy.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-playboy.release.xcconfig"; path = "Target Support Files/Pods-playboy/Pods-playboy.release.xcconfig"; sourceTree = "<group>"; };
+               3F03696B2F2B604900F3CB95 /* playboy copy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "playboy copy.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+               3F03696D2F2B604900F3CB95 /* playboy copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "playboy copy-Info.plist"; path = "/Users/yaozuopan/Documents/code/ShenYin/ShenYin/playboy copy-Info.plist"; sourceTree = "<absolute>"; };
                3F7602EA2EFA891200588C18 /* DeepChordsSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DeepChordsSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
                3F887B9C2E38D8DC00C98658 /* ShenYin.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ShenYin.app; sourceTree = BUILT_PRODUCTS_DIR; };
                3F8F58282EBCA2B800FFC00B /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
-               3F887BAE2E38D8DD00C98658 /* Exceptions for "ShenYin" folder in "ShenYin" target */ = {
+               3F03696C2F2B604900F3CB95 /* Exceptions for "ShenYin" folder in "playboy copy" target */ = {
                        isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
                        membershipExceptions = (
+                               "/Localized: LaunchScreen.storyboard",
+                               "/Localized: Main.storyboard",
+                               Api/HttpClient.swift,
+                               Api/ResponseBaseModel.swift,
+                               Assets.xcassets,
+                               Cache/AiLanguageCache.swift,
+                               Cache/BannerCache.swift,
+                               Cache/CacheManager.swift,
+                               Cache/ChatCache.swift,
+                               Cache/CountryCache.swift,
+                               Cache/DCFolder.swift,
+                               Cache/DeviceCache.swift,
+                               Cache/FileSaver.swift,
+                               Cache/LanuageCache.swift,
+                               Cache/RecordCache.swift,
+                               Cache/RecordDetailModel.swift,
+                               Cache/TipsCache.swift,
+                               Cache/UserCache.swift,
+                               Cache/UserInfo.swift,
+                               Cache/UserModel.swift,
                                Info.plist,
+                               lan/Arabic.swift,
+                               lan/CCAiSupportLanguage.swift,
+                               lan/chinese.swift,
+                               lan/english.swift,
+                               lan/Filipino.swift,
+                               lan/french.swift,
+                               lan/German.swift,
+                               lan/indonesian.swift,
+                               lan/japanese.swift,
+                               lan/korean.swift,
+                               lan/LanConfig.swift,
+                               lan/malay.swift,
+                               lan/russian.swift,
+                               lan/spanish.swift,
+                               lan/thai.swift,
+                               lan/TraditionalChinese.swift,
+                               lan/Vietnam.swift,
+                               Launch/AppDelegate.swift,
+                               Launch/AppLaunch.swift,
+                               Launch/AppManager.swift,
+                               Launch/SceneDelegate.swift,
                                playboy.storyboard,
                                playboy.xcassets,
+                               Resource/colors/Colors.swift,
+                               "Resource/colors/Colors+YL.swift",
+                               Resource/dialog_record.gif,
+                               "Resource/fonts/UIFont+ZKYS.swift",
+                               Resource/record_start_joy.gif,
+                               Resource/record_start.gif,
+                               Sdk/CCAiManager.swift,
                                Sdk/CCBleManager.swift,
                                Sdk/CCDevice.swift,
                                Sdk/CCPage.swift,
                                Sdk/DcSdk/VC/DcXclyVC.swift,
                                Sdk/DcSdk/VC/HomeDeviceVC.swift,
                                Sdk/DcSdk/VC/ModeVC.swift,
+                               Sdk/JoySdk/tool/CCBleManager.swift,
+                               Sdk/JoySdk/tool/CCConfig.swift,
+                               Sdk/JoySdk/tool/CCDevice.swift,
+                               Sdk/JoySdk/tool/CCPage.swift,
+                               Sdk/JoySdk/tool/JoyCallRecord.swift,
+                               Sdk/JoySdk/tool/JoyChat.swift,
+                               Sdk/JoySdk/tool/JoyChinse2English.swift,
+                               Sdk/JoySdk/tool/JoyDialog.swift,
+                               Sdk/JoySdk/tool/JoyGemAI.framework,
+                               Sdk/JoySdk/tool/JoyRecord.swift,
+                               Sdk/JoySdk/tool/JoySdkManager.swift,
+                               Sdk/JoySdk/tool/JoyTcty.swift,
+                               Sdk/JoySdk/VC/AiFunctionVC.swift,
+                               Sdk/JoySdk/VC/HomeDeviceVC.swift,
+                               Sdk/JoySdk/VC/JoyCallingRecordVC.swift,
+                               Sdk/JoySdk/VC/JoyChatVC.swift,
+                               Sdk/JoySdk/VC/JoyChinese2EnglishVC.swift,
+                               Sdk/JoySdk/VC/JoyDialogTranlateVC.swift,
+                               Sdk/JoySdk/VC/JoyStereoCallVC.swift,
+                               Sdk/JoySdk/VC/JoyTctyVC.swift,
+                               Sdk/JoySdk/VC/JoyXclyVC.swift,
+                               Sdk/JoySdk/VC/ModeVC.swift,
+                               Sdk/LogManager.swift,
+                               Sdk/Ota/JL_AdvParse.framework,
+                               Sdk/Ota/JL_BLEKit.framework,
+                               Sdk/Ota/JL_HashPair.framework,
+                               Sdk/Ota/JL_OTALib.framework,
+                               Sdk/Ota/JLBleAssistManager.m,
+                               Sdk/Ota/JLLogHelper.framework,
+                               Sdk/Ota/OtaManager.swift,
                                "ShenYin copy-Info.plist",
+                               Tools/AESEncryption.swift,
+                               Tools/BaseSizeMacro.swift,
+                               "Tools/Category/Data+YL.swift",
+                               "Tools/Category/Open+map.swift",
+                               Tools/Date.swift,
+                               "Tools/Extensions/Array+Develop.swift",
+                               "Tools/Extensions/Array+Spec.swift",
+                               "Tools/Extensions/CAGradientLayer+Develop.swift",
+                               "Tools/Extensions/CALayer+Develop.swift",
+                               "Tools/Extensions/CGRect+HTDevelop.swift",
+                               "Tools/Extensions/CGSize+Fit.swift",
+                               "Tools/Extensions/Codable+Spec.swift",
+                               Tools/Extensions/CollectionExtensions.swift,
+                               Tools/Extensions/ConstraintArrayDSL.swift,
+                               "Tools/Extensions/Dictionary+Develop.swift",
+                               "Tools/Extensions/DispatchQueue+Develop.swift",
+                               "Tools/Extensions/FileManager+Develop.swift",
+                               "Tools/Extensions/KeyPath+Develop.swift",
+                               "Tools/Extensions/Number+Develop.swift",
+                               Tools/Extensions/QueryParameters.swift,
+                               "Tools/Extensions/Sequence+Develop.swift",
+                               Tools/Extensions/SignedNumericExtensions.swift,
+                               Tools/Extensions/SnapKit_Extension.swift,
+                               "Tools/Extensions/String+Attribute.swift",
+                               "Tools/Extensions/String+Develop.swift",
+                               "Tools/Extensions/String+Encryption.swift",
+                               "Tools/Extensions/String+RegExp.swift",
+                               "Tools/Extensions/String+SubString.swift",
+                               "Tools/Extensions/String+Week.swift",
+                               "Tools/Extensions/String+YL.swift",
+                               "Tools/Extensions/StringURL+Develop.swift",
+                               "Tools/Extensions/Time+Develop.swift",
+                               "Tools/Extensions/UIApplication+Develop.swift",
+                               "Tools/Extensions/UIButton+Develop.swift",
+                               "Tools/Extensions/UIDevice+Landscape.swift",
+                               "Tools/Extensions/UIImage+Develop.swift",
+                               "Tools/Extensions/UIImage+Gif.swift",
+                               "Tools/Extensions/UIImage+ImageEffects.m",
+                               "Tools/Extensions/UIImageView+Develop.swift",
+                               "Tools/Extensions/UILabel+line.swift",
+                               "Tools/Extensions/UINavigationBar+Develop.swift",
+                               Tools/Extensions/UITableView_Extension.swift,
+                               "Tools/Extensions/UITableView+Header.swift",
+                               "Tools/Extensions/UITextField+Extension.swift",
+                               "Tools/Extensions/UITextView+Scroll.swift",
+                               "Tools/Extensions/UIView+Develop.swift",
+                               "Tools/Extensions/UIView+Loading.swift",
+                               "Tools/Extensions/UIView+Rect.swift",
+                               "Tools/Extensions/UIView+Round.swift",
+                               Tools/Extensions/UIViewExtension.swift,
+                               Tools/Extensions/YCDevelop.swift,
+                               Tools/Extensions/zhString.swift,
+                               Tools/NumberToTime.swift,
+                               Tools/PcmSound.m,
+                               Tools/SizeFit.swift,
+                               Tools/Then.swift,
+                               Tools/TimerButton/YLTimerButton.m,
+                               Tools/YLTools.swift,
+                               UI/Base/BaseNavigation.swift,
+                               UI/Base/BaseNC.swift,
+                               UI/Base/BasePickerView.swift,
+                               UI/Base/BasePresentView.swift,
+                               UI/Base/BaseTableViewCell.swift,
+                               UI/Base/BaseTableViewSetionHeader.swift,
+                               UI/Base/BaseTC.swift,
+                               UI/Base/BaseTextField.swift,
+                               UI/Base/BaseVC.swift,
+                               UI/Base/BaseView.swift,
+                               UI/Base/BaseVM.swift,
+                               UI/Base/ReusabelViewsInitProtocol.swift,
+                               UI/Base/WebView/BaseWebView.swift,
+                               UI/Base/WebView/BaseWebViewController.swift,
+                               UI/common/BrokenLineView.swift,
+                               UI/common/CommonCell.swift,
+                               UI/common/CustomAlert.swift,
+                               UI/common/CustomButton.swift,
+                               UI/common/ImagePickerManager.swift,
+                               UI/common/LoadingButton.swift,
+                               UI/common/LogVC.swift,
+                               UI/common/NotificationManager.swift,
+                               UI/common/PlaceHolderTextView.swift,
+                               UI/common/pop/ConnectPopView.swift,
+                               UI/common/pop/CustomPicker.swift,
+                               UI/common/pop/CustomPicker2.swift,
+                               UI/common/pop/CustomPicker3.swift,
+                               UI/common/pop/CustomPicker4.swift,
+                               UI/common/pop/LanguagePicker/LanguagePickerTitle.swift,
+                               UI/common/pop/LanguagePicker/LanguagePickerView.swift,
+                               UI/common/pop/LanguagePicker/LanguageSelectItem.swift,
+                               UI/common/pop/PopCloudView.swift,
+                               UI/common/pop/PopMenu.swift,
+                               UI/common/pop/PopPlayView.swift,
+                               UI/common/pop/PopTextField.swift,
+                               UI/common/pop/RecordPopView.swift,
+                               UI/common/pop/RecordTipsView.swift,
+                               "UI/common/ScrollView+Bottom.swift",
+                               UI/common/SendToolBar.swift,
+                               UI/common/YLprogressHUD.swift,
+                               UI/common/YLProgressMB.swift,
+                               UI/Customer/CustomerHeaderView.swift,
+                               UI/Customer/CustomerVC.swift,
+                               UI/Customer/QaHeaderView.swift,
+                               UI/Home/Chat/CCRole.swift,
+                               UI/Home/Chat/ChatCell.swift,
+                               UI/Home/Chat/ChatHeaderView.swift,
+                               UI/Home/Chat/ChatNavigationBarItem.swift,
+                               UI/Home/Chat/ChatRecordBar.swift,
+                               UI/Home/Chat/IntelligentVC.swift,
+                               UI/Home/Chat/RecordButton.swift,
+                               UI/Home/Chat/RoleListVC.swift,
+                               UI/Home/Chinese2English/Chinese2EnglishCell.swift,
+                               UI/Home/Device/BackgroundModel.swift,
+                               UI/Home/Device/BackgroundVC.swift,
+                               UI/Home/Device/DeviceModel.swift,
+                               UI/Home/Device/HomeAddDeviceView.swift,
+                               UI/Home/Device/HomeDeviceCell.swift,
+                               UI/Home/Device/HomeHeadInfoView.swift,
+                               UI/Home/Dialog/DialogRecordBar.swift,
+                               UI/Home/Dialog/DialogSplitView.swift,
+                               UI/Home/Dialog/DialogTranslateCell.swift,
+                               UI/Home/FieldRecording/FieldRecordBar.swift,
+                               UI/Home/FieldRecording/RecordBar.swift,
+                               UI/Home/FieldRecording/RhythView.swift,
+                               UI/Home/HistoryRecord/HistoryRecordCell.swift,
+                               UI/Home/HistoryRecord/HistoryRecordVM.swift,
+                               UI/Home/HistoryRecord/RecordHistoryBottomView.swift,
+                               UI/Home/HistoryRecord/RecordHistoryModel.swift,
+                               UI/Home/HistoryRecord/RecordSearchBar.swift,
+                               UI/Home/HistoryRecord/search/CloudSelectedCell.swift,
+                               UI/Home/HistoryRecord/search/CloudSelectedVC.swift,
+                               UI/Home/HistoryRecord/search/HistorySearchBottomView.swift,
+                               UI/Home/HistoryRecord/search/HistorySearchCell.swift,
+                               UI/Home/HistoryRecord/search/HistorySelectedVC.swift,
+                               UI/Home/HistoryRecord/SelecteCell.swift,
+                               UI/Home/HistoryRecord/VC/CalendarPickerVC.swift,
+                               UI/Home/HistoryRecord/VC/CloudRecordVC.swift,
+                               UI/Home/HistoryRecord/VC/CloudSearchVC.swift,
+                               UI/Home/HistoryRecord/VC/HistoryRecordVC.swift,
+                               UI/Home/HistoryRecord/VC/HistorySearchVC.swift,
+                               UI/Home/HistoryRecord/VC/RecordFontVC.swift,
+                               UI/Home/HistoryRecord/VC/RecordShareVC.swift,
+                               UI/Home/RecordDetail/RecordDetaiContent.swift,
+                               UI/Home/RecordDetail/RecordDetailBar.swift,
+                               UI/Home/RecordDetail/RecordDetailTopBar.swift,
+                               UI/Home/RecordDetail/RecordDetailVC.swift,
+                               UI/Home/Root/CurrentDeviceView.swift,
+                               UI/Home/Root/HomeBottomView.swift,
+                               UI/Home/Root/HomeFunctionView.swift,
+                               UI/Home/Root/HomeHeadView.swift,
+                               UI/Home/Scan/AddDeviceVC.swift,
+                               UI/Home/Scan/BleScanVC.swift,
+                               UI/Home/Scan/DeviceVM.swift,
+                               UI/Home/Scan/ProductInfoModel.swift,
+                               UI/Home/Scan/QrVC.swift,
+                               UI/Home/TextTranslate/TextTranslateVC.swift,
+                               UI/Home/TextTranslate/TranslateCell.swift,
+                               UI/Login/Controller/Binding/BindingPhoneVC.swift,
+                               UI/Login/Controller/Binding/VarifyBindingVC.swift,
+                               UI/Login/Controller/ContryListVC.swift,
+                               UI/Login/Controller/ForgetVC.swift,
+                               UI/Login/Controller/LoginVC.swift,
+                               UI/Login/Controller/RegisterVC.swift,
+                               UI/Login/Controller/SetEmailVC.swift,
+                               UI/Login/Controller/SetPhoneVC.swift,
+                               UI/Login/Controller/SmsLoginVC.swift,
+                               UI/Login/Controller/VerifyCodeVC.swift,
+                               UI/Login/Controller/VerifyEmailVC.swift,
+                               UI/Login/Controller/VerifyPhoneVC.swift,
+                               UI/Login/View/AgreeView.swift,
+                               UI/Login/View/CodeView.swift,
+                               UI/Login/View/CustomInputView.swift,
+                               UI/Login/View/LoginBgView.swift,
+                               UI/Login/View/LoginHeaderView.swift,
+                               UI/Login/View/OthersLoginView.swift,
+                               UI/Login/View/PasswordView.swift,
+                               UI/Login/View/RegionView.swift,
+                               UI/Login/ViewModel/AppleLoginManager.swift,
+                               UI/Login/ViewModel/IASignWithWeChat.swift,
+                               UI/Login/ViewModel/LoginVM.swift,
+                               UI/Mine/AboutVC.swift,
+                               UI/Mine/AccountSetVC.swift,
+                               UI/Mine/Device/DeviceInfoVC.swift,
+                               UI/Mine/Device/MyDeviceListVC.swift,
+                               UI/Mine/Feedback/Commit/FeedbackCommitVC.swift,
+                               UI/Mine/Feedback/Commit/FeedbackContactView.swift,
+                               UI/Mine/Feedback/Commit/FeedbackImageView.swift,
+                               UI/Mine/Feedback/Commit/FeedbackInputView.swift,
+                               UI/Mine/Feedback/Commit/FeedbackTypeView.swift,
+                               UI/Mine/Feedback/FeedbackBottomView.swift,
+                               UI/Mine/Feedback/FeedbackContentView.swift,
+                               UI/Mine/Feedback/FeedbackHistoryVC.swift,
+                               UI/Mine/Feedback/FeedbackQaListView.swift,
+                               UI/Mine/Feedback/FeedbackVM.swift,
+                               UI/Mine/Feedback/FeekbackVC.swift,
+                               UI/Mine/Feedback/QaModel.swift,
+                               UI/Mine/Instructions/InstructionsDetailVC.swift,
+                               UI/Mine/Instructions/InstructionsModel.swift,
+                               UI/Mine/Instructions/InstructionsVC.swift,
+                               UI/Mine/Instructions/SearchBar.swift,
+                               UI/Mine/LanguageVC.swift,
+                               UI/Mine/LoginManager/DeviceLoginDetailVC.swift,
+                               UI/Mine/LoginManager/DeviceLoginRecordModel.swift,
+                               UI/Mine/LoginManager/DeviceLoginVC.swift,
+                               UI/Mine/LoginManager/DeviceLoginVM.swift,
+                               UI/Mine/MoreSetVC.swift,
+                               UI/Mine/ProtocolVC.swift,
+                               UI/Mine/RevokeCodeVC.swift,
+                               UI/Mine/RevokeVC.swift,
+                               UI/Mine/Root/BannerModel.swift,
+                               UI/Mine/Root/MineBannerView.swift,
+                               UI/Mine/Root/MineCell.swift,
+                               UI/Mine/Root/MineHeaderView.swift,
+                               UI/Mine/Root/MineNavBar.swift,
+                               UI/Mine/Root/MineVC.swift,
+                               UI/Mine/Update/AppUpdateModel.swift,
+                               UI/Mine/Update/AppUpdateVM.swift,
+                               UI/Mine/Update/BleUpdateVM.swift,
+                               UI/Mine/Update/UpdateVC.swift,
+                               UI/Mine/UserInfo/AreaVC.swift,
+                               UI/Mine/UserInfo/CustomCell.swift,
+                               UI/Mine/UserInfo/CustomSectionHeader.swift,
+                               UI/Mine/UserInfo/GenderVC.swift,
+                               UI/Mine/UserInfo/NickNameVC.swift,
+                               UI/Mine/UserInfo/UserInfoCell.swift,
+                               UI/Mine/UserInfo/UserInfoVC.swift,
+                               UI/Mine/UserManagerVC.swift,
+                               UI/Mode/CustomEqVC.swift,
+                               UI/Mode/File.swift,
+                               UI/Mode/FindVC.swift,
+                               UI/Mode/GlassesFindVC.swift,
+                               UI/Mode/ModeControView.swift,
+                               UI/Mode/ModeEffectsType.swift,
+                               UI/Mode/ModeEffectsView.swift,
+                               UI/Mode/ModeFindView.swift,
+                               UI/Raisound/AesEncrypt.swift,
+                               UI/Raisound/MSVoiceChat.swift,
+                               UI/Raisound/MSVoiceChatModel.swift,
+                               UI/Raisound/record/AiMouseAudioRecord.m,
+                               UI/Raisound/record/AiMouseRecordManager.m,
+                               UI/Raisound/RSApi.swift,
+                               UI/Raisound/RSAuth.swift,
+                               UI/Raisound/RSChatCell.swift,
+                               UI/Raisound/RSChatVC.swift,
+                               UI/Raisound/RSManager.swift,
+                               UI/Raisound/RSRecordBar.swift,
+                               UI/Raisound/SwiftWebSocket.swift,
+                               UI/Sleep/AudioPlayerManager.swift,
+                               UI/Sleep/AudioPlayerVC.swift,
+                               UI/Sleep/AudioPlayView.swift,
+                               UI/Sleep/CircleProgressView.swift,
+                               UI/Sleep/MusicCategory.swift,
+                               UI/Sleep/MusicModel.swift,
+                               UI/Sleep/SleepCell.swift,
+                               UI/Sleep/SleepListView.swift,
+                               UI/Sleep/SleepVC.swift,
+                               UI/Sleep/SleepVM.swift,
                                UI/Sport/MusicRootView.swift,
                                UI/Sport/RecordRootView.swift,
                                UI/Sport/Sport/Ready/CountdownView.swift,
                                UI/Sport/Sport/root/RouteView.swift,
                                UI/Sport/Sport/root/SportRootView.swift,
                                UI/Sport/Sport/root/SportTypeView.swift,
+                               UI/Sport/Sport/Set/SportSetCell.swift,
+                               UI/Sport/Sport/Set/SportSetModel.swift,
+                               UI/Sport/Sport/Set/SportSetVC.swift,
                                UI/Sport/Sport/Tools/MapManager.swift,
                                UI/Sport/SportHomeVC.swift,
                                UI/Sport/TranslateRootView.swift,
+                               ViewController.swift,
+                       );
+                       target = 3F03695A2F2B604800F3CB95 /* playboy copy */;
+               };
+               3F887BAE2E38D8DD00C98658 /* Exceptions for "ShenYin" folder in "ShenYin" target */ = {
+                       isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
+                       membershipExceptions = (
+                               Info.plist,
+                               playboy.storyboard,
+                               playboy.xcassets,
+                               Sdk/CCBleManager.swift,
+                               Sdk/CCDevice.swift,
+                               Sdk/CCPage.swift,
+                               Sdk/DcSdk/tool/CCBleManager.swift,
+                               Sdk/DcSdk/tool/CCConfig.swift,
+                               Sdk/DcSdk/tool/CCDevice.swift,
+                               Sdk/DcSdk/tool/CCPage.swift,
+                               Sdk/DcSdk/tool/DcCall.swift,
+                               Sdk/DcSdk/tool/DcChatManager.swift,
+                               Sdk/DcSdk/tool/DcChinese2Enligsh.swift,
+                               Sdk/DcSdk/tool/DcSdkManager.swift,
+                               Sdk/DcSdk/tool/DcStereo.swift,
+                               Sdk/DcSdk/tool/DcTcty.swift,
+                               Sdk/DcSdk/tool/DcThly.swift,
+                               Sdk/DcSdk/tool/DcXcly.swift,
+                               Sdk/DcSdk/tool/JLAudioUnitKit.xcframework,
+                               Sdk/DcSdk/tool/OpusTools.swift,
+                               Sdk/DcSdk/VC/AiFunctionVC.swift,
+                               Sdk/DcSdk/VC/DcCallingRecordVC.swift,
+                               Sdk/DcSdk/VC/DcChatVC.swift,
+                               Sdk/DcSdk/VC/DcChinese2EnglishVC.swift,
+                               Sdk/DcSdk/VC/DcDialogTranslateVC.swift,
+                               Sdk/DcSdk/VC/DcStereoCallVC.swift,
+                               Sdk/DcSdk/VC/DcTctyVC.swift,
+                               Sdk/DcSdk/VC/DcXclyVC.swift,
+                               Sdk/DcSdk/VC/HomeDeviceVC.swift,
+                               Sdk/DcSdk/VC/ModeVC.swift,
+                               "ShenYin copy-Info.plist",
                        );
                        target = 3F887B9B2E38D8DC00C98658 /* ShenYin */;
                };
                                UI/Sport/Sport/root/RouteView.swift,
                                UI/Sport/Sport/root/SportRootView.swift,
                                UI/Sport/Sport/root/SportTypeView.swift,
+                               UI/Sport/Sport/Set/SportSetCell.swift,
+                               UI/Sport/Sport/Set/SportSetModel.swift,
+                               UI/Sport/Sport/Set/SportSetVC.swift,
                                UI/Sport/Sport/Tools/MapManager.swift,
                                UI/Sport/SportHomeVC.swift,
                                UI/Sport/TranslateRootView.swift,
                                3FCC8B152F1E0280004C2A13 /* Exceptions for "ShenYin" folder in "Embed Frameworks" phase from "ShenYin" target */,
                                3FD1DFF52F0E00BF00A62733 /* Exceptions for "ShenYin" folder in "playboy" target */,
                                3FCC8B1A2F1E030E004C2A13 /* Exceptions for "ShenYin" folder in "Embed Frameworks" phase from "playboy" target */,
+                               3F03696C2F2B604900F3CB95 /* Exceptions for "ShenYin" folder in "playboy copy" target */,
                        );
                        path = ShenYin;
                        sourceTree = "<group>";
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               3F03695F2F2B604800F3CB95 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               3F0369602F2B604800F3CB95 /* DeepChordsSdk.framework in Frameworks */,
+                               3F0369612F2B604800F3CB95 /* (null) in Frameworks */,
+                               3F0369622F2B604800F3CB95 /* Pods_playboy.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                3F887B992E38D8DC00C98658 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                                3F887B9D2E38D8DC00C98658 /* Products */,
                                34A14A83ECF09370871C891F /* Pods */,
                                676B86A4BA2639E8694D56B4 /* Frameworks */,
+                               3F03696D2F2B604900F3CB95 /* playboy copy-Info.plist */,
                        );
                        sourceTree = "<group>";
                };
                                3F887B9C2E38D8DC00C98658 /* ShenYin.app */,
                                0D54E0EF2F0A61E600A80EE7 /* DeepChordsSdk.framework */,
                                3FD1DFF42F0E00BF00A62733 /* playboy.app */,
+                               3F03696B2F2B604900F3CB95 /* playboy copy.app */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                        productReference = 0D54E0EF2F0A61E600A80EE7 /* DeepChordsSdk.framework */;
                        productType = "com.apple.product-type.framework";
                };
+               3F03695A2F2B604800F3CB95 /* playboy copy */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 3F0369682F2B604800F3CB95 /* Build configuration list for PBXNativeTarget "playboy copy" */;
+                       buildPhases = (
+                               3F03695D2F2B604800F3CB95 /* [CP] Check Pods Manifest.lock */,
+                               3F03695E2F2B604800F3CB95 /* Sources */,
+                               3F03695F2F2B604800F3CB95 /* Frameworks */,
+                               3F0369632F2B604800F3CB95 /* Resources */,
+                               3F0369652F2B604800F3CB95 /* [CP] Embed Pods Frameworks */,
+                               3F0369662F2B604800F3CB95 /* Embed Frameworks */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               3F03695B2F2B604800F3CB95 /* PBXTargetDependency */,
+                       );
+                       fileSystemSynchronizedGroups = (
+                               3F887B9E2E38D8DC00C98658 /* ShenYin */,
+                       );
+                       name = "playboy copy";
+                       productName = LingQi;
+                       productReference = 3F03696B2F2B604900F3CB95 /* playboy copy.app */;
+                       productType = "com.apple.product-type.application";
+               };
                3F887B9B2E38D8DC00C98658 /* ShenYin */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 3F887BAF2E38D8DD00C98658 /* Build configuration list for PBXNativeTarget "ShenYin" */;
                                3F887B9A2E38D8DC00C98658 /* Resources */,
                                5A934A35F54A5620CFD3C08A /* [CP] Embed Pods Frameworks */,
                                3FEFE9092F1B252000D82F17 /* Embed Frameworks */,
+                               B5B3AFE4385DEF6B27A9A30F /* [CP] Copy Pods Resources */,
                        );
                        buildRules = (
                        );
                                3F887B9B2E38D8DC00C98658 /* ShenYin */,
                                0D54E0EE2F0A61E600A80EE7 /* DeepChordsSdk */,
                                3FD1DFE32F0E00BF00A62733 /* playboy */,
+                               3F03695A2F2B604800F3CB95 /* playboy copy */,
                        );
                };
 /* End PBXProject section */
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               3F0369632F2B604800F3CB95 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               3F0369642F2B604800F3CB95 /* PrivacyInfo.xcprivacy in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                3F887B9A2E38D8DC00C98658 /* Resources */ = {
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
+               3F03695D2F2B604800F3CB95 /* [CP] Check Pods Manifest.lock */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                       );
+                       inputPaths = (
+                               "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+                               "${PODS_ROOT}/Manifest.lock",
+                       );
+                       name = "[CP] Check Pods Manifest.lock";
+                       outputFileListPaths = (
+                       );
+                       outputPaths = (
+                               "$(DERIVED_FILE_DIR)/Pods-playboy-checkManifestLockResult.txt",
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+                       showEnvVarsInLog = 0;
+               };
+               3F0369652F2B604800F3CB95 /* [CP] Embed Pods Frameworks */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                               "${PODS_ROOT}/Target Support Files/Pods-playboy/Pods-playboy-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+                       );
+                       inputPaths = (
+                       );
+                       name = "[CP] Embed Pods Frameworks";
+                       outputFileListPaths = (
+                               "${PODS_ROOT}/Target Support Files/Pods-playboy/Pods-playboy-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-playboy/Pods-playboy-frameworks.sh\"\n";
+                       showEnvVarsInLog = 0;
+               };
                3FD1DFE62F0E00BF00A62733 /* [CP] Check Pods Manifest.lock */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-frameworks.sh\"\n";
                        showEnvVarsInLog = 0;
                };
+               B5B3AFE4385DEF6B27A9A30F /* [CP] Copy Pods Resources */ = {
+                       isa = PBXShellScriptBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       inputFileListPaths = (
+                               "${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-resources-${CONFIGURATION}-input-files.xcfilelist",
+                       );
+                       inputPaths = (
+                       );
+                       name = "[CP] Copy Pods Resources";
+                       outputFileListPaths = (
+                               "${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-resources-${CONFIGURATION}-output-files.xcfilelist",
+                       );
+                       outputPaths = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+                       shellPath = /bin/sh;
+                       shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ShenYin/Pods-ShenYin-resources.sh\"\n";
+                       showEnvVarsInLog = 0;
+               };
                FEE3A20D8A2FA81E622C488B /* [CP] Check Pods Manifest.lock */ = {
                        isa = PBXShellScriptBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               3F03695E2F2B604800F3CB95 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                3F887B982E38D8DC00C98658 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXTargetDependency section */
+               3F03695B2F2B604800F3CB95 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 0D54E0EE2F0A61E600A80EE7 /* DeepChordsSdk */;
+                       targetProxy = 3F03695C2F2B604800F3CB95 /* PBXContainerItemProxy */;
+               };
                3FD1DFE42F0E00BF00A62733 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 0D54E0EE2F0A61E600A80EE7 /* DeepChordsSdk */;
                        };
                        name = Release;
                };
+               3F0369692F2B604800F3CB95 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 0BF087E24C77C8FC87DA7D4C /* Pods-playboy.debug.xcconfig */;
+                       buildSettings = {
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+                               CODE_SIGN_ENTITLEMENTS = ShenYin/ShenYin.entitlements;
+                               CODE_SIGN_IDENTITY = "Apple Development";
+                               CODE_SIGN_STYLE = Automatic;
+                               CURRENT_PROJECT_VERSION = 1000;
+                               DEVELOPMENT_TEAM = G23X75CJ67;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(PROJECT_DIR)",
+                                       "$(PROJECT_DIR)/ShenYin/Ota",
+                                       "$(PROJECT_DIR)/DeepChordsSdk",
+                                       "$(PROJECT_DIR)/ShenYin/Sdk/Ota",
+                                       "$(PROJECT_DIR)/ShenYin/Sdk/JoySdk",
+                                       "$(PROJECT_DIR)/ShenYin/Sdk/JoySdk/tool",
+                               );
+                               GENERATE_INFOPLIST_FILE = YES;
+                               INFOPLIST_FILE = "playboy copy-Info.plist";
+                               INFOPLIST_KEY_CFBundleDisplayName = PLAYBOY;
+                               INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
+                               INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "扫描附近蓝牙设备需要获得权限";
+                               INFOPLIST_KEY_NSCameraUsageDescription = "修改用户头像、提交意见反馈需要访问相册使用摄像头";
+                               INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "允许APP使用定位方便查找耳机";
+                               INFOPLIST_KEY_NSMicrophoneUsageDescription = "录音需要使用麦克风";
+                               INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "修改用户头像、提交意见反馈需要访问相册";
+                               INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+                               INFOPLIST_KEY_UILaunchStoryboardName = playboy.storyboard;
+                               INFOPLIST_KEY_UIMainStoryboardFile = Main;
+                               INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = UIInterfaceOrientationPortrait;
+                               INFOPLIST_KEY_UIUserInterfaceStyle = Light;
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                               );
+                               LIBRARY_SEARCH_PATHS = "$(inherited)";
+                               MARKETING_VERSION = 1.0.0;
+                               PRODUCT_BUNDLE_IDENTIFIER = com.deepchords.playboy;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               PROVISIONING_PROFILE_SPECIFIER = "";
+                               SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+                               SUPPORTS_MACCATALYST = NO;
+                               SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SWIFT_EMIT_LOC_STRINGS = YES;
+                               SWIFT_OBJC_BRIDGING_HEADER = "ShenYin/ShenYin-Bridging-Header.h";
+                               SWIFT_VERSION = 5.0;
+                               TARGETED_DEVICE_FAMILY = 1;
+                       };
+                       name = Debug;
+               };
+               3F03696A2F2B604800F3CB95 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 34AD41433DCDC288CFB8C5DA /* Pods-playboy.release.xcconfig */;
+                       buildSettings = {
+                               ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+                               ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+                               CODE_SIGN_ENTITLEMENTS = ShenYin/ShenYin.entitlements;
+                               CODE_SIGN_IDENTITY = "Apple Development";
+                               CODE_SIGN_STYLE = Automatic;
+                               CURRENT_PROJECT_VERSION = 1000;
+                               DEVELOPMENT_TEAM = G23X75CJ67;
+                               FRAMEWORK_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "$(PROJECT_DIR)",
+                                       "$(PROJECT_DIR)/ShenYin/Ota",
+                                       "$(PROJECT_DIR)/ShenYin/Sdk/Ota",
+                                       "$(PROJECT_DIR)/ShenYin/Sdk/JoySdk",
+                                       "$(PROJECT_DIR)/ShenYin/Sdk/JoySdk/tool",
+                                       "$(PROJECT_DIR)/DeepChordsSdk",
+                               );
+                               GENERATE_INFOPLIST_FILE = YES;
+                               INFOPLIST_FILE = "playboy copy-Info.plist";
+                               INFOPLIST_KEY_CFBundleDisplayName = PLAYBOY;
+                               INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
+                               INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "扫描附近蓝牙设备需要获得权限";
+                               INFOPLIST_KEY_NSCameraUsageDescription = "修改用户头像、提交意见反馈需要访问相册使用摄像头";
+                               INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "允许APP使用定位方便查找耳机";
+                               INFOPLIST_KEY_NSMicrophoneUsageDescription = "录音需要使用麦克风";
+                               INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "修改用户头像、提交意见反馈需要访问相册";
+                               INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+                               INFOPLIST_KEY_UILaunchStoryboardName = playboy.storyboard;
+                               INFOPLIST_KEY_UIMainStoryboardFile = Main;
+                               INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = UIInterfaceOrientationPortrait;
+                               INFOPLIST_KEY_UIUserInterfaceStyle = Light;
+                               IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+                               LD_RUNPATH_SEARCH_PATHS = (
+                                       "$(inherited)",
+                                       "@executable_path/Frameworks",
+                               );
+                               LIBRARY_SEARCH_PATHS = "$(inherited)";
+                               MARKETING_VERSION = 1.0.0;
+                               PRODUCT_BUNDLE_IDENTIFIER = com.deepchords.playboy;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               PROVISIONING_PROFILE_SPECIFIER = "";
+                               SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+                               SUPPORTS_MACCATALYST = NO;
+                               SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+                               SWIFT_EMIT_LOC_STRINGS = YES;
+                               SWIFT_OBJC_BRIDGING_HEADER = "ShenYin/ShenYin-Bridging-Header.h";
+                               SWIFT_OPTIMIZATION_LEVEL = "-O";
+                               SWIFT_VERSION = 5.0;
+                               TARGETED_DEVICE_FAMILY = 1;
+                       };
+                       name = Release;
+               };
                3F887BB02E38D8DD00C98658 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        baseConfigurationReference = 5F5DE5910965D53C2B3405B0 /* Pods-ShenYin.debug.xcconfig */;
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               3F0369682F2B604800F3CB95 /* Build configuration list for PBXNativeTarget "playboy copy" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               3F0369692F2B604800F3CB95 /* Debug */,
+                               3F03696A2F2B604800F3CB95 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                3F887B972E38D8DC00C98658 /* Build configuration list for PBXProject "ShenYin" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
index 0e753dc..3332c6d 100644 (file)
@@ -17,9 +17,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
         guard let _ = (scene as? UIWindowScene) else { return }
         
         App.shared.window = window
-        AppLaunch.start()
-//        MapManager.shared.setupSdk()
-//        window?.rootViewController = UINavigationController(rootViewController: RSChatVC())
+//        AppLaunch.start()
+        MapManager.shared.setupSdk()
+        window?.rootViewController = UINavigationController(rootViewController: SportSetVC())
     }
 
     func sceneDidDisconnect(_ scene: UIScene) {
index b388c31..a89ee81 100644 (file)
@@ -217,12 +217,12 @@ extension CCBleManager{
     
     func connectPeripheral(_ peripheral: DCPeripheral) {
         connectPeripheral = peripheral
-        if let name = peripheral.device.name,name.hasPrefix("AI") {
-            CCDevice.isJoy = false
-        }
-        else{
-            CCDevice.isJoy = true
-        }
+//        if let name = peripheral.device.name,name.hasPrefix("AI") {
+//            CCDevice.isJoy = false
+//        }
+//        else{
+//            CCDevice.isJoy = true
+//        }
         CCDevice.initSdk()
         Logger.debug(peripheral.device.name ?? "","连接中...")
         centralManager.connect(peripheral.device, options: [CBConnectPeripheralOptionEnableTransportBridgingKey:true])
index 18e73f6..535fc20 100644 (file)
@@ -5,44 +5,44 @@
 //  Created by liangshi on 2026/1/28.
 //
 
-//class CCConfig{
-//    static var appLanguage = AppSupportLanguage.english
-//    
-//    static let wxAppID = "wxd9d677e0024caa90"
-//    static let wxUniversalLink = "https://dc-cloud-pub.tos-cn-guangzhou.volces.com/app/"
-//    static let appStoreLink = "https://itunes.apple.com/cn/app/6752551504?mt=8"
-//    /// 版本检测
-//    static let appStoreVersionURL = "https://itunes.apple.com/cn/lookup?id=6752551504"
-//    
-//    /// 服务器地址
-//    //    static let baseURL = "http://118.145.178.188:32000"
-//    static let baseURL = "https://app-api.deepchords.com"
-//    //海外版
-//    //    static let baseURL = "https://app-api.deepchords-ai.com"
-//    
-//    /// 用户隐私协议地址
-//    static let yonghuBaseURL = "https://pub-tos.deepchords.com"
-//}
-//
-//
-
-
 class CCConfig{
     static var appLanguage = AppSupportLanguage.english
-
+    
     static let wxAppID = "wxd9d677e0024caa90"
-    static let wxUniversalLink = "https://www.playboykq.com/app/"
-    /// 通用链接
-    //    https://dc-cloud-pub.tos-cn-guangzhou.volces.com/apple-app-site-association
+    static let wxUniversalLink = "https://dc-cloud-pub.tos-cn-guangzhou.volces.com/app/"
     static let appStoreLink = "https://itunes.apple.com/cn/app/6752551504?mt=8"
     /// 版本检测
     static let appStoreVersionURL = "https://itunes.apple.com/cn/lookup?id=6752551504"
-
+    
     /// 服务器地址
-    static let baseURL = "https://app-api.playboykq.com"
-
-//    https://pub-cdn.playboykq.com/protocol/cn/yonghuxieyi.html
+    //    static let baseURL = "http://118.145.178.188:32000"
+    static let baseURL = "https://app-api.deepchords.com"
+    //海外版
+    //    static let baseURL = "https://app-api.deepchords-ai.com"
+    
     /// 用户隐私协议地址
-    static let yonghuBaseURL = "https://pub-cdn.playboykq.com"
-
+    static let yonghuBaseURL = "https://pub-tos.deepchords.com"
 }
+
+
+
+
+//class CCConfig{
+//    static var appLanguage = AppSupportLanguage.english
+//
+//    static let wxAppID = "wxd9d677e0024caa90"
+//    static let wxUniversalLink = "https://www.playboykq.com/app/"
+//    /// 通用链接
+//    //    https://dc-cloud-pub.tos-cn-guangzhou.volces.com/apple-app-site-association
+//    static let appStoreLink = "https://itunes.apple.com/cn/app/6752551504?mt=8"
+//    /// 版本检测
+//    static let appStoreVersionURL = "https://itunes.apple.com/cn/lookup?id=6752551504"
+//
+//    /// 服务器地址
+//    static let baseURL = "https://app-api.playboykq.com"
+//
+////    https://pub-cdn.playboykq.com/protocol/cn/yonghuxieyi.html
+//    /// 用户隐私协议地址
+//    static let yonghuBaseURL = "https://pub-cdn.playboykq.com"
+//
+//}
index a2dee20..a9b6ec1 100644 (file)
@@ -14,7 +14,7 @@ class DcSdkManager{
     func initSdk(){
         DcCall.shared.start()
         DCSdk.shared.initSDK()
-        DCLogger.isDebug = true
+        DCLogger.isDebug = false
         DCSdk.shared.authCallback = {[weak self] (code,msg)in
             DCLogger.debug(code,msg)
             guard let self = self else{return}
index 1db3c4e..49edccd 100644 (file)
@@ -49,7 +49,7 @@ extension AboutVC:UITableViewDelegate,UITableViewDataSource {
 
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = CustomCell.cell(withTableView: tableView, indexPath: indexPath)
-        cell.type = list[indexPath.section][indexPath.row]
+        cell.titleLabel.text = list[indexPath.section][indexPath.row].title
         let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
         if indexPath.row == 0 {
             cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 12, height: 12))
@@ -60,7 +60,7 @@ extension AboutVC:UITableViewDelegate,UITableViewDataSource {
         else{
             cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
         }
-        if cell.type == .revoke {
+        if list[indexPath.section][indexPath.row] == .revoke {
             cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 12, height: 12))
 
         }
index 1809ed8..8116b4b 100644 (file)
@@ -61,7 +61,7 @@ extension AccountSetVC:UITableViewDelegate,UITableViewDataSource {
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = CustomCell.cell(withTableView: tableView, indexPath: indexPath)
         let list = list[indexPath.section].list
-        cell.type = list[indexPath.row]
+        cell.titleLabel.text = list[indexPath.row].title
         let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
         if indexPath.row == 0 {
             cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 12, height: 12))
index d74f9c9..ac61392 100644 (file)
@@ -8,7 +8,6 @@
 import UIKit
 class MoreSetVC: BaseVC{
     let tableView = UITableView(frame: .zero, style: .plain)
-//    let list:[CustomCellType] = [.notice,.system]
     let list:[CustomCellType] = [.system]
 
     let switchBtn = CustomButton()
@@ -107,7 +106,7 @@ extension MoreSetVC:UITableViewDelegate,UITableViewDataSource {
     }
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = CustomCell.cell(withTableView: tableView, indexPath: indexPath)
-        cell.type = list[indexPath.row]
+        cell.titleLabel.text = list[indexPath.row].title
         let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
         if indexPath.row == 0 {
             cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 12, height: 12))
index 092b53c..3798dd2 100644 (file)
@@ -5,15 +5,6 @@
 //  Created by liangshi on 2025/8/25.
 //
 public enum CustomCellType: Int {
-    case avatar
-    case nickName
-    case gender
-    case birthday
-    case height
-    case weight
-    case hobbies
-    case area
-         
     case account
     case phone
     case email
@@ -47,23 +38,7 @@ public enum CustomCellType: Int {
     
     var title:String{
         switch self {
-        case .avatar:
-            return "头像".l10n
-        case .nickName:
-            return "昵称".l10n
-        case .gender:
-            return "性别".l10n
-        case .birthday:
-            return "生日".l10n
-        case .height:
-            return "身高".l10n
-        case .weight:
-            return "体重".l10n
-        case .hobbies:
-            return "运动偏好".l10n
-        case .area:
-            return "国家与地区".l10n
-            
+       
         case .account:
             return "账号密码".l10n
         case .phone:
@@ -130,36 +105,6 @@ class CustomCell: BaseTableViewCell {
     let valueIcon = UIImageView()
     let valueLabel = UILabel()
     
-    var type:CustomCellType = .area{
-        didSet{
-            titleLabel.text = type.title
-            valueIcon.isHidden = type != .avatar
-            
-            if type == .nickName || type == .gender || type == .area {
-                valueLabel.isHidden = false
-            }
-            else{
-                valueLabel.isHidden = true
-            }
-            let info = CacheManager.shared.user.info
-            if type == .nickName {
-                valueLabel.text = info.userName
-            }
-            else if type == .gender {
-                //1表示男,0表示女,2表示保密
-                valueLabel.text = info.gender.title
-            }
-            else if type == .area {
-//                valueLabel.text = info.countryName
-                valueLabel.text = info.cacheCountryName
-            }
-            else if type == .avatar{
-                valueIcon.kf.setImage(with:CacheManager.shared.user.info.avatar.yc.asUrl )
-            }
-        }
-    }
-
-    
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
     }
@@ -229,79 +174,4 @@ class CustomCell: BaseTableViewCell {
 
 
 
-class SwitchCell: BaseTableViewCell {
-    let bgView = UIView()
-    let titleLabel = UILabel()
-    let detailLabel = UILabel()
-    let iSwitch = UISwitch()
-    var hasDetail:Bool = true{
-        didSet{
-            detailLabel.isHidden = !hasDetail
-            if hasDetail {
-                titleLabel.snp.makeConstraints { (m) in
-                    m.top.equalToSuperview().inset(16)
-                    m.left.equalToSuperview().offset(16)
-                }
-            }
-            else{
-                titleLabel.snp.makeConstraints { (m) in
-                    m.centerY.equalToSuperview()
-                    m.left.equalToSuperview().offset(16)
-                }
-                
-            }
-        }
-    }
-    
-    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-    
-    required init?(coder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
-    }
-    override func setupViews() {
-        contentView.addSubview(bgView)
-        bgView.addSubviews([titleLabel,detailLabel,iSwitch])
-        
-        backgroundColor = .color(.bgColor)
-        contentView.backgroundColor = .clear
-        selectionStyle = .none
-        bgView.do { v in
-            v.backgroundColor = .color(.cellBg)
-        }
-        titleLabel.do { (v) in
-            v.textColor = .color(.first)
-            v.font = .bold(14)
-            v.textAlignment = .left
-        }
-        detailLabel.do { (v) in
-            v.textColor = .color(.secondary)
-            v.font = .regular(10)
-            v.textAlignment = .left
-            v.isHidden = !hasDetail
-        }
-    }
-    
-    override func setupLayout() {
-        bgView.snp.makeConstraints { (m) in
-            m.left.right.equalToSuperview().inset(18)
-            m.top.equalToSuperview()
-            m.bottom.equalToSuperview()
-        }
-        titleLabel.snp.makeConstraints { (m) in
-            m.top.equalToSuperview().inset(16)
-            m.left.equalToSuperview().offset(16)
-        }
-        detailLabel.snp.makeConstraints { (m) in
-            m.bottom.equalToSuperview().inset(16)
-            m.left.equalToSuperview().offset(16)
-        }
-        iSwitch.snp.makeConstraints { (m) in
-            m.width.equalTo(50)
-            m.height.equalToSuperview()
-            m.right.equalToSuperview().inset(15)
-            m.centerY.equalToSuperview()
-        }
-    }
-}
+
index 00f4f51..4f5b527 100644 (file)
 ////  Created by liangshi on 2025/7/30.
 ////
 //
-//import UIKit
-//
-//public enum UserInfoCellType: Int {
-//    case avatar
-//    case nickName
-//    case gender
-//    case area
-//    
-//    
-//    case account
-//    case phone
-//    case email
-//    case thirdLogin
-//    
-//    case deregister
-//    
-//    var title:String{
-//        switch self {
-//        case .avatar:
-//            return "头像"
-//        case .nickName:
-//            return "昵称"
-//        case .gender:
-//            return "性别"
-//        case .area:
-//            return "国家与地区"
-//            
-//        case .account:
-//            return "账号密码"
-//        case .phone:
-//            return "安全手机"
-//        case .email:
-//            return "安全邮箱"
-//        case .thirdLogin:
-//            return "第三方账号"
-//           
-//        
-//        case .deregister:
-//            return "注销账号"
-//        }
-//    }
-//    
-//}
-//
-//
-//class UserInfoCell: BaseTableViewCell {
-//    let bgView = UIView()
-//    let icon = UIImageView()
-//    let titleLabel = UILabel()
-//    let valueLabel = UILabel()
-//    let nextIcon = UIImageView()
-//    
-//    var type:UserInfoCellType = .avatar{
-//        didSet{
-//            titleLabel.text = type.title
-//            valueLabel.text = "1111"
-//        }
-//    }
-//    
-//    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-//        super.init(style: style, reuseIdentifier: reuseIdentifier)
-//    }
-//    
-//    required init?(coder: NSCoder) {
-//        fatalError("init(coder:) has not been implemented")
-//    }
-//    override func setupViews() {
-//        contentView.addSubview(bgView)
-//        bgView.addSubviews([titleLabel,icon,valueLabel,nextIcon])
-//        
-//        backgroundColor = .clear
-//        contentView.backgroundColor = .clear
-//        selectionStyle = .none
-//        bgView.do { v in
-//            v.backgroundColor = UIColor.black.withAlphaComponent(0.04)
-//            v.layer.borderColor = UIColor.black.withAlphaComponent(0.1).cgColor
-//            v.layer.borderWidth = 0.5
-//            v.layer.cornerRadius = 12
-//            v.layer.masksToBounds = true
-//        }
-//        titleLabel.do { (v) in
-//            v.textColor = .white
-//            v.font = .medium(16)
-//            v.textAlignment = .left
-//        }
-//        valueLabel.do { (v) in
-//            v.textColor = .black.withAlphaComponent(0.8)
-//            v.font = .medium(14)
-//            v.textAlignment = .right
-//        }
-//        nextIcon.image = UIImage(named: "arrow_next")
-//    }
-//    
-//    override func setupLayout() {
-//        bgView.snp.makeConstraints { (m) in
-//            m.left.right.equalToSuperview().inset(15)
-//            m.top.equalToSuperview().inset(6)
-//            m.bottom.equalToSuperview().inset(6)
-//            m.height.equalTo(52)
-//        }
-//        nextIcon.snp.makeConstraints { (m) in
-//            m.width.equalTo(20)
-//            m.height.equalTo(20)
-//            m.right.equalToSuperview().inset(15)
-//            m.centerY.equalToSuperview()
-//        }
-//        icon.snp.makeConstraints { (m) in
-//            m.width.equalTo(46)
-//            m.height.equalTo(46)
-//            m.right.equalToSuperview().inset(40)
-//            m.centerY.equalToSuperview()
-//        }
-//        titleLabel.snp.makeConstraints { (m) in
-//            m.centerY.equalTo(icon)
-//            m.left.equalToSuperview().inset(15)
-//            m.height.equalToSuperview()
-//        }
-//        valueLabel.snp.makeConstraints { (m) in
-//            m.centerY.equalTo(icon)
-//            m.right.equalToSuperview().inset(40)
-//            m.height.equalToSuperview()
-//        }
-//
-//    }
-//}
-//
-//class UserInfoImageCell: BaseTableViewCell {
-//    let bgView = UIView()
-//    let icon = UIImageView()
-//    let titleLabel = UILabel()
-//    let nextIcon = UIImageView()
-//    let imgPicker = ImagePickerManager()
-//
-//    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-//        super.init(style: style, reuseIdentifier: reuseIdentifier)
-//    }
-//    
-//    required init?(coder: NSCoder) {
-//        fatalError("init(coder:) has not been implemented")
-//    }
-//    override func setupViews() {
-//        contentView.addSubview(bgView)
-//        bgView.addSubviews([titleLabel,icon,nextIcon])
-//        
-//        backgroundColor = .clear
-//        contentView.backgroundColor = .clear
-//        selectionStyle = .none
-//        bgView.do { v in
-//            v.backgroundColor = UIColor.black.withAlphaComponent(0.04)
-//            v.layer.borderColor = UIColor.black.withAlphaComponent(0.1).cgColor
-//            v.layer.borderWidth = 0.5
-//            v.layer.cornerRadius = 12
-//            v.layer.masksToBounds = true
-//            v.yc.addTap(target: self, action:#selector(pickImageAction ))
-//        }
-//        titleLabel.do { (v) in
-//            v.textColor = .white
-//            v.font = .medium(16)
-//            v.textAlignment = .left
-//            v.text = "头像"
-//        }
-//        icon.do { v in
-//            v.yc.setCornerRadius(23)
-//            v.backgroundColor = .black.withAlphaComponent(0.5)
-//        }
-//        nextIcon.image = UIImage(named: "arrow_next")
-//    }
-//    
-//    override func setupLayout() {
-//        bgView.snp.makeConstraints { (m) in
-//            m.left.right.equalToSuperview().inset(15)
-//            m.top.equalToSuperview().inset(6)
-//            m.bottom.equalToSuperview().inset(6)
-//            m.height.equalTo(72)
-//        }
-//        nextIcon.snp.makeConstraints { (m) in
-//            m.width.equalTo(20)
-//            m.height.equalTo(20)
-//            m.right.equalToSuperview().inset(15)
-//            m.centerY.equalToSuperview()
-//        }
-//        icon.snp.makeConstraints { (m) in
-//            m.width.equalTo(46)
-//            m.height.equalTo(46)
-//            m.right.equalToSuperview().inset(40)
-//            m.centerY.equalToSuperview()
-//        }
-//        titleLabel.snp.makeConstraints { (m) in
-//            m.centerY.equalTo(icon)
-//            m.left.equalToSuperview().inset(15)
-//            m.height.equalToSuperview()
-//        }
-//        
-//    }
-//    
-//    @objc func pickImageAction() -> Void {
-//        imgPicker.showImagePicker(from: App.shared.topVC()) {[weak self] image in
-//            guard let self = self else { return  }
-//            icon.image = image
-//        }
-//    }
-//}
-//
+public enum UserInfoCellType: Int {
+    case avatar
+    case nickName
+    case gender
+    case birthday
+    case height
+    case weight
+    case hobbies
+    case area
+
+    var title:String{
+        switch self {
+        case .avatar:
+            return "头像".l10n
+        case .nickName:
+            return "昵称".l10n
+        case .gender:
+            return "性别".l10n
+        case .birthday:
+            return "生日".l10n
+        case .height:
+            return "身高".l10n
+        case .weight:
+            return "体重".l10n
+        case .hobbies:
+            return "运动偏好".l10n
+        case .area:
+            return "国家与地区".l10n
+        }
+    }
+}
+
+
+class UserInfoCell: BaseTableViewCell {
+    let bgView = UIView()
+    let titleLabel = UILabel()
+    let nextIcon = UIImageView()
+    let valueIcon = UIImageView()
+    let valueLabel = UILabel()
+    
+    var type:UserInfoCellType = .area{
+        didSet{
+            titleLabel.text = type.title
+            valueIcon.isHidden = type != .avatar
+            
+            if type == .nickName || type == .gender || type == .area {
+                valueLabel.isHidden = false
+            }
+            else{
+                valueLabel.isHidden = true
+            }
+            let info = CacheManager.shared.user.info
+            if type == .nickName {
+                valueLabel.text = info.userName
+            }
+            else if type == .gender {
+                //1表示男,0表示女,2表示保密
+                valueLabel.text = info.gender.title
+            }
+            else if type == .area {
+                //                valueLabel.text = info.countryName
+                valueLabel.text = info.cacheCountryName
+            }
+            else if type == .avatar{
+                valueIcon.kf.setImage(with:CacheManager.shared.user.info.avatar.yc.asUrl )
+            }
+        }
+    }
+    
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+    }
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    override func setupViews() {
+        contentView.addSubview(bgView)
+        bgView.addSubviews([titleLabel,nextIcon,valueIcon,valueLabel])
+        
+        backgroundColor = .color(.bgColor)
+        contentView.backgroundColor = .clear
+        selectionStyle = .none
+        bgView.do { v in
+            v.backgroundColor = .color(.cellBg)
+        }
+        titleLabel.do { (v) in
+            
+            v.textColor = .color(.first)
+            v.font = .bold(14)
+            v.textAlignment = .left
+        }
+        valueLabel.do { v in
+            v.textColor = .color(.secondary)
+            v.font = .regular(14)
+            v.textAlignment = .right
+        }
+        valueIcon.do { v in
+            v.yc.setCornerRadius(12)
+            v.image = UIImage(named: "logo_2")
+            v.isHidden = true
+        }
+        nextIcon.image = UIImage(named: "arrow_next")
+    }
+    
+    override func setupLayout() {
+        bgView.snp.makeConstraints { (m) in
+            m.left.right.equalToSuperview().inset(18)
+            m.top.equalToSuperview()
+            m.bottom.equalToSuperview()
+        }
+        titleLabel.snp.makeConstraints { (m) in
+            m.centerY.equalToSuperview()
+            m.left.equalToSuperview().offset(16)
+            m.height.equalToSuperview()
+        }
+        nextIcon.snp.makeConstraints { (m) in
+            m.width.equalTo(8)
+            m.height.equalTo(12)
+            m.right.equalToSuperview().inset(15)
+            m.centerY.equalToSuperview()
+        }
+        valueIcon.snp.makeConstraints { (m) in
+            m.size.equalTo(24)
+            m.right.equalToSuperview().inset(38)
+            m.centerY.equalToSuperview()
+        }
+        valueLabel.snp.makeConstraints { (m) in
+            m.centerY.equalToSuperview()
+            m.right.equalToSuperview().inset(38)
+            m.height.equalToSuperview()
+            m.left.equalToSuperview().inset(90)
+        }
+    }
+}
index c0742e0..45e7ad0 100644 (file)
@@ -8,7 +8,7 @@
 import UIKit
 class UserInfoVC: BaseVC{
     let tableView = UITableView(frame: .zero, style: .plain)
-    let list:[CustomCellType] = [.avatar,.nickName,.gender,.birthday,.height,.weight,.hobbies,.area]
+    var list:[UserInfoCellType] = []
     let imgPicker = ImagePickerManager()
     
     override func viewDidLoad() {
@@ -24,7 +24,7 @@ class UserInfoVC: BaseVC{
             v.rowHeight = 52
             v.sectionHeaderHeight = 52
             v.separatorStyle = .none
-            v.register(CustomCell.self, forCellReuseIdentifier: CustomCell.reuseID)
+            v.register(UserInfoCell.self, forCellReuseIdentifier: UserInfoCell.reuseID)
         }
         view.addSubview(tableView)
     }
@@ -38,7 +38,15 @@ class UserInfoVC: BaseVC{
         super.viewWillAppear(animated)
         refreshUI()
     }
-    
+    override func setupData() {
+        if CCDevice.isJoy {
+            list = [.avatar,.nickName,.gender,.birthday,.height,.weight,.hobbies,.area]
+        }
+        else{
+            list = [.avatar,.nickName,.gender,.area]
+        }
+        tableView.reloadData()
+    }
 }
 
     extension UserInfoVC:UITableViewDelegate,UITableViewDataSource {
@@ -47,7 +55,7 @@ class UserInfoVC: BaseVC{
         }
 
         func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-            let cell = CustomCell.cell(withTableView: tableView, indexPath: indexPath)
+            let cell = UserInfoCell.cell(withTableView: tableView, indexPath: indexPath)
             cell.type = list[indexPath.row]
             let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
             if indexPath.row == 0 {
@@ -85,8 +93,6 @@ class UserInfoVC: BaseVC{
             case .hobbies:
                 hobiesAction()
                 break
-            default:
-                break
             }
         }
     }
diff --git a/ShenYin/ShenYin/UI/Sport/Sport/Set/SportSetCell.swift b/ShenYin/ShenYin/UI/Sport/Sport/Set/SportSetCell.swift
new file mode 100644 (file)
index 0000000..d0bd882
--- /dev/null
@@ -0,0 +1,319 @@
+//
+//  Untitled.swift
+//  ShenYin
+//
+//  Created by liangshi on 2026/1/23.
+//
+
+
+public enum SportSetCellType: Int {
+    case light
+    case voiceReport
+    case lcReport
+    case lcReportRate
+    case xlfdReport
+    case guideReport
+    case guideReportSet
+    case metronome
+    case metronomeRate
+    case metronomeAudio
+    case background
+    case permisson
+    case realData
+    
+    var title:String{
+        switch self {
+        case .light:
+            return "灯带设置".l10n
+        case .voiceReport:
+            return "语音播报".l10n
+        case .lcReport:
+            return "里程播报".l10n
+        case .lcReportRate:
+            return "里程播报频次".l10n
+        case .xlfdReport:
+            return "训练分段播报".l10n
+        case .guideReport:
+            return "指导播报".l10n
+        case .guideReportSet:
+            return "指导语音设置".l10n
+        case .metronome:
+            return "节拍器".l10n
+        case .metronomeRate:
+            return "节拍器频率".l10n
+        case .metronomeAudio:
+            return "节拍器声音".l10n
+        case .background:
+            return "后台保护".l10n
+        case .permisson:
+            return "运动权限".l10n
+        case .realData:
+            return "运动实况".l10n
+        }
+    }
+    var detail:String{
+        switch self {
+        case .lcReport:
+            return "当前已跑里程播报".l10n
+        case .xlfdReport:
+            return "训练分段开始和结束提示音".l10n
+        case .guideReport:
+            return "跑步过程中的指导语音".l10n
+        case .realData:
+            return "组内成员基本运动信息实时显示".l10n
+        default:
+            return ""
+        }
+    }
+    var showSwitch:Bool{
+        switch self {
+        case .voiceReport,.lcReport,.xlfdReport,.guideReport,.metronome,.background,.realData:
+            return true
+        default:
+            return false
+        }
+    }
+}
+
+protocol SportSetCellDelegate:NSObject{
+    func sportSetCellSwitchAction(cell:SportSetCell)
+}
+class SportSetCell: BaseTableViewCell {
+    let bgView = UIView()
+    let titleLabel = UILabel()
+    let detailLabel = UILabel()
+    let valueLabel = UILabel()
+    let iSwitch = UISwitch()
+    let nextIcon = UIImageView(image: UIImage(named: "arrow_next"))
+    let line = UIView()
+    weak var delegate:SportSetCellDelegate?
+    var model:SportSetModel!{
+        didSet{
+            switch type {
+            case .light:
+                break
+            case .voiceReport:
+                iSwitch.isOn = model.voiceReport
+            case .lcReport:
+                iSwitch.isOn = model.lcReport
+                
+            case .lcReportRate:
+                valueLabel.text = model.lcReportRate
+            case .xlfdReport:
+                iSwitch.isOn = model.xlfdReport
+            case .guideReport:
+                iSwitch.isOn = model.guideReport
+            case .guideReportSet:
+                valueLabel.text = model.guideReportSet
+            case .metronome:
+                iSwitch.isOn = model.metronome
+            case .metronomeRate:
+                valueLabel.text = model.metronomeRate
+            case .metronomeAudio:
+                valueLabel.text = model.metronomeAudio
+            case .background:
+                iSwitch.isOn = model.background
+            case .permisson:
+                break
+            case .realData:
+                iSwitch.isOn = model.realData
+            }
+            
+            if type == .lcReport {
+                line.isHidden  = model.lcReport
+            }
+            else if type == .guideReport {
+                line.isHidden  = model.guideReport
+            }
+            else if type == .metronome {
+                line.isHidden  = model.metronome
+            }
+            else if type == .permisson || type == .realData || type == .metronomeRate{
+                line.isHidden = true
+            }
+            else{
+                line.isHidden = false
+            }
+        }
+    }
+    
+    var type:SportSetCellType = .light{
+        didSet{
+            titleLabel.text = type.title
+            detailLabel.text = type.detail
+            iSwitch.isHidden = !type.showSwitch
+            nextIcon.isHidden = !iSwitch.isHidden
+            
+            if type.detail.isEmpty {
+                titleLabel.snp.remakeConstraints { (m) in
+                    m.centerY.equalToSuperview()
+                    m.left.equalToSuperview().offset(16)
+                }
+            }
+            else{
+                titleLabel.snp.remakeConstraints { (m) in
+                    m.top.equalToSuperview().inset(16)
+                    m.left.equalToSuperview().offset(16)
+                }
+            }
+            
+            if type == .metronomeRate || type == .metronomeAudio {
+                valueLabel.isHidden = false
+            }
+            else{
+                valueLabel.isHidden = true
+            }
+        }
+    }
+
+    
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+    }
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    override func setupViews() {
+        contentView.addSubview(bgView)
+        bgView.addSubviews([titleLabel,detailLabel,iSwitch,nextIcon,valueLabel,line])
+        
+        backgroundColor = .color(.bgColor)
+        contentView.backgroundColor = .clear
+        selectionStyle = .none
+        bgView.do { v in
+            v.backgroundColor = .color(.cellBg)
+            v.yc.addTap(target: self, action: #selector(tapAction))
+        }
+        titleLabel.do { (v) in
+            v.textColor = .color(.first)
+            v.font = .bold(14)
+            v.textAlignment = .left
+        }
+        detailLabel.do { (v) in
+            v.textColor = .color(.secondary)
+            v.font = .regular(10)
+            v.textAlignment = .left
+        }
+        iSwitch.do { v in
+//            v.backgroundColor = .red
+            v.addTarget(self, action: #selector(swicthAction), for: .valueChanged)
+        }
+        valueLabel.do { v in
+            v.textColor = .color(.secondary)
+            v.font = .regular(14)
+            v.textAlignment = .right
+        }
+        line.do { v in
+            v.backgroundColor = .color(.separateLine)
+        }
+    }
+    
+    override func setupLayout() {
+        bgView.snp.makeConstraints { (m) in
+            m.left.right.equalToSuperview().inset(18)
+            m.top.equalToSuperview()
+            m.bottom.equalToSuperview()
+        }
+        titleLabel.snp.makeConstraints { (m) in
+            m.top.equalToSuperview().inset(16)
+            m.left.equalToSuperview().offset(16)
+        }
+        detailLabel.snp.makeConstraints { (m) in
+            m.bottom.equalToSuperview().inset(16)
+            m.left.equalToSuperview().offset(16)
+        }
+        iSwitch.snp.makeConstraints { (m) in
+            m.right.equalToSuperview().inset(15)
+            m.centerY.equalToSuperview()
+        }
+        nextIcon.snp.makeConstraints { (m) in
+            m.width.equalTo(8)
+            m.height.equalTo(12)
+            m.right.equalToSuperview().inset(15)
+            m.centerY.equalToSuperview()
+        }
+        valueLabel.snp.makeConstraints { (m) in
+            m.centerY.equalToSuperview()
+            m.right.equalToSuperview().inset(38)
+            m.height.equalToSuperview()
+            m.left.equalToSuperview().inset(90)
+        }
+        line.snp.makeConstraints { make in
+            make.left.right.equalToSuperview().inset(18)
+            make.bottom.equalToSuperview()
+            make.height.equalTo(0.4)
+        }
+    }
+    @objc func tapAction(){
+        switch type {
+        case .lcReportRate:
+            lcReportAction()
+            break
+        case .guideReportSet:
+            guideReportSetAction()
+            break
+        case .metronomeRate:
+            metronomeRateAction()
+            break
+        case .metronomeAudio:
+            metronomeAudioAction()
+            break
+        
+        case .background:
+            backgroundAction()
+            break
+        default:
+            break
+        }
+    }
+    func lcReportAction(){
+        let list = Array(stride(from: 500, to: 1500, by: 500)).map { String($0) + "m" }
+        let v = CustomPicker2(title: "选择播报间距".l10n, list:list )
+        v.selectedIndex = 50
+        v.show()
+        v.didSelected = {[weak self] (index,value) in
+            guard let self = self else { return  }
+            
+        }
+    }
+    func guideReportSetAction(){
+        let list = [
+            CustomPickerModel(title: "详细".l10n, detail: "1公里配速、总平均配速、1公里用时、总运动时长".l10n),
+            CustomPickerModel(title: "简洁".l10n, detail: "1公里配速、1公里用时".l10n),
+            CustomPickerModel(title: "极简".l10n, detail: "总距离、总时长".l10n)]
+        let v = CustomPicker4(title: "指导语音密度".l10n, list:list )
+        v.selectedIndex = 0
+        v.show()
+        v.didSelected = {[weak self] (index,value) in
+            guard let self = self else { return  }
+
+        }
+    }
+    func metronomeRateAction(){
+        let list = Array(stride(from: 100, to: 250, by: 1)).map { String($0) + "次/分钟".l10n }
+        let v = CustomPicker2(title: "节拍器频率".l10n, list:list )
+        v.selectedIndex = 50
+        v.show()
+        v.didSelected = {[weak self] (index,value) in
+            guard let self = self else { return  }
+            
+        }
+    }
+    func metronomeAudioAction(){
+        let list = ["默认".l10n,"清脆".l10n,"重击".l10n]
+        let v = CustomPicker2(title: "节拍器声音".l10n, list:list )
+        v.selectedIndex = 50
+        v.show()
+        v.didSelected = {[weak self] (index,value) in
+            guard let self = self else { return  }
+            
+        }
+    }
+    func backgroundAction(){
+
+    }
+    @objc func swicthAction(){
+        delegate?.sportSetCellSwitchAction(cell: self)
+    }
+}
diff --git a/ShenYin/ShenYin/UI/Sport/Sport/Set/SportSetModel.swift b/ShenYin/ShenYin/UI/Sport/Sport/Set/SportSetModel.swift
new file mode 100644 (file)
index 0000000..0310fa4
--- /dev/null
@@ -0,0 +1,22 @@
+//
+//  SportSetModel.swift
+//  ShenYin
+//
+//  Created by liangshi on 2026/1/30.
+//
+
+class SportSetModel{
+    var light = ""
+    var voiceReport = true
+    var lcReport = false
+    var lcReportRate = ""
+    var xlfdReport  = false
+    var guideReport = false
+    var guideReportSet = ""
+    var metronome  = false
+    var metronomeRate = ""
+    var metronomeAudio = ""
+    var background  = false
+    var permisson = ""
+    var realData  = false
+}
index 49c1ad1..fa88a06 100644 (file)
@@ -9,7 +9,8 @@
 import UIKit
 class SportSetVC: BaseVC{
     let tableView = UITableView(frame: .zero, style: .plain)
-    let list:[(title:String,list:[CustomCellType])] = [("".l10n,[.light,.voiceReport,.lcReport,.xlfdReport,.guideReport,.metronome,.metronomeRate,.metronomeAudio,.background,.permisson]),("组队设置".l10n,[.realData]),]
+    var list:[[SportSetCellType]] = [[.light],[.voiceReport],[.lcReport],[.xlfdReport],[.guideReport],[.metronome],[.background],[.permisson],[.realData]]
+    let model = SportSetModel()
     
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -21,10 +22,14 @@ class SportSetVC: BaseVC{
             v.backgroundColor = .color(.bgColor)
             v.delegate = self
             v.dataSource = self
-            v.rowHeight = 52
+            v.rowHeight = 65
             v.sectionHeaderHeight = 52
             v.separatorStyle = .none
-            v.register(CustomCell.self, forCellReuseIdentifier: CustomCell.reuseID)
+            v.register(SportSetCell.self, forCellReuseIdentifier: SportSetCell.reuseID)
+            v.register(CustomSectionHeader.self, forHeaderFooterViewReuseIdentifier: CustomSectionHeader.reuseID)
+            if #available(iOS 15.0, *) {
+                tableView.sectionHeaderTopPadding = 0
+            }
         }
         
         view.addSubview(tableView)
@@ -48,46 +53,95 @@ extension SportSetVC:UITableViewDelegate,UITableViewDataSource {
         return list.count
     }
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return list[section].list.count
+        return list[section].count
     }
     func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
-        let view = CustomSectionHeader.header(withTableView: tableView)
-        view.titleLabel.text = list[section].title
-        view.titleLabel.textColor = .color(.secondary)
-        return view
+        if section == list.count - 1 {
+            let view = CustomSectionHeader.header(withTableView: tableView)
+            view.titleLabel.text = "组队设置".l10n
+            view.titleLabel.textColor = .color(.secondary)
+            return view
+        }
+        else{
+            return nil
+        }
     }
     func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
-        if list[section].title.isEmpty {
-            return 0
+        if section == list.count - 1 {
+            return 52
         }
         else{
-            return 52
+            return 0
         }
     }
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = CustomCell.cell(withTableView: tableView, indexPath: indexPath)
-        let list = list[indexPath.section].list
-        cell.type = list[indexPath.row]
-        let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 52)
-        if indexPath.row == 0 {
+        let cell = SportSetCell.cell(withTableView: tableView, indexPath: indexPath)
+        cell.type = list[indexPath.section][indexPath.row]
+        cell.model = model
+        cell.delegate = self
+        let rect = CGRect(x: 0, y: 0, width: kScreenWid - 36, height: 65)
+        if cell.type == .light {
             cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 12, height: 12))
         }
-        else if indexPath.row == list.count - 1{
-            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 12, height: 12))
-        }
-        else{
-            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
-        }
-        if list.count == 1 {
-            cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 12, height: 12))
+        else {
+            if cell.type == .realData{
+                cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 12, height: 12))
+            }
+            else if cell.type == .permisson {
+                cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.bottomLeft,.bottomRight], cornerRadii: CGSize(width: 12, height: 12))
+            }
+            else{
+                cell.bgView.yc.setCorners(withRoundedRect: rect, roundingCorners: [.allCorners], cornerRadii: CGSize(width: 0, height: 0))
+            }
         }
+
         return cell
     }
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        let data = list[indexPath.section].list[indexPath.row]
+        let data = list[indexPath.section][indexPath.row]
         switch data {
         default:
             break
         }
     }
 }
+extension SportSetVC:SportSetCellDelegate {
+    func sportSetCellSwitchAction(cell:SportSetCell){
+        let state = cell.iSwitch.isOn
+        switch cell.type {
+        case .voiceReport:
+            model.voiceReport = state
+            tableView.reloadData()
+            break
+        case .lcReport:
+            model.lcReport = state
+            list[2] = state ? [.lcReport,.lcReportRate]:[.lcReport]
+            tableView.reloadData()
+            break
+        case .xlfdReport:
+            model.xlfdReport = state
+            tableView.reloadData()
+            break
+        case .guideReport:
+            model.guideReport = state
+            list[4] = state ? [.guideReport,.guideReportSet]:[.guideReport]
+            tableView.reloadData()
+            break
+        case .metronome:
+            model.metronome = state
+            list[5] = state ? [.metronome,.metronomeRate,.metronomeAudio]:[.metronome]
+            tableView.reloadData()
+            break
+        case .background:
+            model.background = state
+            tableView.reloadData()
+            break
+        case .realData:
+            model.realData = state
+            tableView.reloadData()
+            break
+        default:
+            break
+        }
+    }
+}
diff --git a/ShenYin/ShenYin/UI/Sport/Sport/Set/SwitchCell.swift b/ShenYin/ShenYin/UI/Sport/Sport/Set/SwitchCell.swift
deleted file mode 100644 (file)
index b0501b7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-//
-//  Untitled.swift
-//  ShenYin
-//
-//  Created by liangshi on 2026/1/23.
-//
-
-
diff --git a/ShenYin/ShenYin/UI/common/pop/CustomPicker4.swift b/ShenYin/ShenYin/UI/common/pop/CustomPicker4.swift
new file mode 100644 (file)
index 0000000..4873072
--- /dev/null
@@ -0,0 +1,207 @@
+//
+//  CustomPicker44.swift
+//  ShenYin
+//
+//  Created by liangshi on 2026/1/30.
+//
+
+import UIKit
+
+class CustomPickerModel{
+    var title = ""
+    var detail = ""
+    init(title: String = "", detail: String = "") {
+        self.title = title
+        self.detail = detail
+    }
+}
+
+class CustomPicker4: BasePresentView {
+    private let titleLabel = UILabel()
+    private let btn = UIButton(type: .custom)
+    private let tableView = UITableView(frame: .zero, style: .plain)
+    var list:[CustomPickerModel] = []
+//    var disableTitle:String = ""{
+//        didSet{
+//            tableView.reloadData()
+//        }
+//    }
+    var selectedIndex = 0{
+        didSet{
+            tableView.reloadData()
+        }
+    }
+    var didSelected: ((Int,CustomPickerModel)->Void)?
+    private var title:String = ""
+    
+    init(title:String,list:[CustomPickerModel]) {
+        self.title = title
+        self.list = list
+        var h =  CGFloat(50 + list.count*65) + kSafeBtm
+        
+        if h > kScreenHei - kSafeBtm - kCusNavBtm - 50{
+            h = kScreenHei - kSafeBtm - kCusNavBtm - 50
+            tableView.isScrollEnabled = true
+        }
+        else{
+            tableView.isScrollEnabled = false
+        }
+        super.init(contentHeight:h)
+    }
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override func setupSubView() {
+        super.setupSubView()
+        contentView.addSubviews([titleLabel,btn,tableView])
+    }
+    override func setupLayout() {
+        super.setupLayout()
+        titleLabel.snp.makeConstraints { (m) in
+            m.top.equalToSuperview()
+            m.left.right.equalToSuperview().inset(60)
+            m.height.equalTo(50)
+        }
+        btn.snp.makeConstraints { (m) in
+            m.centerY.equalTo(titleLabel)
+            m.right.equalToSuperview()
+            m.size.equalTo(60)
+        }
+        tableView.snp.makeConstraints { make in
+            make.left.right.bottom.equalToSuperview()
+            make.top.equalToSuperview().inset(50)
+        }
+    }
+    
+    override func setupStyle() {
+        super.setupStyle()
+        contentView.backgroundColor = .color(.cellBg)
+        titleLabel.do { (v) in
+            v.textColor = .color(.secondary)
+            v.font = .semiBold(16)
+            v.textAlignment = .center
+            v.text = title
+        }
+        btn.do { v in
+            v.setImage(UIImage(named: "close_icon"), for: .normal)
+            v.addTarget(self, action: #selector(closeAction), for: .touchUpInside)
+        }
+        tableView.do { v in
+            v.backgroundColor = .color(.cellBg)
+            v.delegate = self
+            v.dataSource = self
+            v.rowHeight = 65
+            v.separatorStyle = .none
+            v.register(CustomButton.SelectCell.self, forCellReuseIdentifier: CustomButton.SelectCell.reuseID)
+        }
+    }
+    @objc func closeAction(){
+        hide()
+    }
+}
+extension CustomPicker4:UITableViewDelegate,UITableViewDataSource {
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return list.count
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = CustomButton.SelectCell.cell(withTableView: tableView, indexPath: indexPath)
+        cell.titleLabel.text = list[indexPath.row].title
+        cell.detailLabel.text = list[indexPath.row].detail
+        cell.selectedIcon.isHidden = selectedIndex != indexPath.row
+//        cell.enable = list[indexPath.row] != disableTitle
+        return cell
+    }
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+//        if list[indexPath.row] == disableTitle {
+//            return
+//        }
+        selectedIndex = indexPath.row
+        tableView.reloadData()
+        didSelected?(selectedIndex,list[selectedIndex])
+        hide()
+    }
+}
+
+fileprivate extension CustomButton {
+    class SelectCell: BaseTableViewCell {
+        let bgView = UIView()
+        let titleLabel = UILabel()
+        let detailLabel = UILabel()
+        let selectedIcon = UIImageView()
+        let line = UIView()
+
+        var enable:Bool = true{
+            didSet{
+                if enable{
+                    titleLabel.textColor = .color(.first)
+                }
+                else{
+                    titleLabel.textColor = .color(.secondary)
+                }
+            }
+        }
+        override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+            super.init(style: style, reuseIdentifier: reuseIdentifier)
+        }
+        
+        required init?(coder: NSCoder) {
+            fatalError("init(coder:) has not been implemented")
+        }
+        override func setupViews() {
+            contentView.addSubview(bgView)
+            bgView.addSubviews([titleLabel,detailLabel,selectedIcon,line])
+            
+            backgroundColor = .color(.bgColor)
+            contentView.backgroundColor = .clear
+            selectionStyle = .none
+            bgView.do { v in
+                v.backgroundColor = .color(.cellBg)
+            }
+            titleLabel.do { (v) in
+                v.textColor = .color(.first)
+                v.font = .bold(14)
+                v.textAlignment = .left
+            }
+            detailLabel.do { (v) in
+                v.textColor = .color(.secondary)
+                v.font = .regular(10)
+                v.textAlignment = .left
+            }
+            selectedIcon.image = UIImage(named: "cell_selected")
+            line.do { v in
+                v.backgroundColor = .color(.separateLine)
+            }
+        }
+        
+        override func setupLayout() {
+            bgView.snp.makeConstraints { (m) in
+                m.left.right.equalToSuperview()
+                m.top.equalToSuperview()
+                m.bottom.equalToSuperview()
+            }
+            selectedIcon.snp.makeConstraints { (m) in
+                m.width.equalTo(21)
+                m.height.equalTo(16)
+                m.right.equalToSuperview().inset(21)
+                m.centerY.equalToSuperview()
+            }
+            titleLabel.snp.makeConstraints { (m) in
+                m.top.equalToSuperview().inset(16)
+                m.left.equalToSuperview().offset(24)
+            }
+            detailLabel.snp.makeConstraints { (m) in
+                m.bottom.equalToSuperview().inset(16)
+                m.left.equalToSuperview().offset(24)
+            }
+            line.snp.makeConstraints { make in
+                make.left.right.equalToSuperview().inset(18)
+                make.bottom.equalToSuperview()
+                make.height.equalTo(0.4)
+            }
+        }
+    }
+    
+}
diff --git a/ShenYin/playboy copy-Info.plist b/ShenYin/playboy copy-Info.plist
new file mode 100644 (file)
index 0000000..9f4fb07
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleURLTypes</key>
+       <array>
+               <dict>
+                       <key>CFBundleTypeRole</key>
+                       <string>Editor</string>
+                       <key>CFBundleURLName</key>
+                       <string>weixin</string>
+                       <key>CFBundleURLSchemes</key>
+                       <array>
+                               <string>wxf19317f23b00d8ab</string>
+                       </array>
+               </dict>
+       </array>
+       <key>LSApplicationQueriesSchemes</key>
+       <array>
+               <string>weixin</string>
+               <string>weixinURLParamsAPI</string>
+               <string>weixinULAPI</string>
+       </array>
+       <key>NSAppTransportSecurity</key>
+       <dict>
+               <key>NSAllowsArbitraryLoads</key>
+               <true/>
+       </dict>
+       <key>UIApplicationSceneManifest</key>
+       <dict>
+               <key>UIApplicationSupportsMultipleScenes</key>
+               <false/>
+               <key>UISceneConfigurations</key>
+               <dict>
+                       <key>UIWindowSceneSessionRoleApplication</key>
+                       <array>
+                               <dict>
+                                       <key>UISceneConfigurationName</key>
+                                       <string>Default Configuration</string>
+                                       <key>UISceneDelegateClassName</key>
+                                       <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
+                                       <key>UISceneStoryboardFile</key>
+                                       <string>Main</string>
+                               </dict>
+                       </array>
+               </dict>
+       </dict>
+       <key>UIBackgroundModes</key>
+       <array>
+               <string>bluetooth-peripheral</string>
+               <string>bluetooth-central</string>
+               <string>audio</string>
+       </array>
+       <key>UIStatusBarStyle</key>
+       <string>UIStatusBarStyleLightContent</string>
+       <key>UIViewControllerBasedStatusBarAppearance</key>
+       <true/>
+</dict>
+</plist>
index 4e4b133..52aaa18 100644 (file)
@@ -51,9 +51,9 @@ target 'ShenYin' do
   pod 'HorizonCalendar'#日历
 
   #高德地图
-#  pod 'AMap3DMap-NO-IDFA', '10.0.700'
-#  pod 'AMapLocation-NO-IDFA'
-#  pod 'AMapSearch-NO-IDFA', '9.7.0'
+  pod 'AMap3DMap-NO-IDFA', '10.0.700'
+  pod 'AMapLocation-NO-IDFA'
+  pod 'AMapSearch-NO-IDFA', '9.7.0'
   
 end