xamarin / xamarin-macios

.NET for iOS, Mac Catalyst, macOS, and tvOS provide open-source bindings of the Apple SDKs for use with .NET managed languages such as C#
Other
2.43k stars 507 forks source link

[xcode11-feature] WatchOS Independent Apps #6244

Open chamons opened 5 years ago

chamons commented 5 years ago

Apple has announced "Independent Apps", where watchOS application can be installed independently of iOS devices.

It appears to be a checkbox in the IDE, but that might require mtouch/mlunch/msbuild changes and reflection in the IDE

As a friendly reminder, an issue card is not a guarantee that a certain feature will be done, or done under any particular time frame. Issues allow us to document what features we do and do not have, and give the community a place to provide feedback.

rolfbjarne commented 5 years ago

This is the Xcode checkbox:

Screenshot 2019-06-12 10 18 49

Toggling it does this to the watch extension's Info.plist:

diff --git a/iosappwithwatchapp WatchKit Extension/Info.plist b/iosappwithwatchapp WatchKit Extension/Info.plist
index cae882b..c249513 100644
--- a/iosappwithwatchapp WatchKit Extension/Info.plist  
+++ b/iosappwithwatchapp WatchKit Extension/Info.plist  
@@ -33,6 +33,6 @@
        <key>WKExtensionDelegateClassName</key>
        <string>ExtensionDelegate</string>
        <key>WKRunsIndependentlyOfCompanionApp</key>
-       <true/>
+       <false/>
 </dict>
 </plist>
ivanicin commented 4 years ago

As a developer I know how motivating it is to receive the direct user feedback on the bug, so I'll say that I am quite interesting in this, I actually hold off buying Apple Watch till this is completed and Watch 5 is released (and the latter should be fairly soon).

I would release this app as the standalone Watch app: https://apps.apple.com/us/app/speech-central/id1127349155 , https://apps.apple.com/us/app/speech-central-text-to-speech/id1223093645

I think it would be the second Watch app in this category that is not just a remote controller for iOS app, and the first that is designed to work completely independently. Well if this gets on time and no one gets ahead :D

Also I know that it is not just my comment that counts but I still hope that it is helpful.

AgustinBonilla commented 4 years ago

I will start a new project next month and I will need this feature for a WatchOS app. Does anyone know if they are working to support this feature on VS Mac?

chamons commented 4 years ago

I am sorry to say we currently do not support this feature in Xamarin.iOS @AgustinBonilla , nor do I have a roadmap date to give you right now on such support.

I will pass your feedback up to our PM team.

DamianMehers commented 4 years ago

FWIW I'm about to release a new WatchOS app created using Xamarin and would have released it standalone if I could .... although the inability to debug WatchOS apps in the Simulator because it causes a hard crash when they use HttpClient is more pressing.

ivanicin commented 4 years ago

I'll try to explain why standalone apps are crucial. If I shipped a watch app with my main app it would be a disaster because:

Overall this is a very major problem, I am not sure how much works it takes to be fixed, but I believe that you haven't considered all aspects above.

ivanicin commented 4 years ago

Also @DamianMehers and @AgustinBonilla currently there are only two votes for the issue (one is mine) so if you are after this enhancement at least vote for it...

DamianMehers commented 4 years ago

@ivanicin @AgustinBonilla Done, I think. I tend to follow issues I'm interested in. BTW while I'm here, is there any online chat that seasoned Xamarin WatchOS devs hang out in? People that have actually published Xamarin WatchOS apps (mine is Voice in a Can)? I'm aware of WatchOS channel on the Xamarin Chat Slack but there are not many people there.

AgustinBonilla commented 4 years ago

I tried some tricks to resolve this limitation, but I haven't resolved yet.

I applied the info.plist configuration:

WKRunsIndependentlyOfCompanionApp

I builded the app with the CLI, forcing the generation of the ipa and the archive, but it generated only the app file: msbuild [ProjectPath] /p:Configuration=Release /p:Platform=iPhone /p:ArchiveOnBuild=true /p:BuildIpa=true /t:Clean /t:Build

I tried to zip the app file and upload to the app store, but I received some errors.

I tried to export the app file to an ipa file, but I recive an error with the export options file: xcodebuild -exportArchive -archivePath .app -exportOptionsPlist /exportOptions.plist -exportPath .ipa

I found another way to export the app to an ipa, but is deprecated since xcode 8.

I've been problems with all ways and I'm starting to think about that isn't a good idea to develop an independent watchOS app with Xamarin.

Does anyone know any way to generate an independent app with Xamarin?

vecalion commented 4 years ago

I am sorry to say we currently do not support this feature in Xamarin.iOS @AgustinBonilla , nor do I have a roadmap date to give you right now on such support.

I will pass your feedback up to our PM team.

@chamons any feedback from the PM team? It would be great to have this feature (well, at least to know when it might be added). For us, this is crucial for choosing Xamarin over native for WatchOS development.

ivanicin commented 4 years ago

@chamons, @rolfbjarne - after providing extensive feedback on Catalyst in its own thread, I guess that this thread deserves at least some feedback.

I would guess that this is for the order of magnitude simpler than implementing Catalyst. I would also guess that interest for Catalyst is bigger for the order of magnitude. Am I right on this?

Anyway if this can be implemented while not taking some huge resources as I would assume I think it should have a priority considering impact/resources.

