2017-10-25 2 views
5

Ich habe ein Problem mit Abhängigkeiten in Cocoapods enthalten.Klasse ist in beiden implementiert, Einer der beiden wird verwendet. Welches ist undefined

Ich habe ein Framework-Projekt (MyFramework Ziel), das auch App-Ziel (MyFrameworkExampleApp) hat. Wenn ich versuche, um die App zu laufen, erhalte ich eine Konsole voller Fehler wie so:

Klasse PodsDummy_AFNetworking sowohl in/private/var/Container/Bundle/Anwendung/AD85D7EC-2652-4019-94FB-C799D0FBA69B umgesetzt wird /MyFrameworkExampleApp.app/Frameworks/MyFramework.framework/MyFramework (0x1019a0438) und /var/containers/Bundle/Application/AD85D7EC-2652-4019-94FB-C799D0FBA69B/MyFrameworkExampleApp.app/MyFrameworkExampleApp (0x10107c558). Einer der beiden wird verwendet. Welches ist undefiniert.

Die Sache ist, kommen die Fehler aus den Bibliotheken enthalten nur in MyFramework Ziel

Hier sind die Inhalte meiner podfile:

# Specify platform. 
platform :ios, '9.0' 

# Let's ignore all warnings from all pods 
inhibit_all_warnings! 

target 'MyFramework’ do 

    # ReactiveCocoa for easier binding between UI and data models. 
    pod 'ReactiveCocoa', '< 3.0' 

    # ReactiveViewModel for easier handling of active/inactive view models. 
    pod 'ReactiveViewModel', '0.3' 

    # An Objective-C extension with some nice helpers including @weakify/@strongify. 
    pod 'libextobjc', '~> 0.4.1' 

    # AFNetworking Security stuff 
    pod 'AFNetworking/Security', '~> 2.5.4' 

    # KZPropertyMapper to easily map JSON dicts to properties 
    pod "KZPropertyMapper" 

    # Simple wrapper for KeyChain 
    pod 'UICKeyChainStore', '~> 2.0.6' 

    # Animated gifs 
    pod 'FLAnimatedImage', '~> 1.0' 

    # Firebase push notifications 
    pod 'Firebase/Core' 
    pod 'Firebase/Messaging' 

    # Easy image downloading with cache. 
    pod 'SDWebImage', '~> 3.7.2' 

    # Activity indicator for RBSlider 
    pod 'DGActivityIndicatorView' 

end 

target 'MyFrameworkExampleApp' do 

    # Progress indicator 
    pod 'MBProgressHUD', '~> 1.0.0' 

    # Color picker 
    pod 'iOS-Color-Picker' 

    # Hockey SDK 
    pod 'HockeySDK', '~> 5.0.0' 

end 

Wie Sie sehen können, hat App Ziel nicht erben irgendwelche Pods, noch habe ich irgendwelche globalen Pods. Was könnte der Grund dafür sein?

Antwort

3

Ich kenne den Grund nicht, aber wenn Sie die Pods- [AppName] .debug.xcconfig-Datei Ihrer Anwendung öffnen, die cocoapods erstellt, finden Sie OTHER_LDFLAGS, und Sie sehen Links zu denselben Frameworks, in denen Sie verlinken dein Rahmen. Wenn Sie also -framework [Duplicated framework] entfernen, verschwindet die Warnung.

scheint ein cocoapods Fehler

+1

Es ist ein CocoaPods Problem bei https://github.com/CocoaPods/CocoaPods/issues/7155 –

+1

* Wenn Sie also -Framework [Duplicated Rahmen] die Warnung verschwindet entfernen *. - Es ist eine Warnung, aber es erzeugt tatsächlich Abstürze während der Laufzeit, zum Beispiel bei der Verwendung von ReactiveCocoa –

+0

Das ist verrückt. Das bedeutet, dass statische/Klassenvariablen zur Laufzeit nicht statisch über die Rahmenbegrenzung hinaus sind - dies kann den Zustand verfälschen und alle Arten von undefiniertem Verhalten verursachen (zum Beispiel schlägt Google Maps SDK auf diese Weise fehl). Was ist die Problemumgehung? – Marchy

0

Ich fand auch eine andere ein Skript, jemand zu sein, schrieb, dass der Fehler automatisch beheben. Es ist einfach das gleiche wie oben beschrieben. Fügen Sie es zu Ihrem Podfile:

post_install do |installer| 
    sharedLibrary = installer.aggregate_targets.find { |aggregate_target| aggregate_target.name == 'Pods-[MY_FRAMEWORK_TARGET]' } 
    installer.aggregate_targets.each do |aggregate_target| 
     if aggregate_target.name == 'Pods-[MY_APP_TARGET]' 
      aggregate_target.xcconfigs.each do |config_name, config_file| 
       sharedLibraryPodTargets = sharedLibrary.pod_targets 
       aggregate_target.pod_targets.select { |pod_target| sharedLibraryPodTargets.include?(pod_target) }.each do |pod_target| 
        pod_target.specs.each do |spec| 
         frameworkPaths = unless spec.attributes_hash['ios'].nil? then spec.attributes_hash['ios']['vendored_frameworks'] else spec.attributes_hash['vendored_frameworks'] end || Set.new 
        frameworkNames = Array(frameworkPaths).map(&:to_s).map do |filename| 
         extension = File.extname filename 
         File.basename filename, extension 
        end 
        frameworkNames.each do |name| 
         if name != '[DUPLICATED_FRAMEWORK_1]' && name != '[DUPLICATED_FRAMEWORK_2]' 
          raise("Script is trying to remove unwanted flags: #{name}. Check it out!") 
         end 
         puts "Removing #{name} from OTHER_LDFLAGS" 
         config_file.frameworks.delete(name) 
        end 
       end 
      end 
      xcconfig_path = aggregate_target.xcconfig_path(config_name) 
      config_file.save_as(xcconfig_path) 
     end 
    end 
end 
Verwandte Themen