Search code examples
iosstatic-librariescocoapodsadobe-analytics

Use AdobeMobileLibrary (for iOS) with cocoapods?


We are going to use Omniture-Tracking for iOS, which is part of AdobeMobileLibrary. AdobeAdobeMobileLibrary is not available via cocoapods-repo (only an older version of Omniture), but as a static-library, that you can download from the Adobe Website.

I wonder if it is possible to maintain this static-library with cocoapods?

I've created a podspec-file:

Pod::Spec.new do |s|
  s.name           = 'AdobeMobileLibrary'
  s.version        = '4.0.2'
  s.license        = 'Commercial'
  s.summary        = 'Adobe Omniture SiteCatalyst analytics library for iOS.'
  s.homepage       = 'https://developer.omniture.com/en_US/content_page/mobile/c-measuring-mobile-applications'
  s.author         = { 'Adobe Omniture SiteCatalyst' => 'http://www.adobe.com/solutions/digital-marketing.html' }
  s.source_files   = 'AdobeMobileLibrary/*.{json,h}'
  s.ios.vendored_library = 'AdobeMobileLibrary/AdobeMobileLibrary.a'
  s.library        = 'AdobeMobileLibrary'
  s.xcconfig       = { 'LIBRARY_SEARCH_PATHS' => '"$(PODS_ROOT)/AdobeMobileLibrary"' }
end

In my podfile I reference the podspec-file like s this:

pod 'AdobeMobileLibrary', :path => 'AdobeMobileLibrary.podspec'

In the Pods-project I can see all the files (AdobeMobileLibrary.a, ADBMobile.h, ADBMobileConfig.json)

see https://i.sstatic.net/rnmp1.png

However I cannot build the project and receive this error message:

ld: library not found for -lAdobeMobileLibrary

Does anyone have a clue, what's the problem here?

Is there a different solution to use AdobeMobileLibrary with cocoapods?


Solution

  • The issue is due to cocoapods expecting the library to have a lib prefix, i.e. libAdobeMobileLibrary.a in this case. The easiest way to resolve this issue is to create a symbolic link to the library:

    ln -s AdobeMobileLibrary.a libAdobeMobileLibrary.a
    

    It's also worth noting that with the Adobe Mobile SDK, the .json file should be included as a resource not as source. Also you'll want to add references to both the SystemConfiguration framework as well as libSqlite3.0.dylib. Here's your pod spec modified accordingly:

    Pod::Spec.new do |s| 
      s.name           = 'AdobeMobileLibrary'
      s.version        = '4.0.2'
      s.license        = 'Commercial'
      s.summary        = 'Adobe Omniture SiteCatalyst analytics library for iOS.'
      s.homepage       = 'https://developer.omniture.com/en_US/content_page/mobile/c-measuring-   mobile-applications'
      s.author         = { 'Adobe Omniture SiteCatalyst' => 'http://www.adobe.com/solutions/digital-marketing.html' }
      s.source_files   = 'AdobeMobileLibrary/*.h'
      s.resource       = 'AdobeMobileLibrary/ADBMobileConfig.json'
      s.framework      = 'SystemConfiguration'
      s.ios.vendored_library = 'AdobeMobileLibrary/AdobeMobileLibrary.a'
      s.libraries      = 'sqlite3.0','AdobeMobileLibrary'
      s.xcconfig       = { 'LIBRARY_SEARCH_PATHS' => '"$(PODS_ROOT)/AdobeMobileLibrary"' }
    end