Skip to content

Commit 73cf2b4

Browse files
Tomio Uedaclaude
andcommitted
Change bundle ID to com.bounceconnection.PluginUpdater
Rebrand from personal (com.tomioueda) to org bundle ID. Adds migration logic in PersistenceController to move the SwiftData store directory and copy UserDefaults from the old suite so existing users keep their data. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
1 parent e796889 commit 73cf2b4

File tree

10 files changed

+64
-21
lines changed

10 files changed

+64
-21
lines changed

PLAN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
Build a native macOS SwiftUI app that scans installed audio plugins (VST3, AU, CLAP), tracks their versions, monitors for changes, and provides a dashboard + menu bar interface for managing updates. The system has ~1500 plugins across all formats.
55

66
## Configuration
7-
- **Organization ID**: `com.tomioueda`
8-
- **Bundle ID**: `com.tomioueda.PluginUpdater`
7+
- **Organization ID**: `com.bounceconnection`
8+
- **Bundle ID**: `com.bounceconnection.PluginUpdater`
99
- **App style**: Menu bar + dock (both)
1010

1111
## Tech Stack

PluginUpdater/PluginUpdater.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@
702702
);
703703
MACOSX_DEPLOYMENT_TARGET = 14.0;
704704
MARKETING_VERSION = 1.0.0;
705-
PRODUCT_BUNDLE_IDENTIFIER = com.tomioueda.PluginUpdater;
705+
PRODUCT_BUNDLE_IDENTIFIER = com.bounceconnection.PluginUpdater;
706706
PRODUCT_NAME = PluginUpdater;
707707
SDKROOT = macosx;
708708
SWIFT_VERSION = 5.9;
@@ -721,7 +721,7 @@
721721
"@loader_path/../Frameworks",
722722
);
723723
MACOSX_DEPLOYMENT_TARGET = 14.0;
724-
PRODUCT_BUNDLE_IDENTIFIER = com.tomioueda.PluginUpdaterTests;
724+
PRODUCT_BUNDLE_IDENTIFIER = com.bounceconnection.PluginUpdaterTests;
725725
SDKROOT = macosx;
726726
SWIFT_VERSION = 5.9;
727727
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PluginUpdater.app/Contents/MacOS/PluginUpdater";
@@ -747,7 +747,7 @@
747747
);
748748
MACOSX_DEPLOYMENT_TARGET = 14.0;
749749
MARKETING_VERSION = 1.0.0;
750-
PRODUCT_BUNDLE_IDENTIFIER = com.tomioueda.PluginUpdater;
750+
PRODUCT_BUNDLE_IDENTIFIER = com.bounceconnection.PluginUpdater;
751751
PRODUCT_NAME = PluginUpdater;
752752
SDKROOT = macosx;
753753
SWIFT_VERSION = 5.9;
@@ -885,7 +885,7 @@
885885
"@loader_path/../Frameworks",
886886
);
887887
MACOSX_DEPLOYMENT_TARGET = 14.0;
888-
PRODUCT_BUNDLE_IDENTIFIER = com.tomioueda.PluginUpdaterTests;
888+
PRODUCT_BUNDLE_IDENTIFIER = com.bounceconnection.PluginUpdaterTests;
889889
SDKROOT = macosx;
890890
SWIFT_VERSION = 5.9;
891891
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PluginUpdater.app/Contents/MacOS/PluginUpdater";

