- Add capacitor-assets.config.json for cross-platform asset generation - Create resources/ directory structure for source assets - Update .gitignore to exclude generated Android assets and resources - Remove 30+ generated files from source control - Add comprehensive asset management documentation - Verify asset generation works with new configuration Assets are now properly managed: source files in version control, generated files excluded, and build process handles platform-specific asset generation automatically.pull/142/head
@ -1,34 +0,0 @@ |
|||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|
||||
xmlns:aapt="http://schemas.android.com/aapt" |
|
||||
android:width="108dp" |
|
||||
android:height="108dp" |
|
||||
android:viewportHeight="108" |
|
||||
android:viewportWidth="108"> |
|
||||
<path |
|
||||
android:fillType="evenOdd" |
|
||||
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z" |
|
||||
android:strokeColor="#00000000" |
|
||||
android:strokeWidth="1"> |
|
||||
<aapt:attr name="android:fillColor"> |
|
||||
<gradient |
|
||||
android:endX="78.5885" |
|
||||
android:endY="90.9159" |
|
||||
android:startX="48.7653" |
|
||||
android:startY="61.0927" |
|
||||
android:type="linear"> |
|
||||
<item |
|
||||
android:color="#44000000" |
|
||||
android:offset="0.0" /> |
|
||||
<item |
|
||||
android:color="#00000000" |
|
||||
android:offset="1.0" /> |
|
||||
</gradient> |
|
||||
</aapt:attr> |
|
||||
</path> |
|
||||
<path |
|
||||
android:fillColor="#FFFFFF" |
|
||||
android:fillType="nonZero" |
|
||||
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z" |
|
||||
android:strokeColor="#00000000" |
|
||||
android:strokeWidth="1" /> |
|
||||
</vector> |
|
@ -1,170 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
|
||||
android:width="108dp" |
|
||||
android:height="108dp" |
|
||||
android:viewportHeight="108" |
|
||||
android:viewportWidth="108"> |
|
||||
<path |
|
||||
android:fillColor="#26A69A" |
|
||||
android:pathData="M0,0h108v108h-108z" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M9,0L9,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M19,0L19,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M29,0L29,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M39,0L39,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M49,0L49,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M59,0L59,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M69,0L69,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M79,0L79,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M89,0L89,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M99,0L99,108" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,9L108,9" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,19L108,19" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,29L108,29" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,39L108,39" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,49L108,49" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,59L108,59" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,69L108,69" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,79L108,79" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,89L108,89" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M0,99L108,99" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M19,29L89,29" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M19,39L89,39" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M19,49L89,49" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M19,59L89,59" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M19,69L89,69" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M19,79L89,79" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M29,19L29,89" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M39,19L39,89" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M49,19L49,89" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M59,19L59,89" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M69,19L69,89" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
<path |
|
||||
android:fillColor="#00000000" |
|
||||
android:pathData="M79,19L79,89" |
|
||||
android:strokeColor="#33FFFFFF" |
|
||||
android:strokeWidth="0.8" /> |
|
||||
</vector> |
|
@ -1,9 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
|
||||
<background> |
|
||||
<inset android:drawable="@mipmap/ic_launcher_background" android:inset="16.7%" /> |
|
||||
</background> |
|
||||
<foreground> |
|
||||
<inset android:drawable="@mipmap/ic_launcher_foreground" android:inset="16.7%" /> |
|
||||
</foreground> |
|
||||
</adaptive-icon> |
|
@ -1,9 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
|
||||
<background> |
|
||||
<inset android:drawable="@mipmap/ic_launcher_background" android:inset="16.7%" /> |
|
||||
</background> |
|
||||
<foreground> |
|
||||
<inset android:drawable="@mipmap/ic_launcher_foreground" android:inset="16.7%" /> |
|
||||
</foreground> |
|
||||
</adaptive-icon> |
|
@ -0,0 +1,36 @@ |
|||||
|
{ |
||||
|
"icon": { |
||||
|
"ios": { |
||||
|
"source": "resources/ios/icon/icon.png", |
||||
|
"target": "ios/App/App/Assets.xcassets/AppIcon.appiconset" |
||||
|
}, |
||||
|
"android": { |
||||
|
"source": "resources/android/icon/icon.png", |
||||
|
"target": "android/app/src/main/res" |
||||
|
}, |
||||
|
"web": { |
||||
|
"source": "resources/web/icon/icon.png", |
||||
|
"target": "public/img/icons" |
||||
|
} |
||||
|
}, |
||||
|
"splash": { |
||||
|
"ios": { |
||||
|
"source": "resources/ios/splash/splash.png", |
||||
|
"target": "ios/App/App/Assets.xcassets/Splash.imageset" |
||||
|
}, |
||||
|
"android": { |
||||
|
"source": "resources/android/splash/splash.png", |
||||
|
"target": "android/app/src/main/res" |
||||
|
} |
||||
|
}, |
||||
|
"splashDark": { |
||||
|
"ios": { |
||||
|
"source": "resources/ios/splash/splash_dark.png", |
||||
|
"target": "ios/App/App/Assets.xcassets/SplashDark.imageset" |
||||
|
}, |
||||
|
"android": { |
||||
|
"source": "resources/android/splash/splash_dark.png", |
||||
|
"target": "android/app/src/main/res" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,79 @@ |
|||||
|
# TimeSafari Resources Directory |
||||
|
|
||||
|
This directory contains source assets for the TimeSafari application across all platforms. |
||||
|
|
||||
|
## Directory Structure |
||||
|
|
||||
|
``` |
||||
|
resources/ |
||||
|
├── android/ |
||||
|
│ ├── icon/ |
||||
|
│ │ └── icon.png |
||||
|
│ └── splash/ |
||||
|
│ ├── splash.png |
||||
|
│ └── splash_dark.png |
||||
|
├── ios/ |
||||
|
│ ├── icon/ |
||||
|
│ │ └── icon.png |
||||
|
│ └── splash/ |
||||
|
│ ├── splash.png |
||||
|
│ └── splash_dark.png |
||||
|
└── web/ |
||||
|
├── icon/ |
||||
|
│ └── icon.png |
||||
|
└── images/ |
||||
|
``` |
||||
|
|
||||
|
## Asset Requirements |
||||
|
|
||||
|
### Icon Requirements |
||||
|
- **Format**: PNG |
||||
|
- **Size**: 1024x1024 pixels minimum |
||||
|
- **Background**: Transparent or solid color |
||||
|
- **Content**: App logo/icon |
||||
|
|
||||
|
### Splash Screen Requirements |
||||
|
- **Format**: PNG |
||||
|
- **Size**: 1242x2688 pixels (iPhone 11 Pro Max size) |
||||
|
- **Background**: Solid color or gradient |
||||
|
- **Content**: App logo centered |
||||
|
|
||||
|
## Asset Generation |
||||
|
|
||||
|
Assets are automatically generated during the build process using `capacitor-assets`: |
||||
|
|
||||
|
```bash |
||||
|
# Generate assets for all platforms |
||||
|
npx capacitor-assets generate |
||||
|
|
||||
|
# Generate assets for specific platform |
||||
|
npx capacitor-assets generate --ios |
||||
|
npx capacitor-assets generate --android |
||||
|
npx capacitor-assets generate --web |
||||
|
``` |
||||
|
|
||||
|
## Configuration |
||||
|
|
||||
|
Asset generation is configured in `capacitor-assets.config.json` at the project root. |
||||
|
|
||||
|
## Version Control |
||||
|
|
||||
|
- **Source assets** (this directory): ✅ In version control |
||||
|
- **Generated assets**: ❌ Not in version control (excluded by `.gitignore`) |
||||
|
|
||||
|
## Updating Assets |
||||
|
|
||||
|
1. Replace the source asset files in the appropriate platform directory |
||||
|
2. Run the build process to regenerate platform-specific assets |
||||
|
3. Test the generated assets on target platforms |
||||
|
|
||||
|
## Build Integration |
||||
|
|
||||
|
Assets are automatically generated as part of the build process: |
||||
|
- `npm run build:android` - Generates Android assets |
||||
|
- `npm run build:ios` - Generates iOS assets |
||||
|
- `npm run build:web` - Generates web assets |
||||
|
|
||||
|
**Author**: Matthew Raymer |
||||
|
**Date**: 2025-01-27 |
||||
|
**Status**: ✅ **ACTIVE** - Asset management system implemented |
After Width: | Height: | Size: 279 KiB |
After Width: | Height: | Size: 1.9 MiB |
After Width: | Height: | Size: 1.9 MiB |
After Width: | Height: | Size: 279 KiB |
After Width: | Height: | Size: 1.9 MiB |
After Width: | Height: | Size: 1.9 MiB |
After Width: | Height: | Size: 279 KiB |