ios swift cocoapods google-maps-sdk-ios lint

ios - Construyendo un Cocoapod con Swift y dependencia en el marco de Objective-C



cocoapods google-maps-sdk-ios (1)

Sé que ya hay algunas preguntas sobre este tema aquí en SO, pero muy pocas han aceptado las respuestas, y no creo que haya encontrado exactamente el mismo problema que el mío.

Estoy creando un pod Swift, y en mi código confío en el SDK de iOS de Google Maps, que se incluye como un archivo .framework . El proyecto se basa en Xcode, pero tengo problemas para publicar la biblioteca en Cocoapods.

Podspec tener un archivo Podspec que casi se valida con el comando pod lib lint . Sin embargo, ahora que he agregado el pod Google-Maps-iOS-SDK como una dependencia en el archivo Podspec , falla con el siguiente mensaje:

$ pod lib lint

[!] El objetivo de ''Pods'' tiene dependencias transitivas que incluyen binarios estáticos: (/private/var/folders/n2/qyjfpk6n7zz_mngtwswlmsy00000gn/T/CocoaPods/Lint/Pods/Google-Maps-iOS-SDK/GocoImage

PS

¿Se espera esto? ¿Por qué no puedo agregar el SDK de iOS de Google Maps como referencia de pod en mi propio pod basado en Swift?

Aquí está el Podspec :

Pod::Spec.new do |s| s.name = ''(name)'' s.version = ''1.0.0'' s.summary = ''(summary)'' s.platforms = { :ios => ''8.0'', :osx => ''10.10'' } s.ios.deployment_target = ''8.0'' s.osx.deployment_target = ''10.10'' s.license = { :type => ''BSD'', :file => ''LICENSE'' } s.source_files = ''Sources/*.{h,swift}'', ''*.framework'' s.source = { :git => "https://github.com/(Github repo).git", :tag => "1.0.0" } s.requires_arc = true s.frameworks = "Foundation", "CoreLocation" s.author = { ''Romain L'' => ''(email)'' } s.dependency ''Google-Maps-iOS-SDK'' end

Si no incluyo el SDK de iOS de Google Maps como una dependencia, entonces pod lib lint falla en el Encabezado de Enlace y se queja de que no puede encontrar <GoogleMaps/GoogleMaps.h> (archivo no encontrado).

Estoy atascado, y no sé si es un error de Cocoapods 0.36 (todavía en Beta) o si estoy haciendo algo mal.

¡Gracias por tu ayuda!


Finalmente encontré otro hilo en SO que trata problemas similares: errores de vinculador en un proyecto Swift con Google Maps para iOS agregado a través de CocoaPods .

Parece que los errores se debieron a una combinación de archivo Podspec incorrecto (en el lado del SDK de iOS de Google Maps) y errores en Cocoapods 0.36 Beta.

En realidad, es posible solucionar los problemas utilizando el archivo Podspec revisado de @fz. Para Google Maps: https://.com/a/28471830/145997 . Otro artículo que también fue de gran interés para comprender cómo funciona la configuración Podspec en Podspec es: http://codereaper.com/blog/2014/creating-a-pod-with-crashreporter/ .

Por lo tanto, para importar correctamente el SDK de iOS de Google Maps en un proyecto Pod, primero use el siguiente Podfile :

source ''https://github.com/CocoaPods/Specs.git'' platform :ios, ''8.0'' # altered version of Google''s Podspec pod ''Google-Maps-iOS-SDK'', :podspec => "https://raw.githubusercontent.com/Reflejo/GoogleMapsPodspec/master/Google-Maps-iOS-SDK.podspec.json" use_frameworks! # don''t forget this!

Ahora puedo hacer referencia a las clases de Google Maps desde mi código Swift simplemente al import GoogleMaps . Y, para distribuir el Pod, mi Podspec final ahora se parece a lo siguiente:

Pod::Spec.new do |s| s.name = ''MyPod'' s.version = ''1.0.0'' s.homepage = "https://github.com/..." s.summary = ''(pod summary)'' #s.screenshot = "" s.author = { ''Romain L'' => ''(email)'' } s.license = { :type => ''BSD'', :file => ''LICENSE'' } s.social_media_url = "https://twitter.com/_RomainL" s.platforms = { :ios => ''8.0'' } s.ios.deployment_target = ''8.0'' s.source_files = ''MyCode/*.{h,swift}'' s.module_name = ''MyPod'' s.source = { :git => "https://github.com/....git", :tag => "1.0.0" } s.requires_arc = true s.libraries = "c++", "icucore", "z" # required for GoogleMaps.framework s.frameworks = "AVFoundation", "CoreData", "CoreLocation", "CoreText", "Foundation", "GLKit", "ImageIO", "OpenGLES", "QuartzCore", "SystemConfiguration", "GoogleMaps" # required for GoogleMaps.framework s.vendored_frameworks = "Dependencies/GoogleMaps.framework" # Put the Google-provided framework in that subfolder of your Pod project #s.dependency ''Google-Maps-iOS-SDK'' # Careful! this will cause errors if enabled! end

Ahora puedo iniciar una nueva aplicación de iOS en Xcode y usar el siguiente Podfile para enlazar con mi propio pod, haciendo referencia al SDK de iOS de Google Maps:

source ''https://github.com/CocoaPods/Specs.git'' platform :ios, ''8.0'' pod ''MyPod'' use_frameworks! # do not forget this!

No es tan fácil, pero factible después de todo! Sin Podspec , Podspec Google pronto parche su archivo Podspec para los desarrollos de Swift.