Which NDEF records does iOS actually act on?
A web address is the one record type you can rely on across both platforms. Several types Android acts on are read correctly by an iPhone and produce no visible result, so a tag verified on one platform tells you nothing about the other.
The safe answer
Write a URL. It is recognised on both platforms, it is short, and the destination can be changed later without touching the tag.
For anything intended to be tapped by people whose phones you do not control, that single choice removes most compatibility risk. Everything else in this guide is about when you need something more.
Where the platforms diverge
Android exposes NFC broadly and lets applications register interest in specific record types, including external types used to launch a particular application. iOS is deliberately narrower about what a tag may trigger.
The result is a category of tag that is not broken and does nothing: written correctly, read correctly, and acted on by only one of the two platforms. Wi-Fi credential records are the case that catches most deployments, since they are genuinely useful on Android and do not produce the same result on an iPhone.
Apple documents what Core NFC supports rather than publishing a compatibility matrix against Android, so the practical method is testing rather than reading. The framework itself is documented at Core NFC.
The banner, not the action
Even where a record is recognised, the iPhone experience differs. Background reading surfaces a banner the user taps to proceed, rather than acting immediately.
That extra step is deliberate and it changes what you can design. A flow assuming the tap alone completes the action will feel broken to iPhone users, not because the tag failed but because it required a confirmation nobody warned them about.
It also means background reading is a platform feature rather than a property of your tag. Background reading is available from the iPhone XS and XR onwards, and it is a separate threshold from the one that decides whether a model reads tags at all.
Testing properly
Write one tag and tap it with an iPhone and an Android handset before writing the rest of the batch. Not a simulator, not a description of what should happen: the actual devices your audience will use.
Test with the screen locked as well as unlocked, since background reading behaves differently from a tap with a tool already open.
And test the oldest iPhone in your target population rather than the newest, because background reading availability depends on the model. A tag that works beautifully on a current handset and does nothing on a four year old one is a deployment problem discovered at the worst moment.
Frequently asked questions
Why does my Wi-Fi tag work on Android but not on iPhone?
The record type that carries Wi-Fi credentials is handled by Android and does not produce the same result on iOS. It is a platform difference rather than a fault in the tag, and no rewriting fixes it.
Can a tag open a specific app on iPhone?
Not the way an Android application record does. The usual route is a URL that the target application has registered to handle, which means the application must already be installed.
Does an iPhone need an app to read a tag at all?
For common content, background reading handles it without any application, on supported models. An application that wants to control the exchange must be launched manually, which is a different situation.
Should I write two records to cover both platforms?
It can help as a fallback, with the primary record first. It does not create support that is absent: a record iOS ignores stays ignored regardless of what accompanies it.