原生zlib在iOS上为swift3充气/收缩
我希望能够膨胀/收缩Swift3数据结构。 我找到了GzipSwift ,但目前尚不清楚我如何将其提供给我的iOS应用程序。 我试过的天真的事情包括:
-
将
Data+Gzip.swift
文件复制到我自己的项目中。 然后,这会抱怨所述文件顶部的import zlib
。 我认为这与相同来源的zlib目录中的modulemap文件有关。 但我不确定在我自己的项目中重建那些内容的方法或方法。 -
从github克隆存储库,打开XCode并内置(基本上按下了运行按钮)。 然后尝试将其作为链接库或框架添加到我自己的项目中。 我很确定只选择存储库的顶级目录不是我想要做的,但我不知道还有什么可以尝试。
我已经找到了其他一些代码,但它看起来过时并且相对于Swift2而言。
我最近不得不将那个确切的库和文件添加到我的项目中,经过大量的故障排除后终于让它工作了,所以让我带您完成这些步骤!
好的
1)在finder中转到项目的顶级目录,并创建一个名为Swiftzlib
的新文件夹或任何您想要导入的模块名称。 (我们要做的是将zlib库添加为模块,因此将其视为导入Foundation或某些其他模块)。 为了澄清,此Swiftzlib
目录最终将作为包含*.xcodeproj
和*.xcworkspace
文件的同一目录的*.xcworkspace
。
2)在您创建的文件夹中,制作两个文件。
- INCLUDE.H
- module.modulemap
3)在include.h
文件中,输入以下内容:
#include
4)在module.modulemap
文件中,输入以下内容:
module Swiftzlib [system] { header "include.h" export * }
Swiftzlib与您创建的文件夹的名称相同。
5)打开Xcode项目,然后选择目标
- 5a)在Build Phases – > Link Binary with Libraries中,添加
libz.tbd
- 5b)在Build Settings – > Swift Compiler – Search Paths中,将
$(PROJECT_DIR)/Swiftzlib
非递归地添加到导入路径 - 5c)在Build Settings – > Other Linker Flags中,添加
-lz
作为标志
6)在Xcode中选择你的项目(可能没有必要,但我已经在我的项目中完成了它的工作)
- 6a)在Build Settings – > Swift Compiler – Search Paths中,将
$(PROJECT_DIR)/Swiftzlib
非递归地添加到导入路径
7)在Data+Gzip.swfit
,将import Swiftzlib
添加到文件的顶部
8) 清洁,建造和运行!
我在Apples本机libcompression框架周围维护一个小的Swift 3+包装器:
https://github.com/mw99/DataCompression
gzip的用法示例:
let data: Data! = "https://www.ietf.org/rfc/rfc1952.txt".data(using: .utf8) let gzipped: Data! = data.zip() let gunzipped: Data? = gzipped.unzip() assert(data == gunzipped)
但是如果你只对经典膨胀和放气感兴趣,你可以改用.inflate()
和.deflate()
方法。 这将节省18个字节,因为不会添加gzip头。