Add Xamarin support for gRPC C#

There's a huge potential in getting gRPC C# running on Xamarin.
Xamarin allows creating C# apps for iOS, Android and Windows Phone (and also Windows and Mac apps), while sharing most of the code. Xamarin currently has about ~1mil users.
Despite gRPC C# has a native dependency (the grpc_csharp_ext native library), I think it should be possible to make it work at least on some of the platforms that Xamarin targets. For the most part, it's about figuring out about how to compile grpc_csharp_ext for given platform (our C code is fairly portable so this should totally be something doable) and making sure the resulting native library can be called via P/Invoke - which is what we do under Mono and .NET already. With that piece in place, rest of the work should be pretty straighforward.
I think the easiest platform to start with might be iOS (given gRPC C core for iOS already compiles and grpc_csharp_ext is just a really thin layer on top of that) or perhaps Android (sadly I don't have experience with native libraries on Android. Windows Phone would be great in terms of enabling gRPC on one more platform.
If there's any volunteers, I can definitely provide some guidance.

Pardon me if this comes off as a noob question cos it is. I wanted to try out both Xamarin a d grpc for the first time in this project.
Can't the grpc client be in C#? Is the performance hit that much that it just done in C?
Or is it simply the porting of the code to C# which we aim to avoid here?

Mostly it's about avoiding having to maintain ten different copies of the
same code - especially as we start adding richer functionality.
There are some performance benefits also, but in this case they're really
secondary.
On Sat, Apr 30, 2016, 1:36 PM Froelich Stefan<EMAIL_ADDRESS>wrote:

Pardon me if this comes off as a noob question cos it is. I wanted to try
out both Xamarin a d grpc for the first time in this project.
Can't the grpc client be in C#? Is the performance hit that much that it
just done in C?
Or is it simply the porting of the code to C# which we aim to avoid here?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub
https://github.com/grpc/grpc/issues/1620#issuecomment-215993315

That's what I thought. It makes sense.
On Sat, Apr 30, 2016, 8:59 PM Craig Tiller<EMAIL_ADDRESS>wrote:

Mostly it's about avoiding having to maintain ten different copies of the
same code - especially as we start adding richer functionality.
There are some performance benefits also, but in this case they're really
secondary.
On Sat, Apr 30, 2016, 1:36 PM Froelich Stefan<EMAIL_ADDRESS>wrote:

Pardon me if this comes off as a noob question cos it is. I wanted to try
out both Xamarin a d grpc for the first time in this project.
Can't the grpc client be in C#? Is the performance hit that much that it
just done in C?
Or is it simply the porting of the code to C# which we aim to avoid here?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub
https://github.com/grpc/grpc/issues/1620#issuecomment-215993315

—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub
https://github.com/grpc/grpc/issues/1620#issuecomment-215995145

Second this issue.
IMO, it's vital that grpc be accessible from mobile, including xamarin, and from the browser, on order for it to gain as widespread usefulness as REST.
I really really want to use grpc, but at the moment I'm going to also have to provide a REST api too to enable access from platforms not currently supported.

gRPC currently supports Android Java and ObjectiveC (iOS), so we do have support for mobile.
I agree that Xamarin support would be nice (that's why I filed this issue in the first place), but currently our team is focusing on getting the GA release out of the door.
If someone from community picks this task up and does some experiments with Xamarin, the help will be very welcome (thus the label "help wanted")

Related question: Is it possible to use GRPC with a Windows Phone App? When I try to install GRPC through NuGet I receive the following error:

Error		Could not install package 'Grpc.Core 1.0.0'. You are trying to install this package into a project that targets 'WindowsPhoneApp,Version=v8.1', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.			0

Has anyone had any luck installing GRPC for a windows phone app?

I might be wrong on this, but it might actually already work.
Xamarin recently announcned .NETStandard support and the pre 1.0.1 grpc core nuget package also supports dot net standard. Not sure on implications though.

@yyannekk, Xamarin's support for .NETStandard definitely helps (we probably don't need to make any changes to the C# code then). But one still needs to have the precompiled native library available for given platform - currently we only have linux, windows and mac support (so it won't work on iOS and Android at least).
If you have time to test the newest Grpc pre package with Xamarin and share your results here, that would be great.

@jattermusch, ok so I was able to compile a Portable Class Library "targeting" .NetStandard 1.5 with references to Google protobuf 3.1.0 and gRPC pre. I also added generated protobuf models as well as gRPC service and stubs.
I tried to run this on an Android Emulator, which did not work (as probably expected). App crashes directly and Visual Studio looses connection without concrete error.
Will dig further tomorrow.

@yyannekk Can you please paste stack traces for any errors you've bumped into?

tl;dr my best guess is xamarin targets .netstandard 1.4, whereas grpc targets .netstandard 1.5, therefor it does not work (ref using-xamarin-forms-with-net-standard, grpc pre 1.0.1 )
I finally got time to try again. I needed to start with a fresh environment, as I ran into several unrelated issues.
I created a PCL targeting .NetStandard 1.5. The project.json looks like this
{   "supports": {},   "dependencies": {     "Google.Protobuf": "3.1.0",     "Grpc": "1.0.1-pre1",     "Grpc.Core": "1.0.1-pre1",     "NETStandard.Library": "1.6.0"   },   "frameworks": {     "netstandard1.5": { "imports": [ "portable-net45+wpa81+wp8+win8" ] }   } }
I also referenced proto models and a service (basically the greeter service from the tutorial).
That stuff compiles.
However when referenced in an Xamarin Android project, it first complained about a missing package. Can't remember what that was, and unfortunatly cant reproduce. My best guess is that Xamarin is not compatible with .NetStandard 1.5 (using-xamarin-forms-with-net-standard). Seems it only works with netstandard1.4.
I played around with that setup (referenced the dll instead the project and some other stuff can't remember) and now Im in the state as 6 days before, where I actually can compile the android project, deploy that to the emulator, and it immediatly crashes. But that also happens for clean projects.  I think because of the beforementioned stuff its pointless to add the error descriptions here.

Ok I now ran into an error that is known and might be solvable, but I just couldn't get it to work.
Here is the sample project, that won't compile, because of a missing System.Runtime.InteropServices.RuntimeInformation.
the Grpc PCL and Proto PCL (both use .NetStandard1.5 and project.json) both compile. The App1 project targets Android Xamarin and uses a packages.config file. When referencing the Grpc PCL, beforementioned error occurs.
This is likely due to this issue.
I think there are two workarounds avaible.

Converting the main application project to use project.json file to utilize nuget 3. That didn't work. VS complained about a douzen missing files (Android namespace). I'm not sure if I got the conversion right though.
Copying the \packages\System.Runtime.InteropServices.RuntimeInformation.4.0.0\ref\netstandard1.1\System.Runtime.InteropServices.RuntimeInformation.dll to the nuget cache and there to \System.Runtime.InteropServices.RuntimeInformation.4.0.0\lib\netstandard1.1\ But didn't work (still missing mentioned dll).

I would appreciate any help or guidance on what to try

@yyannekk  thanks for valuable input. I'd have to experiment a little bit to be able to be able to give some guidance.
Btw, grpc and protobuf are not the same (protobuf uses the good old PCL profile259 and gRPC targets netstandard1.5 directly). Perhaps you could try to get Protobuf working first - that should really work out of the box, because there is no native dependencies, it's pure C# code. After you have a working example with protobuf, you can try adding gRPC and see what happens.

Btw, the issue you are facing seems not gRPC related at all (perhaps you can isolate that issue and file an issue with xamarin?)
Also, are you trying on Windows with VS2015? If so, you really shouldn't see any nuget 2.x related issues (like https://github.com/dotnet/corefx/issues/10445 you are mentioning), because AFAIK VS uses nuget 3 only.

yes, protobuf works without any issue. For example I tested creating and merging a protobuf object and then displaying it in an android xamarin app. The beforementioned problems arise when referencing grpc.
The other stuff I cant comment on at the moment.

FYI I have done some testing in this area and this is what I did:

Created a netstandard1.5 grpc client
Referenced the client, grpc, protobuf and netstandard1.5 from an existing xamarin app
Commented out code in Grpc.CoreShutdownHooks.Register (this was throwing a NotImplementedException:
02-12 23:24:26.586: I/MonoDroid(13579): System.AggregateException: One or more errors occurred. ---> System.NotImplementedException: The method or operation is not implemented. 02-12 23:24:26.586: I/MonoDroid(13579):   at System.Runtime.Loader.AssemblyLoadContext.get_Default () [0x00000] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/corlib/System.Runtime.Loader/AssemblyLoadContext.cs:44  02-12 23:24:26.586: I/MonoDroid(13579):   at Grpc.Core.GrpcEnvironment+ShutdownHooks.Register () [0x00020] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\GrpcEnvironment.cs:356  )
Modified Grpc.Core.Internal.PlatformApis.ctor to hard code isLinux and isMono = true (because RuntimeInformation.FrameworkDescription was throwing an exception:
02-12 23:21:21.274: I/MonoDroid(13202): System.AggregateException: One or more errors occurred. ---> System.TypeInitializationException: The type initializer for 'Grpc.Core.Internal.PlatformApis' threw an exception. ---> System.EntryPointNotFoundException: mono_get_runtime_build_info 02-12 23:21:21.274: I/MonoDroid(13202):   at (wrapper managed-to-native) System.Runtime.InteropServices.RuntimeInformation:mono_get_runtime_build_info () 02-12 23:21:21.274: I/MonoDroid(13202):   at System.Runtime.InteropServices.RuntimeInformation.get_FrameworkDescription () [0x00000] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/System.Runtime.InteropServices.RuntimeInformation/System.Runtime.InteropServices/RuntimeInformation.cs:45  02-12 23:21:21.274: I/MonoDroid(13202):   at Grpc.Core.Internal.PlatformApis..cctor () [0x0002e] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\PlatformApis.cs:61

After this, it would run to the point of trying to load the native libgrpc_csharp_ext library and fail with the following callstack:
02-12 23:00:53.409: I/MonoDroid(11920): UNHANDLED EXCEPTION: 02-12 23:00:53.433: I/MonoDroid(11920): System.AggregateException: One or more errors occurred. ---> System.IO.FileNotFoundException: Error loading native library. Not found in any of the possible locations: /storage/emulated/0/Android/data/com.test.app/files/.__override__/libgrpc_csharp_ext.x64.so,/storage/emulated/0/Android/data/com.test.app/files/.__override__/runtimes/linux/native/libgrpc_csharp_ext.x64.so,/storage/emulated/0/Android/data/com.test.app/files/.__override__/../../runtimes/linux/native/libgrpc_csharp_ext.x64.so 02-12 23:00:53.433: I/MonoDroid(11920):   at Grpc.Core.Internal.UnmanagedLibrary.FirstValidLibraryPath (System.String[] libraryPathAlternatives) [0x00038] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\UnmanagedLibrary.cs:178  02-12 23:00:53.433: I/MonoDroid(11920):   at Grpc.Core.Internal.UnmanagedLibrary..ctor (System.String[] libraryPathAlternatives) [0x00008] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\UnmanagedLibrary.cs:65  02-12 23:00:53.433: I/MonoDroid(11920):   at Grpc.Core.Internal.NativeExtension.Load () [0x0006f] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\NativeExtension.cs:116  02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.NativeExtension..ctor () [0x00008] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\NativeExtension.cs:55  02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.NativeExtension.Get () [0x00031] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\NativeExtension.cs:77  02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.NativeMethods.Get () [0x00001] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\NativeMethods.cs:270  02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.GrpcEnvironment.GrpcNativeInit () [0x00001] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\GrpcEnvironment.cs:298  02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.GrpcEnvironment..ctor () [0x0002b] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\GrpcEnvironment.cs:242  02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.GrpcEnvironment.AddRef () [0x00032] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\GrpcEnvironment.cs:83  02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Channel..ctor (System.String target, Grpc.Core.ChannelCredentials credentials, System.Collections.Generic.IEnumerable1[T] options) [0x00054] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Channel.cs:87
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Channel..ctor (System.String target, Grpc.Core.ChannelCredentials credentials) [0x00000] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Channel.cs:71
02-12 23:00:53.434: I/MonoDroid(11920):   at GrpcClient.TestClient+d__1.MoveNext () [0x00054] in X:\testapp\GrpcClient\TestClient.cs:27
02-12 23:00:53.434: I/MonoDroid(11920):    --- End of inner exception stack trace ---
02-12 23:00:53.434: I/MonoDroid(11920):   at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:2157
02-12 23:00:53.434: I/MonoDroid(11920):   at System.Threading.Tasks.Task.Wait (System.Int32 millisecondsTimeout, System.Threading.CancellationToken cancellationToken) [0x00052] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:3189
02-12 23:00:53.434: I/MonoDroid(11920):   at System.Threading.Tasks.Task.Wait () [0x00000] in /Users/builder/data/lanes/3511/501e63ce/source/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:3054
02-12 23:00:53.434: I/MonoDroid(11920):   at GrpcClient.TestClient.Main (System.String[] args) [0x00005] in X:\testapp\GrpcClient\TestClient.cs:16
02-12 23:00:53.434: I/MonoDroid(11920):   at testapp.Droid.MainActivity.OnCreate (Android.OS.Bundle bundle) [0x00177] in X:\testapp\testapp.Droid\MainActivity.cs:88
02-12 23:00:53.434: I/MonoDroid(11920):   at Android.Support.V4.App.FragmentActivity.n_OnCreate_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_savedInstanceState) [0x00011] in <27c17fe440cf491ba8255bcefade6e02>:0
02-12 23:00:53.434: I/MonoDroid(11920):   at (wrapper dynamic-method) System.Object:f5de00fb-3a8a-4b1d-8a5d-af46139e7be6 (intptr,intptr,intptr)
02-12 23:00:53.434: I/MonoDroid(11920): ---> (Inner Exception #0) System.IO.FileNotFoundException: Error loading native library. Not found in any of the possible locations: /storage/emulated/0/Android/data/com.test.app/files/.override/libgrpc_csharp_ext.x64.so,/storage/emulated/0/Android/data/com.test.app/files/.override/runtimes/linux/native/libgrpc_csharp_ext.x64.so,/storage/emulated/0/Android/data/com.test.app/files/.override/../../runtimes/linux/native/libgrpc_csharp_ext.x64.so
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.UnmanagedLibrary.FirstValidLibraryPath (System.String[] libraryPathAlternatives) [0x00038] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\UnmanagedLibrary.cs:178
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.UnmanagedLibrary..ctor (System.String[] libraryPathAlternatives) [0x00008] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\UnmanagedLibrary.cs:65
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.NativeExtension.Load () [0x0006f] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\NativeExtension.cs:116
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.NativeExtension..ctor () [0x00008] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\NativeExtension.cs:55
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.NativeExtension.Get () [0x00031] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\NativeExtension.cs:77
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Internal.NativeMethods.Get () [0x00001] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Internal\NativeMethods.cs:270
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.GrpcEnvironment.GrpcNativeInit () [0x00001] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\GrpcEnvironment.cs:298
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.GrpcEnvironment..ctor () [0x0002b] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\GrpcEnvironment.cs:242
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.GrpcEnvironment.AddRef () [0x00032] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\GrpcEnvironment.cs:83
02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Channel..ctor (System.String target, Grpc.Core.ChannelCredentials credentials, System.Collections.Generic.IEnumerable1[T] options) [0x00054] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Channel.cs:87  02-12 23:00:53.434: I/MonoDroid(11920):   at Grpc.Core.Channel..ctor (System.String target, Grpc.Core.ChannelCredentials credentials) [0x00000] in X:\3p\grpc-windows\grpc\src\csharp\Grpc.Core\Channel.cs:71  02-12 23:00:53.434: I/MonoDroid(11920):   at GrpcClient.TestClient+<Run>d__1.MoveNext () [0x00054] in X:\testapp\GrpcClient\TestClient.cs:27 <---
For kicks, I then tried adding the native lib as an AndroidNativeLibrary, but that failed to package with:
3>Cannot determine abi of native library Assets\libgrpc_csharp_ext.x64.so.
Not sure where to go next with this, but I am really interested in using grpc in this xamarin app

I've been working on this as well. I did the same thing with the C# side, but the critical bit is cross compiling  the grpc_csharp_ext project targeting Android.
I installed Visual C++ for Cross Platform Mobile.
I grabbed this [precompiled openssl library]https://github.com/leenjewel/openssl_for_ios_and_android/releases/tag/20170105
Completely trashed the vcxproj files so they are in a state consistent with a mobile library build.
Added the Android NDK header files and libraries included in the Visual C++ install, and the openssl headers and library from the precompiled distribution.
I get these two types of errors. (more than one of the struct rsa_st errors, I've included one for reference.)
2>C:\Users\ashsnelgrove\workspace\grpc\vsprojects\..\src\core\lib\security\credentials\jwt\jwt_verifier.c(483,10): error : incomplete definition of type 'struct rsa_st'
2>               rsa->n = bignum_from_base64(validate_string_field(key_prop, "n"));
2>               ~~~^
2>         C:\Users\ashsnelgrove\Downloads\openssl_curl_for_ios_android.20170105\output\android\openssl-android-x86\include\openssl/ossl_typ.h(110,16) :  note: forward declaration of 'struct rsa_st'
2>         typedef struct rsa_st RSA;
3>C:\Users\ashsnelgrove\workspace\grpc\vsprojects\..\src\csharp\ext\grpc_csharp_ext.c(34,10): fatal error : 'src/core/lib/support/string.h' file not found
3>         #include "src/core/lib/support/string.h"
3>                  ^
3>         1 error generated.
3>         The command exited with code 1.
3>       Done executing task "ClangCompile" -- FAILED.
3>     1>
3>Done building target "ClCompile" in project "grpc_csharp_ext.vcxproj" -- FAILED.
3>
3>Build FAILED.

The struct that jwt_verifier.h is looking for is in rsa.h. If I add #include <rsa.h> it complains that it can't find it. rsa.h does show up in the External Dependencies list.
src/core/lib/support/string.h is in gpr. I obviously don't have the project completely set up correctly, it isn't referencing the headers correctly.
That's as far as I got on Friday, I will continue to work on this.
Here's the patch, beware that I haven't spent any time making the library paths generic, everything is absolute to my box.
patch.txt

First problem is that I didn't remove the reference to packages.config in the project file and Nuget was pulling in grpc's precompiled zlib and openssl packages (grpc.dependencies.zlib.redist etc). There was some conflicts between this and the openssl library I was using.
Second, it appears that the prebuilt openssl I'm pulling in is not the same version as the grpc redistributable. the header files don't line up. The nuget dependency lists version <IP_ADDRESS>, while the precompiled openssl is version 1.1.0c. I'm going to build openssl 1.0.2 directly.

Thanks for the updates @yashton, not sure I will have time to delve into the native library compilation. Based on what you have done so far, does it feel like a lot of work to get the lib to compile?
I might try getting something going importing the Java implementation into the Xamarin app.

I've successfully compiled the native library targeting android. I can't find where it uploads my grpc library file, so I just transferred it to the emulator directly. I have been unable to get the dlopen call against libdl.so to work, even when it detects the path as correct.
I tried going back to basics with a direct dll import as described (here in the mono docs)[http://www.mono-project.com/docs/advanced/pinvoke/]
        [DllImport("libgrpc_csharp_ext_mobile.so")]
        internal static extern IntPtr grpcsharp_version_string();

I can successfully call that and get a IntPtr back.

@lostobject Was in the middle of posting when you replied. It is definitely doable, assuming that calling one function indicates everything will work. The core .NET library uses some delegates to allow dynamic loading of the library in NativeMethods. It should be pretty straightforward to change that to the DllImport annotation, preserving the signatures. I could whip up a quick script to do that change to see if it can be done so that we can verify an actual functioning native library. If someone else has anymore experience with how android stores and loads the native libraries, it might be possible to use dlopen. I'll do some research.
Getting all of this into a repeatable build is a different question :-D I'll try cleaning up my grpc repo and make a fork so others can join in.

A fork would be good :)
Not sure how much I'll be able to add since I am new to Android native, but I will try.

Fork at https://github.com/yashton/grpc/tree/v1.0.x
:-D This is a new toolchain for me too.

@yashton & @lostobject, thanks for sharing your progress here.
Some questions:

Wouldn't it be easier to build the android native library on Linux rather than with Visual C++ (I'm pretty sure we've already done that in other context)?
Is there any build instructions in the fork you can point me to?
Has anyone tried experimenting with Xamarin for iOS or Mac OS X?  (Mac might be useful for experimenting, as compiling grpc_csharp_ext.so for Mac OS X already works no problem).

Btw, the branch 1.1.x has been released recently.
Add [DllImport] vs getting a delegate from a function pointer: until summer 2016, we've actually been using DllImports when on windows, but then we got rid of that code to avoid being repetitive. If things work with [DllImport] (they should), figuring out how to get function pointers working or add DllImports back is mostly a technicality.

Anyone who found a solution to get grpc workin on xamarin right now?

I think grpc_csharp_ext should use pure csharp, otherwise the users have to compile it for each CPU architecture.

Hi, any news?

Still seems to be an issue.  I am getting the exact same error.

@jtattermusch what else is left to complete this task? may need help?

I have successfully cross-compiled for Android, but could not successfully drop it into place and get the library loaded up with Xamarin. The remaining part doesn't seem too difficult though, just need to figure out how to properly transfer the library to device, the branch from @yashton should be helpful with that as well.
@jtattermusch could you provide guidance on how to proceed if I wanted to add in this support? I have a pretty good handle on the problem set right now. Want to make sure it's still in a good place for an open source contribution.

@tylerhartwig you can use path sniffing: create a folder lib inside the android project. under the lib folder you create a folder depending on your target compilation e.g. And inside this folder you paste you grpc so file:
For example:
"lib\armeabi\libgrpc_csharp_ext_mobile.so"
or "lib\armeabi-v7a\libgrpc_csharp_ext_mobile.so"
or "lib\x86\libgrpc_csharp_ext_mobile.so"
dont forget to make copy always and AndroidNativeLibrary and the .so-file.
Could you maybe share the binaries, you just compiled ?

@AndreLaskawy I miscommunicated some, I was able to get the binaries on the device with that method, however, gRPC looks for the library in a different path than where the libraries end up on the device.
I wouldn't mind sharing the binary I have, however it's only for armeabi. If I get some time tonight I may be able to outline the steps I took to compile them as well.

@tylerhartwig   can you publish the instructions for cross-compiling on Android somewhere?  I've heard from other users that successfully compiled the grpc_sharp_ext.so for android (so I'm pretty sure it's possible), but I haven't seen any good documentation with steps to follow (if we had that, we could use it as a starting point for our efforts to support Unity and Xamarin).
In order to be able to be load the grpc_csharp_ext.so,  your best bet is to modify https://github.com/grpc/grpc/blob/a2310c00005bdaa9066e70d8af45dc1739bd7b44/src/csharp/Grpc.Core/Internal/NativeExtension.cs#L80  (so that the .so file is located correctly and gets loaded). With a bit of luck, things should then work for you.
If you succeed, please share the progress with others (ideally by creating a grpc fork  with  the docs how to compile grpc_csharp_ext on android and with tweaked version of NativeExtension.cs.)

@tylerhartwig I've successfully modified the Load() function and gotten all of this working with iOS using a static .a file. I just cannot figure out how to get the libgrpc_csharp_ext.so file to cross-compile for Android ARM. Per @jtattermusch 's suggestion in my question here https://github.com/grpc/grpc/issues/14402 , I'm pinging you to combine forces on this. I've detailed my efforts thusfar in the link; any guidance you could provide on compiling the .so should completely solve this for me!

I successfully compiled this command:
cmake .. \
  -DCMAKE_SYSTEM_NAME=Android \
  -DCMAKE_SYSTEM_VERSION=15 \
  -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a \
  -DCMAKE_ANDROID_NDK=/path/to/android-ndk \
  -DCMAKE_ANDROID_STL_TYPE=c++_static \
  -DRUN_HAVE_POSIX_REGEX=0 \
  -DRUN_HAVE_STD_REGEX=0 \
  -DRUN_HAVE_STEADY_CLOCK=0 \
  -DCMAKE_BUILD_TYPE=Release

only first it is necessary to replace in CMakeLists.txt:
elseif(UNIX)
  set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} rt m pthread)
endif()

it with
elseif(UNIX)
  set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} m)
endif()

this should work on windows and linux

Thanks for the tip, @HI0T ! I just tried running that on OSX and, while it succeeded, it generated .dylib files as usual. I suspect that the Makefile is still detecting Darwin, which leads me to believe I could either pursue (1) creating a dockerfile to emulate Linux (2) fiddling with the Makefile to coerce it to link a .so using NDK linkers (if that's even possible).

@HI0T  I've also been able to successfully build with those instructions, thanks for sharing. Hopefully I'll have some cycles to look into Unity and Xamarin support a bit more (first for Android).

To encourage collaboration, I'm making the instructions available in the main repo:
https://github.com/grpc/grpc/pull/14576
Thanks everyone for helping out!

I also finally made it to crosscompile for all arm architectures with the help of some standalone toolchains from the android ndk inside a linux enviroment. The trick to compile for android arm is to remove -lpthread from the cmake generated link.txt inside the CMakeFiles/grpc_csharp_ext.dir.  (see below)
After compiling the nativ libs i created a android library project (from xamarin) inisde the Grpc Core c# project where i inlcuded the libraries (.so files) inside a lib folder (path sniffing). This library can be linked together with the grpc core lib in a specific xamarin android project and et voilà - working grpc inside a xamarin android project.
Here a example for crosscompile on linux for arm64:

Install android-ndk at /opt/android-ndk*

Create standalone toolchain for arm64 (or any other architecture u like):
cd /opt/android-ndk*/build/tools/
sudo ./make-standalone-toolchain.sh --arch=arm64 --platform=android-21 --install-dir=/opt/Toolchains/ARM64 --force

Create a toolchain file (e.g. arm64-v8a.cmake)  for grpc code generation:
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21)
set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
set(CMAKE_ANDROID_NDK /opt/android-ndk)
set(CMAKE_ANDROID_STL_TYPE c++_static)
set(CMAKE_C_COMPILER /opt/Toolchains/ARM64/bin/aarch64-linux-android-gcc)
set(CMAKE_CXX_COMPILER /opt/Toolchains/ARM64/bin/aarch64-linux-android-g++)

Run cmake with toolchain file
cd ${GRPC_PATH}/cmake/ARM64
cmake ../.. -DCMAKE_TOOLCHAIN_FILE=path/to/grpc/toolchain/file/arm64-v8a.cmake -DRUN_HAVE_STD_REGEX=0 -DRUN_HAVE_POSIX_REGEX=0 -DRUN_HAVE_STEADY_CLOCK=0 -DCMAKE_ANDROID_STL_TYPE=c++_static -DCMAKE_BUILD_TYPE=Release

Now the trick: go to ${GRPC_PATH}/cmake/ARM64/CMakeFiles/grpc_csharp_ext.dir/link.txt and remove the link library -lpthread

And build
make grpc_csharp_ext EMBED_OPENSSL=true

@andre-laskawy, thanks for sharing your results.
Btw, do these compilation instructions work for you?
https://github.com/grpc/grpc/blob/master/src/csharp/experimental/build_native_ext_for_android.sh

@jtattermusch no this didnt worked for me. Because the compilers were not configured and the android parameters will be ignored, thats why u need to create a toolchain where you put in the android parameters and the comiler definitions. (see my last comment)

hi @zaneclaes, do i understand you correctly here when you say you've successfully cross-compiled libgrpc_csharp_ext.so for iOS? when i look at the experimental path here it only provides instructions for Android

any updates on the cross-compilation for iOS?

According to the GRPC docs, Xamarin support exists (https://grpc.io/docs/quickstart/csharp.html).   But I still get this error in Visual Studio 2017 and compiling for iOS:

Error while loading assemblies: /Users/vbisbest/Library/Caches/Xamarin/mtbs/builds/PhotoHunt3.iOS/a55605fb9a807e6e8dea186be09ba84e/bin/iPhoneSimulator/Debug/grpc_csharp_ext.x64.dll

What is the word on this?

@vbisbest   "Xamarin Studio" is just an IDE for developing C# code on MacOS (= same as monodevelop on linux), it doesn't imply that Xamarin is supported as a platform.

It would be really great if there was a quick solution to this. I'm trying to use the real-time speech recognition of the Google Cloud Speech API with Xamarin, which needs gRPC support to run.
I couldn't compile the gRPC project against ARM yet (still trying this one). Not having much knowledge in CMAKE and cross-compiling, this is a real pain.

Thanks to the information in this thread and the blog entry at http://examinedself.com/cross-compile-grpc-unity/ by @zaneclaes, @dguidali and I have successfully used the grpc library on Xamarin.Android through the Google.Cloud.Speech.V1 nuget package.
See PR https://github.com/grpc/grpc/pull/15969 for details and https://github.com/Greenliff/grpc-xamarin-samples for sample code.

@migueldeicaza if we have the the grpc_csharp_ext compiled for Android and iOS we still need to have bindings for it to use in Xamarin.

@jzeferino The code uses normal P/Invoke to call into the grpc_csharp_ext library methods, see https://github.com/grpc/grpc/blob/master/src/csharp/Grpc.Core/Internal/NativeMethods.Generated.cs#L835 for example, it's all there already.
Or maybe I don't understand which bindings you mean.

As @ahouben points out, the binding to the native library is already there.
What you need to do is to consume the .NET binding, then you need to ship the payloads compiled for iOS (grpc_csharp_ext.dylib for iOS) and Android (grpc_csharp_ext.so for Android) side-by-side your executable.
The easiest path is to include the native payloads in the NuGet package, which will ensure they all get copied to the right places.

I think @ahouben 's PR https://github.com/grpc/grpc/pull/15969 is a great progress towards supporting Xamarin officially - feel free to comment on that PR if you have opinions.

@jtattermusch as fas as i remember the grpc_csharp_ext was building right away with the the default camke on the mac book. The problem is to get the native libraries to the iphone via xamarin ios project. I didnt figured out until today how to do this.

@andre-laskawy not sure I understand "the problem is to get the native libraries to the iphone via xamarin ios project" - what do other projects with native dependency do?

well inside an android project you can use path sniffing (see my comment from 21 february). Inside an uwp project you can just add them as content with copy to output setting. No idea how it works in an ios project. That is basically the last step that is missing. Afterwards you can change the whole grpc core c# project to netstandard2.0 (remove the .net framework stuff) and add the specific projects (android, ios, uwp) to the nuget package. A little bit of configuration inside the csproj file and et voila.

@jtattermusch @mattleibow Thank you for your efforts on this, it looks like we are close to a nuget package that will work for iOS and Android.  Is there any update when the changes will be released to nuget?

@vbisbest   we now have "experimental" support in place and I just merged a helloworld example couple hours ago:
https://github.com/grpc/grpc/tree/master/examples/csharp/HelloworldXamarin
The nugets are available for manual download (see the helloworld example), they are not on nuget.org yet, but things should be ready for testing. Trying things and providing feedback is important at this point - I expect there will be some glitches that will need to be sorted out (but most of the main pieces seem to be in place).

I will close this umbrella issue now, specific issues that come up when using gRPC C# on Xamarin shall be filed as new issues.

@jtattermusch Thank you, I am giving it a try now.  Can you please explain "Manual Download"?  When I open the solution for HelloworldXamarin, I get these errors:
Unable to find version '1.15.0-dev' of package 'Grpc.Core'.
https://api.nuget.org/v3/index.json: Package 'Grpc.Core.1.15.0-dev' is not found on source 'https://api.nuget.org/v3/index.json'.
Package restore failed for project HelloworldXamarin.Droid: Unable to find version '1.15.0-dev' of package 'Grpc.Core'.
https://api.nuget.org/v3/index.json: Package 'Grpc.Core.1.15.0-dev' is not found on source 'https://api.nuget.org/v3/index.json'.
Package restore failed for project HelloworldXamarin.iOS: Unable to find version '1.15.0-dev' of package 'Grpc.Core'.
https://api.nuget.org/v3/index.json: Package 'Grpc.Core.1.15.0-dev' is not found on source 'https://api.nuget.org/v3/index.json'.
Probably the manual piece I am missing.

It seems to work perfectly for the Helloworld example on Mac.  However, II have tried this on Windows with VS2017.   I am still getting:
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(791,3): error : Error while loading assemblies: /Users/vbisbest/Library/Caches/Xamarin/mtbs/builds/PhotoHunt3.iOS/a55605fb9a807e6e8dea186be09ba84e/bin/iPhoneSimulator/Debug/grpc_csharp_ext.x64.dll
Attachment showing proper packages installed.

@jtattermusch I will add that Android seems to work with the dev version.  Just iOS fails.

@jtattermusch I have tried everything and cant figure it out.   How did you create the hello world project?  I see packages.config in there, but that does not seem to get created any more with latest Xamarin studio updates.  Here is what I did:

Create new Multipatform App -> Blank Forms App
Select "Use .Net Standard" and Create
Add GRPC package to project and build.

This generates the grpc_csharp_ext.x64.dll error.  It happens on Mac and Windows VS.

@vbisbest  I did New solution -> Multiplatform app -> Blank Native App (iOS, Android).
I haven't tested yet with "Xamarin.Forms" app - but reading your report, I think I might know what's wrong with that one.

@jtattermusch confirmed that "native app" builds properly.  Hopefully its an easy fix to get Forms app working.

@jtattermusch just wanted to see if you had a timeline for the Xam Forms fix.  Thank you again for spending time on this.

@vbisbest  I'm hoping to fix the Xamarin.Forms problem next week (if my theory proves correct). Stay tuned.

@jtattermusch
Hi,
Do you have any updates on this? I faced the issue on Xamarin.Forms project. iOS Native linking failed :(
Thanks in advanced.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _gprsharp_convert_clock_type. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.gprsharp_convert_clock_type. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _gprsharp_free. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.gprsharp_free. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _gprsharp_inf_future. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.gprsharp_inf_future. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _gprsharp_inf_past. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.gprsharp_inf_past. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _gprsharp_now. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.gprsharp_now. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _gprsharp_sizeof_timespec. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.gprsharp_sizeof_timespec. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_auth_context_peer_identity_property_name. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_auth_context_peer_identity_property_name. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_auth_context_property_iterator. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_auth_context_property_iterator. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_auth_context_release. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_auth_context_release. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_auth_property_iterator_next. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_auth_property_iterator_next. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_destroy. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_destroy. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_recv_close_on_server_cancelled. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_recv_close_on_server_cancelled. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_recv_initial_metadata. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_recv_initial_metadata. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_recv_message_length. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_recv_message_length. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_recv_message_to_buffer. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_recv_message_to_buffer. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_recv_status_on_client_details. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_recv_status_on_client_details. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_recv_status_on_client_status. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_recv_status_on_client_status. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_recv_status_on_client_trailing_metadata. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_recv_status_on_client_trailing_metadata. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_batch_context_reset. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_batch_context_reset. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_auth_context. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_auth_context. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_cancel. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_cancel. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_cancel_with_status. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_cancel_with_status. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_credentials_release. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_credentials_release. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_destroy. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_destroy. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_get_peer. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_get_peer. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_recv_initial_metadata. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_recv_initial_metadata. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_recv_message. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_recv_message. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_send_close_from_client. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_send_close_from_client. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_send_initial_metadata. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_send_initial_metadata. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_send_message. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_send_message. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_send_status_from_server. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_send_status_from_server. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_set_credentials. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_set_credentials. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_start_client_streaming. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_start_client_streaming. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_start_duplex_streaming. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_start_duplex_streaming. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_start_server_streaming. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_start_server_streaming. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_start_serverside. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_start_serverside. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_call_start_unary. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_call_start_unary. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_args_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_args_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_args_destroy. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_args_destroy. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_args_set_integer. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_args_set_integer. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_args_set_string. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_args_set_string. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_check_connectivity_state. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_check_connectivity_state. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_create_call. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_create_call. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_credentials_release. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_credentials_release. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_destroy. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_destroy. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_get_target. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_get_target. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_channel_watch_connectivity_state. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_channel_watch_connectivity_state. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_completion_queue_create_async. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_completion_queue_create_async. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_completion_queue_create_sync. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_completion_queue_create_sync. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_completion_queue_destroy. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_completion_queue_destroy. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_completion_queue_next. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_completion_queue_next. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_completion_queue_pluck. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_completion_queue_pluck. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_completion_queue_shutdown. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_completion_queue_shutdown. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_composite_call_credentials_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_composite_call_credentials_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_composite_channel_credentials_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_composite_channel_credentials_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_init. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_init. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_insecure_channel_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_insecure_channel_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_metadata_array_add. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_metadata_array_add. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_metadata_array_count. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_metadata_array_count. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_metadata_array_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_metadata_array_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_metadata_array_destroy_full. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_metadata_array_destroy_full. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_metadata_array_get_key. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_metadata_array_get_key. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_metadata_array_get_value. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_metadata_array_get_value. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_metadata_credentials_create_from_plugin. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_metadata_credentials_create_from_plugin. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_metadata_credentials_notify_from_plugin. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_metadata_credentials_notify_from_plugin. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_override_default_ssl_roots. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_override_default_ssl_roots. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_redirect_log. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_redirect_log. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_request_call_context_call. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_request_call_context_call. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_request_call_context_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_request_call_context_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_request_call_context_deadline. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_request_call_context_deadline. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_request_call_context_destroy. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_request_call_context_destroy. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_request_call_context_host. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_request_call_context_host. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_request_call_context_method. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_request_call_context_method. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_request_call_context_request_metadata. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_request_call_context_request_metadata. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_request_call_context_reset. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_request_call_context_reset. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_secure_channel_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_secure_channel_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_add_insecure_http2_port. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_add_insecure_http2_port. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_add_secure_http2_port. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_add_secure_http2_port. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_cancel_all_calls. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_cancel_all_calls. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_credentials_release. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_credentials_release. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_destroy. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_destroy. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_register_completion_queue. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_register_completion_queue. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_request_call. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_request_call. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_shutdown_and_notify_callback. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_shutdown_and_notify_callback. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_server_start. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_server_start. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_shutdown. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_shutdown. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_sizeof_grpc_event. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_sizeof_grpc_event. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_ssl_credentials_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_ssl_credentials_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_ssl_server_credentials_create. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_ssl_server_credentials_create. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_test_callback. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_test_callback. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_test_nop. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_test_nop. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_test_override_method. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_test_override_method. Please verify that all the necessary frameworks have been referenced and native libraries linked.
MTOUCH : error MT5214: Native linking failed, undefined symbol: _grpcsharp_version_string. This symbol was referenced by the managed member Grpc.Core.Internal.NativeMethods/DllImportsFromStaticLib.grpcsharp_version_string. Please verify that all the necessary frameworks have been referenced and native libraries linked.

@tuyen-vuduc   unfortunately I haven't been able to figure it out. Let's continue discussion about Xamarin.Forms here: https://github.com/grpc/grpc/issues/16250 - this issue has been closed.


Corrected 'paintjob', added text

Text added: ", and wanted to change the color of your Car."

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[x] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[x] My article does not contain shortened URLs or affiliate links.

If your pull request closes a GitHub issue, replace the XXXXX below with the issue number.
Closes #XXXXX

Thank you for your contribution.


Fix: Tooltip and message date position

Details

Style changes to make the Tooltip responsive instead of fix width.
Apply the Tooltip containerStyle in index.native.js for consistency across platforms
Fixes the message timestamp to the same line as the displayName

Fixed Issues

Fixes an issue with the below PR  where the Tooltip and the Timestamp of a message would me misplaced.
$ PR #3830
Tests

Open any chat
Check that the timestamp is line with the displayName
Hoover over the displayName
The Tooltip should show close to your cursor

QA Steps

Same as above.
Tested On

[x] Web
[x] Mobile Web
[x] Desktop
[x] iOS
[x] Android

Screenshots

Web

https://user-images.githubusercontent.com/53711423/125451787-291abf84-df6d-4de2-a7e2-4b577aef5220.mov
Mobile Web

https://user-images.githubusercontent.com/53711423/125451822-1b42ce10-4169-49e3-a811-f310c0b4bb3b.mp4
Desktop

https://user-images.githubusercontent.com/53711423/125451839-824bee7e-cab9-4be4-a334-840f298ffbdc.mov
iOS

https://user-images.githubusercontent.com/53711423/125451846-375d8db5-0714-4352-9fa7-cab7fb327130.mp4
Android

https://user-images.githubusercontent.com/53711423/125451860-1cf24716-b4d6-40f4-8f86-d09898cb0b87.mp4

@rdjuric in the future, with regressions, feel free to continue to tag and request reviews from engineers that are connected to the original issue

@rdjuric in the future, with regressions, feel free to continue to tag and request reviews from engineers that are connected to the original issue

Makes sense! Will do that in the future @Luke9389

linking this to the original issue: https://github.com/Expensify/Expensify.cash/issues/3172

Update made @Luke9389!
Changed our containerStyles to receive an array in our Tooltip and Hoverable to keep styling consistent across our code. Nice catch, thanks.

Made a few changes after your comments @parasharrajat. Thanks!

Updated @Luke9389

Updated @Luke9389

OK, this is lookin' good. Can you be sure to retest on all 5 platforms with the most recent version of the code before we wrap this up?

OK, this is lookin' good. Can you be sure to retest on all 5 platforms with the most recent version of the code before we wrap this up?

Will start retesting and tag you here once it's done!

Thanks! (I know it's a pain but I've seen looooots of regressions caused by skipping this final step)

@Luke9389
I tested this branch and the PR worked correctly. I merged it into our main branch locally just to make sure things were okay and looks like this commit https://github.com/Expensify/Expensify.cash/commit/7729fc0accab4011d3c6aacb1cdac2091c394e55 had a regression - it nullified the styling changes we made on the previous PR https://github.com/Expensify/Expensify.cash/pull/3830.
That's why we have this Tooltip/message date bug on prod (where the avatar and the display name aren't wrapped in the Pressable) but not on staging (where they're wrapped in a Pressable)
To make our change work with the Pressable we need to move our flexShrink1 from the ToolTip to the Pressable component. The updated videos on the PR are from the latest commit, where I made this change.
I kept our containerStyle -> containerStyles changes even thought we're no longer passing any styling to the ToolTip because I think they make the code more consistent, but let me know if you think differently.

OK, that sounds fine to me 👍

Can we merge this? @Luke9389

was just testing on all platforms myself as well :)

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

Thanks, @Luke9389! Sorry for missing this regression on the first PR.

🚀 Deployed to staging         in version: 1.0.77-6🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

🚀 Deployed to production         in version: 1.0.79-4🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


Unhandled reply fr. do_recv() {error,etimedout}

I am seeing this printed in the console:
=ERROR REPORT==== 25-Dec-2018::14:44:43.781628 ===
Unhandled reply fr. do_recv() {error,etimedout}

which is originated from yaws:http_recv_request/0. Is {error, timeout} supposed to be {error,etimedout}? Another issue is fr. is an odd abbreviation.

{error, timeout} is valid, and so I've left it alone in 517ca65, but I've added handling for {error, etimedout} too, and I've always wanted to fix that log message and so I've done that as well.

@vinoski The change looks good. Thanks.

Rebased 517ca65 to master.

@vinoski I can't find the commit on master. Something wrong?

Yes, apparently there was a network glitch while I pushed it. It's there now, commit 517ca65.

Thanks. Works now.


CASMCMS-8533: Create and document CFS import tool

Description

Create scripts to import CFS data generated by the CFS export tool.
Document same.
I tested the new tools on wasp and verified that it does not import things that it should not, and that it does import those things that it should import.
Checklist

[X] If I added any command snippets, the steps they belong to follow the prompt conventions (see example).
[X] If I added a new directory, I also updated .github/CODEOWNERS with the corresponding team in Cray-HPE.
[X] My commits or Pull-Request Title contain my JIRA information, or I do not have a JIRA.

/backport release/1.4 release/1.3

This JIRA is not a release critical, so I suspect there were other reasons to push it into docs-csm instead of libcsm. Since I suspect this code will still move to libcsm, I'll skip the review since there's numerous things that stick out to me but won't matter once this is refactored.


Fix #230, adds hardcoded string in string.xml and shifted placeholder…

… strings to last
Summary of changes
Added all the hardcoded strings to strings.xml and shifted all placeholder strings to the end of strings.xml.
Please make sure these boxes are checked before submitting your pull request - thanks! Guide

[ ] Code is formatted.

[ ] Run the lint tests with ./gradlew lintDebug and make sure BUILD is SUCCESSFUL

[ ] If new feature is implemeted then it is compatible with Night theme too.

[ ] Commit messages are well-written.

Automated message from Dropbox CLA bot
@abhaymaniyar, it looks like you've already signed the Dropbox CLA. Thanks!

@abhaymaniyar actually we don't use merge commits, just do a git rebase upstream/master to update your feature branch with project master. Checkout this guide http://zulip.readthedocs.io/en/latest/git-guide.html#keep-your-fork-up-to-date.

My current master branch is up to date. I am still having conflicts. What should I do now? @Sam1301

@abhaymaniyar I think your branch is not up-to-date with upstream master (https://github.com/abhaymaniyar/zulip-android/commits/master).

This guide is nice for your conflicts problem check the second last note https://backlogtool.com/git-guide/en/stepup/stepup7_6.html

Yes @kunall17! I went through that guide. Thank you :)

How deleting master from my local machine closes this PR? :confused:


What is my SCIM Endpoint URL?

[Enter feedback here]
Im new here. I followed all the instructions and created a sample app. But, the first q of the SCIM vcalidator is: SCIM Endpoint URL. And then, Token. How and where can I get these values?

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: 37753d44-c812-b775-134c-e1081f8a2cd9
Version Independent ID: 05b3ccf1-e811-0498-c0c4-e91cd2034606
Content: Tutorial - Test your SCIM endpoint for compatibility with the Microsoft Entra provisioning service. - Microsoft Entra ID
Content Source: docs/identity/app-provisioning/scim-validator-tutorial.md
Service: entra-id
Sub-service: app-provisioning
GitHub Login: @kenwith
Microsoft Alias: kenwith

@iamexpertguy
Thanks for your feedback! We will investigate and update as appropriate.

Hi @iamexpertguy
To find your SCIM Endpoint URL, you need to check the documentation or configuration of your app. The SCIM Endpoint URL is the URL of the endpoint that your app exposes to receive SCIM requests from Azure AD.
If you have followed the tutorial "Build a SCIM endpoint for user provisioning to apps from Azure Active Directory" (https://docs.microsoft.com/en-us/azure/active-directory/app-provisioning/use-scim-to-build-users-and-groups-endpoints), then your SCIM Endpoint URL should be the URL of your app's endpoint that you deployed to Azure App Service.
You can find the URL of your app's endpoint in the Azure portal by going to your app's Overview page and looking for the URL field. The SCIM Endpoint URL should be the URL of your app's endpoint with "/scim" appended to it.
For example, if your app's endpoint URL is "https://myapp.azurewebsites.net", then your SCIM Endpoint URL should be "https://myapp.azurewebsites.net/scim".
Once you have your SCIM Endpoint URL, you can use it to test your SCIM endpoint with the Azure AD SCIM Validator.

Hi,
Thanks for the answer. I added followed your description adding the /scim at the end of the app but still I failed:
@.***
Then, I tried to change the key value in  ‘appsettings.Development.json’ and rebuild the solution. It failed with a lot of errors:
@.***
I used Tools to select ALL asp.net and web development components to update Visual Studio 2022 hoping the missing packages are there.
@.***
Then I tried to rebuild again. It showed the same errors.
Then I just published it
Publishing failed. I cannot remember if it failed the first time.
@.***
So now I’m going to repeat all the steps again.
I cloned the URL AzureAD/SCIMReferenceCode: Reference code to build a SCIM endpoint to automate provisioning (github.com)https://github.com/AzureAD/SCIMReferenceCode to a new folder
I changed the key and app name published. Last time I just used the default values.
@.***
@.***
Token__TokenIssuer: https://sts.windows.net/40e82f81-9046-4602-93ee-dc72555b2347/
Are you aware of that the string ‘Token__TokenIssuer’ contains two (2) anderscores? Is it correct?
@.***
I left the deployment slot setting unchecked.
Then I filled the scimvalidator with https://microsoftscimwebhostsampleiamexpert2.azurewebsites.net/scim and tested. The same failure.
@.***
The app is running:
@.***
My key value is “12zakmes34”  . You are welcome to try.
I hope you can understand what’s not working…
Greetings,  Guy
From: ManoharLakkoju-MSFT @.>
Sent: Thursday, March 21, 2024 7:46 AM
To: MicrosoftDocs/entra-docs @.>
Cc: Guy Horn @.>; Mention @.>
Subject: Re: [MicrosoftDocs/entra-docs] What is my SCIM Endpoint URL? (Issue #532)
Hi @iamexpertguyhttps://github.com/iamexpertguy
To find your SCIM Endpoint URL, you need to check the documentation or configuration of your app. The SCIM Endpoint URL is the URL of the endpoint that your app exposes to receive SCIM requests from Azure AD.
If you have followed the tutorial "Build a SCIM endpoint for user provisioning to apps from Azure Active Directory" (https://docs.microsoft.com/en-us/azure/active-directory/app-provisioning/use-scim-to-build-users-and-groups-endpoints), then your SCIM Endpoint URL should be the URL of your app's endpoint that you deployed to Azure App Service.
You can find the URL of your app's endpoint in the Azure portal by going to your app's Overview page and looking for the URL field. The SCIM Endpoint URL should be the URL of your app's endpoint with "/scim" appended to it.
For example, if your app's endpoint URL is "https://myapp.azurewebsites.net", then your SCIM Endpoint URL should be "https://myapp.azurewebsites.net/scim".
Once you have your SCIM Endpoint URL, you can use it to test your SCIM endpoint with the Azure AD SCIM Validator.
—
Reply to this email directly, view it on GitHubhttps://github.com/MicrosoftDocs/entra-docs/issues/532#issuecomment-2011324439, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BGLEDD6KFV3T6MZYHNLPT2DYZJ6ZFAVCNFSM6AAAAABE35JWMSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAMJRGMZDINBTHE.
You are receiving this because you were mentioned.Message ID<EMAIL_ADDRESS>

@iamexpertguy
I'd recommend working closer with our support team via an [Azure support request] (https://docs.microsoft.com/en-us/azure/azure-portal/supportability/how-to-create-azure-support-request). Or you can leverage our Q&A forum by posting your issue there so our community, and MVPs can further assist you in troubleshooting this issue or finding potential workarounds.
[Teams Q&A forum] (https://docs.microsoft.com/en-us/answers/topics/46488/office-teams-windows-itpro.html) for technical questions about the configuration and administration of Microsoft Teams on Windows.
[Microsoft Teams Community forum] (https://answers.microsoft.com/en-us/msteams/forum?sort=LastReplyDate&dir=Desc&tab=All&status=all&mod=&modAge=&advFil=&postedAfter=&postedBefore=&threadType=All&isFilterExpanded=false&page=1)
Thank you for your time and patience throughout this issue.

I don’t agree. The whole procedure do not work. I invested my time in it so I expect Microsoft to deliver something working and stand behind it.
So I still expect a concrete answer to my  detailed and well documented issue.
Greeting, Guy
From: ManoharLakkoju-MSFT @.>
Sent: Friday, March 22, 2024 2:31 PM
To: MicrosoftDocs/entra-docs @.>
Cc: Guy Horn @.>; Mention @.>
Subject: Re: [MicrosoftDocs/entra-docs] What is my SCIM Endpoint URL? (Issue #532)
Closed #532https://github.com/MicrosoftDocs/entra-docs/issues/532 as completed.
—
Reply to this email directly, view it on GitHubhttps://github.com/MicrosoftDocs/entra-docs/issues/532#event-12215779044, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BGLEDD2XPVFBRVBQGPEGZKLYZQXBVAVCNFSM6AAAAABE35JWMSVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJSGIYTKNZXHEYDINA.
You are receiving this because you were mentioned.Message ID<EMAIL_ADDRESS>


Removed the legacy global edpm_env

As a pull request owner and reviewers, I checked that:

[x] Appropriate testing is done and actually running
[x] Appropriate documentation exists and/or is up-to-date:

[x] README in the role
[x] Content of the docs/source is reflecting the changes

/approve
/lgtm


FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

I get this error after about 3 minutes of running rollup. (usually my bundle is created in 1.6 seconds!).
What I am trying to do is add into the bundle either CESIUMJS or millsymbol.js

https://cesiumjs.org/downloads/
https://www.spatialillusions.com/milsymbol/docs/index.html

in npm speak, I added them as:
npm  install cesium --save
npm install milsymbol --save
Currently include them in the project via

I had the same kind of issues. Here is my workaround : http://geeklearning.io/angular-aot-webpack-memory-trick/

Yes I should have mentioned that I found this a few weeks ago on stack overflow: https://stackoverflow.com/questions/47444594/rollupjs-javascript-heap-out-of-memory
Same Solution. Thanks for posting this.

Still having issues after increasing the memory. (btw it took 3m 33.6s to create the bundle!.
Uncaught TypeError: Cannot read property 'document' of undefined
at bundle.js:1
at bundle.js:1
at bundle.js:1
at bundle.js:1
at createCommonjsModule (bundle.js:1)
at bundle.js:1

Closing this issue as it's been open for a long time with no activity. Please re-open if you are still facing this issue with latest Rollup and plugins!


Make configurable the IP/name for the "controller_node"

The machines in the cluster need to have some reference (ie, IP or DNS name) to the controller node. This is used, for example, for setting the salt minion configuration file with something like master: <%= @controller_node %>.
We are currently setting this @controller_node from the IP/address obtained in Velum (from the remote end IP/name in the client's request), but this can change depending on how the user reached Velum.
We should:

show this reached name/IP as a suggested value for the @controller_node
suggest to change it for a better name/IP, warning that it should be reachable by the rest of the machines in the cluster.

This has already been fixed by https://github.com/kubic-project/velum/pull/127


Alarm Panel broken since 2.7.4

Hello,
Since @cantupaz made a big code cleanup, the alarm panel is not responsive anymore.

Im not able to arm or disarm the alarm with the panel attached.
Can someone fix it ?
I m staying on the 2.7.3 for a while
Thanks
Guillaume

my bad, I found finally that unchecking the "check alarm panel's status in every request" solves the issue


Using ShallowFBCSPNet with create_from_X_y

Hello there! I followed the steps described in the trialwise decoding example and tried to adapt the process to work with a different dataset. Namely the 5 finger MI from this dataset.
However, I seem to struggle with setting the parameters properly.
What I did is...
I load eeg data from a .mat file and also extract the events:
eeg_data.shape
Out: (736600, 22)

-> 22 Channels
Then I extract trial data + labels and create X and y as numpy arrays:
X.shape
Out: (957, 22, 240)
X[0].shape
Out: (22, 240)
y[0]
Out: 4

Split the dataset:
num_trials = len(X)
split_i = int(num_trials * 0.8)

train_X = X[:split_i]
valid_X = X[split_i:]
train_y = y[:split_i]
valid_y = y[split_i:]

Use create_from_X_y:
train_set = create_from_X_y(train_X, train_y, drop_last_window=False, sfreq=sample_frequency)
valid_set = create_from_X_y(valid_X, valid_y, drop_last_window=False, sfreq=sample_frequency)

(sample_frequency is 200)
Train set description:
     target
0         4
1         2
2         5
3         1
4         5
..      ...
760       3
761       1
762       1
763       5
764       5

[765 rows x 1 columns]

Valid set description:
     target
0         1
1         4
2         3
3         4
4         2
..      ...
187       4
188       5
189       3
190       5
191       5

[192 rows x 1 columns]

Create the model:
input_window_samples = train_set[0][0].shape[1] # shape is (22,240)
model = ShallowFBCSPNet(
    len(ch_names), # number of channels
    5, # number of classes
    input_window_samples=1000,
    final_conv_length='auto',
)

Here I used either input_window_samples =1000 or the value obtained from the shape of a trial as written above.
And finally the classifier:
batch_size = 32
n_epochs = 10
clf = EEGClassifier(
    model,
    criterion=torch.nn.NLLLoss,
    optimizer=torch.optim.AdamW,
    train_split=predefined_split(valid_set),
    optimizer__lr=0.0625 * 0.01,
    optimizer__weight_decay=0,
    batch_size=batch_size,
    callbacks=[
        "accuracy", ("lr_scheduler", LRScheduler('CosineAnnealingLR', T_max=n_epochs - 1)),
    ],
    device=device,
)
clf.fit(train_set, y=None, epochs=n_epochs)

But I always fail when trying to clf.fit.
Using input_window_samples = train_set[0][0].shape[1] = 240 I get
"IndexError: Target 5 is out of bounds." in torch/nn/functional.py nll_loss line 2532
or using input_window_samples=1000 I get
"RuntimeError: Calculated padded input size per channel: (10 x 1). Kernel size: (61 x 1). Kernel size can't be greater than actual input size" in torch/nn/modules/conv.py _conv_forward line 442.
So even if one of these values is valid for input_window_samples, there is another thing that I am missing, though I have no idea where to look at. Are dimensions for eeg trials/labels wrong? Did I misunderstood the parameters? Any idea would be very much appreciated!
Cheers, Max

Hi Max,
sorry, the error message for the first error could be more elusive.
The targets are expected to start from 0, so please adjust accordingly.
Instead of having targets from 1 to 5, they should range from 0 to 4.
Let me know whether this fixes your problems.


Refer to local reference instead of the type reference.

See MODULES-8182.

https://github.com/puppetlabs/puppetlabs-maillist_core/pull/9 needs to be merged first

.travis.yaml doesn't have BEAKER_PUPPET_COLLECTION set at all. Do we need that? It's there for all other projects


Support version for proposed APIs

Ref: https://github.com/microsoft/vscode/issues/214294

Support version for API proposals. Version is an incremental number and should be provided in the proposal d.ts file as a comment like below.

// version: 1

Updated generateApiProposalNames to generate proposals with versions. Moved the extensionsApiProposals files to platform so that proposals can be accessed by shared process.

Extensions can lock the proposal version by mentioning the version while declaring the proposal in enabledApiProposals section. Locking the version should make the extension installable or activated in VS Code with the proposal with that version number only. This PR does not have this installation or activation validation which will be implemented in next PR.

"enabledApiProposals": [
    "testObserver@1",
]

Introduced enabledApiProposalNames property in IExtensionDescription that contains parsed enabledApiProposals. This should be used by ExtensionsProposedAPI for validation and modification.

Seems, there is something broken with my changes. I will take a look and fix.

Fixed!


Is it possible to avoid console.log each time onConnect or onReconnect etc.

Good day.
Why do you need to display connection message in console?

Hi I make fork of this library and updated this, no more sensitive information at console. I added support for IPublishPacket too and fix vulnerability in package and Actions are running linter
You can try it by installing that:
npm install git+https://github.com/1biot/mqtt-vue-hook.git#handle_packets_and_debug_dist

H @ostrui,
I apologize for the delayed response. I have released a new version, v1.2.19, which hides sensitive information.
I want to express my sincere gratitude to @1biot  for your assistance.


Please let me know if there is there a limit of REST API actions(create, update, delete) for subscriptions?  Using either REST API directly or azure cli. I couldn't find that info in the docs.

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

https://docs.microsoft.com/en-us/rest/api/searchservice/addupdate-or-delete-documents
https://docs.microsoft.com/en-us/rest/api/azure/

https://docs.microsoft.com/en-us/rest/api/searchservice/addupdate-or-delete-documents
https://docs.microsoft.com/en-us/rest/api/azure/

@HeidiSteen Could you look at this issue?

@HeidiSteen Could you look at this issue?

Thanks @gewarren for the heads up about this issue!  @mosolano, there are no limits on the number of requests you can send.  All of the subscription service limits are documented in this article:  https://docs.microsoft.com/en-us/azure/search/search-limits-quotas-capacity
Please reply back if this doc doesn't answer your question.  If you believe your issue is addressed, could you please close the issue?
Thanks for reaching out with your question.

Thanks @gewarren for the heads up about this issue!  @mosolano, there are no limits on the number of requests you can send.  All of the subscription service limits are documented in this article:  https://docs.microsoft.com/en-us/azure/search/search-limits-quotas-capacity
Please reply back if this doc doesn't answer your question.  If you believe your issue is addressed, could you please close the issue?
Thanks for reaching out with your question.

Feel free to reopen if the issue isn't resolved.
#please-close

Feel free to reopen if the issue isn't resolved.
#please-close


Parse strings only when they are referenced

Fix #1926.
Works well enough on all the APKs available locally to me (malicious or not), including the sample provided in the referenced issue.
BTW, this sample AndroidManifest.xml.zip uses another technique (an extremely large Unicode string in the place of namespace identifier, where Android doesn't care) to try to crash JADX, any idea on how we could defend against this?

Thanks for this nice PR. I made some tests as I was interested how large the copied byte array sections will get and how effective the cache is.
A common APK has 3 different BinaryXMLStrings instances, usually two larger and one small. In total the buffered byte array  of all three is between 1 MB and 5 MB. The used cache has a lot of cache hits when loading the APK file, so the the cache is really useful.

@chengyuhui thank you for a nice fix :+1:

... try to crash JADX, any idea on how we could defend against this?

Maybe we can cut such strings similar to deobfuscation conditions for names in code (i.e. if longer of configured number).


Allow Versions of pywin32 > 305

Modified requirements to support versions of pywin32 > 305 due to issues installing with python version 3.12.1

Thanks! Sorry I didn't see this earlier.


Recommendation for ordering of filter options on search screen

The current order is Organization Type, Organization Status, Credential.

I'd recommend putting Organization Status at the top of the list.  The first thing I find myself doing all the time is filtering by Active status to remove all of the noise of the Historical companies.
Or perhaps put the Organization Status options at the top of the list and enable the Active option by default.  Unlike the previous UI this one lists the filter options at the top of the results, making it more obvious which filter options are being used.

I think a lot of thought is needed for this. I had put in a few ideas I have on the same topic in #37, but I'm not convinced those are right either :-).  We'll have to discuss this one a bit to see both what's best and possible.

Agree on this one change -- moving Org Status to the top of the list.  Priority for cleanup.