Skip to content

Commit 94d75d9

Browse files
authored
Merge pull request #338 from LoopKit/complications
add more complication families and improve the display (adding trends)
2 parents 1fc7628 + 8638019 commit 94d75d9

File tree

9 files changed

+141
-70
lines changed

9 files changed

+141
-70
lines changed

Loop.xcodeproj/project.pbxproj

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
43027F0E1DFE0EC200C51989 /* NSNumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436A0E7A1D7DE13400D6475D /* NSNumberFormatter.swift */; };
11+
43027F0F1DFE0EC900C51989 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F526D5E1DF2459000A04910 /* HKUnit.swift */; };
1012
4302F4E11D4E9C8900F0FCAF /* TextFieldTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4302F4E01D4E9C8900F0FCAF /* TextFieldTableViewController.swift */; };
1113
4302F4E31D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4302F4E21D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift */; };
1214
4302F4E51D4EA75100F0FCAF /* DoseStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4302F4E41D4EA75100F0FCAF /* DoseStore.swift */; };
15+
43076BF31DFDBC4B0012A723 /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 43076BF21DFDBC4B0012A723 /* it.lproj */; };
1316
430DA58E1D4AEC230097D1CA /* NSBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58D1D4AEC230097D1CA /* NSBundle.swift */; };
1417
430DA5901D4B0E4C0097D1CA /* MySentryPumpStatusMessageBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58F1D4B0E4C0097D1CA /* MySentryPumpStatusMessageBody.swift */; };
1518
4313EDE01D8A6BF90060FA79 /* ChartContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4313EDDF1D8A6BF90060FA79 /* ChartContentView.swift */; };
@@ -184,7 +187,6 @@
184187
C15713821DAC6983005BC4D2 /* MealBolusNightscoutTreatment.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15713811DAC6983005BC4D2 /* MealBolusNightscoutTreatment.swift */; };
185188
C17884631D51A7A400405663 /* BatteryIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17884621D51A7A400405663 /* BatteryIndicator.swift */; };
186189
C18C8C511D5A351900E043FB /* NightscoutDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C18C8C501D5A351900E043FB /* NightscoutDataManager.swift */; };
187-
C1C73EF71DE3D0230022FC89 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1C73EF91DE3D0230022FC89 /* InfoPlist.strings */; };
188190
C1C73F021DE3D0250022FC89 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1C73F041DE3D0250022FC89 /* Localizable.strings */; };
189191
C1C73F081DE3D0260022FC89 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1C73F0A1DE3D0260022FC89 /* InfoPlist.strings */; };
190192
C1C73F0D1DE3D0270022FC89 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1C73F0F1DE3D0270022FC89 /* InfoPlist.strings */; };
@@ -292,6 +294,7 @@
292294
4302F4E01D4E9C8900F0FCAF /* TextFieldTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldTableViewController.swift; sourceTree = "<group>"; };
293295
4302F4E21D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsulinDeliveryTableViewController.swift; sourceTree = "<group>"; };
294296
4302F4E41D4EA75100F0FCAF /* DoseStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DoseStore.swift; sourceTree = "<group>"; };
297+
43076BF21DFDBC4B0012A723 /* it.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = it.lproj; sourceTree = "<group>"; };
295298
430DA58D1D4AEC230097D1CA /* NSBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSBundle.swift; sourceTree = "<group>"; };
296299
430DA58F1D4B0E4C0097D1CA /* MySentryPumpStatusMessageBody.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MySentryPumpStatusMessageBody.swift; sourceTree = "<group>"; };
297300
4313EDDF1D8A6BF90060FA79 /* ChartContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartContentView.swift; sourceTree = "<group>"; };
@@ -453,7 +456,6 @@
453456
C15713811DAC6983005BC4D2 /* MealBolusNightscoutTreatment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MealBolusNightscoutTreatment.swift; sourceTree = "<group>"; };
454457
C17884621D51A7A400405663 /* BatteryIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BatteryIndicator.swift; sourceTree = "<group>"; };
455458
C18C8C501D5A351900E043FB /* NightscoutDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NightscoutDataManager.swift; sourceTree = "<group>"; };
456-
C1C73EF81DE3D0230022FC89 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = "<group>"; };
457459
C1C73F031DE3D0250022FC89 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
458460
C1C73F091DE3D0260022FC89 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = "<group>"; };
459461
C1C73F0E1DE3D0270022FC89 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@@ -600,16 +602,16 @@
600602
43776F8E1B8022E90074EA36 /* Loop */ = {
601603
isa = PBXGroup;
602604
children = (
603-
C1C73F0A1DE3D0260022FC89 /* InfoPlist.strings */,
604-
C1C73F041DE3D0250022FC89 /* Localizable.strings */,
605605
43846AD81D8FA84B00799272 /* gallery.ckcomplication */,
606606
43EDEE6B1CF2E12A00393BE3 /* Loop.entitlements */,
607607
43F5C2D41B92A4A6003EB13D /* Info.plist */,
608608
43776F8F1B8022E90074EA36 /* AppDelegate.swift */,
609609
43776F981B8022E90074EA36 /* Assets.xcassets */,
610-
43E344A01B9E144300C85C07 /* Extensions */,
610+
C1C73F0A1DE3D0260022FC89 /* InfoPlist.strings */,
611+
C1C73F041DE3D0250022FC89 /* Localizable.strings */,
611612
43776F9A1B8022E90074EA36 /* LaunchScreen.storyboard */,
612613
43776F951B8022E90074EA36 /* Main.storyboard */,
614+
43E344A01B9E144300C85C07 /* Extensions */,
613615
43F5C2E41B93C5D4003EB13D /* Managers */,
614616
43757D131C06F26C00910CB9 /* Models */,
615617
43F5C2CE1B92A2A0003EB13D /* View Controllers */,
@@ -645,9 +647,9 @@
645647
43A943821B926B7B0051FA24 /* WatchApp Extension */ = {
646648
isa = PBXGroup;
647649
children = (
648-
C1C73EF91DE3D0230022FC89 /* InfoPlist.strings */,
649650
43D533BB1CFD1DD7009E3085 /* WatchApp Extension.entitlements */,
650651
43846AD41D8FA67800799272 /* Base.lproj */,
652+
43076BF21DFDBC4B0012A723 /* it.lproj */,
651653
43A943911B926B7B0051FA24 /* Info.plist */,
652654
43A9438D1B926B7B0051FA24 /* ComplicationController.swift */,
653655
43A943871B926B7B0051FA24 /* ExtensionDelegate.swift */,
@@ -1090,7 +1092,7 @@
10901092
buildActionMask = 2147483647;
10911093
files = (
10921094
43846AD51D8FA67800799272 /* Base.lproj in Resources */,
1093-
C1C73EF71DE3D0230022FC89 /* InfoPlist.strings in Resources */,
1095+
43076BF31DFDBC4B0012A723 /* it.lproj in Resources */,
10941096
43A943901B926B7B0051FA24 /* Assets.xcassets in Resources */,
10951097
);
10961098
runOnlyForDeploymentPostprocessing = 0;
@@ -1277,6 +1279,8 @@
12771279
43846ADB1D91057000799272 /* ContextUpdatable.swift in Sources */,
12781280
43EA285F1D50ED3D001BC233 /* GlucoseTrend.swift in Sources */,
12791281
4328E0261CFBE2C500E199AA /* IdentifiableClass.swift in Sources */,
1282+
43027F0E1DFE0EC200C51989 /* NSNumberFormatter.swift in Sources */,
1283+
43027F0F1DFE0EC900C51989 /* HKUnit.swift in Sources */,
12801284
43CB2B2B1D924D450079823D /* WCSession.swift in Sources */,
12811285
43DE925A1C5479E4001FFDE1 /* CarbEntryUserInfo.swift in Sources */,
12821286
4328E0301CFBFAEB00E199AA /* NSTimeInterval.swift in Sources */,
@@ -1389,14 +1393,6 @@
13891393
name = MainInterface.storyboard;
13901394
sourceTree = "<group>";
13911395
};
1392-
C1C73EF91DE3D0230022FC89 /* InfoPlist.strings */ = {
1393-
isa = PBXVariantGroup;
1394-
children = (
1395-
C1C73EF81DE3D0230022FC89 /* it */,
1396-
);
1397-
name = InfoPlist.strings;
1398-
sourceTree = "<group>";
1399-
};
14001396
C1C73F041DE3D0250022FC89 /* Localizable.strings */ = {
14011397
isa = PBXVariantGroup;
14021398
children = (
@@ -1472,7 +1468,7 @@
14721468
ONLY_ACTIVE_ARCH = YES;
14731469
SDKROOT = iphoneos;
14741470
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1475-
SWIFT_VERSION = 3.0;
1471+
SWIFT_VERSION = 3.0.1;
14761472
TARGETED_DEVICE_FAMILY = "1,2";
14771473
WARNING_CFLAGS = "-Wall";
14781474
};
@@ -1519,7 +1515,7 @@
15191515
MTL_ENABLE_DEBUG_INFO = NO;
15201516
SDKROOT = iphoneos;
15211517
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
1522-
SWIFT_VERSION = 3.0;
1518+
SWIFT_VERSION = 3.0.1;
15231519
TARGETED_DEVICE_FAMILY = "1,2";
15241520
VALIDATE_PRODUCT = YES;
15251521
WARNING_CFLAGS = "-Wall";

Loop/Managers/StatusExtensionDataManager.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ extension StatusExtensionDataManager: CustomDebugStringConvertible {
109109
var debugDescription: String {
110110
return [
111111
"## StatusExtensionDataManager",
112+
"appGroupName: \(Bundle.main.appGroupSuiteName)",
112113
"statusExtensionContext: \(String(reflecting: defaults?.statusExtensionContext))"
113114
].joined(separator: "\n")
114115
}

Loop/gallery.ckcomplication/A307227B-6EFF-4242-A538-2C9AC617E041.json

Lines changed: 0 additions & 15 deletions
This file was deleted.

Loop/gallery.ckcomplication/Base.lproj/ckcomplication.strings

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,10 @@
77
*/
88

99
/* The complication template example unit string */
10-
"mg/dL" = "mg/dL"
10+
"120↘︎" = "120↘︎";
11+
12+
/* Utilitarian small flat format string (1: Glucose & Trend symbol) (2: Time) */
13+
"UtilitarianSmallFlat" = "%1@ %2@";
14+
15+
/* Utilitarian small flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */
16+
"UtilitarianLargeFlat" = "%1@%2@ %3@";
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
{
22
"supported complication families" : {
3-
"0" : "A307227B-6EFF-4242-A538-2C9AC617E041.json"
3+
"3" : "CFB33AC2-7CD0-43A0-804F-F9A0EEC37480.json",
4+
"6" : "E87B02EB-57B2-4E9D-B371-E0BA2DD55C19.json",
5+
"4" : "B922BD0B-9601-45C9-B84D-ECB9C8235322.json",
6+
"0" : "69B78E1F-415D-4E9E-8E56-E486517658FC.json",
7+
"7" : "AB5AF86D-FF8F-493B-A738-4BB590C8A45E.json"
48
},
59
"client ID" : "com.loudnate.Loop.watchkitapp.watchkitextension"
610
}

WatchApp Extension/Base.lproj/ckcomplication.strings

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,10 @@
77
*/
88

99
/* The complication template example unit string */
10-
"mg/dL" = "mg/dL"
10+
"120↘︎" = "120↘︎";
11+
12+
/* Utilitarian small flat format string (1: Glucose & Trend symbol) (2: Time) */
13+
"UtilitarianSmallFlat" = "%1@ %2@";
14+
15+
/* Utilitarian small flat format string (1: Glucose & Trend symbol) (2: Eventual Glucose) (3: Time) */
16+
"UtilitarianLargeFlat" = "%1@%2@ %3@";

WatchApp Extension/ComplicationController.swift

Lines changed: 45 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,14 @@ final class ComplicationController: NSObject, CLKComplicationDataSource {
4343
private lazy var formatter = NumberFormatter()
4444

4545
func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: (@escaping (CLKComplicationTimelineEntry?) -> Void)) {
46-
47-
switch complication.family {
48-
case .modularSmall:
49-
if let context = ExtensionDelegate.shared().lastContext,
50-
let glucose = context.glucose,
51-
let unit = context.preferredGlucoseUnit,
52-
let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
53-
let date = context.glucoseDate, date.timeIntervalSinceNow.minutes >= -15,
54-
let template = CLKComplicationTemplateModularSmallStackText(line1: glucoseString, date: date)
55-
{
56-
handler(CLKComplicationTimelineEntry(date: date, complicationTemplate: template))
57-
} else {
58-
handler(nil)
59-
}
60-
default:
46+
if let context = ExtensionDelegate.shared().lastContext,
47+
let glucoseDate = context.glucoseDate,
48+
glucoseDate.timeIntervalSinceNow.minutes >= -15,
49+
let template = CLKComplicationTemplate.templateForFamily(complication.family, from: context)
50+
{
51+
template.tintColor = UIColor.tintColor
52+
handler(CLKComplicationTimelineEntry(date: glucoseDate, complicationTemplate: template))
53+
} else {
6154
handler(nil)
6255
}
6356
}
@@ -69,13 +62,12 @@ final class ComplicationController: NSObject, CLKComplicationDataSource {
6962

7063
func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: (@escaping ([CLKComplicationTimelineEntry]?) -> Void)) {
7164
// Call the handler with the timeline entries after to the given date
72-
if let context = ExtensionDelegate.shared().lastContext,
73-
let glucose = context.glucose,
74-
let unit = context.preferredGlucoseUnit,
75-
let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
76-
let glucoseDate = context.glucoseDate, glucoseDate.timeIntervalSince(date) > 0,
77-
let template = CLKComplicationTemplateModularSmallStackText(line1: glucoseString, date: glucoseDate)
65+
if let context = ExtensionDelegate.shared().lastContext,
66+
let glucoseDate = context.glucoseDate,
67+
glucoseDate.timeIntervalSince(date) > 0,
68+
let template = CLKComplicationTemplate.templateForFamily(complication.family, from: context)
7869
{
70+
template.tintColor = UIColor.tintColor
7971
handler([CLKComplicationTimelineEntry(date: glucoseDate, complicationTemplate: template)])
8072
} else {
8173
handler(nil)
@@ -85,16 +77,41 @@ final class ComplicationController: NSObject, CLKComplicationDataSource {
8577
// MARK: - Placeholder Templates
8678

8779
func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
88-
switch complication.family {
89-
case .modularSmall:
90-
let template = CLKComplicationTemplateModularSmallStackText()
9180

92-
template.line1TextProvider = CLKSimpleTextProvider(text: "--", shortText: "--", accessibilityLabel: "No glucose value available")
93-
template.line2TextProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileTextKey: "mg/dL")
81+
let template: CLKComplicationTemplate?
82+
83+
let glucoseText = CLKSimpleTextProvider.localizableTextProvider(withStringsFileTextKey: "120↘︎", shortTextKey: "120")
84+
let timeText = CLKTimeTextProvider(date: Date())
9485

95-
handler(template)
86+
switch complication.family {
87+
case .modularSmall:
88+
let modularSmall = CLKComplicationTemplateModularSmallStackText()
89+
modularSmall.line1TextProvider = glucoseText
90+
modularSmall.line2TextProvider = timeText
91+
template = modularSmall
92+
case .circularSmall:
93+
let circularSmall = CLKComplicationTemplateCircularSmallSimpleText()
94+
circularSmall.textProvider = glucoseText
95+
template = circularSmall
96+
case .extraLarge:
97+
let extraLarge = CLKComplicationTemplateExtraLargeStackText()
98+
extraLarge.line1TextProvider = glucoseText
99+
extraLarge.line2TextProvider = timeText
100+
template = extraLarge
101+
case .utilitarianSmallFlat:
102+
let utilitarianSmallFlat = CLKComplicationTemplateUtilitarianSmallFlat()
103+
utilitarianSmallFlat.textProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileFormatKey: "UtilitarianSmallFlat", textProviders: [glucoseText, timeText])
104+
template = utilitarianSmallFlat
105+
case .utilitarianLarge:
106+
let utilitarianLarge = CLKComplicationTemplateUtilitarianLargeFlat()
107+
let eventualGlucoseText = CLKSimpleTextProvider.localizableTextProvider(withStringsFileTextKey: "75")
108+
utilitarianLarge.textProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileFormatKey: "UtilitarianLargeFlat", textProviders: [glucoseText, eventualGlucoseText, timeText])
109+
template = utilitarianLarge
96110
default:
97-
handler(nil)
111+
template = nil
98112
}
113+
114+
template?.tintColor = UIColor.tintColor
115+
handler(template)
99116
}
100117
}

WatchApp Extension/Extensions/CLKComplicationTemplate.swift

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,69 @@ import ClockKit
1010
import Foundation
1111

1212

13-
extension CLKComplicationTemplateModularSmallStackText {
13+
extension CLKComplicationTemplate {
1414

15-
convenience init?(line1: String?, date: Date?) {
16-
guard let line1 = line1, let date = date else {
15+
static func templateForFamily(_ family: CLKComplicationFamily, from context: WatchContext) -> CLKComplicationTemplate? {
16+
17+
guard let glucose = context.glucose,
18+
let unit = context.preferredGlucoseUnit
19+
else {
1720
return nil
1821
}
1922

20-
self.init()
23+
let formatter = NumberFormatter.glucoseFormatter(for: unit)
2124

22-
line1TextProvider = CLKSimpleTextProvider(text: line1)
23-
line2TextProvider = CLKTimeTextProvider(date: date)
24-
}
25+
guard let glucoseString = formatter.string(from: NSNumber(value: glucose.doubleValue(for: unit))),
26+
let date = context.glucoseDate else
27+
{
28+
return nil
29+
}
30+
31+
var glucoseStrings = [glucoseString]
32+
var accessibilityStrings = [glucoseString]
33+
var eventualGlucoseText: CLKSimpleTextProvider?
34+
35+
if let trend = context.glucoseTrend {
36+
glucoseStrings.append(trend.symbol)
37+
accessibilityStrings.append(trend.localizedDescription)
38+
}
2539

40+
if let eventualGlucose = context.eventualGlucose,
41+
let eventualGlucoseString = formatter.string(from: NSNumber(value: eventualGlucose.doubleValue(for: unit)))
42+
{
43+
eventualGlucoseText = CLKSimpleTextProvider(text: eventualGlucoseString)
44+
}
45+
46+
let glucoseText = CLKSimpleTextProvider(text: glucoseStrings.joined(), shortText: glucoseString, accessibilityLabel: accessibilityStrings.joined(separator: ", "))
47+
let timeText = CLKTimeTextProvider(date: date)
48+
49+
switch family {
50+
case .modularSmall:
51+
let template = CLKComplicationTemplateModularSmallStackText()
52+
template.line1TextProvider = glucoseText
53+
template.line2TextProvider = timeText
54+
return template
55+
case .circularSmall:
56+
let template = CLKComplicationTemplateCircularSmallSimpleText()
57+
template.textProvider = glucoseText
58+
return template
59+
case .extraLarge:
60+
let template = CLKComplicationTemplateExtraLargeStackText()
61+
template.line1TextProvider = glucoseText
62+
template.line2TextProvider = timeText
63+
return template
64+
case .utilitarianSmallFlat:
65+
let template = CLKComplicationTemplateUtilitarianSmallFlat()
66+
template.textProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileFormatKey: "UtilitarianSmallFlat", textProviders: [glucoseText, timeText])
67+
return template
68+
case .utilitarianLarge:
69+
let template = CLKComplicationTemplateUtilitarianLargeFlat()
70+
let providers: [CLKTextProvider?] = [glucoseText, eventualGlucoseText, timeText]
71+
72+
template.textProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileFormatKey: "UtilitarianLargeFlat", textProviders: providers.flatMap({ $0 }))
73+
return template
74+
default:
75+
return nil
76+
}
77+
}
2678
}

WatchApp Extension/Info.plist

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
<key>CLKComplicationSupportedFamilies</key>
2828
<array>
2929
<string>CLKComplicationFamilyModularSmall</string>
30+
<string>CLKComplicationFamilyCircularSmall</string>
31+
<string>CLKComplicationFamilyExtraLarge</string>
32+
<string>CLKComplicationFamilyUtilitarianSmallFlat</string>
33+
<string>CLKComplicationFamilyUtilitarianLarge</string>
3034
</array>
3135
<key>NSExtension</key>
3236
<dict>

0 commit comments

Comments
 (0)