diff --git a/.github/actions/apply-version/action.yml b/.github/actions/apply-version/action.yml index a906863..736a3f6 100644 --- a/.github/actions/apply-version/action.yml +++ b/.github/actions/apply-version/action.yml @@ -110,16 +110,20 @@ runs: set -e if [[ "$INPUT_STAGING" == "true" && -d "src-tauri/icons-staging" ]]; then + # Liquid Glass icons take a different input per platform (the two + # build systems differ): macOS uses the precompiled Assets.car + # (the Tauri bundler copies it into the .app — no actool), with + # icon.icns as the pre-macOS-26 fallback; iOS uses the icon.icon + # Icon Composer source, which xcodebuild's actool compiles itself + # (the iOS step below places it into gen/apple). Both derive from + # the same Icon Composer project. cp src-tauri/icons-staging/32x32.png src-tauri/icons-staging/64x64.png \ src-tauri/icons-staging/128x128.png "src-tauri/icons-staging/128x128@2x.png" \ src-tauri/icons-staging/icon.png src-tauri/icons-staging/icon.icns src-tauri/icons-staging/icon.ico \ + src-tauri/icons-staging/Assets.car \ src-tauri/icons-staging/Square*.png src-tauri/icons-staging/StoreLogo.png \ src-tauri/icons/ - # icon.icon is the Icon Composer (Liquid Glass) source shared by - # macOS and iOS: the macOS bundler compiles it to Assets.car via - # actool (icon.icns stays as the pre-macOS-26 fallback), and the - # iOS step below copies it into the asset catalog. It's a directory, - # so replace it wholesale rather than cp-ing into the existing one. + # icon.icon is a directory — replace wholesale rather than cp into it. rm -rf src-tauri/icons/icon.icon cp -r src-tauri/icons-staging/icon.icon src-tauri/icons/icon.icon echo "Using staging icon set (src-tauri/icons-staging)" @@ -184,16 +188,16 @@ runs: /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName ${DISPLAY_NAME}" "$plist" || true done - # gen/apple/Assets.xcassets is a separate, committed copy that only - # xcodebuild sees — it holds the committed (release) icon.icon. The - # "Select app icon set" step above already swapped src-tauri/icons/icon.icon - # to the staging Icon Composer source when staging, so sync whatever is - # there into the catalog. xcodebuild's actool compiles it into the app's - # Assets.car (Liquid Glass on iOS 26) and auto-generates the PNG raster - # fallbacks for older iOS. ASSETCATALOG_COMPILER_APPICON_NAME=icon - # (project.pbxproj) selects this entry. - rm -rf src-tauri/gen/apple/Assets.xcassets/icon.icon - cp -r src-tauri/icons/icon.icon src-tauri/gen/apple/Assets.xcassets/icon.icon - echo "Synced iOS app icon (icon.icon) into Assets.xcassets" + # icon.icon (Icon Composer source) must sit at the project root next + # to Assets.xcassets — NOT inside the catalog — and be referenced in + # project.pbxproj (PBXFileReference + Resources build phase) so + # actool routes it as the app icon. It's committed for release; the + # "Select app icon set" step above swaps src-tauri/icons/icon.icon to + # the staging source when staging, so sync whatever is there. + # ASSETCATALOG_COMPILER_APPICON_NAME=icon (project.pbxproj) selects it; + # actool compiles Liquid Glass for iOS 26 and PNG rasters for older iOS. + rm -rf src-tauri/gen/apple/icon.icon + cp -r src-tauri/icons/icon.icon src-tauri/gen/apple/icon.icon + echo "Synced iOS app icon (icon.icon) to gen/apple/" echo "Applied iOS settings (display: '$DISPLAY_NAME')" diff --git a/src-tauri/gen/apple/Scriptio.xcodeproj/project.pbxproj b/src-tauri/gen/apple/Scriptio.xcodeproj/project.pbxproj index 21ce92c..48756e4 100644 --- a/src-tauri/gen/apple/Scriptio.xcodeproj/project.pbxproj +++ b/src-tauri/gen/apple/Scriptio.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 3D7539C77E3E7B39D3773069 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A8413995900F72FAD7A3130 /* WebKit.framework */; }; 6733D0DFCF58CE1D20CE0016 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1E3399965F93C0A48BEFE2C4 /* LaunchScreen.storyboard */; }; 6A1D956C950B8B06708E767A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0667FF9D3F0DB024724F0BEA /* Assets.xcassets */; }; + 1C0BEEF0123456789ABCDEF0 /* icon.icon in Resources */ = {isa = PBXBuildFile; fileRef = 1C012345678901234567ABCD /* icon.icon */; }; 7846971724947E89AFFDC51B /* assets in Resources */ = {isa = PBXBuildFile; fileRef = F5DAA82DE3DAD01B3E1C1C65 /* assets */; }; 79C9B60DDE83BD0684D6BC99 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = D57601982FF7EC1800EEF60E /* main.mm */; }; B9300403511F50982F70659B /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21458003D850EB3F53C747A5 /* MetalKit.framework */; }; @@ -23,6 +24,7 @@ /* Begin PBXFileReference section */ 0667FF9D3F0DB024724F0BEA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 1C012345678901234567ABCD /* icon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = icon.icon; sourceTree = ""; }; 1B4BDB9CCC6ACDA2FA3220A0 /* Scriptio_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Scriptio_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1E3399965F93C0A48BEFE2C4 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 1F8860DCD301847213FCA26D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -117,6 +119,7 @@ children = ( F5DAA82DE3DAD01B3E1C1C65 /* assets */, 0667FF9D3F0DB024724F0BEA /* Assets.xcassets */, + 1C012345678901234567ABCD /* icon.icon */, 1E3399965F93C0A48BEFE2C4 /* LaunchScreen.storyboard */, 3BB4DB253825EB083CAE5A83 /* Externals */, 739C81ACF40CC5D14E65ECBC /* Scriptio_iOS */, @@ -212,6 +215,7 @@ buildActionMask = 2147483647; files = ( 6A1D956C950B8B06708E767A /* Assets.xcassets in Resources */, + 1C0BEEF0123456789ABCDEF0 /* icon.icon in Resources */, 6733D0DFCF58CE1D20CE0016 /* LaunchScreen.storyboard in Resources */, 7846971724947E89AFFDC51B /* assets in Resources */, ); diff --git a/src-tauri/gen/apple/Assets.xcassets/icon.icon/Assets/scriptio_icon.png b/src-tauri/gen/apple/icon.icon/Assets/scriptio_icon.png similarity index 100% rename from src-tauri/gen/apple/Assets.xcassets/icon.icon/Assets/scriptio_icon.png rename to src-tauri/gen/apple/icon.icon/Assets/scriptio_icon.png diff --git a/src-tauri/gen/apple/Assets.xcassets/icon.icon/Assets/scriptio_staging_icon.png b/src-tauri/gen/apple/icon.icon/Assets/scriptio_staging_icon.png similarity index 100% rename from src-tauri/gen/apple/Assets.xcassets/icon.icon/Assets/scriptio_staging_icon.png rename to src-tauri/gen/apple/icon.icon/Assets/scriptio_staging_icon.png diff --git a/src-tauri/gen/apple/Assets.xcassets/icon.icon/icon.json b/src-tauri/gen/apple/icon.icon/icon.json similarity index 100% rename from src-tauri/gen/apple/Assets.xcassets/icon.icon/icon.json rename to src-tauri/gen/apple/icon.icon/icon.json diff --git a/src-tauri/icons-staging/Assets.car b/src-tauri/icons-staging/Assets.car new file mode 100644 index 0000000..af2380c Binary files /dev/null and b/src-tauri/icons-staging/Assets.car differ diff --git a/src-tauri/icons/Assets.car b/src-tauri/icons/Assets.car new file mode 100644 index 0000000..3436fff Binary files /dev/null and b/src-tauri/icons/Assets.car differ diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 209acf0..8adc875 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -32,6 +32,6 @@ "macOS": { "minimumSystemVersion": "13.0" }, - "icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.icon", "icons/icon.ico"] + "icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/Assets.car", "icons/icon.ico"] } }