Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
96dd309
Enable Mac Catalyst: remove LSRequiresIPhoneOS, add ALLOW_TARGET_PLAT…
bisonbet Apr 29, 2026
4f3799c
Fix Mac Catalyst build: llama Catalyst slice + unconditional Info.plist
bisonbet Apr 29, 2026
49ca42b
Fix Mac Catalyst linker and Controls extension embed errors
bisonbet Apr 29, 2026
2adaad7
Document Mac Catalyst llama.xcframework and textual build requirements
bisonbet Apr 29, 2026
f6aec57
Fix llama Catalyst framework: use versioned bundle layout
bisonbet Apr 29, 2026
84130db
Exclude Share Extension from Mac Catalyst embed phase
bisonbet Apr 29, 2026
431cbe3
Exclude Watch App from Mac Catalyst embed phase
bisonbet Apr 29, 2026
adefaf6
Replace NavigationView with NavigationStack in all sheets and fullScr…
bisonbet Apr 29, 2026
2154cf4
Open Mistral console URLs in system browser on Mac Catalyst
bisonbet Apr 29, 2026
88ea633
Fix audio recording on Mac Catalyst
bisonbet Apr 29, 2026
ed79429
Use AVCaptureDevice for microphone permission on Mac Catalyst
bisonbet Apr 29, 2026
c9d01a1
Replace all remaining NavigationView with NavigationStack (Mac Catalyst)
bisonbet Apr 29, 2026
5afe232
Fix llama.cpp Metal crash on quit (Mac Catalyst)
bisonbet Apr 29, 2026
b18bc28
Fix MainActor isolation errors in requestMicPermissionAndRecord
bisonbet Apr 29, 2026
0a87912
Fix nonisolated call to @MainActor requestMicPermissionAndRecord
bisonbet Apr 29, 2026
63dde0b
Suppress AVAudioSession Mach port noise on Mac Catalyst
bisonbet Apr 29, 2026
84efa44
Use AVAudioApplication for mic permission on Mac Catalyst
bisonbet Apr 29, 2026
4616fae
Convert Mac Catalyst sheet views to Form for reliable scrolling
bisonbet Apr 30, 2026
bfab6a9
Address Codex P1 review feedback
bisonbet May 10, 2026
8491201
Rewrite Mac Catalyst recording on AVAudioEngine; add Pause/Resume
bisonbet May 10, 2026
18875d0
Bump to 1.11; remove Mac scroll diagnostic; preserve local AI on setup
bisonbet May 10, 2026
cd1c63f
Update llama.cpp to b9134 with Mac Catalyst slice
bisonbet May 13, 2026
7018d7a
Fix Mac Catalyst build, MLX memory check, and Form button hit targets
bisonbet May 24, 2026
74df918
Move transcript/summary actions to source artifacts
bisonbet May 29, 2026
4ef23ce
Upgrade FluidAudio to 0.14.7 and bump SwiftPM deps
bisonbet May 29, 2026
743135f
Harden credential storage and data handling
bisonbet Jun 1, 2026
f358fb5
Refresh docs for v1.11 and bump SwiftPM deps
bisonbet Jun 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 44 additions & 40 deletions BisonNotes AI/BisonNotes AI.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
1433F5462F7C9E44002AB9D6 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14EA428E2E7F5ECA0059271B /* SwiftUI.framework */; };
1433F5572F7C9E45002AB9D6 /* BisonNotes Watch WidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 1433F5442F7C9E44002AB9D6 /* BisonNotes Watch WidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
1435711D2F2137E1000BFF00 /* Textual in Frameworks */ = {isa = PBXBuildFile; productRef = 1435711C2F2137E1000BFF00 /* Textual */; };
1435735C2F2E92A500E93954 /* BisonNotes Share.appex in Embed Controls Extension */ = {isa = PBXBuildFile; fileRef = 143573522F2E92A500E93954 /* BisonNotes Share.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
1485FEC52E526FB30044121F /* BisonNotes AI Watch App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 1485FEA52E526FB10044121F /* BisonNotes AI Watch App.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
1435735C2F2E92A500E93954 /* BisonNotes Share.appex in Embed Controls Extension */ = {isa = PBXBuildFile; fileRef = 143573522F2E92A500E93954 /* BisonNotes Share.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
1485FEC52E526FB30044121F /* BisonNotes AI Watch App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 1485FEA52E526FB10044121F /* BisonNotes AI Watch App.app */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
1485FED52E5271970044121F /* WatchConnectivity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1485FED42E5271970044121F /* WatchConnectivity.framework */; };
1485FED72E5271AF0044121F /* WatchConnectivity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1485FED62E5271AF0044121F /* WatchConnectivity.framework */; };
1485FEDC2E5272FA0044121F /* WatchRecordingMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1485FED92E5272FA0044121F /* WatchRecordingMessage.swift */; };
Expand All @@ -23,18 +23,18 @@
1485FEDF2E5272FA0044121F /* WatchRecordingMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1485FED92E5272FA0044121F /* WatchRecordingMessage.swift */; };
1485FEE02E5272FA0044121F /* WatchAudioChunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1485FED82E5272FA0044121F /* WatchAudioChunk.swift */; };
1485FEE12E5272FA0044121F /* WatchRecordingState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1485FEDA2E5272FA0044121F /* WatchRecordingState.swift */; };
14B0A0012F80000000BBD2FA /* MLXLLM in Frameworks */ = {isa = PBXBuildFile; productRef = 14B0A0042F80000000BBD2FA /* MLXLLM */; };
14B0A0022F80000000BBD2FA /* MLXLMCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 14B0A0052F80000000BBD2FA /* MLXLMCommon */; };
14EA428D2E7F5ECA0059271B /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14EA428C2E7F5ECA0059271B /* WidgetKit.framework */; };
14EA428F2E7F5ECA0059271B /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 14EA428E2E7F5ECA0059271B /* SwiftUI.framework */; };
14EA42A92E7F66370059271B /* BisonNotes AI ControlsExtension.appex in Embed Controls Extension */ = {isa = PBXBuildFile; fileRef = 14EA428B2E7F5ECA0059271B /* BisonNotes AI ControlsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
14EA42A92E7F66370059271B /* BisonNotes AI ControlsExtension.appex in Embed Controls Extension */ = {isa = PBXBuildFile; fileRef = 14EA428B2E7F5ECA0059271B /* BisonNotes AI ControlsExtension.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
14FA00012F30000000BBD2FA /* FluidAudio in Frameworks */ = {isa = PBXBuildFile; productRef = 14FA00022F30000000BBD2FA /* FluidAudio */; };
14FDF9082E3F8D5600BBD2FA /* AWSBedrock in Frameworks */ = {isa = PBXBuildFile; productRef = 14FDF9072E3F8D5600BBD2FA /* AWSBedrock */; };
14FDF90A2E3F8D5600BBD2FA /* AWSClientRuntime in Frameworks */ = {isa = PBXBuildFile; productRef = 14FDF9092E3F8D5600BBD2FA /* AWSClientRuntime */; };
14FDF90C2E3F8D5600BBD2FA /* AWSS3 in Frameworks */ = {isa = PBXBuildFile; productRef = 14FDF90B2E3F8D5600BBD2FA /* AWSS3 */; };
14FDF90E2E3F8D5600BBD2FA /* AWSTranscribe in Frameworks */ = {isa = PBXBuildFile; productRef = 14FDF90D2E3F8D5600BBD2FA /* AWSTranscribe */; };
14FDF9102E3F8D5600BBD2FA /* AWSTranscribeStreaming in Frameworks */ = {isa = PBXBuildFile; productRef = 14FDF90F2E3F8D5600BBD2FA /* AWSTranscribeStreaming */; };
14FDF9122E3F90FB00BBD2FA /* AWSBedrockRuntime in Frameworks */ = {isa = PBXBuildFile; productRef = 14FDF9112E3F90FB00BBD2FA /* AWSBedrockRuntime */; };
14B0A0012F80000000BBD2FA /* MLXLLM in Frameworks */ = {isa = PBXBuildFile; productRef = 14B0A0042F80000000BBD2FA /* MLXLLM */; };
14B0A0022F80000000BBD2FA /* MLXLMCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 14B0A0052F80000000BBD2FA /* MLXLMCommon */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -891,7 +891,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI.watchkitapp.widget";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
Expand Down Expand Up @@ -923,7 +923,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI.watchkitapp.widget";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
Expand Down Expand Up @@ -955,7 +955,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI.BisonNotes-Share";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand Down Expand Up @@ -985,7 +985,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI.BisonNotes-Share";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand Down Expand Up @@ -1020,7 +1020,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI.watchkitapp";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
Expand Down Expand Up @@ -1054,7 +1054,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI.watchkitapp";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
Expand All @@ -1074,7 +1074,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4W55VW7UXX;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI-Watch-AppTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
Expand All @@ -1094,7 +1094,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4W55VW7UXX;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI-Watch-AppTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
Expand All @@ -1113,7 +1113,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4W55VW7UXX;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI-Watch-AppUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
Expand All @@ -1132,7 +1132,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4W55VW7UXX;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI-Watch-AppUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
Expand Down Expand Up @@ -1270,6 +1270,8 @@
14DBC8642E34F7B600DAD442 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
APS_ENVIRONMENT = development;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
Expand All @@ -1279,7 +1281,7 @@
DEVELOPMENT_TEAM = 4W55VW7UXX;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO;
"INFOPLIST_FILE[sdk=iphone*]" = "BisonNotes AI/Info.plist";
INFOPLIST_FILE = "BisonNotes AI/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "BisonNotes AI";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
Expand All @@ -1291,7 +1293,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI";
PRODUCT_NAME = "BisonNotes AI";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -1307,6 +1309,8 @@
14DBC8652E34F7B600DAD442 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
APS_ENVIRONMENT = production;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
Expand All @@ -1316,7 +1320,7 @@
DEVELOPMENT_TEAM = 4W55VW7UXX;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = NO;
"INFOPLIST_FILE[sdk=iphone*]" = "BisonNotes AI/Info.plist";
INFOPLIST_FILE = "BisonNotes AI/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "BisonNotes AI";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
Expand All @@ -1328,7 +1332,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI";
PRODUCT_NAME = "BisonNotes AI";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -1350,7 +1354,7 @@
DEVELOPMENT_TEAM = 4W55VW7UXX;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.Audio-JournalTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -1373,7 +1377,7 @@
DEVELOPMENT_TEAM = 4W55VW7UXX;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.Audio-JournalTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -1394,7 +1398,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4W55VW7UXX;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.Audio-JournalUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand All @@ -1415,7 +1419,7 @@
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 4W55VW7UXX;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.Audio-JournalUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
Expand Down Expand Up @@ -1449,7 +1453,7 @@
"@executable_path/../../Frameworks",
"@executable_path/../../../../Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI.controls";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
Expand Down Expand Up @@ -1487,7 +1491,7 @@
"@executable_path/../../Frameworks",
"@executable_path/../../../../Frameworks",
);
MARKETING_VERSION = 1.10;
MARKETING_VERSION = 1.11;
PRODUCT_BUNDLE_IDENTIFIER = "Bison-Networking.BisonNotes-AI.controls";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
Expand Down Expand Up @@ -1609,12 +1613,20 @@
kind = branch;
};
};
14B0A0032F80000000BBD2FA /* XCRemoteSwiftPackageReference "mlx-swift-lm" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/ml-explore/mlx-swift-lm/";
requirement = {
kind = upToNextMinorVersion;
minimumVersion = 2.31.3;
};
};
14FA00032F30000000BBD2FA /* XCRemoteSwiftPackageReference "FluidAudio" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/FluidInference/FluidAudio";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 0.7.8;
kind = exactVersion;
version = 0.14.8;
};
};
14FDF9062E3F8D5600BBD2FA /* XCRemoteSwiftPackageReference "aws-sdk-swift" */ = {
Expand All @@ -1625,17 +1637,14 @@
minimumVersion = 1.5.12;
};
};
14B0A0032F80000000BBD2FA /* XCRemoteSwiftPackageReference "mlx-swift-lm" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/ml-explore/mlx-swift-lm/";
requirement = {
kind = upToNextMinorVersion;
minimumVersion = 2.31.3;
};
};
/* End XCRemoteSwiftPackageReference section */

/* Begin XCSwiftPackageProductDependency section */
1435711C2F2137E1000BFF00 /* Textual */ = {
isa = XCSwiftPackageProductDependency;
package = 1435711B2F2137E1000BFF00 /* XCRemoteSwiftPackageReference "textual" */;
productName = Textual;
};
14B0A0042F80000000BBD2FA /* MLXLLM */ = {
isa = XCSwiftPackageProductDependency;
package = 14B0A0032F80000000BBD2FA /* XCRemoteSwiftPackageReference "mlx-swift-lm" */;
Expand All @@ -1646,11 +1655,6 @@
package = 14B0A0032F80000000BBD2FA /* XCRemoteSwiftPackageReference "mlx-swift-lm" */;
productName = MLXLMCommon;
};
1435711C2F2137E1000BFF00 /* Textual */ = {
isa = XCSwiftPackageProductDependency;
package = 1435711B2F2137E1000BFF00 /* XCRemoteSwiftPackageReference "textual" */;
productName = Textual;
};
14FA00022F30000000BBD2FA /* FluidAudio */ = {
isa = XCSwiftPackageProductDependency;
package = 14FA00032F30000000BBD2FA /* XCRemoteSwiftPackageReference "FluidAudio" */;
Expand Down
Loading