expo-font 58.0.2 → 58.0.3

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/android/build.gradle +2 -2
  3. package/expo-module.config.json +1 -1
  4. package/ios/FontLoaderModule.swift +20 -8
  5. package/ios/FontUtils.swift +8 -6
  6. package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2.module → 58.0.3/expo.modules.font-58.0.3.module} +9 -9
  7. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.3/expo.modules.font-58.0.3.module.md5 +1 -0
  8. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.3/expo.modules.font-58.0.3.module.sha1 +1 -0
  9. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.3/expo.modules.font-58.0.3.module.sha256 +1 -0
  10. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.3/expo.modules.font-58.0.3.module.sha512 +1 -0
  11. package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2.pom → 58.0.3/expo.modules.font-58.0.3.pom} +3 -3
  12. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.3/expo.modules.font-58.0.3.pom.md5 +1 -0
  13. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.3/expo.modules.font-58.0.3.pom.sha1 +1 -0
  14. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.3/expo.modules.font-58.0.3.pom.sha256 +1 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.3/expo.modules.font-58.0.3.pom.sha512 +1 -0
  16. package/local-maven-repo/host/exp/exponent/expo.modules.font/maven-metadata.xml +4 -4
  17. package/local-maven-repo/host/exp/exponent/expo.modules.font/maven-metadata.xml.md5 +1 -1
  18. package/local-maven-repo/host/exp/exponent/expo.modules.font/maven-metadata.xml.sha1 +1 -1
  19. package/local-maven-repo/host/exp/exponent/expo.modules.font/maven-metadata.xml.sha256 +1 -1
  20. package/local-maven-repo/host/exp/exponent/expo.modules.font/maven-metadata.xml.sha512 +1 -1
  21. package/package.json +2 -2
  22. package/prebuilds/output/debug/xcframeworks/ExpoFont.tar.gz +0 -0
  23. package/prebuilds/output/release/xcframeworks/ExpoFont.tar.gz +0 -0
  24. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.2/expo.modules.font-58.0.2.module.md5 +0 -1
  25. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.2/expo.modules.font-58.0.2.module.sha1 +0 -1
  26. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.2/expo.modules.font-58.0.2.module.sha256 +0 -1
  27. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.2/expo.modules.font-58.0.2.module.sha512 +0 -1
  28. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.2/expo.modules.font-58.0.2.pom.md5 +0 -1
  29. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.2/expo.modules.font-58.0.2.pom.sha1 +0 -1
  30. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.2/expo.modules.font-58.0.2.pom.sha256 +0 -1
  31. package/local-maven-repo/host/exp/exponent/expo.modules.font/58.0.2/expo.modules.font-58.0.2.pom.sha512 +0 -1
  32. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2-sources.jar → 58.0.3/expo.modules.font-58.0.3-sources.jar} +0 -0
  33. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2-sources.jar.md5 → 58.0.3/expo.modules.font-58.0.3-sources.jar.md5} +0 -0
  34. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2-sources.jar.sha1 → 58.0.3/expo.modules.font-58.0.3-sources.jar.sha1} +0 -0
  35. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2-sources.jar.sha256 → 58.0.3/expo.modules.font-58.0.3-sources.jar.sha256} +0 -0
  36. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2-sources.jar.sha512 → 58.0.3/expo.modules.font-58.0.3-sources.jar.sha512} +0 -0
  37. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2.aar → 58.0.3/expo.modules.font-58.0.3.aar} +0 -0
  38. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2.aar.md5 → 58.0.3/expo.modules.font-58.0.3.aar.md5} +0 -0
  39. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2.aar.sha1 → 58.0.3/expo.modules.font-58.0.3.aar.sha1} +0 -0
  40. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2.aar.sha256 → 58.0.3/expo.modules.font-58.0.3.aar.sha256} +0 -0
  41. /package/local-maven-repo/host/exp/exponent/expo.modules.font/{58.0.2/expo.modules.font-58.0.2.aar.sha512 → 58.0.3/expo.modules.font-58.0.3.aar.sha512} +0 -0
