Build1 distinct publisher2 min readUpdated
DeviceCheck buys four persistent states per device, scoped to your developer account. App Attest buys a per-request proof about your binary. Confusing the two is how abuse controls fail quietly.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
Scope is the part that bites. The two-bit field belongs to the developer account, not to the app [2], so three apps shipped under one account contend for the same four states [1]. Four states is two independent booleans [3]. The two questions the write-up itself suggests, whether this device already claimed the new-user promo and whether it has been flagged for chargeback fraud, spend the whole budget [c2b]. A third persistent flag has to be remembered somewhere other than Apple [3].
Reaching those bits means a POST to one of three endpoints, `validate_device_token`, `query_two_bits` and `update_two_bits`, authenticated with an ES256 JWT signed by a `.p8` key that has DeviceCheck enabled in the developer portal [13][14]. Development traffic goes to `api.development.devicecheck.apple.com` rather than the production host [15]. `isSupported` returns false on the Simulator, so the path you can exercise on your laptop is the fallback, not the feature [12]. And the token from `generateToken` is meant to be used once: it stays valid long enough to retry the specific request it was minted for, which is a retry window and not a session credential [11].
App Attest's guarantee is about provenance rather than history. The private key is generated in the Secure Enclave and cannot be extracted [5], and the certificate chain Apple issues names your Team ID and Bundle ID [6]. A valid signature therefore narrows the caller to a build carrying your identifiers that still holds a key Apple was willing to vouch for. It says nothing about what that install did last month.
The two phases have different costs and different failure modes, and the post is blunt that conflating them is the common implementation error. Attestation runs once per key install, involves Apple's servers, and is relatively expensive [c8a]. Assertion runs on every request afterwards, is cheap, and does not involve Apple at all, because your server checks the signature against the public key it stored during attestation [c8b]. That check has to sit on the server: a modified client is not a witness to its own integrity [10].
Run both and the division of labour is legible. App Attest says the request is authentic, DeviceCheck remembers that this device already burned its free trial, and according to the write-up plenty of production apps do exactly that [17].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The two frameworks solve different problems and compose: App Attest tells you the request is authentic, DeviceCheck remembers that this device already burned its free trial, and plenty of production apps run both.
DeviceCheck, available from iOS 11, confirms a token came from a genuine Apple device that has your app installed, where the app is tied to your developer account.
DeviceCheck gives two bits of storage per device, per developer, held on Apple's servers; two bits means four states, and the storage survives app deletion and reinstall.
The persistent two bits answer questions a locally stored flag cannot, such as whether this device already claimed the new-user promo and whether it has been flagged for chargeback fraud.
DeviceCheck does not detect jailbreaks, does not tell you whether your app binary was modified, does not identify the user, and is not authentication.
App Attest, available from iOS 14, answers whether a request is coming from an unmodified copy of your app.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Specific and internally consistent, but single-source
The sole source describes documented platform behavior at unusual specificity: named endpoints, availability floors, header and JWT algorithm, host swap, phase split, and working Swift/Node samples, and it is careful to separate guarantees from non-guarantees. That specificity is checkable in principle and raises evidence quality above a generic explainer. It is capped, however, because everything rests on one dev.to post with no vendor documentation, second publisher, or independent test in the cluster to corroborate details such as the plain-text response for a device with no bits set.
No usable deployment evidence
The cluster contains no release, deployment, benchmark, pricing or usage disclosure. The only adoption-flavored statement is the author's unquantified remark that plenty of production apps run both frameworks, with no named apps, counts, dates or telemetry, which is not enough to score adoption in either direction.
Claims aligned with stated scope
The article's claims match what it actually evidences. It calls DeviceCheck 'routinely oversold' and then enumerates the four things it does not do, keeps App Attest's promise to binary integrity rather than general anti-fraud, and assigns validation work to the reader's server instead of implying an Apple-managed service. There is no overstatement to penalize, and nothing materially understated either; the residual uncertainty is corroboration and adoption, not exaggeration.
Low commercial pressure, mild author-promotion incentive
The supplied text sells nothing: it documents two first-party Apple frameworks, recommends no paid product or specific vendor library, and discloses no sponsorship or affiliation. The residual incentive is the ordinary developer-platform one, a personal-brand and traffic motive for publishing a comprehensive how-to on dev.to, which can favor confident completeness over hedging but does not point at a commercial beneficiary.
Moderate on mechanics, weak overall
Confidence is moderate for the technical mechanics, which are specific, self-consistent and consistent with how platform attestation is normally structured, and low for anything beyond them. One publisher, no primary-document or second-source corroboration, and an entirely unmeasured adoption dimension keep the aggregate below the midpoint; three of the claims are also reader-side derivations rather than statements the source makes directly.
build
The ATT prompt only fires when the app is active, and iOS never tells you when it didn't1 distinct publisher
invest
Your Landed Cost Is Being Litigated By Companies With $306,000 Problems1 distinct publisher
security
Apple dates its EU app rewrite: October 1, 2026, and the install fee becomes a 5% commission1 distinct publisher
build
canvas.toBlob hands you a PNG and calls it WebP: check blob.type, not the user agent1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 24, 2026