apeescape2.com
  • メイン
  • ブランドデザイン
  • 財務プロセス
  • Webフロントエンド
  • バックエンド
バックエンド

MacのC#でAndroidおよびiOSアプリを作成する方法

昔々、最高のツールをすべて備えている会社があり、そのプラットフォーム用のソフトウェアを書くことは素晴らしかったです。しかし、ゆっくりと、彼らは自分たちの問題に無関心になりました。彼らのシステムがクラッシュしたとき、彼らは心配することはありませんでしたが、むしろこの宇宙の状態を人生の事実として受け入れました。彼らは、彼らのプログラムは彼ら自身の中で完璧であり、穏やかでエレガントであり、彼らの目的は自明であると信じていました。

ああ、彼らがどれほど間違っているかを知っているだけなら…

彼らが彼らの過ちに気づき、彼らのCEOが叫んだとき、それはかなり遅れていました すべての開発者を呼び戻す プラットフォームを離れて出航した人。会社は マイクロソフト そして私は、彼らの運命は封印されており、テクノロジー業界の最前線からゆっくりと、しかし確実に消滅するだろうと確信していました。



私は間違っていたのでとても幸せです!

過去数年間で、マイクロソフトは彼らの袖からいくつかのエースを引っ張ってきました。はい、彼らはSkypeを台無しにし(私はまだそれが嫌いです)、スマートフォンで失敗し、タブレットでほぼ成功しました。しかし、彼らはいくつかの本当に素晴らしいこともしました。彼らはクローズドエンパイアアプローチを放棄し、.NETをオープンソース化し、Linux Foundationに参加し、Linux用のSQL Serverをリリースし、この素晴らしい新しいツールを作成しました。 Visual Studio for Mac 。

そうです、 リアル Windows用ではなくMac用のMicrosoftIDE。想像してみろ!

Visual Studio For Mac

MacでC#を使用して最初のクロスプラットフォームAndroidおよびiOSアプリケーションを作成する

Visual Studio for Macを使用して、ほぼすべての種類のアプリケーションを作成できます。 iOS、tvOS、Android、Mac、.NET Core、さらにはASP.NETでもかまいません。かっこいい子供たち全員がモバイルアプリを作成しているので、AndroidとiOSで実行されるC#アプリケーションを作成するためにVisual Studio forMacで何が必要かを見てみましょう。

最初に行う必要があるのは、アプリケーションテンプレートを選択することです。簡単な「シングルビューアプリ」から始めましょう。

シングルビューアプリ。

パッケージ名を入力してアプリをブートストラップした後、VisualStudioは3つのプロジェクトでソリューションを作成します。最初のプロジェクトは、プラットフォームに依存しないコードを保持する必要がある共有ライブラリであり、他の2つはAndroidアプリとiOSアプリです。

入門。

「実行」メニューまたはアプリケーションバーのコマンドを使用して、アプリを起動できます。

Hello World、Click Me!

2回のクリックを記録します。

おめでとう!これで、Objective-C、Swift、またはJavaコードの行を作成したことがないという事実に関係なく、iOSおよびAndroidの開発者になりました。

ただし、このアプリではまだあまり成果を上げていません。物事をもっと面白くして、地図と位置情報サービスを取り入れましょう。

クレジットカードハッカー100の新しい番号

地図と位置情報サービスの使用

VS for Macはまだ「プレビュー」にあり、それを使用する上で見つけるヘルプやドキュメントはあまりないことを覚えておいてください。物事を行う方法についての参照に最適な場所は、依然として公式のXamarinドキュメントです。

Visual Studio For Macは、PCで見た可能性のあるXamarinツールと同じソリューションとアプリケーション構造を使用していません。ほとんどの場合、例を機能させるには、いくつかのハードルを実験して回避する必要があります。 VS for Macの最終バージョンがリリースされたら、Microsoftがゲームのトップを維持し、MSDNリソースのすばらしいコレクションを提供することを期待しましょう。

iOSで現在地を表示

現在地などのモバイルデバイスリソースにアクセスするには、ユーザーがそれらのリソースを使用するための権限をアプリに「手動で」付与する必要があります。 iOSはファイルを使用しますinfo.plistこれらの設定を保存します。 VS for Macは、このファイルを編集するためのビジュアルインターフェイスを提供します。最初に行う必要があるのは、NSLocationWhenInUseUsageDescriptionという名前の設定に値を追加することです。

