From 8a68506fcb5f7388330d05c200dff5158c2d0348 Mon Sep 17 00:00:00 2001 From: Ashlee Radka Date: Sun, 22 Feb 2026 15:57:28 -0500 Subject: [PATCH 1/4] fix: regenerate xcodeproj and add xcodegen automation Regenerate the iOS xcodeproj to include TwilioSettingsSection.swift which was missing after the QR pairing PR merge. Add two layers of protection against stale xcodeproj files: - Pre-commit hook: auto-runs xcodegen when iOS source files are added/deleted/renamed or project.yml changes - CI check: verifies xcodeproj matches xcodegen output before building Co-Authored-By: Claude Opus 4.6 --- .githooks/pre-commit | 38 +++++++++++++++++++ .github/workflows/ci-ios.yml | 12 ++++++ .../project.pbxproj | 4 ++ 3 files changed, 54 insertions(+) diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 692bcbae44..4230f65f20 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -449,4 +449,42 @@ if [ $IPC_CHANGED -eq 1 ]; then fi fi +# --- XcodeGen auto-regeneration check --- +# When iOS source files are added/deleted/renamed, or project.yml changes, +# regenerate the xcodeproj so it stays in sync. + +XCODEGEN_NEEDED=0 + +# Check for project.yml changes (any modification) +if git diff --cached --name-only -z | tr '\0' '\n' | grep -q '^clients/ios/project\.yml$'; then + XCODEGEN_NEEDED=1 +fi + +# Check for added/deleted/renamed files under iOS source directories +if [ $XCODEGEN_NEEDED -eq 0 ]; then + if git diff --cached --name-only --diff-filter=ADR -z | tr '\0' '\n' | grep -qE '^clients/ios/(App|Views|Resources|Tests)/'; then + XCODEGEN_NEEDED=1 + fi +fi + +if [ $XCODEGEN_NEEDED -eq 1 ]; then + echo "🔍 iOS source structure changed — regenerating xcodeproj..." + + XCODEGEN="${XCODEGEN:-$(command -v xcodegen 2>/dev/null || echo "")}" + if [ -z "$XCODEGEN" ] || [ ! -x "$XCODEGEN" ]; then + echo -e "${YELLOW}⚠️ xcodegen not found — skipping xcodeproj regeneration${NC}" + echo " Install xcodegen (brew install xcodegen) or run 'cd clients/ios && xcodegen' manually." + else + if (cd clients/ios && "$XCODEGEN" --quiet) 2>/dev/null; then + git add clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj + echo "✅ xcodeproj regenerated and staged" + else + echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + echo -e "${RED}xcodegen failed! Fix project.yml and try again.${NC}" + echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + exit 1 + fi + fi +fi + exit 0 diff --git a/.github/workflows/ci-ios.yml b/.github/workflows/ci-ios.yml index 2150e09302..9c4e83a7f3 100644 --- a/.github/workflows/ci-ios.yml +++ b/.github/workflows/ci-ios.yml @@ -20,6 +20,18 @@ jobs: - name: Select Xcode 16.2 run: sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer + - name: Install XcodeGen + run: brew install xcodegen + + - name: Verify xcodeproj is up to date + working-directory: clients/ios + run: | + xcodegen + if ! git diff --exit-code vellum-assistant-ios.xcodeproj/project.pbxproj; then + echo "::error::xcodeproj is out of date. Run 'cd clients/ios && xcodegen' and commit the result." + exit 1 + fi + - name: Build for simulator working-directory: clients/ios run: ./build.sh diff --git a/clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj b/clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj index 40ffdf9101..abe653ed35 100644 --- a/clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj +++ b/clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 135F581D6EE960123CCFCEEB /* VellumAssistantShared in Frameworks */ = {isa = PBXBuildFile; productRef = 134BF33544AE5D6EE7EE692C /* VellumAssistantShared */; }; 18827F7B264DFB838AAA2B54 /* DateFormatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1600BF4851A930657A9F04 /* DateFormatting.swift */; }; 2332D9CD114436614241F846 /* IdentityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6469D4E238ADC7A9CCCD3F0E /* IdentityView.swift */; }; + 26B6461D4F6C57E492336574 /* TwilioSettingsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379C90CE8247D133535635FB /* TwilioSettingsSection.swift */; }; 31D0C2CC725EE57E9F593A72 /* ChatTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51A38AEC9FF8D2DC8C62800C /* ChatTabView.swift */; }; 5412498DD7C6C6B4CF7477CE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A722220881E67C353DFE12 /* AppDelegate.swift */; }; 5923262CDB1AEBE0C2118808 /* IOSThreadStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06CFCCFEF68D99FFDAC92204 /* IOSThreadStore.swift */; }; @@ -54,6 +55,7 @@ 2CA6B4E578A6F678E49599B9 /* SchedulesSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SchedulesSection.swift; sourceTree = ""; }; 3099C4A4B1BEA0FFD8F46692 /* PermissionRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionRowView.swift; sourceTree = ""; }; 3483675C469B0B8354AC5D8D /* RemindersSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemindersSection.swift; sourceTree = ""; }; + 379C90CE8247D133535635FB /* TwilioSettingsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwilioSettingsSection.swift; sourceTree = ""; }; 43C31D43ED8346DA9D2FC500 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 46C6F32737D9EE793FE0CC3F /* InlineVideoEmbedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlineVideoEmbedView.swift; sourceTree = ""; }; 505C277A9ED9027CA064DB10 /* WorkspaceFileSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceFileSheet.swift; sourceTree = ""; }; @@ -203,6 +205,7 @@ 3483675C469B0B8354AC5D8D /* RemindersSection.swift */, 2CA6B4E578A6F678E49599B9 /* SchedulesSection.swift */, 907F415E8AE00310C58BD65D /* TrustRulesSection.swift */, + 379C90CE8247D133535635FB /* TwilioSettingsSection.swift */, ); path = Settings; sourceTree = ""; @@ -328,6 +331,7 @@ 0C99A7C29015A2B760556C56 /* ThreadListView.swift in Sources */, B4C5F5AC96FBFFFA81DF9F09 /* TitleGenerator.swift in Sources */, 864657EF8C4B63FA518F6174 /* TrustRulesSection.swift in Sources */, + 26B6461D4F6C57E492336574 /* TwilioSettingsSection.swift in Sources */, 746CF910BAB551E763470897 /* UserDefaultsKeys.swift in Sources */, 6419DA2F54DB6F703BD1DF3B /* VellumAssistantApp.swift in Sources */, 764D7E889BD013AFB53EC5B7 /* VellumIntents.swift in Sources */, From 2d811874dac1fafd00380b4203e60d5ab36d817e Mon Sep 17 00:00:00 2001 From: Ashlee Radka Date: Sun, 22 Feb 2026 16:01:04 -0500 Subject: [PATCH 2/4] fix: stage and check entire xcodeproj directory, not just pbxproj xcodegen also generates scheme files, workspace data, and other tracked files inside the xcodeproj. Stage the whole directory in the pre-commit hook and diff the whole directory in CI to catch all drift. Co-Authored-By: Claude Opus 4.6 --- .githooks/pre-commit | 2 +- .github/workflows/ci-ios.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 4230f65f20..4562b82340 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -476,7 +476,7 @@ if [ $XCODEGEN_NEEDED -eq 1 ]; then echo " Install xcodegen (brew install xcodegen) or run 'cd clients/ios && xcodegen' manually." else if (cd clients/ios && "$XCODEGEN" --quiet) 2>/dev/null; then - git add clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj + git add clients/ios/vellum-assistant-ios.xcodeproj/ echo "✅ xcodeproj regenerated and staged" else echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" diff --git a/.github/workflows/ci-ios.yml b/.github/workflows/ci-ios.yml index 9c4e83a7f3..aa031cba3b 100644 --- a/.github/workflows/ci-ios.yml +++ b/.github/workflows/ci-ios.yml @@ -27,7 +27,7 @@ jobs: working-directory: clients/ios run: | xcodegen - if ! git diff --exit-code vellum-assistant-ios.xcodeproj/project.pbxproj; then + if ! git diff --exit-code vellum-assistant-ios.xcodeproj/; then echo "::error::xcodeproj is out of date. Run 'cd clients/ios && xcodegen' and commit the result." exit 1 fi From f722999ba4ccec293f40aa3d692abe0e22ace2c2 Mon Sep 17 00:00:00 2001 From: Ashlee Radka Date: Sun, 22 Feb 2026 16:26:31 -0500 Subject: [PATCH 3/4] fix: gitignore xcodeproj and generate on-the-fly via xcodegen Instead of committing the generated xcodeproj and automating sync, eliminate the staleness problem entirely: gitignore the xcodeproj and have build.sh generate it fresh from project.yml before every build. - Add clients/ios/vellum-assistant-ios.xcodeproj/ to .gitignore - Remove xcodeproj from git tracking (4 files) - Add xcodegen generation step to build.sh (runs before xcodebuild) - Add xcodegen install to CI workflow (build.sh handles generation) - Remove pre-commit xcodegen hook (no longer needed) Co-Authored-By: Claude Opus 4.6 --- .githooks/pre-commit | 38 -- .github/workflows/ci-ios.yml | 9 - .gitignore | 1 + clients/ios/build.sh | 14 +- .../project.pbxproj | 602 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/swiftpm/Package.resolved | 15 - .../xcschemes/VellumAssistantIOS.xcscheme | 106 --- 8 files changed, 14 insertions(+), 778 deletions(-) delete mode 100644 clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj delete mode 100644 clients/ios/vellum-assistant-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 clients/ios/vellum-assistant-ios.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved delete mode 100644 clients/ios/vellum-assistant-ios.xcodeproj/xcshareddata/xcschemes/VellumAssistantIOS.xcscheme diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 4562b82340..692bcbae44 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -449,42 +449,4 @@ if [ $IPC_CHANGED -eq 1 ]; then fi fi -# --- XcodeGen auto-regeneration check --- -# When iOS source files are added/deleted/renamed, or project.yml changes, -# regenerate the xcodeproj so it stays in sync. - -XCODEGEN_NEEDED=0 - -# Check for project.yml changes (any modification) -if git diff --cached --name-only -z | tr '\0' '\n' | grep -q '^clients/ios/project\.yml$'; then - XCODEGEN_NEEDED=1 -fi - -# Check for added/deleted/renamed files under iOS source directories -if [ $XCODEGEN_NEEDED -eq 0 ]; then - if git diff --cached --name-only --diff-filter=ADR -z | tr '\0' '\n' | grep -qE '^clients/ios/(App|Views|Resources|Tests)/'; then - XCODEGEN_NEEDED=1 - fi -fi - -if [ $XCODEGEN_NEEDED -eq 1 ]; then - echo "🔍 iOS source structure changed — regenerating xcodeproj..." - - XCODEGEN="${XCODEGEN:-$(command -v xcodegen 2>/dev/null || echo "")}" - if [ -z "$XCODEGEN" ] || [ ! -x "$XCODEGEN" ]; then - echo -e "${YELLOW}⚠️ xcodegen not found — skipping xcodeproj regeneration${NC}" - echo " Install xcodegen (brew install xcodegen) or run 'cd clients/ios && xcodegen' manually." - else - if (cd clients/ios && "$XCODEGEN" --quiet) 2>/dev/null; then - git add clients/ios/vellum-assistant-ios.xcodeproj/ - echo "✅ xcodeproj regenerated and staged" - else - echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo -e "${RED}xcodegen failed! Fix project.yml and try again.${NC}" - echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - exit 1 - fi - fi -fi - exit 0 diff --git a/.github/workflows/ci-ios.yml b/.github/workflows/ci-ios.yml index aa031cba3b..fde3929cff 100644 --- a/.github/workflows/ci-ios.yml +++ b/.github/workflows/ci-ios.yml @@ -23,15 +23,6 @@ jobs: - name: Install XcodeGen run: brew install xcodegen - - name: Verify xcodeproj is up to date - working-directory: clients/ios - run: | - xcodegen - if ! git diff --exit-code vellum-assistant-ios.xcodeproj/; then - echo "::error::xcodeproj is out of date. Run 'cd clients/ios && xcodegen' and commit the result." - exit 1 - fi - - name: Build for simulator working-directory: clients/ios run: ./build.sh diff --git a/.gitignore b/.gitignore index 567e7a373c..2f459dbfbb 100644 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,7 @@ yarn-error.log* DerivedData/ **/Library/Logs/CoreSimulator/ .build-ios/ +clients/ios/vellum-assistant-ios.xcodeproj/ # drizzle web/drizzle/ diff --git a/clients/ios/build.sh b/clients/ios/build.sh index 5d1b2dc643..0c5d5f7acb 100755 --- a/clients/ios/build.sh +++ b/clients/ios/build.sh @@ -16,11 +16,13 @@ set -euo pipefail # DISPLAY_VERSION Override CFBundleShortVersionString (default: from Package.swift) # BUILD_VERSION Override CFBundleVersion (default: 1) # +# Prerequisites: +# xcodegen (brew install xcodegen) — the xcodeproj is generated on-the-fly +# # Migration notes: # - Use `open clients/ios/vellum-assistant-ios.xcodeproj` (not Package.swift) # - After switching: rm -rf ~/Library/Developer/Xcode/DerivedData/*vellum* # - `swift build --product vellum-assistant-ios` no longer works — use xcodebuild -# - XcodeGen only needed when project structure changes: cd ios && xcodegen # ── DEVELOPER_DIR ────────────────────────────────────────────────────── if [ -z "${DEVELOPER_DIR:-}" ]; then @@ -39,6 +41,16 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" CLIENTS_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" DIST_DIR="$SCRIPT_DIR/dist" +# ── Generate xcodeproj ──────────────────────────────────────────────── +# Always regenerate from project.yml so the xcodeproj is never stale. +if command -v xcodegen >/dev/null 2>&1; then + echo "Regenerating xcodeproj from project.yml..." + (cd "$SCRIPT_DIR" && xcodegen --quiet) +else + echo "ERROR: xcodegen not found. Install with: brew install xcodegen" + exit 1 +fi + # ── Configuration ────────────────────────────────────────────────────── SCHEME="VellumAssistantIOS" PROJECT="$SCRIPT_DIR/vellum-assistant-ios.xcodeproj" diff --git a/clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj b/clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj deleted file mode 100644 index abe653ed35..0000000000 --- a/clients/ios/vellum-assistant-ios.xcodeproj/project.pbxproj +++ /dev/null @@ -1,602 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXBuildFile section */ - 0AF1A9F71B5BCD3C5CDB591A /* ConnectionSettingsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE61E2C6D294D559BDDB2003 /* ConnectionSettingsSection.swift */; }; - 0C99A7C29015A2B760556C56 /* ThreadListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97E0B2314721CE2B9E778D16 /* ThreadListView.swift */; }; - 135F581D6EE960123CCFCEEB /* VellumAssistantShared in Frameworks */ = {isa = PBXBuildFile; productRef = 134BF33544AE5D6EE7EE692C /* VellumAssistantShared */; }; - 18827F7B264DFB838AAA2B54 /* DateFormatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1600BF4851A930657A9F04 /* DateFormatting.swift */; }; - 2332D9CD114436614241F846 /* IdentityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6469D4E238ADC7A9CCCD3F0E /* IdentityView.swift */; }; - 26B6461D4F6C57E492336574 /* TwilioSettingsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379C90CE8247D133535635FB /* TwilioSettingsSection.swift */; }; - 31D0C2CC725EE57E9F593A72 /* ChatTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51A38AEC9FF8D2DC8C62800C /* ChatTabView.swift */; }; - 5412498DD7C6C6B4CF7477CE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A722220881E67C353DFE12 /* AppDelegate.swift */; }; - 5923262CDB1AEBE0C2118808 /* IOSThreadStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06CFCCFEF68D99FFDAC92204 /* IOSThreadStore.swift */; }; - 59457CBF1DEB60A8C299B7DA /* QRScannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D67321AD99D3E3C4399DF0 /* QRScannerView.swift */; }; - 5C6DE39F8210A78D484071A4 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C31D43ED8346DA9D2FC500 /* SceneDelegate.swift */; }; - 6419DA2F54DB6F703BD1DF3B /* VellumAssistantApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736A766CE9C9D8326A1EBDA5 /* VellumAssistantApp.swift */; }; - 70294FBE9E2A2B4F05A54BF0 /* ThreadLifecycleIOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB54EB0319A569FD1CF4B13B /* ThreadLifecycleIOSTests.swift */; }; - 746CF910BAB551E763470897 /* UserDefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = B375E55F93CDE8E09476F460 /* UserDefaultsKeys.swift */; }; - 764D7E889BD013AFB53EC5B7 /* VellumIntents.swift in Sources */ = {isa = PBXBuildFile; fileRef = F63F4587FF04E8540849A2A8 /* VellumIntents.swift */; }; - 786CB3EF2E6BD4A20821168F /* SchedulesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CA6B4E578A6F678E49599B9 /* SchedulesSection.swift */; }; - 7B4CE559E79D5A61D91725B6 /* ChatViewModelIOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF70C2471B1A4D9574FC218B /* ChatViewModelIOSTests.swift */; }; - 7F96B79FD8BD30F7E0833168 /* InlineVideoEmbedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C6F32737D9EE793FE0CC3F /* InlineVideoEmbedView.swift */; }; - 831E2260278404A3AA07ECCB /* MessageMediaEmbedsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6DA4FDE9AA57C723CC06AA /* MessageMediaEmbedsView.swift */; }; - 836EA14C137EA48A214A519E /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFA3496A6F3D741B4690BB86 /* LoginView.swift */; }; - 864657EF8C4B63FA518F6174 /* TrustRulesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 907F415E8AE00310C58BD65D /* TrustRulesSection.swift */; }; - 88E91BC08EF99C6D68C08BF9 /* background.png in Resources */ = {isa = PBXBuildFile; fileRef = DB16B16FAD390171DB879B88 /* background.png */; }; - 94892E15EB458399785C9B2B /* WorkspaceFileSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 505C277A9ED9027CA064DB10 /* WorkspaceFileSheet.swift */; }; - 9E1F06F1B7B31D86F3BE2815 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F67E8033119EC7F1089E8688 /* Assets.xcassets */; }; - A119B744168CE1EE3B510EB9 /* VellumAssistantShared in Frameworks */ = {isa = PBXBuildFile; productRef = CB40BCA6E5FE59FA29F19979 /* VellumAssistantShared */; }; - AADDAC2861DD3CB70D50C6AB /* InputBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A1EFD5A3C08E7AD764FB62F /* InputBarView.swift */; }; - AF2F41087A86DE1728E31FDF /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA17A2DA662CD75C73E4726C /* SettingsView.swift */; }; - B4C5F5AC96FBFFFA81DF9F09 /* TitleGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BFF3D4B4A9D5E1C99AD1ADB /* TitleGenerator.swift */; }; - B61091E975453A5D9A073D5B /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEAAA98AE5EB03645C49AA68 /* OnboardingView.swift */; }; - BF12CF5ED5910C4B586B2B98 /* AttachmentFlowIOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F94E87577A883B761C4F141C /* AttachmentFlowIOSTests.swift */; }; - C4305A05FD834E67C287D60B /* RemindersSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3483675C469B0B8354AC5D8D /* RemindersSection.swift */; }; - C5B94F611BD02D1F4F6B4298 /* HomeBaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E566C15A0B4BC68B2692544F /* HomeBaseView.swift */; }; - CDA0EECEB230A4965A7161B6 /* ChatContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E31353C3EFE9A27EF0E654 /* ChatContentView.swift */; }; - CDE68996EC77DAA45CF933A2 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F835A2D424DED22906123993 /* ContentView.swift */; }; - E82000F70C38CD07957C2F0F /* PermissionRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3099C4A4B1BEA0FFD8F46692 /* PermissionRowView.swift */; }; - EAC778C46C68008399873E3E /* ChatTranscriptFormatterIOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDED15E4C12EADF58BD0CA16 /* ChatTranscriptFormatterIOSTests.swift */; }; - EC4B5B7BB9057BCDF63474B4 /* QRPairingSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75ADAEA6F825C35354C0A2E6 /* QRPairingSheet.swift */; }; - F6E66C2F942C26A210459312 /* IntegrationsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8029FFBAC7A74E1EADB0F0B8 /* IntegrationsSection.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 06CFCCFEF68D99FFDAC92204 /* IOSThreadStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOSThreadStore.swift; sourceTree = ""; }; - 10E31353C3EFE9A27EF0E654 /* ChatContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatContentView.swift; sourceTree = ""; }; - 24A722220881E67C353DFE12 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 2A1EFD5A3C08E7AD764FB62F /* InputBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputBarView.swift; sourceTree = ""; }; - 2CA6B4E578A6F678E49599B9 /* SchedulesSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SchedulesSection.swift; sourceTree = ""; }; - 3099C4A4B1BEA0FFD8F46692 /* PermissionRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionRowView.swift; sourceTree = ""; }; - 3483675C469B0B8354AC5D8D /* RemindersSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemindersSection.swift; sourceTree = ""; }; - 379C90CE8247D133535635FB /* TwilioSettingsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwilioSettingsSection.swift; sourceTree = ""; }; - 43C31D43ED8346DA9D2FC500 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 46C6F32737D9EE793FE0CC3F /* InlineVideoEmbedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InlineVideoEmbedView.swift; sourceTree = ""; }; - 505C277A9ED9027CA064DB10 /* WorkspaceFileSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkspaceFileSheet.swift; sourceTree = ""; }; - 51A38AEC9FF8D2DC8C62800C /* ChatTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTabView.swift; sourceTree = ""; }; - 6469D4E238ADC7A9CCCD3F0E /* IdentityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdentityView.swift; sourceTree = ""; }; - 736A766CE9C9D8326A1EBDA5 /* VellumAssistantApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VellumAssistantApp.swift; sourceTree = ""; }; - 75ADAEA6F825C35354C0A2E6 /* QRPairingSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRPairingSheet.swift; sourceTree = ""; }; - 7A76C5B0E7B697B57063BC75 /* clients */ = {isa = PBXFileReference; lastKnownFileType = folder; name = clients; path = ..; sourceTree = SOURCE_ROOT; }; - 7BFF3D4B4A9D5E1C99AD1ADB /* TitleGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleGenerator.swift; sourceTree = ""; }; - 8029FFBAC7A74E1EADB0F0B8 /* IntegrationsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntegrationsSection.swift; sourceTree = ""; }; - 8303637A9FF05FBAB7BFB714 /* vellum-assistant-ios.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "vellum-assistant-ios.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 89D67321AD99D3E3C4399DF0 /* QRScannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRScannerView.swift; sourceTree = ""; }; - 907F415E8AE00310C58BD65D /* TrustRulesSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrustRulesSection.swift; sourceTree = ""; }; - 97E0B2314721CE2B9E778D16 /* ThreadListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadListView.swift; sourceTree = ""; }; - AE61E2C6D294D559BDDB2003 /* ConnectionSettingsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionSettingsSection.swift; sourceTree = ""; }; - B375E55F93CDE8E09476F460 /* UserDefaultsKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsKeys.swift; sourceTree = ""; }; - BA17A2DA662CD75C73E4726C /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; - CC1600BF4851A930657A9F04 /* DateFormatting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateFormatting.swift; sourceTree = ""; }; - D9AE48681C1FCA9489456682 /* vellum-assistant-iosTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "vellum-assistant-iosTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - DA6DA4FDE9AA57C723CC06AA /* MessageMediaEmbedsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageMediaEmbedsView.swift; sourceTree = ""; }; - DB16B16FAD390171DB879B88 /* background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = background.png; sourceTree = ""; }; - DDED15E4C12EADF58BD0CA16 /* ChatTranscriptFormatterIOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTranscriptFormatterIOSTests.swift; sourceTree = ""; }; - E566C15A0B4BC68B2692544F /* HomeBaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeBaseView.swift; sourceTree = ""; }; - EEAAA98AE5EB03645C49AA68 /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; }; - EFA3496A6F3D741B4690BB86 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; - F63F4587FF04E8540849A2A8 /* VellumIntents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VellumIntents.swift; sourceTree = ""; }; - F67E8033119EC7F1089E8688 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - F835A2D424DED22906123993 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - F94E87577A883B761C4F141C /* AttachmentFlowIOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentFlowIOSTests.swift; sourceTree = ""; }; - FB54EB0319A569FD1CF4B13B /* ThreadLifecycleIOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadLifecycleIOSTests.swift; sourceTree = ""; }; - FF70C2471B1A4D9574FC218B /* ChatViewModelIOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatViewModelIOSTests.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 2D33DA4089E6C261F0C8FC37 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A119B744168CE1EE3B510EB9 /* VellumAssistantShared in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C628BC9D91A9AA06BA791981 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 135F581D6EE960123CCFCEEB /* VellumAssistantShared in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 046D2CFC530250DF28EBE69E /* Products */ = { - isa = PBXGroup; - children = ( - 8303637A9FF05FBAB7BFB714 /* vellum-assistant-ios.app */, - D9AE48681C1FCA9489456682 /* vellum-assistant-iosTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 298F315EE5104312DEB3EDDD /* Views */ = { - isa = PBXGroup; - children = ( - 10E31353C3EFE9A27EF0E654 /* ChatContentView.swift */, - 51A38AEC9FF8D2DC8C62800C /* ChatTabView.swift */, - F835A2D424DED22906123993 /* ContentView.swift */, - E566C15A0B4BC68B2692544F /* HomeBaseView.swift */, - 6469D4E238ADC7A9CCCD3F0E /* IdentityView.swift */, - 46C6F32737D9EE793FE0CC3F /* InlineVideoEmbedView.swift */, - 2A1EFD5A3C08E7AD764FB62F /* InputBarView.swift */, - EFA3496A6F3D741B4690BB86 /* LoginView.swift */, - DA6DA4FDE9AA57C723CC06AA /* MessageMediaEmbedsView.swift */, - EEAAA98AE5EB03645C49AA68 /* OnboardingView.swift */, - 89D67321AD99D3E3C4399DF0 /* QRScannerView.swift */, - BA17A2DA662CD75C73E4726C /* SettingsView.swift */, - 97E0B2314721CE2B9E778D16 /* ThreadListView.swift */, - 505C277A9ED9027CA064DB10 /* WorkspaceFileSheet.swift */, - FB5798D360E6366C80A4D2AF /* Settings */, - ); - path = Views; - sourceTree = ""; - }; - 5F57305362B8D161CDE1DEBB /* Packages */ = { - isa = PBXGroup; - children = ( - 7A76C5B0E7B697B57063BC75 /* clients */, - ); - name = Packages; - sourceTree = ""; - }; - 655D67630EC1BF07378337C3 /* App */ = { - isa = PBXGroup; - children = ( - 24A722220881E67C353DFE12 /* AppDelegate.swift */, - CC1600BF4851A930657A9F04 /* DateFormatting.swift */, - 06CFCCFEF68D99FFDAC92204 /* IOSThreadStore.swift */, - 43C31D43ED8346DA9D2FC500 /* SceneDelegate.swift */, - 7BFF3D4B4A9D5E1C99AD1ADB /* TitleGenerator.swift */, - B375E55F93CDE8E09476F460 /* UserDefaultsKeys.swift */, - 736A766CE9C9D8326A1EBDA5 /* VellumAssistantApp.swift */, - F63F4587FF04E8540849A2A8 /* VellumIntents.swift */, - ); - path = App; - sourceTree = ""; - }; - 7CF82E495286FB202D99F6A8 = { - isa = PBXGroup; - children = ( - 655D67630EC1BF07378337C3 /* App */, - 5F57305362B8D161CDE1DEBB /* Packages */, - 8B35A840DD536D7B431455CA /* Resources */, - BA2814BA0618FB00F30658B5 /* Tests */, - 298F315EE5104312DEB3EDDD /* Views */, - 046D2CFC530250DF28EBE69E /* Products */, - ); - sourceTree = ""; - }; - 8B35A840DD536D7B431455CA /* Resources */ = { - isa = PBXGroup; - children = ( - F67E8033119EC7F1089E8688 /* Assets.xcassets */, - DB16B16FAD390171DB879B88 /* background.png */, - ); - path = Resources; - sourceTree = ""; - }; - BA2814BA0618FB00F30658B5 /* Tests */ = { - isa = PBXGroup; - children = ( - F94E87577A883B761C4F141C /* AttachmentFlowIOSTests.swift */, - DDED15E4C12EADF58BD0CA16 /* ChatTranscriptFormatterIOSTests.swift */, - FF70C2471B1A4D9574FC218B /* ChatViewModelIOSTests.swift */, - FB54EB0319A569FD1CF4B13B /* ThreadLifecycleIOSTests.swift */, - ); - path = Tests; - sourceTree = ""; - }; - FB5798D360E6366C80A4D2AF /* Settings */ = { - isa = PBXGroup; - children = ( - AE61E2C6D294D559BDDB2003 /* ConnectionSettingsSection.swift */, - 8029FFBAC7A74E1EADB0F0B8 /* IntegrationsSection.swift */, - 3099C4A4B1BEA0FFD8F46692 /* PermissionRowView.swift */, - 75ADAEA6F825C35354C0A2E6 /* QRPairingSheet.swift */, - 3483675C469B0B8354AC5D8D /* RemindersSection.swift */, - 2CA6B4E578A6F678E49599B9 /* SchedulesSection.swift */, - 907F415E8AE00310C58BD65D /* TrustRulesSection.swift */, - 379C90CE8247D133535635FB /* TwilioSettingsSection.swift */, - ); - path = Settings; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 09802F89BF0B2C118CAF8452 /* vellum-assistant-ios */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4150CE19AB671F4284B39416 /* Build configuration list for PBXNativeTarget "vellum-assistant-ios" */; - buildPhases = ( - 13647ED4EC44DACA5B82A973 /* Sources */, - E159EF5F2479FC4C8A9EF8F1 /* Resources */, - 2D33DA4089E6C261F0C8FC37 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "vellum-assistant-ios"; - packageProductDependencies = ( - CB40BCA6E5FE59FA29F19979 /* VellumAssistantShared */, - ); - productName = "vellum-assistant-ios"; - productReference = 8303637A9FF05FBAB7BFB714 /* vellum-assistant-ios.app */; - productType = "com.apple.product-type.application"; - }; - B4C3A8B00BE65DBC882270CC /* vellum-assistant-iosTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 01367CF4ADFDF34A18BCE030 /* Build configuration list for PBXNativeTarget "vellum-assistant-iosTests" */; - buildPhases = ( - 65567F52DC775FA5485B852B /* Sources */, - C628BC9D91A9AA06BA791981 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "vellum-assistant-iosTests"; - packageProductDependencies = ( - 134BF33544AE5D6EE7EE692C /* VellumAssistantShared */, - ); - productName = "vellum-assistant-iosTests"; - productReference = D9AE48681C1FCA9489456682 /* vellum-assistant-iosTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 43A9367AB1B368C8B59A8F67 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1430; - TargetAttributes = { - 09802F89BF0B2C118CAF8452 = { - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = BF2AFDAF8427797247D81BCC /* Build configuration list for PBXProject "vellum-assistant-ios" */; - compatibilityVersion = "Xcode 14.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - Base, - en, - ); - mainGroup = 7CF82E495286FB202D99F6A8; - minimizedProjectReferenceProxies = 1; - packageReferences = ( - E4D7E28F43B486532C194DED /* XCLocalSwiftPackageReference "..//" */, - ); - preferredProjectObjectVersion = 77; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 09802F89BF0B2C118CAF8452 /* vellum-assistant-ios */, - B4C3A8B00BE65DBC882270CC /* vellum-assistant-iosTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - E159EF5F2479FC4C8A9EF8F1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9E1F06F1B7B31D86F3BE2815 /* Assets.xcassets in Resources */, - 88E91BC08EF99C6D68C08BF9 /* background.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 13647ED4EC44DACA5B82A973 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5412498DD7C6C6B4CF7477CE /* AppDelegate.swift in Sources */, - CDA0EECEB230A4965A7161B6 /* ChatContentView.swift in Sources */, - 31D0C2CC725EE57E9F593A72 /* ChatTabView.swift in Sources */, - 0AF1A9F71B5BCD3C5CDB591A /* ConnectionSettingsSection.swift in Sources */, - CDE68996EC77DAA45CF933A2 /* ContentView.swift in Sources */, - 18827F7B264DFB838AAA2B54 /* DateFormatting.swift in Sources */, - C5B94F611BD02D1F4F6B4298 /* HomeBaseView.swift in Sources */, - 5923262CDB1AEBE0C2118808 /* IOSThreadStore.swift in Sources */, - 2332D9CD114436614241F846 /* IdentityView.swift in Sources */, - 7F96B79FD8BD30F7E0833168 /* InlineVideoEmbedView.swift in Sources */, - AADDAC2861DD3CB70D50C6AB /* InputBarView.swift in Sources */, - F6E66C2F942C26A210459312 /* IntegrationsSection.swift in Sources */, - 836EA14C137EA48A214A519E /* LoginView.swift in Sources */, - 831E2260278404A3AA07ECCB /* MessageMediaEmbedsView.swift in Sources */, - B61091E975453A5D9A073D5B /* OnboardingView.swift in Sources */, - E82000F70C38CD07957C2F0F /* PermissionRowView.swift in Sources */, - EC4B5B7BB9057BCDF63474B4 /* QRPairingSheet.swift in Sources */, - 59457CBF1DEB60A8C299B7DA /* QRScannerView.swift in Sources */, - C4305A05FD834E67C287D60B /* RemindersSection.swift in Sources */, - 5C6DE39F8210A78D484071A4 /* SceneDelegate.swift in Sources */, - 786CB3EF2E6BD4A20821168F /* SchedulesSection.swift in Sources */, - AF2F41087A86DE1728E31FDF /* SettingsView.swift in Sources */, - 0C99A7C29015A2B760556C56 /* ThreadListView.swift in Sources */, - B4C5F5AC96FBFFFA81DF9F09 /* TitleGenerator.swift in Sources */, - 864657EF8C4B63FA518F6174 /* TrustRulesSection.swift in Sources */, - 26B6461D4F6C57E492336574 /* TwilioSettingsSection.swift in Sources */, - 746CF910BAB551E763470897 /* UserDefaultsKeys.swift in Sources */, - 6419DA2F54DB6F703BD1DF3B /* VellumAssistantApp.swift in Sources */, - 764D7E889BD013AFB53EC5B7 /* VellumIntents.swift in Sources */, - 94892E15EB458399785C9B2B /* WorkspaceFileSheet.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 65567F52DC775FA5485B852B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BF12CF5ED5910C4B586B2B98 /* AttachmentFlowIOSTests.swift in Sources */, - EAC778C46C68008399873E3E /* ChatTranscriptFormatterIOSTests.swift in Sources */, - 7B4CE559E79D5A61D91725B6 /* ChatViewModelIOSTests.swift in Sources */, - 70294FBE9E2A2B4F05A54BF0 /* ThreadLifecycleIOSTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 0AEEA19C7E443C9F9A91689A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 1D9E24BFDB425434BFB6E1DE /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = "Resources/vellum-assistant-ios.entitlements"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = Resources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 0.0.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.vellum.vellum-assistant-ios"; - PRODUCT_NAME = "vellum-assistant-ios"; - SDKROOT = iphoneos; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - 22D1558B06059E908D4C3785 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_ENTITLEMENTS = "Resources/vellum-assistant-ios.entitlements"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = Resources/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 0.0.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.vellum.vellum-assistant-ios"; - PRODUCT_NAME = "vellum-assistant-ios"; - SDKROOT = iphoneos; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 9F4377C762327218C5C804E2 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "DEBUG=1", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - AB6FDB60C5762EB1102B6FF5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - GENERATE_INFOPLIST_FILE = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - E0779A65D0CD65A366A0FE59 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - GENERATE_INFOPLIST_FILE = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 01367CF4ADFDF34A18BCE030 /* Build configuration list for PBXNativeTarget "vellum-assistant-iosTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AB6FDB60C5762EB1102B6FF5 /* Debug */, - E0779A65D0CD65A366A0FE59 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - 4150CE19AB671F4284B39416 /* Build configuration list for PBXNativeTarget "vellum-assistant-ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 22D1558B06059E908D4C3785 /* Debug */, - 1D9E24BFDB425434BFB6E1DE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - BF2AFDAF8427797247D81BCC /* Build configuration list for PBXProject "vellum-assistant-ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9F4377C762327218C5C804E2 /* Debug */, - 0AEEA19C7E443C9F9A91689A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; -/* End XCConfigurationList section */ - -/* Begin XCLocalSwiftPackageReference section */ - E4D7E28F43B486532C194DED /* XCLocalSwiftPackageReference "..//" */ = { - isa = XCLocalSwiftPackageReference; - relativePath = "..//"; - }; -/* End XCLocalSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 134BF33544AE5D6EE7EE692C /* VellumAssistantShared */ = { - isa = XCSwiftPackageProductDependency; - productName = VellumAssistantShared; - }; - CB40BCA6E5FE59FA29F19979 /* VellumAssistantShared */ = { - isa = XCSwiftPackageProductDependency; - productName = VellumAssistantShared; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 43A9367AB1B368C8B59A8F67 /* Project object */; -} diff --git a/clients/ios/vellum-assistant-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/clients/ios/vellum-assistant-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a625..0000000000 --- a/clients/ios/vellum-assistant-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/clients/ios/vellum-assistant-ios.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/clients/ios/vellum-assistant-ios.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index b126b5c20e..0000000000 --- a/clients/ios/vellum-assistant-ios.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,15 +0,0 @@ -{ - "originHash" : "aece875ef38615c2666a5b386d2c102ba4f195f7b0d2bf4674ad1dffbcc3f497", - "pins" : [ - { - "identity" : "sparkle", - "kind" : "remoteSourceControl", - "location" : "https://github.com/sparkle-project/Sparkle", - "state" : { - "revision" : "5581748cef2bae787496fe6d61139aebe0a451f6", - "version" : "2.8.1" - } - } - ], - "version" : 3 -} diff --git a/clients/ios/vellum-assistant-ios.xcodeproj/xcshareddata/xcschemes/VellumAssistantIOS.xcscheme b/clients/ios/vellum-assistant-ios.xcodeproj/xcshareddata/xcschemes/VellumAssistantIOS.xcscheme deleted file mode 100644 index 34b97398af..0000000000 --- a/clients/ios/vellum-assistant-ios.xcodeproj/xcshareddata/xcschemes/VellumAssistantIOS.xcscheme +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 6b3021ce03688d62f4e3f8a21592e772e8ea6d19 Mon Sep 17 00:00:00 2001 From: Ashlee Radka Date: Sun, 22 Feb 2026 16:30:33 -0500 Subject: [PATCH 4/4] fix: skip xcodegen for clean and usage commands in build.sh Move xcodegen generation after the command parsing case statement so clean and invalid-command paths exit early without requiring xcodegen. Co-Authored-By: Claude Opus 4.6 --- clients/ios/build.sh | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/clients/ios/build.sh b/clients/ios/build.sh index 0c5d5f7acb..e9f6279241 100755 --- a/clients/ios/build.sh +++ b/clients/ios/build.sh @@ -41,16 +41,6 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" CLIENTS_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" DIST_DIR="$SCRIPT_DIR/dist" -# ── Generate xcodeproj ──────────────────────────────────────────────── -# Always regenerate from project.yml so the xcodeproj is never stale. -if command -v xcodegen >/dev/null 2>&1; then - echo "Regenerating xcodeproj from project.yml..." - (cd "$SCRIPT_DIR" && xcodegen --quiet) -else - echo "ERROR: xcodegen not found. Install with: brew install xcodegen" - exit 1 -fi - # ── Configuration ────────────────────────────────────────────────────── SCHEME="VellumAssistantIOS" PROJECT="$SCRIPT_DIR/vellum-assistant-ios.xcodeproj" @@ -69,23 +59,13 @@ CMD="${1:-build}" # ── Commands ─────────────────────────────────────────────────────────── case "$CMD" in - test) - echo "Running iOS tests..." - xcodebuild test \ - -project "$PROJECT" \ - -scheme "$SCHEME" \ - -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \ - -configuration Debug \ - CODE_SIGNING_ALLOWED=NO - exit $? - ;; clean) echo "Cleaning..." rm -rf "$DIST_DIR" "$CLIENTS_DIR/.build" echo "Done." exit 0 ;; - build|release) + build|release|test) ;; *) echo "Usage: $0 [build|release|test|clean]" @@ -93,6 +73,28 @@ case "$CMD" in ;; esac +# ── Generate xcodeproj ──────────────────────────────────────────────── +# Always regenerate from project.yml so the xcodeproj is never stale. +if command -v xcodegen >/dev/null 2>&1; then + echo "Regenerating xcodeproj from project.yml..." + (cd "$SCRIPT_DIR" && xcodegen --quiet) +else + echo "ERROR: xcodegen not found. Install with: brew install xcodegen" + exit 1 +fi + +# ── Run command ─────────────────────────────────────────────────────── +if [ "$CMD" = "test" ]; then + echo "Running iOS tests..." + xcodebuild test \ + -project "$PROJECT" \ + -scheme "$SCHEME" \ + -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \ + -configuration Debug \ + CODE_SIGNING_ALLOWED=NO + exit $? +fi + mkdir -p "$DIST_DIR" # ── Debug build (simulator) ───────────────────────────────────────────