Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
TextInput, View, Pressable, useWindowDimensions,
} from 'react-native';
import {AccessibilityInfo, ActionSheetIOS, ActivityIndicator, BackHandler, FlatList, Alert, Animated, Easing, Keyboard, KeyboardAvoidingView, PanResponder, Share, Switch, ToastAndroid} from 'react-native';
import type {TextInputInstance, ViewInstance} from 'react-native';
import {WebView} from 'react-native-webview';
import Slider from '@react-native-community/slider';
import * as Battery from 'expo-battery';
Expand Down Expand Up @@ -682,7 +683,7 @@ function FeedScreen() {
</View>
) : done ? (
<Text testID="feedEnd" style={s.note}>End of feed</Text>
) : null
) : undefined
}
/>
</View>
Expand Down Expand Up @@ -1099,7 +1100,7 @@ function GestureScreen() {
function DragTarget() {
const [info, setInfo] = useState('no drag yet');
const drop = useRef({top: 0, bottom: 0});
const dropView = useRef<View>(null);
const dropView = useRef<ViewInstance>(null);
const st = useRef({t0: 0, first: 0, last: 0, moves: 0, realMoves: 0, px: 0, py: 0});

const pan = useRef(
Expand Down Expand Up @@ -2075,7 +2076,7 @@ function StorageScreen() {
f.create();
}
const n = count + 1;
f.write(JSON.stringify({count: n}));
f.writeSync(JSON.stringify({count: n}));
setCount(n);
setPresent(true);
} catch (e) {
Expand Down Expand Up @@ -2953,7 +2954,7 @@ function OtpScreen() {
const [attempts, setAttempts] = useState(0);
const [outcome, setOutcome] = useState('no code sent');
const [showCode, setShowCode] = useState(false);
const refs = useRef<(TextInput | null)[]>([]);
const refs = useRef<(TextInputInstance | null)[]>([]);

useEffect(() => {
const t = setInterval(() => setNow(Date.now()), 1000);
Expand Down Expand Up @@ -3108,7 +3109,7 @@ function LoginScreen({onLogin}: {onLogin: (username: string) => void}) {
const [touched, setTouched] = useState({user: false, pass: false});
const [formErr, setFormErr] = useState('');
const [busy, setBusy] = useState(false);
const passRef = useRef<TextInput>(null);
const passRef = useRef<TextInputInstance>(null);

const userProblem = usernameProblem(user);
const passProblem = passwordProblem(pass);
Expand Down
16 changes: 8 additions & 8 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ screens.

## Expo has changed

This is Expo SDK 57. Read the versioned docs at
https://docs.expo.dev/versions/v57.0.0/ before writing code; APIs and config
This is Expo SDK 58. Read the versioned docs at
https://docs.expo.dev/versions/v58.0.0/ before writing code; APIs and config
keys from older SDKs are often wrong here.

## Commands
Expand Down Expand Up @@ -79,12 +79,12 @@ in the Mobium repository.
native behavior through `app.json` and Expo config plugins instead.
- **iOS 27 requires the scene life cycle.** An app built with the iOS 27 SDK
that creates its window in the app delegate traps at launch on iOS 27
(`_UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption`), and
Expo SDK 57's template still does, so a fresh prebuild crashes on a phone
running it. `plugins/withSceneLifecycle.js` hands the window to Expo's
`ExpoAppSceneDelegate` and names it in the scene manifest; keep it, and
run `expo prebuild --clean` after changing it, since a plain prebuild
keeps an `AppDelegate.swift` that is already there.
(`_UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption`). Expo SDK
57's template still did, and `plugins/withSceneLifecycle.js` moved the
window to the scene delegate; since SDK 58 prebuild generates
`SceneDelegate.swift` and the scene manifest itself, and the plugin is
gone. Run `expo prebuild --clean` after an SDK upgrade, since a plain
prebuild keeps an `AppDelegate.swift` that is already there.
- **The app must stay signable with a free Apple ID**, which a personal team
cannot do for Push Notifications. `plugins/withoutPushEntitlement.js` removes
the `aps-environment` entitlement `expo-notifications` adds, and it must be
Expand Down
4 changes: 2 additions & 2 deletions app.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@
"faceIDPermission": "MobiumApp asks for Face ID so a test can sign in with it; nothing is stored."
}
],
"./plugins/withSceneLifecycle",
"./plugins/withNetworkSecurity",
"./plugins/withoutPushEntitlement",
"expo-notifications"
"expo-notifications",
"expo-status-bar"
]
}
}
Loading
Loading