fix
杨锴
2024-10-09 2e91ee1387ef545ecef49230f2024b89b2f82a58
fix
35个文件已修改
5个文件已添加
21980 ■■■■ 已修改文件
Podfile 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Podfile.lock 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Manifest.lock 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Pods.xcodeproj/project.pbxproj 20552 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Pods.xcodeproj/xcuserdata/yvkd.xcuserdatad/xcschemes/xcschememanagement.plist 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-acknowledgements.markdown 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-acknowledgements.plist 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks-Debug-input-files.xcfilelist 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks-Debug-output-files.xcfilelist 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks-Release-input-files.xcfilelist 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks-Release-output-files.xcfilelist 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks.sh 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse.debug.xcconfig 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse.release.xcconfig 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse.xcodeproj/project.pbxproj 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/launchScreen.imageset/Contents.json 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/launchScreen.imageset/launchScreen@2x.jpg 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Base.lproj/LaunchScreen.storyboard 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Config/Def.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Config/InPurchaseManager.swift 305 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Config/Types.swift 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Config/XQMuseStoreKit.storekit 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Home/HomeVC.swift 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Login/LoginVC.swift 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Login/VC/UpdatePhoneVC.swift 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Login/VC/UpdatePhoneVC.xib 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Me/VC/ContactCustomerVC.swift 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Me/VC/ContactCustomerVC.xib 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Me/VC/VIPCenterVC.swift 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Me/VC/VIPCenterVC.xib 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Me/VC/WalletRechargeVC.swift 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Me/VC/WalletRechargeVC.xib 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Network/Models.swift 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/Network/Services.swift 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/VC/TreeTeskEnergyExchangeVC.swift 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/VC/TreeTeskEnergyExchangeVC.xib 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/View/TreeTeskExchangeSuccessView.swift 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/View/TreeTeskExchangeSuccessView.xib 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/SceneDelegate.swift 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/XQMuse.entitlements 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Podfile
@@ -18,5 +18,6 @@
  pod 'WechatOpenSDK-XCFramework' # 微信开放平台组件
  pod 'CryptoSwift','1.8.3' # 常用加密算法
    pod 'APNGKit', '~> 2.3.0'
  pod 'SwiftyStoreKit','~> 0.16.1'
end
Podfile.lock
@@ -382,6 +382,7 @@
  - SwifterSwift/SwiftStdlib (6.2.0)
  - SwifterSwift/UIKit (6.2.0)
  - SwifterSwift/WebKit (6.2.0)
  - SwiftyStoreKit (0.16.1)
  - TZImagePickerController (3.8.7):
    - TZImagePickerController/Basic (= 3.8.7)
    - TZImagePickerController/Location (= 3.8.7)
@@ -408,6 +409,7 @@
  - SPPageMenu
  - SVProgressHUD
  - SwifterSwift
  - SwiftyStoreKit (~> 0.16.1)
  - WechatOpenSDK-XCFramework
SPEC REPOS:
@@ -437,6 +439,7 @@
    - SPPageMenu
    - SVProgressHUD
    - SwifterSwift
    - SwiftyStoreKit
    - TZImagePickerController
    - UserDefaultsStore
    - VTMagic
@@ -474,12 +477,13 @@
  SPPageMenu: da182aafcec55719d5c326103cc7716c1e48f311
  SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22
  SwifterSwift: dd00873fb09cde19da88bdb2878f9fe70fe27b0f
  SwiftyStoreKit: 6b9c08810269f030586dac1fae8e75871a82e84a
  TZImagePickerController: 5f35bb7266552e36ca834bafa955b869fe086124
  UserDefaultsStore: 905e30372ff432197d199ce1f6fe51be7bf69628
  VTMagic: b49e5f456dbcbfd9a3588ba92417233a105bc193
  WechatOpenSDK-XCFramework: 36fb2bea0754266c17184adf4963d7e6ff98b69f
  XCGLogger: 399c5885210b4e2ad79d9f7a29b105d672ef724f
PODFILE CHECKSUM: 60bfc4685b8b1d679e0a17e9b4032aced522a1ac
PODFILE CHECKSUM: 311e42a924c068d0394ead7c0c5aec3efd964b1b
COCOAPODS: 1.15.2
Pods/Manifest.lock
@@ -382,6 +382,7 @@
  - SwifterSwift/SwiftStdlib (6.2.0)
  - SwifterSwift/UIKit (6.2.0)
  - SwifterSwift/WebKit (6.2.0)
  - SwiftyStoreKit (0.16.1)
  - TZImagePickerController (3.8.7):
    - TZImagePickerController/Basic (= 3.8.7)
    - TZImagePickerController/Location (= 3.8.7)
@@ -408,6 +409,7 @@
  - SPPageMenu
  - SVProgressHUD
  - SwifterSwift
  - SwiftyStoreKit (~> 0.16.1)
  - WechatOpenSDK-XCFramework
SPEC REPOS:
@@ -437,6 +439,7 @@
    - SPPageMenu
    - SVProgressHUD
    - SwifterSwift
    - SwiftyStoreKit
    - TZImagePickerController
    - UserDefaultsStore
    - VTMagic
@@ -474,12 +477,13 @@
  SPPageMenu: da182aafcec55719d5c326103cc7716c1e48f311
  SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22
  SwifterSwift: dd00873fb09cde19da88bdb2878f9fe70fe27b0f
  SwiftyStoreKit: 6b9c08810269f030586dac1fae8e75871a82e84a
  TZImagePickerController: 5f35bb7266552e36ca834bafa955b869fe086124
  UserDefaultsStore: 905e30372ff432197d199ce1f6fe51be7bf69628
  VTMagic: b49e5f456dbcbfd9a3588ba92417233a105bc193
  WechatOpenSDK-XCFramework: 36fb2bea0754266c17184adf4963d7e6ff98b69f
  XCGLogger: 399c5885210b4e2ad79d9f7a29b105d672ef724f
PODFILE CHECKSUM: 60bfc4685b8b1d679e0a17e9b4032aced522a1ac
PODFILE CHECKSUM: 311e42a924c068d0394ead7c0c5aec3efd964b1b
COCOAPODS: 1.15.2
Pods/Pods.xcodeproj/project.pbxproj
Diff too large
Pods/Pods.xcodeproj/xcuserdata/yvkd.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -8,330 +8,241 @@
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>5</integer>
        </dict>
        <key>APNGKit.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>4</integer>
        </dict>
        <key>Alamofire-Alamofire.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>1</integer>
        </dict>
        <key>Alamofire.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>0</integer>
        </dict>
        <key>AliyunOSSiOS-AliyunOSSiOS_Privacy.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>3</integer>
        </dict>
        <key>AliyunOSSiOS.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>2</integer>
        </dict>
        <key>CryptoSwift-CryptoSwift.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>7</integer>
        </dict>
        <key>CryptoSwift.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>6</integer>
        </dict>
        <key>Delegate.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>8</integer>
        </dict>
        <key>Differentiator.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>9</integer>
        </dict>
        <key>EmptyDataSet-Swift.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>10</integer>
        </dict>
        <key>FFPage.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>11</integer>
        </dict>
        <key>HandyJSON.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>12</integer>
        </dict>
        <key>IQKeyboardManager-IQKeyboardManager.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>14</integer>
        </dict>
        <key>IQKeyboardManager.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>13</integer>
        </dict>
        <key>IQKeyboardManagerSwift-IQKeyboardManagerSwift.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>16</integer>
        </dict>
        <key>IQKeyboardManagerSwift.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>15</integer>
        </dict>
        <key>JQTools-JQToolsRes.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>18</integer>
        </dict>
        <key>JQTools.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>17</integer>
        </dict>
        <key>Lantern.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>19</integer>
        </dict>
        <key>MJRefresh-MJRefresh.Privacy.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>21</integer>
        </dict>
        <key>MJRefresh.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>20</integer>
        </dict>
        <key>ObjcExceptionBridging-ObjcExceptionBridging.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>23</integer>
        </dict>
        <key>ObjcExceptionBridging.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>22</integer>
        </dict>
        <key>ObjectMapper-Privacy.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>25</integer>
        </dict>
        <key>ObjectMapper.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>24</integer>
        </dict>
        <key>Pods-XQMuse.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>26</integer>
        </dict>
        <key>QMUIKit-QMUIResources.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>28</integer>
        </dict>
        <key>QMUIKit.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>27</integer>
        </dict>
        <key>RxCocoa.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>29</integer>
        </dict>
        <key>RxDataSources.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>30</integer>
        </dict>
        <key>RxRelay.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>31</integer>
        </dict>
        <key>RxSwift.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>32</integer>
        </dict>
        <key>SDWebImage-SDWebImage.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>34</integer>
        </dict>
        <key>SDWebImage.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>33</integer>
        </dict>
        <key>SPPageMenu.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>37</integer>
        </dict>
        <key>SVProgressHUD.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>38</integer>
        </dict>
        <key>SnapKit-SnapKit_Privacy.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>36</integer>
        </dict>
        <key>SnapKit.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>35</integer>
        </dict>
        <key>SwifterSwift-SwifterSwift_Privacy.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>40</integer>
        </dict>
        <key>SwifterSwift.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>39</integer>
        </dict>
        <key>SwiftyStoreKit.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
        </dict>
        <key>TZImagePickerController.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>41</integer>
        </dict>
        <key>UserDefaultsStore.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>42</integer>
        </dict>
        <key>VTMagic.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>43</integer>
        </dict>
        <key>WechatOpenSDK-XCFramework.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>44</integer>
        </dict>
        <key>XCGLogger-XCGLogger.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>46</integer>
        </dict>
        <key>XCGLogger.xcscheme</key>
        <dict>
            <key>isShown</key>
            <false/>
            <key>orderHint</key>
            <integer>45</integer>
        </dict>
    </dict>
    <key>SuppressBuildableAutocreation</key>
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-acknowledgements.markdown
@@ -950,6 +950,17 @@
THE SOFTWARE.
## SwiftyStoreKit
Copyright (c) 2015-2016 Andrea Bizzotto bizz84@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
## TZImagePickerController
The MIT License (MIT)
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-acknowledgements.plist
@@ -1113,6 +1113,23 @@
        </dict>
        <dict>
            <key>FooterText</key>
            <string>Copyright (c) 2015-2016 Andrea Bizzotto bizz84@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</string>
            <key>License</key>
            <string>MIT</string>
            <key>Title</key>
            <string>SwiftyStoreKit</string>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
        </dict>
        <dict>
            <key>FooterText</key>
            <string>The MIT License (MIT)
