Se você tentou a única linha, pod MapBox
sabe que seu aplicativo não compilará. Veja como consertar isso.
O problema e a solução
Usando cocoapods de movimento e cocoapods você esperaria que pod 'MapBox'
funcionasse. Se você adicionar essas duas linhas após o app.pods do ...
bloqueio, estará pronto para prosseguir:
app.libs.delete_if { |lib| lib =~ /Proj4/ }
app.vendor_project('vendor/Pods/MapBox/Proj4', :static, products: ['libProj4.a'])
Pode ser necessário remover os diretórios vendor
e build
antes de compilar. Especialmente se você já tentou rake
e fez explodir.
(Há um Rakefile e Gemfile de amostra completo no final desta página)
Versão mais longa: configuração do projeto
- Para experimentar em um novo projeto, execute
motion create --template=ios someappname
- Certifique-se de ter uma referência de Gemfile
cocoapods
emotion-cocoapods
- Execute
bundle install
na linha de comando - Certifique-se de que seu Rakefile tenha pelo menos tudo no rakefile de amostra no final desta página
Fazendo um mapa
Para testá-lo, você precisa fazer um novo UIViewController (que exibe um 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
E mude seu app_delegate.rb
arquivo para exibir o 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
Corra rake
e pronto!
Rastreamento de localização do usuário bônus em uma linha
Adicione isso ao seu controlador
map.userTrackingMode = 1
E obtenha um rastreador de localização em seu mapa:
Notas
- Às vezes
map.setCenterCoordinate(CLLocationCoordinate2D.new(40.7143528,-74.00597309999999),animated:true)
trava o REPL, mas sempre funciona bem em arquivos .rb. - Em app_delegate.rb, você pode substituir
@window
por$window
, maswindow
não funcionará. - Você não precisa
map.delegate=self
simplesmente mostrar um mapa em seu controlador, mas precisará configurá-lo para funcionar com marcadores e outros objetos de mapa. - As classes do pod que você adicionou não estão resolvendo? Removendo os
vendor
ebuild
diretórios e re-executarrake
geralmente corrige isto.
Sample 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
Sample Gemfile
source 'https://rubygems.org'
gem 'cocoapods'
gem 'motion-cocoapods'
Versões
- movimento (2.0)
- rubi (2.0.0)
- gema: cocoapods (0,20.2)
- gema: cocoapods-core (0,20.2)
- gem: motion-cocoapods (1.3.2)
- pod: MapBox (1.0.2)