PluginUpdater/PluginUpdater/App/PluginUpdaterApp.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ struct PluginUpdaterApp: App {
88
@State private var appState: AppState
99

1010
init() {
11+
PersistenceController.migrateFromOldBundleID()
1112
do {
1213
let container = try PersistenceController.makeContainer()
1314
self.modelContainer = container

PluginUpdater/PluginUpdater/Services/Monitoring/FileSystemMonitor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import CoreServices
44
final class FileSystemMonitor {
55
private var stream: FSEventStreamRef?
66
private let debounceInterval: TimeInterval
7-
private let queue = DispatchQueue(label: "com.tomioueda.PluginUpdater.fsmonitor", qos: .utility)
7+
private let queue = DispatchQueue(label: "com.bounceconnection.PluginUpdater.fsmonitor", qos: .utility)
88
private var pendingDirectories: Set<String> = []
99
private var debounceWorkItem: DispatchWorkItem?
1010
private var monitoredDirectories: [URL] = []

PluginUpdater/PluginUpdater/Services/Persistence/PersistenceController.swift

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,48 @@ import Foundation
22
import SwiftData
33

44
enum PersistenceController {
5+
/// Migrates SwiftData store and UserDefaults from old bundle ID (`com.tomioueda.PluginUpdater`)
6+
/// to new bundle ID (`com.bounceconnection.PluginUpdater`). Safe to call multiple times.
7+
static func migrateFromOldBundleID() {
8+
let fm = FileManager.default
9+
let appSupport = fm.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0]
10+
let oldDir = appSupport.appendingPathComponent("com.tomioueda.PluginUpdater")
11+
let newDir = appSupport.appendingPathComponent("com.bounceconnection.PluginUpdater")
12+
13+
// Move SwiftData store directory if old exists and new doesn't
14+
if fm.fileExists(atPath: oldDir.path) && !fm.fileExists(atPath: newDir.path) {
15+
try? fm.moveItem(at: oldDir, to: newDir)
16+
}
17+
18+
// Migrate UserDefaults (one-time)
19+
if !UserDefaults.standard.bool(forKey: "didMigrateFromOldBundleID") {
20+
if let oldDefaults = UserDefaults(suiteName: "com.tomioueda.PluginUpdater") {
21+
let keysToMigrate = [
22+
Constants.UserDefaultsKeys.scanFrequency,
23+
Constants.UserDefaultsKeys.notificationsEnabled,
24+
Constants.UserDefaultsKeys.manifestURL,
25+
Constants.UserDefaultsKeys.launchAtLogin,
26+
Constants.UserDefaultsKeys.lastScanDate,
27+
Constants.UserDefaultsKeys.hasCompletedOnboarding,
28+
Constants.UserDefaultsKeys.notifyNewPlugins,
29+
Constants.UserDefaultsKeys.notifyUpdatedPlugins,
30+
Constants.UserDefaultsKeys.notifyRemovedPlugins,
31+
Constants.UserDefaultsKeys.projectScanDirectories,
32+
Constants.UserDefaultsKeys.scanProjectsOnLaunch,
33+
Constants.UserDefaultsKeys.monitorProjectDirectories,
34+
Constants.UserDefaultsKeys.debugVerboseLogging,
35+
Constants.UserDefaultsKeys.checkForAppUpdates,
36+
]
37+
for key in keysToMigrate {
38+
if let value = oldDefaults.object(forKey: key) {
39+
UserDefaults.standard.set(value, forKey: key)
40+
}
41+
}
42+
}
43+
UserDefaults.standard.set(true, forKey: "didMigrateFromOldBundleID")
44+
}
45+
}
46+
547
static let modelSchema = Schema([
648
Plugin.self,
749
PluginVersion.self,
@@ -32,7 +74,7 @@ enum PersistenceController {
3274
for: .applicationSupportDirectory,
3375
in: .userDomainMask
3476
).first!
35-
let appDir = appSupport.appendingPathComponent("com.tomioueda.PluginUpdater")
77+
let appDir = appSupport.appendingPathComponent("com.bounceconnection.PluginUpdater")
3678
try? FileManager.default.createDirectory(at: appDir, withIntermediateDirectories: true)
3779
return appDir.appendingPathComponent("PluginUpdater.store")
3880
}

PluginUpdater/PluginUpdater/Utilities/AppLogger.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ final class AppLogger {
77
static let shared = AppLogger()
88

99
/// When true, per-plugin matching details are logged. Off by default.
10-
/// Toggle via `defaults write com.tomioueda.PluginUpdater debugVerboseLogging -bool YES`
10+
/// Toggle via `defaults write com.bounceconnection.PluginUpdater debugVerboseLogging -bool YES`
1111
var verbose: Bool = false
1212

13-
private let osLog = Logger(subsystem: "com.tomioueda.PluginUpdater", category: "app")
14-
private let queue = DispatchQueue(label: "com.tomioueda.PluginUpdater.logger", qos: .utility)
13+
private let osLog = Logger(subsystem: "com.bounceconnection.PluginUpdater", category: "app")
14+
private let queue = DispatchQueue(label: "com.bounceconnection.PluginUpdater.logger", qos: .utility)
1515
private var fileHandle: FileHandle?
1616
private var currentLogDate: String = ""
1717

PluginUpdater/PluginUpdater/Utilities/Constants.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ enum Constants {
3232
}
3333

3434
enum NotificationIdentifiers {
35-
static let pluginInstalled = "com.tomioueda.PluginUpdater.pluginInstalled"
36-
static let pluginUpdated = "com.tomioueda.PluginUpdater.pluginUpdated"
37-
static let pluginRemoved = "com.tomioueda.PluginUpdater.pluginRemoved"
38-
static let scanCompleted = "com.tomioueda.PluginUpdater.scanCompleted"
35+
static let pluginInstalled = "com.bounceconnection.PluginUpdater.pluginInstalled"
36+
static let pluginUpdated = "com.bounceconnection.PluginUpdater.pluginUpdated"
37+
static let pluginRemoved = "com.bounceconnection.PluginUpdater.pluginRemoved"
38+
static let scanCompleted = "com.bounceconnection.PluginUpdater.scanCompleted"
3939
}
4040

4141
enum AssetNames {

PluginUpdater/project.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: PluginUpdater
22
options:
3-
bundleIdPrefix: com.tomioueda
3+
bundleIdPrefix: com.bounceconnection
44
deploymentTarget:
55
macOS: "14.0"
66
xcodeVersion: "16.0"
@@ -22,7 +22,7 @@ targets:
2222
com.apple.security.network.client: true
2323
settings:
2424
base:
25-
PRODUCT_BUNDLE_IDENTIFIER: com.tomioueda.PluginUpdater
25+
PRODUCT_BUNDLE_IDENTIFIER: com.bounceconnection.PluginUpdater
2626
PRODUCT_NAME: PluginUpdater
2727
MARKETING_VERSION: "1.0.0"
2828
CURRENT_PROJECT_VERSION: "1"
@@ -51,7 +51,7 @@ targets:
5151
- target: PluginUpdater
5252
settings:
5353
base:
54-
PRODUCT_BUNDLE_IDENTIFIER: com.tomioueda.PluginUpdaterTests
54+
PRODUCT_BUNDLE_IDENTIFIER: com.bounceconnection.PluginUpdaterTests
5555
SWIFT_VERSION: "5.9"
5656
MACOSX_DEPLOYMENT_TARGET: "14.0"
5757
GENERATE_INFOPLIST_FILE: YES

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,13 @@ PluginUpdater/
100100
Enable verbose per-plugin matching logs:
101101

102102
```bash
103-
defaults write com.tomioueda.PluginUpdater debugVerboseLogging -bool YES
103+
defaults write com.bounceconnection.PluginUpdater debugVerboseLogging -bool YES
104104
```
105105

106106
Logs are written to `~/Library/Logs/PluginUpdater/` (daily rolling, kept 7 days). To disable:
107107

108108
```bash
109-
defaults delete com.tomioueda.PluginUpdater debugVerboseLogging
109+
defaults delete com.bounceconnection.PluginUpdater debugVerboseLogging
110110
```
111111

112112
## License

scripts/build-installer.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ PROJECT_DIR="$REPO_ROOT/PluginUpdater"
1818
BUILD_DIR="$REPO_ROOT/build"
1919

2020
APP_NAME="PluginUpdater"
21-
BUNDLE_ID="com.tomioueda.PluginUpdater"
21+
BUNDLE_ID="com.bounceconnection.PluginUpdater"
2222

2323
# Determine version: prefer CLI arg, then project.yml, then default
2424
if [[ ${1:-} != "" ]]; then

0 commit comments

Comments
 (0)