nativo zlib inflar / desinflar para swift3 en iOS

Me gustaría poder inflar / desinflar estructuras de datos Swift3. Encontré GzipSwift , pero no está claro cómo puedo hacerlo disponible para mi aplicación iOS. Las cosas ingenuas que he intentado incluyen:

  1. Copiar el file Data+Gzip.swift en mi propio proyecto. Esto luego se queja de la import zlib en la parte superior de dicho file. Creo que tiene algo que ver con los files modulemap en el directory zlib de las mismas fonts. Pero no estoy seguro de qué o cómo volver a crearlos en mi propio proyecto.

  2. Clonó el repository de github, abrió XCode y se integró (presionó el button de ejecución básicamente). Luego traté de agregar eso como una biblioteca o marco vinculado a mi propio proyecto. Estoy bastante seguro de que solo seleccionar el directory de nivel superior del repository no es lo que quiero hacer, pero no sabía qué más intentar.

Encontré otro código por ahí, pero parece anticuado y relativo a Swift2.

    Hace poco tuve que agregar esa biblioteca y file exactos a mi proyecto, y después de una gran cantidad de solución de problemas finalmente funcionó, ¡así que déjame guiarte por los pasos!

    Bueno

    1) Vaya al directory de nivel superior de su proyecto en el buscador y cree una nueva carpeta llamada Swiftzlib o lo que quiera que sea el nombre del module que va a importar. (Lo que haremos es agregar la biblioteca zlib como module, así que piense en ella como Importing Foundation o algún otro module). Para aclarar, este directory Swiftzlib terminará como un directory secundario del mismo directory que contiene sus *.xcodeproj y *.xcworkspace .

    2) Dentro de la carpeta que creó, cree dos files.

    • include.h
    • module.modulemap

    3) En su file include.h , ingrese lo siguiente:

     #include<zlib.h> 

    4) En su file module.modulemap , ingrese lo siguiente:

     module Swiftzlib [system] { header "include.h" export * } 

    Donde Swiftzlib es el mismo que el nombre de la carpeta que creó.

    5) Abre tu proyecto Xcode y selecciona tu objective

    • 5a) En Build Phases -> Link Binary with Libraries, agregue libz.tbd
    • 5b) En Configuración de compilation -> Swift Compiler – Rutas de búsqueda, agregue $(PROJECT_DIR)/Swiftzlib no recursiva a las routes de import
    • 5c) En Configuración de compilation -> Otros indicadores de linkeres, agregue -lz como una bandera

    6) Seleccione su proyecto en Xcode (puede no ser necesario, pero lo he hecho en mi proyecto y funciona)

    • 6a) En Configuración de compilation -> Swift Compiler – Rutas de búsqueda, agregue $(PROJECT_DIR)/Swiftzlib no recursiva a las routes de import

    7) En Data+Gzip.swfit , agregue la import Swiftzlib a la parte superior del file

    8) ¡ Limpia, construye y corre!

    El uso de este contenedor Swift 3 alnetworkingedor de la libcompression nativa de Apples debería ser más fácil:

    https://github.com/mw99/SwiftDataCompression

    Ejemplo de uso:

     let s = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ_0123456789" var res: Data? = s.data(using: .utf8) res = res?.deflate() res = res?.inflate() res = res?.zip() res = res?.unzip() res = res?.compress(withAlgorithm: .LZFSE) res = res?.decompress(withAlgorithm: .LZFSE) res = res?.compress(withAlgorithm: .LZ4) res = res?.decompress(withAlgorithm: .LZ4) res = res?.compress(withAlgorithm: .LZMA) res = res?.decompress(withAlgorithm: .LZMA) res = res?.compress(withAlgorithm: .ZLIB) res = res?.decompress(withAlgorithm: .ZLIB) assert(res != nil) let t = String(data: res!, encoding: .utf8) assert(s == t) 

    Probando esto en el patio de juegos es bastante interesante porque al cambiar la cadena de input puedes ver inmediatamente la relación de compression.