diff --git a/AltServer/App.ipa b/AltServer/App.ipa deleted file mode 100644 index 0e2dcfb2..00000000 Binary files a/AltServer/App.ipa and /dev/null differ diff --git a/AltServer/ViewController.swift b/AltServer/ViewController.swift index 86f23806..815e06a7 100644 --- a/AltServer/ViewController.swift +++ b/AltServer/ViewController.swift @@ -44,7 +44,7 @@ class ViewController: NSViewController switch state { case .notRunning: self.view.window?.title = "" - case .connecting: self.view.window?.title = "Connecting..." + case .connecting: self.view.window?.title = "Connecting...." case .running(let service): self.view.window?.title = service.name ?? "" case .failed(let error): self.view.window?.title = error.localizedDescription } @@ -135,24 +135,6 @@ private extension ViewController try? FileManager.default.removeItem(at: destinationDirectoryURL) } - let ipaURL = Bundle.main.url(forResource: "App", withExtension: ".ipa")! - let application: ALTApplication - - do - { - try FileManager.default.createDirectory(at: destinationDirectoryURL, withIntermediateDirectories: true, attributes: nil) - - let appBundleURL = try FileManager.default.unzipAppBundle(at: ipaURL, toDirectory: destinationDirectoryURL) - - guard let app = ALTApplication(fileURL: appBundleURL) else { throw ALTError(.invalidApp) } - application = app - } - catch - { - finish(error, title: "Failed to Install App") - return - } - self.authenticate() { (result) in do { @@ -172,40 +154,58 @@ private extension ViewController { let certificate = try result.get() - self.registerAppID(name: "AltStore", identifier: "com.rileytestut.AltStore", team: team) { (result) in + self.downloadApp { (result) in do { - let appID = try result.get() + let fileURL = try result.get() - self.updateFeatures(for: appID, app: application, team: team) { (result) in + try FileManager.default.createDirectory(at: destinationDirectoryURL, withIntermediateDirectories: true, attributes: nil) + + let appBundleURL = try FileManager.default.unzipAppBundle(at: fileURL, toDirectory: destinationDirectoryURL) + + guard let application = ALTApplication(fileURL: appBundleURL) else { throw ALTError(.invalidApp) } + + self.registerAppID(name: "AltStore", identifier: "com.rileytestut.AltStore", team: team) { (result) in do { let appID = try result.get() - self.fetchProvisioningProfile(for: appID, team: team) { (result) in + self.updateFeatures(for: appID, app: application, team: team) { (result) in do { - let provisioningProfile = try result.get() + let appID = try result.get() - self.install(application, to: device, team: team, appID: appID, certificate: certificate, profile: provisioningProfile) { (result) in - finish(result.error, title: "Failed to Install AltStore") + self.fetchProvisioningProfile(for: appID, team: team) { (result) in + do + { + let provisioningProfile = try result.get() + + self.install(application, to: device, team: team, appID: appID, certificate: certificate, profile: provisioningProfile) { (result) in + finish(result.error, title: "Failed to Install AltStore") + } + } + catch + { + finish(error, title: "Failed to Fetch Provisioning Profile") + } } } catch { - finish(error, title: "Failed to Fetch Provisioning Profile") + finish(error, title: "Failed to Update App ID") } } } catch { - finish(error, title: "Failed to Update App ID") + finish(error, title: "Failed to Register App") } } } catch { - finish(error, title: "Failed to Register App") + finish(error, title: "Failed to Download AltStore") + return } } } @@ -234,6 +234,25 @@ private extension ViewController } } + func downloadApp(completionHandler: @escaping (Result) -> Void) + { + let appURL = URL(string: "https://www.dropbox.com/s/w1gn9iztlqvltyp/AltStore.ipa?dl=1")! + + let downloadTask = URLSession.shared.downloadTask(with: appURL) { (fileURL, response, error) in + do + { + let (fileURL, _) = try Result((fileURL, response), error).get() + completionHandler(.success(fileURL)) + } + catch + { + completionHandler(.failure(error)) + } + } + + downloadTask.resume() + } + func authenticate(completionHandler: @escaping (Result) -> Void) { ALTAppleAPI.shared.authenticate(appleID: self.emailAddressTextField.stringValue, password: self.passwordTextField.stringValue) { (account, error) in diff --git a/AltStore.xcodeproj/project.pbxproj b/AltStore.xcodeproj/project.pbxproj index fb855904..055ba6c5 100644 --- a/AltStore.xcodeproj/project.pbxproj +++ b/AltStore.xcodeproj/project.pbxproj @@ -164,7 +164,6 @@ BFE6326822A858F300F30809 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE6326722A858F300F30809 /* Account.swift */; }; BFE6326A22A85DAF00F30809 /* ReplaceCertificateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE6326922A85DAF00F30809 /* ReplaceCertificateViewController.swift */; }; BFE6326C22A86FF300F30809 /* AuthenticationOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE6326B22A86FF300F30809 /* AuthenticationOperation.swift */; }; - BFFC044E22A204F40066B31F /* App.ipa in Resources */ = {isa = PBXBuildFile; fileRef = BFFC044D22A204F30066B31F /* App.ipa */; }; DBAC68F8EC03F4A41D62EDE1 /* Pods_AltStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1039C07E517311FC499A0B64 /* Pods_AltStore.framework */; }; /* End PBXBuildFile section */ @@ -394,7 +393,6 @@ BFE6326722A858F300F30809 /* Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; BFE6326922A85DAF00F30809 /* ReplaceCertificateViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplaceCertificateViewController.swift; sourceTree = ""; }; BFE6326B22A86FF300F30809 /* AuthenticationOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationOperation.swift; sourceTree = ""; }; - BFFC044D22A204F30066B31F /* App.ipa */ = {isa = PBXFileReference; lastKnownFileType = file; path = App.ipa; sourceTree = ""; }; EA79A60285C6AF5848AA16E9 /* Pods-AltStore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AltStore.debug.xcconfig"; path = "Target Support Files/Pods-AltStore/Pods-AltStore.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -619,7 +617,6 @@ isa = PBXGroup; children = ( BF458693229872EA00BD7491 /* Assets.xcassets */, - BFFC044D22A204F30066B31F /* App.ipa */, ); name = Resources; sourceTree = ""; @@ -1034,7 +1031,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BFFC044E22A204F40066B31F /* App.ipa in Resources */, BF458694229872EA00BD7491 /* Assets.xcassets in Resources */, BF458697229872EA00BD7491 /* Main.storyboard in Resources */, );