| #
51e273e0 |
| 14-Sep-2023 |
Tomasz Sapeta <[email protected]> |
[file-system][iOS] Migrate to Expo Modules API (#23943)
|
| #
0502d1f9 |
| 18-May-2023 |
Tomasz Sapeta <[email protected]> |
Remove Amplitude from Expo Go (#22523)
|
| #
5db43c74 |
| 05-Sep-2021 |
Will Schurman <[email protected]> |
[expo-manifests] Remove reliance upon stableLegacyId/originalFullName (#14265)
|
| #
50661f5c |
| 30-Aug-2021 |
Will Schurman <[email protected]> |
[expo-manifests] Rename RawManifest -> Manifest (#14194)
|
| #
706a476d |
| 26-Aug-2021 |
Will Schurman <[email protected]> |
[expo-updates] Factor out raw manifests into their own package (#14183)
|
| #
efd75dec |
| 16-Aug-2021 |
Tomasz Sapeta <[email protected]> |
[ios] Migrate all remaining native code
|
| #
f7824892 |
| 09-Jul-2021 |
Will Schurman <[email protected]> |
[ios] Remove unnecessary constants binding argument from EXScopedNotificationCategoriesModule (#13546)
|
| #
45f3e3b4 |
| 09-Jul-2021 |
Will Schurman <[email protected]> |
[ios] Pass manifest into EXScopedFirebaseCore (#13543)
|
| #
2615299d |
| 08-Jul-2021 |
Will Schurman <[email protected]> |
[ios] Pass manifest into EXScopedFacebook (#13531)
|
| #
167fd314 |
| 30-Jun-2021 |
Will Schurman <[email protected]> |
[ios] Use stable manifest ID where applicable (#13280)
|
| #
d044143f |
| 04-Mar-2021 |
Charlie Cruzan <[email protected]> |
[notifications][ios] Scope notification identifiers (#12055)
* create method to override request IDs
* scope notification request IDs in Expo Go
* add method to Presentation header file
* r
[notifications][ios] Scope notification identifiers (#12055)
* create method to override request IDs
* scope notification request IDs in Expo Go
* add method to Presentation header file
* rename scoping methods to be more general (not just category IDs are scoped)
* only scope emitterModule, handlerModule, and presentationModule in Expo Go
show more ...
|
| #
2f85d796 |
| 18-Feb-2021 |
Łukasz Kosmaty <[email protected]> |
[expo-permissions] Deprecate permissions package (#11955)
# Why
Deprecated expo-permissions for removal in SDK 42.
# How
- Moved permissions service to the `react-native-adapter`
- Fixed
[expo-permissions] Deprecate permissions package (#11955)
# Why
Deprecated expo-permissions for removal in SDK 42.
# How
- Moved permissions service to the `react-native-adapter`
- Fixed usage of `Manifest.permission.ACCESS_BACKGROUND_LOCATION`
# Test Plan
- NCL
- Expo Go ✅
- bare expo ✅
- Checks if the permissions are scoped correctly ✅
show more ...
|
| #
6bd9d7d4 |
| 11-Feb-2021 |
Charlie Cruzan <[email protected]> |
[secure-store] prevent losing data after ejecting (#11309)
* create ScopedSecureStore on Android
* bring in ScopedSecureStore class in standalones and client
* [ios] no longer scope key values
[secure-store] prevent losing data after ejecting (#11309)
* create ScopedSecureStore on Android
* bring in ScopedSecureStore class in standalones and client
* [ios] no longer scope key values in standalones
* [android] only pass baseContext in standalone environment
* Apply suggestions from code review
Co-authored-by: Bartłomiej Bukowski <[email protected]>
* add changelog entry
* fix SDK version numbers
* use constantsBinding.appOwnership instead of EX_DETACHED
Co-authored-by: Bartłomiej Bukowski <[email protected]>
show more ...
|
| #
7228d0b7 |
| 09-Feb-2021 |
Charlie Cruzan <[email protected]> |
[notifications][ios] Only scope notification categories in Expo Go (#11651)
* create service extension
* Scope category ID in client if provided
* ONLY scope categories in Expo Go
* remove
[notifications][ios] Only scope notification categories in Expo Go (#11651)
* create service extension
* Scope category ID in client if provided
* ONLY scope categories in Expo Go
* remove serviceExtensionTimeWillExpire method
* modify service entension's CFBundleDisplayName
* use '/' as delimiter to match Android
* rename CFBundleDisplayName
* escape experience ID and category ID
* remove extraneous code
* remove NSRegularExpression code
* [notifications][ios] migrate notification categories (#11789)
* extract category creation logic to separate method
* migrate '-' delimiter to '/' in Expo Go, and migrate scoped to unscoped in standalones
* escape experienceId
* extract migration logic to it's own class
* escape user-provided category ID in Expo Go
* only used EXScopedNotificationSchedulerModule in Expo Go
* move all scoping and escaping logic to EXScopedNotificationsUtils
* use EXScopedNotificationsUtils in NotificationServiceExtension
* search for substring, not regex
* move migrations from constructor to static method; only use EXScopedNotificationCategoriesModule in Expo Go
* replace replaceAllCategoryIdPrefixesMatching with renameCategoryIdentifiersWithPrefix:withBlock
* dont serialize category to create a new one; use UNNotification API directly
* use backslash escaping instead of URL encoding
* add todo to remove in SDK 47
* add back comment
* rename some vars, fix indent
* only escape & unescape forward slash
* use '//' as delimiter
* use '/' as delimiter, use regex
* move legacy scope-checking logic to EXScopedNotificationsUtils
* only replace legacy scope if anchored to beginning of string
* add changelog entry
* Update ios/Exponent/Versioned/Core/UniversalModules/EXNotifications/EXScopedNotificationsUtils.m
Co-authored-by: James Ide <[email protected]>
Co-authored-by: James Ide <[email protected]>
show more ...
|
| #
dc898499 |
| 10-Dec-2020 |
James Ide <[email protected]> |
[ios] Expo Client -> Expo Go (#10847)
The name "Expo Client" implies that it's the single way to develop Expo app. In the future, it will no longer be as ubiquitous nor the main way to develop. To h
[ios] Expo Client -> Expo Go (#10847)
The name "Expo Client" implies that it's the single way to develop Expo app. In the future, it will no longer be as ubiquitous nor the main way to develop. To head off confusion with default development clients, this commit renames the app store development client known as "Expo Client" to "Expo Go".
"Expo Go" is the name for the App Store and Play Store development clients that are published under the Expo team's accounts and currently have support for multiple SDK versions. Expo Go is the fastest way to get started. But we've seen billion-dollar companies use the managed workflow for production apps, so names like "Expo Lite" or "Expo Start" wrongly communicate that the app is just for demos or getting started. "Expo Go" implies it's a good way to get started and also not the entire workflow, but also a workflow that can hold its own.
In this commit I focused just on iOS (native). Android (native) and Home need to come later. I also changed "experience" to "project" in a few places to start cleaning up our terminology.
Tested by running the app and verifying it shows up as "Expo Go" on the home screen in a simulator.
show more ...
|
| #
98629a0c |
| 23-Nov-2020 |
Stanisław Chmiela <[email protected]> |
[expo-notifications] Add autoreregistration device push token to Expo servers (#10908)
Please consult the pull request for full description and history of this commit.
|
| #
42300cfb |
| 19-Nov-2020 |
Stanisław Chmiela <[email protected]> |
[ios] Migrate installation identifier to non-backed-up storage (#11019)
# Why
- iOS companion for https://github.com/expo/expo/pull/11005.
- https://github.com/expo/expo/pull/11019/commits/1e22e
[ios] Migrate installation identifier to non-backed-up storage (#11019)
# Why
- iOS companion for https://github.com/expo/expo/pull/11005.
- https://github.com/expo/expo/pull/11019/commits/1e22e08195b1b4c49650f8243eeb89b5f938b9a5 fixes https://github.com/expo/expo/issues/11008#issuecomment-726370187 ensuring future versioned `EXInstallationIdProvider`s use the common installation ID
# How
Implemented https://github.com/expo/expo/pull/10261#issuecomment-725396140.
- As in https://github.com/expo/expo/pull/11005, the migration code is present in ~3~2 places:
- ~in `ExpoKit` for managed apps relying on legacy notifications~
- in `expo-constants` for bare workflow apps and for managed workflow apps (`EXKernel` now uses `expo-constants` directly to fetch installation ID)
- in `expo-notifications` for bare workflow apps that for some reason do not get UUID migrated by `expo-constants` (eg. because they do not have `expo-constants` installed or have installed in older version).
- To expose common, migrated `deviceInstallUUID` to versioned `expo-constants` code I've added a simple kernel service plugged into already versioned `EXConstantsBinding`s.
# Test Plan
I have verified (previously) that:
- `Constants.installationId` from running Expo client on `master` is the same as `.installationId` returned when running Expo client on this branch
- `expo-notifications`'s installation ID from running Expo client on `master` is the same as `installationId` returned when running Expo client on this branch
- removing and reinstalling Expo client **does not** generate a different installationId (as we know keychain isn't removed!)
- if we fetch an invalid UUID from the Keychain, new UUID is generated
- I experienced an app freeze once on `__ulock_wait`, when waiting for return from `SecItemCopyMatching` which isn't a common issue and were only a few reports online of
# Test approach #2
Test scenarios for installation identifiers:
- **on an experience running on SDK39 when Expo client upgrades**
- SDK39 `EXConstantsService` used `NSUserDefaults.EXDeviceInstallUUIDKey` which is now cleared by migration. Patched `EXConstantsService` uses `EXDeviceInstallUUIDManager` kernel service which provides it with the "common" ID, migrated from the `NSUserDefaults.EXDeviceInstallUUIDKey`, so the value doesn't change. ✅
- SDK39 `EXInstallationIdProvider` used `NSUserDefaults.ABI39_0_0EXDeviceInstallUUIDKey` which is not cleared by any migration. **Identifier keeps being backed-up** but it doesn't change. ⚠️
- **when an experience using SDK39 upgrades to SDK40 in Expo client**
- SDK39 `EXConstantsService` used `NSUserDefaults.EXDeviceInstallUUIDKey` which got migrated to keychain. SDK40 `EXConstantsService` uses the same keychain entry as the migrator, so they're using the same value. ✅
- SDK39 `EXInstallationIdProvider` used `NSUserDefaults.ABI39_0_0EXDeviceInstallUUIDKey` while SDK40 uses common device UUID the sources are obviously different. Token changes. ❌ This is a bug introduced with `expo-notifications` Expo client integration, we can't do anything about it apart from fixing it in SDK40, IDs for old SDKs are already created and will be used in corresponding SDKs and if we didn't do anything about it in SDK40, the ID per experience would change nonetheless, so let's change it this time for the last time.
- when standalone app using SDK39 upgrades to SDK40
- Unversioned SDK39 `EXConstantsService` used `NSUserDefaults.EXDeviceInstallUUIDKey` which gets migrated to keychain, unversioned SDK40 `EXConstantsService` uses the same keychain entry as common UUID, no changes. ✅
- Unversioned SDK39 `EXInstallationIdProvider` used `NSUserDefaults.EXDeviceInstallUUIDKey` which gets migrated to keychain, unversioned SDK40 `EXInstallationIdProvider` uses the same keychain entry as common UUID, no changes. ✅
- when an SDK39 project ejects to bare
- SDK39 `EXConstantsService` used `NSUserDefaults.EXDeviceInstallUUIDKey`, the same which is used in bare, ✅
- SDK39 `EXInstallationIdProvider` used `NSUserDefaults.EXDeviceInstallUUIDKey` in standalone apps, but `NSUserDefaults.ABI39_0_0EXDeviceInstallUUIDKey` in Expo client. Token changes on developers' devices. ⚠️
- when an SDK40 project ejects to bare
- SDK40 `EXConstantsService` used `EXDeviceInstallUUIDKey` keychain entry, the same which is used in bare, ✅
- SDK40 `EXInstallationIdProvider` used `EXDeviceInstallUUIDKey` keychain entry, the same which is used in bare (`EXDeviceInstallUUIDKey`), ✅
- when a bare project upgrades `expo-notifications` or `expo-constants`
- both projects have migrators that move `EXDeviceInstallUUIDKey` value from `NSUserDefaults` to keychain, token doesn't change. ✅
show more ...
|
| #
40b2cdcb |
| 14-Aug-2020 |
Eric Samelson <[email protected]> |
[android][ios] add full infrastructure and implementation for UpdatesBinding (#9694)
# Why
This PR adds the complete infrastructure for allowing the new expo-updates exported JS module to work as
[android][ios] add full infrastructure and implementation for UpdatesBinding (#9694)
# Why
This PR adds the complete infrastructure for allowing the new expo-updates exported JS module to work as a scoped module in the managed workflow codebase and communicate with the `Kernel` classes.
# How
For iOS, I followed the pattern that was used in other scoped modules like Sensors. EXUpdatesBinding is a scoped module that is given access to a pair of kernel services, each of which have access to the AppLoader (and therefore expo-updates state) through the EXKernelAppRecord. All of the properties are just threaded through.
For Android, there were fewer steps to thread through but we weren't keeping a reference to the AppLoader anywhere. I added a simple map in the Kernel for this, which the scoped UpdatesBinding has access to through the KernelProvider.
Finally, since the `Updates.expo.ts` polyfill is no longer needed for the unversioned managed workflow, I removed this code from expo-updates.
# Test Plan
Backport these changes to SDK 38 and add a versioned SDK 38 copy of the expo-updates module, and switch EXKernelAppRecord/Kernel to use the new ExpoUpdatesAppLoader so expo-updates is used.
I launched a test published app created by installing expo-updates and then manually deleting the `build/Updates.expo.*` files from node_modules. All the exported functions from expo-updates worked and assets were resolved to the copies on disk downloaded by expo-updates
show more ...
|
| #
e61ddc0c |
| 11-Aug-2020 |
Stanisław Chmiela <[email protected]> |
[ios] Extract filesystem directories generation to app manager (#9676)
# Why
When TurboModules are enabled we'll need to have access to `documentDirectory` from within instance scope of `EXVersio
[ios] Extract filesystem directories generation to app manager (#9676)
# Why
When TurboModules are enabled we'll need to have access to `documentDirectory` from within instance scope of `EXVersionManager` to be able to create `RCTAsyncLocalStorage` on demand. Right now we're fetching the directory from an instance of `EXFileSystem`. Moving it higher up makes sense not only for this purpose, but also it fits well logically — the manager knows where the app should store files, not the module.
# How
Moved the generation of `documentDirectory` and `cachesDirectory` from `EXScopedFileSystemModule` to `EXReactAppManager`. Added the directories to `NSDictionary *params` passed to `EXVersionManager` (and then to `EXScopedModuleRegistryAdapter`). Moved the initialization logic from scoped module to adapter (whether the module should be created with custom directories or with default directories depends now on whether the directory paths have been provided, which still depends on the same `appOwnership == "expo"` condition.
# Test Plan
Expo Client ran. I've also verified with native debugging that Home gets the scoped directories.
show more ...
|
| #
92e817a0 |
| 01-Aug-2020 |
Eric Samelson <[email protected]> |
[ios] add EXAppLoaderExpoUpdates and stub EXUpdatesBinding
|
| #
f6562485 |
| 28-Jul-2020 |
Charlie Cruzan <[email protected]> |
[expo-notifications] feat: add notification categories (interactive notifications) (#9015)
* ios implementation
* add getCategoriesAsync method
* change type and method names based on architec
[expo-notifications] feat: add notification categories (interactive notifications) (#9015)
* ios implementation
* add getCategoriesAsync method
* change type and method names based on architecture proposal
* add android boilerplate code
* Correct typescript layer according to architecture proposal
* first pass at tests
* return category after creating it, and clean up parsing code
* get iOS tests passing
* [ios] add remaining native options functionality
* finalize tests for iOS
* beginning of android implementation
* [android] implement action button feature
* fix remote notification category handling
* support 'options' argument for notification action
* make some changes to follow new additions to architecture proposal
* [android] add functionality for actions that don't foreground the app
* serialize options so they are returned in an object
* change doNotOpenInForeground to opensAppToForeground
* [android] text reply actions functionality
* [android] pass along user text response with notification
* clean up categoryAwareBuilder
* rebase master, re-'yarn build'
* cleanup iOS
* [android] fix test suite tests
* docs and changelog
* fix typescript typo and rebuild
* update readme
* reformat java code
* rename some java variables
* address iOS feedback
* address remaining pieces of android feedback
* fix client build
* docs, readme, and changelog updates
* improve tests, test feedback
* extract interface, create .native and .web files, and the rest of TS feedback
* optimize all java imports
* [ios] add scoped notification categories
* [ios] remove scope prefix from serialized notification in client
* [ios] left this out of previous commit
* serialize category identifer on android
* [android] scope notification categories in android expo client
* fix spelling mistake
* [expo client] run pod install
* Apply suggestions from code review
Co-authored-by: Łukasz Kosmaty <[email protected]>
* add andraid NonNull handling
* [ios] scope notification serializer
* Apply suggestions from code review
fix name of category prefix remover method; spacing fixes
Co-authored-by: Łukasz Kosmaty <[email protected]>
* fix reversed emitted events on iOS, and re- yarn build
* fix iOS client build
* rebuild JS
Co-authored-by: Łukasz Kosmaty <[email protected]>
show more ...
|
| #
bfb365de |
| 22-May-2020 |
Łukasz Kosmaty <[email protected]> |
[expo-notification][ios] Add ScopedNotificationPresentationModule (#8386)
* [expo-notification][ios] Add ScopedNotificationPresentationModule
* [expo-notification] Pass to block only experienceId
|
| #
0f9680e4 |
| 22-May-2020 |
Łukasz Kosmaty <[email protected]> |
[expo-notification][ios] Add ScopedSchedulerModule (#8361)
* [expo-notification][ios] Add ScopedSchedulerModule
* [expo-notifications] Apply requested changes
* [expo-notifications] Remove _No
[expo-notification][ios] Add ScopedSchedulerModule (#8361)
* [expo-notification][ios] Add ScopedSchedulerModule
* [expo-notifications] Apply requested changes
* [expo-notifications] Remove _Nonnull attribute
* [expo-notifications] Apply requested changes
show more ...
|
| #
44bbe92d |
| 18-May-2020 |
Łukasz Kosmaty <[email protected]> |
[expo-notifications] Add scoped notifications handler (#8268)
* [expo-notifications][ios] Add EXScopedNotificationsHandlerModule
* [expo-notifications][android] Add ScopedNotificationsHandler
[expo-notifications] Add scoped notifications handler (#8268)
* [expo-notifications][ios] Add EXScopedNotificationsHandlerModule
* [expo-notifications][android] Add ScopedNotificationsHandler
* [expo-notification] Fix utils class
* [expo-notifications] Apply requested changes
show more ...
|
| #
e62fb1d4 |
| 18-May-2020 |
Łukasz Kosmaty <[email protected]> |
[expo-notifications] Add scoped event emitter (#8265)
* [expo-notifications][ios] Add scoped emitter
* [expo-notifications][android] Add scoped emitter
* [expo-notifications] Rewrite scoped lo
[expo-notifications] Add scoped event emitter (#8265)
* [expo-notifications][ios] Add scoped emitter
* [expo-notifications][android] Add scoped emitter
* [expo-notifications] Rewrite scoped logic
* [expo-notifications] Move ScopedNotificationScheduler to different PR
* [expo-notifications] Apply requested changes
* [expo-notification] Allow unscoped notification
show more ...
|