Fix custom menu bar icon packaging

This commit is contained in:
diyaa 2026-07-27 02:49:32 +02:00
parent 24efe36d8e
commit a078e8a4ec
5 changed files with 19 additions and 9 deletions

View File

@ -7,8 +7,7 @@ let package = Package(
targets: [
.executableTarget(
name: "FchatiApp",
path: "Sources/FchatiApp",
resources: [.process("Resources")]
path: "Sources/FchatiApp"
),
.testTarget(
name: "FchatiAppTests",

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -14,13 +14,24 @@ struct FchatiApp: App {
RootView()
.background(WindowConfigurator())
} label: {
Image("MenuBarIcon", bundle: .module)
.renderingMode(.original)
MenuBarIcon()
}
.menuBarExtraStyle(.window)
}
}
private struct MenuBarIcon: View {
var body: some View {
if let url = Bundle.main.url(forResource: "MenuBarIcon", withExtension: "png"),
let image = NSImage(contentsOf: url) {
Image(nsImage: image)
.renderingMode(.original)
} else {
Image(systemName: "message")
}
}
}
// Prevents the popover from closing when clicking outside.
private struct WindowConfigurator: NSViewRepresentable {
func makeNSView(context: Context) -> NSView {

View File

@ -200,7 +200,7 @@
- The macOS app now has an always-visible quit control beside the top-level tabs, in addition to the existing Settings action.
- The macOS app now includes a normal main window and Dock presence while retaining the menu-bar shortcut.
- `FchatiApp/Resources/AppIcon.png` and `FchatiApp/Resources/Fchati.icns` provide the bundled Dock and application icon, and the installer copies the icon into the application bundle.
- The supplied Teamwork Chat icon now replaces the app icon and provides the custom menu-bar icon through the Swift package resources; the installer copies that resource bundle into the application bundle.
- The supplied Teamwork Chat icon now replaces the app icon and provides the custom menu-bar icon from the signed application resources directory.
## Bug Fixes — Post-Review ✅

View File

@ -10,6 +10,7 @@ INSTALL_PATH="/Applications/Fchati.app"
STAGING_DIR="$(mktemp -d "${TMPDIR:-/tmp}/fchati-install.XXXXXX")"
STAGING_APP="$STAGING_DIR/Fchati.app"
ICON_PATH="$PROJECT_DIR/Resources/Fchati.icns"
MENU_BAR_ICON_PATH="$PROJECT_DIR/Resources/MenuBarIcon.png"
cleanup() {
rm -rf "$STAGING_DIR"
@ -41,14 +42,13 @@ echo "Building the release executable..."
swift build --configuration release --package-path "$PROJECT_DIR"
EXECUTABLE_PATH="$PROJECT_DIR/.build/release/$PRODUCT_NAME"
RESOURCE_BUNDLE="$PROJECT_DIR/.build/release/FchatiApp_FchatiApp.bundle"
if [[ ! -x "$EXECUTABLE_PATH" ]]; then
echo "Release executable not found: $EXECUTABLE_PATH" >&2
exit 1
fi
if [[ ! -d "$RESOURCE_BUNDLE" ]]; then
echo "Application resource bundle not found: $RESOURCE_BUNDLE" >&2
if [[ ! -f "$MENU_BAR_ICON_PATH" ]]; then
echo "Menu bar icon not found: $MENU_BAR_ICON_PATH" >&2
exit 1
fi
@ -57,7 +57,7 @@ mkdir -p "$STAGING_APP/Contents/MacOS" "$STAGING_APP/Contents/Resources"
cp "$PROJECT_DIR/Info.plist" "$STAGING_APP/Contents/Info.plist"
cp "$EXECUTABLE_PATH" "$STAGING_APP/Contents/MacOS/$PRODUCT_NAME"
cp "$ICON_PATH" "$STAGING_APP/Contents/Resources/Fchati.icns"
cp -R "$RESOURCE_BUNDLE" "$STAGING_APP/Contents/Resources/"
cp "$MENU_BAR_ICON_PATH" "$STAGING_APP/Contents/Resources/MenuBarIcon.png"
codesign --force --sign - --timestamp=none --entitlements "$PROJECT_DIR/FchatiApp.entitlements" "$STAGING_APP"
if [[ -d "$INSTALL_PATH" ]]; then