使用法の説明にある場合の場所の値の追加。

注意: プロパティ名を設定すると、VSは「NSLocationWhenInUseUsageDescription」の長い名前を表示します。これは予想されることであり、心配する必要はありません。

ブートストラップされたアプリケーションは、クリック数をカウントする単純なボタンで作成されました。最初にやりたいことは、それを削除して、画面のコンテンツを地図に置き換えることです。これを行うには、Main.storyboardを探しますソリューションブラウザでファイルをダブルクリックし、エディタで開きます。

ストーリーボードは、アプリケーションのユーザーインターフェイスを視覚的に表現したもので、コンテンツの画面とそれらの画面間の接続を示します。ストーリーボードは一連のシーンで構成され、各シーンはビューコントローラーとそのビューを表します。シーンは、2つのビューコントローラー間の遷移を表すセグエオブジェクトによって接続されます。

ストーリーボードはAppleによって導入され、Xamarinでも採用されています。参照する Appleドキュメント または Xamarinドキュメント 詳細については。

ボタンを削除し、マップビューコンポーネントをページに追加します。

マップビューコンポーネントを削除します。

「mapView」コンポーネントに適切な名前を付けてください。

マップビューコンポーネントの命名

今残っているのはあなたのViewController.csを片付けることだけですファイルを作成し、ViewDidLoad()を変更します以下に一致する方法:

using CoreLocation; public override void ViewDidLoad() { base.ViewDidLoad(); // Perform any additional setup after loading the view, typically from a nib. CLLocationManager locationManager = new CLLocationManager(); locationManager.RequestWhenInUseAuthorization(); mapView.ShowsUserLocation = true; }

「クイック修正」機能を使用して、VSにCoreLocationライブラリへの参照を自動的に追加させるか、手動で追加することができます。

iOSアプリを実行すると、現在地にアクセスするためのリクエストが表示されます。許可が与えられると、マップはあなたがどこにいるのか(またはiOSシミュレーターを使用してどこにいるのかを示す標準の青い点でロードされます:))。

アプリケーションでの場所の使用を許可します。

jsはタイムスタンプを日付に変換します

Androidで現在地を表示

残念ながら、GoogleとMicrosoftは、この単純なタスクをiOSの場合よりも少し複雑にすることにしました。 Androidアプリケーションで地図を使用するには、Google Maps APIキーを作成し、それをAndroidManifest.xmlに追加する必要があります。ファイル。

Xamarinの連中は、 Google MapsAPIキーの取得 。続行する前に、ガイドの手順に従ってください。完了したら、AndroidManifest.xml次のような設定が含まれている必要があります。

Xamarin.Forms.Maps

これで、アプリケーションにマップを追加する準備が整いました。

VS for Macの優れている点は、兄貴のようにNuGetを搭載していることです。マップ処理ライブラリはデフォルトで含まれていないため、LinearLayoutをインストールする必要がありますパッケージ。

Xamarin.Forms.Mapsをインストールします

ただし、「アクティビティ」にドラッグするだけの「マップビュー」コンポーネントはありません。代わりに、画面にマップを追加するには、Resources-> layout-> Main.axmlファイルを手動で変更する必要があります。デザイナビューを使用して、前に作成したボタンを削除できますが、「コードビュー」に切り替えて、次のフラグメントコードをAndroidManifest.xmlに追加します。

MainActivity.cs

iOSと同様に、適切な権限を要求するようにアプリを構成する必要があります。これを行うには、using Android.Gms.Maps.Model; using Android.Gms.Maps; using Android.Locations; Make your MainActivity also a ILocationListener. public class MainActivity : Activity, ILocationListener Implement the ILocationListener methods within your MainActivity: public void OnProviderEnabled(string provider) {} public void OnProviderDisabled(string provider) {} public void OnStatusChanged(string provider, Availability status, Bundle extras) {} public void OnLocationChanged(Android.Locations.Location location) { LatLng latLng = new LatLng(location.Latitude, location.Longitude); CameraPosition.Builder builder = CameraPosition.InvokeBuilder(); builder.Target(latLng); builder.Zoom(15); builder.Bearing(155); builder.Tilt(10); CameraPosition cameraPosition = builder.Build(); CameraUpdate cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition); MapFragment mapFrag = (MapFragment)FragmentManager.FindFragmentById(Resource.Id.map); GoogleMap map = mapFrag.Map; if (map != null) { map.MoveCamera(cameraUpdate); } } を開きます編集するには、エディタの左下にある「アプリケーション」ボタンをクリックします。 VSは、これらの値を設定するための視覚的なインターフェイスを表示します。以下に示すように、有効にする必要があるものがいくつかあります。

