diff --git a/cspell.json b/cspell.json index 6af9292819d8..5c94b41921aa 100644 --- a/cspell.json +++ b/cspell.json @@ -4,6 +4,7 @@ "--longpress", "Accelo", "achreimburse", + "actool", "adbd", "ADDCOMMENT", "Addendums", diff --git a/desktop/Assets-adhoc.car b/desktop/Assets-adhoc.car deleted file mode 100644 index 66d9b724bbd5..000000000000 Binary files a/desktop/Assets-adhoc.car and /dev/null differ diff --git a/desktop/Assets-dev.car b/desktop/Assets-dev.car deleted file mode 100644 index 1235f545af0d..000000000000 Binary files a/desktop/Assets-dev.car and /dev/null differ diff --git a/desktop/Assets.car b/desktop/Assets.car index ea367e9d4fd6..09cd7ab7c445 100644 Binary files a/desktop/Assets.car and b/desktop/Assets.car differ diff --git a/desktop/AssetsAdhoc.car b/desktop/AssetsAdhoc.car new file mode 100644 index 000000000000..d77c24deff62 Binary files /dev/null and b/desktop/AssetsAdhoc.car differ diff --git a/desktop/AssetsDev.car b/desktop/AssetsDev.car new file mode 100644 index 000000000000..fa42093fd6f7 Binary files /dev/null and b/desktop/AssetsDev.car differ diff --git a/desktop/AssetsStaging.car b/desktop/AssetsStaging.car new file mode 100644 index 000000000000..63993023d4a8 Binary files /dev/null and b/desktop/AssetsStaging.car differ diff --git a/desktop/afterPack.ts b/desktop/afterPack.ts index 8ad4620037bf..d0dd1b818a7c 100644 --- a/desktop/afterPack.ts +++ b/desktop/afterPack.ts @@ -2,19 +2,21 @@ import type {AfterPackContext} from 'electron-builder'; import {promises as fs} from 'node:fs'; import path from 'node:path'; -const getAssetSourceFilename = () => { +const getAssetSuffix = () => { if (process.env.ELECTRON_ENV === 'adhoc') { - return 'Assets-adhoc.car'; + return 'Adhoc'; } if (process.env.ELECTRON_ENV === 'development') { - return 'Assets-dev.car'; + return 'Dev'; } - return 'Assets.car'; -}; + if (process.env.ELECTRON_ENV === 'staging') { + return 'Staging'; + } -const assetSource = path.resolve(__dirname, `../${getAssetSourceFilename()}`); + return ''; +}; // This will copy Assets.car with MacOS Liquid Glass icon // and will be removed after Electron builder supports this natively @@ -27,5 +29,7 @@ export default function afterPack(context: AfterPackContext) { const appRoot = path.join(context.appOutDir, `${appName}.app`, 'Contents'); const resourcesDir = path.join(appRoot, 'Resources'); + const assetSource = path.resolve(__dirname, `../Assets${getAssetSuffix()}.car`); + return fs.mkdir(resourcesDir, {recursive: true}).then(() => fs.copyFile(assetSource, path.join(resourcesDir, 'Assets.car'))); } diff --git a/ios/AppIcon-staging.icon/Assets/Adhoc-Icon-Tinted-1024x1024.png b/ios/AppIcon-staging.icon/Assets/Adhoc-Icon-Tinted-1024x1024.png new file mode 100644 index 000000000000..5a6d1d18c4f4 Binary files /dev/null and b/ios/AppIcon-staging.icon/Assets/Adhoc-Icon-Tinted-1024x1024.png differ diff --git a/ios/AppIcon-staging.icon/Assets/App Icon.png b/ios/AppIcon-staging.icon/Assets/App Icon.png new file mode 100644 index 000000000000..2c70f1f84775 Binary files /dev/null and b/ios/AppIcon-staging.icon/Assets/App Icon.png differ diff --git a/ios/AppIcon-staging.icon/icon.json b/ios/AppIcon-staging.icon/icon.json new file mode 100644 index 000000000000..608374be06b9 --- /dev/null +++ b/ios/AppIcon-staging.icon/icon.json @@ -0,0 +1,159 @@ +{ + "fill-specializations" : [ + { + "value" : { + "solid" : "srgb:0.01176,0.83137,0.48627,1.00000" + } + }, + { + "appearance" : "dark", + "value" : "automatic" + }, + { + "appearance" : "tinted", + "value" : "automatic" + } + ], + "groups" : [ + { + "blend-mode-specializations" : [ + { + "appearance" : "tinted", + "value" : "normal" + } + ], + "blur-material-specializations" : [ + { + "value" : null + }, + { + "appearance" : "tinted", + "value" : null + } + ], + "hidden" : false, + "layers" : [ + { + "glass-specializations" : [ + { + "value" : false + }, + { + "appearance" : "tinted", + "value" : true + } + ], + "hidden" : false, + "image-name" : "Adhoc-Icon-Tinted-1024x1024.png", + "name" : "Adhoc-Icon-Tinted-1024x1024" + }, + { + "fill-specializations" : [ + { + "value" : "automatic" + }, + { + "appearance" : "dark", + "value" : { + "solid" : "srgb:0.01176,0.83137,0.48627,1.00000" + } + }, + { + "appearance" : "tinted", + "value" : { + "linear-gradient" : [ + "extended-gray:0.90169,1.00000", + "extended-gray:0.79783,1.00000" + ] + } + } + ], + "glass-specializations" : [ + { + "value" : false + }, + { + "appearance" : "tinted", + "value" : false + } + ], + "hidden" : false, + "image-name" : "App Icon.png", + "name" : "App Icon", + "position" : { + "scale" : 1, + "translation-in-points" : [ + 0, + 0 + ] + } + } + ], + "lighting-specializations" : [ + { + "appearance" : "tinted", + "value" : "individual" + } + ], + "opacity-specializations" : [ + { + "appearance" : "tinted", + "value" : 1 + } + ], + "shadow-specializations" : [ + { + "value" : { + "kind" : "none", + "opacity" : 0.5 + } + }, + { + "appearance" : "tinted", + "value" : { + "kind" : "none", + "opacity" : 0.5 + } + } + ], + "specular-specializations" : [ + { + "value" : false + }, + { + "appearance" : "dark", + "value" : false + }, + { + "appearance" : "tinted", + "value" : false + } + ], + "translucency-specializations" : [ + { + "value" : { + "enabled" : false, + "value" : 0.6 + } + }, + { + "appearance" : "dark", + "value" : { + "enabled" : false, + "value" : 0.5 + } + }, + { + "appearance" : "tinted", + "value" : { + "enabled" : false, + "value" : 0.5 + } + } + ] + } + ], + "supported-platforms" : { + "squares" : "shared" + } +} \ No newline at end of file diff --git a/ios/AppIcon.icon/icon.json b/ios/AppIcon.icon/icon.json index e6250fcbc9c6..c112918cef2c 100644 --- a/ios/AppIcon.icon/icon.json +++ b/ios/AppIcon.icon/icon.json @@ -8,6 +8,10 @@ { "appearance" : "dark", "value" : "automatic" + }, + { + "appearance" : "tinted", + "value" : "automatic" } ], "groups" : [ diff --git a/scripts/generateElectronIconAssets.sh b/scripts/generateElectronIconAssets.sh new file mode 100755 index 000000000000..94832d092e81 --- /dev/null +++ b/scripts/generateElectronIconAssets.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +for env in production staging dev adhoc +do + if [ "$env" = "staging" ]; then + suffix="Staging" + elif [ "$env" = "dev" ]; then + suffix="Dev" + elif [ "$env" = "adhoc" ]; then + suffix="Adhoc" + fi + + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + + mkdir -p "$SCRIPT_DIR/../Mobile-Expensify/iOS/icons" + + /Applications/Xcode.app/Contents/Developer/usr/bin/actool \ + "$SCRIPT_DIR/../Mobile-Expensify/iOS/AppIcon${suffix}.icon" \ + --compile "$SCRIPT_DIR/../Mobile-Expensify/iOS/icons" \ + --output-format human-readable-text --notices --warnings --errors \ + --output-partial-info-plist "$SCRIPT_DIR/../Mobile-Expensify/iOS/Info.plist" \ + --app-icon "AppIcon${suffix}" \ + --include-all-app-icons \ + --minimum-deployment-target 26.0 \ + --enable-on-demand-resources NO \ + --development-region en \ + --target-device mac \ + --platform macosx + + cp "$SCRIPT_DIR/../Mobile-Expensify/iOS/icons/Assets.car" "$SCRIPT_DIR/../desktop/Assets${suffix}.car" + rm -rf "$SCRIPT_DIR/../Mobile-Expensify/iOS/icons" +done + +