Referenced build_for_testing/test_without_building workflows that were
never defined — copied the pipeline block from LC Wallet without its
matching workflow definitions. Unused anyway (not in trigger_map, no
PR trigger wanted), so removing instead of completing it.
Switch from fastlane-driven build (build_app + hand-rolled apikey.json)
to Bitrise's own xcode-archive step, matching LC Wallet 1:1: manage-ios-
code-signing + xcode-archive@5 (automatic_code_signing: api-key) do the
build/sign, deploy-to-itunesconnect-deliver@2 handles TestFlight in the
beta workflow, fastlane only runs for the release lane (metadata push +
App Store upload) reading BITRISE_IPA_PATH — same shape as LC Wallet's
Fastfile beta/release lanes.
Only genuine differences from LC Wallet, all forced by this project's
actual layout:
- BITRISE_PROJECT_PATH/SCHEME point at Darwin/PediFoods.xcodeproj
- fastlane work_dir is Darwin/ (Fastfile lives there, not repo root)
- build number bumps CURRENT_PROJECT_VERSION in Skip.env instead of
agvtool — this project has no VERSIONING_SYSTEM set, Skip.env is the
actual shared source of truth for both Darwin and Android
- team_id comes from a DEVELOPMENT_TEAM secret instead of a hardcoded
literal — LC Wallet's Apple team ID isn't necessarily this app's
ASC_KEY_CONTENT is the raw .p8 private key, which contains literal
newlines. The heredoc interpolated it straight into a JSON string,
producing invalid JSON (JSON::ParserError in get_provisioning_profile).
Build the file with Ruby's JSON encoder instead so newlines are escaped
correctly. Verified locally against a realistic multi-line PEM value.
agvtool doesn't apply here — no VERSIONING_SYSTEM set, CURRENT_PROJECT_VERSION
comes from Skip.env (shared with the Android side) via #include in
Darwin/PediFoods.xcconfig. Bump it there instead.
Dropped APPLE_ID, ITC_TEAM_ID and unused BITRISE_DISTRIBUTION_METHOD carried
over from LC Wallet's Fastfile/Appfile shape — none of them are read anywhere
in this project's Appfile or Fastfile.
Added the actual missing piece: DEVELOPMENT_TEAM, which both
Darwin/PediFoods.xcconfig and Darwin/fastlane/AppStore.xcconfig leave blank
on purpose for CI to fill in. Wired BITRISE_DISTRIBUTION_METHOD into
build_app's export_method so it stops being dead config.
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