ios 9 - xcode 7 - SFSafariViewController - Image U

2019-03-25 06:15发布

问题:

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.

回答1:

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.

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