ここ数週間、AndroidとiOSの間でコードを最適に共有する方法に焦点を当ててきました。ここに、私の経験に基づいた提案を示します。
a)一般に、プラットフォーム固有ではないプラットフォーム間で何でも共有できます。
私は、インターフェイスによって定義されたビューへの参照を保持するプレゼンターまたはメディエーターを使用する傾向があります。たとえば、ログインビューがある場合、iOSUIViewControllerとAndroidアクティビティの両方にILoginViewインターフェイスを実装します。このインターフェースには、以下が定義されています。
- ユーザー名とパスワードのゲッター
- LoginSubmittedと呼ばれるイベント
- ShowLoginFailedとGoNextScreenの2つのメソッド
プレゼンター/メディエーターは、送信されたログインをリッスンし、ユーザー名/パスワードを取得し、それらをサービスコールまたはコマンドに渡す責任があります。メディエーターは、コマンド/サービスの結果を受け取るたびに、ShowLoginFailedまたはGoNextScreenのいずれかを呼び出す責任があります。
また、SQLite Manager(https://github.com/praeclarum/sqlite-net/tree/master/src)、または実際のWebAPIサービス呼び出しを行うデリゲートを定義するためのインターフェイスを使用しました。SQLiteマネージャーとRestSharpで実行する必要のあるプラットフォーム固有のコンパイルがあるため、これを実行する必要があることがわかりました。
簡単に言うと、インターフェースは、特に依存性注入システムのようなものと組み合わせる場合に、友だちになります。
b)デバイスがスリープモードのとき、または別のアプリのとき、ユーザーにアラームのプロンプトを表示させたい場合は、Androidの場合はAlarmManagerを、iOSの場合はLocalNotificationを使用します。
c)Xamarin.AndroidおよびXamarin.iOSでPCLを使用することができます。問題は、PCLがまだ100%サポートされていないことです。ただし、開発環境に加えることができるいくつかの調整があり、うまくいけば、必要な場所に到達するはずです。
Xamarin Studioでベータチャネルまたはアルファチャネルに切り替えます:[XamarinStudio]->[更新の確認]->ポップアップするダイアログボックスの左上にあるコンボボックスでチャネルを変更します->[更新の再起動とインストール]を選択します。」これにより、AndroidプロジェクトとiOSプロジェクトの両方が同じソリューションで同じPCLにリンクできるようになります。
XSを更新した後、XSを閉じ、この投稿の指示に従って、PCLが正しくコンパイルされるようにMonoインストールを変更します。MonoDevelop:PCLのコンパイラを切り替えることは可能ですか?
PCLプロジェクト内でより適切に再生するためのコードヒントを取得するには、Monoインストールからmscorlib.dllを取得し、プロジェクトディレクトリのDLLフォルダーに配置して、PCLプロジェクトにその参照を追加する必要があります。dllはここにあります:/Library/Frameworks/Mono.framework/Versions/3.0.10/lib/mono/4.0
これらすべてを実行すると、PCLが機能するようになります。XSでユニットテストプロジェクトを作成してPCLにリンクし、IDE内からテストを実行できるようになったという点で、これは追加の作業の価値があることがわかりました。さらに、Moqのようなライブラリを使用して、ビューをモックし、統合テストを行うことができます。
Xamarinは、完全なPCLサポートが「間もなく」提供されることを約束しており、これらのハッキングに煩わされる必要はありません。