Files
T
2024-07-01 00:06:04 +00:00

1495 lines
92 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<title>SPUUserDriver Protocol Reference</title>
<link rel="stylesheet" type="text/css" href="../css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="../css/highlight.css" />
<meta charset='utf-8'>
<meta name="viewport" content="width=device-width, viewport-fit=cover, initial-scale=1.0" />
<script src="../js/jquery.min.js" defer></script>
<script src="../js/jazzy.js" defer></script>
</head>
<body>
<a name="//apple_ref/objc/Protocol/SPUUserDriver" class="dashAnchor"></a>
<a title="SPUUserDriver Protocol Reference"></a>
<header>
<div class="content-wrapper">
<p>
<a href="../index.html">Sparkle 2.6.4 Docs</a>
<span class="no-mobile"> (59% documented)</span>
</p>
</div>
</header>
<div id="breadcrumbs-container">
<div class="content-wrapper">
<p id="breadcrumbs">
<span class="no-mobile">
<a href="../index.html">Sparkle</a>
<img id="carat" src="../img/carat.png" alt=""/>
<a href="../Protocols.html">Protocols</a>
<img id="carat" src="../img/carat.png" alt=""/>
SPUUserDriver Protocol Reference
</span>
</p>
</div>
</div>
<div class="wrapper">
<div class="article-wrapper">
<article class="main-content">
<section>
<section class="section">
<h1>SPUUserDriver</h1>
<div class="declaration">
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">@protocol</span> <span class="nc">SPUUserDriver</span> <span class="o">&lt;</span><span class="n">NSObject</span><span class="o">&gt;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">protocol</span> <span class="kt">SPUUserDriver</span> <span class="p">:</span> <span class="kt">NSObjectProtocol</span></code></pre>
</div>
</div>
<p>The API in Sparkle for controlling the user interaction.</p>
<p>This protocol is used for implementing a user interface for the Sparkle updater. Sparkle&rsquo;s internal drivers tell
an object that implements this protocol what actions to take and show to the user.</p>
<p>Every method in this protocol can be assumed to be called from the main thread.</p>
</section>
<section class="section task-group-section">
<div class="task-group">
<ul>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdatePermissionRequest:reply:"></a>
<a name="//apple_ref/objc/Method/-showUpdatePermissionRequest:reply:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUpdatePermissionRequest:reply:">-showUpdatePermissionRequest:<wbr>reply:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show an updater permission request to the user</p>
<p>Ask the user for their permission regarding update checks.
This is typically only called once per app installation.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="nf">showUpdatePermissionRequest</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SPUUpdatePermissionRequest.html">SPUUpdatePermissionRequest</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">request</span>
<span class="nf">reply</span><span class="p">:(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span>
<span class="n"><a href="../Classes/SUUpdatePermissionResponse.html">SUUpdatePermissionResponse</a></span> <span class="o">*</span><span class="n">_Nonnull</span><span class="p">))</span><span class="n">reply</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">show</span><span class="p">(</span><span class="n">_</span> <span class="nv">request</span><span class="p">:</span> <span class="kt"><a href="../Classes/SPUUpdatePermissionRequest.html">SPUUpdatePermissionRequest</a></span><span class="p">)</span> <span class="k">async</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Classes/SUUpdatePermissionResponse.html">SUUpdatePermissionResponse</a></span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>request</em>
</code>
</td>
<td>
<div>
<p>The update permission request.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>reply</em>
</code>
</td>
<td>
<div>
<p>A reply with a update permission response.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUserInitiatedUpdateCheckWithCancellation:"></a>
<a name="//apple_ref/objc/Method/-showUserInitiatedUpdateCheckWithCancellation:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUserInitiatedUpdateCheckWithCancellation:">-showUserInitiatedUpdateCheckWithCancellation:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user initiating an update check</p>
<p>Respond to the user initiating an update check. Sparkle uses this to show the user a window with an indeterminate progress bar.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUserInitiatedUpdateCheckWithCancellation</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="nv">cancellation</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showUserInitiatedUpdateCheck</span><span class="p">(</span><span class="nv">cancellation</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>cancellation</em>
</code>
</td>
<td>
<div>
<p>Invoke this cancellation block to cancel the update check before the update check is completed.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdateFoundWithAppcastItem:state:reply:"></a>
<a name="//apple_ref/objc/Method/-showUpdateFoundWithAppcastItem:state:reply:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUpdateFoundWithAppcastItem:state:reply:">-showUpdateFoundWithAppcastItem:<wbr>state:<wbr>reply:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user a new update is found.</p>
<p>Let the user know a new update is found and ask them what they want to do.
Before this point, <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showUserInitiatedUpdateCheckWithCancellation:">-showUserInitiatedUpdateCheckWithCancellation:</a></code> may be called.</p>
<p>The potential <code>stage</code>s on the updater <code>state</code> are:</p>
<p><code>SPUUpdateStateNotDownloaded</code> - Update has not been downloaded yet.</p>
<p><code>SPUUpdateStateDownloaded</code> - Update has already been downloaded in the background automatically (via <code>SUAutomaticallyUpdate</code>) but not started installing yet.</p>
<p><code>SPUUpdateStateInstalling</code> - Update has been downloaded and already started installing.</p>
<p>The <code>userInitiated</code> property on the <code>state</code> indicates if the update was initiated by the user or if it was automatically scheduled in the background.</p>
<p>Additionally, these properties on the <code>appcastItem</code> are of importance:</p>
<p><code>appcastItem.informationOnlyUpdate</code> indicates if the update is only informational and should not be downloaded. You can direct the user to the infoURL property of the appcastItem in their web browser. Sometimes information only updates are used as a fallback in case a bad update is shipped, so you&rsquo;ll want to support this case.</p>
<p><code>appcastItem.majorUpgrade</code> indicates if the update is a major or paid upgrade.</p>
<p><code>appcastItem.criticalUpdate</code> indicates if the update is a critical update.</p>
<p>A reply of <code>SPUUserUpdateChoiceInstall</code> begins or resumes downloading, extracting, or installing the update.
If the state.stage is <code>SPUUserUpdateStateInstalling</code>, this may send a quit event to the application and relaunch it immediately (in this state, this behaves as a fast &ldquo;install and Relaunch&rdquo;).
If the state.stage is <code>SPUUpdateStateNotDownloaded</code> or <code>SPUUpdateStateDownloaded</code> the user may be presented an authorization prompt to install the update after <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showDownloadDidStartExtractingUpdate">-showDownloadDidStartExtractingUpdate</a></code> is called if authorization is required for installation. For example, this may occur if the update on disk is owned by a different user (e.g. root or admin for non-admin users), or if the update is a package install.
Do not use a reply of <code>SPUUserUpdateChoiceInstall</code> if <code>appcastItem.informationOnlyUpdate</code> is YES.</p>
<p>A reply of <code>SPUUserUpdateChoiceDismiss</code> dismisses the update for the time being. The user may be reminded of the update at a later point.
If the state.stage is <code>SPUUserUpdateStateDownloaded</code>, the downloaded update is kept after dismissing until the next time an update is shown to the user.
If the state.stage is <code>SPUUserUpdateStateInstalling</code>, the installing update is also preserved after dismissing. In this state however, the update will also still be installed after the application is terminated.</p>
<p>A reply of <code>SPUUserUpdateChoiceSkip</code> skips this particular version and won&rsquo;t notify the user again, unless they initiate an update check themselves.
If <code>appcastItem.majorUpgrade</code> is YES, the major update and any future minor updates to that major release are skipped, unless a future minor update specifies a <code>&lt;sparkle:ignoreSkippedUpgradesBelowVersion&gt;</code> requirement.
If the state.stage is <code>SPUUpdateStateInstalling</code>, the installation is also canceled when the update is skipped.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUpdateFoundWithAppcastItem</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SUAppcastItem.html">SUAppcastItem</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">appcastItem</span>
<span class="nf">state</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SPUUserUpdateState.html">SPUUserUpdateState</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">state</span>
<span class="nf">reply</span><span class="p">:(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="n"><a href="../Enums/SPUUserUpdateChoice.html">SPUUserUpdateChoice</a></span><span class="p">))</span>
<span class="n">reply</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showUpdateFound</span><span class="p">(</span><span class="n">with</span> <span class="nv">appcastItem</span><span class="p">:</span> <span class="kt"><a href="../Classes/SUAppcastItem.html">SUAppcastItem</a></span><span class="p">,</span> <span class="nv">state</span><span class="p">:</span> <span class="kt"><a href="../Classes/SPUUserUpdateState.html">SPUUserUpdateState</a></span><span class="p">)</span> <span class="k">async</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Enums/SPUUserUpdateChoice.html">SPUUserUpdateChoice</a></span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>appcastItem</em>
</code>
</td>
<td>
<div>
<p>The Appcast Item containing information that reflects the new update.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>state</em>
</code>
</td>
<td>
<div>
<p>The current state of the user update. See above discussion for notable properties.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>reply</em>
</code>
</td>
<td>
<div>
<p>The reply which indicates if the update should be installed, dismissed, or skipped. See above discussion for more details.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdateReleaseNotesWithDownloadData:"></a>
<a name="//apple_ref/objc/Method/-showUpdateReleaseNotesWithDownloadData:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUpdateReleaseNotesWithDownloadData:">-showUpdateReleaseNotesWithDownloadData:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user the release notes for the new update</p>
<p>Display the release notes to the user. This will be called after showing the new update.
This is only applicable if the release notes are linked from the appcast, and are not directly embedded inside of the appcast file.
That is, this may be invoked if the releaseNotesURL from the appcast item is non-nil.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUpdateReleaseNotesWithDownloadData</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SPUDownloadData.html">SPUDownloadData</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">downloadData</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showUpdateReleaseNotes</span><span class="p">(</span><span class="n">with</span> <span class="nv">downloadData</span><span class="p">:</span> <span class="kt"><a href="../Classes/SPUDownloadData.html">SPUDownloadData</a></span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>downloadData</em>
</code>
</td>
<td>
<div>
<p>The data for the release notes that was downloaded from the new update&rsquo;s appcast.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdateReleaseNotesFailedToDownloadWithError:"></a>
<a name="//apple_ref/objc/Method/-showUpdateReleaseNotesFailedToDownloadWithError:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUpdateReleaseNotesFailedToDownloadWithError:">-showUpdateReleaseNotesFailedToDownloadWithError:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user that the new update&rsquo;s release notes could not be downloaded</p>
<p>This will be called after showing the new update.
This is only applicable if the release notes are linked from the appcast, and are not directly embedded inside of the appcast file.
That is, this may be invoked if the releaseNotesURL from the appcast item is non-nil.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUpdateReleaseNotesFailedToDownloadWithError</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="n">NSError</span> <span class="o">*</span><span class="p">)</span><span class="nv">error</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showUpdateReleaseNotesFailedToDownloadWithError</span><span class="p">(</span><span class="n">_</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">Error</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>error</em>
</code>
</td>
<td>
<div>
<p>The error associated with why the new update&rsquo;s release notes could not be downloaded.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdateNotFoundWithError:acknowledgement:"></a>
<a name="//apple_ref/objc/Method/-showUpdateNotFoundWithError:acknowledgement:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUpdateNotFoundWithError:acknowledgement:">-showUpdateNotFoundWithError:<wbr>acknowledgement:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user a new update was not found</p>
<p>Let the user know a new update was not found after they tried initiating an update check.
Before this point, <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showUserInitiatedUpdateCheckWithCancellation:">-showUserInitiatedUpdateCheckWithCancellation:</a></code> may be called.</p>
<p>There are various reasons a new update is unavailable and can&rsquo;t be installed.
The <code>error</code> object is populated with recovery and suggestion strings suitable to be shown in an alert.</p>
<p>The <code>userInfo</code> dictionary on the <code>error</code> is also populated with two keys:</p>
<p><code><a href="../Constants.html#/c:@SPULatestAppcastItemFoundKey">SPULatestAppcastItemFoundKey</a></code>: if available, this may provide the latest SUAppcastItem that was found.</p>
<p><code><a href="../Constants.html#/c:@SPUNoUpdateFoundReasonKey">SPUNoUpdateFoundReasonKey</a></code>: if available, this will provide the <code>SUNoUpdateFoundReason</code>. For example the reason could be because
the latest version in the feed requires a newer OS version or could be because the user is already on the latest version.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUpdateNotFoundWithError</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSError</span> <span class="o">*</span><span class="p">)</span><span class="nv">error</span>
<span class="nf">acknowledgement</span><span class="p">:(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="nv">acknowledgement</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showUpdateNotFoundWithError</span><span class="p">(</span><span class="n">_</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">Error</span><span class="p">,</span> <span class="nv">acknowledgement</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>error</em>
</code>
</td>
<td>
<div>
<p>The error associated with why a new update was not found. See above discussion for more details.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>acknowledgement</em>
</code>
</td>
<td>
<div>
<p>Acknowledge to the updater that no update found error was shown.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdaterError:acknowledgement:"></a>
<a name="//apple_ref/objc/Method/-showUpdaterError:acknowledgement:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUpdaterError:acknowledgement:">-showUpdaterError:<wbr>acknowledgement:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user an update error occurred</p>
<p>Let the user know that the updater failed with an error. This will not be invoked without the user having been
aware that an update was in progress.</p>
<p>Before this point, any of the non-error user driver methods may have been invoked.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUpdaterError</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSError</span> <span class="o">*</span><span class="p">)</span><span class="nv">error</span>
<span class="nf">acknowledgement</span><span class="p">:(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="nv">acknowledgement</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showUpdaterError</span><span class="p">(</span><span class="n">_</span> <span class="nv">error</span><span class="p">:</span> <span class="kt">Error</span><span class="p">,</span> <span class="nv">acknowledgement</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>error</em>
</code>
</td>
<td>
<div>
<p>The error associated with what update error occurred.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>acknowledgement</em>
</code>
</td>
<td>
<div>
<p>Acknowledge to the updater that the error was shown.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showDownloadInitiatedWithCancellation:"></a>
<a name="//apple_ref/objc/Method/-showDownloadInitiatedWithCancellation:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showDownloadInitiatedWithCancellation:">-showDownloadInitiatedWithCancellation:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user that downloading the new update initiated</p>
<p>Let the user know that downloading the new update started.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showDownloadInitiatedWithCancellation</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="nv">cancellation</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showDownloadInitiated</span><span class="p">(</span><span class="nv">cancellation</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>cancellation</em>
</code>
</td>
<td>
<div>
<p>Invoke this cancellation block to cancel the download at any point before <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showDownloadDidStartExtractingUpdate">-showDownloadDidStartExtractingUpdate</a></code> is invoked.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showDownloadDidReceiveExpectedContentLength:"></a>
<a name="//apple_ref/objc/Method/-showDownloadDidReceiveExpectedContentLength:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showDownloadDidReceiveExpectedContentLength:">-showDownloadDidReceiveExpectedContentLength:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user the content length of the new update that will be downloaded</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showDownloadDidReceiveExpectedContentLength</span><span class="p">:</span>
<span class="p">(</span><span class="kt">uint64_t</span><span class="p">)</span><span class="nv">expectedContentLength</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showDownloadDidReceiveExpectedContentLength</span><span class="p">(</span><span class="n">_</span> <span class="nv">expectedContentLength</span><span class="p">:</span> <span class="kt">UInt64</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>expectedContentLength</em>
</code>
</td>
<td>
<div>
<p>The expected content length of the new update being downloaded.
An implementor should be able to handle if this value is invalid (more or less than actual content length downloaded).
Additionally, this method may be called more than once for the same download in rare scenarios.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showDownloadDidReceiveDataOfLength:"></a>
<a name="//apple_ref/objc/Method/-showDownloadDidReceiveDataOfLength:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showDownloadDidReceiveDataOfLength:">-showDownloadDidReceiveDataOfLength:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user that the update download received more data</p>
<p>This may be an appropriate time to advance a visible progress indicator of the download</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showDownloadDidReceiveDataOfLength</span><span class="p">:(</span><span class="kt">uint64_t</span><span class="p">)</span><span class="nv">length</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showDownloadDidReceiveData</span><span class="p">(</span><span class="n">ofLength</span> <span class="nv">length</span><span class="p">:</span> <span class="kt">UInt64</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>length</em>
</code>
</td>
<td>
<div>
<p>The length of the data that was just downloaded</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showDownloadDidStartExtractingUpdate"></a>
<a name="//apple_ref/objc/Method/-showDownloadDidStartExtractingUpdate" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showDownloadDidStartExtractingUpdate">-showDownloadDidStartExtractingUpdate</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user that the update finished downloading and started extracting</p>
<p>Sparkle uses this to show an indeterminate progress bar.</p>
<p>Before this point, <code>showDownloadDidReceiveDataOfLength:</code> or <code>showUpdateFoundWithAppcastItem:state:reply:</code> may be called.
An update can potentially resume at this point after having been automatically downloaded in the background (without the user driver) before.</p>
<p>After extraction starts, the user may be shown an authorization prompt to install the update if authorization is required for installation.
For example, this may occur if the update on disk is owned by a different user (e.g. root or admin for non-admin users), or if the update is a package install.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">showDownloadDidStartExtractingUpdate</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showDownloadDidStartExtractingUpdate</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showExtractionReceivedProgress:"></a>
<a name="//apple_ref/objc/Method/-showExtractionReceivedProgress:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showExtractionReceivedProgress:">-showExtractionReceivedProgress:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user that the update is extracting with progress</p>
<p>Let the user know how far along the update extraction is.</p>
<p>Before this point, <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showDownloadDidStartExtractingUpdate">-showDownloadDidStartExtractingUpdate</a></code> is called.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showExtractionReceivedProgress</span><span class="p">:(</span><span class="kt">double</span><span class="p">)</span><span class="nv">progress</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showExtractionReceivedProgress</span><span class="p">(</span><span class="n">_</span> <span class="nv">progress</span><span class="p">:</span> <span class="kt">Double</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>progress</em>
</code>
</td>
<td>
<div>
<p>The progress of the extraction from a 0.0 to 1.0 scale</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showReadyToInstallAndRelaunch:"></a>
<a name="//apple_ref/objc/Method/-showReadyToInstallAndRelaunch:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showReadyToInstallAndRelaunch:">-showReadyToInstallAndRelaunch:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user that the update is ready to install &amp; relaunch</p>
<p>Let the user know that the update is ready to install and relaunch, and ask them whether they want to proceed.
Note if the target application has already terminated, this method may not be invoked.</p>
<p>A reply of <code>SPUUserUpdateChoiceInstall</code> installs the update the new update immediately. The application is relaunched only if it is still running by the time this reply is invoked. If the application terminates on its own, Sparkle will attempt to automatically install the update.</p>
<p>A reply of <code>SPUUserUpdateChoiceDismiss</code> dismisses the update installation for the time being. Note the update may still be installed automatically after the application terminates.</p>
<p>A reply of <code>SPUUserUpdateChoiceSkip</code> cancels the current update that has begun installing and dismisses the update. In this circumstance, the update is canceled but this update version is not skipped in the future.</p>
<p>Before this point, <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showExtractionReceivedProgress:">-showExtractionReceivedProgress:</a></code> or <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showUpdateFoundWithAppcastItem:state:reply:">-showUpdateFoundWithAppcastItem:state:reply:</a></code> may be called.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showReadyToInstallAndRelaunch</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="n"><a href="../Enums/SPUUserUpdateChoice.html">SPUUserUpdateChoice</a></span><span class="p">))</span><span class="nv">reply</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showReadyToInstallAndRelaunch</span><span class="p">()</span> <span class="k">async</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Enums/SPUUserUpdateChoice.html">SPUUserUpdateChoice</a></span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>reply</em>
</code>
</td>
<td>
<div>
<p>The reply which indicates if the update should be installed, dismissed, or skipped. See above discussion for more details.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication:"></a>
<a name="//apple_ref/objc/Method/-showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication:">-showInstallingUpdateWithApplicationTerminated:<wbr>retryTerminatingApplication:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user that the update is installing</p>
<p>Let the user know that the update is currently installing.</p>
<p>Before this point, <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showReadyToInstallAndRelaunch:">-showReadyToInstallAndRelaunch:</a></code> or <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showUpdateFoundWithAppcastItem:state:reply:">-showUpdateFoundWithAppcastItem:state:reply:</a></code> will be called.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="nf">showInstallingUpdateWithApplicationTerminated</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">applicationTerminated</span>
<span class="nf">retryTerminatingApplication</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="nv">retryTerminatingApplication</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showInstallingUpdate</span><span class="p">(</span><span class="n">withApplicationTerminated</span> <span class="nv">applicationTerminated</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">retryTerminatingApplication</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>applicationTerminated</em>
</code>
</td>
<td>
<div>
<p>Indicates if the application has been terminated already.
If the application hasn&rsquo;t been terminated, a quit event is sent to the running application before installing the update.
If the application or user delays or cancels termination, there may be an indefinite period of time before the application fully quits.
It is up to the implementor whether or not to decide to continue showing installation progress in this case.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>retryTerminatingApplication</em>
</code>
</td>
<td>
<div>
<p>This handler gives a chance for the application to re-try sending a quit event to the running application before installing the update.
The application may cancel or delay termination. This handler gives the user driver another chance to allow the user to try terminating the application again.
If the application does not delay or cancel application termination, there is no need to invoke this handler. This handler may be invoked multiple times.
Note this handler should not be invoked if <code>applicationTerminated</code> is already <code>YES</code></p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdateInstalledAndRelaunched:acknowledgement:"></a>
<a name="//apple_ref/objc/Method/-showUpdateInstalledAndRelaunched:acknowledgement:" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUpdateInstalledAndRelaunched:acknowledgement:">-showUpdateInstalledAndRelaunched:<wbr>acknowledgement:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user that the update installation finished</p>
<p>Let the user know that the update finished installing.</p>
<p>This will only be invoked if the updater process is still alive, which is typically not the case if
the updater&rsquo;s lifetime is tied to the application it is updating. This implementation must not try to reference
the old bundle prior to the installation, which will no longer be around.</p>
<p>Before this point, <code><a href="../Protocols/SPUUserDriver.html#/c:objc(pl)SPUUserDriver(im)showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication:">-showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication:</a></code> will be called.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUpdateInstalledAndRelaunched</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">relaunched</span>
<span class="nf">acknowledgement</span><span class="p">:</span>
<span class="p">(</span><span class="n">nonnull</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="nv">acknowledgement</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showUpdateInstalledAndRelaunched</span><span class="p">(</span><span class="n">_</span> <span class="nv">relaunched</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">acknowledgement</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
<div>
<h4>Parameters</h4>
<table class="graybox">
<tbody>
<tr>
<td>
<code>
<em>relaunched</em>
</code>
</td>
<td>
<div>
<p>Indicates if the update was relaunched.</p>
</div>
</td>
</tr>
<tr>
<td>
<code>
<em>acknowledgement</em>
</code>
</td>
<td>
<div>
<p>Acknowledge to the updater that the finished installation was shown.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdateInFocus"></a>
<a name="//apple_ref/objc/Method/-showUpdateInFocus" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)showUpdateInFocus">-showUpdateInFocus</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Show the user the current presented update or its progress in utmost focus</p>
<p>The user wishes to check for updates while the user is being shown update progress.
Bring whatever is on screen to frontmost focus (permission request, update information, downloading or extraction status, choice to install update, etc).</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">showUpdateInFocus</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">showUpdateInFocus</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)dismissUpdateInstallation"></a>
<a name="//apple_ref/objc/Method/-dismissUpdateInstallation" class="dashAnchor"></a>
<a class="token" href="#/c:objc(pl)SPUUserDriver(im)dismissUpdateInstallation">-dismissUpdateInstallation</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="abstract">
<p>Dismiss the current update installation</p>
<p>Stop and tear down everything.
Dismiss all update windows, alerts, progress, etc from the user.
Basically, stop everything that could have been started. Sparkle may invoke this when aborting or finishing an update.</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">dismissUpdateInstallation</span><span class="p">;</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">dismissUpdateInstallation</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdateNotFoundWithAcknowledgement:"></a>
<a name="//apple_ref/objc/Method/-showUpdateNotFoundWithAcknowledgement:" class="dashAnchor"></a>
<a class="token discouraged" href="#/c:objc(pl)SPUUserDriver(im)showUpdateNotFoundWithAcknowledgement:">-showUpdateNotFoundWithAcknowledgement:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="aside aside-deprecated">
<p class="aside-title">Deprecated</p>
<p>Implement -showUpdateNotFoundWithError:acknowledgement: instead</p>
</div>
<div class="abstract">
<p>Undocumented</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUpdateNotFoundWithAcknowledgement</span><span class="p">:(</span><span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="nv">acknowledgement</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Implement -showUpdateNotFoundWithError:acknowledgement: instead"</span><span class="p">);</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">showUpdateNotFound</span><span class="p">(</span><span class="nv">acknowledgement</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showUpdateInstallationDidFinishWithAcknowledgement:"></a>
<a name="//apple_ref/objc/Method/-showUpdateInstallationDidFinishWithAcknowledgement:" class="dashAnchor"></a>
<a class="token discouraged" href="#/c:objc(pl)SPUUserDriver(im)showUpdateInstallationDidFinishWithAcknowledgement:">-showUpdateInstallationDidFinishWithAcknowledgement:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="aside aside-deprecated">
<p class="aside-title">Deprecated</p>
<p>Implement -showUpdateInstalledAndRelaunched:acknowledgement: instead</p>
</div>
<div class="abstract">
<p>Undocumented</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showUpdateInstallationDidFinishWithAcknowledgement</span><span class="p">:(</span><span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="nv">acknowledgement</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Implement -showUpdateInstalledAndRelaunched:acknowledgement: instead"</span><span class="p">);</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">showUpdateInstallationDidFinish</span><span class="p">(</span><span class="nv">acknowledgement</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="p">()</span> <span class="o">-&gt;</span> <span class="kt">Void</span><span class="p">)</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)dismissUserInitiatedUpdateCheck"></a>
<a name="//apple_ref/objc/Method/-dismissUserInitiatedUpdateCheck" class="dashAnchor"></a>
<a class="token discouraged" href="#/c:objc(pl)SPUUserDriver(im)dismissUserInitiatedUpdateCheck">-dismissUserInitiatedUpdateCheck</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="aside aside-deprecated">
<p class="aside-title">Deprecated</p>
<p>Transition to new UI appropriately when a new update is shown, when no update is found, or when an update error occurs.</p>
</div>
<div class="abstract">
<p>Undocumented</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">dismissUserInitiatedUpdateCheck</span> <span class="nf">__deprecated_msg</span><span class="p">(</span><span class="s">"Transition to new UI appropriately when a new update is shown, when no update is found, or when an update error occurs."</span><span class="p">);</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">dismissUserInitiatedUpdateCheck</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showInstallingUpdate"></a>
<a name="//apple_ref/objc/Method/-showInstallingUpdate" class="dashAnchor"></a>
<a class="token discouraged" href="#/c:objc(pl)SPUUserDriver(im)showInstallingUpdate">-showInstallingUpdate</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="aside aside-deprecated">
<p class="aside-title">Deprecated</p>
<p>Implement -showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication: instead.</p>
</div>
<div class="abstract">
<p>Undocumented</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">showInstallingUpdate</span> <span class="nf">__deprecated_msg</span><span class="p">(</span><span class="s">"Implement -showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication: instead."</span><span class="p">);</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">showInstallingUpdate</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showSendingTerminationSignal"></a>
<a name="//apple_ref/objc/Method/-showSendingTerminationSignal" class="dashAnchor"></a>
<a class="token discouraged" href="#/c:objc(pl)SPUUserDriver(im)showSendingTerminationSignal">-showSendingTerminationSignal</a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="aside aside-deprecated">
<p class="aside-title">Deprecated</p>
<p>Implement -showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication: instead.</p>
</div>
<div class="abstract">
<p>Undocumented</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">showSendingTerminationSignal</span> <span class="nf">__deprecated_msg</span><span class="p">(</span><span class="s">"Implement -showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication: instead."</span><span class="p">);</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">showSendingTerminationSignal</span><span class="p">()</span></code></pre>
</div>
</div>
</section>
</div>
</li>
<li class="item">
<div>
<code>
<a name="/c:objc(pl)SPUUserDriver(im)showInstallingUpdateWithApplicationTerminated:"></a>
<a name="//apple_ref/objc/Method/-showInstallingUpdateWithApplicationTerminated:" class="dashAnchor"></a>
<a class="token discouraged" href="#/c:objc(pl)SPUUserDriver(im)showInstallingUpdateWithApplicationTerminated:">-showInstallingUpdateWithApplicationTerminated:<wbr></a>
</code>
</div>
<div class="height-container">
<div class="pointer-container"></div>
<section class="section">
<div class="pointer"></div>
<div class="aside aside-deprecated">
<p class="aside-title">Deprecated</p>
<p>Implement -showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication: instead.</p>
</div>
<div class="abstract">
<p>Undocumented</p>
</div>
<div class="declaration">
<h4>Declaration</h4>
<div class="language">
<p class="aside-title">Objective-C</p>
<pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">showInstallingUpdateWithApplicationTerminated</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">applicationTerminated</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"Implement -showInstallingUpdateWithApplicationTerminated:retryTerminatingApplication: instead."</span><span class="p">);</span></code></pre>
</div>
<div class="language">
<p class="aside-title">Swift</p>
<pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">showInstallingUpdate</span><span class="p">(</span><span class="n">withApplicationTerminated</span> <span class="nv">applicationTerminated</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">)</span></code></pre>
</div>
</div>
</section>
</div>
</li>
</ul>
</div>
</section>
</section>
</article>
</div>
<div class="nav-wrapper">
<nav class="nav-bottom">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="../Classes.html">Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Classes/SPUDownloadData.html">SPUDownloadData</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SPUStandardUpdaterController.html">SPUStandardUpdaterController</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SPUStandardUserDriver.html">SPUStandardUserDriver</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SPUUpdatePermissionRequest.html">SPUUpdatePermissionRequest</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SPUUpdater.html">SPUUpdater</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SPUUpdaterSettings.html">SPUUpdaterSettings</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SPUUserUpdateState.html">SPUUserUpdateState</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SUAppcast.html">SUAppcast</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SUAppcastItem.html">SUAppcastItem</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SUStandardVersionComparator.html">SUStandardVersionComparator</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SUUpdatePermissionResponse.html">SUUpdatePermissionResponse</a>
</li>
<li class="nav-group-task">
<a href="../Classes/SUUpdater.html">SUUpdater</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="../Constants.html">Constants</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Constants.html#/c:@SPULatestAppcastItemFoundKey">SPULatestAppcastItemFoundKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SPUNoUpdateFoundReasonKey">SPUNoUpdateFoundReasonKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SPUNoUpdateFoundUserInitiatedKey">SPUNoUpdateFoundUserInitiatedKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSparkleErrorDomain">SUSparkleErrorDomain</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerApplicationNameKey">SUSystemProfilerApplicationNameKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerApplicationVersionKey">SUSystemProfilerApplicationVersionKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerCPU64bitKey">SUSystemProfilerCPU64bitKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerCPUCountKey">SUSystemProfilerCPUCountKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerCPUFrequencyKey">SUSystemProfilerCPUFrequencyKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerCPUSubtypeKey">SUSystemProfilerCPUSubtypeKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerCPUTypeKey">SUSystemProfilerCPUTypeKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerHardwareModelKey">SUSystemProfilerHardwareModelKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerMemoryKey">SUSystemProfilerMemoryKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerOperatingSystemVersionKey">SUSystemProfilerOperatingSystemVersionKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUSystemProfilerPreferredLanguageKey">SUSystemProfilerPreferredLanguageKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUUpdaterAppcastItemNotificationKey">SUUpdaterAppcastItemNotificationKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUUpdaterAppcastNotificationKey">SUUpdaterAppcastNotificationKey</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUUpdaterDidFindValidUpdateNotification">SUUpdaterDidFindValidUpdateNotification</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUUpdaterDidFinishLoadingAppCastNotification">SUUpdaterDidFinishLoadingAppCastNotification</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUUpdaterDidNotFindUpdateNotification">SUUpdaterDidNotFindUpdateNotification</a>
</li>
<li class="nav-group-task">
<a href="../Constants.html#/c:@SUUpdaterWillRestartNotification">SUUpdaterWillRestartNotification</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="../Enums.html">Enumerations</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Enums/SPUNoUpdateFoundReason.html">SPUNoUpdateFoundReason</a>
</li>
<li class="nav-group-task">
<a href="../Enums/SPUUpdateCheck.html">SPUUpdateCheck</a>
</li>
<li class="nav-group-task">
<a href="../Enums/SPUUserUpdateChoice.html">SPUUserUpdateChoice</a>
</li>
<li class="nav-group-task">
<a href="../Enums/SPUUserUpdateStage.html">SPUUserUpdateStage</a>
</li>
<li class="nav-group-task">
<a href="../Enums/SUError.html">SUError</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="../Protocols.html">Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="../Protocols/SPUStandardUserDriverDelegate.html">SPUStandardUserDriverDelegate</a>
</li>
<li class="nav-group-task">
<a href="../Protocols/SPUUpdaterDelegate.html">SPUUpdaterDelegate</a>
</li>
<li class="nav-group-task">
<a href="../Protocols/SPUUserDriver.html">SPUUserDriver</a>
</li>
<li class="nav-group-task">
<a href="../Protocols/SUUpdaterDelegate.html">SUUpdaterDelegate</a>
</li>
<li class="nav-group-task">
<a href="../Protocols/SUVersionComparison.html">SUVersionComparison</a>
</li>
<li class="nav-group-task">
<a href="../Protocols/SUVersionDisplay.html">SUVersionDisplay</a>
</li>
</ul>
</li>
</ul>
</nav>
</div>
<div class="footer-wrapper">
<section id="footer">
<p>&copy; 2024 <a class="link" href="https://sparkle-project.org" target="_blank" rel="external noopener">Sparkle Project</a>. All rights reserved. (Last updated: 2024-07-01)</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external noopener">jazzy ♪♫ v0.15.1</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external noopener">Realm</a> project.</p>
</section>
</div>
</div>
</body>
</html>