原生zlib在iOS上为swift3充气/收缩

我希望能够膨胀/收缩Swift3数据结构。 我找到了GzipSwift ,但目前尚不清楚我如何将其提供给我的iOS应用程序。 我试过的天真的事情包括:

  1. Data+Gzip.swift文件复制到我自己的项目中。 然后,这会抱怨所述文件顶部的import zlib 。 我认为这与相同来源的zlib目录中的modulemap文件有关。 但我不确定在我自己的项目中重建那些内容的方法或方法。

  2. 从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头。