Fix iOS build, fix onboarding is keys survive app reinstall

This commit is contained in:
minibits-cash
2026-03-16 07:15:05 -07:00
parent d27e9214b2
commit 647210802c
18 changed files with 36699 additions and 64 deletions
+6 -6
View File
@@ -1968,7 +1968,7 @@ PODS:
- React-perflogger (= 0.84.0) - React-perflogger (= 0.84.0)
- React-utils (= 0.84.0) - React-utils (= 0.84.0)
- ReactNativeDependencies - ReactNativeDependencies
- ReactNativeCameraKit (17.0.1): - ReactNativeCameraKit (16.2.1):
- hermes-engine - hermes-engine
- RCTRequired - RCTRequired
- RCTTypeSafety - RCTTypeSafety
@@ -2758,7 +2758,7 @@ SPEC CHECKSUMS:
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
OpenSSL-Universal: 6082b0bf950e5636fe0d78def171184e2b3899c2 OpenSSL-Universal: 6082b0bf950e5636fe0d78def171184e2b3899c2
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCT-Folly: 7449e39d08a22c7cfc6bbfc9f140168c61c5869d
RCTDeprecation: 8ae59687fd548d481aa5ce8014ac7cd9b47e7316 RCTDeprecation: 8ae59687fd548d481aa5ce8014ac7cd9b47e7316
RCTRequired: d711b3887891fab6a77c6b9cdc49a3d8b171e36a RCTRequired: d711b3887891fab6a77c6b9cdc49a3d8b171e36a
RCTSwiftUI: 96986e49a4fdc2c2103929dee2641e1b57edf33d RCTSwiftUI: 96986e49a4fdc2c2103929dee2641e1b57edf33d
@@ -2790,7 +2790,7 @@ SPEC CHECKSUMS:
React-jsinspectorcdp: 84092b2afb8be60cd184832c757a8e8019f16384 React-jsinspectorcdp: 84092b2afb8be60cd184832c757a8e8019f16384
React-jsinspectornetwork: 3537aa4e90d7c5fba4fe2b4a4f9ccf7f4ec32f48 React-jsinspectornetwork: 3537aa4e90d7c5fba4fe2b4a4f9ccf7f4ec32f48
React-jsinspectortracing: 4bc2046417f5cd1fa0789a4943dc4a3ec90413e3 React-jsinspectortracing: 4bc2046417f5cd1fa0789a4943dc4a3ec90413e3
React-jsitooling: ead6180fa39d8dbfee3c2a1211ec37dbe45554fe React-jsitooling: fb0d3dc02875aac8099d741bbae2209e26a832d1
React-jsitracing: fa7587d28b386c312a0c862cd3f4d1d4f69948ee React-jsitracing: fa7587d28b386c312a0c862cd3f4d1d4f69948ee
React-logger: dd3e5f78709d5b029336be395a67bbcdc775e2ed React-logger: dd3e5f78709d5b029336be395a67bbcdc775e2ed
React-Mapbuffer: 2bdeed9ba58c94ac99a2711a3a722d2d5b3a8a81 React-Mapbuffer: 2bdeed9ba58c94ac99a2711a3a722d2d5b3a8a81
@@ -2837,7 +2837,7 @@ SPEC CHECKSUMS:
ReactAppDependencyProvider: 6b7e8d8d974ed13fb66698d82c30c5e70c1f7d3a ReactAppDependencyProvider: 6b7e8d8d974ed13fb66698d82c30c5e70c1f7d3a
ReactCodegen: b411483ad988ff21fe9e7fb1c5851169f52afabb ReactCodegen: b411483ad988ff21fe9e7fb1c5851169f52afabb
ReactCommon: 3c00047ec244a06c7deaa6ae59cc8aa305fa3f6a ReactCommon: 3c00047ec244a06c7deaa6ae59cc8aa305fa3f6a
ReactNativeCameraKit: 5d844feee3a7d6b0069b3165b138eb73a343a1fd ReactNativeCameraKit: aca16005874ca639a422fe90a9d6626d9ff1ae21
ReactNativeDependencies: 019be871bc55e933ba5469d1497b05a7201f0b16 ReactNativeDependencies: 019be871bc55e933ba5469d1497b05a7201f0b16
RNCClipboard: d73fd4b2ac59e792596e7cd615b6321d577c1a2b RNCClipboard: d73fd4b2ac59e792596e7cd615b6321d577c1a2b
RNExitApp: a2fd7923ab37b9166704fdc488622a48dcd372a2 RNExitApp: a2fd7923ab37b9166704fdc488622a48dcd372a2
@@ -2848,11 +2848,11 @@ SPEC CHECKSUMS:
RNKeychain: 1fdd8401d8c8d05da80a9e1843d837ccfb947ea2 RNKeychain: 1fdd8401d8c8d05da80a9e1843d837ccfb947ea2
RNLocalize: 17220985af7688b1dc3125d8aa14bcf904d730d6 RNLocalize: 17220985af7688b1dc3125d8aa14bcf904d730d6
RNNotifee: 5e3b271e8ea7456a36eec994085543c9adca9168 RNNotifee: 5e3b271e8ea7456a36eec994085543c9adca9168
RNReanimated: 1aa31141cdf34d502d2e59670a019e9dbfc63c75 RNReanimated: 00cb3d8876d5092758efd06f37e30f8e7d6653ca
RNScreens: 82c4bb10e5a71fb2ae904e2fe5141d28720806d1 RNScreens: 82c4bb10e5a71fb2ae904e2fe5141d28720806d1
RNSentry: d0b2aee30a7988272b64c6aaf0893b6dc320692b RNSentry: d0b2aee30a7988272b64c6aaf0893b6dc320692b
RNSVG: c235766fc27d2f5fd74e6944343a5cae7e39ce1c RNSVG: c235766fc27d2f5fd74e6944343a5cae7e39ce1c
RNWorklets: 7564836a83bc44a6ab3231cf9b9e4697d148b379 RNWorklets: 9629f9f7042c6f46a9b60e5a7b46163a11b9bac6
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
Sentry: c643eb180df401dd8c734c5036ddd9dd9218daa6 Sentry: c643eb180df401dd8c734c5036ddd9dd9218daa6
@@ -26,13 +26,13 @@
3B4392A12AC88292D35C810B /* Pods-minibits_wallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-minibits_wallet.debug.xcconfig"; path = "Target Support Files/Pods-minibits_wallet/Pods-minibits_wallet.debug.xcconfig"; sourceTree = "<group>"; }; 3B4392A12AC88292D35C810B /* Pods-minibits_wallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-minibits_wallet.debug.xcconfig"; path = "Target Support Files/Pods-minibits_wallet/Pods-minibits_wallet.debug.xcconfig"; sourceTree = "<group>"; };
4ACC08249CA13DFDBBBD7A8B /* Pods_minibits_wallet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_minibits_wallet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4ACC08249CA13DFDBBBD7A8B /* Pods_minibits_wallet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_minibits_wallet.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5709B34CF0A7D63546082F79 /* Pods-minibits_wallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-minibits_wallet.release.xcconfig"; path = "Target Support Files/Pods-minibits_wallet/Pods-minibits_wallet.release.xcconfig"; sourceTree = "<group>"; }; 5709B34CF0A7D63546082F79 /* Pods-minibits_wallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-minibits_wallet.release.xcconfig"; path = "Target Support Files/Pods-minibits_wallet/Pods-minibits_wallet.release.xcconfig"; sourceTree = "<group>"; };
B3D7A2E5F1C648B9A0234567 /* HammersmithOne-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "HammersmithOne-Regular.ttf"; path = "../assets/fonts/HammersmithOne-Regular.ttf"; sourceTree = "<group>"; };
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = minibits_wallet/AppDelegate.swift; sourceTree = "<group>"; }; 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = minibits_wallet/AppDelegate.swift; sourceTree = "<group>"; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = minibits_wallet/LaunchScreen.storyboard; sourceTree = "<group>"; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = minibits_wallet/LaunchScreen.storyboard; sourceTree = "<group>"; };
902F38382D92C792005DB998 /* OpenSSL.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:67RAULRX93:Marcin Krzyzanowski"; lastKnownFileType = wrapper.xcframework; name = OpenSSL.xcframework; path = "Pods/OpenSSL-Universal/OpenSSL.xcframework"; sourceTree = "<group>"; }; 902F38382D92C792005DB998 /* OpenSSL.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:67RAULRX93:Marcin Krzyzanowski"; lastKnownFileType = wrapper.xcframework; name = OpenSSL.xcframework; path = "Pods/OpenSSL-Universal/OpenSSL.xcframework"; sourceTree = "<group>"; };
9044DC232D9556F600F918A6 /* minibits_wallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = minibits_wallet.entitlements; path = minibits_wallet/minibits_wallet.entitlements; sourceTree = "<group>"; }; 9044DC232D9556F600F918A6 /* minibits_wallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = minibits_wallet.entitlements; path = minibits_wallet/minibits_wallet.entitlements; sourceTree = "<group>"; };
9044DC242D95937D00F918A6 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "minibits_wallet/GoogleService-Info.plist"; sourceTree = "<group>"; }; 9044DC242D95937D00F918A6 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "minibits_wallet/GoogleService-Info.plist"; sourceTree = "<group>"; };
AB8A46AD84194C2583FF9193 /* nostr.png */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = nostr.png; path = ../assets/icons/nostr.png; sourceTree = "<group>"; }; AB8A46AD84194C2583FF9193 /* nostr.png */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = nostr.png; path = ../assets/icons/nostr.png; sourceTree = "<group>"; };
B3D7A2E5F1C648B9A0234567 /* HammersmithOne-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "HammersmithOne-Regular.ttf"; path = "../assets/fonts/HammersmithOne-Regular.ttf"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@@ -301,7 +301,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = minibits_wallet/minibits_wallet.entitlements; CODE_SIGN_ENTITLEMENTS = minibits_wallet/minibits_wallet.entitlements;
CURRENT_PROJECT_VERSION = 18; CURRENT_PROJECT_VERSION = 19;
DEVELOPMENT_TEAM = GR2ZKMCLAM; DEVELOPMENT_TEAM = GR2ZKMCLAM;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = minibits_wallet/Info.plist; INFOPLIST_FILE = minibits_wallet/Info.plist;
@@ -312,7 +312,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 0.3.4; MARKETING_VERSION = 0.4.0;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
@@ -337,7 +337,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = minibits_wallet/minibits_wallet.entitlements; CODE_SIGN_ENTITLEMENTS = minibits_wallet/minibits_wallet.entitlements;
CURRENT_PROJECT_VERSION = 18; CURRENT_PROJECT_VERSION = 19;
DEVELOPMENT_TEAM = GR2ZKMCLAM; DEVELOPMENT_TEAM = GR2ZKMCLAM;
INFOPLIST_FILE = minibits_wallet/Info.plist; INFOPLIST_FILE = minibits_wallet/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Minibits; INFOPLIST_KEY_CFBundleDisplayName = Minibits;
@@ -347,7 +347,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 0.3.4; MARKETING_VERSION = 0.4.0;
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"$(inherited)", "$(inherited)",
"-ObjC", "-ObjC",
+1 -1
View File
@@ -59,7 +59,7 @@
"react": "19.2.3", "react": "19.2.3",
"react-native": "0.84.0", "react-native": "0.84.0",
"react-native-animated-pagination-dots": "^0.1.73", "react-native-animated-pagination-dots": "^0.1.73",
"react-native-camera-kit": "17.0.1", "react-native-camera-kit": "16.2.1",
"react-native-change-icon": "^3.0.0", "react-native-change-icon": "^3.0.0",
"react-native-exit-app": "^2.0.0", "react-native-exit-app": "^2.0.0",
"react-native-fast-image": "^8.6.3", "react-native-fast-image": "^8.6.3",
+20
View File
@@ -0,0 +1,20 @@
diff --git a/node_modules/react-native/third-party-podspecs/RCT-Folly.podspec b/node_modules/react-native/third-party-podspecs/RCT-Folly.podspec
index 8df5864..0d914be 100644
--- a/node_modules/react-native/third-party-podspecs/RCT-Folly.podspec
+++ b/node_modules/react-native/third-party-podspecs/RCT-Folly.podspec
@@ -72,6 +72,7 @@ Pod::Spec.new do |spec|
'folly/net/*.h',
'folly/net/detail/*.h',
'folly/portability/*.h',
+ 'folly/synchronization/*.h',
'folly/system/*.h',
# workaround for https://github.com/facebook/react-native/issues/14326
@@ -91,6 +92,7 @@ Pod::Spec.new do |spec|
'folly/net/*.h',
'folly/net/detail/*.h',
'folly/portability/*.h',
+ 'folly/synchronization/*.h',
'folly/system/*.h',
spec.libraries = "c++abi" # NOTE Apple-only: Keep c++abi here due to https://github.com/react-native-community/releases/issues/251
spec.pod_target_xcconfig = { "USE_HEADERMAP" => "NO",
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -75,6 +75,6 @@ const $headerContainer: ViewStyle = {
const $headerTitle: TextStyle = { const $headerTitle: TextStyle = {
fontSize: verticalScale(32), fontSize: verticalScale(32),
lineHeight: verticalScale(44), lineHeight: verticalScale(44),
fontFamily: typography.primary?.medium, fontFamily: typography.light,
marginBottom: spacing.extraLarge * 2, marginBottom: spacing.extraLarge * 2,
} }
+1 -1
View File
@@ -160,7 +160,7 @@ const $baseViewStyle: ViewStyle = {
const $baseTextStyle: TextStyle = { const $baseTextStyle: TextStyle = {
fontSize: verticalScale(16), fontSize: verticalScale(16),
lineHeight: verticalScale(20), lineHeight: verticalScale(20),
fontFamily: typography.primary?.light, fontFamily: typography.light,
textAlign: "center", textAlign: "center",
flexShrink: 1, flexShrink: 1,
flexGrow: 0, flexGrow: 0,
+2 -1
View File
@@ -10,7 +10,7 @@ import {
View, View,
ViewStyle, ViewStyle,
} from "react-native" } from "react-native"
import { useThemeColor, spacing } from "../theme" import { useThemeColor, spacing, typography } from "../theme"
import { Icon, IconTypes } from "./Icon" import { Icon, IconTypes } from "./Icon"
import { Text, TextProps } from "./Text" import { Text, TextProps } from "./Text"
@@ -313,6 +313,7 @@ const $subTextStyle: TextStyle = {
flexGrow: 1, flexGrow: 1,
flexShrink: 1, flexShrink: 1,
paddingBottom: spacing.extraSmall, paddingBottom: spacing.extraSmall,
fontFamily: typography.light,
} }
const $touchableStyle: ViewStyle = { const $touchableStyle: ViewStyle = {
+1 -1
View File
@@ -300,7 +300,7 @@ export const MintsScreen = observer(function MintsScreen({ route }: Props) {
return ( return (
<Screen preset='fixed' contentContainerStyle={$screen}> <Screen preset='fixed' contentContainerStyle={$screen}>
<View style={[$headerContainer, {backgroundColor: headerBg}]}> <View style={[$headerContainer, {backgroundColor: headerBg}]}>
<Text preset="heading" tx="manageMints" style={{color: headerTitle}} /> <Text preset="heading" tx="manageMints" style={{color: headerTitle, fontFamily: typography.light}} />
</View> </View>
<ScrollView style={$contentContainer}> <ScrollView style={$contentContainer}>
<Card <Card
+2 -2
View File
@@ -12,7 +12,7 @@ import {
HOT_UPDATER_API_KEY, HOT_UPDATER_API_KEY,
HOT_UPDATER_URL, HOT_UPDATER_URL,
} from '@env' } from '@env'
import {ThemeCode, Themes, colors, spacing, useThemeColor} from '../theme' import {ThemeCode, Themes, colors, spacing, typography, useThemeColor} from '../theme'
import { changeIcon } from 'react-native-change-icon' import { changeIcon } from 'react-native-change-icon'
import {ListItem, Screen, Text, Card, NwcIcon, Button, BottomModal, InfoModal, Icon, Header, AnimatedHeader} from '../components' import {ListItem, Screen, Text, Card, NwcIcon, Button, BottomModal, InfoModal, Icon, Header, AnimatedHeader} from '../components'
import {useStores} from '../models' import {useStores} from '../models'
@@ -303,7 +303,7 @@ export const SettingsScreen = observer(function SettingsScreen({ route }: Props)
} }
const $itemRight = {color: useThemeColor('textDim')} const $itemRight = {color: useThemeColor('textDim'), fontFamily: typography.light} as TextStyle
const colorScheme = useColorScheme() const colorScheme = useColorScheme()
const defaultThemeColor = colorScheme === 'dark' ? Themes[ThemeCode.DARK]?.color : Themes[ThemeCode.LIGHT]?.color const defaultThemeColor = colorScheme === 'dark' ? Themes[ThemeCode.DARK]?.color : Themes[ThemeCode.LIGHT]?.color
+4 -4
View File
@@ -38,7 +38,7 @@ export const CurrencyAmount = observer(function (props: {
return ( return (
<View <View
style={[{ style={[{
paddingHorizontal: spacing.tiny, padding: spacing.tiny,
flexDirection: 'row', flexDirection: 'row',
}, containerStyle || {}]} }, containerStyle || {}]}
> >
@@ -46,8 +46,8 @@ export const CurrencyAmount = observer(function (props: {
style={[$symbol, { style={[$symbol, {
color: symbolColor, color: symbolColor,
fontSize: size && spacing[size] * 0.7 || spacing.small * 0.7, fontSize: size && spacing[size] * 0.7 || spacing.small * 0.7,
fontFamily: typography.primary?.light, fontFamily: typography.light,
//lineHeight: size && spacing[size] * 0.6 || spacing.small * 0.6 //lineHeight: size && spacing[size] * 0.7 || spacing.small * 0.7
}, symbolStyle || {}]} }, symbolStyle || {}]}
text={currencySymbol} text={currencySymbol}
@@ -57,7 +57,7 @@ export const CurrencyAmount = observer(function (props: {
style={[$amount, { style={[$amount, {
color: amountColor, color: amountColor,
fontSize: props.size && spacing[props.size] * 1.3 || spacing.small * 1.3, fontSize: props.size && spacing[props.size] * 1.3 || spacing.small * 1.3,
//lineHeight: size && spacing[size] * 1 || spacing.small * 1, lineHeight: size && spacing[size] * 1.31 || spacing.small * 1.31,
//borderColor: 'red', //borderColor: 'red',
//borderWidth: 1, //borderWidth: 1,
//paddingTop: size && spacing[size] * 0.2 || spacing.small * 0.2, //paddingTop: size && spacing[size] * 0.2 || spacing.small * 0.2,
+1 -1
View File
@@ -47,7 +47,7 @@ export const CurrencySign = function(props: {
style={[{ style={[{
color: textColor, color: textColor,
fontSize: props.size && spacing[props.size] || spacing.small, fontSize: props.size && spacing[props.size] || spacing.small,
fontFamily: typography.primary?.light, fontFamily: typography.light,
lineHeight: props.size && spacing[props.size] * 1.5 || spacing.small * 1.5 lineHeight: props.size && spacing[props.size] * 1.5 || spacing.small * 1.5
}, textStyle || {}]} }, textStyle || {}]}
+2 -2
View File
@@ -942,9 +942,9 @@ const UnitBalanceBlock = observer(function (props: {
mintUnit={unitBalance.unit} mintUnit={unitBalance.unit}
symbolStyle={{display: 'none'}} symbolStyle={{display: 'none'}}
amountStyle={[$unitBalance, {color: balanceColor}]} amountStyle={[$unitBalance, {color: balanceColor}]}
containerStyle={{marginTop: spacing.small}} containerStyle={{marginTop: spacing.large}}
/> />
<View style={{height: verticalScale(40)}}> <View style={{height: verticalScale(25)}}>
{walletStore.exchangeRate {walletStore.exchangeRate
&& (userSettingsStore.exchangeCurrency === getCurrency(unitBalance.unit).code || unitBalance.unit === 'sat') && (userSettingsStore.exchangeCurrency === getCurrency(unitBalance.unit).code || unitBalance.unit === 'sat')
&& ( && (
+30 -26
View File
@@ -30,7 +30,7 @@ import {TxKeyPath, translate} from '../i18n'
import AppError from '../utils/AppError' import AppError from '../utils/AppError'
import { MINIBITS_MINT_URL } from '@env' import { MINIBITS_MINT_URL } from '@env'
import useIsInternetReachable from '../utils/useIsInternetReachable' import useIsInternetReachable from '../utils/useIsInternetReachable'
import { KeyChain } from '../services' import { KeyChain, log, WalletKeys } from '../services'
import { delay } from '../utils/utils' import { delay } from '../utils/utils'
import { StaticScreenProps, useNavigation } from '@react-navigation/native' import { StaticScreenProps, useNavigation } from '@react-navigation/native'
@@ -106,35 +106,39 @@ export const WelcomeScreen = function ({ route }: Props) {
return return
} }
setIsLoading(true) setIsLoading(true)
setStatusMessage(translate('welcomeScreen_creatingKeys'))
// check if keys already exist (if onboarding is repeated or if iOS did not wipe keys?)
let keys = await KeyChain.getWalletKeys()
if(!await KeyChain.hasWalletKeys()) { if(!keys) {
setStatusMessage(translate('welcomeScreen_creatingKeys')) const newKeys = KeyChain.generateWalletKeys()
const keys = KeyChain.generateWalletKeys()
setStatusMessage(translate('welcomeScreen_creatingProfile'))
// First, enroll device for JWT authentication then create profile
try {
await authStore.logout()
} catch (e: any) {}
await authStore.enrollDevice(
keys.NOSTR,
walletProfileStore.device
)
await walletProfileStore.create(
keys.walletId,
keys.SEED.seedHash
)
// save keys after successful profile creation // save keys after successful profile creation
await KeyChain.saveWalletKeys(keys) await KeyChain.saveWalletKeys(newKeys)
walletStore.cleanCachedWalletKeys() walletStore.cleanCachedWalletKeys()
} keys = newKeys
}
setStatusMessage(translate('welcomeScreen_creatingProfile'))
// First, enroll device for JWT authentication then create profile
try {
await authStore.logout()
} catch (e: any) {}
await authStore.enrollDevice(
keys.NOSTR,
walletProfileStore.device
)
// idempotent if keys and profile exists on the server
await walletProfileStore.create(
keys.walletId,
keys.SEED.seedHash
)
if(!mintsStore.mintExists(MINIBITS_MINT_URL)) { if(!mintsStore.mintExists(MINIBITS_MINT_URL)) {
await mintsStore.addMint(MINIBITS_MINT_URL) await mintsStore.addMint(MINIBITS_MINT_URL)
} }
+16 -4
View File
@@ -93,12 +93,24 @@ const initNotifications = async () => {
if(!enabled) return if(!enabled) return
await messaging().registerDeviceForRemoteMessages() await messaging().registerDeviceForRemoteMessages()
if (Platform.OS === 'ios') {
let apnsToken = await messaging().getAPNSToken()
let retries = 0
while (!apnsToken && retries < 5) {
await delay(1000)
apnsToken = await messaging().getAPNSToken()
retries++
}
log.trace(`[initNotifications] APNS token: ${apnsToken}`)
if (!apnsToken) {
log.warn('[initNotifications] No APNS token available (simulator?), skipping FCM token fetch.')
return
}
}
const deviceToken = await messaging().getToken() const deviceToken = await messaging().getToken()
log.trace(`[initNotifications] Device token: ${deviceToken}`) log.trace(`[initNotifications] Device token: ${deviceToken}`)
if(Platform.OS === 'ios') {
const apnsToken = await messaging().getAPNSToken()
log.trace(`[initNotifications] APNS token: ${apnsToken}`)
}
const {walletProfileStore} = rootStoreInstance const {walletProfileStore} = rootStoreInstance
if(deviceToken && deviceToken !== walletProfileStore.device) { if(deviceToken && deviceToken !== walletProfileStore.device) {
+12 -4
View File
@@ -40,19 +40,27 @@ export const typography = {
* The primary font. Used in most places. * The primary font. Used in most places.
*/ */
primary: Platform.select({ primary: Platform.select({
ios: fonts.helveticaNeue, ios: fonts.hammersmithOne,
android: fonts.sansSerif, android: fonts.hammersmithOne,
}), }),
/** /**
* An alternate font used for perhaps titles and stuff. * An alternate font used for perhaps titles and stuff.
*/ */
secondary: Platform.select({ secondary: Platform.select({
ios: fonts.helveticaNeue, ios: fonts.hammersmithOne,
android: fonts.sansSerif, android: fonts.hammersmithOne,
}), }),
/** /**
* Lets get fancy with a monospace font! * Lets get fancy with a monospace font!
*/ */
code: Platform.select({ios: fonts.courier, android: fonts.monospace}), code: Platform.select({ios: fonts.courier, android: fonts.monospace}),
thin: Platform.select({
ios: fonts.helveticaNeue.thin,
android: fonts.sansSerif.thin,
}),
light: Platform.select({
ios: fonts.helveticaNeue.light,
android: fonts.sansSerif.light,
}),
logo: fonts.hammersmithOne, logo: fonts.hammersmithOne,
} }
+5 -5
View File
@@ -14668,7 +14668,7 @@ __metadata:
react: 19.2.3 react: 19.2.3
react-native: 0.84.0 react-native: 0.84.0
react-native-animated-pagination-dots: ^0.1.73 react-native-animated-pagination-dots: ^0.1.73
react-native-camera-kit: 17.0.1 react-native-camera-kit: 16.2.1
react-native-change-icon: ^3.0.0 react-native-change-icon: ^3.0.0
react-native-clean-project: ^4.0.3 react-native-clean-project: ^4.0.3
react-native-dotenv: ^3.4.11 react-native-dotenv: ^3.4.11
@@ -16490,13 +16490,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"react-native-camera-kit@npm:17.0.1": "react-native-camera-kit@npm:16.2.1":
version: 17.0.1 version: 16.2.1
resolution: "react-native-camera-kit@npm:17.0.1" resolution: "react-native-camera-kit@npm:16.2.1"
peerDependencies: peerDependencies:
react: "*" react: "*"
react-native: "*" react-native: "*"
checksum: 40940bbbbd24192f7e8ee4826d77662e7a21b18ad4cfcb77bb860dd75594da33793b3835050de65b2a82f4e0b356e662d6a1ef54e030b34da96975157cff4502 checksum: fda3c197052e26f95cbabfe891c5df249f2764f94e132f5a4956cfd68741b15350b9e746533bf64c3eac648df1759fc99be23e64875deed45c1dc93ccfdac45e
languageName: node languageName: node
linkType: hard linkType: hard