FTStore Manager puts an app on a device through the same three stages FTStore does, and had nothing to show for any of it once the screen was off. It has a Live Activity now: the same widget the app carries, embedded as its own extension under its own identifier, naming the app, filling a bar while the bytes arrive, adding the rate and the time left, then Preparing and Installing. It is the app's island with the pause button taken out. This download manager has no pause and no screen to offer one from, so there are no intents to compile into the extension and no paused state in the payload. The island is read-only on every version rather than only on the older ones. It ends when the installer answers, which is the part the app had to learn the hard way. Open launches what was just installed and leaves the sheet standing behind it, so ending on dismissal left the island describing an install that had finished, until somebody came back and closed a receipt they were done with. Dismissal still ends it, which is what covers a flow that never gets an answer at all. A dropped connection is now one of those answers. It used to remove the download and tell nobody, leaving the flow spinning with no way to find out; that was merely invisible before and would now be an island counting bytes that stopped arriving. None of this is visible from a build: an IPA whose extension is missing, misnamed or misfiled installs, runs, and simply shows no island. Both of the Manager's release workflows therefore run the same check the app's do against the built IPA, and the ad-hoc signing step seals the nested extension. Two products now build an extension of the same name out of projects that share their identifiers, so the separate derived data paths carry more weight than before, and the notes that explain them say so.
19 lines
292 B
Swift
19 lines
292 B
Swift
//
|
|
// FTStoreActivityBundle.swift
|
|
// FTStoreActivity
|
|
//
|
|
// Entry point for the Live Activity widget extension.
|
|
//
|
|
|
|
import WidgetKit
|
|
import SwiftUI
|
|
|
|
@main
|
|
struct FTStoreActivityBundle: WidgetBundle {
|
|
var body: some Widget {
|
|
if #available(iOS 16.1, *) {
|
|
InstallLiveActivity()
|
|
}
|
|
}
|
|
}
|