package/CHANGELOG.md CHANGED
@@ -10,6 +10,12 @@
10
10
 
11
11
  ### 💡 Others
12
12
 
13
+ ## 58.0.3 — 2026-09-28
14
+
15
+ ### 🐛 Bug fixes
16
+
17
+ - [iOS] Keep the previously registered font when a font loaded from a new path has the same PostScript name, instead of unregistering it and crashing on render. ([#50561](https://github.com/expo/expo/pull/50561) by [@eliotgevers](https://github.com/eliotgevers))
18
+
13
19
  ## 58.0.2 — 2026-09-21
14
20
 
15
21
  ### 🐛 Bug fixes
@@ -4,13 +4,13 @@ plugins {
4
4
  }
5
5
 
6
6
  group = 'host.exp.exponent'
7
- version = '58.0.2'
7
+ version = '58.0.3'
8
8
 
9
9
  android {
10
10
  namespace "expo.modules.font"
11
11
  defaultConfig {
12
12
  versionCode 29
13
- versionName "58.0.2"
13
+ versionName "58.0.3"
14
14
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
15
15
  }
16
16
  }
@@ -11,7 +11,7 @@
11
11
  "publication": {
12
12
  "groupId": "host.exp.exponent",
13
13
  "artifactId": "expo.modules.font",
14
- "version": "58.0.2",
14
+ "version": "58.0.3",
15
15
  "repository": "local-maven-repo"
16
16
  }
17
17
  }
@@ -29,7 +29,7 @@ public final class FontLoaderModule: Module {
29
29
  }
30
30
  }
31
31
 
32
- try registerFont(fontUrl: fontUrl, fontFamilyAlias: fontFamilyAlias)
32
+ let registeredFont = try registerFont(fontUrl: fontUrl, fontFamilyAlias: fontFamilyAlias)
33
33
 
34
34
  // Alias every name the file provides to `fontFamilyAlias` — one per named instance for a
35
35
  // variable font — that makes its weights reachable through the `fontWeight` style prop.
