そんな場合に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になります。
これだけなので簡単ですね。
ただ、注意点もあります。
とりあえず試したい場合
お試し用のサンプルソースコード
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内」と選ぶとアプリのフォルダが出来上がっているのがわかります。
参考にしたサイト
こちらの内容を参考にしました。
コメント