権限を有効にします。

今度は実際のコードを書く時です。 LocationManager locMgr; string locationProvider; を見つけますファイルを開いて編集し、次の変更を加えます。

名前空間参照を追加します。

OnCreate()

次の2つの変数をクラスレベルの変数として追加します。

protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the 'main' layout resource SetContentView(Resource.Layout.Main); locMgr = GetSystemService(LocationService) as LocationManager; Criteria locationCriteria = new Criteria(); locationCriteria.Accuracy = Accuracy.Coarse; locationCriteria.PowerRequirement = Power.Medium; locationProvider = locMgr.GetBestProvider(locationCriteria, true); locMgr.RequestLocationUpdates(locationProvider, 2000, 1, this); }

そして、OnCreate()をクリーンアップしますこのように見える方法:

MainActivity

ILocationListener内からGetSystemServiceを呼び出す。メソッド、あなたのRestClient.cs using System; using System.Net; namespace testshared { public delegate void callback(string responseText); class ReqState { public ReqState(HttpWebRequest req, callback cb) { request = req; callback = cb; } public HttpWebRequest request { get; set; } public callback callback; } public class RestClient { public RestClient() {} public void FetchPage(string url, callback cb) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.BeginGetResponse(new AsyncCallback(FinishWebRequest), new ReqState(request, cb)); } private void FinishWebRequest(IAsyncResult result) { ReqState reqState = (result.AsyncState as ReqState); HttpWebResponse response = reqState.request.EndGetResponse(result) as HttpWebResponse; using (var reader = new System.IO.StreamReader(response.GetResponseStream())) { string responseText = reader.ReadToEnd(); reqState.callback(responseText); } } } } としてアクティブ化されますこれにより、上記のすべてのイベントを処理できるようになります。

Androidアプリケーションを実行すると、次の画像のように、地図が現在地に配置されます。

サラエボに配置された地図。

iOSおよびAndroid用の共有ライブラリの使用

VS for Macの最大の機能の1つは、iOSアプリとAndroidアプリの間でコードを共有できることです。理想的には、アプリのすべてのビジネスロジックを共有ライブラリに入れて、iOSおよびAndroid固有のコードをUIの一部に制限することができます。

HTTPリクエストを非同期的に実行し、デバッグコンソールにコンテンツを表示する共有クラスを作成しましょう。

ViewController.csという名前の共有ライブラリに新しいクラスファイルを作成します次のコードで:

(プロジェクトの正しい名前空間を使用してください)

