13

I'm working with SFSafariViewController, and ran into the following issue: The user is presented with an upload image button, when clicked the device properly displays multiple options, one of which is the camera. When the user selects the camera, it loads the camera but the screen is black, and the action button is greyed out. However if the user selects library, the selected image is properly uploaded.

I did verify that the app has camera permissions turned on.

I tried implementing the fixes found here and here, but to no avail.

Anyone else encounter this issue?

Code:

import UIKit
import SafariServices

class ViewController: UIViewController, SFSafariViewControllerDelegate
{
    private var urlString:String = "https://example.com"

    override func viewDidLoad()
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewDidAppear(animated: Bool)
    {
        super.viewDidAppear(animated)

        let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)

        svc.delegate = self

        self.presentViewController(svc, animated: true, completion: nil)
    }

    func safariViewControllerDidFinish(controller: SFSafariViewController) {
        super.dismissViewControllerAnimated(true, completion: nil)
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

-----Update #1-----

After resetting privacy settings and trying to upload image directly from camera, I am not getting "SafariViewService Would Like to Access The Camera, which I think may be the problem. Because after I accept, the screen is still black, I'm wondering why it's not saying my app name like "FooBar" Would Like Access... Perhaps this misalignment is why the camera screen is black. Just not sure how to change it.

-----Update #2-----

This appears to be a SFSafariViewController issue, as I implemented WKWebView and the camera works fine.

Community
  • 1
  • 1
Mike Purcell
  • 19,847
  • 10
  • 52
  • 89
  • Does upload image button appears within the SFSafariViewController or as an option in the tool bar at the bottom? I tried above code and it is not showing any upload image button. – Manish Verma Dec 04 '15 at 09:27
  • Are you using 2 viewControllers or just one for this? I'm sure you're aware of this but: `Unlike Safari itself, the SFSafariViewController UI is tailored for displaying a single page, featuring a Done button that takes users back to where they were in your app.If your app displays web content, but does not customize that content, consider replacing your WKWebView or UIWebView-based browsers with SFSafariViewController.` You could be leading yourself/the user to a page that doesn't exist yet. – Lukesivi Dec 04 '15 at 14:17
  • @ManishVerma: The button is NOT native IOS, rather it is a file upload button from a webview. – Mike Purcell Dec 04 '15 at 15:12
  • @lukesIvi: I am trying to upgrade our app so the image uploader works, it is broken for users who upgrade to IOS9+. I just want a simple webview wrapper as our site is mobile friendly. – Mike Purcell Dec 04 '15 at 15:13

1 Answers1

3

Edit iOS 11.3: Thank you to Rihards for commenting and pointing out this has been fixed.

This is apparently a known bug with the SFSafariViewController (I have submitted a radar which got closed). I faced the same issue that our mobile website was unable to get anything from the device, not the camera for a taken picture nor pictures from the camera roll. This was persisting in Safari and in SFSafariViewController, so we ended up simply redoing the complete upload process via native VC and Parse. However, I got a few suggestions from the Technical Support before doing all this and they told me to try the following:

  1. Check with a second device. Sometimes this could be a bug only happening on one device due to a mistake in the permissions. Checking with the second device should exclude the option that something went wrong at the installation
  2. Check the App's permissions in Settings. They told me that sometimes the blank screen came up if the User declined permission to use the camera. To check if this is the case, open settings, scroll down to the bottom and select your app. here you should see an ON/OFF toggle, which should both point to on. As seen in the screenshot below. screenshot

However, my two cents would be:

  1. Consider using a UIWebview or the WKWebview instead. You said that your site is mobile friendly, then you could consider simply dragging a UIWebview into your storyboard and setting it up to point to your site. Here is a good tutorial on UIWebviews. The other, more obvious alternative would be to use WKWebview. In your update, you have however already pointed out that you have done this, so I will not link you to any tutorials.

Otherwise there's not much you can do as of right now, besides of filing another radar to Apple with their Bug Reporter. Lastly, you could submit a ticket for Tech support, however I wouldn't waste any of those as you only have 2 per membership year.

Hope that helps, Julian

Julian E.
  • 4,687
  • 6
  • 32
  • 49
  • Helps a lot, appreciate the response. At this point I am going to us wkwebview to take advantage of the improved JavaScript engine. – Mike Purcell Dec 05 '15 at 21:41
  • Okay. Yeah, WKWebview is also considerably quicker then UIWebview. Glad that I could help! – Julian E. Dec 05 '15 at 21:45
  • This has finally been fixed in iOS 11.3. Quote from release notes: “WebApps saved to the home screen and webpages in SFSafariViewController can now use the camera to capture images. (35542231)“ – Rihards Apr 02 '18 at 09:09