Usando MapBox con RubyMotion y CocoaPods

Si ha probado la √ļnica l√≠nea pod MapBox, sabe que su aplicaci√≥n no se compilar√°. He aqu√≠ c√≥mo solucionar este problema.


El problema y la solución

El uso de cocoapods de movimiento y cocoapods esperaría que pod 'MapBox'funcionara. Si agrega estas dos líneas después de su app.pods do ...bloque, está listo para comenzar:

app.libs.delete_if { |lib| lib =~ /Proj4/ }
app
.vendor_project('vendor/Pods/MapBox/Proj4', :static, products: ['libProj4.a'])

Es posible que deba eliminar los directorios vendory buildantes de que se compile. Especialmente si ya lo intentó rakey lo hizo explotar.

(Hay una muestra completa de Rakefile y Gemfile al final de esta p√°gina)

Versión más larga: configuración del proyecto

  1. Para probar esto en un nuevo proyecto, ejecute motion create --template=ios someappname
  2. Aseg√ļrese de tener una referencia de Gemfile cocoapodsymotion-cocoapods
  3. Ejecutar bundle installen la línea de comando
  4. Aseg√ļrese de que su Rakefile tenga al menos todo en el rakefile de muestra al final de esta p√°gina

Hacer un mapa

Para probarlo, debe crear un nuevo UIViewController (que muestra un mapa):

class MapViewController < UIViewController
def viewDidLoad
super

tiles
= RMMapBoxSource.alloc.initWithMapID "examples.map-z2effxa8"
map
= RMMapView.alloc.initWithFrame(UIScreen.mainScreen.bounds,andTilesource:tiles)
map
.zoom = 14
map
.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth
map
.delegate=self
self.view.addSubview(map)

center_co
= CLLocationCoordinate2D.new(40.7143528,-74.00597309999999)
map
.setCenterCoordinate(center_co,animated:true)

end
end

Y cambie su app_delegate.rbarchivo para mostrar el controlador:

class AppDelegate
def application(application, didFinishLaunchingWithOptions:launchOptions)
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)

mvc
= MapViewController.alloc.init

@window.rootViewController = mvc
@window.makeKeyAndVisible
true
end
end

¬°Corre rakey listo!

Imagen

Seguimiento de la ubicación del usuario adicional en una línea

Agrega esto a tu controlador

map.userTrackingMode = 1

Y obtenga un rastreador de ubicación en su mapa:

Imagen


Notas

  • A veces map.setCenterCoordinate(CLLocationCoordinate2D.new(40.7143528,-74.00597309999999),animated:true)bloquea el REPL, pero siempre funciona bien en archivos .rb.
  • En app_delegate.rb, puede reemplazar @windowcon $window, pero windowno funcionar√°.
  • No es necesario que map.delegate=selfsu controlador muestre simplemente un mapa, pero deber√° configurarlo para que funcione con marcadores y otros objetos del mapa.
  • ¬ŅLas clases del pod que agreg√≥ no se resuelven? La eliminaci√≥n de las vendory los builddirectorios y volver a ejecutar rakepor lo general corrige esto.

Ejemplo de Rakefile

$:.unshift("/Library/RubyMotion/lib")
require 'motion/project/template/ios'
Bundler.require

Motion::Project::App.setup do |app|

app
.pods do
pod
'MapBox'
end
app
.libs.delete_if { |lib| lib =~ /Proj4/ }
app
.vendor_project('vendor/Pods/MapBox/Proj4', :static, products: ['libProj4.a'])


#Optional--will come in handy if you do a lot of mapping/geolocation.
app
.frameworks += ["QuartzCore","CoreLocation","CoreMedia","MapKit"]
app
.pods do
pod
'NSData+Base64'
end
end

Muestra de Gemfile

source 'https://rubygems.org'
gem
'cocoapods'
gem
'motion-cocoapods'

Versiones

  • movimiento (2.0)
  • rub√≠ (2.0.0)
  • gema: cocoapods (0.20.2)
  • gema: cocoapods-core (0.20.2)
  • gema: movimiento-cocoapods (1.3.2)
  • pod: MapBox (1.0.2)