From 12081e7bbe244ca57e06c2239a9cb009d02b1227 Mon Sep 17 00:00:00 2001 From: youjmen Date: Mon, 7 Oct 2024 20:48:17 +0900 Subject: [PATCH] fix: remove rxbus dependency, embed to repository --- Example/Podfile.lock | 4 +- Example/iamport-ios.xcodeproj/project.pbxproj | 8 +- .../xcshareddata/swiftpm/Package.resolved | 21 +- Package.resolved | 9 - Package.swift | 2 - .../Classes/Domain/Utils/EventBus.swift | 1 - .../Classes/Domain/Utils/RxBus.swift | 317 ++++++++++++++++++ .../Domain/strategy/BaseStrategy.swift | 1 - .../Domain/strategy/BaseWebViewStrategy.swift | 1 - .../CertificationWebViewStrategy.swift | 1 - .../Domain/strategy/ChaiStrategy.swift | 1 - .../strategy/InicisTransWebViewStrategy.swift | 1 - .../Domain/strategy/JudgeStrategy.swift | 1 - .../strategy/NiceTransWebViewStrategy.swift | 1 - .../Domain/strategy/WebViewStrategy.swift | 1 - .../Presentation/IamportMobileWebMode.swift | 1 - .../Classes/Presentation/IamportSdk.swift | 1 - .../IamportWKWebViewDelegate.swift | 1 - .../Presentation/IamportWebViewMode.swift | 1 - .../Classes/Presentation/MainViewModel.swift | 1 - .../Presentation/WebViewController.swift | 1 - .../Classes/Presentation/WebViewModel.swift | 1 - iamport-ios.podspec | 1 - 23 files changed, 330 insertions(+), 48 deletions(-) create mode 100644 Sources/iamport-ios/Classes/Domain/Utils/RxBus.swift diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 06eb875..3ad6434 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -32,6 +32,6 @@ SPEC CHECKSUMS: Swinject: db795b8d6d78559b25fbebb0170d2635be1176e2 Then: acfe0be7e98221c6204e12f8161459606d5d822d -PODFILE CHECKSUM: 146dde37873645c94b7484ab97e8ffb748326d3f +PODFILE CHECKSUM: ceeed2078a94b70a44f8d0f16e553607f5311068 -COCOAPODS: 1.11.3 +COCOAPODS: 1.15.2 diff --git a/Example/iamport-ios.xcodeproj/project.pbxproj b/Example/iamport-ios.xcodeproj/project.pbxproj index 85c66ef..894a6c3 100644 --- a/Example/iamport-ios.xcodeproj/project.pbxproj +++ b/Example/iamport-ios.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -606,6 +606,7 @@ baseConfigurationReference = 08FFCB46A6C09E654DA2AAA6 /* Pods-iamport-ios_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = ZN6U3LJ36Q; INFOPLIST_FILE = "iamport-ios/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -613,7 +614,7 @@ "@executable_path/Frameworks", ); MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.iamport-ios-Example"; + PRODUCT_BUNDLE_IDENTIFIER = "org.test.demo.iamport-ios-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; @@ -626,6 +627,7 @@ baseConfigurationReference = C5D2384CF3E87A54AE0BEA0E /* Pods-iamport-ios_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = ZN6U3LJ36Q; INFOPLIST_FILE = "iamport-ios/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -633,7 +635,7 @@ "@executable_path/Frameworks", ); MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.iamport-ios-Example"; + PRODUCT_BUNDLE_IDENTIFIER = "org.test.demo.iamport-ios-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; diff --git a/Example/iamport-ios.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/iamport-ios.xcworkspace/xcshareddata/swiftpm/Package.resolved index d667c54..3bd832e 100644 --- a/Example/iamport-ios.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Example/iamport-ios.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -6,17 +6,8 @@ "repositoryURL": "https://github.com/Alamofire/Alamofire.git", "state": { "branch": null, - "revision": "78424be314842833c04bc3bef5b72e85fff99204", - "version": "5.6.4" - } - }, - { - "package": "RxBusForPort", - "repositoryURL": "https://github.com/iamport/RxBus-Swift", - "state": { - "branch": null, - "revision": "24458425acf1da825a8e7587231052cef90c3a6b", - "version": "1.3.5" + "revision": "f455c2975872ccd2d9c81594c658af65716e9b9a", + "version": "5.9.1" } }, { @@ -24,8 +15,8 @@ "repositoryURL": "https://github.com/ReactiveX/RxSwift.git", "state": { "branch": null, - "revision": "b4307ba0b6425c0ba4178e138799946c3da594f8", - "version": "6.5.0" + "revision": "c7c7d2cf50a3211fe2843f76869c698e4e417930", + "version": "6.8.0" } }, { @@ -33,8 +24,8 @@ "repositoryURL": "https://github.com/nicklockwood/SwiftFormat", "state": { "branch": null, - "revision": "fee7e1a1ac9518cfe3c4673382368641ccbdc62c", - "version": "0.51.7" + "revision": "ab6844edb79a7b88dc6320e6cee0a0db7674dac3", + "version": "0.54.5" } }, { diff --git a/Package.resolved b/Package.resolved index 8eedb0f..43af681 100644 --- a/Package.resolved +++ b/Package.resolved @@ -10,15 +10,6 @@ "version": "5.4.3" } }, - { - "package": "RxBus", - "repositoryURL": "https://github.com/iamport/RxBus-Swift", - "state": { - "branch": null, - "revision": "b154da5fffb4c5d0d17b7f46e9cd38f382e298e4", - "version": "1.3.2" - } - }, { "package": "RxSwift", "repositoryURL": "https://github.com/ReactiveX/RxSwift.git", diff --git a/Package.swift b/Package.swift index f372e55..e730daa 100644 --- a/Package.swift +++ b/Package.swift @@ -19,7 +19,6 @@ let package = Package( // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), .package(url: "https://github.com/ReactiveX/RxSwift.git", .upToNextMajor(from: "6.0.0")), - .package(name: "RxBusForPort", url: "https://github.com/iamport/RxBus-Swift", .upToNextMinor(from: "1.3.6-alpha.1")), .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.4.0")), .package(url: "https://github.com/devxoul/Then.git", .upToNextMajor(from: "2.7.0")), .package(url: "https://github.com/nicklockwood/SwiftFormat", from: "0.50.4") @@ -29,7 +28,6 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages this package depends on. .target(name: "iamport-ios", dependencies: ["RxSwift", - "RxBusForPort", "Alamofire", "Then", .product(name: "RxCocoa",package: "RxSwift"), diff --git a/Sources/iamport-ios/Classes/Domain/Utils/EventBus.swift b/Sources/iamport-ios/Classes/Domain/Utils/EventBus.swift index f0da9c7..6e40cf6 100644 --- a/Sources/iamport-ios/Classes/Domain/Utils/EventBus.swift +++ b/Sources/iamport-ios/Classes/Domain/Utils/EventBus.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxRelay import RxSwift diff --git a/Sources/iamport-ios/Classes/Domain/Utils/RxBus.swift b/Sources/iamport-ios/Classes/Domain/Utils/RxBus.swift new file mode 100644 index 0000000..1dc4d36 --- /dev/null +++ b/Sources/iamport-ios/Classes/Domain/Utils/RxBus.swift @@ -0,0 +1,317 @@ +// +// RxBus.swift +// iamport-ios +// +// Created by Holden on 10/7/24. +// + +import Foundation +import RxSwift + +public protocol BusEvent { + static var name: String { get } +} + +public extension BusEvent { + static var name: String { + return "\(self)" + } +} + +private class SynchronizedValues: Sequence { + private let accessQueue = DispatchQueue(label: "com.ridi.rxbus.accessQueue", attributes: .concurrent) + + private var _values = [Key: Value]() + + subscript(key: Key) -> Value? { + get { + return accessQueue.sync { self._values[key] } + } + set { + accessQueue.async(flags: .barrier) { + self._values[key] = newValue + } + } + } + + var keys: Dictionary.Keys { + return accessQueue.sync { self._values.keys } + } + + var values: Dictionary.Values { + return accessQueue.sync { self._values.values } + } + + var isEmpty: Bool { + return accessQueue.sync { self._values.isEmpty } + } + + func removeValue(forKey key: Key) -> Value? { + let value = self[key] + accessQueue.async(flags: .barrier) { + self._values.removeValue(forKey: key) + } + return value + } + + func removeAll() { + accessQueue.async(flags: .barrier) { + self._values.removeAll() + } + } + + typealias Iterator = DictionaryIterator + + func makeIterator() -> Dictionary.Iterator { + return accessQueue.sync { self._values.makeIterator() } + } +} + +public final class RxBus: CustomStringConvertible { + public static let shared = RxBus() + + private init() { } + + // MARK: - + + private let locker = NSLock() + + private var subjects = SynchronizedValues() + private var subscriptionCounts = SynchronizedValues() + private var stickyMap = SynchronizedValues() + private var nsObservers = SynchronizedValues() + + public var description: String { + var string = "Subscription Total Count: \(count)\n" + + string += "Subscription List:\n" + subjects.keys.sorted(by: { compareKey($0, $1) }).forEach { key in + string += "\t\(key)\n" + let priority = sliceEventPriority(fromKey: key) + let count = subscriptionCounts[key] ?? 0 + string += "\t\tPriority: \(priority), Subject: \(String(describing: subjects[key])), Count: \(count)\n" + } + if subjects.isEmpty { + string += "\tEmpty\n" + } + + string += "NSObserver List:\n" + for (key, nsObserver) in nsObservers { + string += "\t\(key)\n" + string += "\t\tNSObserver: \(nsObserver)\n" + } + if nsObservers.isEmpty { + string += "\tEmpty\n" + } + + string += "Sticky List:\n" + for (key, subject) in stickyMap { + string += "\t\(key)\n" + string += "\t\tSubject: \(subject)\n" + } + if stickyMap.isEmpty { + string += "\tEmpty\n" + } + + return "\(string)" + } + + // MARK: - String Util + + private let separator = Character("_") + private typealias EventName = String + private typealias EventPriority = Int + private typealias SubscriptionKey = String // EventName + separator + EventPriority + + private func makeSubscriptionKey(eventName: EventName, priority: EventPriority) -> SubscriptionKey { + return "\(eventName)\(separator)\(priority)" + } + + private func sliceEventName(fromKey key: SubscriptionKey) -> EventName { + return key.split(separator: separator).dropLast().joined(separator: "\(separator)") + } + + private func sliceEventPriority(fromKey key: SubscriptionKey) -> EventPriority { + if let string = key.split(separator: separator).last { + return Int(string) ?? 0 + } + return 0 + } + + private func compareKey(_ string1: String, _ string2: String) -> Bool { + return string1.compare(string2, options: [.literal, .numeric]) == .orderedDescending + } + + // MARK: - Subscription Count + + public var count: Int { + return subscriptionCounts.values.reduce(0, +) + } + + private func increaseSubscriptionCount(forKey key: SubscriptionKey) { + if let count = subscriptionCounts[key] { + subscriptionCounts[key] = count + 1 + } else { + subscriptionCounts[key] = 1 + } + } + + private func decreaseSubscriptionCount(forKey key: SubscriptionKey) { + if let count = subscriptionCounts[key] { + if count - 1 == 0 { + let eventName = sliceEventName(fromKey: key) + _ = subjects.removeValue(forKey: key) + _ = subscriptionCounts.removeValue(forKey: key) + if !subscriptionCounts.keys.contains(where: { $0.hasPrefix(eventName) }) { + if let nsObserver = nsObservers[eventName] { + NotificationCenter.default.removeObserver(nsObserver) + _ = nsObservers.removeValue(forKey: eventName) + } + } + } else { + subscriptionCounts[key] = count - 1 + } + } + } + + // MARK: - + + public func removeAllStickys() { + stickyMap.removeAll() + } + + // MARK: - BusEvent + + public func asObservable(event: T.Type, priority: Int) -> Observable { + return asObservable(event: event, sticky: false, priority: priority) + } + + public func asObservable(event: T.Type, sticky: Bool = false, priority: Int = 0) -> Observable { + let key = makeSubscriptionKey(eventName: event.name, priority: priority) + locker.lock() + if subjects[key] == nil { + subjects[key] = PublishSubject() + } + locker.unlock() + let observable = (subjects[key] as! PublishSubject).do( + onNext: nil, + onError: nil, + onCompleted: nil, + onSubscribe: { + self.increaseSubscriptionCount(forKey: key) + }, + onSubscribed: nil, + onDispose: { + self.decreaseSubscriptionCount(forKey: key) + } + ) + if sticky, + let lastEvent = removeSticky(event: event) { + return Observable.of(observable, Observable.create({ subscriber -> Disposable in + subscriber.onNext(lastEvent) + return Disposables.create() + })).merge() + } + return observable + } + + public func post(event: T, sticky: Bool = false) { + let eventName = "\(type(of: event))" + if sticky { + stickyMap[eventName] = event + } + subjects.filter { $0.key.hasPrefix(eventName) } + .sorted(by: { compareKey($0.key, $1.key) }) + .forEach { ($0.value as? PublishSubject)?.onNext(event) } + } + + public func stickyEvent(_ event: T.Type) -> T? { + return stickyMap[event.name] as? T + } + + public func removeSticky(event: T.Type) -> T? { + return stickyMap.removeValue(forKey: event.name) as? T + } + + public func removeAllSubscription(){ + subjects.removeAll() + subscriptionCounts.removeAll() + } + + // MARK: - Notification + + private func dispatchNotification(_ notification: Notification) { + let eventName = notification.name.rawValue + subjects.filter { $0.key.hasPrefix(eventName) } + .sorted(by: { compareKey($0.key, $1.key) }) + .forEach { ($0.value as? PublishSubject)?.onNext(notification) } + } + + public func asObservable(notificationName name: Notification.Name, priority: Int) -> Observable { + return asObservable(notificationName: name, sticky: false, priority: priority) + } + + public func asObservable( + notificationName name: Notification.Name, + sticky: Bool = false, + priority: Int = 0 + ) -> Observable { + let key = makeSubscriptionKey(eventName: name.rawValue, priority: priority) + locker.lock() + if subjects[key] == nil { + subjects[key] = PublishSubject() + } + if nsObservers[name.rawValue] == nil { + let center = NotificationCenter.default + nsObservers[name.rawValue] = center.addObserver(forName: name, object: nil, queue: nil) { notification in + self.dispatchNotification(notification) + } + } + locker.unlock() + let observable = (subjects[key] as! Observable).do( + onNext: nil, + onError: nil, + onCompleted: nil, + onSubscribe: { + self.increaseSubscriptionCount(forKey: key) + }, + onSubscribed: nil, + onDispose: { + self.decreaseSubscriptionCount(forKey: key) + } + ) + if sticky, + let lastNotification = removeStickyNotification(name: name) { + return Observable.of(observable, Observable.create({ subscriber -> Disposable in + subscriber.onNext(lastNotification) + return Disposables.create() + })).merge() + } + return observable + } + + public func post( + notificationName name: Notification.Name, + userInfo: [AnyHashable: Any]? = nil, + sticky: Bool = false + ) { + let notification = Notification(name: name, object: nil, userInfo: userInfo) + post(notification: notification, sticky: sticky) + } + + public func post(notification: Notification, sticky: Bool = false) { + let name = notification.name.rawValue + if sticky { + stickyMap[name] = notification + } + NotificationCenter.default.post(notification) + } + + public func stickyNotification(name: Notification.Name) -> Notification? { + return stickyMap[name.rawValue] as? Notification + } + + public func removeStickyNotification(name: Notification.Name) -> Notification? { + return stickyMap.removeValue(forKey: name.rawValue) as? Notification + } +} diff --git a/Sources/iamport-ios/Classes/Domain/strategy/BaseStrategy.swift b/Sources/iamport-ios/Classes/Domain/strategy/BaseStrategy.swift index 55e8dee..cceb407 100644 --- a/Sources/iamport-ios/Classes/Domain/strategy/BaseStrategy.swift +++ b/Sources/iamport-ios/Classes/Domain/strategy/BaseStrategy.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift public class BaseStrategy: IStrategy { diff --git a/Sources/iamport-ios/Classes/Domain/strategy/BaseWebViewStrategy.swift b/Sources/iamport-ios/Classes/Domain/strategy/BaseWebViewStrategy.swift index 0dafb2d..1b0d62b 100644 --- a/Sources/iamport-ios/Classes/Domain/strategy/BaseWebViewStrategy.swift +++ b/Sources/iamport-ios/Classes/Domain/strategy/BaseWebViewStrategy.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift import WebKit diff --git a/Sources/iamport-ios/Classes/Domain/strategy/CertificationWebViewStrategy.swift b/Sources/iamport-ios/Classes/Domain/strategy/CertificationWebViewStrategy.swift index d7c682b..ec76929 100644 --- a/Sources/iamport-ios/Classes/Domain/strategy/CertificationWebViewStrategy.swift +++ b/Sources/iamport-ios/Classes/Domain/strategy/CertificationWebViewStrategy.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift import WebKit diff --git a/Sources/iamport-ios/Classes/Domain/strategy/ChaiStrategy.swift b/Sources/iamport-ios/Classes/Domain/strategy/ChaiStrategy.swift index 27f9ddc..0f99571 100644 --- a/Sources/iamport-ios/Classes/Domain/strategy/ChaiStrategy.swift +++ b/Sources/iamport-ios/Classes/Domain/strategy/ChaiStrategy.swift @@ -4,7 +4,6 @@ import Alamofire import Foundation -import RxBusForPort import RxSwift // TODO: API 들을 따로 모아서 관리하기 diff --git a/Sources/iamport-ios/Classes/Domain/strategy/InicisTransWebViewStrategy.swift b/Sources/iamport-ios/Classes/Domain/strategy/InicisTransWebViewStrategy.swift index 97b7832..0063340 100644 --- a/Sources/iamport-ios/Classes/Domain/strategy/InicisTransWebViewStrategy.swift +++ b/Sources/iamport-ios/Classes/Domain/strategy/InicisTransWebViewStrategy.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift import WebKit diff --git a/Sources/iamport-ios/Classes/Domain/strategy/JudgeStrategy.swift b/Sources/iamport-ios/Classes/Domain/strategy/JudgeStrategy.swift index 27be3b0..93e9781 100644 --- a/Sources/iamport-ios/Classes/Domain/strategy/JudgeStrategy.swift +++ b/Sources/iamport-ios/Classes/Domain/strategy/JudgeStrategy.swift @@ -4,7 +4,6 @@ import Alamofire import Foundation -import RxBusForPort import RxSwift public class JudgeStrategy: BaseStrategy { diff --git a/Sources/iamport-ios/Classes/Domain/strategy/NiceTransWebViewStrategy.swift b/Sources/iamport-ios/Classes/Domain/strategy/NiceTransWebViewStrategy.swift index 8d050ad..557f327 100644 --- a/Sources/iamport-ios/Classes/Domain/strategy/NiceTransWebViewStrategy.swift +++ b/Sources/iamport-ios/Classes/Domain/strategy/NiceTransWebViewStrategy.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift import WebKit diff --git a/Sources/iamport-ios/Classes/Domain/strategy/WebViewStrategy.swift b/Sources/iamport-ios/Classes/Domain/strategy/WebViewStrategy.swift index d46b28d..ff3b601 100644 --- a/Sources/iamport-ios/Classes/Domain/strategy/WebViewStrategy.swift +++ b/Sources/iamport-ios/Classes/Domain/strategy/WebViewStrategy.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift import WebKit diff --git a/Sources/iamport-ios/Classes/Presentation/IamportMobileWebMode.swift b/Sources/iamport-ios/Classes/Presentation/IamportMobileWebMode.swift index d37cfb9..6c094f4 100644 --- a/Sources/iamport-ios/Classes/Presentation/IamportMobileWebMode.swift +++ b/Sources/iamport-ios/Classes/Presentation/IamportMobileWebMode.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxRelay import RxSwift import UIKit diff --git a/Sources/iamport-ios/Classes/Presentation/IamportSdk.swift b/Sources/iamport-ios/Classes/Presentation/IamportSdk.swift index b173882..077543f 100644 --- a/Sources/iamport-ios/Classes/Presentation/IamportSdk.swift +++ b/Sources/iamport-ios/Classes/Presentation/IamportSdk.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift import Then import WebKit diff --git a/Sources/iamport-ios/Classes/Presentation/IamportWKWebViewDelegate.swift b/Sources/iamport-ios/Classes/Presentation/IamportWKWebViewDelegate.swift index 0845cb8..5d5b154 100644 --- a/Sources/iamport-ios/Classes/Presentation/IamportWKWebViewDelegate.swift +++ b/Sources/iamport-ios/Classes/Presentation/IamportWKWebViewDelegate.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxRelay import RxSwift import Then diff --git a/Sources/iamport-ios/Classes/Presentation/IamportWebViewMode.swift b/Sources/iamport-ios/Classes/Presentation/IamportWebViewMode.swift index e40492c..822812f 100644 --- a/Sources/iamport-ios/Classes/Presentation/IamportWebViewMode.swift +++ b/Sources/iamport-ios/Classes/Presentation/IamportWebViewMode.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxRelay import RxSwift import Then diff --git a/Sources/iamport-ios/Classes/Presentation/MainViewModel.swift b/Sources/iamport-ios/Classes/Presentation/MainViewModel.swift index d8bff51..2f8de3d 100644 --- a/Sources/iamport-ios/Classes/Presentation/MainViewModel.swift +++ b/Sources/iamport-ios/Classes/Presentation/MainViewModel.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift class MainViewModel { diff --git a/Sources/iamport-ios/Classes/Presentation/WebViewController.swift b/Sources/iamport-ios/Classes/Presentation/WebViewController.swift index 7f6dcc2..4f84423 100644 --- a/Sources/iamport-ios/Classes/Presentation/WebViewController.swift +++ b/Sources/iamport-ios/Classes/Presentation/WebViewController.swift @@ -1,4 +1,3 @@ -import RxBusForPort import RxRelay import RxSwift import UIKit diff --git a/Sources/iamport-ios/Classes/Presentation/WebViewModel.swift b/Sources/iamport-ios/Classes/Presentation/WebViewModel.swift index 417022b..c949a20 100644 --- a/Sources/iamport-ios/Classes/Presentation/WebViewModel.swift +++ b/Sources/iamport-ios/Classes/Presentation/WebViewModel.swift @@ -3,7 +3,6 @@ // import Foundation -import RxBusForPort import RxSwift internal class WebViewModel { diff --git a/iamport-ios.podspec b/iamport-ios.podspec index ca5f387..e5f7887 100644 --- a/iamport-ios.podspec +++ b/iamport-ios.podspec @@ -52,7 +52,6 @@ Pod::Spec.new do |s| s.dependency 'Alamofire', '~> 5.1' # Pods for RxSwift+MVVM - s.dependency 'RxBusForPort' s.dependency 'RxSwift', '~> 6.0' s.dependency 'RxCocoa' s.dependency 'RxRelay'