Skip to content

Add support for Swift package manager #66

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jun 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@ build/
pubspec.lock
.vscode/settings.json
.idea/workspace.xml

# Swift package manager
.build/
.swiftpm/
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 1.8.2
- Add support for Swift Package Manager. (Thanks to [@EchoEllet](https://github.com/EchoEllet)!)
- Migrate away from deprecated interfaces.
- Add missing documentation to `WindowManipulator.updateToolbarPassthroughView` and `WindowManipulator.removeToolbarPassthroughView`.

## 1.8.1
- Provide support for older Swift compiler versions.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class DescriptionBox extends StatelessWidget {
child: Text(
'This command has no description.',
textAlign: TextAlign.center,
textScaleFactor: 0.8,
textScaler: TextScaler.linear(0.8),
style: TextStyle(
fontStyle: FontStyle.italic,
),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import 'dart:async';
import 'dart:ui';

import 'package:example/main_area/window_manipulator_demo/command_list_provider/command_list_provider_constants.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:macos_window_utils/macos/ns_window_button_type.dart';
import 'package:macos_window_utils/macos/ns_window_level.dart';
Expand Down
1 change: 0 additions & 1 deletion example/lib/toolbar_passthrough_demo/tab_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import 'package:example/global_state.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'package:macos_window_utils/macos_window_utils.dart';
import 'package:macos_window_utils/widgets/macos_toolbar_passthrough.dart';

Expand Down
6 changes: 0 additions & 6 deletions example/macos/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,20 @@ PODS:
- appkit_ui_element_colors (1.0.0):
- FlutterMacOS
- FlutterMacOS (1.0.0)
- macos_window_utils (1.0.0):
- FlutterMacOS

DEPENDENCIES:
- appkit_ui_element_colors (from `Flutter/ephemeral/.symlinks/plugins/appkit_ui_element_colors/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- macos_window_utils (from `Flutter/ephemeral/.symlinks/plugins/macos_window_utils/macos`)

EXTERNAL SOURCES:
appkit_ui_element_colors:
:path: Flutter/ephemeral/.symlinks/plugins/appkit_ui_element_colors/macos
FlutterMacOS:
:path: Flutter/ephemeral
macos_window_utils:
:path: Flutter/ephemeral/.symlinks/plugins/macos_window_utils/macos

SPEC CHECKSUMS:
appkit_ui_element_colors: 711e7a2aa027790964e6fd90c78a666efe631432
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
macos_window_utils: 3bca8603c2a1cf2257351dfe6bbccc9accf739fd

PODFILE CHECKSUM: 500e4707112a5f11963bc198135953cdebb6d50c

Expand Down
20 changes: 20 additions & 0 deletions example/macos/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
FAE3DC00BDFD51D7C70C8495 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6BA76D28627105B3BD31E6F /* Pods_Runner.framework */; };
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -80,6 +81,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */,
FAE3DC00BDFD51D7C70C8495 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -174,6 +176,9 @@

/* Begin PBXNativeTarget section */
33CC10EC2044A3C60003C045 /* Runner */ = {
packageProductDependencies = (
78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */,
);
isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
Expand All @@ -199,6 +204,9 @@

/* Begin PBXProject section */
33CC10E52044A3C60003C045 /* Project object */ = {
packageReferences = (
781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */,
);
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
Expand Down Expand Up @@ -633,6 +641,18 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCLocalSwiftPackageReference section */
781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = {
isa = XCLocalSwiftPackageReference;
relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage;
};
/* End XCLocalSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = {
isa = XCSwiftPackageProductDependency;
productName = FlutterGeneratedPluginSwiftPackage;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 33CC10E52044A3C60003C045 /* Project object */;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,24 @@
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<PreActions>
<ExecutionAction
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
<ActionContent
title = "Run Prepare Flutter Framework Script"
scriptText = "&quot;$FLUTTER_ROOT&quot;/packages/flutter_tools/bin/macos_assemble.sh prepare&#10;">
<EnvironmentBuildable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
BuildableName = "example.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</EnvironmentBuildable>
</ActionContent>
</ExecutionAction>
</PreActions>
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
Expand Down Expand Up @@ -48,6 +66,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
Expand Down
2 changes: 1 addition & 1 deletion lib/toolbars/toolbars.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class BlockingToolbar extends Toolbar {
return {
"blockingAreaDebugColor": blockingAreaDebugColor == null
? ""
: "${blockingAreaDebugColor!.red},${blockingAreaDebugColor!.green},${blockingAreaDebugColor!.blue},${blockingAreaDebugColor!.alpha}",
: "${blockingAreaDebugColor!.r},${blockingAreaDebugColor!.g},${blockingAreaDebugColor!.b},${blockingAreaDebugColor!.a}",
};
}
}
1 change: 0 additions & 1 deletion lib/widgets/macos_toolbar_passthrough.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import 'dart:collection';

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:macos_window_utils/window_manipulator.dart';

const _debounceDuration = Duration(milliseconds: 10);
Expand Down
12 changes: 10 additions & 2 deletions lib/window_manipulator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,15 @@ class WindowManipulator {
await _windowManipulatorMethodChannel.invokeMethod('performClose');
}

// TODO: document this
/// Updates the toolbar passthrough view with the specified parameters.
///
/// The [id] parameter uniquely identifies the passthrough view.
/// The [x] and [y] parameters specify the position of the view.
/// The [width] and [height] parameters define the size of the view.
/// The [enableDebugLayers] parameter enables visual debugging layers if set
/// to true. Note that [enableDebugLayers] is meant to stay constant during
/// life lifetime of the app. Changing its state during runtime may lead to
/// unexpected behavior.
static Future<void> updateToolbarPassthroughView({
required String id,
required double x,
Expand All @@ -865,7 +873,7 @@ class WindowManipulator {
);
}

// TODO: document this
/// Removes the toolbar passthrough view with the specified [id].
static Future<void> removeToolbarPassthroughView({required String id}) async {
await _completer.future;
await _windowManipulatorMethodChannel.invokeMethod(
Expand Down
10 changes: 0 additions & 10 deletions macos/Flutter/GeneratedPluginRegistrant.swift

This file was deleted.

11 changes: 0 additions & 11 deletions macos/Flutter/ephemeral/Flutter-Generated.xcconfig

This file was deleted.

12 changes: 0 additions & 12 deletions macos/Flutter/ephemeral/flutter_export_environment.sh

This file was deleted.

3 changes: 2 additions & 1 deletion macos/macos_window_utils.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ Pod::Spec.new do |s|
s.author = { 'Adrian Samoticha' => 'adrian@samoticha.de' }
s.source = { :git => 'https://github.com/Adrian-Samoticha/macos_window_utils.dart.git',
:tag => s.version.to_s }
s.source_files = 'Classes/**/*'
s.source_files = 'macos_window_utils/Sources/macos_window_utils/**/*.swift'
s.resource_bundles = {'macos_window_utils_privacy' => ['macos_window_utils/Sources/macos_window_utils/Resources/PrivacyInfo.xcprivacy']}
s.dependency 'FlutterMacOS'

s.platform = :osx, '10.14.6'
Expand Down
24 changes: 24 additions & 0 deletions macos/macos_window_utils/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// swift-tools-version: 5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "macos_window_utils",
platforms: [
.macOS("10.14")
],
products: [
.library(name: "macos-window-utils", targets: ["macos_window_utils"])
],
dependencies: [],
targets: [
.target(
name: "macos_window_utils",
dependencies: [],
resources: [
.process("Resources")
]
)
]
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import AppKit

class ButtonTypeNameToButtonTypeConverter {
public static func getButtonTypeFromName(name: String) -> NSWindow.ButtonType? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import AppKit

class LevelNameToLevelConverter {
public static func getLevelFromName(_ name: String) -> NSWindow.Level {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import AppKit

public class MaterialIDToMaterialConverter {
@available(macOS 10.14, *)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import AppKit

class PresentationOptionNameToPresentationOptionsConverter {
public static func getPresentationOptionsFromName(name: String) -> NSApplication.PresentationOptions? {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import AppKit

class StyleMaskNameToStyleMaskConverter {
public static func getStyleMaskFromName(_ name: String) -> NSWindow.StyleMask {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import AppKit

class ToolbarStyleNameToEnumConverter {
@available(macOS 11.0, *)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import AppKit

public class VisualEffectSubview: NSVisualEffectView {
public override func hitTest(_ point: NSPoint) -> NSView? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import Foundation
import AppKit

/// This class holds properties that can be applied to a VisualEffectSubview.
@available(macOS 10.14, *)
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: macos_window_utils
description:
macos_window_utils is a Flutter package that provides a set of methods for
modifying the NSWindow of a Flutter application on macOS.
version: 1.8.1
version: 1.8.2
repository: https://github.com/Adrian-Samoticha/macos_window_utils.dart

environment:
Expand Down