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
Apps and app-extensions should be uploaded to itunes connect without warnings.
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 : 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
Executable Path: /usr/local/bin/pod
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
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
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
Most helpful comment
ios/Podfileconfig.build_settings['VALID_ARCHS'] = 'arm64'is important