Hi there,
We're implementing Apple's DeviceCheck App Attest for production iOS authentication. The public documentation defines DCError cases but doesn't specify which errors are expected per API method or recommend retry/remediation strategies. We need Apple's guidance to implement robust, production-aligned error handling before rollout.
1. Error Surface per API Method
Question: Can you confirm the complete, officially expected set of DCError values for each method?
We understand the following errors are possible across App Attest APIs:
invalidKeyinvalidInputfeatureUnsupportedserverUnavailableunknownSystemFailure
Specifically, please confirm which errors can occur for:
DCAppAttestService.generateKey()DCAppAttestService.attestKey(_:clientData:)DCAppAttestService.generateAssertion(keyID:clientData:)
Are there any additional undocumented or edge-case errors we should handle?
2. Retry Strategy & Remediation Matrix
Question: For each API method and error code, please help us with proposal around which errorCode is retriable, whats the remediation pre retry, retry cap and backoff strategy:
Kindly also help with errors that are not covered here:
Specific sub-questions:
-
invalidKey handling: When this error occurs:
- Should the app delete the key and call
generateKeyagain? - Or should it fail the entire flow?
- Should the app delete the key and call
-
serverUnavailable handling:
- Should we retry immediately, or wait before retrying?
- Is exponential backoff recommended?
- What's the recommended max retry count?
-
Backoff strategy:
- Which errors (if any) qualify for exponential backoff?
- Recommended base delay, max delay, and jitter approach?
- When should we give up and fail the request?
-
unknownSystemFailure:
- Is this retriable or should we fail?
- Any known causes or mitigations?
3. Simulator Testing
Questions:
- Simulator API behavior:
- Can App Attest APIs be called normally on iOS Simulator? If not, is there a way to simulate for testing.
- Do they complete successfully with simulated attestations, or do they fail?
Thanks, Nirekshitha