I am using Xcode 12.2, and working on a Swift static framework (embedded in a .xcframework
in the end), which I intend to deliver with CocoaPods.
My issue is currently not the CocoaPods integration in an app project (pod install
works correctly and app builds & run), but the pod validation with pod lib lint
command.
The lint
validation fails, with logs containing the following:
ld: warning: Could not find or use auto-linked library 'swiftCoreGraphics'
ld: warning: Could not find or use auto-linked library 'swiftObjectiveC'
ld: warning: Could not find or use auto-linked library 'swiftUIKit'
ld: warning: Could not find or use auto-linked library 'swiftDarwin'
ld: warning: Could not find or use auto-linked library 'swiftDispatch'
ld: warning: Could not find or use auto-linked library 'swiftAVFoundation'
ld: warning: Could not find or use auto-linked library 'swiftAccelerate'
ld: warning: Could not find or use auto-linked library 'swiftCoreImage'
ld: warning: Could not find or use auto-linked library 'swiftCompatibilityDynamicReplacements'
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$__TtCs12_SwiftObject", referenced from:
[...]
And log contains the same with
Undefined symbols for architecture arm64
My .podspec
file is the following
Pod::Spec.new do |s|
s.name = 'MyFramework'
s.version = '1.0.0'
s.source = { :git => 'https://url-to-repo.git', :tag => s.version.to_s }
s.ios.deployment_target = '12.0'
s.platform = :ios
s.swift_version = '5.0'
s.requires_arc = true
s.static_framework = true
s.ios.vendored_frameworks = "MyFramework.xcframework"
s.frameworks = 'AVFoundation', 'Accelerate', 'CoreGraphics', 'CoreImage'
s.ios.library = 'z', 'c++'
end
My guess is that the project that CocoaPods creates is with Objective-C, and there would be probably no reference to the Swift compiler or libraries. But I have no clues how to fix this..
I've been losing days on this, any help would be greatly appreciated.
Thanks
You are right, for the validation of a podspec, CocoaPods create an Objective-C Xcode project.
A Swift-only framework having a Mach-O Type
with Static Library
is indeed an issue on CocoaPods' side, because it can't handle it yet.
In this situation, the Swift libraries are not linked.
An issue has been opened and addressed on CocoaPods repository, and the fix will come with CocoaPods version 1.11
Until this CocoaPods 1.11 release, here are the workarounds shared in this issue (I haven't tried them):
In your podspec add:
# Adding tests with a swift dependency is a workaround in order to make pod lib lint work
# See: https://github.com/CocoaPods/CocoaPods/issues/8649
spec.test_spec 'Tests' do |spec|
spec.dependency 'Result', '~> 5.0'
end
Also fyi, there is no options to allow a pod push
if the lint
fails for the simple reason it would be considered as an anti-pattern.