iOS swift check if URL accessed via ipv6 - ios

Is there a way to check if a website is ipv6 compatible before loading it to a webview via url request?
I am asking this because I want to publish an app thats main layout loads a webview first and the url it loads isnt ipv6 compatible. Now its giving off a white screen due to which apple is rejecting my app from being published. Now that solution I want to apply is:
if(connection is ipv6) {
//do something to prevent loading the webview
} else {
//load the webview normally
}
but this is my first time using xCode and SWIFT, even MAC just installed it on vmware workstation.
edit : extra information, the application is just a single layout that has a webview to load a mobile friendly website nothing more than that:
webView.loadRequest(URLRequest(URL: URL(string: "link")!))
the review guy from apple:
From Apple
Performance - 2.1
We discovered one or more bugs in your app when reviewed on iPad
running iOS 10.2.1 on Wi-Fi connected to an IPv6 network.
Specifically, your app launches to empty white screen.
Please see attached screenshots for details.
and the screenshot is just a blank white image

Related

Is there an way to Inspect a broken link in an app?

We have an iOS app that has a Watch Tutorial link to our website. We recently migrated our website and the page it points to is now showing a 404 error. We need to know what page the link points to so we can redirect it. Unfortunately in the app it just opens link to the page in the actual app and not in safari or any other browser so we can't see the website link.
Is there a way to "inspect" the link in our app like you can in a browser to see where it is pointed to? Maybe some debugging software that can pull the app down and let me look at it? Our app developers are unavailable right now and we want to get the app up and running correctly.
You can try with the Safari Web Inspector (Safari mac remotely debugging on an iPhone app/safari).
With this approach, you can inspect from you mac, any WebViews (or related) in actual apps.
Note : It won't work if you app make the request, but does not use web view to display the page.
See any tutorial on how to enable safari web inspector
Maybe some debugging software that can pull the app down and let me look at it?
You can use a web proxy such as Charles to easily see all the traffic going to and from the app:
Install the proxy software on your computer.
Set the device to proxy through your computer.
If needed, install SSL certificates that will let the proxy see the contents of TLS connections.
Fire up the proxy, launch the app, and watch the traffic.

when my app is not intalled, iOS universal link in UIWebView will launch Safari?

From Apple's guide in Support Universal Links:
When you support universal links, iOS 9 users can tap a link to your website and get seamlessly redirected to your installed app without going through Safari. If your app isn’t installed, tapping a link to your website opens your website in Safari.
But i'm confused that if my app is not installed,and I tap a universal link of my app in another app's UIWebView,will the system launch Safari app to load my website,or still load it in the UIWebView?
I test some app's universal links when the app is not installed,and they never launch Safari to load the next page ,they still load it in the UIWebView.
I want to konw if it's possible to launch Safari,but not stay in UIWebView.Do I need any configuration in apple-app-site-association file?
Actually I want to trace where my app was installed from by using cookie.I can store a cookie in Safari with informations of the download page,and get the cookie with SFSafariViewController when my app is installed and opened,and present different views according to the cookie.
What you are trying to build is called 'deferred deep linking'. This (plus a lot more) is exactly what we provide at Branch.io. If you want to avoid the headache of configuring it all yourself, give this a look. Apps like Pinterest, Airbnb, and Tinder all use us for this reason.
Apple's documentation is referring to the default behavior with the standalone Safari browser. Handling links inside an app with UIWebView supersedes this, and there is no way to automatically bounce out of the origin app into the main Safari app.
The workaround is to store data on your own backend. As you've discovered, relying on a cookie pass-through on the device itself won't work in many cases.

Universal links (Deep linking) not working on iPhone but works on iPad

