chore(app-identity): lowercase bundle id to com.cherryai.cherrystudio

Normalise the bundle id casing from com.cherryai.CherryStudio to
com.cherryai.cherrystudio so it follows the dominant lowercase
convention used by modern AI tools (Anthropic Claude, OpenAI Codex,
Raycast, Docker) and the reverse-DNS norm. macOS LaunchServices is
case-insensitive, so this is a no-op on existing installs - bundle-id
bound state stays as it was after 4439d3b28, and no new breaking-changes
entry is needed.

Touches the same five definition points as the original rebrand
(electron-builder appId, notarize appBundleId, AppUserModelID, selection
self-detection, preview workflow replaceAll/appId) plus the
breaking-changes doc body. The doc's historical commit-subject reference
for 4439d3b28 deliberately retains its original PascalCase to remain a
faithful quote of that commit's subject.
This commit is contained in:
fullex
2026-05-27 21:43:06 -07:00
parent 2207d7d2c9
commit cc51ba36ad
6 changed files with 9 additions and 9 deletions

View File

@@ -122,20 +122,20 @@ jobs:
path: 'electron-builder.yml',
replace: (content) =>
content
.replace(/^appId: .+$/m, 'appId: com.cherryai.CherryStudio.preview')
.replace(/^appId: .+$/m, 'appId: com.cherryai.cherrystudio.preview')
.replace(/^productName: .+$/m, 'productName: Cherry Studio Next')
},
{
path: 'scripts/notarize.js',
replace: (content) => content.replaceAll('com.cherryai.CherryStudio', 'com.cherryai.CherryStudio.preview')
replace: (content) => content.replaceAll('com.cherryai.cherrystudio', 'com.cherryai.cherrystudio.preview')
},
{
path: 'src/main/index.ts',
replace: (content) => content.replaceAll('com.cherryai.CherryStudio', 'com.cherryai.CherryStudio.preview')
replace: (content) => content.replaceAll('com.cherryai.cherrystudio', 'com.cherryai.cherrystudio.preview')
},
{
path: 'src/main/services/selection/SelectionService.ts',
replace: (content) => content.replaceAll('com.cherryai.CherryStudio', 'com.cherryai.CherryStudio.preview')
replace: (content) => content.replaceAll('com.cherryai.cherrystudio', 'com.cherryai.cherrystudio.preview')
}
]

View File

@@ -1,4 +1,4 @@
appId: com.cherryai.CherryStudio
appId: com.cherryai.cherrystudio
productName: Cherry Studio
electronLanguages:
- zh-CN

View File

@@ -15,7 +15,7 @@ exports.default = async function notarizing(context) {
await notarize({
appPath,
appBundleId: 'com.cherryai.CherryStudio',
appBundleId: 'com.cherryai.cherrystudio',
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_APP_SPECIFIC_PASSWORD,
teamId: process.env.APPLE_TEAM_ID

View File

@@ -45,7 +45,7 @@ const startApp = async () => {
// app's notifications, taskbar icon grouping, and Jump Lists (no-op on macOS/Linux).
// Must run before any window is created or notification fires, hence after the
// migration gate returns and before lifecycle bootstrap.
electronApp.setAppUserModelId('com.cherryai.CherryStudio')
electronApp.setAppUserModelId('com.cherryai.cherrystudio')
// Start lifecycle (BeforeReady runs parallel with app.whenReady)
application.registerAll(serviceList)

View File

@@ -570,7 +570,7 @@ export class SelectionService extends BaseService implements Activatable {
// [macOS] a hacky way
// when set `skipTransformProcessType: true`, if the selection is in self app, it will make the selection canceled after toolbar showing
// so we just don't set `skipTransformProcessType: true` when in self app
const isSelf = ['com.github.Electron', 'com.cherryai.CherryStudio'].includes(programName)
const isSelf = ['com.github.Electron', 'com.cherryai.cherrystudio'].includes(programName)
if (!isSelf) {
// [macOS] an ugly hacky way

View File

@@ -8,7 +8,7 @@ date: 2026-05-27
## What changed
The application's macOS bundle identifier was renamed from `com.kangfenmao.CherryStudio` to `com.cherryai.CherryStudio` as part of the v2 identity rebrand. The user-visible `productName` (`Cherry Studio`) is unchanged on every platform, and so is the `cherrystudio://` URL scheme name itself.
The application's macOS bundle identifier was renamed from `com.kangfenmao.CherryStudio` to `com.cherryai.cherrystudio` as part of the v2 identity rebrand. The user-visible `productName` (`Cherry Studio`) is unchanged on every platform, and so is the `cherrystudio://` URL scheme name itself.
User data is preserved automatically. Electron's `userData` directory is keyed by `productName` (`~/Library/Application Support/Cherry Studio`), not by bundle id, so v1's SQLite database, preferences, and cache files are picked up by v2 on first launch without any migration step.