¿Cuál es la mejor manera de get una versión específica de CocoaPod en time de ejecución?

Actualmente estoy tratando de crear una forma de registrar la versión actual de mi Pod en time de ejecución, hay algunas forms que vienen a mi mente, pero quería preguntar aquí para asegurarme de que no me falte algo obvio.

Lo que he hecho hasta ahora:

  • Descubrimos que Cocoapods genera un file de encabezado myPod-umbrella.h que exporta lo siguiente:

     FOUNDATION_EXPORT double myPodVersionNumber; FOUNDATION_EXPORT const unsigned char myPodVersionString[]; 

    Solo myPodVersionNumber parece ser accesible, y siempre tiene 1.0 por alguna razón, ¿hay alguna forma de hacerlo funcionar bien, ya que tengo la sensación de que esta es la forma correcta pero la he configurado incorrectamente?

  • Intente get el Info.plist del framework incorporado y leer la versión allí, pero esto parece ser un poco problemático, no tengo ninguna garantía de lo que un desarrollador terminará haciendo con el pod y podría terminar con una location diferente de el package, o incluso hacerlo inaccesible para el proyecto.

  • Crea una propiedad codificada con el número de versión, esto obviamente funciona, pero agrega mucho espacio al error y no parece ser la manera correcta de implementar esto, pero si no hay otra forma de moverse por CocoaPods, podría tener Para hacer eso.

  • Tener un paso de compilation que lea el PodSpec y genere una class simple que contenga metadatos sobre el Pod, se siente un poco mejor que el punto anterior, pero todavía se siente un poco exagerado por lo que estoy buscando.

¿Alguien tiene una mejor idea o puede apuntarme en la dirección correcta?

Lo que bash lograr es poder ejecutar algo como esto

print("Current version: \(myPod.version) ")

y haga que se conecte correctamente en la console

#Current version: 1.2.0

¿Qué pasa con el uso de URLForResource? Imprime muy bien en time de ejecución con la instrucción de printing que solicitó.

introduzca la descripción de la imagen aquí

Esta versión imprime todo el file de locking en la console.

 override func viewDidLoad() { super.viewDidLoad() let url = NSBundle.mainBundle().URLForResource("/lockfilefolder/Podfile", withExtension: "lock")! let data = try! String(contentsOfURL: url, encoding: NSUTF8StringEncoding) print(data) } /* Prints */ // PODS: // - Firebase/Analytics (3.3.0): // - FirebaseAnalytics (= 3.2.1) // - Firebase/Auth (3.3.0): // - Firebase/Analytics (= 3.3.0) // - FirebaseAuth (= 3.0.3) // - Firebase/Core (3.3.0): // - Firebase/Analytics (= 3.3.0) // - Firebase/Database (3.3.0): // - Firebase/Analytics (= 3.3.0) // - FirebaseDatabase (= 3.0.2) // TL;DR 

Esta próxima versión imprime numbers de línea específicos. Al usar componentsSeparatedByString("-") puedo eliminar el carácter - antes del nombre de pod para que se vea más limpio. Esto funciona porque los files de locking se usan - en cada línea de la list de nombres de pod. Tenga en count que estamos utilizando pathForResource no URLForResource aquí.

  do { if let path = NSBundle.mainBundle().pathForResource("/lockfilefolder/Podfile", ofType: "lock"){ let data = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding) let lockFileData = data.componentsSeparatedByString("-") print("Current version: \(lockFileData[6])") } } catch let err as NSError { print(err) } /* Prints */ // Current version: - Firebase/Core (3.3.0): 

Esta próxima versión, imprimimos dos líneas. Estamos utilizando el data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) . Se vuelve muy detallado para eliminar el - en este caso, por lo tanto, no vale la pena.

 let url = NSBundle.mainBundle().URLForResource("/lockfilefolder/Podfile", withExtension: "lock")! let data = try! String(contentsOfURL: url, encoding: NSUTF8StringEncoding) let lockFileData = data.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()) print(lockFileData[72]) print(lockFileData[6]) /* Prints */ // COCOAPODS: 0.39.0 // - Firebase/Core (3.3.0):