@@ -39,10 +39,14 @@ public final class FontLoaderModule: Module {
39
39
 
40
40
  FontFamilyAliasManager.setAlias(fontFamilyAlias, forPostScriptNames: aliasedNames, url: localUri)
41
41
 
42
- // A file no longer aliased stays registered with CoreText otherwise. A failed unregister
43
- // is fine: `registerFont` tolerates duplicates.
44
- for staleUrl in previousUrls where !FontFamilyAliasManager.hasRegisteredUrl(staleUrl) {
45
- _ = try? unregisterFont(url: staleUrl as CFURL)
42
+ // A duplicate-name registration still depends on a previously registered URL. Do not
43
+ // unregister it when the incoming URL did not acquire its own registration. The registry
44
+ // then records the incoming URL while CoreText serves the previous one, until the next
45
+ // cold launch registers the incoming URL first.
46
+ if registeredFont {
47
+ for staleUrl in previousUrls where !FontFamilyAliasManager.hasRegisteredUrl(staleUrl) {
48
+ _ = try? unregisterFont(url: staleUrl as CFURL)
49
+ }
46
50
  }
47
51
 
48
52
  // Only report names the app supplied. This list is what `Font.isLoaded` answers from, and
@@ -69,6 +73,7 @@ public final class FontLoaderModule: Module {
69
73
  var faceEntries = [(url: URL, names: [String])]()
70
74
  var faceInfos = [FaceInfo]()
71
75
  var seenUrls = Set<URL>()
76
+ var registeredAllFaces = true
72
77
 
73
78
  for (index, face) in faces.enumerated() {
74
79
  guard let localUri = face.localUri else {
@@ -85,7 +90,9 @@ public final class FontLoaderModule: Module {
85
90
  _ = try? unregisterFont(url: fontUrl)
86
91
  }
87
92
 
88
- try registerFont(fontUrl: fontUrl, fontFamilyAlias: fontFamilyAlias)
93
+ if try !registerFont(fontUrl: fontUrl, fontFamilyAlias: fontFamilyAlias) {
94
+ registeredAllFaces = false
95
+ }
89
96
 
90
97
  let names = try postScriptNames(inFileAt: fontUrl, alias: fontFamilyAlias)
91
98
  faceEntries.append((url: localUri, names: names))
@@ -110,8 +117,13 @@ public final class FontLoaderModule: Module {
110
117
  }
111
118
  FontFamilyAliasManager.setFaces(faceEntries, alias: fontFamilyAlias)
112
119
 
113
- for staleUrl in previousUrls where !FontFamilyAliasManager.hasRegisteredUrl(staleUrl) {
114
- _ = try? unregisterFont(url: staleUrl as CFURL)
120
+ // Deliberately coarse: one duplicate-name face keeps every stale URL registered, even
121
+ // faces unrelated to the collision. Leaving a registration behind is safe; removing one
122
+ // that still serves a name is not.
123
+ if registeredAllFaces {
124
+ for staleUrl in previousUrls where !FontFamilyAliasManager.hasRegisteredUrl(staleUrl) {
125
+ _ = try? unregisterFont(url: staleUrl as CFURL)
126
+ }
115
127
  }
116
128
 
117
129
  registeredFonts = Array(Set(registeredFonts).union([fontFamilyAlias]))
@@ -143,23 +143,25 @@ internal func fontTraits(inFileAt url: CFURL) -> (isItalic: Bool, weightTrait: C
143
143
 
144
144
  /**
145
145
  Registers the given font to make it discoverable through font descriptor matching.
146
+ Returns whether this URL owns a registration, rather than relying on a duplicate name at another URL.
146
147
  */
147
- internal func registerFont(fontUrl: CFURL, fontFamilyAlias: String) throws {
148
+ internal func registerFont(fontUrl: CFURL, fontFamilyAlias: String) throws -> Bool {
148
149
  var error: Unmanaged<CFError>?
149
150
 
150
151
  if !CTFontManagerRegisterFontsForURL(fontUrl, .process, &error), let error = error?.takeRetainedValue() {
151
152
  let fontError = CTFontManagerError(rawValue: CFErrorGetCode(error))
152
153
 
153
154
  switch fontError {
154
- case .alreadyRegistered, .duplicatedName:
155
- // Ignore the error if:
156
- // - this exact font instance was already registered or
157
- // - another instance already registered with the same name (assuming it's most likely the same font anyway)
158
- return
155
+ case .alreadyRegistered:
156
+ return true
157
+ case .duplicatedName:
158
+ // The requested URL was not registered. A different URL still owns this font name.
159
+ return false
159
160
  default:
160
161
  throw FontRegistrationFailedException(FontRegistrationErrorInfo(fontFamilyAlias: fontFamilyAlias, cfError: error, ctFontManagerError: fontError))
161
162
  }
162
163
  }
164
+ return true
163
165
  }
164
166
 
165
167
  /**
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "host.exp.exponent",
5
5
  "module": "expo.modules.font",
6
- "version": "58.0.2",
6
+ "version": "58.0.3",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -24,8 +24,8 @@
24
24
  },
25
25
  "files": [
26
26
  {
27
- "name": "expo.modules.font-58.0.2.aar",
28
- "url": "expo.modules.font-58.0.2.aar",
27
+ "name": "expo.modules.font-58.0.3.aar",
28
+ "url": "expo.modules.font-58.0.3.aar",
29
29
  "size": 64534,
30
30
  "sha512": "87ebcef820fe1d9992431b7e968b54910a8740d5cb1f02a391d2fd7cd2257c7741f5bef0c67c0936039eca1fbd9c5db678c24c264e708fe2d570bb190f4bf3a1",
31
31
  "sha256": "542c71cf9cf176ad4762853834bdbe10081c41caee62ef176f141d17aceb3c26",
@@ -47,7 +47,7 @@
47
47
  "group": "org.jetbrains.kotlin",
48
48
  "module": "kotlin-stdlib-jdk7",
49
49
  "version": {
50
- "requires": "2.2.0"
50
+ "requires": "2.2.10"
51
51
  }
52
52
  },
53
53
  {
@@ -65,14 +65,14 @@
65
65
  "group": "io.github.expo.pika",
66
66
  "module": "pika-api",
67
67
  "version": {
68
- "requires": "1.0.0"
68
+ "requires": "1.1.0"
69
69
  }
70
70
  }
71
71
  ],
72
72
  "files": [
73
73
  {
74
- "name": "expo.modules.font-58.0.2.aar",
75
- "url": "expo.modules.font-58.0.2.aar",
74
+ "name": "expo.modules.font-58.0.3.aar",
75
+ "url": "expo.modules.font-58.0.3.aar",
76
76
  "size": 64534,
77
77
  "sha512": "87ebcef820fe1d9992431b7e968b54910a8740d5cb1f02a391d2fd7cd2257c7741f5bef0c67c0936039eca1fbd9c5db678c24c264e708fe2d570bb190f4bf3a1",
78
78
  "sha256": "542c71cf9cf176ad4762853834bdbe10081c41caee62ef176f141d17aceb3c26",
@@ -91,8 +91,8 @@
91
91
  },
92
92
  "files": [
93
93
  {
94
- "name": "expo.modules.font-58.0.2-sources.jar",
95
- "url": "expo.modules.font-58.0.2-sources.jar",
94
+ "name": "expo.modules.font-58.0.3-sources.jar",
95
+ "url": "expo.modules.font-58.0.3-sources.jar",
96
96
  "size": 14454,
97
97
  "sha512": "e21a5200a4231a28fa5ce8d94a9326a9930f6dd08b6cbcd3d8729e79a8226a829a9e7b8ede4427c1378819045f2fb437448518038c49c0df60cf0ca5ced7192a",
98
98
  "sha256": "6a973c13debffd5c2728ddf9950714ffa1bd3c8f53fa8706c653c8e9f0822345",
@@ -0,0 +1 @@
1
+ 97b22f3cf58aac662eb7efe5fe474a792c1c8c5c512010597670c8242e3509e9
@@ -0,0 +1 @@
1
+ 99c6d1c4a7c797343a305b3c09fd22bf4b80fbe4816ca124d01d5c0058afa0e4cbdbbe2ca790254fdc7ff4a943f6bf54199ef0c6bd562563bc8b8b3e0666c9e6
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>host.exp.exponent</groupId>
11
11
  <artifactId>expo.modules.font</artifactId>
12
- <version>58.0.2</version>
12
+ <version>58.0.3</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.font</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -40,7 +40,7 @@
40
40
  <dependency>
41
41
  <groupId>org.jetbrains.kotlin</groupId>
42
42
  <artifactId>kotlin-stdlib-jdk7</artifactId>
43
- <version>2.2.0</version>
43
+ <version>2.2.10</version>
44
44
  <scope>runtime</scope>
45
45
  </dependency>
46
46
  <dependency>
@@ -57,7 +57,7 @@
57
57
  <dependency>
58
58
  <groupId>io.github.expo.pika</groupId>
59
59
  <artifactId>pika-api</artifactId>
60
- <version>1.0.0</version>
60
+ <version>1.1.0</version>
61
61
  <scope>runtime</scope>
62
62
  </dependency>
63
63
  </dependencies>
@@ -0,0 +1 @@
1
+ 7fe17d0076b9afbdbb65a41f26ad53754172a1a2
@@ -0,0 +1 @@
1
+ 6636868983e4f149ce1bdb3bcd7b8b94ba311540ced17bf09b1f840b7f6ab1f3
@@ -0,0 +1 @@
1
+ 697231f758e50e6e756c11aa1ba3d3db4a0d8670e69c9d3adee389a6edcb21aca29fa9b045352dbb98a9da9eeeabba2078d39c10b99118457602c10b44341098
@@ -3,11 +3,11 @@
3
3
  <groupId>host.exp.exponent</groupId>
4
4
  <artifactId>expo.modules.font</artifactId>
5
5
  <versioning>
6
- <latest>58.0.2</latest>
7
- <release>58.0.2</release>
6
+ <latest>58.0.3</latest>
7
+ <release>58.0.3</release>
8
8
  <versions>
9
- <version>58.0.2</version>
9
+ <version>58.0.3</version>
10
10
  </versions>
11
- <lastUpdated>20260921105151</lastUpdated>
11
+ <lastUpdated>20260928121115</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- eea701d2159ceb3cb2978fbd7e42f275
1
+ 10817a4bc55684e58b1769ab5c46858f
@@ -1 +1 @@
1
- 0a7d8a8d58545a8998c918c5097500253e891a42
1
+ c86cd724f80cf65fa060aee0dc29ead98fbf2f41
@@ -1 +1 @@
1
- 84fe7ae3b3413c71c6d9a8f892725e9515938834ced174e94cff67f7f19a458e
1
+ 014a647ba388efdd5c6a3156be0b3a019b2826ae88d5975006a4df138b63edad
@@ -1 +1 @@
1
- de57b530deade8d1da0584fb42ef9ea3325fb33ef50f1c4bbc3aa6bf1632492e2fe1c1b9e85a63f530c87cb1e84c9a20b782a481f0b7d512c2020a0ae3a75cb3
1
+ 69a54e6d6b76b1c840b5b16b8924897f697e27239027e2a3f852574734b19bb6e35951797e12ef6964ce9ea7ccb31e3a0960ee6104c89700f157b77e8d02e540
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-font",
3
- "version": "58.0.2",
3
+ "version": "58.0.3",
4
4
  "description": "Load fonts at runtime and use them in React Native components.",
5
5
  "keywords": [
6
6
  "expo",
@@ -62,7 +62,7 @@
62
62
  "react": "*",
63
63
  "react-native": "*"
64
64
  },
65
- "gitHead": "ebb1fd7569c9c9e172cb9abd73dfede027c1d674",
65
+ "gitHead": "74f6d2b90bc50bd8df7b160d6e6b2204b37a8ce7",
66
66
  "scripts": {
67
67
  "build": "pnpm run build:lib && pnpm run build:plugin",
68
68
  "precompile-ios": "et prebuild-package-for-publish",
@@ -1 +0,0 @@
1
- 90b883158d5c461b2a059251f1be34eb884c97d6
@@ -1 +0,0 @@
1
- ab9cd52f5546645f8279b70d61e51eb08ad11e855709a556ff67b4a8909d4db0
@@ -1 +0,0 @@
1
- 2b71d1a73bef6f1b311eb87b953dc5c94ebf6225336a0976fe0fa119d4c5a17e51d0d466cd80b7a2d114c9d55c8d4ea8b438e2f62b48ba17ab8105ebfdcbb5f6
@@ -1 +0,0 @@
1
- b141d78d652a5945d045880c1bf7949c15e79e2e
@@ -1 +0,0 @@
1
- 1f367bf9bb962707cbcc80c5e1febe2b47189a24525a9177aea28538ae984587
@@ -1 +0,0 @@
1
- cb3aa11c63c5c155899920cc11ee751324fad05ee10b21a22241dc16a180b0539baf1a439f1dbc241ea09d5d2f651bc3085d0ad4a93ea1d89dbc15d766f5c956