Rename app from oAI to Confab

"oAI" reads as easily confused with OpenAI, both visually and in
casual conversation. Renamed to "Confab" throughout: Xcode
target/scheme/bundle ID (com.oai.Confab), Info.plist and Help Book
identity, all user-facing UI text, internal Log subsystem and color
identifiers, localization catalogs (6 languages, including a proper
reworded/retranslated Intel-deprecation notice), Help Book HTML
content, and docs (README/DEVELOPMENT/PRIVACY/SECURITY).

Deliberately cosmetic-only: the on-disk data folder
(~/Library/Application Support/oAI/), database/backup filenames,
Keychain service identifiers, and EncryptionService's key-derivation
inputs are all left untouched so existing conversations, settings,
and stored API keys survive the update with zero migration and no
re-entering credentials. Verified live: a real signed build
successfully decrypted a stored API key and loaded an existing
conversation database after the bundle ID change.

Also includes a small already-completed, previously uncommitted
model-release-date feature (ModelInfo/OpenRouterModels/
OpenRouterProvider/ModelInfoView) that happened to share several
files with this rename.

Gitignored on this branch and updated on disk but not part of this
commit: CLAUDE.md, RELEASE_NOTES.md, and the build*.sh scripts.
This commit is contained in:
2026-08-02 14:58:14 +02:00
parent ae3de3d927
commit 76b58e6fdc
121 changed files with 987 additions and 692 deletions
+42 -38
View File
@@ -22,17 +22,17 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
A550A6622F3B72EA00136F2B /* oAI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = oAI.app; sourceTree = BUILT_PRODUCTS_DIR; };
A586FF5130122589002CFF95 /* oAITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = oAITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
A550A6622F3B72EA00136F2B /* Confab.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Confab.app; sourceTree = BUILT_PRODUCTS_DIR; };
A586FF5130122589002CFF95 /* ConfabTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ConfabTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
911C4D0E69E11B84C61453DC /* Exceptions for "oAI" folder in "oAI" target */ = {
911C4D0E69E11B84C61453DC /* Exceptions for "oAI" folder in "Confab" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = A550A6612F3B72EA00136F2B /* oAI */;
target = A550A6612F3B72EA00136F2B /* Confab */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
@@ -40,7 +40,7 @@
A550A6642F3B72EA00136F2B /* oAI */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
911C4D0E69E11B84C61453DC /* Exceptions for "oAI" folder in "oAI" target */,
911C4D0E69E11B84C61453DC /* Exceptions for "oAI" folder in "Confab" target */,
);
path = oAI;
sourceTree = "<group>";
@@ -84,8 +84,8 @@
A550A6632F3B72EA00136F2B /* Products */ = {
isa = PBXGroup;
children = (
A550A6622F3B72EA00136F2B /* oAI.app */,
A586FF5130122589002CFF95 /* oAITests.xctest */,
A550A6622F3B72EA00136F2B /* Confab.app */,
A586FF5130122589002CFF95 /* ConfabTests.xctest */,
);
name = Products;
sourceTree = "<group>";
@@ -93,9 +93,9 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
A550A6612F3B72EA00136F2B /* oAI */ = {
A550A6612F3B72EA00136F2B /* Confab */ = {
isa = PBXNativeTarget;
buildConfigurationList = A550A66D2F3B72EC00136F2B /* Build configuration list for PBXNativeTarget "oAI" */;
buildConfigurationList = A550A66D2F3B72EC00136F2B /* Build configuration list for PBXNativeTarget "Confab" */;
buildPhases = (
A550A65E2F3B72EA00136F2B /* Sources */,
A550A65F2F3B72EA00136F2B /* Frameworks */,
@@ -108,18 +108,18 @@
fileSystemSynchronizedGroups = (
A550A6642F3B72EA00136F2B /* oAI */,
);
name = oAI;
name = Confab;
packageProductDependencies = (
A550A6812F3B730000136F2B /* GRDB */,
A52B47512F3E45BA004200E2 /* MarkdownUI */,
);
productName = oAI;
productReference = A550A6622F3B72EA00136F2B /* oAI.app */;
productName = Confab;
productReference = A550A6622F3B72EA00136F2B /* Confab.app */;
productType = "com.apple.product-type.application";
};
A586FF5030122589002CFF95 /* oAITests */ = {
A586FF5030122589002CFF95 /* ConfabTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = A586FF5930122589002CFF95 /* Build configuration list for PBXNativeTarget "oAITests" */;
buildConfigurationList = A586FF5930122589002CFF95 /* Build configuration list for PBXNativeTarget "ConfabTests" */;
buildPhases = (
A586FF4D30122589002CFF95 /* Sources */,
A586FF4E30122589002CFF95 /* Frameworks */,
@@ -133,11 +133,11 @@
fileSystemSynchronizedGroups = (
A586FF5230122589002CFF95 /* oAITests */,
);
name = oAITests;
name = ConfabTests;
packageProductDependencies = (
);
productName = oAITests;
productReference = A586FF5130122589002CFF95 /* oAITests.xctest */;
productName = ConfabTests;
productReference = A586FF5130122589002CFF95 /* ConfabTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
@@ -182,8 +182,8 @@
projectDirPath = "";
projectRoot = "";
targets = (
A550A6612F3B72EA00136F2B /* oAI */,
A586FF5030122589002CFF95 /* oAITests */,
A550A6612F3B72EA00136F2B /* Confab */,
A586FF5030122589002CFF95 /* ConfabTests */,
);
};
/* End PBXProject section */
@@ -225,7 +225,7 @@
/* Begin PBXTargetDependency section */
A586FF5630122589002CFF95 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = A550A6612F3B72EA00136F2B /* oAI */;
target = A550A6612F3B72EA00136F2B /* Confab */;
targetProxy = A586FF5530122589002CFF95 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
@@ -358,7 +358,8 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = oAI/oAI.entitlements;
CODE_SIGN_ENTITLEMENTS = oAI/Confab.entitlements;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = YES;
@@ -367,11 +368,12 @@
ENABLE_USER_SELECTED_FILES = readonly;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = oAI/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Confab;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
INFOPLIST_KEY_NSCalendarsFullAccessUsageDescription = "oAI can read and create calendar events when you ask it to, if you enable Calendar access in Settings.";
INFOPLIST_KEY_NSContactsUsageDescription = "oAI can search your contacts when you ask it to, if you enable Contacts access in Settings.";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "oAI can use your current location to answer questions, if you enable Location & Maps access in Settings.";
INFOPLIST_KEY_NSRemindersFullAccessUsageDescription = "oAI can read and create reminders when you ask it to, if you enable Reminders access in Settings.";
INFOPLIST_KEY_NSCalendarsFullAccessUsageDescription = "Confab can read and create calendar events when you ask it to, if you enable Calendar access in Settings.";
INFOPLIST_KEY_NSContactsUsageDescription = "Confab can search your contacts when you ask it to, if you enable Contacts access in Settings.";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "Confab can use your current location to answer questions, if you enable Location & Maps access in Settings.";
INFOPLIST_KEY_NSRemindersFullAccessUsageDescription = "Confab can read and create reminders when you ask it to, if you enable Reminders access in Settings.";
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
@@ -387,7 +389,7 @@
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 26.2;
MARKETING_VERSION = 2.4.4;
PRODUCT_BUNDLE_IDENTIFIER = com.oai.oAI;
PRODUCT_BUNDLE_IDENTIFIER = com.oai.Confab;
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
SDKROOT = auto;
@@ -408,7 +410,8 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = oAI/oAI.entitlements;
CODE_SIGN_ENTITLEMENTS = oAI/Confab.entitlements;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = YES;
@@ -417,11 +420,12 @@
ENABLE_USER_SELECTED_FILES = readonly;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = oAI/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Confab;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
INFOPLIST_KEY_NSCalendarsFullAccessUsageDescription = "oAI can read and create calendar events when you ask it to, if you enable Calendar access in Settings.";
INFOPLIST_KEY_NSContactsUsageDescription = "oAI can search your contacts when you ask it to, if you enable Contacts access in Settings.";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "oAI can use your current location to answer questions, if you enable Location & Maps access in Settings.";
INFOPLIST_KEY_NSRemindersFullAccessUsageDescription = "oAI can read and create reminders when you ask it to, if you enable Reminders access in Settings.";
INFOPLIST_KEY_NSCalendarsFullAccessUsageDescription = "Confab can read and create calendar events when you ask it to, if you enable Calendar access in Settings.";
INFOPLIST_KEY_NSContactsUsageDescription = "Confab can search your contacts when you ask it to, if you enable Contacts access in Settings.";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "Confab can use your current location to answer questions, if you enable Location & Maps access in Settings.";
INFOPLIST_KEY_NSRemindersFullAccessUsageDescription = "Confab can read and create reminders when you ask it to, if you enable Reminders access in Settings.";
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
"INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
@@ -437,7 +441,7 @@
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 26.2;
MARKETING_VERSION = 2.4.4;
PRODUCT_BUNDLE_IDENTIFIER = com.oai.oAI;
PRODUCT_BUNDLE_IDENTIFIER = com.oai.Confab;
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
SDKROOT = auto;
@@ -463,7 +467,7 @@
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 27.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.oai.oAITests;
PRODUCT_BUNDLE_IDENTIFIER = com.oai.ConfabTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -471,7 +475,7 @@
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/oAI.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/oAI";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Confab.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Confab";
};
name = Debug;
};
@@ -485,7 +489,7 @@
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 27.0;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.oai.oAITests;
PRODUCT_BUNDLE_IDENTIFIER = com.oai.ConfabTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -493,7 +497,7 @@
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/oAI.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/oAI";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Confab.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Confab";
};
name = Release;
};
@@ -509,7 +513,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A550A66D2F3B72EC00136F2B /* Build configuration list for PBXNativeTarget "oAI" */ = {
A550A66D2F3B72EC00136F2B /* Build configuration list for PBXNativeTarget "Confab" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A550A66E2F3B72EC00136F2B /* Debug */,
@@ -518,7 +522,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A586FF5930122589002CFF95 /* Build configuration list for PBXNativeTarget "oAITests" */ = {
A586FF5930122589002CFF95 /* Build configuration list for PBXNativeTarget "ConfabTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A586FF5730122589002CFF95 /* Debug */,