11

目標:特定の日時にメッセージを表示するXamarinスタジオを使用してクロスプラットフォームモバイルアプリを開発する。

質問:

a)そのようなアプリケーションを開発したい場合、プラットフォーム間で共有できること/共有できること。(可能なクラスの構造設計が高く評価されます)

b)タイマーまたはAlarmManagerを使用する方が良いですか?

c)共有コアプロジェクト(ポータブルクラスライブラリ/プラットフォーム固有ライブラリ/プレーンC#プロジェクト)用にどのタイプのプロジェクトを作成する必要がありますか?

前もって感謝します。

4

4 に答える 4

18

ここ数週間、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サポートが「間もなく」提供されることを約束しており、これらのハッキングに煩わ​​される必要はありません。

于 2013-05-11T12:51:15.477 に答える
2

現在のところ、Xamarinはビジネスロジックの共有に役立ちます。つまり、データベース、Webサービス、または作業しているプラ​​ットフォームに依存しないそのようなコード。C#でコーディングします。したがって、基本的なc#機能にアクセスできます。つまり、口頭で正確に言うと、使用できる単一固有の機能にアクセスできます。

結論として、私が要約できるのは、作業のバックエンド用に別のプロジェクトを作成し、UIとその背後にあるコード用に別のプロジェクトを作成できるということです。(両方とも明らかに同じ作業スペースにあります)。次に、この中央コアの種類のバックエンドプロジェクトを、IOSアプリ、Androidアプリ、およびデフォルトでWP8アプリ(MacおよびWindowsアプリでも)で使用できます。そのため、コアを除いて、UI、そのハンドラー、およびコードビハインドに関して、すべてのプラットフォームで個別にコーディングするために、いくつかの追加の努力を払う必要があります。

于 2014-05-06T10:49:11.147 に答える
2

これは古い投稿ですが、最近これを実行したい場合は、今年初めにリリースされたXamarin.Formsを確認してください。これは、真にクロスプラットフォームのコントロールのセットであるため、UIを1つだけ作成します。

于 2014-11-14T16:47:27.980 に答える
1

開始するには、Xamarinチームのこのガイドを確認してください:http: //docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications

これは、パートCの質問に対処する4番目のパートです 。http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/part_4_-_platform_divergence_abstraction_divergent_implementation

さらに、右側のXamarin Studioダッシュボード/メイン画面(?)には2つのアプリケーションがあり、完全に機能し、2〜3のプラットフォームを対象としているため、プロジェクト間でコードを共有するときにアプリケーションがどのように構成されているかを確認できます。

彼らのサイトにはもっとたくさんのガイドやチュートリアルがあり、それらを読んで練習するのにそれほど時間はかかりません。

于 2013-03-25T17:20:07.933 に答える