diff --git a/docs/build/img/notification-service-identifier-app-group-assignment.png b/docs/build/img/notification-service-identifier-app-group-assignment.png
new file mode 100644
index 0000000..e882346
Binary files /dev/null and b/docs/build/img/notification-service-identifier-app-group-assignment.png differ
diff --git a/docs/build/img/notification-service-identifier-app-groups.png b/docs/build/img/notification-service-identifier-app-groups.png
new file mode 100644
index 0000000..7ac9844
Binary files /dev/null and b/docs/build/img/notification-service-identifier-app-groups.png differ
diff --git a/docs/build/img/notification-service-identifier-edit.png b/docs/build/img/notification-service-identifier-edit.png
new file mode 100644
index 0000000..536fb58
Binary files /dev/null and b/docs/build/img/notification-service-identifier-edit.png differ
diff --git a/docs/build/lf-browser-build.md b/docs/build/lf-browser-build.md
index 8f56fae..b71818e 100644
--- a/docs/build/lf-browser-build.md
+++ b/docs/build/lf-browser-build.md
@@ -31,6 +31,7 @@ Detailed directions are found in the next sections, this is the summary of what
* New with LoopFollow version 6.0 and newer
1. Add the App Group to the Identifiers ([link](#add-app-group))
* New with LoopFollow version 8.0 and newer: the Apple Watch app adds 2 identifiers ([link](#update-to-loopfollow-v8))
+ * New in the `dev` branch: LF Hub adds 1 identifier ([link](#update-for-lf-hub))
1. Create the App in App Store Connect and configure TestFlight users ([link](#create-app-in-app-store-connect))
1. Configure TestFlight users for the *LoopFollow* app ([link](#add-users-to-testflight-for-app))
1. `Build LoopFollow` ([link](#build-app))
@@ -144,6 +145,7 @@ Existing Browser Builders who have not updated:
* since version 5.x or older need to follow both sets of update instructions below
* since version 6.x or 7.x should skip to [Update to *LoopFollow* v8](#update-to-loopfollow-v8)
+* who build the `dev` branch also need [Update for LF Hub](#update-for-lf-hub)
### Update to *LoopFollow* v6
@@ -192,6 +194,37 @@ Existing Browser Builders who have not updated:
If you skip these steps, the build log says `The Apple Watch app identifiers are not set up yet` with a link to this section.
+### Update for LF Hub
+
+!!! important "Building the `dev` branch with LF Hub"
+ This information admonition is for builders of the `dev` branch. The same steps will be needed for the release that brings LF Hub to `main`.
+
+ LF Hub alarms are rung by a new notification service extension, which needs 1 new identifier with the LoopFollow App Group. Your build will fail until you take these one-time steps.
+
+ Run each action from the branch you build: in the `Run workflow` dropdown, select `dev` under `Use workflow from`.
+
+ 1. Run the `Add Identifiers` action again
+ 2. Add the LoopFollow App Group to the new identifier, as described in [Add `App Group`](#add-app-group):
+ * LoopFollow Notification Service
+ 3. Run the `Create Certificates` action
+ 4. Run the `Build LoopFollow` action
+
+ In the [Identifiers list](https://developer.apple.com/account/resources/identifiers/list), open the notification service identifier. Its Bundle ID ends in `.LoopFollowNotificationService`:
+
+ {width="700"}
+
+ Scroll down to `App Groups`. When the box is checked and the notes say `Enabled App Groups (1)`, tap `Edit` to check that it is the LoopFollow App Group:
+
+ {width="700"}
+
+ {width="600"}
+
+ If you changed anything, tap `Continue`, then `Save` and `Confirm`. If you only checked, tap `Cancel`.
+
+ If you already built a version with LF Hub with *Xcode*, *Xcode* created the identifier for you, and `Add Identifiers` keeps its name. Its name starts with `XC`, see [Previous Xcode Builders](#previous-xcode-builders). You do not need to delete it, but check that it has the LoopFollow App Group.
+
+ If you skip these steps, the build log says `The LoopFollow Notification Service identifier is not set up yet`.
+
The `LoopFollow` *App Group* already exists if you previously built the *LoopFollow* app using *Xcode* with this *Apple Developer ID*. In that case, skip ahead to [Optional: App Group Description Modification](#optional-app-group-description-modification) to update the description.
## Create the LoopFollow Group
@@ -242,6 +275,7 @@ For each Identifier in the table below, click on the Identifier and then add the
| --- | --- |
| LoopFollow | com.TEAMID.LoopFollow |
| LoopFollow Live Activity Extension | com.TEAMID.LoopFollow.LoopFollowLAExtension |
+| LoopFollow Notification Service (`dev`) | com.TEAMID.LoopFollow.LoopFollowNotificationService |
| LoopFollow Watch App | com.TEAMID.LoopFollow.watchkitapp |
| LoopFollow Watch Complications | com.TEAMID.LoopFollow.watchkitapp.widgets |
@@ -255,6 +289,7 @@ If you previously built *LoopFollow* with *Xcode*, the NAME of an identifier may
|:--|:--|:--|
| LoopFollow | XC com TEAMID LoopFollow | com.TEAMID.LoopFollow |
| LoopFollow Live Activity Extension | XC com TEAMID LoopFollow LoopFollowLAExtension | com.TEAMID.LoopFollow.LoopFollowLAExtension |
+| LoopFollow Notification Service | XC com TEAMID LoopFollow LoopFollowNotificationService | com.TEAMID.LoopFollow.LoopFollowNotificationService |
| LoopFollow Watch App | XC com TEAMID LoopFollow watchkitapp | com.TEAMID.LoopFollow.watchkitapp |
| LoopFollow Watch Complications | XC com TEAMID LoopFollow watchkitapp widgets | com.TEAMID.LoopFollow.watchkitapp.widgets |
@@ -282,7 +317,7 @@ If you did not need to make changes, the `Save` button will not be active.
The full list of Identifiers should be displayed again.
-Repeat until the 4 Identifiers have the `LoopFollow App Group` configured.
+Repeat until the 4 Identifiers have the `LoopFollow App Group` configured, or 5 Identifiers if you build the `dev` branch.
* If you miss an identifier, the `Create Certificates` step will succeed but `Build LoopFollow` will fail.
@@ -306,14 +341,17 @@ Refer to the table below to see how the App Group and Identifiers for LoopFollow
| --- | --- |
| LoopFollow | com.TEAMID.LoopFollow |
| LoopFollow Live Activity Extension | com.TEAMID.LoopFollow.LoopFollowLAExtension |
+| LoopFollow Notification Service (`dev`) | com.TEAMID.LoopFollow.LoopFollowNotificationService |
| LoopFollow Watch App | com.TEAMID.LoopFollow.watchkitapp |
| LoopFollow Watch Complications | com.TEAMID.LoopFollow.watchkitapp.widgets |
| LoopFollowSecond | com.TEAMID.LoopFollow.Second |
| LoopFollowSecond Live Activity Extension | com.TEAMID.LoopFollow.Second.LoopFollowLAExtension |
+| LoopFollowSecond Notification Service (`dev`) | com.TEAMID.LoopFollow.Second.LoopFollowNotificationService |
| LoopFollowSecond Watch App | com.TEAMID.LoopFollow.Second.watchkitapp |
| LoopFollowSecond Watch Complications | com.TEAMID.LoopFollow.Second.watchkitapp.widgets |
| LoopFollowThird | com.TEAMID.LoopFollow.Third |
| LoopFollowThird Live Activity Extension | com.TEAMID.LoopFollow.Third.LoopFollowLAExtension |
+| LoopFollowThird Notification Service (`dev`) | com.TEAMID.LoopFollow.Third.LoopFollowNotificationService |
| LoopFollowThird Watch App | com.TEAMID.LoopFollow.Third.watchkitapp |
| LoopFollowThird Watch Complications | com.TEAMID.LoopFollow.Third.watchkitapp.widgets |