googlevr / gvr-ios-sdk

Google VR SDK for iOS
http://developers.google.com/vr/ios/
Other
645 stars 191 forks source link

Can't import GVRKit as a dependency on podspec - swift issue #268

Closed ElizaSapir closed 7 years ago

ElizaSapir commented 7 years ago

Hey,

Since your SDK is not modular it can't be used and imported on Swift SDKs. When trying to add GVRKit as a dependency on my pod spec got below issues:

Undefined symbols for architecture x86_64:
  "_gvr_buffer_viewport_get_source_uv", referenced from:
      -[GVRHeadPose setEyePose:forEye:bufferViewport:] in GVRKit(GVRHeadPose_2bf6e92ff5dc28b55fbef7223f22005b.o)
  "_OBJC_CLASS_$_GVROverlayView", referenced from:
      objc-class-ref in GVRKit(GVRRendererView_b99a5f4340c0ec098da8c468688d7627.o)
  "_gvr_buffer_viewport_list_destroy", referenced from:
      gvr::WrapperBase<gvr_buffer_viewport_list_, &(gvr_buffer_viewport_list_destroy)>::~WrapperBase() in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_buffer_viewport_destroy", referenced from:
      gvr::WrapperBase<gvr_buffer_viewport_, &(gvr_buffer_viewport_destroy)>::~WrapperBase() in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced from:
      void std::__1::vector<gvr_buffer_spec_ const*, std::__1::allocator<gvr_buffer_spec_ const*> >::__push_back_slow_path<gvr_buffer_spec_ const*>(gvr_buffer_spec_ const*&&) in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
      void std::__1::vector<gvr::BufferSpec, std::__1::allocator<gvr::BufferSpec> >::__push_back_slow_path<gvr::BufferSpec>(gvr::BufferSpec&&) in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_buffer_viewport_list_get_item", referenced from:
      gvr::BufferViewportList::GetBufferViewport(unsigned long, gvr::BufferViewport*) const in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_swap_chain_create", referenced from:
      gvr::SwapChain::SwapChain(gvr_context_*, std::__1::vector<gvr::BufferSpec, std::__1::allocator<gvr::BufferSpec> > const&) in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_buffer_viewport_get_source_fov", referenced from:
      -[GVRHeadPose setEyePose:forEye:bufferViewport:] in GVRKit(GVRHeadPose_2bf6e92ff5dc28b55fbef7223f22005b.o)
  "_gvr_buffer_spec_destroy", referenced from:
      gvr::WrapperBase<gvr_buffer_spec_, &(gvr_buffer_spec_destroy)>::~WrapperBase() in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_swap_chain_destroy", referenced from:
      gvr::WrapperBase<gvr_swap_chain_, &(gvr_swap_chain_destroy)>::~WrapperBase() in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_pause_tracking", referenced from:
      -[GVRRenderer pause:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_reset_tracking", referenced from:
      -[GVRRenderer resetHeadRotation] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_get_time_point_now", referenced from:
      -[GVRRenderer drawFrame:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_get_head_space_from_start_space_rotation", referenced from:
      -[GVRRenderer drawFrame:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_swap_chain_acquire_frame", referenced from:
      -[GVRRenderer drawFrame:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_buffer_viewport_list_create", referenced from:
      -[GVRRenderer initializeGl] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_frame_bind_buffer", referenced from:
      -[GVRRenderer drawFrame:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_get_eye_from_head_matrix", referenced from:
      -[GVRRenderer drawFrame:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_refresh_viewer_profile", referenced from:
      -[GVRRenderer refresh] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_get_recommended_buffer_viewports", referenced from:
      -[GVRRenderer drawFrame:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_destroy", referenced from:
      gvr::GvrApi::~GvrApi() in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_initialize_gl", referenced from:
      -[GVRRenderer initializeGl] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_frame_unbind", referenced from:
      -[GVRRenderer drawFrame:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_buffer_viewport_create", referenced from:
      gvr::BufferViewportList::GetBufferViewport(unsigned long, gvr::BufferViewport*) const in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_frame_submit", referenced from:
      -[GVRRenderer drawFrame:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_resume_tracking", referenced from:
      -[GVRRenderer pause:] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_create", referenced from:
      gvr::GvrApi::Create() in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_buffer_spec_create", referenced from:
      -[GVRRenderer initializeGl] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
  "_gvr_buffer_spec_get_size", referenced from:
      -[GVRRenderer initializeGl] in GVRKit(GVRRenderer_77a08564b55e3877a47269e8636edd3a.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Do you have any solution for me?

Thanks,

Eliza

gal-orlanczyk commented 7 years ago

👍

giladna commented 7 years ago

+1

jamezilla commented 7 years ago

I have this successfully compiling in a Swift project.

It looks like you're not linking the library binaries. Check your framework search paths in Build Settings and make sure they include GVRKit/frameworks.

image

Also check your library search paths:

image

If you installed via cocoapods, this should be handled automatically, but you might be overriding those paths and not specifying inherited in the overrides.

ElizaSapir commented 7 years ago

Hey @jamezilla,

Thanks for your quick response. I was able to run swift project only when I attached testVR-Bridging-Header.h, couldn't just

import GVRKit

BUT the issue on my side is not with a simple app, I have my own SDK and I am trying to add GVRKit as dependency on my podspec with no success.

Already have same logic for google "IMASDK", the difference is that IMA SDK is dynamic and importable with no problem.

BR, Eliza

sanjayc77 commented 7 years ago

Cocoapod dependencies are not aligned correctly. We had to release GVRKit in binary format, initially it was a source only pod. The reason was that GVRKit has a dependency on GVRSDK, which is a static binary library. So GVRKit had to be a static binary framework.

Not sure if that helps, I would also encourage you to look at the source code of GVRKit and see if you can use that: https://github.com/googlevr/gvr-ios-sdk/tree/master/Samples/GVRKit

ElizaSapir commented 7 years ago

@sanjayc77 can I get the full path to GVRKit including GVRSDK and all other configurations/ libs needed? I will try to add it statically.

Thanks!

sanjayc77 commented 7 years ago

Not sure what you mean full path to GVRKit and GVRSDK. Do you mean path to libGVRXXX.a in their Cocoapod package zip?

In the pod spec, you can find a link (GVRSDK https://github.com/CocoaPods/Specs/blob/master/Specs/3/7/9/GVRSDK/1.10.0/GVRSDK.podspec.json#L90) to the .tar.gz. Unzip and look under Libraries folder.

ElizaSapir commented 6 years ago

@sanjayc77 nothing helped, please reopen this issue if possible since for me it won't be closed until you have swift support for internal SDK's.

Thanks!