【问题标题】:Use AdobeMobileLibrary (for iOS) with cocoapods?将 Adob​​eMobileLibrary(适用于 iOS)与 cocoapods 一起使用?
【发布时间】:2024-01-04 14:46:01
【问题描述】:

我们将使用 Omniture-Tracking for iOS,它是 Adob​​eMobileLibrary 的一部分。 AdobeAdobeMobileLibrary 不能通过 cocoapods-repo(仅限 Omniture 的旧版本)获得,但作为静态库,您可以从 Adob​​e 网站下载。

我想知道是否可以使用 cocoapods 维护这个静态库?

我已经创建了一个 podspec 文件:

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

在我的 podfile 中,我像这样引用 podspec 文件:

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

在 Pods 项目中,我可以看到所有文件(AdobeMobileLibrary.a、ADBMobile.h、ADBMobileConfig.json)

http://i.stack.imgur.com/rnmp1.png

但是我无法构建项目并收到此错误消息:

ld: library not found for -lAdobeMobileLibrary

有没有人有线索,这里有什么问题?

将 Adob​​eMobileLibrary 与 cocoapods 结合使用是否有不同的解决方案?

【问题讨论】:

    标签: ios static-libraries cocoapods adobe-analytics


    【解决方案1】:

    问题是由于 cocoapods 期望库具有 lib 前缀,即在这种情况下为 libAdobeMobileLibrary.a。解决此问题的最简单方法是创建指向库的符号链接:

    ln -s AdobeMobileLibrary.a libAdobeMobileLibrary.a
    

    还值得注意的是,对于 Adob​​e Mobile SDK,.json 文件应该作为资源而不是源包含在内。此外,您还需要添加对 SystemConfiguration 框架和 libSqlite3.0.dylib 的引用。这是您相应修改的 pod 规格:

    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
    

    【讨论】:

    • 感谢您的解决方案!为了解决 lib-prefix 的问题,我在 Xcode 中添加了一个 Run Script to Build Phases,它创建了符号链接(如果不存在)。
    • AdobeMobileSDK 现在也可用于 cocoapodscocoadocs.org/docsets/AdobeMobileSDK
    • “希望库有一个 lib 前缀”哦,我的……谢谢!
    【解决方案2】:

    为了更通用@fransen 的解决方案,我使用了prepare_commandpreserve_paths

    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.preserve_paths = 'AdobeMobileLibrary/libAdobeMobileLibrary.a'
      s.ios.vendored_library = 'AdobeMobileLibrary/AdobeMobileLibrary.a'
      s.prepare_command  = <<-CMD
                 if [ -f $PWD/AdobeMobileLibrary/libAdobeMobileLibrary.a ]
                 then
                     rm -rf $PWD/AdobeMobileLibrary/libAdobeMobileLibrary.a
                 fi
                 ln -s $PWD/AdobeMobileLibrary/AdobeMobileLibrary.a $PWD/AdobeMobileLibrary/libAdobeMobileLibrary.a
                              CMD
      s.libraries      = 'sqlite3.0'
      s.xcconfig       = { 'LIBRARY_SEARCH_PATHS' => '"$(PODS_ROOT)/AdobeMobileLibrary"' }
    end
    

    【讨论】:

      最近更新 更多