Search code examples
cocoapodsfirebase-storagefirebaseui

cocoapods pod file dependency issue with Firebase, specifically FirebaseUI


I am trying to use the Firebase Storage documented example code :

// Reference to an image file in Firebase Storage
let reference = storageRef.child("images/stars.jpg")

// UIImageView in your ViewController
let imageView: UIImageView = self.imageView

// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")

// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)

adapted like so in my app:

  func setImage(_ picid: Int32){

        let imagesRefs = Constants.FirebaseConfig.storageRef.child("images/thumbs/\(getuid())/thumb_\(picid).jpg");
        let placeholderImage = UIImage(named: "placeholder.jpg")

        profilePicIV.sd_setImage(with: imagesRefs, placeholderImage: placeholderImage)
}

but the method sd_setImage was not found by xcode so I thought I had to update my podfile with the pod 'FirebaseUI/Storage' but after tinkering with my podfile I get this error:

pod update
Update all pods
Updating local specs repositories
  $ /usr/bin/git -C /Users/myname/.cocoapods/repos/master fetch origin --progress
  remote: Counting objects: 18, done.        
  remote: Compressing objects: 100% (14/14), done.        
  remote: Total 18 (delta 12), reused 7 (delta 4), pack-reused 0        
  From https://github.com/CocoaPods/Specs
     24df16553de..7cae8225fce  master     -> origin/master
  $ /usr/bin/git -C /Users/myname/.cocoapods/repos/master rev-parse --abbrev-ref HEAD
  master
  $ /usr/bin/git -C /Users/myname/.cocoapods/repos/master reset --hard origin/master
  HEAD is now at 7cae8225fce [Add] MixedRealityKit 0.1.6
Analyzing dependencies
[!] Unable to satisfy the following requirements:

- `TwitterCore (~> 2.8.0)` required by `Podfile`
- `TwitterCore (>= 3.0.0)` required by `TwitterKit (3.0.0)`
- `FirebaseUI` required by `Podfile`

Specs satisfying the `FirebaseUI` dependency were found, but they required a higher minimum deployment target.

My pods file is like so though I have tried other pod combinations but to the same or worse effect:

# Uncomment the next line to define a global platform for your project
platform :ios, '10.3'

# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
  target 'StrengthStandards' do
    #Pods for StrengthStandards
    pod 'Firebase'
    pod 'Firebase/Core'
    #pod 'Firebase/Auth'
    #pod 'FirebaseUI/Google'
    #pod 'Firebase/Crash'
    #pod 'Firebase/RemoteConfig'
    pod 'FirebaseUI'
    pod 'Firebase/Database'
    #pod 'FirebaseUI/Database'
    #pod 'Firebase/Storage'
    pod 'FirebaseUI/Storage'
    pod 'TwitterCore', '~>2.8.0'

  target 'StrengthStandardsTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'StrengthStandardsUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

What am I doing wrong? Also my xcode gives the error No such module 'FirebaseAuthUI' on my import FirebaseAuthUI line.

Before this problem I had my Firebase Database and Firebase Auth working.

I am using Xcode 8.3.3 and Swift 3, on MacOS 10.12.6

Thanks

PS: making some progress - now my podfile is:

# Uncomment the next line to define a global platform for your project
platform :ios, '10.3'

# Comment the next line if you're not using Swift and don't want to use dynamic frameworks

  target 'StrengthStandards' do
    use_frameworks!
    #Pods for StrengthStandards
    #pod 'Firebase'
    pod 'Firebase/Core'
    #pod 'Firebase/Auth'
    pod 'FirebaseUI/Auth'

    pod 'FirebaseUI/Google'
      #pod 'FirebaseUI/Google'
    #pod 'Firebase/Crash'
    #pod 'Firebase/RemoteConfig'
    #pod 'FirebaseUI'
      pod 'Firebase/Database'
      #pod 'FirebaseUI/Database'
    #pod 'Firebase/Storage'
    pod 'FirebaseUI/Storage'
    pod 'TwitterCore', '~>2.8.0'
  target 'StrengthStandardsTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'StrengthStandardsUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

and I no longer get the dependancy issues however, xcode now tells me that the method call

  profilePicIV.sd_setImage(with: imagesRefs, placeholderImage: placeholderImage)

is wrong:

/Users/myname/Dev/IOSDev/StrengthStandards/StrengthStandards/Settings.swift:325:40: Cannot convert value of type 'StorageReference' to expected argument type 'URL?'

Solution

  • Seems to work now though I admit I'm not sure if it is exactly the way it is supposed to be done. For anyone interested here is what I have so far: Podfile:

    # Uncomment the next line to define a global platform for your project
    platform :ios, '10.3'
    
    # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
    
      target 'StrengthStandards' do
        use_frameworks!
        pod 'Firebase/Core'
        pod 'FirebaseUI/Auth'
        pod 'FirebaseUI/Google'
        pod 'Firebase/Database'
        pod 'FirebaseUI/Storage'
        pod 'TwitterCore', '~>2.8.0'
        pod 'SDWebImage/Core'
      target 'StrengthStandardsTests' do
        inherit! :search_paths
        # Pods for testing
      end
    
      target 'StrengthStandardsUITests' do
        inherit! :search_paths
        # Pods for testing
      end
    
    end
    

    and here is my function:

    import SDWebImage
    func setImage(_ picid: Int32){
    
            let imagesRefs = Constants.FirebaseConfig.storageRef.child("images/thumbs/\(Constants.getUID())/thumb_\(picid).jpg");
    
            imagesRefs.downloadURL { url, error in
                if let error = error {
                    // Handle any errors
                    print("Error getting url for profile pic: \(error)")
                } else {
                    // Get the download URL for 'images/stars.jpg'
                    let placeholderImage = UIImage(named: "placeholder.jpg")
                    self.profilePicIV.sd_setImage(with: url, placeholderImage: placeholderImage)
                }
            }
    }