You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Text("LoopFollow needs to stay active in the background to check for alarms and update glucose values. There are several methods available:")
203
+
204
+
Text("Silent Tune")
205
+
.font(.headline)
206
+
Text("Plays a silent audio track to keep the app active. This has several drawbacks including battery drain and limited reliability — it may be interrupted by other apps.")
207
+
208
+
Text("Bluetooth Heartbeat")
209
+
.font(.headline)
210
+
Text("Uses an external Bluetooth device to keep LoopFollow awake. This can save significantly on battery and provides more reliable background operation.")
211
+
212
+
Text("Supported Bluetooth Devices")
213
+
.font(.headline)
214
+
Text(verbatim:"""
215
+
• Radiolink: RileyLink, OrangeLink, Emalink — heartbeat every minute
216
+
• Dexcom G5/G6/ONE/Anubis transmitter — heartbeat every ~5 minutes
217
+
• Dexcom G7/ONE+ sensor — heartbeat every ~5 minutes
218
+
219
+
Dexcom device batteries continue to provide Bluetooth power for months after they are no longer in service with a sensor.
220
+
""")
221
+
222
+
Text("If the person using LoopFollow is also wearing a Dexcom or radiolink, they should choose their own device.")
223
+
.font(.footnote)
224
+
.foregroundColor(.secondary)
225
+
}
226
+
.padding()
227
+
.frame(maxWidth:.infinity, alignment:.leading)
228
+
}
229
+
.navigationTitle("Background Refresh")
230
+
.navigationBarTitleDisplayMode(.inline)
231
+
.toolbar{
232
+
ToolbarItem(placement:.confirmationAction){
233
+
Button("Done"){ showInfo =false}
234
+
}
235
+
}
236
+
}
237
+
.presentationDetents([.large])
238
+
.presentationDragIndicator(.visible)
239
+
}
240
+
179
241
privatefunc startTimer(){
180
242
timer =Timer.scheduledTimer(withTimeInterval:1.0, repeats:true){ _ in
You can copy your full URL (including the token) from Nightscout Admin Tools. When pasted here, LoopFollow automatically extracts both the URL and the token.
108
+
109
+
To find your URL, open your Nightscout site in a browser and copy the address from the address bar. Remove any trailing slashes or path components — just the base URL is needed.
110
+
""")
111
+
.padding()
112
+
.frame(maxWidth:.infinity, alignment:.leading)
113
+
}
114
+
.navigationTitle("Nightscout URL")
115
+
.navigationBarTitleDisplayMode(.inline)
116
+
.toolbar{
117
+
ToolbarItem(placement:.confirmationAction){
118
+
Button("Done"){ activeInfoSheet =nil}
119
+
}
120
+
}
121
+
}
122
+
.presentationDetents([.medium])
123
+
.presentationDragIndicator(.visible)
124
+
}
125
+
126
+
privatevartokenInfoSheet:someView{
127
+
NavigationStack{
128
+
ScrollView{
129
+
VStack(alignment:.leading, spacing:16){
130
+
Text("""
131
+
A token controls what LoopFollow can access on your Nightscout site. Tokens are not the same as API keys — they are created within Nightscout itself.
132
+
""")
133
+
134
+
Text("Creating a Token")
135
+
.font(.headline)
136
+
Text("""
137
+
1. Open your Nightscout site in a browser
138
+
2. Go to the hamburger menu (☰) and select Admin Tools
139
+
3. Under "Subjects", tap "Add new Subject"
140
+
4. Enter a name (e.g. "LoopFollow") and select a role
141
+
5. Save, then copy the token (it looks like: loopfollow-1234567890abcdef)
142
+
""")
143
+
144
+
Text("Which Role Do I Need?")
145
+
.font(.headline)
146
+
Text("""
147
+
• Read — sufficient for most setups, including Loop and Trio remote control via APNS
148
+
• Read & Write (Careportal) — required only for Nightscout Remote Control (Trio 0.2.x or older)
149
+
150
+
If your Nightscout site is publicly readable, you can leave the token empty. The status will show "OK (Read)".
0 commit comments