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
2 changes: 2 additions & 0 deletions .github/codemention.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ rules:
- patterns: ['docs/**']
mentions: ['amandeepmittal']
- patterns: ['packages/@expo/cli/**']
mentions: ['ubax']
- patterns: ['packages/@expo/codemod/**']
mentions: ['EvanBacon', 'bycedric', 'kitten']
- patterns: ['packages/@expo/config/**']
mentions: ['EvanBacon']
Expand Down
6 changes: 3 additions & 3 deletions apps/bare-expo/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3999,7 +3999,7 @@ SPEC CHECKSUMS:
EXUpdates: a0f980531cbcf45906b2489febd4e11a5895f332
EXUpdatesInterface: 5ab8c3e8018ef533a132b9327af5b2a1926dd299
FBLazyVector: 26fd21c75314e101f280d401e97f27d54f3f7064
hermes-engine: bd2451c187da88af6812697281b68f5f94ec0d01
hermes-engine: 725fd85144e1348879039099a6be950c471a4f2c
libavif: 5f8e715bea24debec477006f21ef9e95432e254d
libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f
libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8
Expand All @@ -4017,7 +4017,7 @@ SPEC CHECKSUMS:
React: 13cf8451582adb1bb324306e1893b91d1cba28c6
React-callinvoker: 91e6a605826b684ad2e623811253b4d0c4196bef
React-Core: 46818de5f211b2a2759ac823b591af8a0a95c2c1
React-Core-prebuilt: e4a674cb7708d81eabfeb2908618d510e1a14481
React-Core-prebuilt: 4016009b4cc1d669b1a2369a5d707cdb39fa12ef
React-CoreModules: a6a37afee48d4a31ab398640b0795462647d5c67
React-cxxreact: 2ec3e2f7a8ae9303460d4ba94cde183ea90d64cd
React-debug: 0d21117b897ce0359c9d2c9dfe952f237476a14a
Expand Down Expand Up @@ -4087,7 +4087,7 @@ SPEC CHECKSUMS:
ReactAppDependencyProvider: 22e2265d86a4e871e5e858f4e7ef1c8d01103680
ReactCodegen: f564776e1b15423920d439de1965d2000433dbd2
ReactCommon: a804bb8d1dcf3ecdec3a77eb8bba19b7863bbbdb
ReactNativeDependencies: 166d44a54c7845b05d943b282be2f6fc683978b5
ReactNativeDependencies: a24dd0e4b4318c05556b4b7bb144738f83775e22
RNCAsyncStorage: 2ad919e88b8bc2cd80e8697ce66d04d006743283
RNCMaskedView: eb2b2e538afa907f05a5848a1a1ac26092e6fec9
RNCPicker: d74667bdfc08ed389a2a277d95b8faf2349290a9
Expand Down
46 changes: 11 additions & 35 deletions apps/expo-go/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ PODS:
- boost
- DoubleConversion
- ExpoModulesCore
- ExpoModulesJSI
- fast_float
- fmt
- glog
Expand Down Expand Up @@ -55,6 +56,7 @@ PODS:
- boost
- DoubleConversion
- ExpoModulesCore
- ExpoModulesJSI
- ExpoModulesTestCore
- fast_float
- fmt
Expand Down Expand Up @@ -83,10 +85,6 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- ExpoAgeRange (0.2.10):
- ExpoModulesCore
- ExpoAppleAuthentication (55.0.8):
- ExpoModulesCore
- ExpoAsset (55.0.7):
- ExpoModulesCore
- ExpoAudio (55.0.8):
Expand Down Expand Up @@ -171,8 +169,6 @@ PODS:
- ExpoModulesCore
- ExpoLinking (55.0.7):
- ExpoModulesCore
- ExpoLivePhoto (55.0.8):
- ExpoModulesCore
- ExpoLocalAuthentication (55.0.8):
- ExpoModulesCore
- ExpoLocalization (55.0.8):
Expand All @@ -190,8 +186,6 @@ PODS:
- ExpoModulesCore
- ExpoModulesTestCore
- React-Core
- ExpoMeshGradient (55.0.8):
- ExpoModulesCore
- ExpoModulesCore (55.0.12):
- boost
- DoubleConversion
Expand Down Expand Up @@ -253,13 +247,11 @@ PODS:
- ReactCommon/turbomodule/core
- SocketRocket
- Yoga
- ExpoModulesJSI (55.0.12):
- hermes-engine
- ExpoModulesJSI (55.0.0):
- React-Core
- React-runtimescheduler
- ReactCommon
- ExpoModulesJSI/Tests (55.0.12):
- hermes-engine
- ExpoModulesJSI/Tests (55.0.0):
- React-Core
- React-runtimescheduler
- ReactCommon
Expand Down Expand Up @@ -4012,8 +4004,6 @@ DEPENDENCIES:
- EXManifests/Tests (from `../../../packages/expo-manifests/ios`)
- Expo (from `../../../packages/expo`)
- Expo/Tests (from `../../../packages/expo`)
- ExpoAgeRange (from `../../../packages/expo-age-range/ios`)
- ExpoAppleAuthentication (from `../../../packages/expo-apple-authentication/ios`)
- ExpoAsset (from `../../../packages/expo-asset/ios`)
- ExpoAudio (from `../../../packages/expo-audio/ios`)
- ExpoBackgroundFetch (from `../../../packages/expo-background-fetch/ios`)
Expand Down Expand Up @@ -4046,19 +4036,17 @@ DEPENDENCIES:
- ExpoKeepAwake (from `../../../packages/expo-keep-awake/ios`)
- ExpoLinearGradient (from `../../../packages/expo-linear-gradient/ios`)
- ExpoLinking (from `../../../packages/expo-linking/ios`)
- ExpoLivePhoto (from `../../../packages/expo-live-photo/ios`)
- ExpoLocalAuthentication (from `../../../packages/expo-local-authentication/ios`)
- ExpoLocalization (from `../../../packages/expo-localization/ios`)
- ExpoLocation (from `../../../packages/expo-location/ios`)
- "ExpoLogBox (from `../../../packages/@expo/log-box`)"
- ExpoMailComposer (from `../../../packages/expo-mail-composer/ios`)
- ExpoMediaLibrary (from `../../../packages/expo-media-library/ios`)
- ExpoMediaLibrary/Tests (from `../../../packages/expo-media-library/ios`)
- ExpoMeshGradient (from `../../../packages/expo-mesh-gradient/ios`)
- ExpoModulesCore (from `../../../packages/expo-modules-core`)
- ExpoModulesCore/Tests (from `../../../packages/expo-modules-core`)
- ExpoModulesJSI (from `../../../packages/expo-modules-core`)
- ExpoModulesJSI/Tests (from `../../../packages/expo-modules-core`)
- ExpoModulesJSI (from `../../../packages/expo-modules-jsi/apple`)
- ExpoModulesJSI/Tests (from `../../../packages/expo-modules-jsi/apple`)
- ExpoModulesTestCore (from `../../../packages/expo-modules-test-core/ios`)
- ExpoModulesWorklets (from `../../../packages/expo-modules-core`)
- ExpoNetwork (from `../../../packages/expo-network/ios`)
Expand Down Expand Up @@ -4259,10 +4247,6 @@ EXTERNAL SOURCES:
:path: "../../../packages/expo-manifests/ios"
Expo:
:path: "../../../packages/expo"
ExpoAgeRange:
:path: "../../../packages/expo-age-range/ios"
ExpoAppleAuthentication:
:path: "../../../packages/expo-apple-authentication/ios"
ExpoAsset:
:path: "../../../packages/expo-asset/ios"
ExpoAudio:
Expand Down Expand Up @@ -4321,8 +4305,6 @@ EXTERNAL SOURCES:
:path: "../../../packages/expo-linear-gradient/ios"
ExpoLinking:
:path: "../../../packages/expo-linking/ios"
ExpoLivePhoto:
:path: "../../../packages/expo-live-photo/ios"
ExpoLocalAuthentication:
:path: "../../../packages/expo-local-authentication/ios"
ExpoLocalization:
Expand All @@ -4335,12 +4317,10 @@ EXTERNAL SOURCES:
:path: "../../../packages/expo-mail-composer/ios"
ExpoMediaLibrary:
:path: "../../../packages/expo-media-library/ios"
ExpoMeshGradient:
:path: "../../../packages/expo-mesh-gradient/ios"
ExpoModulesCore:
:path: "../../../packages/expo-modules-core"
ExpoModulesJSI:
:path: "../../../packages/expo-modules-core"
:path: "../../../packages/expo-modules-jsi/apple"
ExpoModulesTestCore:
:path: "../../../packages/expo-modules-test-core/ios"
ExpoModulesWorklets:
Expand Down Expand Up @@ -4596,9 +4576,7 @@ SPEC CHECKSUMS:
EXConstants: ed3e09607493bb717a7932f0e6786846169692a2
EXJSONUtils: 475f1af3d20fbd99268694df81d096817092aa89
EXManifests: ad24b3a497444eee9e07cc8590b09974ba369050
Expo: afa1e57c45ee9b2b4d2b048df78f1de8849eb507
ExpoAgeRange: 87dd980cb26e47b1108e24c39bcfb88a9ab1030e
ExpoAppleAuthentication: c8096cd35e4e4f88aec34fcbfcd9deae7cea04d3
Expo: be6381e9c1390a5be199a157939b52ef0a461dc0
ExpoAsset: 595cc0587b67afaaedddca79d4c1cf506400cb27
ExpoAudio: 40c883c60ed3bb17ecb3744a00732fb47029535b
ExpoBackgroundFetch: ee315c8d1a54a3f358fc0cedb68e808e95935c57
Expand Down Expand Up @@ -4628,16 +4606,14 @@ SPEC CHECKSUMS:
ExpoKeepAwake: 72475c0e8644ad4dae17742bde04d5a0fe4ad4f9
ExpoLinearGradient: 76405dc81ad27c300347829ed90ba26e7597e846
ExpoLinking: 8505f5b8fa023e82b9d3ac7be1f1241f35b415dd
ExpoLivePhoto: cebdeea82761402e1bb2e0b61bd1622d889c729e
ExpoLocalAuthentication: efe64e98f2686d8bd0bd04300ba5ed360b3d0100
ExpoLocalization: 19a0300c9fe626c884ce65cbbc421f9980bd5636
ExpoLocation: 957da1f900af30208ee9245590dbd50c9d267709
ExpoLogBox: 4a892fbcf6e343ffc1a6b714dcdc04a754d7e42f
ExpoMailComposer: edd4f46a26ea55ff0e3a83ef0192e79f647911c8
ExpoMediaLibrary: 2fbddcb06042f43076cf5e495e8237ec2ab95726
ExpoMeshGradient: 93cf09380e6d86cd7a525da26dfddab2620a8421
ExpoModulesCore: 13bc5b9a2fefacfab477b20600dc57821aa4a200
ExpoModulesJSI: 793687b04cbaa73ee8548bfdbcfba85954d1b2b5
ExpoModulesCore: d39abb48e55d828ac2abd4800e226244bcdb6447
ExpoModulesJSI: 16f789b94db843249981e5f550e050cc321fe554
ExpoModulesTestCore: 62ce59e8c8162b449e65467e0421240256ba6732
ExpoModulesWorklets: 3a4d6451e29822c01c397da92be1f962a0f870fe
ExpoNetwork: 15d026c5c28251e0810849c8c01ebc9bc73ad007
Expand All @@ -4661,7 +4637,7 @@ SPEC CHECKSUMS:
ExpoVideoThumbnails: 2340f0b7f599c9ce6ba49a885f783de919cf4dd3
ExpoWebBrowser: b65b3921741b51c5513e2a369f59c37076987d9b
EXStructuredHeaders: e25ac67c966d3795153dfdb40bfd3b999df18929
EXUpdates: 56ce06b32bea90efb1e4c6b28d73e4cfb472b71b
EXUpdates: 33cea909186babc6befefeed3596a82b6c1d63de
EXUpdatesInterface: 5ab8c3e8018ef533a132b9327af5b2a1926dd299
fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6
FBLazyVector: 4cd65993d9ef677523093deeb7d8710f39fb9ed7
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as Crypto from 'expo-crypto';
import { CryptoDigestAlgorithm, CryptoEncoding } from 'expo-crypto';
import { ScrollView, StyleSheet, Text } from 'react-native';
import { Platform, ScrollView, StyleSheet, Text } from 'react-native';

