Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
8d61132
desktop updater setup
mdmohsin7 Nov 26, 2025
f7a6a23
setup dmg + gh release codemagic flow
mdmohsin7 Nov 28, 2025
640f46e
hardcode ver for testing
mdmohsin7 Nov 28, 2025
289344b
notarize
mdmohsin7 Nov 28, 2025
7575bee
fix notarisation
mdmohsin7 Nov 28, 2025
7e17f5f
use issuer instead of issuer-id
mdmohsin7 Nov 28, 2025
2861910
add logging to test
mdmohsin7 Nov 28, 2025
c3cdc35
more logging and use correct cert
mdmohsin7 Nov 28, 2025
c4ae3b7
fix cert type
mdmohsin7 Nov 28, 2025
ec60cf1
use MAC_APP_DIRECT cert
mdmohsin7 Nov 28, 2025
7b87e9c
test
mdmohsin7 Nov 28, 2025
d552153
set password empty
mdmohsin7 Nov 28, 2025
8718b25
skip automatic signing
mdmohsin7 Nov 28, 2025
1c97757
double sign
mdmohsin7 Nov 28, 2025
c700cb8
sign dmg
mdmohsin7 Nov 28, 2025
c038229
remove sign in entitlement
mdmohsin7 Nov 28, 2025
b28959c
typo
mdmohsin7 Nov 28, 2025
28949f8
remove sandbox
mdmohsin7 Nov 28, 2025
5276bde
hardcode team id and bundle id
mdmohsin7 Nov 28, 2025
a855058
i hate apple
mdmohsin7 Nov 28, 2025
fdb9847
use provisioning profile
mdmohsin7 Nov 28, 2025
f327967
use provision profile from env
mdmohsin7 Nov 28, 2025
ae3e267
remove apple sign in entitlement
mdmohsin7 Nov 28, 2025
ea4d178
last attempt
mdmohsin7 Nov 28, 2025
8416b3e
don't resign
mdmohsin7 Nov 28, 2025
b2fdf74
verify with timestamp
mdmohsin7 Nov 28, 2025
4aa4f22
simplify signing
mdmohsin7 Nov 29, 2025
b0f3ae5
misc
mdmohsin7 Nov 29, 2025
1dd8f94
use xcode us eprofiles
mdmohsin7 Nov 29, 2025
4addd98
simplify workflow
mdmohsin7 Nov 29, 2025
a333f21
fix yaml
mdmohsin7 Nov 29, 2025
35dfff9
manual sign
mdmohsin7 Nov 29, 2025
d818297
decode the provisioning profile before using
mdmohsin7 Nov 29, 2025
c6baff7
use-profiles
mdmohsin7 Nov 29, 2025
a8d0e56
verbose logging
mdmohsin7 Nov 29, 2025
6334ea5
should work now
mdmohsin7 Nov 29, 2025
84d18e7
don't force
mdmohsin7 Nov 29, 2025
1d8578e
remove get-task-allow
mdmohsin7 Nov 29, 2025
8e94015
force
mdmohsin7 Nov 29, 2025
d676fe4
entitlements
mdmohsin7 Nov 29, 2025
673f18a
Merge remote-tracking branch 'origin/main' into desktop_updater
mdmohsin7 Nov 29, 2025
64d209b
use sparkle
mdmohsin7 Nov 29, 2025
f7f789e
sign sparkle and related components
mdmohsin7 Nov 29, 2025
f46d0c1
fix tag
mdmohsin7 Nov 29, 2025
ea0f159
fix sparkle signing
mdmohsin7 Nov 29, 2025
6d6e6e4
fix sparkle key import
mdmohsin7 Nov 29, 2025
c868204
sign directly using sparkle
mdmohsin7 Nov 29, 2025
fb7618e
use signed urls + cleanup the workflow now that it works flawlessly
mdmohsin7 Nov 30, 2025
6071506
change url for update testing
mdmohsin7 Nov 30, 2025
063b4b1
beautify dmg + bump ver for update testing
mdmohsin7 Nov 30, 2025
9cf2db4
fix version in appcast xml
mdmohsin7 Nov 30, 2025
40d357f
pass skip-jenkins for finder timeout
mdmohsin7 Nov 30, 2025
228c786
remove debug echos from flow and cleanup
mdmohsin7 Nov 30, 2025
fd1201b
dmg ux improvements + new route to download latest release
mdmohsin7 Nov 30, 2025
4fda228
Merge branch 'main' into desktop_updater
mdmohsin7 Nov 30, 2025
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
6 changes: 6 additions & 0 deletions app/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ PODS:
- Flutter
- connectivity_plus (0.0.1):
- Flutter
- cryptography_flutter_plus (0.2.0):
- Flutter
- device_info_plus (0.0.1):
- Flutter
- DKImagePickerController/Core (4.3.9):
Expand Down Expand Up @@ -275,6 +277,7 @@ DEPENDENCIES:
- awesome_notifications (from `.symlinks/plugins/awesome_notifications/ios`)
- awesome_notifications_core (from `.symlinks/plugins/awesome_notifications_core/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- cryptography_flutter_plus (from `.symlinks/plugins/cryptography_flutter_plus/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
Expand Down Expand Up @@ -362,6 +365,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/awesome_notifications_core/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios"
cryptography_flutter_plus:
:path: ".symlinks/plugins/cryptography_flutter_plus/ios"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
file_picker:
Expand Down Expand Up @@ -444,6 +449,7 @@ SPEC CHECKSUMS:
awesome_notifications: 0f432b28098d193920b11a44cfa9d2d9313a3888
awesome_notifications_core: 429c28df8746780a474de177e5acde33af87da63
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
cryptography_flutter_plus: 44f4e9e4079395fcbb3e7809c0ac2c6ae2d9576f
device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
Expand Down
8 changes: 7 additions & 1 deletion app/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import 'package:omi/providers/sync_provider.dart';
import 'package:omi/providers/usage_provider.dart';
import 'package:omi/providers/user_provider.dart';
import 'package:omi/services/auth_service.dart';
import 'package:omi/services/desktop_update_service.dart';
import 'package:omi/services/notifications.dart';
import 'package:omi/services/notifications/action_item_notification_handler.dart';
import 'package:omi/services/services.dart';
Expand Down Expand Up @@ -162,6 +163,11 @@ Future _init() async {
return true;
};

// Initialize desktop updater
if (PlatformService.isDesktop) {
await DesktopUpdateService().initialize();
}

await ServiceManager.instance().start();
return;
}
Expand Down Expand Up @@ -238,7 +244,7 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
try {
final context = MyApp.navigatorKey.currentContext;
if (context == null) return;

final captureProvider = Provider.of<CaptureProvider>(context, listen: false);
if (captureProvider.recordingState == RecordingState.stop) {
await captureProvider.streamSystemAudioRecording();
Expand Down
66 changes: 66 additions & 0 deletions app/lib/services/desktop_update_service.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import 'dart:io';
import 'package:auto_updater/auto_updater.dart';
import 'package:omi/env/env.dart';
import 'package:omi/utils/logger.dart';
import 'package:omi/utils/platform/platform_service.dart';

/// Service to manage desktop application updates using auto_updater
class DesktopUpdateService {
static final DesktopUpdateService _instance = DesktopUpdateService._internal();
factory DesktopUpdateService() => _instance;
DesktopUpdateService._internal();

bool _initialized = false;

String get _platform {
if (Platform.isMacOS) return 'macos';
if (Platform.isWindows) return 'windows';
if (Platform.isLinux) return 'linux';
return 'unknown';
}

/// Initialize auto_updater
Future<void> initialize() async {
if (!PlatformService.isDesktop) {
Logger.debug('Desktop updater not supported on this platform');
return;
}

if (_initialized) {
Logger.debug('Desktop updater already initialized');
return;
}

try {
final baseUrl = Env.apiBaseUrl;
final feedURL = '${baseUrl}v2/desktop/appcast.xml?platform=$_platform';

// Configure auto_updater
await autoUpdater.setFeedURL(feedURL);
await autoUpdater.setScheduledCheckInterval(10800); // Check every 3 hours

// Check for updates in background on startup
await autoUpdater.checkForUpdates(inBackground: true);

_initialized = true;
} catch (e, stackTrace) {
Logger.handle(e, stackTrace, message: 'Failed to initialize auto updater');
}
}

/// Manually check for updates
Future<void> checkForUpdates() async {
if (!_initialized) {
Logger.warning('Auto updater not initialized');
return;
}

try {
await autoUpdater.checkForUpdates();
} catch (e, stackTrace) {
Logger.handle(e, stackTrace, message: 'Failed to check for updates');
}
}

bool get isAvailable => _initialized;
}
1 change: 1 addition & 0 deletions app/macos/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ target 'Runner' do
flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))

