Modeled on LC Wallet's bitrise.yml. Push-only trigger map (develop->beta,
main->release), no PR-triggered checks. Reuses the existing Skip fastlane
lanes directly instead of a generic xcode-archive step, since build_app
already carries the Skip-specific xcconfig and build flags. Adds a beta
lane (TestFlight) to match release, which was the only lane wired before.
Terms and Privacy screens now fetch the real PediFoods customer PDFs
from the backend instead of showing static placeholder text. Also
surfaces both links on the Profile screen below the version label,
not just during registration.
PATCH /api/customer/addresses/:addressId/default — sets isDefault=true
on the target address and false on all others. Documents id field now
present in address_book entries, isDefault behavior, and example payload.
Real key pattern is at.<domain>.<name> (e.g. at.ios.only, at.promo).
The fc. prefix in the BFF README and API_Mobile_App.md was incorrect.
- API_Mobile_App.md: updated request keys, response raw examples,
flag table, and Swift usage examples to at. prefix
- API_Mobile_App.md: clarified that app uses raw["at.key"] not
simplified flags object (FeatureFlagsState.isEnabled reads raw)
- feature-control-bff/README.md: updated DEFAULTS_JSON example,
request keys, response flags/raw examples, added note about raw usage
Corrected method (was POST /api/customer/:id, now PATCH /api/customer/profile).
Added profilePicture field: base64 data URL, max 2 MB, jpeg/png/webp.
Added field table, format examples, profilePictureUrl response, error table.
- ApiCardModels.swift: SavedCard, SaveCardPayload, CreditCardOrderPayload, etc.
- ApiOrderModels.swift: add savedCardId, clientCpfCnpj, creditCard, creditCardHolderInfo to CreateOrderPayload; Codable for item/addon payloads
- ApiService.swift: listCards, saveCard, updateCard, deleteCard, updateProfileCpf
- AppState.ProfileState: add cpf field
- CheckoutView: CardSelectionSheet (list saved cards + add new), rewrite PaymentCardView (submits order with card data), CardPaymentContext carries full order data
- CheckoutView+Logic: buildCreateOrderPayload accepts card params, new loadSavedCards/confirmOrderWithSavedCard/handleOrderResponse helpers, redirect credit card confirm to CardSelectionSheet
- OrdersView: CREDIT_CARD pending orders go to tracking (not card form, since card is now submitted with order)
- UserProfileView: CPF field with mask, save via PATCH /api/customer/profile
Toggle ON = Pagar Pelo App (default), shows in-app methods (PIX, Credit Card)
Toggle OFF = Pagar Na Maquininha, shows store machine methods
Automatically resets paymentMethod on toggle switch
Removes paymentGroupCard helper, saves vertical space
pinnedViews + rapid state changes from stretchAmount every frame during overscroll
triggers SwiftUI memory corruption. ZStack overlay approach is crash-free:
- LazyVStack with no pinnedViews
- Inline tabs fade out when pinned threshold reached
- Overlay tabs (with safeAreaTop padding) fade in at top of ZStack
Apply offset(y: -stretchAmount) to gradient, buttons, summaryCard, storeLogoBadge, and hard-cut rectangle so only the cover image stretches on pull-down
- Remove max(0) clamp in ScrollOffsetReader to allow negative values during bounce
- Add stretchAmount computed var (max(0, -scrollOffset))
- Hero image frame grows by stretchAmount and offsets upward on overscroll
- isCategoryTabsPinned still uses max(0, scrollOffset) via >= check
- Remove skip-fuse-ui package from Package.swift dependencies and target products
- Replace `import SkipFuse` with `import OSLog` in PediFoodsApp.swift
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Use LazyVStack(pinnedViews: [.sectionHeaders]) for native section header stickiness
- Move ScrollOffsetReader outside LazyVStack (sibling) to prevent lazy-unload breaking scroll tracking
- Add baseline capture to ScrollOffsetReader to correctly normalize offset regardless of ScrollView content insets
- Apply safeAreaTop padding to categoryTabs only when pinned (isCategoryTabsPinned), preventing oversized header before scroll
- Remove complex ZStack dual-tabs overlay, stickyProgress logic, and categoryTabsStickyProgress
- categoryTabs now accepts isPinned flag with easeInOut(0.15s) animation on pin transition
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>