Я разрабатываю приложение для iOS с использованием форм Xamarin, для которого я создал базовую модель, вокруг которой работают все функции приложения.
Я хотел бы включить простое приложение watchOS, которое позволяет пользователю одновременно работать с одним экземпляром этой модели. Я реализовал некоторый код для обновления модели в приложении watchOS с использованием WCSession (через этот WCSessionManager Class ). Я также повторно использовал некоторый код для реализации таймера из моего проекта Xamarin Forms.
Однако при создании моего решения я сталкиваюсь с ошибкой компоновщика. Я думаю, что это может быть потому, что я ссылался на мой проект Xamarin Forms из моего проекта watchOS, что может быть запрещено. Вот ошибка:
/Users/luketimothy/Projects/TodoQ/TodoQ.Watch/TodoQ.Watch.WatchOSExtension/MTOUCH: Error MT2001: Could not link assemblies. Reason: Error while processing references of 'TodoQWatchWatchOSExtension, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' (MT2001) (TodoQ.Watch.WatchOSExtension)
Файл, на который ссылается ошибка: MTOUCH
. Я не уверен, что именно это, но единственное место в моем приложении watchOS, на которое я ссылался в своем коде Xamarin Forms, - это объект:
using System;
using System.Collections.Generic;
using TodoQ.Models;
using TodoQ.Utilities;
using WatchConnectivity;
using WatchKit;
namespace TodoQ.Watch.WatchOSExtension
{
internal class TodoState
{
private TodoItem current;
private ISessionTimer timer;
public TodoItem Current { get => current; set { current = value; TaskUpdated(this, value); } }
public event TaskUpdatedEventHandler TaskUpdated;
public delegate void TaskUpdatedEventHandler(object sender, TodoItem current);
public event TimerElapsedEventHandler TimerElapsed;
public delegate void TimerElapsedEventHandler(object sender, TimerElapsedEventArgs current);
public TodoState()
{
WCSessionManager.SharedManager.ApplicationContextUpdated += DidReceiveApplicationContext;
timer = new PomodoroTimer();
timer.ProgressUpdate += (object sender, ProgressUpdateEventArgs e) =>
{
TimerElapsed(this, new TimerElapsedEventArgs() { Elapsed = e.Elapsed, EndTime = e.EndTime });
};
timer.MilestoneUpdate += (object sender, PomodoroStateID e) =>
{
var audio_file = WKAudioFilePlayerItem.Create(WKAudioFileAsset.Create(new Foundation.NSUrl("ShortBreak.wav")));
var audio_player = WKAudioFilePlayer.Create(audio_file);
audio_player.Play();
WKInterfaceDevice.CurrentDevice.PlayHaptic(WKHapticType.Notification);
};
}
public void DidReceiveApplicationContext(WCSession session, Dictionary<string, object> applicationContext)
{
var message = (TodoItem)applicationContext["FocusedItem"];
if (message != null)
{
Console.WriteLine($"Application context update received : {message.Heading}");
Current = message;
}
}
public void StartTimer()
{
timer.StartSession();
}
}
public class TimerElapsedEventArgs
{
public TimeSpan Elapsed;
public TimeSpan EndTime;
}
}
Итак, мой вопрос. Если это должно быть разрешено, и ошибка является чем-то другим, могу ли я получить некоторую помощь в отслеживании того, что это за MTOUCH и почему он выдает эту ошибку? Если это не разрешено, каково рекомендуемое решение для обмена таким кодом между моим приложением для телефона и моим приложением для часов? Могу ли я положить его в PCL? Должен ли я копировать код между проектами?