Magic URL to force a UIWebView to load in MobileSafari instead? - objective-c

I've got an application which has been launched out in the world (so I can't change that version), and I've noticed that certain 3rd-party pages seem to fail when loaded in the native UIWebView, but work fine when loaded in the regular Mobile Safari browser. I know I can change the UIWebViewDelegate to send problematic URLs off to Mobile Safari next time I release (and I plan to), but I'm hoping there's some solution for the meantime.
Ideally, I'd like to be able to change the URL I send up from my server which ordinarily would just be loaded by the UIWebView so that it causes the UIWebView to refuse to load it and pass it off to Mobile Safari instead. Does anyone know if that is possible?

Unfortunately, if your app version is coded to load a URL inside a UIWebView instance, there isn't anyway to mimic sending that URL to UIApplication's openURL: instead.

Related

objective-c method to open an app already installed

I've created an iPhone app in objective-c with Xcode 5. It's a simple redirect to an app on AppStore via button (UIbutton and its IBAction). Can I open directly this app if it's already installed on iOS? Because in spite of this app is already available on iPhone it's carry on to open it via AppStore!
If it is your app, or you know it well and it has a custom url scheme, you may use Application::canOpenUrl: (link) to check for its existence and Application::openUrl: to launch the application.
This will not be possible for third party applications that do not have, or of which you don't know a custom url scheme.
you need to use URL schemes, a method for sending and receiving data between applications.
A physical device is required for testing this app.look at this example .sample example
try this example . if you face any issue let me know about that.
Yeah! Problem solved...I had to use only URL Scheme of the App I want to open, and insert inside openurl method, -> https://stackoverflow.com/a/24033837/3706995

WKWebView: resource load delegate dropped?

Previously in the OSX WebView, we had the WebResourceLoadDelegate callbacks to get informed about the events related to the resources embedded in the page we are loading. I used these calls to filter and redirect the HTTP requests coming from the page itself. Now, this functionality seems to be completely missing in WKWebView (OSX 10.10 beta 3), and I didn't find traces of it in the public WebKit source either.
Does anybody know how am I supposed to work this around?
ps. for the record, I've already submitted a feature request at rdar://17695683 .

IBM Worklight - How can I display the content a URL refers to, without losing app context?

When writing a Worklight app it is verboten to change the URL of the DOM in which the application is running. This makes sense as a hypertext move to another URL will obliterate the state of the app.
On occasion however, in my app I receive a URL for a news article and the user wishes to read it. Displaying the new content in an iFrame would start to address the requirement, but then I need navigation controls, etc. and it starts to feel like I am reinventing a wheel.
Does Worklight, or one of the mobile JS frameworks provide a "browser in browser" experience that I need here?
Worklight utilizes Cordova. Cordova makes it possible to display just what you wanted, a "browser in a browser" - InAppBrowser.
The InAppBrowser is a web browser view that displays when calling
window.open(), or when opening a link formed as <a target="_blank">.
Try that.
No setup is required as the InAppBrowser plug-in is already part of the Worklight project (this may differ depending on your Worklight version; If you are using 6.x you're OK).
All you need to do is to call up the URL. For example, in yourProject\apps\yourApp\common\main.js:
function wlCommonInit() {
window.open('http://apache.org', '_blank', 'location=yes');
}
Once the app initializes it will open the InAppBrowser:
And once tapping the Done button, you're back in the app.
You can of course not specify the location attribute so the navigation bar won't display. In that case, in order to go back to the app the user will need to tap the Back button:

Automatically testing UIWebView content with Selenium

I have an iPhone application that contains a UIWebView for rendering certain UI aspects. The UIWebView content communicates with the Objective-C side through NSURLRequests. I'd like to test the UIWebView contents with Selenium so it could be automated.
The problem is the communication with the native side, as this is not supported by Selenium. Therefore, a way is needed to "fake" the Objective-C side. The UIWebView sends requests to a specific (non-existant) URL that are then interpreted by the native code and processed. When running the UIWebView's contents with Selenium, these requests will always fail.
Is there a way to somehow provide support in Selenium that would allow catching these requests and providing a dummy response, or is there a better tool for this?
Preferably, I'd also like to run the Selenium tests with Sauce Labs, or a similar Selenium service, so hacking /etc/hosts is not an option either.
Have you tried Appium? It should allow you to write WebDriver tests that invoke the UIAutomation library.

iOS App URL is not being detected

I have created a custom App URL for my iOS app. The URL format is similar to this:
myappname://texttobeparsed
This works fine when I paste the URL in safari, My App opens and correctly handles the URL. The problem is that other apps such as iMessage or Notes do not recognize this as a URL.
Why isn't this URL scheme being recognized as a URL? Could it have to do with how I set it up in my info.plist file or something else?
Or, does the URL need to be in a different format to be recognized?
I know it's possible to have the system recognize it as a URL in apps other than web-browsers because I've seen it before with other apps (ex. iTunes: itms://itunes.com/apps/appname or Twitter: twitter:// or Facebook: fb://).
There's nothing you can do about this. If the link isn't explicit (e.g. in an HTML email), these apps can just recognize a built-in set of standard URL schemes. itms:// is one of Apple's own schemes (for the iTunes Store), so it makes sense that it is supported in addition to the standard mailto://, http://, tel://... schemes.
Edit: I would guess that the information that is used to determine what constitutes a valid URL in text views etc. is cached somehow. Contrary to what I initially guessed, it seems that app-specific URLs do work in Notes, etc. I've tested this with tweetbot:// for example (which I have installed) and twitter:// (which I don't have installed) to verify that it doesn't just check for a pattern like *://, but actually uses information about the installed apps.
I'd suggest that you try to restart your device. If it's an issue with some cache, that might help and I don't think there's much else you could do if your URL scheme already works in Safari.
Update: I've installed the official Twitter app to test this, the twitter:// scheme wasn't immediately recognized in Notes, but after killing and restarting the Notes app, it worked.
Update 2: I've done a minimal test app with myappname:// as a custom URL scheme. Again, like with the Twitter app, it worked after restarting the Notes app, so it doesn't seem related to the popularity of the app or whether it's been submitted or not.
I can't answer as to why it's not working (beyond guessing that the link interpreter is hard-coded to only recognize certain URL schemes), but I can say that the typical way around this is to link to a web page, and have the web page redirect to your custom scheme.
It's slightly less elegant, because the user will see Safari open up briefly before being forwarded to your app, but it's also more robust because the web page can provide a link to the app store to install the app if it is not installed on the user's phone.