diff --git a/README.md b/README.md index 2b899c5..f667096 100644 --- a/README.md +++ b/README.md @@ -19,4 +19,25 @@ do { ``` ## Installation -Swift Package Managerを使ってインストールすることができます。Xcodeの `File > Add Packages...` から `https://github.com/pixiv/ios-tutorial-api-mock` を入力して利用できます \ No newline at end of file +Swift Package Managerを使ってインストールすることができます。Xcodeの `File > Add Packages...` から `https://github.com/pixiv/ios-tutorial-api-mock` を入力して利用できます + +## Tips +有線LANを接続したMac上のiOS Simulatorで開発をしている場合、 `IllustError.networkError` が発生してAPIリクエストに失敗します。 +次のコードに書き換えることで、シミュレーター上で動かすことが可能になります。 + +```swift +import IllustAPIMock + +let api = IllustAPIMock() +api.networkMonitor = NetworkMonitorImpl(interfaceType: .wiredEthernet) // この行を追加 + +do { + let rankingIllusts = try await api.getRanking() + let recommendedIllusts = try await api.getRecommended() + _ = try await api.postIsFavorited(illustID: ..., isFavorited: true) +} catch { + ... +} +``` + +ただし、この変更を行ったコードを実機で動かした場合は、iPhone/iPadが有線LANに接続していない場合に `IllustError.networkError` が発生する点に注意して下さい。 \ No newline at end of file diff --git a/Sources/IllustAPIMock/IllustAPIMock.swift b/Sources/IllustAPIMock/IllustAPIMock.swift index aa08a40..f6d95f3 100644 --- a/Sources/IllustAPIMock/IllustAPIMock.swift +++ b/Sources/IllustAPIMock/IllustAPIMock.swift @@ -2,7 +2,11 @@ import CoreData import Foundation public class IllustAPIMock { - var networkMonitor: NetworkMonitor = NetworkMonitorImpl() + public var networkMonitor: NetworkMonitor = NetworkMonitorImpl() { + didSet { + networkMonitor.start() + } + } private static let databaseName = "Illusts" private static let entityName = "IllustEntity" @@ -16,8 +20,6 @@ public class IllustAPIMock { container.loadPersistentStores { _, _ in } setup() - - networkMonitor.start() } public func getRanking(offset: Int = 0) async throws -> [Illust] { diff --git a/Sources/IllustAPIMock/NetworkMonitor.swift b/Sources/IllustAPIMock/NetworkMonitor.swift index 84ffa62..b25083f 100644 --- a/Sources/IllustAPIMock/NetworkMonitor.swift +++ b/Sources/IllustAPIMock/NetworkMonitor.swift @@ -6,11 +6,18 @@ public protocol NetworkMonitor { } public class NetworkMonitorImpl: NetworkMonitor { - private let monitor = NWPathMonitor(requiredInterfaceType: .wifi) - private let queue = DispatchQueue.global(qos: .background) + private let monitor: NWPathMonitor + + public init(interfaceType: NWInterface.InterfaceType = .wifi) { + monitor = NWPathMonitor(requiredInterfaceType: interfaceType) + } + + deinit { + monitor.cancel() + } public func start() { - monitor.start(queue: queue) + monitor.start(queue: .global(qos: .background)) } public func isConnected() -> Bool {