import FunctionDemo, { FunctionDescription } from '../../components/FunctionDemo';

Expand Down Expand Up @@ -58,19 +58,25 @@ const RANDOM_UUID: FunctionDescription = {
actions: Crypto.randomUUID,
};

const DIGEST_ALGORITHMS = [
CryptoDigestAlgorithm.MD5,
CryptoDigestAlgorithm.SHA1,
CryptoDigestAlgorithm.SHA256,
CryptoDigestAlgorithm.SHA384,
CryptoDigestAlgorithm.SHA512,
];

if (Platform.OS === 'ios') {
DIGEST_ALGORITHMS.push(CryptoDigestAlgorithm.MD2, CryptoDigestAlgorithm.MD4);
}

const DIGEST_STRING: FunctionDescription = {
name: 'digestString',
parameters: [
{
name: 'algorithm',
type: 'string',
values: [
CryptoDigestAlgorithm.MD5,
CryptoDigestAlgorithm.SHA1,
CryptoDigestAlgorithm.SHA256,
CryptoDigestAlgorithm.SHA384,
CryptoDigestAlgorithm.SHA512,
],
values: DIGEST_ALGORITHMS,
},
{
name: 'data',
Expand Down Expand Up @@ -98,15 +104,7 @@ const DIGEST: FunctionDescription = {
{
name: 'algorithm',
type: 'string',
values: [
CryptoDigestAlgorithm.SHA1,
CryptoDigestAlgorithm.SHA256,
CryptoDigestAlgorithm.SHA384,
CryptoDigestAlgorithm.SHA512,
CryptoDigestAlgorithm.MD2,
CryptoDigestAlgorithm.MD5,
CryptoDigestAlgorithm.MD4,
],
values: DIGEST_ALGORITHMS,
},
{
name: 'data',
Expand Down
4 changes: 2 additions & 2 deletions apps/native-component-list/src/screens/SensorScreen.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { type EventSubscription } from 'expo-modules-core';
import * as Sensors from 'expo-sensors';
import React, { useEffect, useState } from 'react';
import { ScrollView, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { Platform, ScrollView, StyleSheet, Text, TouchableOpacity, View } from 'react-native';

const FAST_INTERVAL = 16;
const SLOW_INTERVAL = 1000;
Expand All @@ -21,7 +21,7 @@ export default class SensorScreen extends React.Component {
<BarometerSensor />
<LightSensor />
<DeviceMotionSensor />
<PedometerSensor />
{Platform.OS === 'ios' && <PedometerSensor />}
</ScrollView>
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,7 @@ export default function VideoThumbnailsScreen() {
{image && <Image source={{ uri: image }} style={styles.image} />}
<Text>{image}</Text>
<Button
onPress={() =>
generateThumbnail(
'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4'
)
}
onPress={() => generateThumbnail('https://expo-test-media.com/big_buck_bunny/bbb_720p.mp4')}
title="Check Valid Source"
/>
<Button
Expand Down
48 changes: 48 additions & 0 deletions apps/test-suite/tests/Calendar.js
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,54 @@ export async function test(t) {
t.expect(error instanceof Error).toBe(true);
});

if (Platform.OS === 'ios') {
t.it('deletes a specific instance of a recurring event', async () => {
// Create a recurring event (weekly for 3 occurrences)
const recurringEventId = await createTestEventAsync(calendarId, {
recurrenceRule: {
frequency: Calendar.Frequency.WEEKLY,
occurrence: 3,
},
startDate: new Date(2019, 3, 7), // 7th April 2019 (Sunday)
endDate: new Date(2019, 3, 8),
allDay: false,
});

// Get all instances of the recurring event
const events = await Calendar.getEventsAsync(
[calendarId],
new Date(2019, 3, 1),
new Date(2019, 4, 1)
);
const recurringEvents = events.filter((e) => e.id === recurringEventId);

t.expect(recurringEvents.length).toBe(3);

// Delete the second instance (April 14)
const secondInstanceDate = recurringEvents[1].startDate;
await Calendar.deleteEventAsync(recurringEventId, {
instanceStartDate: secondInstanceDate,
futureEvents: false,
});

// Verify only the second instance was deleted
const eventsAfterDelete = await Calendar.getEventsAsync(
[calendarId],
new Date(2019, 3, 1),
new Date(2019, 4, 1)
);
const remainingEvents = eventsAfterDelete.filter((e) => e.id === recurringEventId);

t.expect(remainingEvents.length).toBe(2);

// Verify the first and third instances still exist
const remainingDates = remainingEvents.map((e) => e.startDate);
t.expect(remainingDates).toContain(recurringEvents[0].startDate);
t.expect(remainingDates).toContain(recurringEvents[2].startDate);
t.expect(remainingDates).not.toContain(secondInstanceDate);
});
}

t.afterAll(async () => {
await Calendar.deleteCalendarAsync(calendarId);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: DateTimePicker
description: A date and time picker compatible with @react-native-community/datetimepicker.
sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui'
packageName: '@expo/ui'
platforms: ['android', 'ios']
platforms: ['android', 'ios', 'expo-go']
---

import APISection from '~/components/plugins/APISection';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ sidebar_title: Overview
description: Components and APIs that serve as drop-in replacements for popular React Native community libraries.
sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui'
packageName: '@expo/ui'
platforms: ['android', 'ios']
platforms: ['android', 'ios', 'expo-go']
---

The following components provide API-compatible replacements for popular React Native community libraries, powered by `@expo/ui` native components (Jetpack Compose on Android and SwiftUI on iOS).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: SegmentedControl
description: A segmented control compatible with @react-native-segmented-control/segmented-control.
sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui'
packageName: '@expo/ui'
platforms: ['android', 'ios', 'web']
platforms: ['android', 'ios', 'web', 'expo-go']
---

import APISection from '~/components/plugins/APISection';
Expand Down
2 changes: 1 addition & 1 deletion docs/pages/versions/unversioned/sdk/ui/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ sidebar_title: Overview
description: A set of components that allow you to build UIs directly with Jetpack Compose and SwiftUI from React.
sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui'
packageName: '@expo/ui'
platforms: ['android', 'ios', 'tvos']
platforms: ['android', 'ios', 'tvos', 'expo-go']
hideTOC: true
---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: AlertDialog
description: A Jetpack Compose AlertDialog component for displaying native alert dialogs.
sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui'
packageName: '@expo/ui'
platforms: ['android']
platforms: ['android', 'expo-go']
---

import APISection from '~/components/plugins/APISection';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: Badge
description: A Jetpack Compose Badge component for displaying status indicators and counts.
sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-ui'
packageName: '@expo/ui'
platforms: ['android']
platforms: ['android', 'expo-go']
---

import APISection from '~/components/plugins/APISection';
Expand Down
Loading
Loading