Commit 4a170467 authored by pete谢兆麟's avatar pete谢兆麟

1.服务中心适配首页子页UI

2.服务中心订单列表UI,搜索UI
3.服务中心搜索,白名单接口联调
4.服务中心搜索逻辑接入
parent 953ea3a9
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
0435FA7F2BA178C100024EAE /* YHCommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0435FA7E2BA178C100024EAE /* YHCommonAlertView.swift */; }; 0435FA7F2BA178C100024EAE /* YHCommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0435FA7E2BA178C100024EAE /* YHCommonAlertView.swift */; };
0435FA812BA186D600024EAE /* YHMyFileMethodTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0435FA802BA186D600024EAE /* YHMyFileMethodTableViewCell.swift */; }; 0435FA812BA186D600024EAE /* YHMyFileMethodTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0435FA802BA186D600024EAE /* YHMyFileMethodTableViewCell.swift */; };
0435FA832BA2DEB100024EAE /* YHCardButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0435FA822BA2DEB100024EAE /* YHCardButton.swift */; }; 0435FA832BA2DEB100024EAE /* YHCardButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0435FA822BA2DEB100024EAE /* YHCardButton.swift */; };
043D2C8A2C0EEF3F00172438 /* YHOrderSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043D2C892C0EEF3F00172438 /* YHOrderSearchViewController.swift */; };
043D2C8C2C0F037B00172438 /* YHServiceOrderSearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043D2C8B2C0F037B00172438 /* YHServiceOrderSearchViewModel.swift */; };
044378A42BFC848C001F95AE /* loginBkg.mov in Resources */ = {isa = PBXBuildFile; fileRef = 044378A32BFC848C001F95AE /* loginBkg.mov */; }; 044378A42BFC848C001F95AE /* loginBkg.mov in Resources */ = {isa = PBXBuildFile; fileRef = 044378A32BFC848C001F95AE /* loginBkg.mov */; };
044413FD2BC386DA00784A14 /* YHServiceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044413FC2BC386DA00784A14 /* YHServiceViewController.swift */; }; 044413FD2BC386DA00784A14 /* YHServiceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044413FC2BC386DA00784A14 /* YHServiceViewController.swift */; };
044413FF2BC391F000784A14 /* YHServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044413FE2BC391F000784A14 /* YHServiceListViewController.swift */; }; 044413FF2BC391F000784A14 /* YHServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044413FE2BC391F000784A14 /* YHServiceListViewController.swift */; };
...@@ -500,6 +502,8 @@ ...@@ -500,6 +502,8 @@
0435FA7E2BA178C100024EAE /* YHCommonAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCommonAlertView.swift; sourceTree = "<group>"; }; 0435FA7E2BA178C100024EAE /* YHCommonAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCommonAlertView.swift; sourceTree = "<group>"; };
0435FA802BA186D600024EAE /* YHMyFileMethodTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyFileMethodTableViewCell.swift; sourceTree = "<group>"; }; 0435FA802BA186D600024EAE /* YHMyFileMethodTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyFileMethodTableViewCell.swift; sourceTree = "<group>"; };
0435FA822BA2DEB100024EAE /* YHCardButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCardButton.swift; sourceTree = "<group>"; }; 0435FA822BA2DEB100024EAE /* YHCardButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCardButton.swift; sourceTree = "<group>"; };
043D2C892C0EEF3F00172438 /* YHOrderSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHOrderSearchViewController.swift; sourceTree = "<group>"; };
043D2C8B2C0F037B00172438 /* YHServiceOrderSearchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHServiceOrderSearchViewModel.swift; sourceTree = "<group>"; };
044378A32BFC848C001F95AE /* loginBkg.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = loginBkg.mov; sourceTree = "<group>"; }; 044378A32BFC848C001F95AE /* loginBkg.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = loginBkg.mov; sourceTree = "<group>"; };
044413FC2BC386DA00784A14 /* YHServiceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHServiceViewController.swift; sourceTree = "<group>"; }; 044413FC2BC386DA00784A14 /* YHServiceViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHServiceViewController.swift; sourceTree = "<group>"; };
044413FE2BC391F000784A14 /* YHServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHServiceListViewController.swift; sourceTree = "<group>"; }; 044413FE2BC391F000784A14 /* YHServiceListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHServiceListViewController.swift; sourceTree = "<group>"; };
...@@ -2370,6 +2374,7 @@ ...@@ -2370,6 +2374,7 @@
044414002BC3979800784A14 /* YHServerHKLifeViewController.swift */, 044414002BC3979800784A14 /* YHServerHKLifeViewController.swift */,
A514E5DB2B60A2B700C93951 /* YHServiceCenterSecondViewController.swift */, A514E5DB2B60A2B700C93951 /* YHServiceCenterSecondViewController.swift */,
A5FD63BC2B623C2C00D1D9DA /* YHInformationPerfectListVC.swift */, A5FD63BC2B623C2C00D1D9DA /* YHInformationPerfectListVC.swift */,
043D2C892C0EEF3F00172438 /* YHOrderSearchViewController.swift */,
); );
path = C; path = C;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -2449,6 +2454,7 @@ ...@@ -2449,6 +2454,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
A5C382CE2B5F9A9100C5E65C /* YHServiceCenterMainViewModel.swift */, A5C382CE2B5F9A9100C5E65C /* YHServiceCenterMainViewModel.swift */,
043D2C8B2C0F037B00172438 /* YHServiceOrderSearchViewModel.swift */,
); );
path = VM; path = VM;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -2846,6 +2852,7 @@ ...@@ -2846,6 +2852,7 @@
045EEE842B9F171A0022A143 /* YHPreviewBasiceInformationViewController.swift in Sources */, 045EEE842B9F171A0022A143 /* YHPreviewBasiceInformationViewController.swift in Sources */,
A5ACE9282B4564F7002C94D2 /* YHSmsCodeView.swift in Sources */, A5ACE9282B4564F7002C94D2 /* YHSmsCodeView.swift in Sources */,
0499E3002C056EE30037E646 /* YHOneKeyLoginView.swift in Sources */, 0499E3002C056EE30037E646 /* YHOneKeyLoginView.swift in Sources */,
043D2C8C2C0F037B00172438 /* YHServiceOrderSearchViewModel.swift in Sources */,
0468D4262B495A5400CFB916 /* YHPickPhoneAddressViewController.swift in Sources */, 0468D4262B495A5400CFB916 /* YHPickPhoneAddressViewController.swift in Sources */,
048B2A4D2BC7DAE800A93BF0 /* YHMyLikeViewModel.swift in Sources */, 048B2A4D2BC7DAE800A93BF0 /* YHMyLikeViewModel.swift in Sources */,
04C693622B723AB8004C1758 /* YHMySettingViewController.swift in Sources */, 04C693622B723AB8004C1758 /* YHMySettingViewController.swift in Sources */,
...@@ -2923,6 +2930,7 @@ ...@@ -2923,6 +2930,7 @@
045EEE9E2B9F171A0022A143 /* YHWorkExampleModel.swift in Sources */, 045EEE9E2B9F171A0022A143 /* YHWorkExampleModel.swift in Sources */,
045EEE8A2B9F171A0022A143 /* YHPreviewOtherInformationViewController.swift in Sources */, 045EEE8A2B9F171A0022A143 /* YHPreviewOtherInformationViewController.swift in Sources */,
A5FD63C72B638CA000D1D9DA /* YHSubmintAllInfoSuccessTipView.swift in Sources */, A5FD63C72B638CA000D1D9DA /* YHSubmintAllInfoSuccessTipView.swift in Sources */,
043D2C8A2C0EEF3F00172438 /* YHOrderSearchViewController.swift in Sources */,
A567E5A32BD7643D00D5D5A0 /* YHHomeBannerView.swift in Sources */, A567E5A32BD7643D00D5D5A0 /* YHHomeBannerView.swift in Sources */,
A5ACE9402B4564F7002C94D2 /* String+Extension.swift in Sources */, A5ACE9402B4564F7002C94D2 /* String+Extension.swift in Sources */,
045EEEE42B9F171A0022A143 /* YHMySignatureDetailModel.swift in Sources */, 045EEEE42B9F171A0022A143 /* YHMySignatureDetailModel.swift in Sources */,
......
//
// YHOrderSearchViewController.swift
// galaxy
//
// Created by EDY on 2024/6/4.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHOrderSearchViewController: YHBaseViewController {
var tableView: UITableView!
var searchBar: YHSearchInfoBar!
var emptyDataTipsView: YHEmptyDataView!
var items: [YHContactItemModel] = []
var viewModel: YHServiceOrderSearchViewModel = YHServiceOrderSearchViewModel()
override func viewDidLoad() {
super.viewDidLoad()
setView()
}
func setView() {
gk_navTitle = "订单搜索"
gk_navBackgroundColor = UIColor.white
gk_navBarAlpha = 1
let searchView = UIView()
searchView.backgroundColor = .white
view.addSubview(searchView)
searchView.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.left.right.equalToSuperview()
make.height.equalTo(52)
}
searchBar = {
let bar = YHSearchInfoBar()
bar.placeHolder = "请输入签约合同号"
bar.setSearchButtonEnable(false)
bar.searchBlock = {
[weak self] text in
guard let self = self else { return }
self.viewModel.getSearchList(text ?? "", callBackBlock: {[weak self] success, error in
guard let self = self else { return }
self.items = self.viewModel.arrContactList
self.emptyDataTipsView.isHidden = (items.count > 0)
self.tableView.reloadData()
})
}
bar.textChange = {
[weak self] text in
guard let self = self else { return }
if isEmptyString(text) {
bar.setSearchButtonEnable(false)
} else {
bar.setSearchButtonEnable(true)
}
}
return bar
}()
view.addSubview(searchBar)
searchBar.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 8)
make.left.equalTo(20)
make.right.equalTo(-20)
make.height.equalTo(36)
}
emptyDataTipsView = {
let view = YHEmptyDataView.createView("无搜索结果", kEmptySearchBgName)
view.topMargin = 204
view.isHidden = true
return view
}()
tableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
}
tableView.backgroundColor = .clear
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundView = emptyDataTipsView
tableView.register(cellWithClass: YHOrderDetailTableViewCell.self)
return tableView
}()
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.top.equalTo(k_Height_NavigationtBarAndStatuBar + 52)
make.left.right.bottom.equalTo(view)
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if items.count == 0 {
searchBar.textField.becomeFirstResponder()
}
}
}
extension YHOrderSearchViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withClass: YHOrderDetailTableViewCell.self)
cell.dataSource = items[indexPath.row]
cell.cellBlock = {[weak self] model in
guard let self = self else { return }
let vc = YHServiceCenterMainViewController()
vc.model = model
self.navigationController?.pushViewController(vc)
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 255
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 7))
return view
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 7
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.01
}
}
...@@ -31,6 +31,21 @@ class YHServiceCenterMainViewController: YHBaseViewController { ...@@ -31,6 +31,21 @@ class YHServiceCenterMainViewController: YHBaseViewController {
}() }()
lazy var navBar: UIView = {
let bar = UIView()
let backBtn = UIButton()
backBtn.setImage(UIImage(named: "back_icon"), for: .normal)
backBtn.addTarget(self, action: #selector(didBackBtnClicked), for: .touchUpInside)
backBtn.YH_clickEdgeInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
bar.addSubview(backBtn)
backBtn.snp.makeConstraints { make in
make.width.height.equalTo(21)
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(16)
}
return bar
}()
private let noDataView : YHServiceNoOrderView = { private let noDataView : YHServiceNoOrderView = {
let view = YHServiceNoOrderView() let view = YHServiceNoOrderView()
view.isHidden = true view.isHidden = true
...@@ -95,17 +110,50 @@ class YHServiceCenterMainViewController: YHBaseViewController { ...@@ -95,17 +110,50 @@ class YHServiceCenterMainViewController: YHBaseViewController {
extension YHServiceCenterMainViewController { extension YHServiceCenterMainViewController {
func loadData() { func loadData() {
serviceCenterMainReqVM.getContactList {[weak self] success, error in if model.id != -1 {
guard let self = self else { return } noDataView.isHidden = true
if success == true { nameBgImageView.isHidden = false
segmentedView.isHidden = false
} else { listContainerView.isHidden = false
YHHUD.flash(message: error?.errorMsg ?? "请求出错") orderButton.isHidden = false
if self.navigationController?.viewControllers.count != 1 {
orderButton.isHidden = true
}
orderId = model.id
mobile = model.mobile
UserDefaults.standard.set(orderId, forKey: "orderIdForPreview")
UserDefaults.standard.synchronize()
for i in 0..<arrItemTitles.count {
let vc = arrItemVCs[i] as YHServiceOrderListView
vc.type = i
if i == 1 {
vc.type = 2
}
if i == 2 {
vc.type = 1
}
vc.orderID = orderId
vc.mobile = mobile
vc.loadData()
}
getStep()
} else {
serviceCenterMainReqVM.getContactList {[weak self] success, error in
guard let self = self else { return }
if success == true {
} else {
YHHUD.flash(message: error?.errorMsg ?? "请求出错")
}
self.handleRightUI()
} }
self.handleRightUI()
} }
} }
@objc func didBackBtnClicked() {
self.navigationController?.popViewController(animated: true)
}
func setupUI() { func setupUI() {
gk_navBarAlpha = 0 gk_navBarAlpha = 0
gk_navigationBar.isHidden = true gk_navigationBar.isHidden = true
...@@ -128,8 +176,17 @@ extension YHServiceCenterMainViewController { ...@@ -128,8 +176,17 @@ extension YHServiceCenterMainViewController {
make.top.equalTo(53) make.top.equalTo(53)
make.left.equalTo(20) make.left.equalTo(20)
make.height.equalTo(29) make.height.equalTo(29)
make.right.equalTo(-20)
} }
view.addSubview(navBar)
navBar.snp.makeConstraints { make in
make.left.equalToSuperview()
// make.top.equalToSuperview().offset(k_Height_statusBar())
make.height.equalTo(k_Height_NavContentBar)
make.width.equalTo(47)
make.centerY.equalTo(titleLabel.snp.centerY)
}
orderButton = { orderButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.setTitle("我的订单", for: .normal) button.setTitle("我的订单", for: .normal)
...@@ -145,6 +202,14 @@ extension YHServiceCenterMainViewController { ...@@ -145,6 +202,14 @@ extension YHServiceCenterMainViewController {
make.height.equalTo(20) make.height.equalTo(20)
make.width.equalTo(56) make.width.equalTo(56)
} }
if self.navigationController?.viewControllers.count != 1 {
titleLabel.textAlignment = .center
titleLabel.text = "订单详情"
orderButton.isHidden = true
} else {
navBar.isHidden = true
}
} }
override func viewDidLayoutSubviews() { override func viewDidLayoutSubviews() {
...@@ -161,12 +226,19 @@ extension YHServiceCenterMainViewController { ...@@ -161,12 +226,19 @@ extension YHServiceCenterMainViewController {
make.top.equalTo(nameBgImageView.snp.bottom).offset(14) make.top.equalTo(nameBgImageView.snp.bottom).offset(14)
make.height.equalTo(48) make.height.equalTo(48)
} }
listContainerView.snp.remakeConstraints { make in if self.navigationController?.viewControllers.count != 1 {
make.right.left.equalToSuperview() listContainerView.snp.remakeConstraints { make in
make.top.equalTo(segmentedView.snp.bottom) make.right.left.equalToSuperview()
make.bottom.equalTo(-k_Height_TabBar) make.top.equalTo(segmentedView.snp.bottom)
make.bottom.equalToSuperview()
}
} else {
listContainerView.snp.remakeConstraints { make in
make.right.left.equalToSuperview()
make.top.equalTo(segmentedView.snp.bottom)
make.bottom.equalTo(-k_Height_TabBar)
}
} }
} }
@objc func pushOrderView() { @objc func pushOrderView() {
...@@ -224,6 +296,9 @@ extension YHServiceCenterMainViewController { ...@@ -224,6 +296,9 @@ extension YHServiceCenterMainViewController {
segmentedView.isHidden = false segmentedView.isHidden = false
listContainerView.isHidden = false listContainerView.isHidden = false
orderButton.isHidden = false orderButton.isHidden = false
if self.navigationController?.viewControllers.count != 1 {
orderButton.isHidden = true
}
orderId = model.id orderId = model.id
mobile = model.mobile mobile = model.mobile
self.model = model self.model = model
......
...@@ -17,3 +17,9 @@ class YHServiceCenterProgressModel : YHBaseModel { ...@@ -17,3 +17,9 @@ class YHServiceCenterProgressModel : YHBaseModel {
var pro_version : Int = 0 var pro_version : Int = 0
var reject_status : Int = 0 var reject_status : Int = 0
} }
class YHServiceSearchModel: YHBaseModel {
var id: Int = 0
var dictionary_code: String = ""
var enable_flag: Int = 0
}
//
// YHServiceOrderSearchViewModel.swift
// galaxy
//
// Created by EDY on 2024/6/4.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHServiceOrderSearchViewModel: YHBaseViewModel {
var arrContactList : [YHContactItemModel] = []
//请求白名单
func getWhitelist(callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Order.bywhitelist
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in
//1. json字符串 转 对象
guard self != nil else { return }
if json.code == 200 {
let dic = json.data as! Dictionary<String, Any>
let data = dic["Data"]
guard let result = [YHServiceSearchModel].deserialize(from: data as? [Any]) else {
callBackBlock(false,nil)
return
}
if result.count != 0, let model = result.first, model?.dictionary_code.count != 0 {
callBackBlock(true, nil)
} else {
callBackBlock(false,nil)
}
} else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code),errorMsg: json.msg.count > 0 ? json.msg : "数据错误")
callBackBlock(false,error)
}
} failBlock: { err in
callBackBlock(false,err)
}
}
//请求合同项
func getSearchList(_ order: String, callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let params:[String:Any] = ["order_sn": order]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Order.contractListApi
let _ = YHNetRequest.getRequest(url: strUrl, params: params) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
if json.code == 200 {
let dic = json.data as! Dictionary<String, Any>
let data = dic["orders"]
guard let resultModel = [YHContactItemModel].deserialize(array: data as? [Any]) else {
self.arrContactList = []
callBackBlock(false,nil)
return
}
let lastArray = resultModel.compactMap { $0 }
self.arrContactList = lastArray
callBackBlock(true,nil)
} else {
self.arrContactList = []
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code),errorMsg: json.msg.count > 0 ? json.msg : "数据错误")
callBackBlock(false,error)
}
} failBlock: { err in
self.arrContactList = []
callBackBlock(false,err)
}
}
}
...@@ -62,7 +62,9 @@ class YHAllApiName { ...@@ -62,7 +62,9 @@ class YHAllApiName {
static let updateOtherInfoApi = "infoflow/order/updateOrderOtherInformation" static let updateOtherInfoApi = "infoflow/order/updateOrderOtherInformation"
//服务中心进度列表 //服务中心进度列表
static let serviceCenterProgressApi = "infoflow/order/service-list" static let serviceCenterProgressApi = "infoflow/order/service-list"
//搜索白名单
static let bywhitelist = "infoflow/permissiondict/bywhitelist"
} }
struct Family { struct Family {
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "service_detail_search@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "service_detail_search@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "service_right_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "service_right_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment