Cocoapods: ITMS-90381: Too many symbol files - These symbols have no corresponding slice in any binary

Created on 30 Mar 2020  Â·  6Comments  Â·  Source: CocoaPods/CocoaPods

Report

What did you do?

We have a somewhat complicated situation regarding an inhouse developed framework, a third party framework, and an app-extension specific subspec. I will try to explain the situation as best I can.

We have an internally developed framework, that is dependant on a third party framework. Out internal framework has not required any additional work to be compatible with App-extensions (in this case a custom keyboard), but the thirdparty framework has a separate subspec for App extensions, so our internal has a Default subspec, and an Extension subspec which uses the Extension version. Here is a truncated podspec for the internal framework:

Pod::Spec.new do |s|
  s.name             = 'internalFramework'
  s.version          = '5.10.0'
  s.summary          = '*removed*'
  s.description      = <<-DESC

                       DESC

  s.homepage         = '*removed*'
  s.license          = 'None'
  s.authors          = {  }
  s.source           = { :git => '*removed*', :tag => s.version.to_s }
  s.module_name      = 'internalFramework'


  s.default_subspecs = 'Default'

  s.subspec 'Default' do |default|
    default.ios.dependency 'ThirdParty/Framework', '2.16.2'
    default.tvos.dependency 'Thirdparty/tvOSFramework', '2.16.2'
  end


  s.subspec 'Extension' do |extSpec|
    extSpec.ios.dependency 'Thirdparty/AppExtensionFramework', '2.16.2'
  end

  s.xcconfig = { 'OTHER_LDFLAGS' => '-ObjC', 'OTHER_CFLAGS' => '-fembed-bitcode' }

end

The project importing the internal framework has two build targets, an app, and and app extension. In their pod file the specify which subspec of the internal framework is required

What did you expect to happen?

Apps and app-extensions should be uploaded to itunes connect without warnings.

What happened instead?

On uploading to itunes connect we are presented with the following warning:

ITMS-90381: Too many symbol files - These symbols have no corresponding slice in any binary [ECA6DEE7-3D1C-3EE2-999C-387C9FC0C2F7.symbols].

The warning specifically references the third party framework. Upon inspection, it would seem that the symbol files for both the App and App-extension version are being included in the uploaded archive of the extension, rather than just the app extension.

CocoaPods Environment

Stack

   CocoaPods : 1.7.1
        Ruby : ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
    RubyGems : 3.0.3
        Host : Mac OS X 10.15.3 (19D76)
       Xcode : 11.3 (11C29)
         Git : git version 2.21.0 (Apple Git-122.2)
Ruby lib dir : /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib
Repositories : removed @ 88d096d9a5c125186f15ee56180dd97b830caa0e
               master - https://github.com/CocoaPods/Specs.git @ 42d5d88c2e9fc106a1dc873d2fc7054d208eba01

Installation Source

Executable Path: /usr/local/bin/pod

Plugins

cocoapods-deintegrate : 1.0.4
cocoapods-plugins     : 1.0.0
cocoapods-search      : 1.0.0
cocoapods-stats       : 1.1.0
cocoapods-trunk       : 1.4.1
cocoapods-try         : 1.1.0

Podfile

source 'redacted'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
use_frameworks!
# ignore warnings from all pods
inhibit_all_warnings!
target 'DevApp' do
  pod 'Gifu'
  pod 'internalFramework'
end
target 'Keyboard extension' do
  pod 'Gifu'
  pod 'internalFramework/Extension'
end
target 'App' do
  # Automatic Capacitor Pod dependencies, do not delete
  pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
  pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
  pod 'CordovaPlugins', :path => '../capacitor-cordova-ios-plugins'
  pod 'internalFramework'
end
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = "YES"
    end
  end
  installer.pods_project.targets.each do |target|
      if ['Capacitor'].include? target.name
          target.build_configurations.each do |config|
              config.build_settings['SWIFT_VERSION'] = '4.2'
          end
      end
  end

end

Most helpful comment

ios/Podfile

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      config.build_settings['VALID_ARCHS'] = 'arm64'
    end
  end
end

config.build_settings['VALID_ARCHS'] = 'arm64' is important

All 6 comments

Should these bcsymbol map files not end up inside the extension? If so we can make a change for that.

We're seeing a similar issue that might be related: we have two subspecs that each define different vendored frameworks, one for a "lite" app extension compatible framework and another for the "full" framework. The default subspec is the full version. When a target depends on the full version it also (unexpectedly, I think?) gets a dependency for the app extension version of framework.

I've looked in the generated Pods-XXX.debug.xcconfig and there are both frameworks listed in OTHER_LDFLAGS

If this isn't the expected behaviour and doesn't seem related to the original issues I'll open a new one.

ios/Podfile

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      config.build_settings['VALID_ARCHS'] = 'arm64'
    end
  end
end

config.build_settings['VALID_ARCHS'] = 'arm64' is important

I tried @shinriyo 's solution and seems to be resolved, but another warning has occurred on each pod targets.

Mapping architecture arm64 to x86_64. Ensure that this target's Architectures and Valid Architectures build settings are configured correctly for the iOS Simulator platform.

This is not a critical, but too annoying.

I tried
config.build_settings['VALID_ARCHS'] = config.name == 'Debug' ? 'arm64 arm64e x86_64' : 'arm64 arm64e'
but not worked.

Any ideas?

There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates.

Using config.build_settings['VALID_ARCHS[sdk=iphonesimulator*]'] resolved my problem😌.

post_install do | installer |
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['VALID_ARCHS'] = 'arm64 arm64e'
          config.build_settings['VALID_ARCHS[sdk=iphonesimulator*]'] = 'x86_64' if config.name == 'Debug'
        end
    end
end
Was this page helpful?
0 / 5 - 0 ratings

Related issues

steffendsommer picture steffendsommer  Â·  3Comments

pronebird picture pronebird  Â·  3Comments

dawnnnnn picture dawnnnnn  Â·  3Comments

gerchicov-bp picture gerchicov-bp  Â·  3Comments

lzwjava picture lzwjava  Â·  3Comments