Motivation
Multiple reports of iOS-created ZIPs failing when extracted by server tools (unzipper, Java ZipInputStream) while Android-created archives from the same app work:
Local macOS unzip often succeeds, so the issue is interoperability (Zip64, data descriptors, encryption flags, how SSZipArchive writes entries), not outright corruption.
Proposal
Add a compatibility path for iOS zip creation that produces archives reliably consumed by common server unzippers:
- Prefer classic deflate without unexpected Zip64 when not needed
- Ensure entry sizes / CRCs are written in a form Java/
unzipper accept
- Document any trade-offs (e.g. AES vs STANDARD)
Optionally expose a flag, e.g. zip(..., { compatibility: 'interop' }), or make interop the default for non-password zips if safe.
Acceptance criteria
Priority
P1
Motivation
Multiple reports of iOS-created ZIPs failing when extracted by server tools (
unzipper, JavaZipInputStream) while Android-created archives from the same app work:invalid entry size)Local macOS
unzipoften succeeds, so the issue is interoperability (Zip64, data descriptors, encryption flags, how SSZipArchive writes entries), not outright corruption.Proposal
Add a compatibility path for iOS zip creation that produces archives reliably consumed by common server unzippers:
unzipperacceptOptionally expose a flag, e.g.
zip(..., { compatibility: 'interop' }), or make interop the default for non-password zips if safe.Acceptance criteria
unzipperand JavaZipInputStreamPriority
P1