I was able to set up the Native Messaging
https://developer.chrome.com/docs/apps/nativeMessaging
But there is a catch:
In order for the messaging to work, i need to create a json here (referencing an executable intended to listen to messages from an extension): $HOME/Library/Application\ Support/Google/Chrome/NativeMessagingHosts.
https://developer.chrome.com/docs/apps/nativeMessaging#native-messaging-host-location
Unfortunately you can not bundle it with a Chrome plugin so it automatically gets added there.
Basically the json looks like this:
{
"name": "com.kopyl.tabfidnder.nativehost",
"description": "Tab Finder Chrome",
"path": "/usr/local/bin/native_host.py",
"type": "stdio",
"allowed_origins": [
"chrome-extension://jcbclkhailmoenaeddooicbemefilmje/"
]
}
(for rapid prototyping i used Python, but eventually i guess it would be better to utilize an XPC service)
Of course i could make a .pkg installer which would add that json config to the file system, but in terms of user experience i don't think it's optimal. And i doubt App Store will approve an application which requires external installations for it to work properly.
I tried copying the json on macOS app launch, but with enabled App Sandboxing Entitlement, the path turns to this (and hence becomes invalid):
$HOME/Library/Containers/kopyl.tab-finder-chrome-app/Data/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.kopyl.tabfidnder.nativehost.json
Without the App Sandboxing the macOS app can't be published to the App Store.
Post
Replies
Boosts
Views
Activity
Saem question. I know there is a native messaging, but there is no detailed guide on it.
@darkpaw thank you very much, it helped :)
I also get this error:
ViewBridge to RemoteViewService Terminated: Error Domain=com.apple.ViewBridge Code=18 "(null)" UserInfo={com.apple.ViewBridge.error.hint=this process disconnected remote view controller -- benign unless unexpected, com.apple.ViewBridge.error.description=NSViewBridgeErrorCanceled}
I also get this error:
Couldn't read values in CFPrefsPlistSource<0x600003bfd680> (Domain: 9QNMAN8CT6.tabfinder.sharedgroup, User: kCFPreferencesAnyUser, ByHost: Yes, Container: (null), Contents Need Refresh: Yes): Using kCFPreferencesAnyUser with a container is only allowed for System Containers, detaching from cfprefsd
@DTS Engineer FB16713763 i believe :)
Just posted the same to Claude and it gave me this solution which works:
struct Sidebar: View {
@State private var isActive = true
var body: some View {
VStack {
List {
NavigationLink(isActive: $isActive) {
HomeView()
} label: {
Text("Home")
}
}
List {
NavigationLink {
SettingsView()
} label: {
Text("Settings")
}
}
.frame(height: 50)
}
}
}
I just tried uploading my app from Xcode 16 and it worked.
But I still need to be able to upload my apps to App Store Connect from macOS Ventura and Xcode 16...
It must be some bug on Apple side...
I ended up using HotKey
Example:
import SwiftUI
import HotKey
struct ContentView: View {
let hotKey = HotKey(key: .tab , modifiers: [.option])
var body: some View {
VStack {}
.onAppear {
hotKey.keyDownHandler = buttonHandler
}
}
func buttonHandler() {
/* ... */
}
}
But I'm still curious in how it can send the shortcuts without Accessibility permission.
So far I figured out:
You can trigger a shortcut if you have a Safari Web Extension from background.js by adding a shortcut to manifest.json
"commands": {
"open-main-app": {
"suggested_key": {
"default": "Alt+K"
},
"description": "Open Main App"
}
}
But you can't set option+tab as a shortcut.
Tab Back Lite's manifest.json but it does not have a shortcut in it. It only has nativeMessaging permission and a background script.
@jeffjohnson ah, sorry, my bad.
So what's your best recommendation to this problem?
Appending something to a bundle identifier?
Not sure that this is the best solution because my bundle identifiers are present in multiple places and in multiple files:
In Info.plist: CFBundleIdentifier
In ... .xcodeproj/project.pbxpro: PRODUCT_BUNDLE_IDENTIFIER (Extension)
In ... .xcodeproj/project.pbxpro: PRODUCT_BUNDLE_IDENTIFIER (Main app)
I just set a user-defined variable and use it everywhere, but i don't think it's the best solution so far. Do you?
You said in the article that you might unregister the app. Can this be a fix to my problem?
@jeffjohnson
You said that this bug was "fixed in macOS 13 Ventura", but i'm currently on macOS Ventura now and experience this bug.
The thing is that i have this bug even if there is only one app is located on the system.
And when at some point the amount of apps with the same bundle id gets to 2 or bigger, macOS just makes the extension disappear instead of giving any preference to any of the apps.
I attached a video in the comments showcasing the bug: https://youtu.be/abpf3q6ah98
Removing iPad, WatchOS and macOS from destinations in Xcode before publishing the app to App Store connect helped.
You can find it in
Project -> Targets -> {target_name} -> General -> Supported Destinations
I just recorded a video showcasing this bug, if you will
https://youtu.be/abpf3q6ah98