Search code examples
iosdropboxrubymotion

RubyMotion and Dropbox


I'm working on getting the Dropbox Sync SDK working in my RubyMotion app. I've looked around and only found one other guy looking for help, however he's using the Dropbox Core SDK and I wasn't able to fix it the way he was able to. Here's what I've done so far:

  1. Downloaded the Dropbox Sync SDK, moved it to vendor/Dropbox.framework
  2. Added app.vendor_project 'vendor/Dropbox.framework', :static, :products => ['Dropbox'], :headers_dir => 'Headers' and app.frameworks += ['Security','QuartzCore'] to my Rakefile.
  3. Ran rake clean, then rake and got the following output.

Undefined symbols for architecture i386:
"std::__1::basic_string, std::__1::allocator >::compare(char const*) const", referenced from: fetch_metadata(dbx_client*, HttpRequester&, dbx_path_val const&, bool, bool, bool) in Dropbox(sync.o)

...

I can give the full stack trace if needed. Any idea what I'm missing? Thanks a boat load for any help.

Edit: Stack trace using markrickert's method:

:~/Development/simple|master⚡ ⇒  rake
rake aborted!
[!] Unable to find a specification for `Dropbox-Sync-API-SDK`.
~/.rvm/gems/ruby-1.9.3-p448/gems/cocoapods-0.23.0/lib/cocoapods/resolver.rb:195:in `find_cached_set'
~/.rvm/gems/ruby-1.9.3-p448/gems/cocoapods-0.23.0/lib/cocoapods/resolver.rb:153:in `block (2 levels) in find_dependency_specs'
~/.rvm/gems/ruby-1.9.3-p448/gems/cocoapods-0.23.0/lib/cocoapods/user_interface.rb:113:in `message'
~/.rvm/gems/ruby-1.9.3-p448/gems/cocoapods-0.23.0/lib/cocoapods/resolver.rb:152:in `block in find_dependency_specs'
~/.rvm/gems/ruby-1.9.3-p448/gems/cocoapods-0.23.0/lib/cocoapods/resolver.rb:148:in `each'
~/.rvm/gems/ruby-1.9.3-p448/gems/cocoapods-0.23.0/lib/cocoapods/resolver.rb:148:in `find_dependency_specs'
~/.rvm/gems/ruby-1.9.3-p448/gems/cocoapods-0.23.0/lib/cocoapods/resolver.rb:65:in `block (2 levels) in resolve'
...

^^ Needed to run pod setup to fix this.


Solution

  • You might want to take a look at the Dropbox Sync Podspec file to get an idea of what you need to do in order to correctly include it in your file... or you can just use the Cocoapod:

    In your Gemfile:

    gem "motion-cocoapods", '~> 1.3.0'
    gem "cocoapods"
    

    And in your rakefile:

    Motion::Project::App.setup do |app|
      # Use `rake config' to see complete project settings.
      app.name = 'Whatever'
    
      app.pods do
        pod 'Dropbox-Sync-API-SDK'
      end
    end
    

    Then when you run rake pod:install it should automatically include all the dependencies and compile and allow you to use the SDK.