Copyright (c) 2016 Zhen Tan
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks-Debug-input-files.xcfilelist
@@ -25,6 +25,7 @@
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
${BUILT_PRODUCTS_DIR}/SwifterSwift/SwifterSwift.framework
${BUILT_PRODUCTS_DIR}/SwiftyStoreKit/SwiftyStoreKit.framework
${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework
${BUILT_PRODUCTS_DIR}/UserDefaultsStore/UserDefaultsStore.framework
${BUILT_PRODUCTS_DIR}/VTMagic/VTMagic.framework
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks-Debug-output-files.xcfilelist
@@ -24,6 +24,7 @@
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwifterSwift.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyStoreKit.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TZImagePickerController.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UserDefaultsStore.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VTMagic.framework
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks-Release-input-files.xcfilelist
@@ -25,6 +25,7 @@
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
${BUILT_PRODUCTS_DIR}/SwifterSwift/SwifterSwift.framework
${BUILT_PRODUCTS_DIR}/SwiftyStoreKit/SwiftyStoreKit.framework
${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework
${BUILT_PRODUCTS_DIR}/UserDefaultsStore/UserDefaultsStore.framework
${BUILT_PRODUCTS_DIR}/VTMagic/VTMagic.framework
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks-Release-output-files.xcfilelist
@@ -24,6 +24,7 @@
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwifterSwift.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyStoreKit.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TZImagePickerController.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UserDefaultsStore.framework
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VTMagic.framework
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse-frameworks.sh
@@ -202,6 +202,7 @@
  install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/SwifterSwift/SwifterSwift.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/SwiftyStoreKit/SwiftyStoreKit.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/UserDefaultsStore/UserDefaultsStore.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/VTMagic/VTMagic.framework"
@@ -234,6 +235,7 @@
  install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/SwifterSwift/SwifterSwift.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/SwiftyStoreKit/SwiftyStoreKit.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/TZImagePickerController/TZImagePickerController.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/UserDefaultsStore/UserDefaultsStore.framework"
  install_framework "${BUILT_PRODUCTS_DIR}/VTMagic/VTMagic.framework"
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse.debug.xcconfig
@@ -1,11 +1,11 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/APNGKit" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AliyunOSSiOS" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Delegate" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/EmptyDataSet-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/FFPage" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JQTools" "${PODS_CONFIGURATION_BUILD_DIR}/Lantern" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/QMUIKit" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SPPageMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwifterSwift" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_CONFIGURATION_BUILD_DIR}/UserDefaultsStore" "${PODS_CONFIGURATION_BUILD_DIR}/VTMagic" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger" "${PODS_ROOT}/WechatOpenSDK-XCFramework"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/APNGKit" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AliyunOSSiOS" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Delegate" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/EmptyDataSet-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/FFPage" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JQTools" "${PODS_CONFIGURATION_BUILD_DIR}/Lantern" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/QMUIKit" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SPPageMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwifterSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyStoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_CONFIGURATION_BUILD_DIR}/UserDefaultsStore" "${PODS_CONFIGURATION_BUILD_DIR}/VTMagic" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger" "${PODS_ROOT}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/APNGKit/APNGKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AliyunOSSiOS/AliyunOSSiOS.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Delegate/Delegate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/EmptyDataSet-Swift/EmptyDataSet_Swift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FFPage/FFPage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JQTools/JQTools.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Lantern/Lantern.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QMUIKit/QMUIKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SPPageMenu/SPPageMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwifterSwift/SwifterSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UserDefaultsStore/UserDefaultsStore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VTMagic/VTMagic.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger/XCGLogger.framework/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework/Headers"
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/APNGKit/APNGKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AliyunOSSiOS/AliyunOSSiOS.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Delegate/Delegate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/EmptyDataSet-Swift/EmptyDataSet_Swift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FFPage/FFPage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JQTools/JQTools.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Lantern/Lantern.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QMUIKit/QMUIKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SPPageMenu/SPPageMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwifterSwift/SwifterSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyStoreKit/SwiftyStoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UserDefaultsStore/UserDefaultsStore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VTMagic/VTMagic.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger/XCGLogger.framework/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework/Headers"
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework" "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
OTHER_LDFLAGS = $(inherited) -l"WechatOpenSDK" -l"c++" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "APNGKit" -framework "AVFoundation" -framework "Alamofire" -framework "AliyunOSSiOS" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreServices" -framework "CoreTelephony" -framework "CryptoSwift" -framework "Delegate" -framework "Differentiator" -framework "EmptyDataSet_Swift" -framework "FFPage" -framework "Foundation" -framework "HandyJSON" -framework "IQKeyboardManager" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "JQTools" -framework "Lantern" -framework "MJRefresh" -framework "ObjcExceptionBridging" -framework "ObjectMapper" -framework "Photos" -framework "PhotosUI" -framework "QMUIKit" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "SDWebImage" -framework "SPPageMenu" -framework "SVProgressHUD" -framework "Security" -framework "SnapKit" -framework "SwifterSwift" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "UserDefaultsStore" -framework "VTMagic" -framework "WebKit" -framework "XCGLogger"
OTHER_LDFLAGS = $(inherited) -l"WechatOpenSDK" -l"c++" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "APNGKit" -framework "AVFoundation" -framework "Alamofire" -framework "AliyunOSSiOS" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreServices" -framework "CoreTelephony" -framework "CryptoSwift" -framework "Delegate" -framework "Differentiator" -framework "EmptyDataSet_Swift" -framework "FFPage" -framework "Foundation" -framework "HandyJSON" -framework "IQKeyboardManager" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "JQTools" -framework "Lantern" -framework "MJRefresh" -framework "ObjcExceptionBridging" -framework "ObjectMapper" -framework "Photos" -framework "PhotosUI" -framework "QMUIKit" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "SDWebImage" -framework "SPPageMenu" -framework "SVProgressHUD" -framework "Security" -framework "SnapKit" -framework "SwifterSwift" -framework "SwiftyStoreKit" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "UserDefaultsStore" -framework "VTMagic" -framework "WebKit" -framework "XCGLogger"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
Pods/Target Support Files/Pods-XQMuse/Pods-XQMuse.release.xcconfig
@@ -1,11 +1,11 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/APNGKit" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AliyunOSSiOS" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Delegate" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/EmptyDataSet-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/FFPage" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JQTools" "${PODS_CONFIGURATION_BUILD_DIR}/Lantern" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/QMUIKit" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SPPageMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwifterSwift" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_CONFIGURATION_BUILD_DIR}/UserDefaultsStore" "${PODS_CONFIGURATION_BUILD_DIR}/VTMagic" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger" "${PODS_ROOT}/WechatOpenSDK-XCFramework"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/APNGKit" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/AliyunOSSiOS" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift" "${PODS_CONFIGURATION_BUILD_DIR}/Delegate" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/EmptyDataSet-Swift" "${PODS_CONFIGURATION_BUILD_DIR}/FFPage" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JQTools" "${PODS_CONFIGURATION_BUILD_DIR}/Lantern" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/QMUIKit" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SPPageMenu" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwifterSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyStoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_CONFIGURATION_BUILD_DIR}/UserDefaultsStore" "${PODS_CONFIGURATION_BUILD_DIR}/VTMagic" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger" "${PODS_ROOT}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/APNGKit/APNGKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AliyunOSSiOS/AliyunOSSiOS.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Delegate/Delegate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/EmptyDataSet-Swift/EmptyDataSet_Swift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FFPage/FFPage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JQTools/JQTools.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Lantern/Lantern.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QMUIKit/QMUIKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SPPageMenu/SPPageMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwifterSwift/SwifterSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UserDefaultsStore/UserDefaultsStore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VTMagic/VTMagic.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger/XCGLogger.framework/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework/Headers"
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/APNGKit/APNGKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/AliyunOSSiOS/AliyunOSSiOS.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CryptoSwift/CryptoSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Delegate/Delegate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/EmptyDataSet-Swift/EmptyDataSet_Swift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FFPage/FFPage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HandyJSON/HandyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManager/IQKeyboardManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JQTools/JQTools.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Lantern/Lantern.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/QMUIKit/QMUIKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SPPageMenu/SPPageMenu.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwifterSwift/SwifterSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyStoreKit/SwiftyStoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/UserDefaultsStore/UserDefaultsStore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/VTMagic/VTMagic.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger/XCGLogger.framework/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework/Headers"
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework" "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
OTHER_LDFLAGS = $(inherited) -l"WechatOpenSDK" -l"c++" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "APNGKit" -framework "AVFoundation" -framework "Alamofire" -framework "AliyunOSSiOS" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreServices" -framework "CoreTelephony" -framework "CryptoSwift" -framework "Delegate" -framework "Differentiator" -framework "EmptyDataSet_Swift" -framework "FFPage" -framework "Foundation" -framework "HandyJSON" -framework "IQKeyboardManager" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "JQTools" -framework "Lantern" -framework "MJRefresh" -framework "ObjcExceptionBridging" -framework "ObjectMapper" -framework "Photos" -framework "PhotosUI" -framework "QMUIKit" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "SDWebImage" -framework "SPPageMenu" -framework "SVProgressHUD" -framework "Security" -framework "SnapKit" -framework "SwifterSwift" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "UserDefaultsStore" -framework "VTMagic" -framework "WebKit" -framework "XCGLogger"
OTHER_LDFLAGS = $(inherited) -l"WechatOpenSDK" -l"c++" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "APNGKit" -framework "AVFoundation" -framework "Alamofire" -framework "AliyunOSSiOS" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreServices" -framework "CoreTelephony" -framework "CryptoSwift" -framework "Delegate" -framework "Differentiator" -framework "EmptyDataSet_Swift" -framework "FFPage" -framework "Foundation" -framework "HandyJSON" -framework "IQKeyboardManager" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "JQTools" -framework "Lantern" -framework "MJRefresh" -framework "ObjcExceptionBridging" -framework "ObjectMapper" -framework "Photos" -framework "PhotosUI" -framework "QMUIKit" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "SDWebImage" -framework "SPPageMenu" -framework "SVProgressHUD" -framework "Security" -framework "SnapKit" -framework "SwifterSwift" -framework "SwiftyStoreKit" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "UserDefaultsStore" -framework "VTMagic" -framework "WebKit" -framework "XCGLogger"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
XQMuse.xcodeproj/project.pbxproj
@@ -11,6 +11,7 @@
        1300BD3C2C6DFB1C000BCA5E /* VIPCenterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1300BD392C6DFB1C000BCA5E /* VIPCenterVC.swift */; };
        1304526A2CB4CA310049FB3A /* XQMuseStoreKit.storekit in Resources */ = {isa = PBXBuildFile; fileRef = 130452692CB4CA310049FB3A /* XQMuseStoreKit.storekit */; };
        1304526C2CB4CB210049FB3A /* StoreKitTestCertificate.cer in Resources */ = {isa = PBXBuildFile; fileRef = 1304526B2CB4CB210049FB3A /* StoreKitTestCertificate.cer */; };
        1304526F2CB4FF280049FB3A /* InPurchaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1304526E2CB4FF280049FB3A /* InPurchaseManager.swift */; };
        130602862C9178F60019ECDE /* TreeTeskExchangeSuccessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130602852C9178F60019ECDE /* TreeTeskExchangeSuccessView.swift */; };
        130602882C91790B0019ECDE /* TreeTeskExchangeSuccessView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130602872C91790B0019ECDE /* TreeTeskExchangeSuccessView.xib */; };
        1306028A2C917CD20019ECDE /* TreeTeskEnergyExchangeRecordVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130602892C917CD20019ECDE /* TreeTeskEnergyExchangeRecordVC.swift */; };
