feat(ui): 更新应用图标和启动屏幕为新品牌标识并调整相关配置

更新应用图标、启动屏幕和相关配置以匹配新品牌标识,移除旧的 Sealife 图标文件并替换为新的 icon.icon 资源。同时更新 iOS 配置中的背景任务标识符以符合命名规范。调整统计页面头部 logo 尺寸和字体粗细以优化视觉效果。

- 替换所有平台的应用图标和启动图资源
- 更新 app.json、Info.plist 和各 imageset 配置文件
- 调整 statistics.tsx 中的 logo 样式
- 移除已废弃的腾讯云 COS 文档
This commit is contained in:
richarjiang
2025-09-12 17:07:40 +08:00
parent edac180dd6
commit 4627cb650e
29 changed files with 121 additions and 283 deletions

View File

@@ -4,7 +4,6 @@
"slug": "digital-pilates", "slug": "digital-pilates",
"version": "1.0.5", "version": "1.0.5",
"orientation": "portrait", "orientation": "portrait",
"icon": "./assets/images/Sealife.jpeg",
"scheme": "digitalpilates", "scheme": "digitalpilates",
"userInterfaceStyle": "light", "userInterfaceStyle": "light",
"newArchEnabled": true, "newArchEnabled": true,
@@ -25,33 +24,15 @@
"fetch", "fetch",
"remote-notification" "remote-notification"
] ]
}
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/Sealife.jpeg",
"backgroundColor": "#ffffff"
}, },
"edgeToEdgeEnabled": true, "icon": "./assets/icon.icon"
"package": "com.anonymous.digitalpilates",
"permissions": [
"android.permission.RECEIVE_BOOT_COMPLETED",
"android.permission.VIBRATE",
"android.permission.WAKE_LOCK",
"android.permission.RECORD_AUDIO"
]
},
"web": {
"bundler": "metro",
"output": "static",
"favicon": "./assets/images/Sealife.jpeg"
}, },
"plugins": [ "plugins": [
"expo-router", "expo-router",
[ [
"expo-splash-screen", "expo-splash-screen",
{ {
"image": "./assets/images/Sealife.jpeg", "image": "./assets/icon.icon",
"imageWidth": 40, "imageWidth": 40,
"resizeMode": "contain", "resizeMode": "contain",
"backgroundColor": "#ffffff" "backgroundColor": "#ffffff"
@@ -68,7 +49,7 @@
[ [
"expo-notifications", "expo-notifications",
{ {
"icon": "./assets/images/Sealife.jpeg", "icon": "./assets/icon.icon",
"color": "#ffffff" "color": "#ffffff"
} }
], ],

View File

@@ -470,7 +470,7 @@ export default function ExploreScreen() {
<View style={styles.headerContent}> <View style={styles.headerContent}>
{/* 左边logo */} {/* 左边logo */}
<Image <Image
source={require('@/assets/images/Sealife.jpeg')} source={require('@/assets/icon.icon/Assets/icon-1756312748268.png')}
style={styles.logoImage} style={styles.logoImage}
resizeMode="cover" resizeMode="cover"
/> />
@@ -680,8 +680,8 @@ const styles = StyleSheet.create({
justifyContent: 'space-between', justifyContent: 'space-between',
}, },
logoImage: { logoImage: {
width: 36, width: 28,
height: 36, height: 28,
borderRadius: 20, borderRadius: 20,
}, },
headerTextContainer: { headerTextContainer: {
@@ -690,7 +690,7 @@ const styles = StyleSheet.create({
}, },
headerTitle: { headerTitle: {
fontSize: 16, fontSize: 16,
fontWeight: '500', fontWeight: '700',
color: '#192126', color: '#192126',
}, },
debugButtonsContainer: { debugButtonsContainer: {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -0,0 +1,31 @@
{
"fill": "automatic",
"groups": [
{
"layers": [
{
"blend-mode": "normal",
"glass": true,
"hidden": false,
"image-name": "icon-1756312748268.png",
"name": "icon-1756312748268",
"opacity": 1
}
],
"shadow": {
"kind": "neutral",
"opacity": 0.5
},
"translucency": {
"enabled": true,
"value": 0.5
}
}
],
"supported-platforms": {
"circles": [
"watchOS"
],
"squares": "shared"
}
}

View File

@@ -1,174 +0,0 @@
# 腾讯云 COS 上传集成说明
本文档记录本项目在前端Expo/React Native侧对腾讯云 COS 的接入方式与使用规范,包含配置、接口约定、上传用法、进度/取消/重试、URL 构建、权限与安全、常见问题等。
## 概览
- 依赖:`cos-js-sdk-v5`
- 临时密钥接口:`GET /api/users/cos-token`
- 统一封装:
- 配置:`constants/Cos.ts`
- 上传服务:`services/cos.ts`
- Hook`hooks/useCosUpload.ts`
## 安装与依赖
已在 `package.json` 中添加:
```json
{
"dependencies": {
"cos-js-sdk-v5": "^1.6.0"
}
}
```
## 配置
编辑 `constants/Cos.ts`,填入实际 COS 参数:
```ts
export const COS_BUCKET = 'your-bucket-125xxxxxxx';
export const COS_REGION = 'ap-shanghai';
export const COS_PUBLIC_BASE = 'https://your-bucket-125xxxxxxx.cos.ap-shanghai.myqcloud.com';
export const COS_KEY_PREFIX = 'uploads/';
```
说明:
- COS_PUBLIC_BASE若桶或 CDN 具有公网访问,使用对应域名(建议 HTTPS。若为私有桶可忽略该项前端不能直接拼公开 URL
- `buildCosKey` 会依据日期和随机串生成不重复 Key可通过 `prefix`/`userId` 定制目录。
## 后端接口约定:/api/users/cos-token
- 方法:`GET`
- 鉴权:建议要求登录态,后端根据用户权限签发最小权限临时凭证。
- 响应体示例(关键字段):
```json
{
"credentials": {
"tmpSecretId": "TMPID...",
"tmpSecretKey": "TMPKEY...",
"sessionToken": "SESSION_TOKEN..."
},
"startTime": 1730000000,
"expiredTime": 1730001800
}
```
- 最小权限策略建议(示例,后端侧):
```json
{
"version": "2.0",
"statement": [
{
"action": [
"name/cos:PutObject",
"name/cos:InitiateMultipartUpload",
"name/cos:UploadPart",
"name/cos:CompleteMultipartUpload"
],
"effect": "allow",
"resource": [
"qcs::cos:ap-shanghai:uid/125xxxxxxx:your-bucket-125xxxxxxx/*"
]
}
]
}
```
注意:对上传路径进行前缀限制(如 `uploads/*`)能进一步收敛权限范围。
## 前端用法一Hook推荐
在页面/组件内使用 `useCosUpload`,支持进度、取消与重试。
```tsx
import { useCosUpload } from '@/hooks/useCosUpload';
import * as ImagePicker from 'expo-image-picker';
export default function Uploader() {
const { upload, progress, uploading, cancel } = useCosUpload({ prefix: 'images/', userId: 'uid-123' });
const pickAndUpload = async () => {
const res = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images });
if (res.canceled || !res.assets?.[0]) return;
const asset = res.assets[0];
const result = await upload({ uri: asset.uri, name: asset.fileName, type: asset.mimeType });
console.log('uploaded:', result); // { key, url }
};
return null;
}
```
说明:
- `progress` 范围 0-1`uploading` 指示进行中;可随时 `cancel()`
- 未开启公网访问时,`url` 可能为空(需服务端签名下载)。
## 前端用法二:直接调用服务
`services/cos.ts` 提供基础方法:
```ts
import { uploadWithRetry } from '@/services/cos';
const { key, etag } = await uploadWithRetry({
key: 'uploads/demo.png',
body: blob,
contentType: 'image/png'
});
```
- 进度回调:`onProgress: ({ percent }) => { ... }`
- 取消:传入 `signal: AbortSignal`
- 重试:`maxRetries`/`backoffMs` 配置指数退避
## URL 构建
若为公网可访问场景,使用:
```ts
import { buildPublicUrl } from '@/constants/Cos';
const url = buildPublicUrl(key);
```
若为私有桶,请改走服务端生成临时下载链接或代理下载。
## 大文件与分片上传
当前默认使用 `putObject`。若需大文件/断点续传,建议切换 SDK 的分片接口 `sliceUploadFile`
```ts
const taskId = cos.sliceUploadFile({
Bucket: COS_BUCKET,
Region: COS_REGION,
Key: key,
Body: fileOrBlob,
onProgress(progress) { /* ... */ }
}, (err, data) => { /* ... */ });
```
如需切换,可在 `services/cos.ts` 中将 `putObject` 替换为 `sliceUploadFile`,并保留同样的进度、取消与重试包装。
## CORS 与浏览器(如使用 Web
- COS 控制台需配置 CORS允许来源域名、方法PUT/POST/OPTIONS、请求头`Authorization``x-cos-*` 等)、暴露头。
- 若通过自有域名/网关代理,也需在代理层正确透传 CORS 与签名头。
## 安全与最佳实践
- 永久密钥仅存在服务端,通过 `/api/users/cos-token` 颁发短期凭证。
- 严控临时凭证权限与有效期,并限制上传前缀。
- 前端仅持有短期凭证;错误重试次数受限,避免暴力重放。
## 常见问题排查
- 403/签名失败:确认服务端时间同步、`region/bucket`/`resource` 配置正确;临时密钥未过期。
- CORS 失败:检查 COS 跨域规则;确认需要的请求头(含 `Authorization`)均已放行。
- URL 访问 403私有桶下请改用服务端签名下载或为指定前缀开启公共读谨慎
- MIME/ContentType从 ImagePicker 取 `mimeType`,或按扩展名兜底设置。
## 测试清单
- 小图上传成功且进度递增、可取消。
- 取消后不再继续发片段;重试如期生效。
- 返回的 `key` 能通过 `buildPublicUrl` 拼出可访问地址(公网桶)。
- 临时密钥过期后,能够重新获取并继续上传。
## 变更点速记
- 依赖:`cos-js-sdk-v5`
- 新增:`constants/Cos.ts``services/cos.ts``hooks/useCosUpload.ts`
- 接口:`GET /api/users/cos-token`(返回临时凭证)
---
如需我将某页面接入示例按钮或改造为分片上传,请在需求中指明目标文件与交互期望。

View File

@@ -34,7 +34,6 @@ export function useCosUpload(defaultOptions?: UseCosUploadOptions) {
try { try {
let res: any; let res: any;
if (Platform.OS === 'web') { if (Platform.OS === 'web') {
// Web使用 Blob 走 cos-js-sdk-v5 分支
let body: any = null; let body: any = null;
if (typeof file === 'string') { if (typeof file === 'string') {
// 允许直接传 Base64/DataURL 字符串 // 允许直接传 Base64/DataURL 字符串

View File

@@ -1,14 +1,14 @@
PODS: PODS:
- boost (1.84.0) - boost (1.84.0)
- DoubleConversion (1.1.6) - DoubleConversion (1.1.6)
- EXApplication (7.0.6): - EXApplication (7.0.7):
- ExpoModulesCore - ExpoModulesCore
- EXConstants (18.0.8): - EXConstants (18.0.8):
- ExpoModulesCore - ExpoModulesCore
- EXImageLoader (6.0.0): - EXImageLoader (6.0.0):
- ExpoModulesCore - ExpoModulesCore
- React-Core - React-Core
- EXNotifications (0.32.10): - EXNotifications (0.32.11):
- ExpoModulesCore - ExpoModulesCore
- Expo (54.0.1): - Expo (54.0.1):
- boost - boost
@@ -55,13 +55,13 @@ PODS:
- ZXingObjC/PDF417 - ZXingObjC/PDF417
- ExpoFileSystem (19.0.11): - ExpoFileSystem (19.0.11):
- ExpoModulesCore - ExpoModulesCore
- ExpoFont (14.0.7): - ExpoFont (14.0.8):
- ExpoModulesCore - ExpoModulesCore
- ExpoGlassEffect (0.1.1): - ExpoGlassEffect (0.1.2):
- ExpoModulesCore - ExpoModulesCore
- ExpoHaptics (15.0.6): - ExpoHaptics (15.0.6):
- ExpoModulesCore - ExpoModulesCore
- ExpoHead (6.0.0): - ExpoHead (6.0.1):
- ExpoModulesCore - ExpoModulesCore
- RNScreens - RNScreens
- ExpoImage (3.0.7): - ExpoImage (3.0.7):
@@ -77,7 +77,7 @@ PODS:
- ExpoModulesCore - ExpoModulesCore
- ExpoLinearGradient (15.0.6): - ExpoLinearGradient (15.0.6):
- ExpoModulesCore - ExpoModulesCore
- ExpoLinking (8.0.7): - ExpoLinking (8.0.8):
- ExpoModulesCore - ExpoModulesCore
- ExpoModulesCore (3.0.15): - ExpoModulesCore (3.0.15):
- boost - boost
@@ -3419,10 +3419,10 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
EXApplication: f5219af375d2bcff2596ac5c586d3b62c587c0d8 EXApplication: 296622817d459f46b6c5fe8691f4aac44d2b79e7
EXConstants: 7e4654405af367ff908c863fe77a8a22d60bd37d EXConstants: 7e4654405af367ff908c863fe77a8a22d60bd37d
EXImageLoader: 189e3476581efe3ad4d1d3fb4735b7179eb26f05 EXImageLoader: 189e3476581efe3ad4d1d3fb4735b7179eb26f05
EXNotifications: bfcda0c49edd979747e1e50340de7bb0e9729ef5 EXNotifications: 7a2975f4e282b827a0bc78bb1d232650cb569bbd
Expo: 449ff2805d3673354f533a360e001f556f0b2009 Expo: 449ff2805d3673354f533a360e001f556f0b2009
ExpoAppleAuthentication: 9eb1ec7213ee9c9797951df89975136db89bf8ac ExpoAppleAuthentication: 9eb1ec7213ee9c9797951df89975136db89bf8ac
ExpoAsset: 84810d6fed8179f04d4a7a4a6b37028bbd726e26 ExpoAsset: 84810d6fed8179f04d4a7a4a6b37028bbd726e26
@@ -3430,15 +3430,15 @@ SPEC CHECKSUMS:
ExpoBlur: 9bde58a4de1d24a02575d0e24290f2026ce8dc3a ExpoBlur: 9bde58a4de1d24a02575d0e24290f2026ce8dc3a
ExpoCamera: ae1d6691b05b753261a845536d2b19a9788a8750 ExpoCamera: ae1d6691b05b753261a845536d2b19a9788a8750
ExpoFileSystem: 7b4a4f6c67a738e826fd816139bac9d098b3b084 ExpoFileSystem: 7b4a4f6c67a738e826fd816139bac9d098b3b084
ExpoFont: 74a14c605637c2d32337a2f542065408a8ca3454 ExpoFont: 86ceec09ffed1c99cfee36ceb79ba149074901b5
ExpoGlassEffect: 9aa58a46e8abe720971f2b588bc1e10d58728ba8 ExpoGlassEffect: 07bafe3374d7d24299582627d040a6c7e403c3f3
ExpoHaptics: e0912a9cf05ba958eefdc595f1990b8f89aa1f3f ExpoHaptics: e0912a9cf05ba958eefdc595f1990b8f89aa1f3f
ExpoHead: 275ef6292a9ab92669fd9554f19e1b1bbb5aa986 ExpoHead: 9539b6c97faa57b2deb0414205e084b0a2bc15f1
ExpoImage: 18d9836939f8e271364a5a2a3566f099ea73b2e4 ExpoImage: 18d9836939f8e271364a5a2a3566f099ea73b2e4
ExpoImagePicker: 66195293e95879fa5ee3eb1319f10b5de0ffccbb ExpoImagePicker: 66195293e95879fa5ee3eb1319f10b5de0ffccbb
ExpoKeepAwake: eba81dfb5728be8c46e382b9314dfa14f40d8764 ExpoKeepAwake: eba81dfb5728be8c46e382b9314dfa14f40d8764
ExpoLinearGradient: 74d67832cdb0d2ef91f718d50dd82b273ce2812e ExpoLinearGradient: 74d67832cdb0d2ef91f718d50dd82b273ce2812e
ExpoLinking: dadcc1205351c1108b7c5bab4b7891e744fc8c89 ExpoLinking: f051f28e50ea9269ff539317c166adec81d9342d
ExpoModulesCore: 5d150c790fb491ab10fe431fb794014af841258f ExpoModulesCore: 5d150c790fb491ab10fe431fb794014af841258f
ExpoQuickActions: fdbda7f5874aed3dd2b1d891ec00ab3300dc7541 ExpoQuickActions: fdbda7f5874aed3dd2b1d891ec00ab3300dc7541
ExpoSplashScreen: 1665809071bd907c6fdbfd9c09583ee4d51b41d4 ExpoSplashScreen: 1665809071bd907c6fdbfd9c09583ee4d51b41d4

View File

@@ -1,7 +1,7 @@
{ {
"images" : [ "images" : [
{ {
"filename" : "Sealife.jpeg", "filename" : "icon-1756312748268.png",
"idiom" : "universal", "idiom" : "universal",
"platform" : "ios", "platform" : "ios",
"size" : "1024x1024" "size" : "1024x1024"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -1,17 +1,17 @@
{ {
"images" : [ "images" : [
{ {
"filename" : "SealifeSplash.jpeg", "filename" : "icon-1756312748268.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "1x" "scale" : "1x"
}, },
{ {
"filename" : "SealifeSplash 1.jpeg", "filename" : "icon-1756312748268 1.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "2x" "scale" : "2x"
}, },
{ {
"filename" : "SealifeSplash 2.jpeg", "filename" : "icon-1756312748268 2.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "3x" "scale" : "3x"
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -1,17 +1,17 @@
{ {
"images" : [ "images" : [
{ {
"filename" : "Sealife.jpeg", "filename" : "icon-1756312748268.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "1x" "scale" : "1x"
}, },
{ {
"filename" : "未命名项目 (5).jpeg", "filename" : "icon-1756312748268 1.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "2x" "scale" : "2x"
}, },
{ {
"filename" : "未命名项目 (5) 1.jpeg", "filename" : "icon-1756312748268 2.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "3x" "scale" : "3x"
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 744 KiB

View File

@@ -4,7 +4,8 @@
<dict> <dict>
<key>BGTaskSchedulerPermittedIdentifiers</key> <key>BGTaskSchedulerPermittedIdentifiers</key>
<array> <array>
<string>backgroundtask</string> <string>com.anonymous.digitalpilates.task</string>
<string>com.expo.modules.backgroundtask.processing</string>
</array> </array>
<key>CADisableMinimumFrameDurationOnPhone</key> <key>CADisableMinimumFrameDurationOnPhone</key>
<true/> <true/>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="24127" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
<device id="retina6_9" orientation="portrait" appearance="light"/> <device id="retina6_9" orientation="portrait" appearance="light"/>
<dependencies> <dependencies>
<deployment identifier="iOS"/> <deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="24063"/>
<capability name="Named colors" minToolsVersion="9.0"/> <capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -39,7 +39,7 @@
</scene> </scene>
</scenes> </scenes>
<resources> <resources>
<image name="SplashScreenLogo" width="682.66668701171875" height="682.66668701171875"/> <image name="SplashScreenLogo" width="341.33334350585938" height="341.33334350585938"/>
<namedColor name="SplashScreenBackground"> <namedColor name="SplashScreenBackground">
<color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor> </namedColor>

100
package-lock.json generated
View File

@@ -15,10 +15,10 @@
"@react-native-masked-view/masked-view": "^0.3.2", "@react-native-masked-view/masked-view": "^0.3.2",
"@react-native-picker/picker": "^2.11.1", "@react-native-picker/picker": "^2.11.1",
"@react-native-voice/voice": "^3.2.4", "@react-native-voice/voice": "^3.2.4",
"@react-navigation/bottom-tabs": "^7.3.10", "@react-navigation/bottom-tabs": "^7.4.7",
"@react-navigation/elements": "^2.3.8", "@react-navigation/elements": "^2.6.4",
"@react-navigation/native": "^7.1.6", "@react-navigation/native": "^7.1.17",
"@reduxjs/toolkit": "^2.8.2", "@reduxjs/toolkit": "^2.9.0",
"@sentry/react-native": "~6.20.0", "@sentry/react-native": "~6.20.0",
"@types/lodash": "^4.17.20", "@types/lodash": "^4.17.20",
"cos-js-sdk-v5": "^1.6.0", "cos-js-sdk-v5": "^1.6.0",
@@ -29,16 +29,16 @@
"expo-blur": "~15.0.6", "expo-blur": "~15.0.6",
"expo-camera": "~17.0.7", "expo-camera": "~17.0.7",
"expo-constants": "~18.0.8", "expo-constants": "~18.0.8",
"expo-font": "~14.0.7", "expo-font": "~14.0.8",
"expo-glass-effect": "^0.1.1", "expo-glass-effect": "^0.1.2",
"expo-haptics": "~15.0.6", "expo-haptics": "~15.0.6",
"expo-image": "~3.0.7", "expo-image": "~3.0.7",
"expo-image-picker": "~17.0.7", "expo-image-picker": "~17.0.7",
"expo-linear-gradient": "~15.0.6", "expo-linear-gradient": "~15.0.6",
"expo-linking": "~8.0.7", "expo-linking": "~8.0.7",
"expo-notifications": "~0.32.10", "expo-notifications": "~0.32.11",
"expo-quick-actions": "^5.0.0", "expo-quick-actions": "^5.0.0",
"expo-router": "~6.0.0", "expo-router": "~6.0.1",
"expo-splash-screen": "~31.0.8", "expo-splash-screen": "~31.0.8",
"expo-status-bar": "~3.0.7", "expo-status-bar": "~3.0.7",
"expo-symbols": "~1.0.6", "expo-symbols": "~1.0.6",
@@ -2252,9 +2252,9 @@
} }
}, },
"node_modules/@expo/schema-utils": { "node_modules/@expo/schema-utils": {
"version": "0.1.6", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/@expo/schema-utils/-/schema-utils-0.1.6.tgz", "resolved": "https://mirrors.tencent.com/npm/@expo/schema-utils/-/schema-utils-0.1.7.tgz",
"integrity": "sha512-arKkNlPZYD0uUxGPbSwV/6v4owmZcUNrXk9Vq/o+p2Eqt1DM9jIjbXwrqlmvkTsPkjUtNLDGB0EDiosVJ4OvDg==", "integrity": "sha512-jWHoSuwRb5ZczjahrychMJ3GWZu54jK9ulNdh1d4OzAEq672K9E5yOlnlBsfIHWHGzUAT+0CL7Yt1INiXTz68g==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@expo/sdk-runtime-versions": { "node_modules/@expo/sdk-runtime-versions": {
@@ -2264,9 +2264,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@expo/server": { "node_modules/@expo/server": {
"version": "0.7.3", "version": "0.7.4",
"resolved": "https://registry.npmjs.org/@expo/server/-/server-0.7.3.tgz", "resolved": "https://mirrors.tencent.com/npm/@expo/server/-/server-0.7.4.tgz",
"integrity": "sha512-lmlpJrjC0PLspPIF8ZzAalpbCxqbsqLRzIpolT3gZP48H6039BOlb1hAWTVgZvXmWkpvlYbt0PYG9o9GZxkQuw==", "integrity": "sha512-8bfRzL7h1Qgrmf3auR71sPAcAuxnmNkRJs+8enL8vZi2+hihevLhrayDu7P0A/XGEq7wySAGvBBFfIB00Et/AA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"abort-controller": "^3.0.0", "abort-controller": "^3.0.0",
@@ -3893,12 +3893,12 @@
} }
}, },
"node_modules/@react-navigation/bottom-tabs": { "node_modules/@react-navigation/bottom-tabs": {
"version": "7.4.5", "version": "7.4.7",
"resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-7.4.5.tgz", "resolved": "https://mirrors.tencent.com/npm/@react-navigation/bottom-tabs/-/bottom-tabs-7.4.7.tgz",
"integrity": "sha512-Kt2/E9O7G4Kvx/NYrMVCSk+RN5auZcLgfBeCf5/vH6/weCJOxBy15Wav+3HiehZLNcQ40FJ3PeNHF0CR04idSw==", "integrity": "sha512-SQ4KuYV9yr3SV/thefpLWhAD0CU2CrBMG1l0w/QKl3GYuGWdN5OQmdQdmaPZGtsjjVOb+N9Qo7Tf6210P4TlpA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@react-navigation/elements": "^2.6.2", "@react-navigation/elements": "^2.6.4",
"color": "^4.2.3" "color": "^4.2.3"
}, },
"peerDependencies": { "peerDependencies": {
@@ -3928,9 +3928,9 @@
} }
}, },
"node_modules/@react-navigation/elements": { "node_modules/@react-navigation/elements": {
"version": "2.6.2", "version": "2.6.4",
"resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-2.6.2.tgz", "resolved": "https://mirrors.tencent.com/npm/@react-navigation/elements/-/elements-2.6.4.tgz",
"integrity": "sha512-F3xySYWSmzIKSRUlisRSvqE6wzafPJwlgP8hZmf5cnctIu+gJUYWX4e2Za4dQZCELg7luFQjj1ohPWPqm/ziUQ==", "integrity": "sha512-O3X9vWXOEhAO56zkQS7KaDzL8BvjlwZ0LGSteKpt1/k6w6HONG+2Wkblrb057iKmehTkEkQMzMLkXiuLmN5x9Q==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"color": "^4.2.3", "color": "^4.2.3",
@@ -3994,9 +3994,9 @@
} }
}, },
"node_modules/@reduxjs/toolkit": { "node_modules/@reduxjs/toolkit": {
"version": "2.8.2", "version": "2.9.0",
"resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.8.2.tgz", "resolved": "https://mirrors.tencent.com/npm/@reduxjs/toolkit/-/toolkit-2.9.0.tgz",
"integrity": "sha512-MYlOhQ0sLdw4ud48FoC5w0dH9VfWQjtCjreKwYTT3l+r427qYC5Y8PihNutepr8XrNaBUDQo9khWUwQxZaqt5A==", "integrity": "sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@standard-schema/spec": "^1.0.0", "@standard-schema/spec": "^1.0.0",
@@ -7777,9 +7777,9 @@
} }
}, },
"node_modules/expo-application": { "node_modules/expo-application": {
"version": "7.0.6", "version": "7.0.7",
"resolved": "https://registry.npmjs.org/expo-application/-/expo-application-7.0.6.tgz", "resolved": "https://mirrors.tencent.com/npm/expo-application/-/expo-application-7.0.7.tgz",
"integrity": "sha512-OrRQ1vDi1v+nF0bfGe0nWU/cZVN0EFysJ7Sj5ko8GuL8t6GidqhN3j7hw16hINZuWcEEfa0wAUXmNT1LMgLWog==", "integrity": "sha512-Jt1/qqnoDUbZ+bK91+dHaZ1vrPDtRBOltRa681EeedkisqguuEeUx4UHqwVyDK2oHWsK6lO3ojetoA4h8OmNcg==",
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"expo": "*" "expo": "*"
@@ -7898,9 +7898,9 @@
} }
}, },
"node_modules/expo-font": { "node_modules/expo-font": {
"version": "14.0.7", "version": "14.0.8",
"resolved": "https://registry.npmjs.org/expo-font/-/expo-font-14.0.7.tgz", "resolved": "https://mirrors.tencent.com/npm/expo-font/-/expo-font-14.0.8.tgz",
"integrity": "sha512-jW6aEHUwn+SKizE1iJsaC0nLFb7ipy2wqUrceg+k7KyVZW74DRyDVjuJYzyuJE8BJutulsiYBzvx6K0axboULA==", "integrity": "sha512-bTUHaJWRZ7ywP8dg3f+wfOwv6RwMV3mWT2CDUIhsK70GjNGlCtiWOCoHsA5Od/esPaVxqc37cCBvQGQRFStRlA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"fontfaceobserver": "^2.1.0" "fontfaceobserver": "^2.1.0"
@@ -7912,9 +7912,9 @@
} }
}, },
"node_modules/expo-glass-effect": { "node_modules/expo-glass-effect": {
"version": "0.1.1", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/expo-glass-effect/-/expo-glass-effect-0.1.1.tgz", "resolved": "https://mirrors.tencent.com/npm/expo-glass-effect/-/expo-glass-effect-0.1.2.tgz",
"integrity": "sha512-81xXB2CVjgyg7gaq/fDVAOu/j43uTP0F6bI0sah81v3/guA+YfSM3QjyfegIVQPUkX/9AP2zkU9ihkHEZQv7pg==", "integrity": "sha512-25PZqYhRZ6EfJkhTzxthxvcXM5g32vn+GEzKc4+JJ7Qyk52Csxzw5y68Ge2opGF3y3JJ6VENXM07FnTgpuoK2w==",
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"expo": "*", "expo": "*",
@@ -7991,12 +7991,12 @@
} }
}, },
"node_modules/expo-linking": { "node_modules/expo-linking": {
"version": "8.0.7", "version": "8.0.8",
"resolved": "https://registry.npmjs.org/expo-linking/-/expo-linking-8.0.7.tgz", "resolved": "https://mirrors.tencent.com/npm/expo-linking/-/expo-linking-8.0.8.tgz",
"integrity": "sha512-DCPEDg522ryJp752kcajGR8kWgQfKMc/YbjzApb4Uzm2kJNW+0JXrIwsLPTl/mn9XxcOkGrE81B1L5EwQZKHkw==", "integrity": "sha512-MyeMcbFDKhXh4sDD1EHwd0uxFQNAc6VCrwBkNvvvufUsTYFq3glTA9Y8a+x78CPpjNqwNAamu74yIaIz7IEJyg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"expo-constants": "~18.0.7", "expo-constants": "~18.0.8",
"invariant": "^2.2.4" "invariant": "^2.2.4"
}, },
"peerDependencies": { "peerDependencies": {
@@ -8035,18 +8035,18 @@
} }
}, },
"node_modules/expo-notifications": { "node_modules/expo-notifications": {
"version": "0.32.10", "version": "0.32.11",
"resolved": "https://registry.npmjs.org/expo-notifications/-/expo-notifications-0.32.10.tgz", "resolved": "https://mirrors.tencent.com/npm/expo-notifications/-/expo-notifications-0.32.11.tgz",
"integrity": "sha512-5o0ifzTk6rLp+SMLZZcCrR5e6WseFG9gnF6rsomLegFR549pQQfWYiKz9KNic0Rnm81xYH4csgAxhND3E1aB0g==", "integrity": "sha512-4rLWC9Q4B7aQywXn9cKAlNY4p00CYKLJ23qZ0Pp/whkX0NxmI4MwJ20YhreV08gjHTTTWHpYU7jqYWpsjtPIxA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@expo/image-utils": "^0.8.6", "@expo/image-utils": "^0.8.7",
"@ide/backoff": "^1.0.0", "@ide/backoff": "^1.0.0",
"abort-controller": "^3.0.0", "abort-controller": "^3.0.0",
"assert": "^2.0.0", "assert": "^2.0.0",
"badgin": "^1.1.5", "badgin": "^1.1.5",
"expo-application": "~7.0.6", "expo-application": "~7.0.7",
"expo-constants": "~18.0.7" "expo-constants": "~18.0.8"
}, },
"peerDependencies": { "peerDependencies": {
"expo": "*", "expo": "*",
@@ -8099,14 +8099,14 @@
} }
}, },
"node_modules/expo-router": { "node_modules/expo-router": {
"version": "6.0.0", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/expo-router/-/expo-router-6.0.0.tgz", "resolved": "https://mirrors.tencent.com/npm/expo-router/-/expo-router-6.0.1.tgz",
"integrity": "sha512-4/SI/4f4wOmbxyQ3TH2nvRdbmlggQx2/WO5mWSuSsazUUerjc8h3lo9NkKyEZRrkeq09jYcfQQhbbl8yCnW/Gg==", "integrity": "sha512-5wXkWyNMqUbjCWH0PRkOM0P6UsgLVdgchDkiLz5FY7HfU00ToBcxij965bqtlaATBgoaIo4DuLu6EgxewrKJ8Q==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@expo/metro-runtime": "6.1.1", "@expo/metro-runtime": "6.1.1",
"@expo/schema-utils": "^0.1.6", "@expo/schema-utils": "^0.1.7",
"@expo/server": "^0.7.3", "@expo/server": "^0.7.4",
"@radix-ui/react-slot": "1.2.0", "@radix-ui/react-slot": "1.2.0",
"@radix-ui/react-tabs": "^1.1.12", "@radix-ui/react-tabs": "^1.1.12",
"@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/bottom-tabs": "^7.4.0",
@@ -8132,8 +8132,8 @@
"@react-navigation/drawer": "^7.5.0", "@react-navigation/drawer": "^7.5.0",
"@testing-library/react-native": ">= 12.0.0", "@testing-library/react-native": ">= 12.0.0",
"expo": "*", "expo": "*",
"expo-constants": "^18.0.7", "expo-constants": "^18.0.8",
"expo-linking": "^8.0.7", "expo-linking": "^8.0.8",
"react": "*", "react": "*",
"react-dom": "*", "react-dom": "*",
"react-native": "*", "react-native": "*",

View File

@@ -12,17 +12,17 @@
"lint": "expo lint" "lint": "expo lint"
}, },
"dependencies": { "dependencies": {
"@expo/ui": "~0.2.0-beta.0", "@expo/ui": "~0.2.0-beta.1",
"@expo/vector-icons": "^15.0.2", "@expo/vector-icons": "^15.0.2",
"@react-native-async-storage/async-storage": "^2.2.0", "@react-native-async-storage/async-storage": "^2.2.0",
"@react-native-community/datetimepicker": "^8.4.4", "@react-native-community/datetimepicker": "^8.4.4",
"@react-native-masked-view/masked-view": "^0.3.2", "@react-native-masked-view/masked-view": "^0.3.2",
"@react-native-picker/picker": "^2.11.1", "@react-native-picker/picker": "^2.11.1",
"@react-native-voice/voice": "^3.2.4", "@react-native-voice/voice": "^3.2.4",
"@react-navigation/bottom-tabs": "^7.3.10", "@react-navigation/bottom-tabs": "^7.4.7",
"@react-navigation/elements": "^2.3.8", "@react-navigation/elements": "^2.6.4",
"@react-navigation/native": "^7.1.6", "@react-navigation/native": "^7.1.17",
"@reduxjs/toolkit": "^2.8.2", "@reduxjs/toolkit": "^2.9.0",
"@sentry/react-native": "~6.20.0", "@sentry/react-native": "~6.20.0",
"@types/lodash": "^4.17.20", "@types/lodash": "^4.17.20",
"cos-js-sdk-v5": "^1.6.0", "cos-js-sdk-v5": "^1.6.0",
@@ -33,14 +33,14 @@
"expo-blur": "~15.0.6", "expo-blur": "~15.0.6",
"expo-camera": "~17.0.7", "expo-camera": "~17.0.7",
"expo-constants": "~18.0.8", "expo-constants": "~18.0.8",
"expo-font": "~14.0.7", "expo-font": "~14.0.8",
"expo-glass-effect": "^0.1.1", "expo-glass-effect": "^0.1.2",
"expo-haptics": "~15.0.6", "expo-haptics": "~15.0.6",
"expo-image": "~3.0.7", "expo-image": "~3.0.7",
"expo-image-picker": "~17.0.7", "expo-image-picker": "~17.0.7",
"expo-linear-gradient": "~15.0.6", "expo-linear-gradient": "~15.0.6",
"expo-linking": "~8.0.7", "expo-linking": "~8.0.7",
"expo-notifications": "~0.32.10", "expo-notifications": "~0.32.11",
"expo-quick-actions": "^5.0.0", "expo-quick-actions": "^5.0.0",
"expo-router": "~6.0.1", "expo-router": "~6.0.1",
"expo-splash-screen": "~31.0.8", "expo-splash-screen": "~31.0.8",

View File

@@ -6,7 +6,7 @@ import * as BackgroundTask from 'expo-background-task';
import * as TaskManager from 'expo-task-manager'; import * as TaskManager from 'expo-task-manager';
import { TaskManagerTaskBody } from 'expo-task-manager'; import { TaskManagerTaskBody } from 'expo-task-manager';
export const BACKGROUND_TASK_IDENTIFIER = 'backgroundtask'; export const BACKGROUND_TASK_IDENTIFIER = 'com.anonymous.digitalpilates.task';