Xamarin iOS GUI - visual-studio

We've been developing a cross-platform app in Xamarin on Windows and now we are moving to make GUI for iOS counterpart.
If I'm understanding correctly we need to switch to Visual Studio for MAC, on a MAC machine, and continue our GUI development there.
Is it possible to develop everything on Windows and just publish an app on the MAC machine?
How do we include the logic and everything from the android app?

You can use Xamarin.Forms to develop UI for both Android and iOS.
But if its already native then you can still continue developing it in Windows.
For the build and testing you definitely need a MAC, if you don't want to use a VM then you can build it on the cloud using a https://www.macincloud.com/ or other party that uses the same service, and use a simulator on windows.
If its cross platform then I assume you're using a .NET Standard for the shared codebase. So there would be no problem using the same logic for both the Android and iOS.

It is up to you. Many apps will work by just publishing on the Mac. Of those many will have some artifacts that shouldn't be in the end version.
To simplify it is like asking whether you should publish the app without testing and fixing. In 99% no, but sometimes it may work.

Related

React Native newbie

I want to build a game with React Native. I am doing my testing locally on a personal Android device using the Expo app but ideally would love for the app to be cross platform. I do want to release it to a public store or have it be available for folks to play in some format.
Is it OK if I am using Visual Studio Code (on a Windows machine) to build my app, using node.js command line to run expo commands and testing with live reloading on my Expo app? Do I need to have a Mac + XCode if I want to edit iOS code?
What is the typical development process/toolset used?
React Native IS cross-platform, building the apps for production on different platforms, however, requires a different procedure. What makes it cross platform is that you write the source codes including all of the components (Well most of them) one time, and it automatically generates the native codes for Android and IOS.
There's no typical toolset for writing code, you can use any code editor you prefer (I use Sublime for example), but you should have the needed requirements listed in the getting started page in the official official docs including node.js.
Expo helps in testing the app on both android and ios without the need of a Mac (it has some other cool features too!). So if you want to release to apple store, you'll definitely need a mac (or a virtual machine running MacOS like VMWare)
In order to generate the release apk for android: Android Release APK
and for IOS: IOS

Can you publish a Windows 10 (Universal) app from PhoneGap on Mac?

I am looking to develop a Windows 10 Universal app based in HTML, CSS, and JavaScript for use on Microsoft Surface tablets primarily. I have found information that says it can be done on this page, but at the very bottom of the page it says it is in beta. However, I can't seem to find anything more than that post. No updates, or documentation or anything. Does anyone know if you can do this from the PhoneGap app on Mac OS?
If not, I guess the next best option it to do it on a Windows machine using Visual Studio 2017 and Cordova?
Any information anyone has on this subject would be helpful.
Thanks!
No, I am pretty sure you can't build UWP apps on macOS. The reason is quite similar as the reason you cannot build iOS apps on Windows - you could build the JS portion of your code, but the problem is the fact that UWP build tools and SDKs are OS specific and unless Microsoft specifically ports them to macOS, they cannot work there.
You could use Parallels and run Windows as second OS, or use a build server to build the app in the cloud. Visual Studio App Center is a very good solution for you purpose as it allows you to configure a full build pipeline including UWP, iOS and Android builds.
You can actually develop a UWP app using phoneGap on Mac if you are building it using web technologies. (HTML, CSS, Javascript) But you can not build/publish the app on Mac, but if you have a Creative Cloud account, you can use Phone Gap Build to upload it to the service and have it built there.

Xamarin workflow on Windows