using System; using UIKit; using System.Diagnostics; namespace testshared.iOS { public partial class ViewController : UIViewController { RestClient rest = new RestClient(); public ViewController(IntPtr handle) : base(handle) {} public override void ViewDidLoad() { base.ViewDidLoad(); // Perform any additional setup after loading the view, typically from a nib. Button.AccessibilityIdentifier = 'myButton'; Button.TouchUpInside += delegate { Button.SetTitle('Loading...', UIControlState.Normal); rest.FetchPage('http://www.google.com', doneCallback); }; } public void doneCallback(string content) { InvokeOnMainThread(() => { Debug.Write(content); Button.SetTitle('All Done', UIControlState.Normal); }); } public override void DidReceiveMemoryWarning() { base.DidReceiveMemoryWarning(); // Release any cached data, images, etc that aren't in use. } } }

iOSでライブラリを使用する

MainActivity.csを変更します次のコードに一致するiOSプロジェクトのファイル:

セキュリティコードでハッキングされたクレジットカード

(プロジェクトの正しい名前空間を使用してください)

using Android.App; using Android.Widget; using Android.OS; namespace testshared.Droid { [Activity(Label = 'testshared', MainLauncher = true, Icon = '@mipmap/icon')] public class MainActivity : Activity { RestClient rest = new RestClient(); protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the 'main' layout resource SetContentView(Resource.Layout.Main); // Get our button from the layout resource, // and attach an event to it Button button = FindViewById(Resource.Id.myButton); button.Click += delegate { button.Text = $'Loading...'; rest.FetchPage('http://www.google.com', doneCallback); }; } public void doneCallback(string content) { RunOnUiThread(() => { Button button = FindViewById(Resource.Id.myButton); button.Text = 'All done'; System.Diagnostics.Debug.WriteLine(content); }); } } }

iOSアプリを実行し、ボタンをクリックして、VisualStudioの[アプリケーション出力]タブを確認します。次のように表示されます。

[アプリケーション出力]タブ。

Androidでライブラリを使用する

Androidアプリで必要な変更は、iOSで必要な変更と非常によく似ています。 RunOnUiThreadを変更します以下に一致するファイル:

(プロジェクトの正しい名前空間を使用してください)

InvokeOnMainThread

注意: AndroidとiOSの両方のプラットフォームのシステムアーキテクチャでは、すべてのUI操作がメインアプリケーションスレッドで行われる必要があります。つまり、UI要素への変更は、メインスレッド内からも行う必要があります。ここでdoneCallback()および

|_+_|
HTTPリクエストは別のスレッドで実行されたため
メインスレッドの外部で呼び出された場合、ボタンにアクセスしてラベルを変更できるようにするには、これらのメソッドを使用する必要がありました。

C#開発者はAndroidとiOSを引き継いでいます

Visual Studio for Macにはまだ解決すべき問題がいくつかありますが、最初に見てから、その将来に非常に興奮しています。モバイルアプリケーションの必要性は日々高まっており、MicrosoftはVisual Studio for Macを使用して、 優れたC#開発者 この必要性を満たすために。

SwiftとJava / JVMは、モバイルデバイス開発環境をめぐる戦いにおいて、新しく、非常に強力な競争相手になりました。 関連: .NETCore-ワイルドでオープンソース化。マイクロソフト、どうしてそんなに時間がかかったの? 関連: Dart言語:JavaとC#が十分にシャープでない場合

アジャイルコーチは何をし、どうすれば1つになることができますか?

アジャイル

アジャイルコーチは何をし、どうすれば1つになることができますか?
サウンドロジックと単調AIモデル

サウンドロジックと単調AIモデル

データサイエンスとデータベース

人気の投稿
ラベルなしデータを使用した半教師あり画像分類
ラベルなしデータを使用した半教師あり画像分類
効果的なランディングページをデザインする方法
効果的なランディングページをデザインする方法
コミュニケーションディレクター
コミュニケーションディレクター
3Dグラフィックス:WebGLチュートリアル
3Dグラフィックス:WebGLチュートリアル
インサイドセールスエグゼクティブ-東部地域
インサイドセールスエグゼクティブ-東部地域
 
デジタル遊牧民のための人間工学:自殺せずに道路で働く
デジタル遊牧民のための人間工学:自殺せずに道路で働く
Webレイアウトのベストプラクティス:分析された12の時代を超越したUIパターン
Webレイアウトのベストプラクティス:分析された12の時代を超越したUIパターン
生産的な行動の誘発:仕事の動機付けのヒント
生産的な行動の誘発:仕事の動機付けのヒント
HorusLPを使用した最適化アルゴリズムの設計
HorusLPを使用した最適化アルゴリズムの設計
WebVRとブラウザエッジコンピューティング革命
WebVRとブラウザエッジコンピューティング革命
人気の投稿
  • Python3にアップグレードする方法
  • 盗むのが上手になる方法
  • 最高のC ++コース
  • 最高のJavaScriptリソースのベストプラクティスパターン
  • グラフィックデザインの原則は何ですか
カテゴリー
Uxデザイン データサイエンスとデータベース アジャイル ブランドデザイン 製品ライフサイクル 計画と予測 投資家と資金調達 プロジェクト管理 ライフスタイル Uiデザイン

© 2021 | 全著作権所有

apeescape2.com