pod 'Mixpanel-swift', :git => 'https://github.com/beastoin/mixpanel-swift.git', :commit => '5fd6584'
pod 'Sparkle', '~> 2.0'
end

post_install do |installer|
Expand Down
4 changes: 2 additions & 2 deletions app/macos/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,6 @@
<false/>
<key>PermissionGroupNotification</key>
<string>You need to enable notifications to receive your pro-active feedback.</string>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.files.user-selected.read-only</key>
Expand All @@ -110,5 +108,7 @@
</array>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>SUPublicEDKey</key>
<string>EYZ94JfSI+WJzZMRUizMwCaQXuB2/EjTSZ382u9XukQ=</string>
</dict>
</plist>
109 changes: 84 additions & 25 deletions app/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ packages:
dependency: transitive
description:
name: archive
sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
url: "https://pub.dev"
source: hosted
version: "3.6.1"
version: "4.0.7"
args:
dependency: transitive
description:
Expand Down Expand Up @@ -105,6 +105,38 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.0"
auto_updater:
dependency: "direct main"
description:
name: auto_updater
sha256: "74fd008b021d15e4fc50fb5f1923870e6374ae831bb1168241c23bc35a4e898b"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
auto_updater_macos:
dependency: transitive
description:
name: auto_updater_macos
sha256: ef9de0daf38d782d2243fe131503a9404d62df762f5386e5360020e43c01867f
url: "https://pub.dev"
source: hosted
version: "1.0.0"
auto_updater_platform_interface:
dependency: transitive
description:
name: auto_updater_platform_interface
sha256: ed5dff8cea18c58bc5ac787ff9122fedd1644272e02015d28c9b592f8078c5dc
url: "https://pub.dev"
source: hosted
version: "1.0.0"
auto_updater_windows:
dependency: transitive
description:
name: auto_updater_windows
sha256: "2bba20a71eee072f49b7267fedd5c4f1406c4b1b1e5b83932c634dbab75b80c9"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
awesome_notifications:
dependency: "direct main"
description:
Expand Down Expand Up @@ -679,10 +711,10 @@ packages:
dependency: "direct dev"
description:
name: flutter_flavorizr
sha256: e9550f67a890b9111ac5a555954f3808cb8c0132ce6dea08e3381964de39b906
sha256: "7ac1a53e95d36e96017bbf4aa94023dc652e455de3f0ce9c80e9eaa274c73e81"
url: "https://pub.dev"
source: hosted
version: "2.2.3"
version: "2.4.1"
flutter_foreground_task:
dependency: "direct main"
description:
Expand Down Expand Up @@ -829,10 +861,11 @@ packages:
frame_sdk:
dependency: "direct main"
description:
name: frame_sdk
sha256: afab5eede530d4f215d88bc8eb84d6b0944907bcbde58eee662253029392463b
url: "https://pub.dev"
source: hosted
path: "."
ref: master
resolved-ref: "78d8ad55354e30759243e29e793f0981f9aa317d"
url: "https://github.com/mdmohsin7/frame-sdk-flutter.git"
source: git
version: "0.0.7"
frontend_server_client:
dependency: transitive
Expand Down Expand Up @@ -955,10 +988,10 @@ packages:
dependency: "direct main"
description:
name: googleapis_auth
sha256: af7c3a3edf9d0de2e1e0a77e994fae0a581c525fa7012af4fa0d4a52ed9484da
sha256: b81fe352cc4a330b3710d2b7ad258d9bcef6f909bb759b306bf42973a7d046db
url: "https://pub.dev"
source: hosted
version: "1.4.1"
version: "2.0.0"
gradient_borders:
dependency: "direct main"
description:
Expand Down Expand Up @@ -1043,10 +1076,10 @@ packages:
dependency: "direct main"
description:
name: image
sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d
sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
url: "https://pub.dev"
source: hosted
version: "4.3.0"
version: "4.5.4"
image_picker:
dependency: "direct main"
description:
Expand Down Expand Up @@ -1197,13 +1230,13 @@ packages:
source: hosted
version: "1.0.5"
js:
dependency: transitive
dependency: "direct overridden"
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
url: "https://pub.dev"
source: hosted
version: "0.6.7"
version: "0.7.2"
json_annotation:
dependency: "direct main"
description:
Expand Down Expand Up @@ -1296,10 +1329,10 @@ packages:
dependency: "direct main"
description:
name: lottie
sha256: "377d87b8dcef640c04717e93afb86a510f0e1117a399ab94dc4b3f39c85eaa87"
sha256: "8ae0be46dbd9e19641791dc12ee480d34e1fd3f84c749adc05f3ad9342b71b95"
url: "https://pub.dev"
source: hosted
version: "3.3.0"
version: "3.3.2"
map_launcher:
dependency: "direct main"
description:
Expand All @@ -1316,6 +1349,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "7.3.0"
mason_logger:
dependency: transitive
description:
name: mason_logger
sha256: "6d5a989ff41157915cb5162ed6e41196d5e31b070d2f86e1c2edf216996a158c"
url: "https://pub.dev"
source: hosted
version: "0.3.3"
matcher:
dependency: transitive
description:
Expand Down Expand Up @@ -1368,10 +1409,11 @@ packages:
mixpanel_flutter:
dependency: "direct main"
description:
name: mixpanel_flutter
sha256: "0ecd870cceed1cf4600c403e5544b88efa65b8fd3f30fad679702d1ae9e0ac15"
url: "https://pub.dev"
source: hosted
path: "."
ref: f9234e9
resolved-ref: f9234e9e4f94f9f24b88f3775230c11a734ed7cd
url: "https://github.com/beastoin/mixpanel-flutter.git"
source: git
version: "2.4.4"
nested:
dependency: transitive
Expand Down Expand Up @@ -1408,10 +1450,11 @@ packages:
opus_dart:
dependency: "direct main"
description:
name: opus_dart
sha256: e8ab4774409997af33cbfdfe91a186854ed6458b2fec66b0e52f4434b1af2f7c
url: "https://pub.dev"
source: hosted
path: "."
ref: dev
resolved-ref: e2202b0f38cf6c9e70ab7807b4cdaa3304b145ec
url: "https://github.com/mdmohsin7/opus_dart.git"
source: git
version: "3.0.1"
opus_flutter:
dependency: "direct main"
Expand Down Expand Up @@ -1679,6 +1722,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.5.1"
posix:
dependency: transitive
description:
name: posix
sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
url: "https://pub.dev"
source: hosted
version: "6.0.3"
process:
dependency: transitive
description:
Expand Down Expand Up @@ -2284,6 +2335,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "15.0.2"
wasm_ffi:
dependency: transitive
description:
name: wasm_ffi
sha256: f4539052e4d80575bb4820c836a2d6400af061b71c1605af60ebfb30b7c5369a
url: "https://pub.dev"
source: hosted
version: "2.0.7"
watcher:
dependency: transitive
description:
Expand Down
Loading