@@ -308,6 +309,8 @@
        1300BD3A2C6DFB1C000BCA5E /* VIPCenterVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = VIPCenterVC.xib; sourceTree = "<group>"; };
        130452692CB4CA310049FB3A /* XQMuseStoreKit.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = XQMuseStoreKit.storekit; sourceTree = "<group>"; };
        1304526B2CB4CB210049FB3A /* StoreKitTestCertificate.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = StoreKitTestCertificate.cer; sourceTree = "<group>"; };
        1304526D2CB4D1190049FB3A /* XQMuse.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = XQMuse.entitlements; sourceTree = "<group>"; };
        1304526E2CB4FF280049FB3A /* InPurchaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InPurchaseManager.swift; sourceTree = "<group>"; };
        130602852C9178F60019ECDE /* TreeTeskExchangeSuccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TreeTeskExchangeSuccessView.swift; sourceTree = "<group>"; };
        130602872C91790B0019ECDE /* TreeTeskExchangeSuccessView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TreeTeskExchangeSuccessView.xib; sourceTree = "<group>"; };
        130602892C917CD20019ECDE /* TreeTeskEnergyExchangeRecordVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TreeTeskEnergyExchangeRecordVC.swift; sourceTree = "<group>"; };
@@ -991,8 +994,6 @@
        13985D892C69B2410046B6DC = {
            isa = PBXGroup;
            children = (
                130452692CB4CA310049FB3A /* XQMuseStoreKit.storekit */,
                1304526B2CB4CB210049FB3A /* StoreKitTestCertificate.cer */,
                13985D942C69B2410046B6DC /* XQMuse */,
                13985D932C69B2410046B6DC /* Products */,
                59BB8FFC6411E59FAB177866 /* Pods */,
