Cocoapods: With use_modular_headers, headers from a vendored_framework are not found

Created on 5 Apr 2018  ·  13Comments  ·  Source: CocoaPods/CocoaPods

Report

What did you do?

ℹ Please replace these two lines with what you did.

  • git clone [email protected]:paulb777/iid-modular-header-bug.git
  • cd iid-modular-header-bug/Example/
  • pod update --no-repo-update
  • open iid-use-module-bug.xcworkspace/
  • Build and notice failure
  • cp ./Pods/Headers/Public/FirebaseInstanceID/FirebaseInstanceID/*.h ./Pods/Headers/Public/FirebaseInstanceID
  • Build and notice success from the workaround

What did you expect to happen?

Build success without workaround

What happened instead?

The header is not found.

CocoaPods Environment

Stack

   CocoaPods : 1.5.0
        Ruby : ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin17]
    RubyGems : 2.6.13
        Host : Mac OS X 10.13.3 (17D47)
       Xcode : 9.2 (9C40b)
         Git : git version 2.15.0.403.gc27cc4dac6-goog
Ruby lib dir : /Users/paulbeusterien/.rbenv/versions/2.4.0/lib
Repositories : cpdc-eap-spec - sso://cpdc-eap/spec @ a8bc771e29e69f1909d675897aa194584edc02e4
               cpdc-internal-spec - sso://cpdc-internal/spec @ 18fc461957247a2c3d86b43901cf0d3c3f1a40b2
               master - https://github.com/CocoaPods/Specs.git @ 4a324eae6501e935f5169d4c9f4b2ae9801ef0fc
               paul-specs - sso://user/paulbeusterien/Specs @ 0b01f6ce5731056ef13971c3c2e339fb1c789cff

Installation Source

Executable Path: /Users/paulbeusterien/.rbenv/versions/2.4.0/bin/pod

Plugins

claide-plugins         : 0.9.2
cocoapods-deintegrate  : 1.0.2
cocoapods-dependencies : 1.1.0
cocoapods-plugins      : 1.0.0
cocoapods-search       : 1.0.0
cocoapods-stats        : 1.0.0
cocoapods-trunk        : 1.3.0
cocoapods-try          : 1.1.0
cocoapods_debug        : 0.1.0

Podfile

#use_frameworks!
use_modular_headers!

target 'iid-use-module-bug_Example' do
  pod 'iid-use-module-bug', :path => '../'

  target 'iid-use-module-bug_Tests' do
    inherit! :search_paths


  end
end

Project that demonstrates the issue

https://github.com/paulb777/iid-modular-header-bug

Most helpful comment

@dnkoutso This is needed for FirebaseMessaging to build with modular headers, so I'd prefer that 1.5.1 gets a fix.

I can debug and try to make a PR later this week.

All 13 comments

I believe this will be fixed by a change I'm working on that will have headers from vendored static frameworks found via FRAMEWORK_SEARCH_PATHS, rather than via the sandbox's headers directory

@paulb777 I think this will be fixed easier with the 1.6.0 refactor of build settings, do you think we can move it to 1.6.0?

@dnkoutso This is needed for FirebaseMessaging to build with modular headers, so I'd prefer that 1.5.1 gets a fix.

I can debug and try to make a PR later this week.

👍

The difference between with and without use_modules! is HEADER_SEARCH_PATHS in ./Pods/Target Support Files/iid-use-module-bug/iid-use-module-bug.xcconfig

HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"

vs

HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/FirebaseCore" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac"

but I think those should be present in FRAMEWORK_SEARCH_PATHS for vendored frameworks instead?

Yep - adding the following to ./Pods/Target Support Files/iid-use-module-bug/iid-use-module-bug.xcconfig is another way to make it build:

FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/FirebaseCore/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks"

I'll see if I can turn that on ...

I'd prefer that 1.5.1 gets a fix. +1

@paulb777
Is there a temporary solution?We can not wait 1.5.1 releasing.

@paulb777
I test your PR in my local. I am not sure the PR make this issue. Please help me.

# A mixed oc/swift pod
pod 'YTXDTNWBWeexContainerBusinessModule'

link error:

ld: library not found for -lswiftCoreLocation for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I am so confused.

  • I never use corelocation
  • There is not 'corelocation' word in workspace or build log

By the way, If i remove 'YTXDTNWBWeexContainerBusinessModule' then link well!

I found why...
If 'Other Linker Flags' add '-ObjC' then the link error will happen

@mdsb100 Thanks for trying out the PR. It sounds like you have a different issue. Please create another issue with enough info to reproduce.

@paulb777
Try this PR, It seems 'pod install ' slower than before.

Hello
There is a same issue with abstract target.

#use_frameworks!
use_modular_headers!

abstract_target 'iid-use-module-bug_shared_core' do

  pod 'iid-use-module-bug', :path => '../'

  target 'iid-use-module-bug_Example_1' do
  end

  target 'iid-use-module-bug_Example_2' do
  end

  target 'iid-use-module-bug_Tests' do
    inherit! :search_paths
  end

end
Was this page helpful?
0 / 5 - 0 ratings

Related issues

steffendsommer picture steffendsommer  ·  3Comments

marzapower picture marzapower  ·  3Comments

tlandsmancars picture tlandsmancars  ·  3Comments

pallaviMN picture pallaviMN  ·  3Comments

Mingmingmew picture Mingmingmew  ·  3Comments