 <p>If it takes this long because there are many files in that directory, you could copy the files one by one in a loop. To determine the progress, you could/should simply assume that copying each files takes the same amount of time.</p> <p>Note that you don't want to block the UI for this 7-10 seconds, so you need to copy on a separate non-main thread. Setting the progress bar, like all UI code, needs to be done on the mean thread using:</p> <pre><code>dispatch_async(dispatch_get_main_queue(), ^ { progressBar.progress = numberCopied / (float)totalCount; }); </code></pre> <p>The cast to <code>float</code> gives you slightly (depending on number of files) better accuracy, because a pure <code>int</code> division truncates the remainder.</p>