I'm aware that a Mac or a Mac service e.g. MacInCloud.com is necessary for building and submitting iOS apps.
My question is about the actual workflow of building an app on Windows using Xamarin on Visual Studio 2017.
We need to write code, test and debug throughout development cycle. How does this work with Xamarin running on Windows? How would I actually see what my mobile app looks like or behaves during the actual development cycle?
While developing my web apps in Visual Studio, there are many trips back and forth to the browsers and back to VS in order for me to see the results of my code. How does this work with Xamarin running on Windows? Is Xamarin Live Player the only option for development cycle? Is there a solution through MacInCloud or similar services so that tethering a device to dev machine is not necessary?
I'm just trying to understand how a healthy development cycle is created for Xamarin developers on Windows.
I will answer your question in few section: Coding, Debug, Test
Coding
You will be using Visual Studio to write your codes. iOS and Android code will be written in C#. You will get access to UI Designer for both iOS and Android to edit the layout files and storyboard/xibs. For 3rd party library, there is NuGet to serve your needs.
Debug
You can use Xamarin Live Player without connection to a Mac/MacInCloud for basic preview. However, some features of iOS is not available in Xamarin Live Player (e.g. xibs files not supported...).
If you setup with connection to a Mac, you will be able to see a list of Simulator that available in the Mac you connected to. By default, if you debug it, the simulator will still show up in the Mac. Then you will need to VMWare or remote into the Mac to check the simulator output. If you have Visual Studio Enterprise license, you can get access to a Remote iOS Simulator feature. You will need to turn the option ON. After that, you will able to see a remote iOS Simulator showing in your Windows machine without the needs to remote into Mac machine anymore. For debugging in actual iOS devices, you will still need to plug your device into the Mac. Previously (more than 1 years ago), Xamarin announce that they are working on "iOS USB remoting" to allow you to plug in iOS device into Windows machine and debug on it. But it is not release until now.
For Android, you can get access to Android Emulator Manager to add emulator to debug or you can deploy apps to physical phone just like what you can do with Android Studio.
Test
I will be referring to Xamarin.UITest for this part. You will be able to write UITest code in C# inside Visual Studio. Xamarin have product "Xamarin Test Cloud" to allow you to upload test code and binary and then run your test in cloud periodically. If you want to run the test locally in your machine, you will only able to run Android UITest in windows machine. To run iOS UITest locally, you will only able to run it in Mac machine. Using a Mac, you can also run Android UITest.
You can use a simulator/emulator instead of a device. For iOS, the simulator would run on the Mac Build Host that you are connected to. You can select the option for "Remote iOS simulator" in Visual Studio -> Xamarin.iOS options and you'll be able to interact with the simulator without having to RDP/VNC/look at the mac. For android, you can just run an emulator in Window and interact with it like that. Using your web apps comparison, you would use a simulator/emulator instead of browser but, for the most part, the process would be similar.
I have been developing a Xamarin MVVM app targeted at iOS and Android. I initially did the iOS development on Windows with VS 2022 and an iPhone attached via USB. I knew that I was going to have to eventually move to the Mac for final provisioning but I ended up taking that painful step earlier than planned because certain Xamarin features were just not working on Windows. First I could not get my app icon to be anything other than the Xamarin default and then Xamarin.Essentials.FilePicker would not select a file:
https://github.com/xamarin/Essentials/issues/1710
So after a week of struggling I finally got my project building and deploying on the Mac. However, I am not nearly as comfortable working on the Mac as I am on Windows where I have all my familiar development tools. So then the question was how to share the project files between the PC and the Mac so that I could edit and compile on the PC and then move to the Mac for final testing.
At first I tried iCloud but I could never get the files to sync reliably between the shared folder on the PC and the Mac. I am used to Dropbox and OneDrive, which work as expected. iCloud not so much.
So what I have been doing is committing and pushing the changes to github and then pulling the changes into the project on the Mac. It is quick and has the added benefit of version control using an offsite server. I am happy with this workflow and publishing the app on the Apple Store should be an easy task when that time comes.
Update:
This process is still working for me. I have taken the additional step of doing the release configuration on VS Mac and publishing my app to App Store Connect. That experience was convoluted and frustrating but it now works and I have people testing my app via TestFlight.
One hiccup is that when selecting Automatic iOS Bundle Signing in the project properties on VS Windows, this change gets pushed to the Mac side and causes a build error under Debug until I select the Automatic provisioning profile on the Mac. Somehow it gets set to the Wildcard profile on the Windows side.

Is there a way to convert Windows Desktop applications to Universal UWP and Vice Versa?