@@ -1011,6 +1012,7 @@
        13985D942C69B2410046B6DC /* XQMuse */ = {
            isa = PBXGroup;
            children = (
                1304526D2CB4D1190049FB3A /* XQMuse.entitlements */,
                13985DC92C69E9B60046B6DC /* Root */,
                13985DB32C69B7D40046B6DC /* Config */,
                13985DAE2C69B7B00046B6DC /* Base */,
@@ -1049,6 +1051,9 @@
        13985DB32C69B7D40046B6DC /* Config */ = {
            isa = PBXGroup;
            children = (
                1304526E2CB4FF280049FB3A /* InPurchaseManager.swift */,
                130452692CB4CA310049FB3A /* XQMuseStoreKit.storekit */,
                1304526B2CB4CB210049FB3A /* StoreKitTestCertificate.cer */,
                13A0A8A02C746ADA00DF08B6 /* Enums */,
                139C165F2C6A0FBB00A924D9 /* TestLeftRightCollectionViewFlowLayout.swift */,
                1336EFA42C6DEB550075E070 /* HoverHeaderFlowLayout.swift */,
@@ -1621,6 +1626,7 @@
                136C7C812C771CF3004540CD /* PayMusicVC.swift in Sources */,
                130F94662C7DAB27003A348B /* SearchHistoryCCell.swift in Sources */,
                139228AF2C6B836B006F3CB6 /* Popup_1_View.swift in Sources */,
                1304526F2CB4FF280049FB3A /* InPurchaseManager.swift in Sources */,
                1336EFA72C6DEC640075E070 /* PaymentOrderResultTopView.swift in Sources */,
                1324A64C2C80706700AA5098 /* PlanGuide_1_VC.swift in Sources */,
                13CBCCE32C747C3D00C67701 /* NoticeCenterUserRepeaceDetailVC.swift in Sources */,
@@ -1851,6 +1857,7 @@
            buildSettings = {
                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
                CODE_SIGN_ENTITLEMENTS = XQMuse/XQMuse.entitlements;
                CODE_SIGN_IDENTITY = "Apple Development";
                CODE_SIGN_STYLE = Automatic;
                CURRENT_PROJECT_VERSION = 1;
@@ -1893,6 +1900,7 @@
            buildSettings = {
                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
                CODE_SIGN_ENTITLEMENTS = XQMuse/XQMuse.entitlements;
                CODE_SIGN_IDENTITY = "Apple Development";
                CODE_SIGN_STYLE = Automatic;
                CURRENT_PROJECT_VERSION = 1;
XQMuse/Assets.xcassets/launchScreen.imageset/Contents.json
New file
@@ -0,0 +1,21 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "launchScreen@2x.jpg",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
XQMuse/Assets.xcassets/launchScreen.imageset/launchScreen@2x.jpg
XQMuse/Base.lproj/LaunchScreen.storyboard
@@ -1,8 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
@@ -11,15 +14,40 @@
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
                        <subviews>
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launchScreen" translatesAutoresizingMaskIntoConstraints="NO" id="MTa-Il-dP2">
                                <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
                            </imageView>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="备案号:1231231231123" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zWJ-TH-NSU">
                                <rect key="frame" x="106.00000000000001" y="793.66666666666663" width="181.33333333333337" height="19.333333333333371"/>
                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstItem="6Tk-OE-BBY" firstAttribute="bottom" secondItem="zWJ-TH-NSU" secondAttribute="bottom" constant="5" id="6gC-B5-qpe"/>
                            <constraint firstItem="MTa-Il-dP2" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="6qP-PH-xn1"/>
                            <constraint firstAttribute="bottom" secondItem="MTa-Il-dP2" secondAttribute="bottom" id="8PC-Kf-lOK"/>
                            <constraint firstItem="zWJ-TH-NSU" firstAttribute="centerX" secondItem="MTa-Il-dP2" secondAttribute="centerX" id="aEe-8n-eho"/>
                            <constraint firstItem="MTa-Il-dP2" firstAttribute="trailing" secondItem="6Tk-OE-BBY" secondAttribute="trailing" id="cbw-XJ-Oln"/>
                            <constraint firstItem="MTa-Il-dP2" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="gMR-H3-3Yf"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
            <point key="canvasLocation" x="52.671755725190835" y="374.64788732394368"/>
        </scene>
    </scenes>
    <resources>
        <image name="launchScreen" width="585" height="1266"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
XQMuse/Config/Def.swift
@@ -17,6 +17,7 @@
let app = UIApplication.shared.delegate as! AppDelegate
let locationTool = JQ_LocationTool.instance()
let ShareAppleKey = ""
var sceneDelegate:SceneDelegate? = {
                var uiScreen:UIScene?
XQMuse/Config/InPurchaseManager.swift
New file
@@ -0,0 +1,305 @@
//
//  StoreTransaction.swift
//  ExplorerProject
//
//  Created by 无故事王国 on 2024/4/1.
//  Copyright © 2024 younger_times. All rights reserved.
//
import SwiftyStoreKit
import StoreKit
import HandyJSON
struct PurchaseModel:HandyJSON{
    var environment: String?
    var receipt:PurchaseReceiptModel?
    var status: Int = 0
}
struct PurchaseReceiptModel:HandyJSON{
    var adam_id: Int = 0
    var app_item_id: Int = 0
    var application_version: Int = 0
    var bundle_id: String?
    var download_id: Int = 0
    var in_app = [PurchageInAppModel]()
    var original_application_version: String?
    var original_purchase_date: String?
    var original_purchase_date_ms: Int = 0
    var original_purchase_date_pst: String?
    var receipt_creation_date: String?
    var receipt_creation_date_ms: Int = 0
    var receipt_creation_date_pst: String?
    var receipt_type: String?
    var request_date: String?
    var request_date_ms: Int = 0
    var request_date_pst: String?
    var version_external_identifier: Int = 0
}
struct PurchageInAppModel:HandyJSON{
}
struct PurchaseResultModel:HandyJSON{
    var environment: String?
    var receipt: PurchaseReceipt?
    var status: Int = 0
}
struct PurchaseReceipt:HandyJSON{
    var adam_id: Int = 0
    var app_item_id: Int = 0
    var application_version: String?
    var bundle_id: String?
    var download_id: Int = 0
    var in_app = [PurchaseInAPP]()
    var original_application_version: String?
    var original_purchase_date: String?
    var original_purchase_date_ms: String?
    var original_purchase_date_pst: String?
    var receipt_creation_date: String?
    var receipt_creation_date_ms: String?
    var receipt_creation_date_pst: String?
    var receipt_type: String?
    var request_date: String?
    var request_date_ms: String?
    var request_date_pst: String?
    var version_external_identifier: Int = 0
}
struct PurchaseInAPP:HandyJSON{
    var in_app_ownership_type: String?
    var is_trial_period: String?
    var original_purchase_date: String?
    var original_purchase_date_ms: String?
    var original_purchase_date_pst: String?
    var original_transaction_id: String?
    var product_id: String?
    var purchase_date: String?
    var purchase_date_ms: String?
    var purchase_date_pst: String?
    var quantity: String?
    var transaction_id: String?
}
class InPurchaseManager:NSObject{
    private static var _sharedInstance: InPurchaseManager!
    private var productList = Set<String>()
    private(set) var products = Set<SKProduct>()
    @discardableResult
    public class func instance() -> InPurchaseManager {
        guard let instance = _sharedInstance else {
            _sharedInstance = InPurchaseManager()
            return _sharedInstance!
        }
        return instance
    }
    func setProductList(_ list:Set<String>,clouse:@escaping (Set<SKProduct>)->Void){
        productList = list
        SwiftyStoreKit.retrieveProductsInfo(list) { result in
            if result.retrievedProducts.count > 0 {
                InPurchaseManager._sharedInstance.products = result.retrievedProducts
                clouse(result.retrievedProducts)
            }
        }
    }
    func getIPAPrice(_ price:Int,clouse:@escaping (SKProduct)->Void){
        var ipaId = ""
        switch price {
            case 98: ipaId = "com.jkfitness.a.price.1"
            case 298:ipaId = "com.jkfitness.a.price.2"
            case 488:ipaId = "com.jkfitness.a.price.3"
            case 698:ipaId = "com.jkfitness.a.price.4"
            case 998:ipaId = "com.jkfitness.a.price.5"
            default:break
        }
        var productIds = Set<String>()
        productIds.insert(ipaId)
        InPurchaseManager.instance().setProductList(productIds) {products in
            if let product = products.first{
                clouse(product)
            }
        }
    }
    func dismiss(){
        InPurchaseManager._sharedInstance = nil
    }
    /// 购买
    /// - Parameters:
    ///   - ID: ID值
    ///   - quantity: 购买数量
    ///   - applicationUsername: 购买用户名的唯一标识
    class func purchaseProduct(ID:String,quantity:Int = 1,applicationUsername:String, completion: @escaping ( PurchaseResultModel) -> Void,errorClouse:@escaping (Error)->Void){
        var purcahseProduct:SKProduct?
        for product in _sharedInstance.products {
            if product.productIdentifier == ID{
                purcahseProduct = product;break
            }
        }
        guard let product = purcahseProduct else {return}
        var inSanbox:Bool = false
#if DEBUG
        inSanbox = true
#endif
        SwiftyStoreKit.completeTransactions { purchases in
            if let product = purchases.first{
                switch product.transaction.transactionState {
                    case .purchased:
                        alertSuccess(msg: "完成购买")
                    case .purchasing:
                        showHUD("购买中")
                    case .failed:
                        alertError(msg: "购买失败")
                    case .restored:
                        alertSuccess(msg: "恢复购买")
                    default:break
                }
            }
        }
        SwiftyStoreKit.purchaseProduct(product, quantity: quantity, atomically: true, applicationUsername: applicationUsername, simulatesAskToBuyInSandbox: false, paymentDiscount: nil) { result in
            switch result {
                case .success(let purchase):
                    var type:AppleReceiptValidator.VerifyReceiptURLType = .production
                    if inSanbox{
                        type = .sandbox
                    }
                    var recepit = AppleReceiptValidator(service: type, sharedSecret: nil)
                    SwiftyStoreKit.verifyReceipt(using: recepit) { result in
                        switch result {
                            case .success(let receipt):
                                if let  model = PurchaseResultModel.deserialize(from: receipt){
                                    completion(model)
                                }
                                break
                            case .error(let error):
                                errorClouse(error)
                                //                                                                                                                                print(error.localizedDescription)
                        }
                    }
                case .error(let error):
                    //                                                                                print(error.localizedDescription)
                    errorClouse(error)
            }
        }
    }
    /// 恢复购买
    class func resotrePurchase(applicationUsername:String, completion: @escaping ( PurchaseResultModel) -> Void,errorClouse:@escaping (Error)->Void){
        SwiftyStoreKit.completeTransactions { purchases in
            if let product = purchases.first{
                switch product.transaction.transactionState {
                    case .purchased:
                        alertSuccess(msg: "完成购买")
                    case .purchasing:
                        showHUD("购买中")
                    case .failed:
                        alertError(msg: "购买失败")
                    case .restored:
                        alertSuccess(msg: "恢复购买")
                    default:break
                }
            }
        }
        SwiftyStoreKit.restorePurchases(atomically: true, applicationUsername: applicationUsername) { result in
            if result.restoreFailedPurchases.count > 0 {
                //恢复失败
                print("restore Failed:\(result.restoredPurchases)")
            }else if result.restoredPurchases.count > 0 {
                print("restore Success")
                var inSanbox:Bool = false
#if DEBUG
                inSanbox = true
#endif
                var type:AppleReceiptValidator.VerifyReceiptURLType = .production
                if inSanbox{
                    type = .sandbox
                }
                let recepit = AppleReceiptValidator(service: type, sharedSecret: nil)
                SwiftyStoreKit.verifyReceipt(using: recepit) { result in
                    switch result {
                        case .success(let receipt):
                            if let  model = PurchaseResultModel.deserialize(from: receipt){
                                completion(model)
                            }
                            break
                        case .error(let error):
                            errorClouse(error)
                    }
                }
            }else{
                print("Nothing to Restore")
            }
        }
    }
    //获取APP 首次安装时间
    func test1(){
        let queue = DispatchQueue(label: "inapppurchasequeue")
        queue.async {
            let receiptURL = Bundle.main.appStoreReceiptURL
            guard receiptURL?.path != nil else { return }
            do {
                let receiptData = try Data(contentsOf: receiptURL!, options: .alwaysMapped)
                let base64EncodedReceipt = receiptData.base64EncodedString(options: [])
                var verifyReceipt:String = AppleReceiptValidator.VerifyReceiptURLType.sandbox.rawValue
#if !DEBUG
                verifyReceipt = AppleReceiptValidator.VerifyReceiptURLType.production.rawValue
#endif
                let purchaseURL = URL(string: verifyReceipt)!
                var request = URLRequest(url: purchaseURL)
                request.httpMethod = "POST"
                request.setValue("application/json", forHTTPHeaderField: "Content-Type")
                let jsonBody: [String: Any] = [
                    "receipt-data": base64EncodedReceipt,
                    "password": ShareAppleKey // 你的共享密钥
                ]
                let jsonData = try JSONSerialization.data(withJSONObject: jsonBody, options: [])
                request.httpBody = jsonData
                let session = URLSession.shared
                let task = session.dataTask(with: request) { (data, response, error) in
                    if let error = error {return}
                    guard let data = data else { return }
                    do {
                        if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
                            print(json)
                            if let purchageModel = PurchaseModel.deserialize(from: json),purchageModel.status == 0{
                            }
                        }
                    } catch {
                        print("JSON processing failed: \(error)")
                    }
                }
                task.resume()
            } catch {
                print("Error reading receipt data: \(error)")
            }
        }
    }
}
XQMuse/Config/Types.swift
@@ -12,6 +12,11 @@
                case pwd,code
}
enum ThreePlantformLoginType:Int{
    case wechat = 1
    case apple = 2
}
enum AgreementType:Int,HandyJSONEnum{
                case none = 0
                ///用户协议
XQMuse/Config/XQMuseStoreKit.storekit
New file
@@ -0,0 +1,247 @@
{
  "appPolicies" : {
    "eula" : "",
    "policies" : [
      {
        "locale" : "en_US",
        "policyText" : "",
        "policyURL" : ""
      }
    ]
  },
  "identifier" : "3D29D5F7",
  "nonRenewingSubscriptions" : [
    {
      "displayPrice" : "299",
      "familyShareable" : false,
      "internalID" : "7BDE4968",
      "localizations" : [
        {
          "description" : "购买一个月会员",
          "displayName" : "一个月会员",
          "locale" : "zh_CN"
        }
      ],
      "productID" : "com.XQMuse.VIP.month.0",
      "referenceName" : "购买一个月会员",
      "type" : "NonRenewingSubscription"
    },
    {
      "displayPrice" : "499",
      "familyShareable" : false,
      "internalID" : "DDDE321B",
      "localizations" : [
        {
          "description" : "购买6个月会员",
          "displayName" : "半年会员",
          "locale" : "zh_CN"
        }
      ],
      "productID" : "com.XQMuse.VIP.semester.0",
      "referenceName" : "购买半年会员",
      "type" : "NonRenewingSubscription"
    },
    {
      "displayPrice" : "499",
      "familyShareable" : false,
      "internalID" : "436E2DBE",
      "localizations" : [
        {
          "description" : "购买12个月会员",
          "displayName" : "年度会员",
          "locale" : "zh_CN"
        }
      ],
      "productID" : "com.XQMuse.VIP.year.0",
      "referenceName" : "购买年度会员",
      "type" : "NonRenewingSubscription"
    }
  ],
  "products" : [
    {
      "displayPrice" : "0.99",
      "familyShareable" : false,
      "internalID" : "521CE106",
      "localizations" : [
        {
          "description" : "购买10颗疗愈币",
          "displayName" : "10币",
          "locale" : "zh_CN"
        }
      ],
      "productID" : "com.XQMuse.p.0",
      "referenceName" : "充值10疗愈币",
      "type" : "Consumable"
    },
    {
      "displayPrice" : "1.99",
      "familyShareable" : false,
      "internalID" : "E7DC523B",
      "localizations" : [
        {
          "description" : "购买20颗疗愈币",
          "displayName" : "20币",
          "locale" : "zh_CN"
        }
      ],
      "productID" : "com.XQMuse.p.1",
      "referenceName" : "充值20疗愈币",
      "type" : "Consumable"
    },
    {
      "displayPrice" : "2.99",
      "familyShareable" : false,
      "internalID" : "6AD670BC",
      "localizations" : [
        {
          "description" : "购买50颗疗愈币",
          "displayName" : "50币",
          "locale" : "zh_CN"
        }
      ],
      "productID" : "com.XQMuse.p.2",
      "referenceName" : "充值50疗愈币",
      "type" : "Consumable"
    },
    {
      "displayPrice" : "3.99",
      "familyShareable" : false,
      "internalID" : "C8E195D0",
      "localizations" : [
        {
          "description" : "购买100颗疗愈币",
          "displayName" : "100币",
          "locale" : "zh_CN"
        }
      ],
      "productID" : "com.XQMuse.p.3",
      "referenceName" : "充值100疗愈币",
      "type" : "Consumable"
    }
  ],
  "settings" : {
    "_billingGracePeriodEnabled" : true,
    "_failTransactionsEnabled" : false,
    "_locale" : "zh_CN",
    "_storefront" : "CHN",
    "_storeKitErrors" : [
      {
        "current" : null,
        "enabled" : false,
        "name" : "Load Products"
      },
      {
        "current" : null,
        "enabled" : false,
        "name" : "Purchase"
      },
      {
        "current" : null,
        "enabled" : false,
        "name" : "Verification"
      },
      {
        "current" : {
          "index" : 2,
          "type" : "generic"
        },
        "enabled" : false,
        "name" : "App Store Sync"
      },
      {
        "current" : null,
        "enabled" : false,
        "name" : "Subscription Status"
      },
      {
        "current" : {
          "index" : 3,
          "type" : "generic"
        },
        "enabled" : false,
        "name" : "App Transaction"
      },
      {
        "current" : null,
        "enabled" : false,
        "name" : "Manage Subscriptions Sheet"
      },
      {
        "current" : null,
        "enabled" : false,
        "name" : "Refund Request Sheet"
      },
      {
        "current" : null,
        "enabled" : false,
        "name" : "Offer Code Redeem Sheet"
      }
    ]
  },
  "subscriptionGroups" : [
    {
      "id" : "1B73E9E9",
      "localizations" : [
      ],
      "name" : "Years",
      "subscriptions" : [
        {
          "adHocOffers" : [
            {
              "internalID" : "B4ECD233",
              "offerID" : "LAJ234QMZ5801AAC",
              "paymentMode" : "free",
              "referenceName" : "促销码",
              "subscriptionPeriod" : "P1Y"
            }
          ],
          "codeOffers" : [
            {
              "displayPrice" : "200",
              "eligibility" : [
                "existing",
                "expired",
                "new"
              ],
              "internalID" : "F62AF748",
              "isStackable" : true,
              "paymentMode" : "payUpFront",
              "referenceName" : "促销",
              "subscriptionPeriod" : "P6M"
            }
          ],
          "displayPrice" : "149",
          "familyShareable" : false,
          "groupNumber" : 1,
          "internalID" : "D8314451",
          "introductoryOffer" : {
            "displayPrice" : "0.99",
            "internalID" : "89D5DFC5",
            "paymentMode" : "free",
            "subscriptionPeriod" : "P3D"
          },
          "localizations" : [
            {
              "description" : "包年",
              "displayName" : "包年年度会员",
              "locale" : "zh_CN"
            }
          ],
          "productID" : "com.XQMuse.VIP.year.renewing.0",
          "recurringSubscriptionPeriod" : "P1Y",
          "referenceName" : "购买年度会员(持续订阅)",
          "subscriptionGroupID" : "1B73E9E9",
          "type" : "RecurringSubscription",
          "winbackOffers" : [
          ]
        }
      ]
    }
  ],
  "version" : {
    "major" : 4,
    "minor" : 0
  }
}
XQMuse/Root/Home/HomeVC.swift
@@ -196,12 +196,12 @@
                }
                @objc func settingvoiceAction(){
                                let vc = BackgroundVoiceVC()
                                push(vc: vc)
//                                let vc = BackgroundVoiceVC()
//                                push(vc: vc)
//                                 let nav = LoginNav(rootViewController: LoginVC())
//                                nav.modalPresentationStyle = .fullScreen
//                                present(nav, animated: true)
                                 let nav = LoginNav(rootViewController: LoginVC())
                                nav.modalPresentationStyle = .fullScreen
                                present(nav, animated: true)
                }
                @objc func jumpMoreAction(_ sender:UIButton){
XQMuse/Root/Login/LoginVC.swift
@@ -9,6 +9,7 @@
import JQTools
import RxRelay
import QMUIKit
import AuthenticationServices
class LoginViewModel{
@@ -42,6 +43,8 @@
                }
}
let LoginDismiss_Noti = Notification.Name.init("LoginDismiss_Noti")
class LoginVC: BaseVC {
                @IBOutlet weak var btn_loginByPwd: UIButton!
@@ -54,7 +57,6 @@
                @IBOutlet weak var btn_login: UIButton!
                @IBOutlet weak var btn_sendCode: UIButton!
                @IBOutlet weak var btn_isRead: UIButton!
                private var viewModel = LoginViewModel()
@@ -107,9 +109,16 @@
                                                                self.view.layoutIfNeeded()
                                                }
                                }).disposed(by: disposeBag)
        NotificationCenter.default.rx.notification(LoginDismiss_Noti).take(until: self.rx.deallocated).subscribe(onNext: { _ in
            self.backAction()
        }).disposed(by: disposeBag)
                }
                override func setUI() {
        navigationItem.leftBarButtonItem = UIBarButtonItem.jq_creat(image: nav_back_img, target: self, alignment:.left, action: #selector(backAction)).item
                                btn_eye.isSelected = true
                                view.addSubview(unlineImageView)
                                unlineImageView.snp.makeConstraints { make in
@@ -123,6 +132,10 @@
                                btn_register.setAttributedTitle(btn_attribute, for: .normal)
                }
    @objc fileprivate func backAction() {
        self.dismiss(animated: true)
    }
                @IBAction func loginTypeAction(_ sender: UIButton) {
@@ -213,11 +226,24 @@
                }
                @IBAction func loginByWechatAction(_ sender: UIButton) {
        guard btn_isRead.isSelected else {
            alertError(msg: "请阅读并同意《用户注册协议》和《用户隐私协议》");return
        }
                                //todo
                }
                @IBAction func loginByAppleAction(_ sender: UIButton) {
                                //todo
        guard btn_isRead.isSelected else {
            alertError(msg: "请阅读并同意《用户注册协议》和《用户隐私协议》");return
        }
        let provider = ASAuthorizationAppleIDProvider() //主要作用是用创建相应的请求,查询用户授权状态
        let request = provider.createRequest() //授权请求,可以设置具体的请求信息
        request.requestedScopes = [.fullName,.email]
        let vc = ASAuthorizationController(authorizationRequests: [request]) //发送请求控制器,可以设置相应的协议
        vc.delegate = self
        vc.presentationContextProvider = self
        vc.performRequests()
                }
                @IBAction func forgotPwdAction(_ sender: UIButton) {
@@ -235,3 +261,63 @@
                                btn_login.jq_gradientNibColor(colorArr: [UIColor(hexStr: "#8EA47A").cgColor,UIColor(hexStr: "#AFCA98").cgColor], cornerRadius: 20)
                }
}
extension LoginVC:ASAuthorizationControllerPresentationContextProviding{
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return self.view.window!
    }
}
extension LoginVC:ASAuthorizationControllerDelegate{
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let credential = authorization.credential as? ASAuthorizationAppleIDCredential{
            Services.loginByApple(appleId: credential.user).subscribe(onNext: {data in
                if var m = data.data,m.bindStatus == 2{
                    sceneDelegate?.loginSuccess()
                    m.loginByAppleToken = String(data: credential.identityToken!, encoding: .utf8)
                    m.appleId = credential.user
                    self.dismiss(animated: true)
                    UserViewModel.saveLoginInfo(m)
                    Services.getUserInfo().subscribe(onNext: {data in
                        if let model = data.data{
                            UserViewModel.saveAvatarInfo(model)
                        }
                    }).disposed(by: self.disposeBag)
                }else{
                    let vc = UpdatePhoneVC(credential: credential)
                    self.jq_push(vc: vc)
                }
            }).disposed(by: disposeBag)
//            print(credential.user)
//            print(credential.state)
//            print(credential.email)
//            print(credential.fullName?.familyName)
//            print(credential.fullName?.givenName)
//            print(credential.fullName?.middleName)
//            print(String(data: credential.identityToken!, encoding: .utf8))
        }
    }
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        switch (error as! ASAuthorizationError).code {
            case .canceled:print("用户取消")
            case .failed:print("请求失败")
            case .invalidResponse:print("无效响应")
            case .notHandled:print("未处理")
            case .unknown:print("未知错误")
            case .notInteractive:print("未交互")
            case .matchedExcludedCredential:print("排除的凭证匹配")
            @unknown default:break
        }
    }
}
XQMuse/Root/Login/VC/UpdatePhoneVC.swift
@@ -6,12 +6,81 @@
//
import UIKit
import AuthenticationServices
import QMUIKit
import JQTools
class UpdatePhoneVC: BaseVC {
    private var credential:ASAuthorizationAppleIDCredential?
    @IBOutlet weak var tf_phone: QMUITextField!
    @IBOutlet weak var tf_code: QMUITextField!
    @IBOutlet weak var btn_code: UIButton!
    @IBOutlet weak var btn_isRead: UIButton!
    init(credential:ASAuthorizationAppleIDCredential? = nil) {
        super.init(nibName: nil, bundle: nil)
        self.credential = credential
    }
    @MainActor required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
                                title = "验证手机号"
                                
    }
    @IBAction func getCodeAction(_ sender: UIButton) {
        view.endEditing(true)
        guard tf_phone.text!.jq_isPhone else {
            alertError(msg: "请输入正确的手机号");return
        }
        Services.sendCode(type: .threePlantform).subscribe(onNext: {data in
            if let _ = data.data{
                sender.jq_openCountDown(60, defultTitle: "发送验证码") {
                    sender.titleLabel?.font = UIFont.systemFont(ofSize: 12)
                    sender.setTitleColor(.black.withAlphaComponent(0.3), for: .normal)
                } completeClouse: {
                    sender.titleLabel?.font = UIFont.systemFont(ofSize: 14, weight: .medium)
                    sender.setTitleColor(UIColor(hexStr: "#96AD81"), for: .normal)
                }
            }
        }).disposed(by: disposeBag)
    }
    @IBAction func loginAction(_ sender: UIButton) {
        view.endEditing(true)
        guard tf_phone.text!.jq_isPhone else {
            alertError(msg: "请输入正确的手机号");return
        }
        guard tf_code.text!.count == 6 else {
            alertError(msg: "请输入6位验证码");return
        }
        guard let credentialUser = credential?.user else {
            alertError(msg: "Apple登录授权异常");return
        }
        let formatName = String(format: "%@%@%@", credential?.fullName?.familyName ?? "",credential?.fullName?.middleName ?? "", credential?.fullName?.middleName ?? "")
        Services.confirmByApple(cellPhone: tf_phone.text!, captcha: tf_code.text!, loginType: .apple, wxOrAppleId: credentialUser,name: formatName, mail: credential!.email).subscribe(onNext: {data in
            if var model = data.data{
                model.loginByAppleToken = String(data: self.credential!.identityToken!, encoding: .utf8)
                model.appleId = self.credential!.user
                sceneDelegate?.loginSuccess()
                NotificationCenter.default.post(name: LoginDismiss_Noti, object: nil, userInfo: nil)
                UserViewModel.saveLoginInfo(model)
                Services.getUserInfo().subscribe(onNext: {data in
                    if let model = data.data{
                        UserViewModel.saveAvatarInfo(model)
                    }
                }).disposed(by: self.disposeBag)
            }
        }).disposed(by: disposeBag)
    }
}
XQMuse/Root/Login/VC/UpdatePhoneVC.xib
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -11,6 +11,10 @@
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="UpdatePhoneVC" customModule="XQMuse" customModuleProvider="target">
            <connections>
                <outlet property="btn_code" destination="pAD-ql-bis" id="gkz-bG-PbG"/>
                <outlet property="btn_isRead" destination="hpl-B3-jCO" id="l58-Ul-7rb"/>
                <outlet property="tf_code" destination="rC4-Ho-VwS" id="2Nj-Fu-JKi"/>
                <outlet property="tf_phone" destination="Sho-Vk-2J3" id="7t2-1d-4hW"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
