Skip to content

Commit eb5508b

Browse files
committed
feat: type installSource as enum and throw on missing native properties
1 parent ecc080b commit eb5508b

21 files changed

+307
-50
lines changed

bun.lock

Lines changed: 8 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"expo-status-bar": "~55.0.4",
1414
"react": "19.2.0",
1515
"react-native": "0.83.2",
16-
"react-native-nitro-modules": ">=0.35.0",
16+
"react-native-nitro-modules": "0.35.0",
1717
"react-native-nitro-version-check": "*",
1818
"react-native-version-check": "^3.5.0"
1919
},

package/android/src/main/java/com/margelo/nitro/nitroversioncheck/HybridVersionCheck.kt

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,33 @@ class HybridVersionCheck : HybridVersionCheckSpec() {
1616
private val packageInfo = context?.packageManager?.getPackageInfo(context.packageName, 0)
1717
}
1818

19-
public override val version = packageInfo?.versionName ?: "unknown"
19+
public override val version = packageInfo?.versionName
20+
?: error("[VersionCheck] Failed to read 'version' (versionName) from PackageInfo")
2021

2122
public override val buildNumber = if (android.os.Build.VERSION.SDK_INT >= 28) {
22-
if (packageInfo?.longVersionCode != null) packageInfo.longVersionCode.toString() else "unknown"
23+
packageInfo?.longVersionCode?.toString()
24+
?: error("[VersionCheck] Failed to read 'buildNumber' (longVersionCode) from PackageInfo")
2325
} else {
2426
@Suppress("DEPRECATION")
25-
if (packageInfo?.versionCode != null) packageInfo.versionCode.toString() else "unknown"
27+
packageInfo?.versionCode?.toString()
28+
?: error("[VersionCheck] Failed to read 'buildNumber' (versionCode) from PackageInfo")
2629
}
2730

28-
public override val packageName = packageInfo?.packageName ?: "unknown"
29-
public override val installSource: String? = run {
31+
public override val packageName = packageInfo?.packageName
32+
?: error("[VersionCheck] Failed to read 'packageName' from PackageInfo")
33+
public override val installSource: InstallSource? = run {
3034
val installer = if (android.os.Build.VERSION.SDK_INT >= 30) {
3135
context?.packageManager?.getInstallSourceInfo(context.packageName)?.installingPackageName
3236
} else {
3337
@Suppress("DEPRECATION")
3438
context?.packageManager?.getInstallerPackageName(context.packageName)
3539
}
36-
if (installer != null) "playstore" else null
40+
if (installer != null) InstallSource.PLAYSTORE else null
3741
}
3842

3943
override fun getCountry(): String {
40-
return java.util.Locale.getDefault().country ?: "unknown"
44+
return java.util.Locale.getDefault().country
45+
?: error("[VersionCheck] Failed to determine device 'country' (Locale.getDefault().country)")
4146
}
4247

4348
override fun getStoreUrl(countryCode: String?): Promise<String> {

package/ios/HybridVersionCheck.swift

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,34 @@ class HybridVersionCheck: HybridVersionCheckSpec {
99
return URLSession(configuration: config)
1010
}()
1111

12-
var version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "unknown"
13-
var buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "unknown"
14-
var packageName = Bundle.main.infoDictionary?["CFBundleIdentifier"] as? String ?? "unknown"
15-
var installSource: String? = {
12+
var version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
13+
?? { fatalError("[VersionCheck] Failed to read 'version' (CFBundleShortVersionString) from Info.plist") }()
14+
var buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String
15+
?? { fatalError("[VersionCheck] Failed to read 'buildNumber' (CFBundleVersion) from Info.plist") }()
16+
var packageName = Bundle.main.infoDictionary?["CFBundleIdentifier"] as? String
17+
?? { fatalError("[VersionCheck] Failed to read 'packageName' (CFBundleIdentifier) from Info.plist") }()
18+
var installSource: InstallSource? = {
1619
guard let receiptURL = Bundle.main.appStoreReceiptURL,
1720
FileManager.default.fileExists(atPath: receiptURL.path) else {
1821
return nil
1922
}
2023
if receiptURL.lastPathComponent == "sandboxReceipt" {
21-
return "testflight"
24+
return .testflight
2225
}
23-
return "appstore"
26+
return .appstore
2427
}()
2528

2629
func getCountry() throws -> String {
2730
if #available(iOS 16, *) {
28-
return Locale.current.region?.identifier ?? "unknown"
31+
guard let region = Locale.current.region?.identifier else {
32+
throw NSError(domain: "VersionCheck", code: 4, userInfo: [NSLocalizedDescriptionKey: "Failed to determine device 'country' (Locale.current.region)"])
33+
}
34+
return region
35+
}
36+
guard let regionCode = Locale.current.regionCode else {
37+
throw NSError(domain: "VersionCheck", code: 4, userInfo: [NSLocalizedDescriptionKey: "Failed to determine device 'country' (Locale.current.regionCode)"])
2938
}
30-
return Locale.current.regionCode ?? "unknown"
39+
return regionCode
3140
}
3241

3342
func getStoreUrl(countryCode: String? = nil) throws -> Promise<String> {

package/nitrogen/generated/android/NitroVersionCheckOnLoad.cpp

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package/nitrogen/generated/android/c++/JHybridVersionCheckSpec.cpp

Lines changed: 7 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package/nitrogen/generated/android/c++/JHybridVersionCheckSpec.hpp

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package/nitrogen/generated/android/c++/JInstallSource.hpp

Lines changed: 61 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroversioncheck/HybridVersionCheckSpec.kt

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroversioncheck/InstallSource.kt

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)