In Visual Studio I am trying to decide which type of application I should start with. I want to make it available to as many devices as I can.
If I make a Windows desktop application (.NET/WPF), I could convert it to a UWP but it only targets desktop applications, which is pointless device-wise.
But if I make a UWP, it would work with Microsoft devices, but not ones running a Windows older than Windows 10. A lot of people still use older versions of Windows, and I would rather make a Windows desktop application than limit the use to a specific version of Windows.
It would also be cool to be able to make it work on other devices like Android.
QUESTIONS: Is there a way to convert a Desktop application to a Universal UWP (with or without the code)? Is there a way to convert a Universal UWP to a Desktop application (or make it run on older Windows machines)? If not, what would be the best application type and why?
Also, is there a different application type I should use instead that I'm not thinking of?
NOTE: Microsoft Project Centennial converts Desktop applications to UWP's, but they only work on desktop machines.
I would go UWP and use Xamarin forms if I were you.
Using Xamarin you can write the one UWP app and deploy to Windows, Android, and iOS.
You answered most of your question yourself already. You have the following options (considering you want to continue using your .NET/XAML skillset as you mention WPF and are not looking into a web alternative):
Write a desktop app in WPF: you want to support Windows 7 or need features that are currently not available yet in UWP (some APIs, sandboxed UWP, ..). As you mentioned, you can use the Desktop Bridge to bring the app to the Windows 10 store as well with the downside of not running on mobile, HoloLens, Xbox (as of today). Then again, WPF doesn't run on those platforms either.
Write the app from scratch in UWP: run on Windows 10 on all available platforms. Yes, you will leave the Windows 7 users in the cold but not that Windows 7 is already in the extended support block so people will have to upgrade at some point.
Write the app from scratch with Xamarin.Forms, creating a single app that runs on Windows 7 (WPF), UWP, Android and iOS. Note that this is a somewhat different XAML dialect right now, but XAML Standard is working on unifying the dialects in the future.
A bit more work is to share most of your code with .NET Standard or PCL libraries and write multiple native UI's on top of it (which can be done with Xamarin).
If you're looking for longer term support pick either UWP (the way forward for Windows) or Xamarin.Forms.
Try Microsoft's Desktop Bridge tool for UWP. Using the Desktop Bridge, you can gradually migrate your code to the Universal Windows Platform (UWP) to reach every Windows 10 device, including phones, Xbox One, and HoloLens
Using Desktop bridge tool, you can
Convert MSI to APPX package
Upload your Desktop app (after conversion to APPX package) to Store
Take advantage of UWP features like Live tiles, Push Notification and many more)
And, for Android and iOS app try Xamarin. UWP project cannot converted to xamarin project. You've to write seperate project. I recommend you to try Xamarin.Forms which allows you to boild UWP, Android and iOS app with shared code.

Developing for tablets using Phonegap

i'm starting development with phonegap for tablets and need to clarify some issues.
1) as i understood, i can work in any IDE: Visual Studio, Idea, XCode. All what i need from IDE is emulator to test some specific things, for example interacting with file system, or making JSONP requests to some site's API. Is this true?
2) after developing of application for one single platform, i can take the 'www' folder and build it for other platforms using PhoneGap Build, isn't it?
3) is there any way to emulate tablet in visual studio?
1) You need the IDEs for target-platform-specific coding. If you want to make a PhoneGap plugin for Windows Phone, you'd use Visual Studio for the native part. If it were a plugin for iOS, you'd use Xcode.
If you don't want to use PhoneGap Build, you can also build packages for the target platforms using the respective IDEs.
IDEs are also the primary way to test your application, since you can't easily test
features specific to a mobile device in your browser. If you have the SDKs for your target platforms installed, the respective IDEs should feature a way to run an emulator. You will probably have to set up a project for your app, according to the instructions here.
2) Generally, your application should run on any supported platform, as long as you stick to the PhoneGap API. Some features might behave differently on different platforms, so you'll still have to test throroughly on all platforms you indend to support.
3) If you install the Windows Phone SDK, you can use an emulator. There is some information on what the emulator is capable of on MSDN.

Resources