expo-dev-launcher 57.0.5 → 57.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,14 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 57.0.7 — 2026-07-17
14
+
15
+ _This version does not introduce any user-facing changes._
16
+
17
+ ## 57.0.6 — 2026-07-15
18
+
19
+ _This version does not introduce any user-facing changes._
20
+
13
21
  ## 57.0.5 — 2026-07-03
14
22
 
15
23
  ### 🐛 Bug fixes
@@ -33,6 +41,7 @@ _This version does not introduce any user-facing changes._
33
41
  ### 🎉 New features
34
42
 
35
43
  - Add a Settings toggle to switch between auto-launching the most recent app and showing the launcher. ([#47131](https://github.com/expo/expo/pull/47131) by [@alanjhughes](https://github.com/alanjhughes))
44
+ - [iOS] Add build's expiration date to Settings. ([#47190](https://github.com/expo/expo/pull/47190) by [@gabrieldonadel](https://github.com/gabrieldonadel))
36
45
 
37
46
  ### 🐛 Bug fixes
38
47
 
@@ -26,13 +26,13 @@ expoModule {
26
26
  }
27
27
 
28
28
  group = "host.exp.exponent"
29
- version = "57.0.5"
29
+ version = "57.0.7"
30
30
 
31
31
  android {
32
32
  namespace "expo.modules.devlauncher"
33
33
  defaultConfig {
34
34
  versionCode 9
35
- versionName "57.0.5"
35
+ versionName "57.0.7"
36
36
  }
37
37
 
38
38
  buildTypes {
@@ -676,9 +676,71 @@ static const NSTimeInterval EXDevLauncherDefaultRequestTimeout = 10.0;
676
676
  [buildInfo setObject:sdkVersion forKey:@"sdkVersion"];
677
677
  }
678
678
 
679
+ NSString *appExpirationDate = [self getAppExpirationDate];
680
+ if (appExpirationDate) {
681
+ [buildInfo setObject:appExpirationDate forKey:@"appExpirationDate"];
682
+ }
683
+
679
684
  return buildInfo;
680
685
  }
681
686
 
687
+ -(nullable NSString *)getAppExpirationDate
688
+ {
689
+ // App Store and Simulator builds don't have mobileprovision
690
+ NSString *path = [[NSBundle mainBundle] pathForResource:@"embedded" ofType:@"mobileprovision"];
691
+ if (!path) {
692
+ return nil;
693
+ }
694
+
695
+ NSError *error;
696
+ NSString *profileString = [NSString stringWithContentsOfFile:path encoding:NSASCIIStringEncoding error:&error];
697
+ if (!profileString) {
698
+ return nil;
699
+ }
700
+
701
+ NSScanner *scanner = [NSScanner scannerWithString:profileString];
702
+ if (![scanner scanUpToString:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" intoString:nil]) {
703
+ return nil;
704
+ }
705
+
706
+ NSString *plistString;
707
+ if (![scanner scanUpToString:@"</plist>" intoString:&plistString]) {
708
+ return nil;
709
+ }
710
+ plistString = [plistString stringByAppendingString:@"</plist>"];
711
+
712
+ NSData *plistData = [plistString dataUsingEncoding:NSUTF8StringEncoding];
713
+ id plist = [NSPropertyListSerialization propertyListWithData:plistData
714
+ options:NSPropertyListImmutable
715
+ format:NULL
716
+ error:NULL];
717
+ NSDate *expiration = [plist isKindOfClass:[NSDictionary class]] ? plist[@"ExpirationDate"] : nil;
718
+ if (![expiration isKindOfClass:[NSDate class]]) {
719
+ return nil;
720
+ }
721
+
722
+ NSDateFormatter *formatter = [NSDateFormatter new];
723
+ formatter.dateStyle = NSDateFormatterMediumStyle;
724
+ formatter.timeStyle = NSDateFormatterNoStyle;
725
+ NSString *formattedDate = [formatter stringFromDate:expiration];
726
+
727
+ NSCalendar *calendar = [NSCalendar currentCalendar];
728
+ NSDate *today = [calendar startOfDayForDate:[NSDate date]];
729
+ NSDate *expirationDay = [calendar startOfDayForDate:expiration];
730
+ NSInteger days = [calendar components:NSCalendarUnitDay fromDate:today toDate:expirationDay options:0].day;
731
+
732
+ NSString *relative;
733
+ if (days == 0) {
734
+ relative = @"today";
735
+ } else if (days == 1) {
736
+ relative = @"1 day";
737
+ } else {
738
+ relative = [NSString stringWithFormat:@"%ld days", (long)days];
739
+ }
740
+
741
+ return relative;
742
+ }
743
+
682
744
  -(NSString *)getAppIcon
683
745
  {
684
746
  NSString *appIcon = @"";
@@ -17,7 +17,8 @@ struct SettingsTabView: View {
17
17
  "runtimeVersion": viewModel.buildInfo["runtimeVersion"] as? String ?? "",
18
18
  "sdkVersion": viewModel.structuredBuildInfo.sdkVersion ?? "",
19
19
  "appName": viewModel.buildInfo["appName"] as? String ?? "",
20
- "appVersion": viewModel.buildInfo["appVersion"] as? String ?? ""
20
+ "appVersion": viewModel.buildInfo["appVersion"] as? String ?? "",
21
+ "appExpirationDate": viewModel.buildInfo["appExpirationDate"] as? String ?? ""
21
22
  ]
22
23
 
23
24
  do {
@@ -51,6 +52,10 @@ struct SettingsTabView: View {
51
52
 
52
53
  VStack(spacing: 0) {
53
54
  version
55
+ if let expiration = viewModel.buildInfo["appExpirationDate"] as? String {
56
+ Divider()
57
+ expirationRow(expiration)
58
+ }
54
59
  Divider()
55
60
  copyToClipboardButton
56
61
  }
@@ -170,6 +175,17 @@ struct SettingsTabView: View {
170
175
  .padding(.vertical, 12)
171
176
  }
172
177
 
178
+ private func expirationRow(_ text: String) -> some View {
179
+ HStack {
180
+ Text("Expires in")
181
+ Spacer()
182
+ Text(text)
183
+ .foregroundColor(.secondary)
184
+ }
185
+ .padding(.horizontal)
186
+ .padding(.vertical, 12)
187
+ }
188
+
173
189
  private var copyToClipboardButton: some View {
174
190
  #if os(tvOS)
175
191
  Text("Clipboard not available on tvOS")
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "expo-dev-launcher",
3
3
  "title": "Expo Development Launcher",
4
- "version": "57.0.5",
4
+ "version": "57.0.7",
5
5
  "description": "Pre-release version of the Expo development launcher package for testing.",
6
6
  "repository": {
7
7
  "type": "git",
@@ -15,9 +15,9 @@
15
15
  "license": "MIT",
16
16
  "homepage": "https://docs.expo.dev",
17
17
  "dependencies": {
18
- "@expo/schema-utils": "^57.0.1",
19
- "expo-dev-menu": "~57.0.5",
20
- "expo-manifests": "~57.0.0"
18
+ "@expo/schema-utils": "^57.0.2",
19
+ "expo-dev-menu": "~57.0.7",
20
+ "expo-manifests": "~57.0.1"
21
21
  },
22
22
  "peerDependencies": {
23
23
  "expo": "*",
@@ -25,9 +25,9 @@
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^22.14.0",
28
- "expo": "57.0.2"
28
+ "expo": "57.0.7"
29
29
  },
30
- "gitHead": "5104cb89c3938bc9653e0cbad43da3a43a2e77a7",
30
+ "gitHead": "0dac79c8469fa00b76fb8f402c47ed61f3d6317e",
31
31
  "scripts": {
32
32
  "build:plugin": "expo-module build plugin",
33
33
  "expo-module": "expo-module"