fix(ios): use mac icon + avoid voice wake crash
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{ "filename" : "icon-20@1x.png", "idiom" : "ipad", "scale" : "1x", "size" : "20x20" },
|
||||||
|
{ "filename" : "icon-20@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "20x20" },
|
||||||
|
{ "filename" : "icon-20@2x.png", "idiom" : "iphone","scale" : "2x", "size" : "20x20" },
|
||||||
|
{ "filename" : "icon-20@3x.png", "idiom" : "iphone","scale" : "3x", "size" : "20x20" },
|
||||||
|
|
||||||
|
{ "filename" : "icon-29@1x.png", "idiom" : "ipad", "scale" : "1x", "size" : "29x29" },
|
||||||
|
{ "filename" : "icon-29@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "29x29" },
|
||||||
|
{ "filename" : "icon-29@2x.png", "idiom" : "iphone","scale" : "2x", "size" : "29x29" },
|
||||||
|
{ "filename" : "icon-29@3x.png", "idiom" : "iphone","scale" : "3x", "size" : "29x29" },
|
||||||
|
|
||||||
|
{ "filename" : "icon-40@1x.png", "idiom" : "ipad", "scale" : "1x", "size" : "40x40" },
|
||||||
|
{ "filename" : "icon-40@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "40x40" },
|
||||||
|
{ "filename" : "icon-40@2x.png", "idiom" : "iphone","scale" : "2x", "size" : "40x40" },
|
||||||
|
{ "filename" : "icon-40@3x.png", "idiom" : "iphone","scale" : "3x", "size" : "40x40" },
|
||||||
|
|
||||||
|
{ "filename" : "icon-60@2x.png", "idiom" : "iphone","scale" : "2x", "size" : "60x60" },
|
||||||
|
{ "filename" : "icon-60@3x.png", "idiom" : "iphone","scale" : "3x", "size" : "60x60" },
|
||||||
|
|
||||||
|
{ "filename" : "icon-76@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "76x76" },
|
||||||
|
|
||||||
|
{ "filename" : "icon-83.5@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "83.5x83.5" },
|
||||||
|
|
||||||
|
{ "filename" : "icon-1024.png", "idiom" : "ios-marketing", "scale" : "1x", "size" : "1024x1024" }
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 39 KiB |
6
apps/ios/Sources/Assets.xcassets/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -91,34 +91,36 @@ final class VoiceWakeManager: NSObject, ObservableObject {
|
|||||||
|
|
||||||
private var lastDispatched: String?
|
private var lastDispatched: String?
|
||||||
private var onCommand: (@Sendable (String) async -> Void)?
|
private var onCommand: (@Sendable (String) async -> Void)?
|
||||||
|
private nonisolated(unsafe) var userDefaultsObserver: NSObjectProtocol?
|
||||||
|
|
||||||
override init() {
|
override init() {
|
||||||
super.init()
|
super.init()
|
||||||
self.triggerWords = VoiceWakePreferences.loadTriggerWords()
|
self.triggerWords = VoiceWakePreferences.loadTriggerWords()
|
||||||
NotificationCenter.default.addObserver(
|
self.userDefaultsObserver = NotificationCenter.default.addObserver(
|
||||||
self,
|
forName: UserDefaults.didChangeNotification,
|
||||||
selector: #selector(self.handleUserDefaultsDidChange),
|
object: UserDefaults.standard,
|
||||||
name: UserDefaults.didChangeNotification,
|
queue: .main,
|
||||||
object: UserDefaults.standard)
|
using: { [weak self] _ in
|
||||||
|
Task { @MainActor in
|
||||||
|
self?.handleUserDefaultsDidChange()
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
NotificationCenter.default.removeObserver(
|
if let userDefaultsObserver = self.userDefaultsObserver {
|
||||||
self,
|
NotificationCenter.default.removeObserver(userDefaultsObserver)
|
||||||
name: UserDefaults.didChangeNotification,
|
}
|
||||||
object: UserDefaults.standard)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var activeTriggerWords: [String] {
|
var activeTriggerWords: [String] {
|
||||||
VoiceWakePreferences.sanitizeTriggerWords(self.triggerWords)
|
VoiceWakePreferences.sanitizeTriggerWords(self.triggerWords)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func handleUserDefaultsDidChange() {
|
private func handleUserDefaultsDidChange() {
|
||||||
let updated = VoiceWakePreferences.loadTriggerWords()
|
let updated = VoiceWakePreferences.loadTriggerWords()
|
||||||
Task { @MainActor in
|
if updated != self.triggerWords {
|
||||||
if updated != self.triggerWords {
|
self.triggerWords = updated
|
||||||
self.triggerWords = updated
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ targets:
|
|||||||
platform: iOS
|
platform: iOS
|
||||||
sources:
|
sources:
|
||||||
- path: Sources
|
- path: Sources
|
||||||
|
excludes:
|
||||||
|
- Assets.xcassets
|
||||||
|
resources:
|
||||||
|
- path: Sources/Assets.xcassets
|
||||||
dependencies:
|
dependencies:
|
||||||
- package: ClawdisKit
|
- package: ClawdisKit
|
||||||
- package: ClawdisKit
|
- package: ClawdisKit
|
||||||
|
|||||||