Apple TV support 1: podspec and code changes for commonly used modules (#24329)# Why First of a series of PRs to add Apple TV support for many (but not all) Expo SDK modules. This PR makes A
Apple TV support 1: podspec and code changes for commonly used modules (#24329)# Why First of a series of PRs to add Apple TV support for many (but not all) Expo SDK modules. This PR makes Apple TV able to compile for apps using `[email protected]` and ONLY the following modules: - expo - expo-application - expo-constants - expo-eas-client - expo-file-system - expo-font - expo-json-utils - expo-keep-awake - expo-manifests - expo-modules-core - expo-splash-screen - expo-structured-headers - expo-updates-interface - expo-updates # How - Add tvOS to podspecs - Native code changes wrapped in `#if TARGET_OS_TV` (for Objective C) or `#if os(tvOS)` (for Swift) - Import source for the `ASN1Decoder` Swift framework used by `expo-updates`, as the public podspec for that framework does not yet support tvOS # Test Plan - Manual testing with a template still in development - Existing CI for iOS should pass (nothing should be broken) # Checklist <!-- Please check the appropriate items below if they apply to your diff. This is required for changes to Expo modules. --> - [x] Documentation is up to date to reflect these changes (eg: https://docs.expo.dev and README.md). - [x] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) - [x] This diff will work correctly for `npx expo prebuild` & EAS Build (eg: updated a module plugin).
show more ...
[exupdates][ios] Run swiftlint --fix (#21664)# Why To appease the swiftlint gods. # Test Plan Build. # Checklist <!-- Please check the appropriate items below if they apply to your
[exupdates][ios] Run swiftlint --fix (#21664)# Why To appease the swiftlint gods. # Test Plan Build. # Checklist <!-- Please check the appropriate items below if they apply to your diff. This is required for changes to Expo modules. --> - [ ] Documentation is up to date to reflect these changes (eg: https://docs.expo.dev and README.md). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) - [ ] This diff will work correctly for `expo prebuild` & EAS Build (eg: updated a module plugin).
[exupdates][ios] Decrease access control on classes and remove unnecessary objc attributes (#21597)# Why Now that most things are in swift, we no longer need `objc`/`objcMembers` on a lot of ou
[exupdates][ios] Decrease access control on classes and remove unnecessary objc attributes (#21597)# Why Now that most things are in swift, we no longer need `objc`/`objcMembers` on a lot of our classes (only the bare minimum of what is accessed externally). We also don't need public on a lot of things since they are internal. This change is slightly riskier since there may be people importing classes from this. We also can declare a lot of classes final. This is somewhat risky as well since there may be a subset of the people mentioned above who are extending these. Really, what we should do is sit down and figure out what the external interface for this is. # How Go through all classes and remove unnecessary things. # Test Plan Build Expo Go. # Checklist <!-- Please check the appropriate items below if they apply to your diff. This is required for changes to Expo modules. --> - [ ] Documentation is up to date to reflect these changes (eg: https://docs.expo.dev and README.md). - [ ] Conforms with the [Documentation Writing Style Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md) - [ ] This diff will work correctly for `expo prebuild` & EAS Build (eg: updated a module plugin).
[expo-updates] Add code signing logging (#19589)
[tools] Fix versioning packages with common C++ code (#18988)
[expo-updates] Add log lines for the error scenarios we want to track (#18810)
Persistent logging for expo-updates (#18513)iOS: - PersistentFileLog (class to write logs to a flat file) - New PersistentLogHandler in LogHandler.swift - OptionSet in Logger to use the new hand
Persistent logging for expo-updates (#18513)iOS: - PersistentFileLog (class to write logs to a flat file) - New PersistentLogHandler in LogHandler.swift - OptionSet in Logger to use the new handler (and support for future additions) - Modify UpdatesLogger and UpdatesLogReader to use the above in place of OSLogReader - Modify EXUpdatesModule to implement clearing the log file - Unit tests for the above - Modify EXUpdatesAppController to automatically purge old log entries on start Android: - New Logger and associated classes in expo-modules-core, same structure as iOS - PersistentFileLog (class to write logs to a flat file) - Options class LoggerOptions to use the new handler (and support for future additions) - Modify UpdatesLogger and UpdatesLogReader to use the above in place of Android OS logging - Modify UpdatesModule to implement clearing the log file - Unit tests for the above - Modify UpdatesController to automatically purge old log entries on start
[expo-updates] JS access to client log entries (#18390)Why Once we have client-side logging in expo-updates, we need a way to expose it in JS so that developers can take log information and view
[expo-updates] JS access to client log entries (#18390)Why Once we have client-side logging in expo-updates, we need a way to expose it in JS so that developers can take log information and view it or send it to their own logging services. How New methods have been defined in the `Updates` module, and implemented in both the iOS and Android `Updates` native modules. ```ts /** * Retrieves the most recent expo-updates log entries from the client. * * @param maxAge Sets the max age of retrieved log entries in milliseconds. Default to 3600000 ms (1 hour). * * @return A promise that fulfills with an array of [`UpdatesLogEntry`](#updateslogentry) objects; * * The promise rejects if there is an unexpected error in retrieving the logs. */ Updates.readLogEntriesAsync(maxAge?: number): Promise<UpdatesLogEntry[]>; /** * Clears existing expo-updates logs from the client. * * @return A promise that fulfills if the clear operation was successful. * * The promise rejects if there is an unexpected error in clearing the logs. * */ Updates.clearLogEntriesAsync(): Promise<void>; /** * An object representing a single log entry from expo-updates logging on the client. */ type UpdatesLogEntry = { timestamp: number; // ms since 1/1/1970 UTC message: string; code: UpdatesLogEntryCode; level: string; // fatal, error, warn, info, debug, trace updateId?: string; assetId?: string; stacktrace?: string[]; }; enum UpdatesLogEntryCode { None = 'None', NoUpdatesAvailable = 'NoUpdatesAvailable', UpdateAssetsNotAvailable = 'UpdateAssetsNotAvailable', UpdateServerUnreachable = 'UpdateServerUnreachable', UpdateHasInvalidSignature = 'UpdateHasInvalidSignature', UpdateFailedToLoad = 'UpdateFailedToLoad', AssetsFailedToLoad = 'AssetsFailedToLoad', JSRuntimeError = 'JSRuntimeError' } ``` Test Plan A few log lines have been added on both iOS and Android so that logs will be generated for retrieval, and a sample app was used to verify functionality of the new methods. There are also new Jest tests in `Updates-test.ios.ts`.
[expo-updates][iOS] Logging and log reading (#18284)