WinObjC: How to know what cocoa frameworks are supported / handled? - ios

Trying to bridge my iOS application to W10 app using WinObjC which looks nice (but still a preview)
My iOS app is using CommonCryptor for encryption purpose. When I try to build my freshly imported app in Visual Studio I got an error related to kCCKeySizeAES128 which is missing (coming from CommonCrypto).
How can I assume that this native framework is supported by WinObjC, and if it is supported how can I tell that everything is working (link is done right in visual studio) / where do I look?

I work on the iOS bridge project at Microsoft. While we've implemented many of the iOS frameworks commonly used by apps, we haven't done them all; many frameworks have only been stubbed out so that projects will compile and run. We're adding support for missing pieces with every release, however, so you should update frequently.
Generally, you can see what's supported and not supported by the bridge in the Visual Studio debug console. When missing or stubbed APIs are called, you'll get a message with details. We're also working on tools that will make browsing the API surface area easier.
If you find missing APIs, you should definitely file an issue on Github, as it's the best way to get in touch with our team and directly affects our development roadmap.
Thanks for checking out the project!

Related

Xamarin Android use “Bundle assemblies into native code” and "obfuscation"

I am trying to combine obfuscating my xamarin android project and then bundle the assemblies into native code with the Visuals Studio 2017 Pro option.
I was able to obfuscate my assemblies with this tutorial https://blog.noser.com/xamarin-android-code-obfuscation/
Unfortunately the obfuscated assemblies does not find its way into the native bundle.
Likely i intercepted the build proccess at the wrong place.
<Target Name="Obfuscate" AfterTargets="_CopyIntermediateAssemblies" Condition="'$(Configuration)' == 'Release'">
Does anyone know how to merge the obfuscated assemblies into the native bundle? Thx for help in advance.
I help develop another .NET obfuscation/protection tool, Dotfuscator.
We've written a Xamarin build integration that automatically handles protection as part of the normal build process, so you don't have to manually write your own MSBuild targets or copy files around.
The official Xamarin docs recommend using Dotfuscator to protect Android builds, but this integration also works for iOS and UWP.
As Dotfuscator's Community Edition is included in Visual Studio, you can try this integration out for free.
I wrote a guest post for the Xamarin Blog that explains how to do this.
Edit regarding the setting in the question: I did some limited testing and Dotfuscator works fine with the "Bundle assemblies into native code" setting. I installed the latest version of Visual Studio 2017 Enterprise, version 15.7.2, but found out that version has a bug related to this setting. To work around it, I used the unofficial VSIX install mentioned at that link. Then I opened a Dotfuscator-Xamarin sample app and enabled the native code setting. I also added code to the sample to show the name of a class used by the application. Then I deployed the app to an emulator. The app ran normally and the logging statement showed an obfuscated name for the class, indicating that Dotfuscator correctly protected the app before it was bundled into native code.

RakNet for iOS on Xamarin

I have developed a Windows game that uses RakNet.
Now I'm interested in porting it over to iOS using Xamarin but I can not find any pre-compiled RakNet library for use.
Does anyone know or have any info on how to get RakNet to work with Xamarin for iOS?
Note:
Please do not suggest any alternative development environments such as Unity. I am very well aware of other development environments, but I need to take this approach instead of switching to a different environment altogether.

Update to Xamarin touch 8.2 and use mvvmcross

We are using xamarin and mvvmcross with great plesure normmally.
However I updated our project to the newest Xamarin.Ios 8.2, changed the reference from monotouch to Xamarin.Ios updated all our nuget packages (only mvvmcross packages) and then sh.. hit the fan.
1000 errors :P I got ridth of them all, however everytime I am using a component from mvvmcross it want me to reference 'module monotouch should be referenced.
Any suggestion for what I am needing to get my project to build again.
Regards
Xamarin's advice on the unified API is http://blog.xamarin.com/is-the-ios-unified-api-for-me/
Unfortunately, existing Xamarin.iOS components need to be re-built against the Unified API, so while we (and the community) are working to update the component code, you will not be able to include these in your app. A workaround for open-source projects is to download and compile the code yourself as part of your Unified API project.
#lothrop is doing a superb job leading the Unified API development for MvvmCross
You can see the progress, build it and contribute to it on https://github.com/MvvmCross/MvvmCross/pull/813 (and see a discussion on https://github.com/MvvmCross/MvvmCross/issues/801)
Currently I believe the progress is pretty good - it's working - but we have some VisualStudio Xamarin blockers which are preventing this being pushed to release.
Getting more dev effort on this - more input to https://github.com/MvvmCross/MvvmCross/pull/813 and https://github.com/MvvmCross/MvvmCross/issues/801 - would certainly be appreciated. e.g. the community can help by building and using #lothrop's code - does it work for them?

How can I get started with Xamarin from Visual Studio 2013?

