Почему моя привязка NearbyMessages Objective-C к C# создает исключение NSInvalidArgumentException при вызове методов публикации / подписки?

Я использовал Objective Sharpie для создания полуфункциональной привязки iOS C# для API Google Nearby Messages из двоичного файла libGNSMessages.a и заголовков в cocoapod Nearby Messages. Добавив эту библиотеку связывания в проект Xamarin.iOS, я могу создавать и получать доступ к объектам GMSMessage и GMSMessageManager. Когда я пытаюсь использовать GMSMessageManager.publishWithMessage(), я получаю это исключение, хотя я использую правильный тип аргумента:

Foundation.MonoTouchException: Objective-C exception thrown.  
Name: NSInvalidArgumentException 
Reason: NSConcreteMutableAttributedString initWithString:: nil value

Вот тестовый код, который я использую из метода FinishedLaunching в AppDelegate.cs (я проверил, что как manager, так и message являются действительными экземплярами своего типа):

  GNSMessageManager manager = new GNSMessageManager(apiKey);
  GNSMessage message = GNSMessage.MessageWithContent(NSData.FromString("Hello"));
  GNSPublication pub = manager.PublicationWithMessage(message);

Вот привязка из ApiDefinitions.cs в проекте привязки Visual Studio, на который он ссылается (комментарий - это сигнатура метода из исходного заголовочного файла jective-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));
        }
    ... }

Режим отладки показывает, что все три аргумента, по крайней мере, не равны NULL.

Это то же самое исключение: "NSConcreteMutableAttributedString initWithString:: nil value" при использовании Google Nearby Messages. Однако эта ошибка предположительно исправлена, и современные CocoaPods, которые я использовал в качестве основы для привязки Sharpie, отлично работают, когда я создаю тестовый быстрый проект в XCode, поэтому мое связывание, вероятно, является виновником. Есть также более старая двоичная библиотека C# NearbyMessages, включенная в NearbyMonkey, которую я пытался использовать, но она терпит крах с текущими версиями iOS.

Спасибо, что нашли время, чтобы прочитать это далеко. Любая помощь или предложения, которые вы могли бы предложить, будут очень благодарны.

0 ответов

Хорошо, спустя месяцы я наконец понял, что случилось.

Модуль Google Nearby был распространен с папкой "Ресурсы" - xcassets, некоторые материалы по локализации, все связанные с отображением - которые я не включил в свой проект по связыванию. Ошибка была вызвана, когда Nearby попытался получить доступ к этим изображениям, и так далее, чтобы отобразить запрос на разрешение. Копирование этих ресурсов в мой проект Xamarin.iOS исправило ошибку.

Другие вопросы по тегам