Skip to content

feat: open an installed Apple Wallet pass from the app - #134

Merged
JakubKorytko merged 5 commits into
Expensify:mainfrom
Brunonascdev:feat/ios-present-wallet-pass
Oct 29, 2026
Merged

JakubKorytko merged 5 commits into
Expensify:mainfrom
Brunonascdev:feat/ios-present-wallet-pass

Conversation

@Brunonascdev

@Brunonascdev Brunonascdev commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Details

presentAppleWalletPass(lastDigits) opens the installed iPhone pass in Wallet. It prefers a pass that still needs verification, and otherwise opens the pass with those last digits that is not deactivated. It returns false when lastDigits is empty, when no pass matches, or when the matches belong to more than one card. Passes on a paired Apple Watch are not opened.

On Android the call resolves false, so callers do not need their own platform check.

Related Issues

Related to #45. That request started from opening the pass that is waiting for verification, which is what this function does. It does not activate the pass. In-app activation is #96, so this does not close #45.

Manual Tests

This repo has no automated tests. Typecheck and lint pass. The example app builds for the iOS simulator with the new architecture. Android was not compiled here: the example app does not include the TapAndPay SDK. The Kotlin change is a stub that resolves false.

  • With a pass that needs verification, call presentAppleWalletPass with its last digits. Wallet opens that pass and the call resolves true.
  • With only an active pass, it opens that pass.
  • With no matching pass, it resolves false.
  • With an empty string, it resolves false and does not open a pass.
  • With two different cards that end in the same digits, it resolves false.
  • On Android it resolves false.

Linked PRs

Merged current main, which includes #91, #96, and #132. #133 also edits the addCardToAppleWallet README row and src/index.tsx. Whichever lands next will need a small merge.

Card Home can jump to the iPhone pass that is still waiting for verification.
@Brunonascdev

Copy link
Copy Markdown
Contributor Author

The other splits of the same TestFlight patch are #132 and #133. #91 and #96 are the existing ones. They share the spec, the README, and WalletManager.swift / RNWallet.mm, so whichever lands second needs a small merge.

@Brunonascdev

Copy link
Copy Markdown
Contributor Author

@JakubKorytko for a look when you have a minute. Requesting a review from the fork returns a permissions error, so this comment is the ping.

@JakubKorytko JakubKorytko left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

two edge cases in the pass lookup + conflicts

Comment thread ios/WalletManager.swift Resolved
Comment thread ios/WalletManager.swift Resolved
An empty suffix matches every pass, and two cards that end in the same digits are not one card, so neither case opens Wallet.
@Brunonascdev

Copy link
Copy Markdown
Contributor Author

@JakubKorytko merged current main and addressed the review.

@Brunonascdev

Copy link
Copy Markdown
Contributor Author

@JakubKorytko merged current main.

@Brunonascdev

Copy link
Copy Markdown
Contributor Author

@JakubKorytko merged current main, including #132.

@JakubKorytko JakubKorytko left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks

@JakubKorytko
JakubKorytko merged commit 615b4a1 into Expensify:main Oct 29, 2026
7 of 8 checks passed
@os-botify

os-botify Bot commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

🚀 Published to npm in 0.2.26 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS] Support in-app activation for requiresActivation (Yellow Path)

2 participants