【Swift】ZIP Foundationが便利!初心者でも簡単に使えます

本サイトはアフィリエイト広告を利用しています。
例えばこんな場合
  • アプリで測定したデータをサーバーに送りたい
  • データサイズをできるだけ小さくしたい

そんな場合にZiP Foudationを使うと簡単にファイルを圧縮できます。

ZIP Foundationが便利!初心者でも簡単に使えます

例えばアプリで、スマホからクラウドサーバーにデータ送る場合、通信量の課金を減らすために、サーバーに送るデータをなるべく減らした方が良いですね。

そんな場合はデータをzipファイルにしてしまえばデータ量を小さくできます。

では、iPhoneアプリでテキストデータをzipファイルで保管しようとする場合にどうすれば良いのか?

検索をすると2通りありました。

  • SSZipArchive
  • ZIP Foundation

SSZipArchiveの方がよくヒットするので試してみたのですが、あまり手軽にできない感じでした。

個人的には、ZIP Foundationの方が使い方もかなり簡単、サクッと圧縮ファイルを作成することができると思います。

ZIP Foundationを使うには

外部ライブラリを追加して、数行コードを書けばOKです。

まずはCocoaPodsでプロジェクトに追加

ターミナルを開いて、Xcodeでアプリのプロジェクトを作成したフォルダに移動する

(Homeフォルダ) % cd (Xcodeでプロジェクトを作成したフォルダ)
(Xcodeでプロジェクトを作成したフォルダ)% pod init

ターミナルはこのままにしておいて、アプリのプロジェクトのフォルダを開くと、Profileという名前のファイルが出来上がっています。

Profileファイルを開いて、ZipFoundationを追記する

  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

pod 'ZIPFoundation', '~> 0.9'

Profileに#Comment the next line 〜 の部分があるので、上記のように追記してファイルを閉じます。

そして、再びターミナルを使います。

ターミナルでインストール

(Xcodeでプロジェクトを作成したフォルダ)% pod install

これを入力してエンター、すると次のような感じになります。

Analyzing dependencies
Downloading dependencies
Installing ZIPFoundation (0.9.12)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `ZipApp.xcworkspace` for this project from now on.
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

これで使用できるようになりました。

Zipファイルを作成する部分は数行で出来上がり

まずはZipFoundationをインポートします。

import ZIPFoundation

Zipファイルを作成する部分は次のようになります。

        do {
            try FileManager.default.zipItem(at: sourceURL, to: destinationURL, compressionMethod: .deflate)
        } catch {
            print("Creation of ZIP archive failed with error:\(error)")
        }

souorceURLは圧縮するファイル、destinationURLはZipファイルのURLになります。

これだけなので簡単ですね。

ただ、注意点もあります。

注意点
  • compressionMethod: .deflateの部分を入れていないと圧縮されない
  • destinationURLに同じ名前のファイルがある場合は、zipファイルは上書きされずに終わる
  • 出来上がったZipファイルを展開すると、ファイルの作成日が変わる

とりあえず試したい場合

お試し用のサンプルソースコード

sample.txtからZipファイルを作成しています。

import UIKit
import ZIPFoundation

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let dir = FileManager.default.urls(
            for: .documentDirectory,
            in: .userDomainMask
        ).first!
        
        let fileURL = dir.appendingPathComponent("sample.txt")
        let zipURL = dir.appendingPathComponent("sample.zip")
        
        var result = createFile(fileURL.path)
        print(result)
        
        if result != false {
            fileZip(fileURL, zipURL)
        }
        
        // Do any additional setup after loading the view.
    }

    func fileZip(_ sourceURL: URL, _ destinationURL: URL){
        do {
            try FileManager.default.zipItem(at: sourceURL, to: destinationURL, compressionMethod: .deflate)
        } catch {
            print("Creation of ZIP archive failed with error:\(error)")
        }
    }
    
    func createFile(_ filePath: String) -> Bool {
            let fileManager = FileManager.default
            let result = fileManager.createFile(atPath: filePath,
                                                contents: nil,
                                                attributes: nil)
            return result
    }
}

iPhoneでファイルを見れるようにする方法

サンプルソースコードで試してみたものの、実際にファイルがどうなっているのかよくわからないですよね。

実はiPhoneの「ファイル」からアプリのフォルダを見れるようにする方法があります。

これも割と簡単で、info.plistに次の2つを追加してValueをYESにすればOKです。

Application supports iTunes file sharing

Supports opening documents in place

アプリを動作させてzipファイルを作成した後、iPhoneの「フォルダ」→「このiPhone内」と選ぶとアプリのフォルダが出来上がっているのがわかります。

参考にしたサイト

こちらの内容を参考にしました。

SwiftでコードからファイルをZip,Unzip 【iOS】 - Qiita
**ZIPFoundation**をつかって、SwiftでファイルをZipに圧縮・解凍ができます。###1、SwiftパッケージマネージャーでZIPFoundationをプロジェクトに追加。De…
GitHub - weichsel/ZIPFoundation: Effortless ZIP Handling in Swift
Effortless ZIP Handling in Swift. Contribute to weichsel/ZIPFoundation development by creating an account on GitHub.
【Swift】アプリ内のファイル読み書き
(2022/01/18 更新) アプリ内のファイル読み書き方法を解説します。
URLからStringへの変換 - Qiita
let stringUrl = url.absoluteString
いまさらだけどiOSのファイル操作まとめ(Swift) - Qiita
はじめにいまさらだけど iOS のファイル操作についてまとめました。ストアに公開しない業務用アプリとかつくってるとわりとガイドラインとかわすれる。。。ファイル保存先File System P…

コメント

タイトルとURLをコピーしました