SSZipArchiveの不具合

古いiOSiOS 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デビューすることにしました。

isFilePasswordProtectedAtPathメソッドのzipファイルがcloseされていない不具合
  • バグリポート

github.com

  • 修正案(プルリクエスト)

github.com

プロセスでオープンできるファイル数の限度を超過する状況で正常に解凍できてないにも関わらずunzipがエラーを返さない不具合
  • バグリポート

github.com

  • 修正案(プルリクエスト)

github.com

SSZipArchiveを使用していてアプリでのファイル操作関連で問題が発生する場合に参考になればと思います。