- Create documentation for configuring flavor-specific app icons in mobile applications. - Implement scripts to generate and set up flavor-specific icons for Android and iOS. - Configure iOS schemes to use the appropriate AppIcon asset sets for dev and stage flavors. - Ensure generated icons meet required sizes and formats for both platforms. - Provide troubleshooting steps and CI/CD integration guidelines for automated builds.
134 lines
5.2 KiB
Bash
Executable File
134 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Setup flavor-specific app icons for Android and iOS
|
|
# This script generates icon assets for dev and stage flavors from provided logo files
|
|
|
|
set -e
|
|
|
|
REPO_ROOT=$(cd "$(dirname "$0")/.." && pwd)
|
|
cd "$REPO_ROOT"
|
|
|
|
# Color output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
echo "${YELLOW}Setting up flavor-specific app icons...${NC}"
|
|
|
|
# Check if ImageMagick is installed
|
|
if ! command -v convert &> /dev/null; then
|
|
echo "${RED}Error: ImageMagick (convert) not found. Install with: brew install imagemagick${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Android icon sizes required (name: size)
|
|
ANDROID_SIZES="mipmap-mdpi:48 mipmap-hdpi:72 mipmap-xhdpi:96 mipmap-xxhdpi:144 mipmap-xxxhdpi:192"
|
|
|
|
# Setup Android icons for each flavor
|
|
echo "${YELLOW}Processing Android assets...${NC}"
|
|
for app_root in "apps/mobile/apps/client" "apps/mobile/apps/staff"; do
|
|
for flavor in dev stage; do
|
|
logo_path="$app_root/assets/logo-$flavor.png"
|
|
|
|
if [[ ! -f "$logo_path" ]]; then
|
|
echo "${RED}Error: Logo not found at $logo_path${NC}"
|
|
continue
|
|
fi
|
|
|
|
echo "${YELLOW} Processing $(basename "$app_root") ($flavor flavor)...${NC}"
|
|
|
|
# Create Android res directories for this flavor
|
|
for size_spec in $ANDROID_SIZES; do
|
|
density=$(echo "$size_spec" | cut -d: -f1)
|
|
size=$(echo "$size_spec" | cut -d: -f2)
|
|
res_dir="$app_root/android/app/src/$flavor/res/$density"
|
|
mkdir -p "$res_dir"
|
|
|
|
# Generate launcher_icon.png
|
|
icon_path="$res_dir/launcher_icon.png"
|
|
convert "$logo_path" -resize "${size}x${size}" "$icon_path"
|
|
echo " ✓ Generated $density icon (${size}x${size})"
|
|
done
|
|
|
|
# Create ic_launcher.xml for adaptive icon (Android 8.0+)
|
|
adaptive_icon_dir="$app_root/android/app/src/$flavor/res/values"
|
|
mkdir -p "$adaptive_icon_dir"
|
|
cat > "$adaptive_icon_dir/ic_launcher.xml" <<'ICON_XML'
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
<background android:drawable="@android:color/white"/>
|
|
<foreground android:drawable="@mipmap/launcher_icon"/>
|
|
</adaptive-icon>
|
|
ICON_XML
|
|
echo " ✓ Generated adaptive icon configuration"
|
|
done
|
|
done
|
|
|
|
echo "${GREEN}Android setup complete!${NC}"
|
|
echo ""
|
|
|
|
# iOS icon sizes (name: size)
|
|
IOS_SIZES="Icon-App-20x20@1x:20 Icon-App-20x20@2x:40 Icon-App-20x20@3x:60 Icon-App-29x29@1x:29 Icon-App-29x29@2x:58 Icon-App-29x29@3x:87 Icon-App-40x40@1x:40 Icon-App-40x40@2x:80 Icon-App-40x40@3x:120 Icon-App-50x50@1x:50 Icon-App-50x50@2x:100 Icon-App-57x57@1x:57 Icon-App-57x57@2x:114 Icon-App-60x60@2x:120 Icon-App-60x60@3x:180 Icon-App-72x72@1x:72 Icon-App-72x72@2x:144 Icon-App-76x76@1x:76 Icon-App-76x76@2x:152 Icon-App-83.5x83.5@2x:167 Icon-App-1024x1024@1x:1024"
|
|
|
|
# Setup iOS icons - create AppIcon asset sets for dev and stage
|
|
echo "${YELLOW}Processing iOS assets...${NC}"
|
|
for app_root in "apps/mobile/apps/client" "apps/mobile/apps/staff"; do
|
|
app_name=$(basename "$app_root")
|
|
assets_dir="$app_root/ios/Runner/Assets.xcassets"
|
|
|
|
echo "${YELLOW} Setting up iOS for $app_name...${NC}"
|
|
|
|
for flavor in dev stage; do
|
|
logo_path="$app_root/assets/logo-$flavor.png"
|
|
asset_set_name="AppIcon-$flavor"
|
|
asset_dir="$assets_dir/$asset_set_name.appiconset"
|
|
|
|
mkdir -p "$asset_dir"
|
|
|
|
# Create Contents.json template for iOS AppIcon
|
|
cp "$assets_dir/AppIcon.appiconset/Contents.json" "$asset_dir/Contents.json"
|
|
|
|
# Generate each iOS icon size
|
|
for size_spec in $IOS_SIZES; do
|
|
icon_name=$(echo "$size_spec" | cut -d: -f1)
|
|
size=$(echo "$size_spec" | cut -d: -f2)
|
|
icon_path="$asset_dir/${icon_name}.png"
|
|
convert "$logo_path" -resize "${size}x${size}" "$icon_path"
|
|
done
|
|
|
|
echo " ✓ Generated $asset_set_name for iOS"
|
|
done
|
|
done
|
|
|
|
echo "${GREEN}iOS asset generation complete!${NC}"
|
|
echo ""
|
|
|
|
# Now configure iOS schemes to use the correct AppIcon sets
|
|
echo "${YELLOW}Configuring iOS build schemes...${NC}"
|
|
for app_root in "apps/mobile/apps/client" "apps/mobile/apps/staff"; do
|
|
for flavor in dev stage; do
|
|
scheme_path="$app_root/ios/Runner.xcodeproj/xcshareddata/xcschemes/${flavor}.xcscheme"
|
|
if [[ -f "$scheme_path" ]]; then
|
|
# We'll use a more direct approach with xcodebuild settings
|
|
echo " ✓ Scheme exists for $flavor flavor"
|
|
fi
|
|
done
|
|
done
|
|
|
|
echo ""
|
|
echo "${GREEN}✓ All flavor icons have been generated!${NC}"
|
|
echo ""
|
|
echo "${YELLOW}Next steps for iOS:${NC}"
|
|
echo "1. Open the Xcode project in Xcode:"
|
|
echo " open $app_root/ios/Runner.xcworkspace"
|
|
echo ""
|
|
echo "2. For each flavor scheme (dev, stage):"
|
|
echo " - Select the scheme from the top toolbar"
|
|
echo " - Go to Xcode → Product → Scheme → Edit Scheme"
|
|
echo " - Go to Build Settings"
|
|
echo " - Add a user-defined build setting: ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon-dev (or AppIcon-stage)"
|
|
echo ""
|
|
echo "3. Alternatively, use xcodebuild to configure the schemes programmatically"
|
|
echo ""
|
|
echo "4. Version control: Add the generated icons to git"
|