SSZipArchiveの不具合
古いiOS(iOS 9以前)でSSZipArchiveを使ってzipファイルを解凍するプログラムでなぜか突然unzipエラーが発生する現象がありました。
何度か再現させて調べてみると以下のようなSSZipArchiveのログが出力されていることもありました。
[SSZipArchive] Set attributes failed for directory: [ファイルのパス].
[SSZipArchive] Error setting directory file modification date attribute: [ファイルのパス].
原因を調査したところzipファイルがパスワード付きかどうかを調べるメソッド
+ (BOOL)isFilePasswordProtectedAtPath:(NSString *)path
でオープンされたzipファイルがcloseされていない不具合があってアプリプロセスでオープンできるファイル数の限度を超過してアプリプロセスでファイルがオープンできない状況になっていました。
さらにこの状態になってからunzipを実行するとunzipのエラーが返るのですが、unzip処理の途中で圧縮ファイルを書き出すところでオープンできるファイル数の限度を超過する状況になると正常に解凍できてないにも関わらずunzipがエラーを返さない不具合もありました。
SSZipArchiveのソースで問題の箇所を特定して修正案を作成したので、この機会に以前からいつかはと思っていたGitHubデビューすることにしました。
プロセスでオープンできるファイル数の限度を超過する状況で正常に解凍できてないにも関わらずunzipがエラーを返さない不具合
- バグリポート
- 修正案(プルリクエスト)
SSZipArchiveを使用していてアプリでのファイル操作関連で問題が発生する場合に参考になればと思います。