Feature Requests

With Expo, you can write iOS and Android experiences in JavaScript using React Native.
Add Option to Limit Video Duration in Expo ImagePicker for Both Gallery Selection and Recording
Description: Currently, the Expo ImagePicker module offers the videoMaxDuration option to limit the duration of videos recorded using the device's camera. However, there is no built-in functionality to allow users to crop videos to a specified duration after selection or recording. This feature request proposes the enhancement of the ImagePicker module to include:​ In-App Video Cropping Tool: Introduce a cropping interface that activates after a user selects a video from the gallery or records a new one. This tool would enable users to trim the video to a specified maximum duration (e.g., one minute) before proceeding with the upload.​ Flexible Cropping: Allow users to select any segment within the video, up to the maximum allowed duration.​ User-Friendly Interface: Provide an intuitive and responsive UI for precise trimming, ensuring a seamless user experience.​ Consistent Behavior Across Platforms: Ensure that the in-app cropping functionality is uniformly implemented across iOS, Android, and web platforms to maintain a consistent user experience.​ Use Case: In applications where user-generated video content is limited to a specific duration (e.g., one minute), this feature would:​ Enhance User Experience: Allow users to select or record videos of any length and then trim them within the app to meet the duration requirements, eliminating the need for external editing tools.​ Streamline Content Management: Ensure that all uploaded videos adhere to the predefined duration constraints, simplifying content moderation and playback consistency.​ Considerations: Performance Optimization: Implement efficient video processing to minimize delays during the cropping process, ensuring a smooth user experience.​ User Guidance: Provide clear instructions within the cropping interface to assist users in trimming their videos effectively.​ By incorporating this enhancement, the Expo ImagePicker module would offer more robust and flexible video handling capabilities, catering to applications with specific video duration requirements.
0
SSL pinning
All current SSL pinning methods I know of require native code, and it is becoming increasingly necessary for pinned certs on deployed applications. I think this would be an absolutely huge boon that would bring expo's react native approach further into the mainstream. Reading resource: https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning Excerpt for context ///// What Is Pinning? Pinning is the process of associating a host with their expected X509 certificate or public key. Once a certificate or public key is known or seen for a host, the certificate or public key is associated or 'pinned' to the host. If more than one certificate or public key is acceptable, then the program holds a pinset (taking from Jon Larimer and Kenny Root Google I/O talk). In this case, the advertised identity must match one of the elements in the pinset. A host or service's certificate or public key can be added to an application at development time, or it can be added upon first encountering the certificate or public key. The former - adding at development time - is preferred since preloading the certificate or public key out of band usually means the attacker cannot taint the pin. If the certificate or public key is added upon first encounter, you will be using key continuity. Key continuity can fail if the attacker has a privileged position during the first encounter. Pinning leverages knowledge of the pre-existing relationship between the user and an organization or service to help make better security related decisions. Because you already have information on the server or service, you don't need to rely on generalized mechanisms meant to solve the key distribution problem. That is, you don't need to turn to DNS for name/address mappings or CAs for bindings and status. One exception is revocation and it is discussed below in Pinning Gaps. It is also worth mention that Pinning is not Stapling. Stapling sends both the certificate and OCSP responder information in the same request to avoid the additional fetches the client should perform during path validations. When Do You Pin? You should pin anytime you want to be relatively certain of the remote host's identity or when operating in a hostile environment. Since one or both are almost always true, you should probably pin all the time. A perfect case in point: during the two weeks or so of preparation for the presentation and cheat sheet, we've observed three relevant and related failures. First was Nokia/Opera willfully breaking the secure channel; second was DigiCert issuing a code signing certificate for malware; and third was Bit9's loss of its root signing key. The environment is not only hostile, it's toxic. /////
32
EXPO_DEBUG should show the commands being executed when doing an eas build
I am getting an error on the eas build on the prebuild step but the logs do not say anything even with EXPO_DEBUG=true [PREBUILD] - Creating native project directories (./ios and ./android) and updating .gitignore [PREBUILD] [05:41:28] npm exited with non-zero code: 1 [PREBUILD] - Creating native project directories (./ios and ./android) and updating .gitignore [PREBUILD] ✖ Failed to create the native project. [PREBUILD] [05:41:28] You may want to delete the ./ios and/or ./android directories before trying again. [PREBUILD] Error: bash exited with non-zero code: 1 at ChildProcess.completionListener (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/@expo/spawn-async/build/spawnAsync.js:43:23) at Object.onceWrapper (node:events:646:26) at ChildProcess.emit (node:events:526:28) at maybeClose (node:internal/child_process:1092:16) at Socket.<anonymous> (node:internal/child_process:451:11) at Socket.emit (node:events:526:28) at Pipe.<anonymous> (node:net:687:12) ... at spawnAsync (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/@expo/spawn-async/build/spawnAsync.js:8:21) at spawn (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/@expo/turtle-spawn/dist/index.js:17:47) at BuildContext.runExpoCliCommandAsync [as runExpoCliCommand] (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/eas-cli-local-build-plugin/dist/expoCli.js:14:39) at prebuildAsync (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/@expo/build-tools/dist/utils/prebuild.js:14:15) at /Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/@expo/build-tools/dist/builders/ios.js:33:52 at BuildContext.runBuildPhase (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/@expo/build-tools/dist/context.js:48:34) at Object.iosBuilder (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/@expo/build-tools/dist/builders/ios.js:29:23) at async buildIosAsync (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/eas-cli-local-build-plugin/dist/ios.js:49:27) at async buildAsync (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/eas-cli-local-build-plugin/dist/build.js:28:32) at async main (/Users/runner/work/1/.npm/_npx/20011f2a0402515a/node_modules/eas-cli-local-build-plugin/dist/main.js:16:9) [CLEAN_UP_CREDENTIALS] Destroying keychain - /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/turtle-v2-8e90f608-e9b3-40f5-b9a7-1c7a7ab4368a.keychain [CLEAN_UP_CREDENTIALS] Removing provisioning profile
0
Load More