HCE not working in Testflight Builds

We have enabled the Host Card Emulation (HCE) capability for our app and successfully implemented and tested the functionality during development. When running the app directly from Xcode, HCE-related flows work as expected. However, we are observing different behavior in the distributed build. In particular, the following check consistently evaluates to false: guard await CardSession.isEligible else { return } After distributing the app via TestFlight, HCE functionality is not available for external testers. The CardSession.isEligible property always returns false, even when tested on supported devices and in supported regions. We are using the same bundle identifier for both development and distribution builds, and the provisioning profiles include the required capability. Could you please clarify the following: Are there any additional entitlements, approvals, or configuration steps required for HCE to function in TestFlight or distribution builds? Are there known region, device, or account-related restrictions that could cause CardSession.isEligible to return false outside the development environment? Is there any difference in behavior between development-signed and distribution-signed builds for this capability?

TestFlight distribution and testers have the same requirements as your end users who would be downloading your app from the App Store. This means the testers will have to be:

  1. physically be in the EEA
  2. logged on to their phones with an iCloud account based in the EEA

As explained in the documentation HCE-based contactless NFC transactions for apps in the European Economic Area (EEA), if you have testers outside the EEA, you cannot use TestFlight builds.

Testing requirements

Apple has developed a solution which allows HCE Developers to develop and test HCE Payment Apps outside the EEA. The new solution allows development and testing on a device through known and well-used means such as Xcode and provisioning of profiles used for testing on devices within a developer’s organization. Developers will be able to have up to 100 test devices outside the EEA.

To test HCE-based contactless transactions, you’ll need to test with an iPhone and NFC hardware. CardSession requires the presence of an NFC reader, which isn’t supported in Simulator, to perform an ISO 7816 card emulation session. You can test with the following configurations:

  • Your iPhone is running iOS 18.2 or later
  • Your iPhone is running iOS 17.4 or later and with an iPhone and NFC hardware within the EEA

There are no additional entitlements or approvals that will make TestFlight distribution builds that will bypass the EEA requirements.

HCE not working in Testflight Builds
 
 
Q