From f6768b2d726a48ec803f9d316c54b55c5922e9e4 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 10 Sep 2019 12:17:26 -0700 Subject: [PATCH] [AltServer] Deletes received .ipa after installing --- AltServer/Connections/ConnectionManager.swift | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/AltServer/Connections/ConnectionManager.swift b/AltServer/Connections/ConnectionManager.swift index ce5ac20a..055e873b 100644 --- a/AltServer/Connections/ConnectionManager.swift +++ b/AltServer/Connections/ConnectionManager.swift @@ -220,20 +220,35 @@ private extension ConnectionManager func receiveApp(from connection: NWConnection, completionHandler: @escaping (Result) -> Void) { + var temporaryURL: URL? + + func finish(_ result: Result) + { + if let temporaryURL = temporaryURL + { + do { try FileManager.default.removeItem(at: temporaryURL) } + catch { print("Failed to remove .ipa.", error) } + } + + completionHandler(result) + } + self.receive(PrepareAppRequest.self, from: connection) { (result) in print("Received request with result:", result) switch result { - case .failure(let error): completionHandler(.failure(error)) + case .failure(let error): finish(.failure(error)) case .success(let request): self.receiveApp(for: request, from: connection) { (result) in print("Received app with result:", result) switch result { - case .failure(let error): completionHandler(.failure(error)) + case .failure(let error): finish(.failure(error)) case .success(let request, let fileURL): + temporaryURL = fileURL + print("Awaiting begin installation request...") self.receive(BeginInstallationRequest.self, from: connection) { (result) in @@ -241,7 +256,7 @@ private extension ConnectionManager switch result { - case .failure(let error): completionHandler(.failure(error)) + case .failure(let error): finish(.failure(error)) case .success: print("Installing to device \(request.udid)...") @@ -249,8 +264,8 @@ private extension ConnectionManager print("Installed to device with result:", result) switch result { - case .failure(let error): completionHandler(.failure(error)) - case .success: completionHandler(.success(())) + case .failure(let error): finish(.failure(error)) + case .success: finish(.success(())) } } }