Post

Replies

Boosts

Views

Activity

Reply to URLSession with background configuration doesn't works
Hi Matt Eaton, I know that this is an older post, but hoped you would be willing to update your NetworkSessionManager example for swiftui? The protocol NetworkDisplay: class { &#9;&#9;func updateUI(response: String) } Is the real sticky point. For example if we have a view like: struct ReadingsRow: View { &#9;&#9;@ObservedObject var viewModel: ListingViewModel &#9;&#9;@EnvironmentObject var env: GlobalEnvironment &#9;&#9;var reading: Reading &#9; @State var progressValue: Float = 0.25 &#9;&#9;var body: some View { &#9;&#9;&#9;&#9;VStack { &#9;&#9;&#9;&#9;&#9;&#9;HStack{ &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text("\(reading.title!)") &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.font(.custom("Helvetica Neue", size: 16)) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.fontWeight(.semibold) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Button(action: { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;let videoToDownload = Download(reading: self.reading) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;self.viewModel.downloadVimeoVideo(downloadObj: videoToDownload) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9; Image(systemName: "arrow.down.left.video") &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;HStack { &#9;&#9;&#9;&#9;&#9;&#9;&#9; VStack { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;ProgressBar(value: $progressValue).frame(height: 5) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Spacer() &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;}.padding() &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;}.onAppear() { &#9;&#9;&#9;&#9;&#9;&#9;print("isOnline", self.env.getOnlineStatus()) &#9;&#9;&#9;&#9;} &#9;&#9;} } Here is the class method that self.viewModel.dowladVimeoVideo() uses: class BackgroundDownloadTasks{ &#9;&#9;/// Get local file path: download task stores tune here; AV player plays it. &#9;&#9;let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! &#9;&#9;func downloadVideoInBackground(downloadVideo: Download) { &#9;&#9;&#9;&#9;let bgHeaders = mmHeaders( &#9;&#9;&#9;&#9;&#9; ContentType: "application/video", &#9;&#9;&#9;&#9;&#9; HttpMethod: "POST", &#9;&#9;&#9;&#9;&#9; Authorization: "<--Bearer Token Here-->" &#9;&#9;&#9;&#9;) &#9;&#9;&#9;&#9;let ST = SessionTasks(url: downloadVideo.url) &#9;&#9;&#9;&#9;let NSM = NetworkSessionManager(withBackgroundSession: "com.somethingunique", delegate: <#NetworkDisplay#>) &#9;&#9;&#9;&#9;let bkgRequest = ST.getRequest(mmHeaders: bgHeaders) &#9;&#9;&#9;&#9;NSM.downloadWithFile(with: downloadVideo.url.absoluteString, from: bkgRequest) &#9;&#9;} } I realize that the $progressValue state variable will not work in my example as each ReadingRow has to have a unique progressBar value. However, ignoring this, how would we make use of updateUI() to set the $progressValue in the ProgressBar(value: progressValue).frame(height: 5)? Best Regards, Steve Browning
Sep ’20