@@ -20,7 +24,7 @@
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="验证手机" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="b9O-q9-hJ2">
                    <rect key="frame" x="30.999999999999993" y="90" width="89.333333333333314" height="26"/>
                    <rect key="frame" x="31" y="90" width="84" height="26"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="26" id="agb-Na-9S0"/>
                    </constraints>
@@ -29,7 +33,7 @@
                    <nil key="highlightedColor"/>
                </label>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="为了您的账号安全,请验证一个手机号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g5y-td-c0h">
                    <rect key="frame" x="31" y="131" width="243" height="14"/>
                    <rect key="frame" x="30.999999999999986" y="131" width="236.66666666666663" height="14"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="14" id="m6g-JN-uC9"/>
                    </constraints>
@@ -103,12 +107,15 @@
                                    </userDefinedRuntimeAttributes>
                                </textField>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pAD-ql-bis">
                                    <rect key="frame" x="259" y="16.666666666666657" width="72" height="29"/>
                                    <rect key="frame" x="261" y="16.666666666666657" width="70" height="29"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="获取验证码">
                                        <color key="titleColor" red="0.58823529409999997" green="0.67843137249999996" blue="0.50588235290000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="getCodeAction:" destination="-1" eventType="touchUpInside" id="xNi-pB-wYu"/>
                                    </connections>
                                </button>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