I want to port a Compact Framework/Windows CE app to Xamarin to create Android and IOS (and possibly Windows Phone) "versions." I reckon I need Windows 8 for Windows Phone (8) but for now I thought I could get started with Android and IOS in moving this prehistoric app into the 21st century.
According to this article, I first need "Project linker" and can NuGet it, but searching for it via Tools > Extensions and Updates in VS 2013 returns no search results.
That article says you need VS 2012 or better; the direct link to "Project Linker," though, says it supports VS 2010.
Where do I go from here?
UPDATE
I went here, and am in the processing of downloading.
UPDATE 2
Here, it says, "Modern Integrated Development Environment (IDE) – Xamarin uses Xamarin Studio on Mac OS X, and also Xamarin Studio or Visual Studio 2010 on Windows."
Yet in VS 2013, I do have project types now for Android and IOS*, so I reckon that's just a typo (hasn't been updated)?
although I don't have a Mac, so that is not possible for me right now; also, since I'm still on Windows 7 at work, Windows 8 Phone apps are not yet a possibility, either. So at present, Xamarin within Visual Studio is simply a replacement for Eclipse/Java in the creation of Android apps.
UPDATE 3
I've been waiting for something better than PhoneGap, and I think maybe I've found it. If MS were to buy this company and bake Xamarin into Visual Studio -- voila!/yowza/wow! The cats in Cupertino will have to reach for the Pepto-Bismol!
That's a bit outdated and there's a much better approach available today.
You can use Portable Class Libraries (PCL) to share code across project spanning iOS, Android, Windows (Phones) and even OSX.
See this article (and where it leads) for more details.
I certainly agree with #poupou that PCL's are the way to go (if possible). I would recommend James Montemagno's app on github. He just created this for channel9 using VS 2013. I just created a cross-platform app based off of this and it worked out well. I would only use the file-linking for the platform specific implementations with compiler directives. This can be seen in his ServiceRegistrar class in said app.
This SO answer actually explains how to get the 2012 Project Linker to work with 2013 if you still want to go that route and gives a link to the extension.
Also, you may want to check out MvvmCross. It is open-source, has a large user-base and following, and really helps with maximum code re-use. Best part, it uses PCLs and all of it's features (plugins) are available via nuget.
I would recommend reading the article #poupou posted, watching James' channel9 videos on his github page, and (if you want to check out mvvmcross) watch #slodge's N+1 videos on mvvmcross.

How to use Xamarin in Visual Studio and Mac in the same time

I have just developed and android app using eclipse and now I want to develope its IOS version. I want to use Visual Studio and C# (I feel pretty much comfortable in these environments).
I read that, to achieve this I can use Xamarine. Everything is OK with configuring Xamarine on Visual Studio and using it in Visual Studio (I understood this part). I couldnt understant the "mac" part. They are saying that in order to build this app I need a mac running in my local network. Unfortunately I have no idea about Mac. Instead of using it in a local network, could I just install it in a Virtual Machine in windows and configure it on that way that I can see this mac from Visual Studio (How can I do this ?! :S).
I am sorry if my question is unclear but I would be greateful if any of you helps me understand these issues and help me develop my first IOS app in Visual Studio.
If you are going to do iOS development using Xamarin you need a Mac. A Mac will always be required to submit the app to the app store, and the way Xamarin works, you need to use a Mac to create the UI for iOS apps as well.
To get the most of the Xamarin, you ideally would develop your base code using Xamarin and C#, then build separate UI's for both Android and iOS. While your UIs are separate, your base core code is all the same for both apps.
It really does not make sense to have a native Android app all in Java, and then write the entire iOS app in C#. Either stick to completely native apps for both platforms, or use a wrapper like Xamarin for both.
Xamarin.iOS for Visual Studio makes it possible to develop iOS
applications on Windows, but you will still need a Mac in order to
compile and run the code.
Today, Xamarin.iOS integration in Visual Studio is focused on enabling
developers to develop in C#. Xamarin developers who write Xamarin.iOS
applications on Windows typically hand-code their user interfaces—or
they will need to switch to the Mac to use Xcode (or a beta version of
Xamarin’s new iOS Designer) to interactively design an iOS user
interface layout.
"or use a wrapper like Xamarin for both"
I have discovered the term wrapping is not correct for this product.
Unlike other products (Corona, Phonegap, Titanium, ...) that wrap up in a common, genericized library, Xamarin compiles at core level with no penalty. It is 100% native. All functionality in all it's supported platforms is 100% available and not watered down.
Wrappers can be faster to program in, in theory, but when you factor in the time you will spend looking for workarounds for the one piece of functionality that is available natively but not in your wrapper library. When you factor in the constant bugs because wrapping for 3 or more platforms is a constantly moving target and you can't count on it working from day to day.
When you factor all those things in, writing native in c# for all platforms is the better option.
I tried them all, and xamarin was my last choice as I was distracted chasing that perfect golden goose wrapper product.

Resources