Я использовал Objective Sharpie для создания полуфункциональной привязки iOS C# для Google Nearby Messages API из бинарного файла libGNSMessages.a и заголовков в Cocopod'е NearbyMessages. Добавив эту библиотеку привязок в проект Xamarin.iOS, я могу создавать объекты GMSMessage и GMSMessageManager и обращаться к ним. Однако, когда я пытаюсь использовать GMSMessageManager.publishWithMessage(), я получаю это исключение, хотя я использую правильный тип аргумента:
Foundation.MonoTouchException: Objective-C exception thrown.
Name: NSInvalidArgumentException
Reason: NSConcreteMutableAttributedString initWithString:: nil value
Вот тестовый код, который я использую из метода FinishedLaunching в AppDelegate.cs (я проверил, менеджер и сообщение являются допустимыми экземплярами своего типа):
GNSMessageManager manager = new GNSMessageManager(apiKey);
GNSMessage message = GNSMessage.MessageWithContent(NSData.FromString("Hello"));
GNSPublication pub = manager.PublicationWithMessage(message);
Вот привязка из ApiDefinitions.cs в проекте привязки Visual Studio, на который он ссылается (комментарий — это сигнатура метода из исходного файла заголовка Objective-C):
// -(id<GNSPublication>)publicationWithMessage:(GNSMessage *)message;
[Export ("publicationWithMessage:")]
GNSPublication PublicationWithMessage (GNSMessage message);
А вот код в GNSMessageManager.g.cs (сгенерированный этим проектом Visual Studio), где возникает исключение:
public virtual GNSPublication PublicationWithMessage (GNSMessage message)
{ ...
if (IsDirectBinding) {
return Runtime.GetNSObject<GNSPublication> (global::ApiDefinitions.Messaging.IntPtr_objc_msgSend_IntPtr (this.Handle, Selector.GetHandle ("publicationWithMessage:"), message.Handle));
}
... }
Режим отладки показывает, что все три этих аргумента по крайней мере не равны нулю.
Здесь такое же исключение: 'NSConcreteMutableAttributedString initWithString:: nil value' при использовании Google Nearby Сообщения. Однако эта ошибка якобы исправлена, и обновленные CocoaPods, которые я использовал в качестве основы для привязки Sharpie, прекрасно работают, когда я создаю тестовый проект Swift в XCode, поэтому моя привязка, вероятно, является виновником. Также есть более старая двоичная библиотека C# NearbyMessages, включенная в NearbyMonkey, которую я пытался использовать, но она вылетает с текущие версии iOS.
Спасибо, что нашли время, чтобы прочитать это далеко. Мы будем очень признательны за любую помощь или предложения, которые вы могли бы предложить.