Right now I consider to wait some more and then to use Swift if nothing happens (before Xamarin was free for small companies I have already converted part of my then Window UWP C# code to Swift).

While the use cases for Watch apps are surely limited, whomever figures out the right case has a home run for almost hundred million of users. Which is a huge opportunity for Xamarin PR too, with some luck that some developer hits the right target. But in few years that space will narrow down quite a lot and if you want to support this the time is now, not in two years.

bharatgoenka commented 4 years ago

How does one up-vote this? This is clearly a major lacuna in Xamarin that it does not support what XCode 11 and watchOS inherently support.

We MUST get a sensible roadmap response. My own development team is recommending dropping Xamarin altogether (we are using it for Android, iOS, MacOS cross-development) - as it appears to be lagging significantly behind the native progression of these operating systems and device support.

ivanicin commented 4 years ago

@bharatgoenka you upvote by pressing the thumbs up.

As officials don't seem to reply here anymore, I'll provide you with my opinion - it is likely that Apple will promote a new app format for WatchOS 7 that will not be based on extensions. With all of that in mind feature requested here will be a sort of 'dead end' and as such it would be a waste of time to support it especially now when new format is almost there. Whether Xamarin will support this new format - your guess is as good as mine but hopefully it will.

bharatgoenka commented 4 years ago

thanks a ton for taking the time out on this one @ivanicin This does make some sense - and yet the silence of the 'officials' are mystifying. My team has enjoyed using Xamarin, but silences tend to lower your confidence - honestly. My assumption is that you are also a user - and with more than just a passing interest (obviously). So seeing some 'involvement' and transparency really helps keep the user-base engaged and confident.

onurhazar commented 4 years ago

@ivanicin @bharatgoenka I think "not being able to debug on physical watch device" is more critical issue. They should have fixed that issue before this one. Unfortunately, it is nearly impossible to create a stable xamarin watch app.

ivanicin commented 3 years ago

This has been inactive for more than a year.

Just to note that this is the 4th most upvoted issue out of 664 opened issues, but as one of first three is purely theoretical (research SwiftUI) and other is nearly completed (Catalyst) you can say that it is 2nd most upvoted issue.

Just for the record implementing .NET 6 has fewer votes. But not just that but it is at least 10.000x more complicated. I don't say that it shouldn't have been implemented, but the prioritization is strange at the best. I mean you shouldn't make excuse that you are working on .NET 6 if this is just 0.01% of the overall work and the most wanted feature out there.

By every known criteria this issue should be fixed by now. But officials are not even replying to it for almost two years.

ivanicin commented 3 years ago

@ivanicin @bharatgoenka I think "not being able to debug on physical watch device" is more critical issue. They should have fixed that issue before this one. Unfortunately, it is nearly impossible to create a stable xamarin watch app.

@onurhazar both issues are important. It is hard to say which one is more important, but I would pick this one. And it seems that more developers agree with me as this issue has more upvotes.

My reasoning is that if you have abstraction of UI and business logic and business logic is tested to work on UiKit, I don't expect it to be buggy on watchOS. On the other hand this particular issue has no workaround.

DamianMehers commented 3 years ago

I would not hold out hope for this - Microsoft are not supporting watchOS in .NET 6, it feels to me like they are not investing in watchOS https://github.com/xamarin/xamarin-macios/issues/8955

ivanicin commented 3 years ago

@DamianMehers I think that you have received the clear answer there - watchOS is not a priority. All other platforms that get .NET 6 had also setbacks in their development in this period (most notably macOS) and I don't have any big expectations for watchOS, actually I am pleasantly surprised that they seem to be working on watchOS 8 APIs as well as on any other platform.

I am just saying that this particular issue couldn't be ignored by popularity/work required ratio, no matter what. I mean they don't develop Xamarin for themselves but for developers and developers very clearly stated they want this and implementing just this won't break their .NET 6 target dates.

All other platforms got .NET 5 except Xamarin already so by your logic you could say that Xamarin is not supported anymore which would be incorrect. This is not a good sign but there are no signs that watchOS will be surely unsupported in the future either, in that case watchOS 8 wouldn't be worked on.

DamianMehers commented 3 years ago

Understood - FWIW I've moved to Swift and SwiftUI for my Apple Watch apps :-(

Damian

dalexsoto commented 3 years ago

Hello, Sorry for the radio silence here, we've been heads down on .NET 6 support which is a massive effort. As noted on #8955 watchOS is not part of .NET 6 but that doesn't mean that it will not be considered for the future. Right now watchOS will continue to be supported via Xamarin pre .NET 6 as is and we will review the decision and work for future .NET releases.

Lelelo1 commented 2 years ago

@rolfbjarne Is that info.plist change all that could be required when building release and submitting to app store if not?

rolfbjarne commented 2 years ago

@Lelelo1 not sure I understand the question, but to support independent watchOS apps in Xamarin would require somewhat substantial changes on our side to support it, it's not only an Info.plist change.

XamarinRPMTeam commented 2 years ago

@rolfbjarne Please let me know when this independent app support is planned for xamarin .If this is going to consider this would be helpful for existing xamarin app which has watchos app along with it .

chamons commented 2 years ago

@XamarinRPMTeam - We would announce something on this issue if support was announced, no need to poke individual engineers.