I have a simple app that mirrors some information on a watch that also plays audio based on the information, I know how to detect when the watch disconnects from the phone using:
if (WCSession.default.isReachable) { do something }
but I cannot find how to do the same thing on the watch. The same line of code compiles in WatchKit but doesn't actually do anything. Any suggestions please?
Related
I have a XF app already published on the play store and now I am targetting iOS. During developpent I made sure the app was still working on iOS, using the simulator only.
On the simulator everything works as expected, the launch screen is shown then the MainPage starts. But when I debug on an actual IPhone device, the app get stuck on the Launchscreen.storyboard for about 20 sec then the app exits. I've no debug output and it seems that the AppDelegate is never hit. Breakpoints in AppDelegate.FinishedLaunching method are not hit for instance. I tried to F11 for start in debugging mode but I don't hit anything, still hanging on the launch screen. I was expecting the transition from simulator to device to be less painful.
My plist file contains the following permission requirements
...
<key>NSLocationAlwaysUsageDescription</key>
<string>We need to use your location</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We are using your location</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app needs access to photos.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>This app needs access to the photo gallery.</string>
The only difference I saw is that location permissions are not asked on the device while in the simulator it asks for it at start. But this might be related to the fact that I can't reach AppDelegate, I am not sure yet.
The iOS project was generated via Prism templates. I am using VS 16.8.0 on Windows, XF 4.8.0.1687, Prism 8.0.0.1909, Xamarin iOS SDK 14.4.1.3 and I am set to "don't link" for linkers option. The device is an Iphone 10.
Any idea how can I find out the root cause - or get some useful logs?
Thanks in advance for your help.
EDIT:
Here are the device log output during a new installation https://taits.s3-eu-west-1.amazonaws.com/devicelogs.txt. I am trying to go through them but kinda lost.
So I was working on a positioning app which needs GPS to be turned on. So I wanted a way to automatically turn on GPS in the background, if even possible with high accuracy or atleast have a popup window come up so the user can turn on the GPS right away. But sadly I couldn't find a single way to do so in QT, if there is a solution it's always written in Java. Can I somehow do it in QT too or import Java code in it?
Would I also be able to keep my GPS updates running in the background? Because as soon as I press the home button the updates stop to come up in the console with qDebug... or is it just the qDebug function that can't run when the app is not open?
Will I be able to use GPS in my Qt app?
First, check if the target platform has GPS and/or capable of resolving geo-coordinates. Next check the manual out: Qt Location. Mind that they refer to this functionality as 'location' so it maybe partially available even without actual GPS unit on device if there is another provider type (I guess partially and not for all platforms). I could only find this list of platforms supported:
Qt Location Classes for accessing GPS and other location services and
for mapping and navigation. Split off from the Qt 4 Mobility module of
Qt Location. Supported on Android, BlackBerry, iOS, Linux (using
GeoClue), Windows and Sailfish OS.
As for starting the GPS (location services provider) there is such entry for QML for sure called start() of PositionSource. It also implies one can find the same functionality in C++ as well.
Would I also be able to keep my GPS updates running in the background? Because as soon as I press the home button the updates stop to come up in the console with qDebug... or is it just the qDebug function that can't run when the app is not open?
Home button: it implies Android? Unclear what you ask but the Android app lifecycle is a bit different matter than that. The GPS will be working independently of your app but will the app respond to messages is more determined by Android.
It runs just fine on the iPhone. When I select the Watch App Target, however, it simply won't run on the watch.
I don't get any errors or anything. I can see the app downloading on the Watch sometimes; when it does download, it deletes itself the moment the download is complete.
I've tried uninstalling the watch app and reinstalling via the Apple Watch app on the iPhone, and the same thing happens: it downloads and deletes itself before I can run it.
I've also reset the watch, reset Xcode, deleted the iOS app, and just about everything else I could possibly think off, but I'm starting to lose my mind.
The problem started happening when I (attempted to) set up the Watch Connectivity framework. I don't know if this is related. I've been unable to verify that WC is working properly as I can't open the app.
I've been lucky enough to get it to actually load on the watch only a few times since integrating WC framework, but even when I have, all I got was the loading screen for about a minute each time.
UPDATE:
I'm now seeing some consistent behavior.
I'm now able to debug my app by launching the watch app via Xcode. The app icon does not appear at all on the watch when this happens, however. (Weirdly enough, it shows the launch screen for a different watch app when launching.) So I can't run the app at all unless it is launched from Xcode.
Also, I am not able to download the app to the watch via the phone. I want to be able to run it outside of debug mode, and I can't. When I attempt to install it from the Apple Watch iOS9 app, the install begins, I see the icon on the watch as it downloads, and just as it finishes, it deletes itself from the watch before I can run it. This just keeps happening.
Please help!
Make sure your Apple Watch device ID is in your provisioning profile.
So, this kind of sucks as an answer, but I've had enough.
I decided to copy all of my code and storyboards into a new Xcode project. The Watch App now works exactly as it should. Hopefully Apple sorts out these bugs in an update.
I believe repairing the watch would help as well. I had the same problem before and the only thing which helped was repairing the watch.
I also have other issues debugging the watch app properly - see my question here Proper way to debug watchos2 app in XCode7
I am using XCode 7 (beta) to write standalone watchOS2 App Extension.
Debugger works fine, so I can use breakpoints for example, but seems to be that NSLog() is not working for the Watch. Note: It works fine on simulator, but doesn't work on device
Whatever I write to NSLog(#"..") is not displayed in Debug Area.
So the question is:
Is this behavior expected or am I doing something wrong? Are there some workarounds to see some debug logs, may be use WatchConnectivity for example?
Thanks in advance!
Until NSLog() works on real watchOS 2 devices I've ended up using -[WCSession sendMessage:replyHandler:errorHandler:] to send log strings from my watchOS 2 app back to my iOS phone app and then NSLog them from my phone app.
Did you try this one?
It's a known issue on developer forum.
You have to unpair and re-pair your watch to trust your computer.
Then you could see NSLog in Debug area.
I only use the iOS simulator for testing websites, not actual apps. Today I opened it up and it keeps asking me for an app for it to simulate. If I click cancel, it just quits the simulator.
I've tried deleting preference files, but I'm just not familiar enough with the simulator to know what's going on. How can I just get this back to normal, or satisfy this dialog?
I think you could try the menu
iOS Simulator -> Reset Content and Settings...
This would clean your simulator storage.
Update
According to this link, Cleaning up the iPhone simulator
move to path
/Users/<username>/Library/Application Support/iPhone Simulator/{6.0 / 6.1}
You could try to clean it manually