Since iPadOS 27, Apple Pencil strokes that were drawn and saved through
the system markup UI in QLPreviewController can no longer be erased with
the pixel eraser once the PDF is saved and reopened. They can only be
selected and deleted as whole annotations. On iPadOS 26 the same flow
kept saved strokes erasable.
Reproduction (no custom code needed — Files app shows it too):
Files app → long-press a PDF → Quick Look → Markup
Draw a few strokes with Apple Pencil, tap Done/save
Reopen the same PDF in Quick Look → Markup
Eraser (Erase Strokes mode) does nothing on the saved strokes
The same happens in our app, which presents PDFs via QLPreviewController
with editingModeFor = .createCopy. Newly drawn strokes in the current
session erase fine; only saved-and-reloaded ones are affected. The new
Preview app is NOT affected — the same PDF edited there stays fully
re-editable.
Digging into the saved files: Quick Look writes each stroke as a /Stamp
annotation whose /AAPL:AKExtras contains only legacy AnnotationKit data
(AKAnnotationObject with a flattened AKImageAnnotation, or
AKAnnotationV2/AKInkAnnotation2) — and no /PPK entry. The Preview app
embeds the PencilKit drawing data (/PPKType = "draw", /PPK with a "crdt"
stream, plus page-level /AAPL:PPK + /AAPL:PPKHash), which is what makes
its output re-editable. It looks like the iPadOS 27 markup editor only
restores erasable strokes from /PPK, while the Quick Look save path
still writes the old format — so Quick Look can no longer round-trip
its own output.
Questions:
Is this an intentional behavior change or a regression? I couldn't
find anything in the iPadOS 27 release notes about Quick Look /
markup persistence.
Is there any way for a host app to opt QLPreviewController's markup
into the new PencilKit-based persistence?
0
0
9