How can I declare dependency to subspec 'A' from subspec 'B' in the same podspec file?

2.2k views Asked by At

I am trying to find out a way to declare dependency from subspec 'B' to subspec 'A' in the podspec: 'mypodspecfile.podspec' as below:

Pod::Spec.new do |s|
  s.name         = "MyLib-SDK"
  s.version      = "1.0"
  s.summary      = "My Library"
  s.homepage     = "http://myhomepage.com"

  s.ios.deployment_target = "8.0"
  s.ios.frameworks = "Foundation", "UIKit", "SystemConfiguration", "Security", "CoreTelephony", "WebKit"

  s.source       = { :git => "https://github.com/myhome/ios-project.git", :tag => "1.0" }

  s.subspec 'MyLibrary-A' do |libOne|
    libOne.source_files  = "Headers", "Headers/**/*.h"
    libOne.exclude_files = "Headers/Exclude"
    libOne.resources = "SharedAssets/*"

    libOne.libraries = "z","sqlite3" #Zlib for gzip, sqlite3 for event store
    libOne.vendored_library = "libMyLibrary_A.a"
  end

  s.subspec 'MyLibrary-B' do |libTwo|
    libTwo.source_files  = "Headers", "Headers/**/*.h"
    libTwo.exclude_files = "Headers/Exclude"
    libTwo.resources = "SharedAssets/*"
    libTwo.dependency 'MyLibrary-A'  <-- doesn't seem to be working here!!

    libTwo.libraries = "sqlite3" # sqlite3 for db
    libTwo.vendored_library = "libMyLibrary_B.a"
  end

 end

When I execute:

$pod spec lint mypodspecfile.podspec --verbose

-ERROR | [iOS] unknown: Encountered an unknown error (Unable to find a specification for MyLibrary-A depended upon by MyLibrary-B

Any help would be greatly appreciated. Thanks you!

1

There are 1 answers

0
Dennis Pashkov On

You should always write the full path to the pod dependencies. The error states that cocoa pods cannot find the .podspec file for MyLibrary-A in the pod repo(s). To fix the issue, specify full path 'MyLib-SDK/MyLibrary-A'.

So your podspec file should look like this:

Pod::Spec.new do |s|
  s.name         = "MyLib-SDK"
  s.version      = "1.0"
  s.summary      = "My Library"
  s.homepage     = "http://myhomepage.com"

  s.ios.deployment_target = "8.0"
  s.ios.frameworks = "Foundation", "UIKit", "SystemConfiguration", "Security", "CoreTelephony", "WebKit"

  s.source = { :git => "https://github.com/myhome/ios-project.git", :tag => "#{s.version}" }

  s.subspec 'MyLibrary-A' do |libOne|
    libOne.source_files  = "Headers", "Headers/**/*.h"
    libOne.exclude_files = "Headers/Exclude"
    libOne.resources = "SharedAssets/*"

    libOne.libraries = "z","sqlite3" #Zlib for gzip, sqlite3 for event store
    libOne.vendored_library = "libMyLibrary_A.a"
  end

  s.subspec 'MyLibrary-B' do |libTwo|
    libTwo.source_files  = "Headers", "Headers/**/*.h"
    libTwo.exclude_files = "Headers/Exclude"
    libTwo.resources = "SharedAssets/*"
    libTwo.dependency 'MyLib-SDK/MyLibrary-A'  # here is the change

    libTwo.libraries = "sqlite3" # sqlite3 for db
    libTwo.vendored_library = "libMyLibrary_B.a"
  end

 end