Commit 8af6555d ilCode

Moya

1 个父辈 703cc9e0
......@@ -8,6 +8,7 @@
/* Begin PBXBuildFile section */
42F3CE39682BAB273520A375 /* Pods_AoleiSports.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F63DEFD57EAA7FD3A430F57E /* Pods_AoleiSports.framework */; };
5E6CF00A2C12FAD600BF3CF5 /* TargetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E6CF0092C12FAD600BF3CF5 /* TargetController.swift */; };
5E9A19EC2C0EAC0200321AC5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A19EB2C0EAC0200321AC5 /* AppDelegate.swift */; };
5E9A19F52C0EAC0300321AC5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5E9A19F42C0EAC0300321AC5 /* Assets.xcassets */; };
5E9A1A052C0EAF7600321AC5 /* goal.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 5E9A19FF2C0EAF7600321AC5 /* goal.mp3 */; };
......@@ -38,17 +39,22 @@
5E9A1A3E2C0F043100321AC5 /* RootController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A3D2C0F043100321AC5 /* RootController.swift */; };
5E9A1A402C0F04CC00321AC5 /* HomeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A3F2C0F04CC00321AC5 /* HomeController.swift */; };
5E9A1A422C0F04DB00321AC5 /* ProfileController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A412C0F04DB00321AC5 /* ProfileController.swift */; };
5E9A1A482C0F0DC400321AC5 /* AsBaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A472C0F0DC400321AC5 /* AsBaseController.swift */; };
5E9A1A482C0F0DC400321AC5 /* BaseController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A472C0F0DC400321AC5 /* BaseController.swift */; };
5E9A1A4A2C0F13BF00321AC5 /* UIColor+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A492C0F13BF00321AC5 /* UIColor+Ext.swift */; };
5E9A1A4C2C0F144200321AC5 /* ColorTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A4B2C0F144200321AC5 /* ColorTools.swift */; };
5E9A1A4E2C0F1A2E00321AC5 /* FontTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A4D2C0F1A2E00321AC5 /* FontTools.swift */; };
5E9A1A502C0F1F5200321AC5 /* R.generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A4F2C0F1F5200321AC5 /* R.generated.swift */; };
5E9A1A522C0F205A00321AC5 /* LeagueController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E9A1A512C0F205A00321AC5 /* LeagueController.swift */; };
5EA670622C104D2800CEEA01 /* LoggerTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EA670612C104D2800CEEA01 /* LoggerTools.swift */; };
5EC03E4A2C1155530068A5CB /* NetworkTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EC03E492C1155530068A5CB /* NetworkTools.swift */; };
5EC03E4E2C1155720068A5CB /* CacheTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EC03E4D2C1155720068A5CB /* CacheTools.swift */; };
5EC03E502C118A420068A5CB /* AppInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EC03E4F2C118A420068A5CB /* AppInfo.swift */; };
5EC03E532C118FA00068A5CB /* ScoreProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EC03E522C118FA00068A5CB /* ScoreProvider.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
0F08FB0AC554BD156228E35A /* Pods-AoleiSports.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AoleiSports.debug.xcconfig"; path = "Target Support Files/Pods-AoleiSports/Pods-AoleiSports.debug.xcconfig"; sourceTree = "<group>"; };
5E6CF0092C12FAD600BF3CF5 /* TargetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetController.swift; sourceTree = "<group>"; };
5E9A19E82C0EAC0200321AC5 /* AoleiSports.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AoleiSports.app; sourceTree = BUILT_PRODUCTS_DIR; };
5E9A19EB2C0EAC0200321AC5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
5E9A19F42C0EAC0300321AC5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
......@@ -83,13 +89,17 @@
5E9A1A3D2C0F043100321AC5 /* RootController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootController.swift; sourceTree = "<group>"; };
5E9A1A3F2C0F04CC00321AC5 /* HomeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeController.swift; sourceTree = "<group>"; };
5E9A1A412C0F04DB00321AC5 /* ProfileController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileController.swift; sourceTree = "<group>"; };
5E9A1A472C0F0DC400321AC5 /* AsBaseController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsBaseController.swift; sourceTree = "<group>"; };
5E9A1A472C0F0DC400321AC5 /* BaseController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseController.swift; sourceTree = "<group>"; };
5E9A1A492C0F13BF00321AC5 /* UIColor+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Ext.swift"; sourceTree = "<group>"; };
5E9A1A4B2C0F144200321AC5 /* ColorTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorTools.swift; sourceTree = "<group>"; };
5E9A1A4D2C0F1A2E00321AC5 /* FontTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FontTools.swift; sourceTree = "<group>"; };
5E9A1A4F2C0F1F5200321AC5 /* R.generated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = R.generated.swift; sourceTree = SOURCE_ROOT; };
5E9A1A512C0F205A00321AC5 /* LeagueController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeagueController.swift; sourceTree = "<group>"; };
5EA670612C104D2800CEEA01 /* LoggerTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggerTools.swift; sourceTree = "<group>"; };
5EC03E492C1155530068A5CB /* NetworkTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkTools.swift; sourceTree = "<group>"; };
5EC03E4D2C1155720068A5CB /* CacheTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheTools.swift; sourceTree = "<group>"; };
5EC03E4F2C118A420068A5CB /* AppInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppInfo.swift; sourceTree = "<group>"; };
5EC03E522C118FA00068A5CB /* ScoreProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScoreProvider.swift; sourceTree = "<group>"; };
EA8E48B8C50E8D94161797C6 /* Pods-AoleiSports.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AoleiSports.release.xcconfig"; path = "Target Support Files/Pods-AoleiSports/Pods-AoleiSports.release.xcconfig"; sourceTree = "<group>"; };
F63DEFD57EAA7FD3A430F57E /* Pods_AoleiSports.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AoleiSports.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
......@@ -177,6 +187,7 @@
5E9A1A3F2C0F04CC00321AC5 /* HomeController.swift */,
5E9A1A412C0F04DB00321AC5 /* ProfileController.swift */,
5E9A1A512C0F205A00321AC5 /* LeagueController.swift */,
5EC03E522C118FA00068A5CB /* ScoreProvider.swift */,
);
path = Src;
sourceTree = "<group>";
......@@ -231,6 +242,9 @@
5E9A1A4B2C0F144200321AC5 /* ColorTools.swift */,
5E9A1A4D2C0F1A2E00321AC5 /* FontTools.swift */,
5EA670612C104D2800CEEA01 /* LoggerTools.swift */,
5EC03E492C1155530068A5CB /* NetworkTools.swift */,
5EC03E4D2C1155720068A5CB /* CacheTools.swift */,
5EC03E4F2C118A420068A5CB /* AppInfo.swift */,
);
path = Utils;
sourceTree = "<group>";
......@@ -238,7 +252,8 @@
5E9A1A462C0F0D9E00321AC5 /* Base */ = {
isa = PBXGroup;
children = (
5E9A1A472C0F0DC400321AC5 /* AsBaseController.swift */,
5E9A1A472C0F0DC400321AC5 /* BaseController.swift */,
5E6CF0092C12FAD600BF3CF5 /* TargetController.swift */,
);
path = Base;
sourceTree = "<group>";
......@@ -391,8 +406,10 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5EC03E532C118FA00068A5CB /* ScoreProvider.swift in Sources */,
5E9A1A522C0F205A00321AC5 /* LeagueController.swift in Sources */,
5E9A1A282C0EF51600321AC5 /* GKNavigationBarConfigure.swift in Sources */,
5EC03E4A2C1155530068A5CB /* NetworkTools.swift in Sources */,
5E9A1A342C0EF51600321AC5 /* UIScrollView+GKExtension.swift in Sources */,
5E9A1A402C0F04CC00321AC5 /* HomeController.swift in Sources */,
5E9A1A2B2C0EF51600321AC5 /* GKNavigationBarSwift.swift in Sources */,
......@@ -401,15 +418,18 @@
5E9A1A332C0EF51600321AC5 /* UINavigationItem+GKExtension.swift in Sources */,
5E9A1A4A2C0F13BF00321AC5 /* UIColor+Ext.swift in Sources */,
5E9A1A362C0EF51600321AC5 /* UIViewController+GKGesture.swift in Sources */,
5E6CF00A2C12FAD600BF3CF5 /* TargetController.swift in Sources */,
5E9A1A4C2C0F144200321AC5 /* ColorTools.swift in Sources */,
5E9A1A482C0F0DC400321AC5 /* AsBaseController.swift in Sources */,
5E9A1A482C0F0DC400321AC5 /* BaseController.swift in Sources */,
5E9A1A422C0F04DB00321AC5 /* ProfileController.swift in Sources */,
5E9A1A352C0EF51600321AC5 /* UIViewController+GKExtension.swift in Sources */,
5EC03E4E2C1155720068A5CB /* CacheTools.swift in Sources */,
5E9A1A2F2C0EF51600321AC5 /* UIBarButtonItem+GKExtension.swift in Sources */,
5EA670622C104D2800CEEA01 /* LoggerTools.swift in Sources */,
5E9A1A312C0EF51600321AC5 /* UINavigationController+GKExtension.swift in Sources */,
5E9A1A3C2C0F00AD00321AC5 /* ImportTools.swift in Sources */,
5E9A19EC2C0EAC0200321AC5 /* AppDelegate.swift in Sources */,
5EC03E502C118A420068A5CB /* AppInfo.swift in Sources */,
5E9A1A392C0EFF4000321AC5 /* UIWindow+Ext.swift in Sources */,
5E9A1A292C0EF51600321AC5 /* GKNavigationBarDefine.swift in Sources */,
5E9A1A4E2C0F1A2E00321AC5 /* FontTools.swift in Sources */,
......
//
// AsBaseController.swift
// BaseController.swift
// AoleiSports
//
// Created by ilCode on 2024/6/4.
......@@ -7,10 +7,13 @@
import UIKit
class AsBaseController: UIViewController {
// 基础类
class BaseController: UIViewController {
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = kMainBgColor
}
}
//
// TargetController.swift
// AoleiSports
//
// Created by ilCode on 2024/6/7.
//
import UIKit
// TargetType类
class TargetController<Target: TargetType>: BaseController {
var provider: BaseMoyaProvider<Target>?
}
......@@ -7,24 +7,62 @@
import UIKit
class HomeController: AsBaseController {
lazy var filterItem: UIBarButtonItem = {
class HomeController: BaseController {
let isHiddenRelay = BehaviorRelay<Bool>(value: false)
var provider: ScoreProvider<MatchListTarget>?
lazy var filterBtn: UIButton = {
let btn = UIButton()
btn.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
btn.addTarget(self, action: #selector(filterAction), for: .touchUpInside)
btn.rx.tap.subscribe(onNext: {
let leagueVC = LeagueController()
self.navigationController?.pushViewController(leagueVC, animated: true)
}).disposed(by: disposeBag)
btn.setTitle("筛选", for: .normal)
btn.setTitleColor(kMainTitleColor, for: .normal)
btn.titleLabel?.font = kFontSize(14)
btn.imageEdgeInsets = UIEdgeInsets(top: 0, left: -5, bottom: 0, right: 0)
btn.setImage(R.image.match_filter(), for: .normal)
return UIBarButtonItem(customView: btn)
isHiddenRelay.asObservable()
.bind(to: btn.rx.isHidden)
.disposed(by: disposeBag)
return btn
}()
lazy var setItem: UIBarButtonItem = {
let btn = UIButton()
btn.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
btn.addTarget(self, action: #selector(setAction), for: .touchUpInside)
btn.setImage(R.image.match_setting(), for: .normal)
// 方法1
// btn.rx.tap.do(onNext: {
// print("点击了设置按钮")
// })
// .map { !self.filterBtn.isHidden }
// .bind(to: filterBtn.rx.isHidden)
// .disposed(by: disposeBag)
// 方法2:
btn.rx.tap.subscribe(onNext: {
self.isHiddenRelay.accept(!self.isHiddenRelay.value)
print("点击了设置按钮")
// ScoreViewModel.getNmMatchList { result in
//
// }
self.provider?.getNmMatchList { result in
switch result {
case let .success(list):
print("变化了", list.count)
case .failure(_):
print("出错了...")
}
}
})
.disposed(by: disposeBag)
return UIBarButtonItem(customView: btn)
}()
......@@ -32,10 +70,14 @@ class HomeController: AsBaseController {
super.viewDidLoad()
gk_navTitle = "赛事比分"
gk_navLeftBarButtonItem = filterItem
gk_navLeftBarButtonItem = UIBarButtonItem(customView: filterBtn)
gk_navRightBarButtonItem = setItem
provider = ScoreProvider(vc: self)
}
}
extension HomeController {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
DDLogVerbose("Verbose")
DDLogDebug("Debug")
......@@ -44,14 +86,3 @@ class HomeController: AsBaseController {
DDLogError("Error")
}
}
extension HomeController {
@objc private func filterAction() {
let leagueVC = LeagueController()
navigationController?.pushViewController(leagueVC, animated: true)
}
@objc private func setAction() {
}
}
......@@ -7,8 +7,7 @@
import UIKit
class LeagueController: AsBaseController {
class LeagueController: BaseController {
override func viewDidLoad() {
super.viewDidLoad()
......
......@@ -7,11 +7,9 @@
import UIKit
class ProfileController: AsBaseController {
class ProfileController: BaseController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
//
// ScoreProvider.swift
// AoleiSports
//
// Created by ilCode on 2024/6/6.
//
import Foundation
enum MatchListTarget: TargetType {
case matchDate(date: String) // 比赛日期
case issueDate(date: String) // 期号日期
var task: Moya.Task {
var dateKey = ""
var dateValue = ""
switch self {
case .matchDate(let date):
dateKey = "match_date"
dateValue = date
case .issueDate(let date):
dateKey = "issue_date"
dateValue = date
}
let parameters = ["query": """
query{
nm_match_list(\(dateKey):"\(dateValue)")
}
"""]
return .requestParameters(parameters: parameters, encoding: JSONEncoding.default)
}
}
class ScoreProvider<Target: TargetType>: BaseMoyaProvider<Target> {
// 获取赛事列表数据
func getNmMatchList(match_date: String = "", issue_date: String = "", completion: @escaping (Result<[[String: Any]], Error>) -> Void) {
let target: MatchListTarget = issue_date.isEmpty ? .matchDate(date: match_date) : .issueDate(date: issue_date)
self.rx.request(target as! Target).subscribe { event in
switch event {
case let .success(response):
guard let json = try? JSONSerialization.jsonObject(with: response.data, options: []) as? [String: Any],
let dataDict = json["data"] as? [String: Any],
let nmMatchList = dataDict["nm_match_list"] as? [[String: Any]] else {
DDLogError("Error: Failed to parse JSON data")
return
}
DDLogDebug("\(nmMatchList)")
completion(.success(nmMatchList))
case let .failure(error):
completion(.failure(error))
}
}.disposed(by: disposeBag)
}
// 获取赛事列表数据
// static func getNmMatchList(match_date: String = "", issue_date: String = "", completion: @escaping (Result<[[String: Any]], Error>) -> Void) {
// let target: MatchListTarget = issue_date.isEmpty ? .matchDate(date: match_date) : .issueDate(date: issue_date)
//
// let provider = MoyaProvider<MatchListTarget>()
// provider.request(target) { result in
// switch result {
// case let .success(response):
// guard let json = try? JSONSerialization.jsonObject(with: response.data, options: []) as? [String: Any],
// let dataDict = json["data"] as? [String: Any],
// let nmMatchList = dataDict["nm_match_list"] as? [[String: Any]] else {
// DDLogError("Error: Failed to parse JSON data")
// return
// }
// DDLogDebug("\(nmMatchList)")
// completion(.success(nmMatchList))
// case let .failure(error):
// completion(.failure(error))
// }
// }
// }
}
//
// AppInfo.swift
// AoleiSports
//
// Created by ilCode on 2024/6/6.
//
import Foundation
struct AppInfo: Codable {
var promoterId: Int = 501
var version: String = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
var os: String = "iOS"
var packageName: String = "AoleiSports"
var uniqueId: String
static func getAppInfo() -> String {
let info = AppInfo(uniqueId:getUKey())
return "{\"packageName\":\"\(info.packageName)\",\"os\":\"\(info.os)\",\"uniqueId\":\"\(info.uniqueId)\",\"version\":\"\(info.version)\",\"promoterId\":\"\(info.promoterId)\"}"
}
static func getUKey() -> String {
if let savedUKey = UserDefaults.standard.string(forKey: "uKey") {
return savedUKey
} else {
let newUKey = UUID().uuidString
UserDefaults.standard.set(newUKey, forKey: "uKey")
return newUKey
}
}
}
//
// CacheTools.swift
// AoleiSports
//
// Created by ilCode on 2024/6/6.
//
import Foundation
......@@ -7,10 +7,10 @@
import UIKit
// 字体 字号
func kFontSize(_ size: CGFloat) -> UIFont {
return UIFont.systemFont(ofSize: size)
}
func kBoldFontSize(_ size: CGFloat) -> UIFont {
return UIFont.boldSystemFont(ofSize: size)
}
......@@ -6,3 +6,7 @@
//
@_exported import CocoaLumberjack
@_exported import SnapKit
@_exported import RxSwift
@_exported import RxCocoa
@_exported import Moya
......@@ -36,7 +36,7 @@ class CustomLogFormatter: NSObject, DDLogFormatter {
logLevel = "[UNKNOWN]"
}
return "\(logLevel) [\(logMessage.fileName) \(logMessage.function ?? ""):\(logMessage.line)]: \(logMessage.message)"
return "\(logLevel) [\(logMessage.fileName) \(logMessage.function ?? ""):\(logMessage.line)] =>\n\(logMessage.message)"
}
}
......
//
// NetworkTools.swift
// AoleiSports
//
// Created by ilCode on 2024/6/6.
//
import Foundation
let SERVER_URL = "https://m.ydn.com/"
let API_BASE_URL = SERVER_URL + "graphql"
// 共用
extension TargetType {
var baseURL: URL {
return URL(string: API_BASE_URL)!
}
var path: String {
return ""
}
var method: Moya.Method {
.post
}
var headers: [String : String]? {
// [
// "appversion": AppInfo.getAppInfo(),
// "Content-Type": "application/json; charset=utf-8"
// ]
return nil
}
}
// 自定义Plugin
final class BaseMoyaPlugin: PluginType {
var vc: UIViewController
private var spinner: UIActivityIndicatorView!
init(vc: UIViewController) {
self.vc = vc
spinner = UIActivityIndicatorView(style: UIActivityIndicatorView.Style.medium)
spinner.center = self.vc.view.center
}
func prepare(_ request: URLRequest, target: any TargetType) -> URLRequest {
var mRequest = request
// 设置请求超时时间
mRequest.timeoutInterval = 30
// 这里也可以设置header
mRequest.addValue(AppInfo.getAppInfo(), forHTTPHeaderField: "appversion")
mRequest.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
return mRequest
}
func willSend(_ request: any RequestType, target: any TargetType) {
DispatchQueue.main.async { [weak self] in
self?.vc.view.addSubview(self!.spinner)
self?.spinner.startAnimating()
}
}
func didReceive(_ result: Result<Response, MoyaError>, target: any TargetType) {
// 移除界面中央的活动状态指示器
DispatchQueue.main.async { [weak self] in
self?.spinner.removeFromSuperview()
self?.spinner.stopAnimating()
}
// 只有请求错误时会继续往下执行
guard case let Result.failure(error) = result else { return }
// 弹出并显示错误信息
let message = error.errorDescription ?? "未知错误"
let alertViewController = UIAlertController(title: "请求失败",
message: "\(message)",
preferredStyle: .alert)
alertViewController.addAction(UIAlertAction(title: "确定", style: .default,
handler: nil))
vc.present(alertViewController, animated: true)
}
}
// 自定义MoyaProvider
class BaseMoyaProvider<Target: TargetType>: MoyaProvider<Target> {
let disposeBag = DisposeBag()
var basePlugin: BaseMoyaPlugin
init(vc: UIViewController) {
self.basePlugin = BaseMoyaPlugin(vc: vc)
super.init(plugins: [self.basePlugin])
}
}
......@@ -4,8 +4,13 @@ target 'AoleiSports' do
use_frameworks!
pod 'Alamofire', '~> 5.9.1'
pod 'Moya/RxSwift', '~> 15.0'
pod 'R.swift', '~> 7.3.2'
pod 'CocoaLumberjack/Swift'
pod 'SnapKit', '~> 5.7.1'
pod 'RxSwift', '~> 6.7.1'
pod 'RxCocoa', '~> 6.7.1',:inhibit_warnings => true
pod 'SwiftyJSON', '~> 5.0.2'
end
......
......@@ -3,24 +3,54 @@ PODS:
- CocoaLumberjack/Core (3.8.5)
- CocoaLumberjack/Swift (3.8.5):
- CocoaLumberjack/Core
- Moya/Core (15.0.0):
- Alamofire (~> 5.0)
- Moya/RxSwift (15.0.0):
- Moya/Core
- RxSwift (~> 6.0)
- R.swift (7.3.2)
- RxCocoa (6.7.1):
- RxRelay (= 6.7.1)
- RxSwift (= 6.7.1)
- RxRelay (6.7.1):
- RxSwift (= 6.7.1)
- RxSwift (6.7.1)
- SnapKit (5.7.1)
- SwiftyJSON (5.0.2)
DEPENDENCIES:
- Alamofire (~> 5.9.1)
- CocoaLumberjack/Swift
- Moya/RxSwift (~> 15.0)
- R.swift (~> 7.3.2)
- RxCocoa (~> 6.7.1)
- RxSwift (~> 6.7.1)
- SnapKit (~> 5.7.1)
- SwiftyJSON (~> 5.0.2)
SPEC REPOS:
trunk:
- Alamofire
- CocoaLumberjack
- Moya
- R.swift
- RxCocoa
- RxRelay
- RxSwift
- SnapKit
- SwiftyJSON
SPEC CHECKSUMS:
Alamofire: f36a35757af4587d8e4f4bfa223ad10be2422b8c
CocoaLumberjack: 6a459bc897d6d80bd1b8c78482ec7ad05dffc3f0
Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee
R.swift: 0af0d882f49f03711415cb4e5215daa977d8a480
RxCocoa: f5609cb4637587a7faa99c5d5787e3ad582b75a4
RxRelay: 4151ba01152436b08271e08410135e099880eae5
RxSwift: b9a93a26031785159e11abd40d1a55bcb8057e52
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
SwiftyJSON: f5b1bf1cd8dd53cd25887ac0eabcfd92301c6a5a
PODFILE CHECKSUM: 4e22825b4e4b080e749be4d7c6766ee2c290500e
PODFILE CHECKSUM: ba331d23fa7a277b9fb3ecb12535749b08a25bb2
COCOAPODS: 1.15.2
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!