@@ -137,13 +144,13 @@
                    <state key="selected" image="btn_choose_s"/>
                </button>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="我已阅读并同意" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="38g-LO-yZD">
                    <rect key="frame" x="57" y="350" width="86" height="14.333333333333314"/>
                    <rect key="frame" x="57.000000000000007" y="350" width="83.666666666666686" height="14.333333333333314"/>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                    <nil key="highlightedColor"/>
                </label>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="U8y-71-Mhb">
                    <rect key="frame" x="243" y="343.66666666666669" width="87" height="27"/>
                    <rect key="frame" x="237.66666666666663" y="343.66666666666669" width="84" height="27"/>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="《用户隐私协议》">
@@ -151,7 +158,7 @@
                    </state>
                </button>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ztb-yJ-wp8">
                    <rect key="frame" x="148" y="343.66666666666669" width="87" height="27"/>
                    <rect key="frame" x="145.66666666666666" y="343.66666666666669" width="84" height="27"/>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="《用户注册协议》">
@@ -173,6 +180,9 @@
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="loginAction:" destination="-1" eventType="touchUpInside" id="15B-Bf-ee1"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
XQMuse/Root/Me/VC/ContactCustomerVC.swift
@@ -41,6 +41,21 @@
                                                                self.image_qrCode.image = self.customerImage
                                                }
                                }).disposed(by: disposeBag)
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPressCopyAction(_:)))
        longPress.minimumPressDuration = 0.8
        image_qrCode.isUserInteractionEnabled = true
        image_qrCode.addGestureRecognizer(longPress)
    }
    @objc private  func longPressCopyAction(_ gesture:UILongPressGestureRecognizer){
        if gesture.state == .began{
            if let img = image_qrCode.image{
                image_qrCode.isUserInteractionEnabled = false
                UIImageWriteToSavedPhotosAlbum(img, nil,nil, nil)
                alertSuccess(msg: "保存成功")
            }
        }
    }
}
XQMuse/Root/Me/VC/ContactCustomerVC.xib
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -41,11 +41,13 @@
                        <constraint firstAttribute="bottom" secondItem="5jI-tQ-uLM" secondAttribute="bottom" id="g7M-oD-LE2"/>
                    </constraints>
                </view>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="扫码添加客服微信" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fc3-8Q-v5s">
                    <rect key="frame" x="143.33333333333334" y="251.99999999999997" width="106.33333333333334" height="12.666666666666657"/>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fc3-8Q-v5s">
                    <rect key="frame" x="145" y="252.00000000000003" width="103.33333333333331" height="31.333333333333343"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="12.5" id="GbW-jb-gwo"/>
                        <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="12.5" id="GbW-jb-gwo"/>
                    </constraints>
                    <string key="text">扫码添加客服微信
(长按保存图片)</string>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="13"/>
                    <nil key="textColor"/>
                    <nil key="highlightedColor"/>
@@ -54,7 +56,7 @@
                    <rect key="frame" x="0.0" y="339.66666666666674" width="393" height="478.33333333333326"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="问题类型" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aYd-s7-IT0">
                            <rect key="frame" x="18.000000000000004" y="31.999999999999996" width="61.333333333333343" height="14.333333333333332"/>
                            <rect key="frame" x="17.999999999999996" y="31.999999999999996" width="59.666666666666657" height="14.333333333333332"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="14.5" id="ZBR-Iq-kZa"/>
                            </constraints>
XQMuse/Root/Me/VC/VIPCenterVC.swift
@@ -7,21 +7,64 @@
import UIKit
import JQTools
import StoreKit
class VIPCenterVC: BaseVC {
                @IBOutlet weak var collectionView: UICollectionView!
                private var selectIndex = 0
    @IBOutlet weak var btn_isRead: UIButton!
    private var selectIndex = 0
    private var productList = Set<String>()
    private var products = [SKProduct]()
                override func viewDidLoad() {
        super.viewDidLoad()
                                title = "会员中心"
        productList.insert("com.XQMuse.VIP.month.0")
        productList.insert("com.XQMuse.VIP.semester.0")
        productList.insert("com.XQMuse.VIP.year.0")
        productList.insert("com.XQMuse.VIP.year.renewing.0")
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.showsHorizontalScrollIndicator = false
                                collectionView.contentInset = UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
                                collectionView.register(VipCenterCCell.self, forCellWithReuseIdentifier: "cell")
        InPurchaseManager.instance().setProductList(productList) { products in
            self.products = Array(products)
            self.products.sort { p1, p2 in
                return p1.price.doubleValue < p2.price.doubleValue
            }
            self.collectionView.reloadData()
        }
    }
    @IBAction func completeAction(_ sender: UIButton) {
        guard btn_isRead.isSelected else {
            alert(msg: "请先阅读并同意《会员用户协议》");return
        }
        let product = products[selectIndex]
        InPurchaseManager.purchaseProduct(ID: product.productIdentifier, applicationUsername: "") { m in
        } errorClouse: { error in
            alertError(msg: error.localizedDescription)
        }
    }
    @IBAction func readAction(_ sender: UIButton) {
        btn_isRead.isSelected = !btn_isRead.isSelected
    }
    @IBAction func agreementAction(_ sender: UIButton) {
        let vc = WebVC(type: .user)
        push(vc: vc)
    }
}
@@ -34,12 +77,13 @@
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! VipCenterCCell
                                cell.isSelect(indexPath.row == selectIndex)
        let product = products[indexPath.row]
        cell.isSelect(indexPath.row == selectIndex,product: product)
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 5
        return products.count
                }
}
@@ -59,9 +103,9 @@
class VipCenterCCell:UICollectionViewCell{
                private var label_title:UILabel!
                private var label_price:UILabel!
                private var lable_priorDay:UILabel!
                private(set) var label_title:UILabel!
                private(set) var label_price:UILabel!
                private(set) var lable_priorDay:UILabel!
                override init(frame: CGRect) {
                                super.init(frame: frame)
@@ -73,7 +117,7 @@
                func setUI(){
                                label_title  = UILabel()
                                label_title.text = "年度会员"
                                label_title.text = "--会员"
                                label_title.textAlignment = .center
                                label_title.textColor = UIColor(hexString: "#353535")
                                label_title.font = .systemFont(ofSize: 16, weight: .medium)
@@ -107,17 +151,20 @@
                                }
                }
                func isSelect(_ state:Bool){
    func isSelect(_ state:Bool,product:SKProduct){
        label_title.text = product.localizedTitle
        let priorDayPrice = product.price.doubleValue / 365.0
        lable_priorDay.text = String(format:"%@%@/天", product.priceLocale.currencySymbol!,priorDayPrice.jq_formatFloat)
                                if state{
                                                contentView.backgroundColor = UIColor(hexString: "#A6C586")
                                                label_title.textColor = .white
                                                lable_priorDay.textColor = .white
                                                label_price.attributedText = AttributedStringbuilder.build().add(string: "¥", withFont: .systemFont(ofSize: 15, weight:.heavy), withColor: .white).add(string: "199", withFont: .systemFont(ofSize: 20, weight:.heavy), withColor: .white).mutableAttributedString
                                                label_price.attributedText = AttributedStringbuilder.build().add(string: product.priceLocale.currencySymbol!, withFont: .systemFont(ofSize: 15, weight:.heavy), withColor: .white).add(string: "\(product.price.intValue)", withFont: .systemFont(ofSize: 20, weight:.heavy), withColor: .white).mutableAttributedString
                                }else{
                                                contentView.backgroundColor = UIColor(hexString: "#EFF2F2")
                                                label_title.textColor = UIColor(hexString: "#353535")
                                                lable_priorDay.textColor = UIColor(hexString: "#B7B7B7")
                                                label_price.attributedText = AttributedStringbuilder.build().add(string: "¥", withFont: .systemFont(ofSize: 15, weight:.heavy), withColor: UIColor(hexString: "#353535")!).add(string: "199", withFont: .systemFont(ofSize: 20, weight:.heavy), withColor: UIColor(hexString: "#353535")!).mutableAttributedString
                                                label_price.attributedText = AttributedStringbuilder.build().add(string: product.priceLocale.currencySymbol!, withFont: .systemFont(ofSize: 15, weight:.heavy), withColor: UIColor(hexString: "#353535")!).add(string: "\(product.price.intValue)", withFont: .systemFont(ofSize: 20, weight:.heavy), withColor: UIColor(hexString: "#353535")!).mutableAttributedString
                                }
                }
XQMuse/Root/Me/VC/VIPCenterVC.xib
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -11,6 +11,7 @@
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VIPCenterVC" customModule="XQMuse" customModuleProvider="target">
            <connections>
                <outlet property="btn_isRead" destination="6ZY-8B-NMH" id="vPj-36-S58"/>
                <outlet property="collectionView" destination="Ue5-Zy-CjC" id="lPV-ex-sdB"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
@@ -36,7 +37,7 @@
                                            <rect key="frame" x="0.0" y="0.0" width="365" height="113.33333333333333"/>
                                        </imageView>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="心泉·疗愈会员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YxW-A0-Oga">
                                            <rect key="frame" x="19.666666666666657" y="23.333333333333329" width="151" height="21"/>
                                            <rect key="frame" x="19.666666666666657" y="23.333333333333329" width="142" height="21"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="21" id="jjF-Bb-zsz"/>
                                            </constraints>
@@ -45,7 +46,7 @@
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="升级为高级会员,解锁全部体验" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="teL-7U-G1S">
                                            <rect key="frame" x="19" y="85.999999999999986" width="143.33333333333334" height="12"/>
                                            <rect key="frame" x="19" y="85.999999999999986" width="139.33333333333334" height="12"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="10"/>
                                            <color key="textColor" red="0.039215686274509803" green="0.25882352941176467" blue="0.074509803921568626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
@@ -64,7 +65,7 @@
                                    </constraints>
                                </view>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="VIP会员套餐" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yWI-Sm-wHz">
                                    <rect key="frame" x="31.666666666666664" y="197" width="102.66666666666669" height="21"/>
                                    <rect key="frame" x="31.666666666666664" y="197" width="100.66666666666669" height="21"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="18"/>
                                    <nil key="textColor"/>
                                    <nil key="highlightedColor"/>
@@ -135,6 +136,9 @@
                                    <real key="value" value="26.75"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="completeAction:" destination="-1" eventType="touchUpInside" id="MTC-Lr-yt7"/>
                            </connections>
                        </button>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6ZY-8B-NMH">
                            <rect key="frame" x="22" y="76.666666666666629" width="12.666666666666664" height="12.333333333333329"/>
@@ -145,20 +149,26 @@
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="icon_choose_small_1"/>
                            <state key="selected" image="icon_choose_small_s"/>
                            <connections>
                                <action selector="readAction:" destination="-1" eventType="touchUpInside" id="q0M-1x-fcB"/>
                            </connections>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="同意" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tC0-1B-EV0">
                            <rect key="frame" x="40" y="74.666666666666629" width="27" height="16"/>
                            <rect key="frame" x="40" y="74.666666666666629" width="26" height="16"/>
                            <fontDescription key="fontDescription" type="system" pointSize="13"/>
                            <color key="textColor" red="0.49803921568627452" green="0.49803921568627452" blue="0.49803921568627452" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Tne-Fn-Oic">
                            <rect key="frame" x="72" y="68.666666666666629" width="94" height="28"/>
                            <rect key="frame" x="71" y="68.666666666666629" width="91" height="28"/>
                            <fontDescription key="fontDescription" type="system" pointSize="13"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="《会员用户协议》">
                                <color key="titleColor" red="0.54117647058823526" green="0.68235294117647061" blue="0.396078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                            <connections>
                                <action selector="agreementAction:" destination="-1" eventType="touchUpInside" id="em7-8I-WC6"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
XQMuse/Root/Me/VC/WalletRechargeVC.swift
@@ -7,100 +7,132 @@
import UIKit
import JQTools
import StoreKit
class WalletRechargeVC: BaseVC {
                @IBOutlet weak var btn_handle: UIButton!
                @IBOutlet weak var collectionView: UICollectionView!
                @IBOutlet weak var cons_collectionHei: NSLayoutConstraint!
    @IBOutlet weak var btn_handle: UIButton!
    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var cons_collectionHei: NSLayoutConstraint!
                private var selectIndexPath = IndexPath(row: 0, section: 0)
                private     let cellW = (JQ_ScreenW - (24 * 2) - 3 * 27) / 4
                private let cellH:Double = 35
    private var selectIndexPath = IndexPath(row: 0, section: 0)
    private     let cellW = (JQ_ScreenW - (24 * 2) - 3 * 27) / 4
    private let cellH:Double = 35
    private var productList = Set<String>()
    private var products = [SKProduct]()
                override func viewDidLoad() {
    override func viewDidLoad() {
        super.viewDidLoad()
                                title = "疗愈币充值"
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.contentInset = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)
                                collectionView.register(WalletCCell.self, forCellWithReuseIdentifier: "_WalletCCell")
        title = "疗愈币充值"
                                let h = ceil(4.0 / 4.0) * cellH + floor((4.0 - 1) / 4.0) * 27.0
                                cons_collectionHei.constant = h
                                view.layoutIfNeeded()
        for v in 0...5{
            productList.insert("com.XQMuse.p.\(v)")
        }
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.contentInset = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)
        collectionView.register(WalletCCell.self, forCellWithReuseIdentifier: "_WalletCCell")
        let h = ceil(4.0 / 4.0) * cellH + floor((4.0 - 1) / 4.0) * 27.0
        cons_collectionHei.constant = h
        view.layoutIfNeeded()
        InPurchaseManager.instance().setProductList(productList) { products in
            self.products = Array(products)
            self.products.sort { p1, p2 in
                return p1.price.doubleValue < p2.price.doubleValue
            }
            self.collectionView.reloadData()
        }
    }
                override func setUI() {
                                view.backgroundColor = UIColor(hexString: "f6f6f6")
                                btn_handle.jq_gradientNibColor(colorArr:  [UIColor(hexStr: "#8EA47A").cgColor,UIColor(hexStr: "#AFCA98").cgColor], cornerRadius: 20)
                }
    override func setUI() {
        view.backgroundColor = UIColor(hexString: "f6f6f6")
        btn_handle.jq_gradientNibColor(colorArr:  [UIColor(hexStr: "#8EA47A").cgColor,UIColor(hexStr: "#AFCA98").cgColor], cornerRadius: 20)
    }
    @IBAction func completeAction(_ sender: UIButton) {
        guard let userId = UserViewModel.getLoginInfo()?.userid else {
            sceneDelegate?.needLogin()
            return}
        let product = products[selectIndexPath.row]
        InPurchaseManager.purchaseProduct(ID: product.productIdentifier, applicationUsername: userId.string) { model in
        } errorClouse: { error in
            alertError(msg: error.localizedDescription)
        }
    }
}
extension WalletRechargeVC:UICollectionViewDelegate & UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                selectIndexPath = indexPath
                                collectionView.reloadData()
                }
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        selectIndexPath = indexPath
        collectionView.reloadData()
    }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 4
                }
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_WalletCCell", for: indexPath) as! WalletCCell
                                cell.selectAt(indexPath == selectIndexPath)
                                return cell
                }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return products.count
    }
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_WalletCCell", for: indexPath) as! WalletCCell
        cell.selectAt(indexPath == selectIndexPath)
        let product = products[indexPath.row]
        cell.lable_title.text = product.localizedTitle
        return cell
    }
}
extension WalletRechargeVC:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                return CGSize(width: cellW, height:cellH)
                }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: cellW, height:cellH)
    }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 27
                }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 27
    }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 27
                }
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 27
    }
}
class WalletCCell:UICollectionViewCell{
                private lazy var lable_title:UILabel = {
                                let label = UILabel()
                                label.text = "疗愈币0"
                                label.textAlignment = .center
                                label.textColor = UIColor(hexString: "#A9C393")
                                label.font = UIFont.systemFont(ofSize: 16, weight: .medium)
                                return label
                }()
    private(set) lazy var lable_title:UILabel = {
        let label = UILabel()
        label.text = "0币"
        label.textAlignment = .center
        label.textColor = UIColor(hexString: "#A9C393")
        label.font = UIFont.systemFont(ofSize: 16, weight: .medium)
        return label
    }()
                override init(frame: CGRect) {
                                super.init(frame: frame)
                            jq_borderWidth = 1
                            jq_borderColor = UIColor(hexString: "#ABC695")
                            jq_cornerRadius = 8
    override init(frame: CGRect) {
        super.init(frame: frame)
        jq_borderWidth = 1
        jq_borderColor = UIColor(hexString: "#ABC695")
        jq_cornerRadius = 8
                                contentView.addSubview(lable_title)
                                lable_title.snp.makeConstraints { make in
                                                make.center.equalToSuperview()
                                }
                }
        contentView.addSubview(lable_title)
        lable_title.snp.makeConstraints { make in
            make.center.equalToSuperview()
        }
    }
                func selectAt(_ state:Bool){
                                backgroundColor = state ? UIColor(hexString: "#8EA47A") : .white
                                lable_title.textColor = state ? .white:UIColor(hexString: "#8EA47A")
                                jq_borderWidth = state ? 0:1
                }
    func selectAt(_ state:Bool){
        backgroundColor = state ? UIColor(hexString: "#8EA47A") : .white
        lable_title.textColor = state ? .white:UIColor(hexString: "#8EA47A")
        jq_borderWidth = state ? 0:1
    }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
XQMuse/Root/Me/VC/WalletRechargeVC.xib
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -26,7 +26,7 @@
                    <rect key="frame" x="14" y="68" width="365" height="141"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="充值金额" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nAx-8V-3yC">
                            <rect key="frame" x="10.000000000000004" y="13" width="57.333333333333343" height="17"/>
                            <rect key="frame" x="9.9999999999999964" y="13" width="55.666666666666657" height="17"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
@@ -39,7 +39,6 @@
                            </constraints>
                            <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="Cco-HP-q4Y">
                                <size key="itemSize" width="128" height="128"/>
                                <size key="estimatedItemSize" width="128" height="128"/>
                                <size key="headerReferenceSize" width="0.0" height="0.0"/>
                                <size key="footerReferenceSize" width="0.0" height="0.0"/>
                                <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
@@ -77,6 +76,9 @@
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="completeAction:" destination="-1" eventType="touchUpInside" id="J4Z-bu-S5a"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
XQMuse/Root/Network/Models.swift
@@ -25,15 +25,19 @@
                var accessToken: String = ""
                var appUserId: Int = 0
                var bindStatus: Int = 0
                var bindStatus: Int = 0 //是否需要验证手机号 1=是 2=否
                var cellPhone: String = ""
                var expireIn: Int = 0
                var expireIn: Int = 0 // token过期时间
                var expireTime: Int = 0
                var ipaddr: String = ""
                var loginTime: Int = 0
                var token: String = ""
                var userid: Int = 0
                var username: String = ""
    var loginByAppleToken:String?
    var appleId:String?
    var wechatOpenId:String?
}
XQMuse/Root/Network/Services.swift
@@ -44,6 +44,29 @@
                                return NetworkRequest.request(params: params, method: .post, progress: true)
                }
    class func loginByApple(appleId:String)->Observable<BaseResponse<LoginUserInfoModel>>{
        let params = ParamsAppender.build(url: All_Url)
        params.interface(url: "/auth/app/appleLogin")
            .append(key: "appleId", value: appleId)
            .append(key: "apipost_id", value: "246d780670e264")
        return NetworkRequest.request(params: params, method: .post, progress: true)
    }
    /// Apple登录 【验证】
    class func confirmByApple(cellPhone:String,captcha:String,loginType:ThreePlantformLoginType,wxOrAppleId:String,name:String? = nil,mail:String? = nil)->Observable<BaseResponse<LoginUserInfoModel>>{
        let params = ParamsAppender.build(url: All_Url)
        params.interface(url: "/auth/app/verifyCellPhone")
            .append(key: "cellPhone", value: cellPhone)
            .append(key: "captcha", value: captcha)
            .append(key: "loginType", value: loginType.rawValue)
            .append(key: "wxOrAppleId", value: wxOrAppleId)
            .append(key: "name", value: name)
            .append(key: "mail", value: mail)
            .append(key: "apipost_id", value: "246d7806b0e26a")
        return NetworkRequest.request(params: params, method: .post,encoding: (JSONEncoding.self as! ParameterEncoding), progress: true)
    }
                /// 发送验证码
                class func sendCode(type:SendCodeType)->Observable<BaseResponse<SimpleModel>>{
                                let params = ParamsAppender.build(url: All_Url)
XQMuse/Root/TreeGroup/VC/TreeTeskEnergyExchangeVC.swift
@@ -41,6 +41,11 @@
                                Services.getCustomerCode().subscribe(onNext: {[weak self] data in
                                                self?.image_qrCode.sd_setImage(with: URL(string: data.data ?? ""))
                                }).disposed(by: disposeBag)
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPressCopyAction(_:)))
        longPress.minimumPressDuration = 0.8
        image_qrCode.isUserInteractionEnabled = true
        image_qrCode.addGestureRecognizer(longPress)
                }
                override func setUI() {
@@ -63,6 +68,16 @@
                                let vc = TreeTeskEnergyExchangeRecordVC()
                                push(vc: vc)
                }
    @objc private  func longPressCopyAction(_ gesture:UILongPressGestureRecognizer){
        if gesture.state == .began{
            if let img = image_qrCode.image{
                image_qrCode.isUserInteractionEnabled = false
                UIImageWriteToSavedPhotosAlbum(img, nil,nil, nil)
                alertSuccess(msg: "保存成功")
            }
        }
    }
}
extension TreeTeskEnergyExchangeVC:UITableViewDataSource & UITableViewDelegate{
XQMuse/Root/TreeGroup/VC/TreeTeskEnergyExchangeVC.xib
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -32,7 +32,7 @@
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前能量值" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Re7-sx-WRH">
                            <rect key="frame" x="146.66666666666666" y="57.333333333333343" width="71.666666666666657" height="17"/>
                            <rect key="frame" x="147.66666666666666" y="57.333333333333343" width="69.666666666666657" height="17"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
@@ -54,10 +54,10 @@
                    </userDefinedRuntimeAttributes>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="e3s-i0-uyr">
                    <rect key="frame" x="148.66666666666666" y="703.66666666666663" width="96" height="114.33333333333337"/>
                    <rect key="frame" x="148.66666666666666" y="683.66666666666663" width="96" height="114.33333333333337"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="客服微信二维码" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="09J-LW-WxK">
                            <rect key="frame" x="5" y="100" width="86" height="14.333333333333329"/>
                            <rect key="frame" x="6" y="100" width="83.666666666666671" height="14.333333333333329"/>
                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
@@ -81,22 +81,34 @@
                        <constraint firstItem="09J-LW-WxK" firstAttribute="top" secondItem="9aI-7D-eFc" secondAttribute="bottom" constant="4" id="aS8-g9-cs9"/>
                    </constraints>
                </view>
                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="JKR-h6-LMB">
                    <rect key="frame" x="0.0" y="187.66666666666663" width="393" height="501"/>
                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="JKR-h6-LMB">
                    <rect key="frame" x="0.0" y="187.66666666666663" width="393" height="481"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                </tableView>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="本次活动与Apple Inc.无关" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6So-p2-hzW">
                    <rect key="frame" x="137" y="803" width="119.33333333333331" height="10"/>
                    <fontDescription key="fontDescription" type="system" pointSize="10"/>
                    <color key="textColor" systemColor="systemGray2Color"/>
                    <nil key="highlightedColor"/>
                </label>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="JKR-h6-LMB" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="0Vw-Rn-fdO"/>
                <constraint firstItem="e3s-i0-uyr" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="5aL-5g-rR2"/>
                <constraint firstAttribute="bottom" secondItem="09J-LW-WxK" secondAttribute="bottom" constant="54" id="G60-D0-FJb"/>
                <constraint firstItem="JKR-h6-LMB" firstAttribute="top" secondItem="ovv-Cg-b9v" secondAttribute="bottom" constant="15" id="Ked-lz-ho3"/>
                <constraint firstItem="6So-p2-hzW" firstAttribute="centerX" secondItem="e3s-i0-uyr" secondAttribute="centerX" id="Lps-XQ-L6Q"/>
                <constraint firstItem="ovv-Cg-b9v" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="15" id="OXZ-tq-LSv"/>
                <constraint firstItem="e3s-i0-uyr" firstAttribute="top" secondItem="JKR-h6-LMB" secondAttribute="bottom" constant="15" id="X15-Vw-XaT"/>
                <constraint firstItem="ovv-Cg-b9v" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="14" id="dsg-VV-ljB"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="JKR-h6-LMB" secondAttribute="trailing" id="hns-pa-A9y"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="e3s-i0-uyr" secondAttribute="bottom" id="vdc-o4-bf0"/>
                <constraint firstItem="6So-p2-hzW" firstAttribute="top" secondItem="e3s-i0-uyr" secondAttribute="bottom" constant="5" id="hya-Lz-vqx"/>
                <constraint firstItem="09J-LW-WxK" firstAttribute="top" secondItem="9aI-7D-eFc" secondAttribute="bottom" constant="4" id="nNQ-yu-Hvy"/>
                <constraint firstItem="09J-LW-WxK" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="tod-4Y-cvA"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="e3s-i0-uyr" secondAttribute="bottom" constant="20" id="vdc-o4-bf0"/>
                <constraint firstAttribute="bottomMargin" secondItem="6So-p2-hzW" secondAttribute="bottom" constant="5" id="wUQ-ss-Lpt"/>
                <constraint firstAttribute="trailing" secondItem="ovv-Cg-b9v" secondAttribute="trailing" constant="14" id="yfT-Nr-QvP"/>
            </constraints>
            <point key="canvasLocation" x="5.343511450381679" y="20.422535211267608"/>
@@ -106,5 +118,8 @@
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
        <systemColor name="systemGray2Color">
            <color red="0.68235294120000001" green="0.68235294120000001" blue="0.69803921570000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </systemColor>
    </resources>
</document>
XQMuse/Root/TreeGroup/View/TreeTeskExchangeSuccessView.swift
@@ -10,11 +10,17 @@
class TreeTeskExchangeSuccessView: UIView,JQNibView{
                @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var image_qrCode: UIImageView!
                override func awakeFromNib() {
                                super.awakeFromNib()
                                view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                alpha = 0
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPressCopyAction(_:)))
        longPress.minimumPressDuration = 0.8
        image_qrCode.isUserInteractionEnabled = true
        image_qrCode.addGestureRecognizer(longPress)
                }
                static func show(){
@@ -30,6 +36,16 @@
                                }
                }
    @objc private  func longPressCopyAction(_ gesture:UILongPressGestureRecognizer){
        if gesture.state == .began{
            if let img = image_qrCode.image{
                image_qrCode.isUserInteractionEnabled = false
                UIImageWriteToSavedPhotosAlbum(img, nil,nil, nil)
                alertSuccess(msg: "保存成功")
            }
        }
    }
                @IBAction func closeAction(_ sender: UIButton) {
                                UIView.animate(withDuration: 0.3) {
                                                self.view_container.transform = .init(scaleX: 0.1, y: 0.1)
XQMuse/Root/TreeGroup/View/TreeTeskExchangeSuccessView.xib
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
@@ -15,10 +15,10 @@
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4ru-7s-yUN">
                    <rect key="frame" x="24" y="199.66666666666666" width="345" height="452.66666666666674"/>
                    <rect key="frame" x="24" y="191.33333333333334" width="345" height="469.33333333333326"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="兑换成功" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uwa-22-p1n">
                            <rect key="frame" x="135.66666666666666" y="17" width="73.666666666666657" height="21"/>
                            <rect key="frame" x="136.66666666666666" y="17" width="71.666666666666657" height="21"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
@@ -33,7 +33,7 @@
                            <rect key="frame" x="72" y="53" width="201" height="39.666666666666657"/>
                            <subviews>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="领取验证码:--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="psN-sL-6pq">
                                    <rect key="frame" x="51" y="0.0" width="99" height="39.666666666666664"/>
                                    <rect key="frame" x="52" y="0.0" width="97" height="39.666666666666664"/>
                                    <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                    <color key="textColor" red="0.56470588235294117" green="0.65490196078431373" blue="0.48627450980392156" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
@@ -60,14 +60,16 @@
                                <constraint firstAttribute="width" secondItem="GQk-cT-1IF" secondAttribute="height" multiplier="1:1" id="IQg-YH-wfl"/>
                            </constraints>
                        </imageView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="可添加助教微信,了解课程详情" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xal-zI-HOg">
                            <rect key="frame" x="72.666666666666686" y="347.66666666666674" width="200" height="17"/>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xal-zI-HOg">
                            <rect key="frame" x="75.333333333333329" y="347.66666666666663" width="194.66666666666669" height="33.666666666666686"/>
                            <string key="text">可添加助教微信,了解课程详情
长按保存图片</string>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="h25-4Z-I8T">
                            <rect key="frame" x="37" y="388.66666666666674" width="271" height="40"/>
                            <rect key="frame" x="37" y="405.33333333333326" width="271" height="40"/>
                            <color key="backgroundColor" red="0.56470588239999997" green="0.65490196079999996" blue="0.48627450979999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="40" id="om4-Kn-hqq"/>
@@ -120,6 +122,7 @@
                <constraint firstItem="4ru-7s-yUN" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="zt7-Tt-vce"/>
            </constraints>
            <connections>
                <outlet property="image_qrCode" destination="GQk-cT-1IF" id="U2k-zg-3wi"/>
                <outlet property="view_container" destination="4ru-7s-yUN" id="C6v-VX-yVc"/>
            </connections>
            <point key="canvasLocation" x="65" y="21"/>
XQMuse/SceneDelegate.swift
@@ -8,6 +8,7 @@
import UIKit
import SVProgressHUD
import JQTools
import AuthenticationServices
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
@@ -33,6 +34,27 @@
                                if #available(iOS 13.0, *) {
                                                window?.overrideUserInterfaceStyle = .light
                                }
        if let appleId = UserViewModel.getLoginInfo()?.appleId {
            //检查Apple登录,授权情况
            let provider = ASAuthorizationAppleIDProvider()
            provider.getCredentialState(forUserID: appleId) { state, error in
                guard  error == nil else {return}
                switch state {
                    case .revoked,.notFound,.transferred:
                        UserViewModel.clearToken()
                        UserViewModel.clearLoginInfo()
                        UserViewModel.clearAvatarInfo()
                    default:break
                }
            }
            NotificationCenter.default.rx.notification(ASAuthorizationAppleIDProvider.credentialRevokedNotification).subscribe(onNext: { _ in
                UserViewModel.clearToken()
                UserViewModel.clearLoginInfo()
                UserViewModel.clearAvatarInfo()
            }).disposed(by: JQ_disposeBag)
        }
                }
                func needLogin(){
XQMuse/XQMuse.entitlements
New file
@@ -0,0 +1,10 @@
<?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>com.apple.developer.applesignin</key>
    <array>
        <string>Default</string>
    </array>
</dict>
</plist>