I am trying to build deep linking feature into my app. I did all the necessary set up for deep linking to work like, enabling associated domains in my app, adding apple-app-site-association to the root directory of my server, and I am serving a valid apple-app-site-association over https, I also validated my apple-app-site-association using this tool Validate your apple-app-site-association.
After doing everything right, I tested the deep linking feature on my iPad and it worked as expected. But when I tried to do the same on my iPhone it doesn't work, it always took me to safari. I tried it on 6s device, I reinstalled the app, I cleared Safari website data & cleared the history. Also updated the iPhone & iPad to iOS 9.3.5. The updating the OS didn't change a thing.
iPad still continue to work with deeplink URLs just like it did while it was on 9.3.4. iPhone still opened the link in safari.
Please give me some pointers on how to workaround this issue, I think this might be an apple bug but again I don't understand how it can work on iPad which is running same software as iPhone. Any help or guidelines is much appreciated.
Thanks.
I was able to fix this issue and this is one of the annoying issue that I have come across, because it doesn't say what is going wrong.
Fix: Whenever the iOS opens your link in safari, you need to pull down the webpage in safari and there you'll see a banner saying that, open it in the app. Once you click on that banner your future links will start opening the app instead of opening it in the safari browser.
There was no error whatsoever and there was no indication why the link was getting opened I am pretty sure that, iOS didn't download the apple-app-site-association whenever I installed the app.
Also note that the banner in the webpage will not be visible whenever your link opens up in safari, you need to pull down the webpage and then the banner will become visible and if you click on open in app banner, it will start opening the links in app.
If in future if you select to view the link in safari by clicking on context menu which appears on right hand side of the status bar, which will be saying "Open in [your app name]" in safari, the links in future will open in safari instead of app, and again if the banner open in app isn't visible, you have to pull down the webpage to see that banner.
HTH.
In iOS 13, similar problem of direct links not opening the app instead it open the safari website directly.
Fixed by updated the below safari setting...
Settings > Safari > Request Desktop Website > All websites > Switch Off
I was facing the same issue in iOS 12, on one device the link redirected to my app and on another device it was always redirecting to Safari and pressing the link on the Notes app was only allowing me to open it on Safari.
What I believe happened was that I pasted the URL in the browser and clicked Go, as I thought it would redirect to my app. No matter what I did ( reinstalling the app, restarting the device, ... ) the results were always the same, redirecting to Safari.
What helped me was deleting the cached data for my domain ( Settings -> Safari -> Advanced -> Website Data -> Swipe and delete the data for your domain ).
After that, everything started working.
I believe this is a bug with iOS Simulator,
In my case it was occurred when I entered an invalid address (with multiple spaces) for example:
Valid One: myApp://order/10003101
Invalid One: myApp://order/1003131
It stopped working even with Valid One and the solution was to clear Safari Website Data:
Go to Settings/Safari -> Clear History and Webstie Data
Device: iPhone 12 Pro Max
iOS: 14.5
Xcode: 12.5

webview is loading in simulator but not loading in device

I tried to load UIWebView in swift so far am able to call and load webservices without any problem , both webview and json services in simulator.
But when I tried load it in device all the other webservices are working except UIWebView.
let url = "http://192.168.1.233/PhpProject1/MoreDetails.php?id=1234"
UIWebView.loadRequest(webView)(NSURLRequest(URL: NSURL(string: url)!))
I checked the log but nothing happens after calling the UIWebView in the device.
The problem is that only webview is not loading in device, I am able to call all other webservices, and everything is working fine in emulator.
From ios 9 apple introduced NSAppTransportSecurity means you can't hit http server from your device. So you have to use url with https. But still you can hit http by adding exception in info.plist. For that you can see this link
How can I add NSAppTransportSecurity to my info.plist file?.
And as said by others always use reachability class to check wether the server is reachable or not :)
192.168.1 seems a private LAN , probably reachable by your MAC PC through the wired cable (ethernet cable). If you have your iPhone connected throught WIFI probably it's not the same lan, or WIFI cannot reach the 192.168.1.x. Check your connections.
Apple provides reachability classes you can use the class to check if Reachability(hostname: <your host>) is true or not for both devices (PC and iPhone). You can also look the swift translated reachability here in gitHub, there are many examples to how to do it.

How do Apple detect if an iphone app is installed when clicking on a pure html link?

I am trying to detect if my ipad app is installed on a device when visiting my website, in order to suggest different action to the visitor.
Thanks to this post :
https://stackoverflow.com/a/8310348/1128754
I found that the "store" application on iphone seems to have achieve to detect if the app is installed on the device. When you click on store links, it launch the app instead of going to the mobile web version.
For example, if you go to :
http://store.apple.com/xc/anythinghere
with an iphone on which apple store app is installed ( http://itunes.apple.com/app/id375380948 )
it automatically start the store app, instead of the web page.
I tried to follow the stack call with mitmproxy but safari doesn't seems to ask query before launching the app.
So, I guess they did custom url scheme recognition, with http:// links.
Do you think it is possible?
This is done with URL protocol handlers:
http://www.iphonedevfaq.com/index.php?title=URL_schemes#URL_Protocol_Handlers
You cannot detect if an app is installed from HTML, but you can launch an app. For example, the popular game "Doodle Jump" can be launched by going to doodlejump://, but if you don't have it installed, the link won't work. As mentioned, this is done with a custom URL scheme and needs to be coded into your app.

Resources