Xamarin Studioを用いたクロスプラットフォーム開発入門iOS編

Similar documents
Visual Studio を用いたクロスプラットフォーム開発入門 Android 編

C#の基本

Prog2_12th

Prog2_15th

Prog2_4th

Microsoft PowerPoint - Tutorial_6.ppt

NPCA部誌2018

Microsoft Word - VB.doc

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

2 / 26 平成 26 年 4 月 11 日 ( 金 ) 午後 1 時 9 分 Visual C Express の使用法 ( 東海大学理学部物理学科 ) 無償で利用できる開発環境 (Windows XP 以降 ) Visual Studio 2010 Express

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

IME( 日本語入力システム ) の確認 変更方法 / プロパティ確認の手順 ************************************************************************************ ドキュメント目次 IME( 日本語入力システム )

Prog2_5th

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

TestDesign for Web

目次 はじめに... 3 システムの必要条件... 3 サンプルアプリケーションの作成... 3 手順 手順 手順 手順 手順 手順 終わりに... 23

ファイルを直接編集する画面を切り替えることができる. 図 3 標準のレイアウトを削除する (2) グラフィカル レイアウト画面で LinearLayout(Vertical) を追加するパレットウィンドウの レイアウト の中にある LinearLayout(Vertical) をドラッグして, 編集

Windows 10 IoT Core MVA 2015 August Windows 10 IoT Core ハンズオントレーニング Building and running Github MS IoT Samples on Windows 10 IoT Core 3 章 UWP アプリの開発 L

Microsoft Word -

Prog2_2nd

目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発... 7 手順 1. アプリケーションの作成... 7 手順 2. データソースの作成と代入... 7 手順 3. テンプレートの作成 手順 4. レポートビューアの追加

PowerPoint プレゼンテーション

Prog2_2nd

クイックセットアップ for モバイル(iOS/Android)

Microsoft Word - macマニュアル【 】.doc

クイックセットアップ for モバイル(iOS/Android)

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

Prog2_10th

SharpShooter Reports.WPF 基本的な使い方 Last modified on: November 15, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されます

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

新規コンポーネントの作成方法

マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL:

目次 第 1 章はじめに 取扱いについて 記載内容について... 6 第 2 章基本操作 Excel Online を開く ファイル ( ブック ) を作成する ファイル ( ブック ) を開く..

目次 1. ログイン ログアウト デスクトップ ( 例 :Word Excel 起動中 ) Dock( 例 :Word Excel 起動中 ) Finder ウィンドウ メニューバー ( 例 :Word 起動中 )...

Prog2_10th

Design with themes — Part 1: The Basics

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

PDF Convertor for mac スタートアップガイド

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

Prog2_6th

目次 はじめに ツールのインストール ソフトウェアを起動する 画像ファイルの選択... 7 位置の調整... 8 背景色の設定 進捗バーの設定 パスワード設定 ユーザー情報の設定 設定

MAPインストーラー起動時のエラーメッセージへの対処方法

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows 日本語版 : インストール・ガイド

BizBrowser SmartDevice Android開発用スタートアップガイド

Microsoft Word - バーチャルクラス(Blackboard)ログイン方法ガイド.docx

AppsWF ワークフロー設定ガイド Ver.1.1 株式会社オプロ

ランタイム版 Pro 版共通 症例登録システム 2018/12/11 Q & A 目次 1. 起動時のエラー... 2 Q11. " ファイル jsgoe_data3.fmp12 を開くことができません" と表示されます (Windows) 2 Q12. ショートカットから起動できません (Wind

「Microsoft

Visual Studio 2017 RC インストール & ファーストステップガイド 2016 年 11 月 16 日 (V1.0)

PowerPoint プレゼンテーション

RAYOUT

Maser - User Operation Manual

スライド 1

WPF アプリケーションの 多言語切替

目次. ご利用上の注意. アプリをインストールする. アプリを起動する. アプリの初期設定を行う. アプリのログインパスワードを変更する 6. アプリのメニューを操作する 7. ステータスを送信する 8. 定期位置通知間隔を変更する 9. 随時検索をする 0. メッセージ連絡をする. メッセージの連

インテル(R) Visual Fortran コンパイラ 10.0

やってみようINFINITY-写真管理 編-

PowerPoint プレゼンテーション

目次 第一章インストールと製品登録 1.1 インストール & ライセンス認証 3 第二章製品活用 - Leawo itransfer 3.1 コンピュータのファイルを iphone に転送 iphone のファイルをコンピュータにバックアップ ファイルを itunes から

Windows10 における Ac6 System Workbench for STM32 のダウンロードとインストール V /06/01 Windows10 の PC で Ac6 System Workbench for STM32 のダウンロードとインストールの方法について説明しま

1. 基本操作 メールを使用するためにサインインします (1) サインインして利用する 1 ブラウザ (InternetExploler など ) を開きます 2 以下の URL へアクセスします ( 情報メディアセンターのトップページからも移動で

実習を行う上での心構えについて

Prog2_6th

1.WebClass( ウェブクラス ) とは WebClass を利用される前に 学生の立場で WebClass を利用してみましょう... 4 レポートを提出する 先生の立場で WebClass を利用してみましょう... 9 提出状況を確認する..

Biz/Designer Vインストールガイド

図 1:[ バージョン情報 ] ウィンドウ 図 1 からわかるとおり 本稿は Visual Studio Community 2017 Ver をもとに執筆していま す 3. 本書相当のテンプレートの作成 Ver.15.7では 本書で利 しているテンプレートはなくなってしまいましたが

目次 1. AOS ユーザー登録サイト AOS ユーザー登録 AOS ライセンスキー登録 ios 版アプリ インストール 起動と新規登録 初期設定とバックアップ Andro

C#の基本2 ~プログラムの制御構造~

Chart3D for WPF/Silverlight

Microsoft PowerPoint - Teams QS.pptx

印刷アプリケーションマニュアル

Consuming a simple Web Service

1. インストール方法 STEP 1 ダウンロードしたファイルを任意の場所に解凍します Windows 標準の機能を用いて解凍する場合は ファイルを選択して 右クリックメニューから [ すべて展開 ] を選択し 表示されたメッセージに従って解凍します STEP 2 解凍されたフォルダにある Setu

「Microsoft

Blue Asterisk template

更新履歴 No 更新箇所版数日付 1 第一版作成 /12/28 2 一部画像差し替え 誤字修正 /02/09 2

Android Layout SDK プログラミング マニュアル

Microsoft Word - プリンター登録_Windows XP Professional.doc

Visual Studio Do-It-Yourself 第 9 回ユーザーコントロール 第 6 回のリソースから第 8 回のテンプレートで さまざまな方法でコントロールをカスタマズできるこ とを学びました 今回のテーマであるユーザーコントロールは 既存の一つのコントロールをカスタマ ズするのではな

as_viewer_manual_new_version

Prog2_2nd

Prog2_6th

目次 1.1. AOS ユーザー登録 AOS ライセンスキー登録 ios 版アプリ インストール 起動と新規登録 初期設定とバックアップ Android 版アプリ インストール...

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows : インストール・ガイド

FutureWeb3 Web Presence Builderマニュアル

1. インストール方法 STEP 1 ダウンロードしたファイルを任意の場所に解凍します Windows 標準の機能を用いて解凍する場合は ファイルを選択して 右クリックメニューから [ すべて展開 ] を選択し 表示されたメッセージに従って解凍します STEP 2 解凍されたフォルダにある Setu

スライド 1

PowerPoint プレゼンテーション

MultiWriter 5650F 活用マニュアル

AzureとXamarinでスマホアプリを作ってみる_

CodeGear Developer Camp

DrugstarPrime アップデート手順書 DrugstarPrime アップデート手順書 DrugstarPrime のアップデート手順をご案内いたします 本書は DrugstarPrime2 DrugstarPrime に共通の手順書です 手順内の画面は Prime2 を使用しています [

(Microsoft Word - VisionPro\203C\203\223\203X\203g\203\214\201[\203V\203\207\203\223\203}\203j\203\205\203A\203\ doc)

Windowsユーザでも 手軽に作れるiPhoneアプリ

Format text with styles

Windows Phone アプリケーション開発 写真加工アプリケーションの作成 日本マイクロソフト株式会社 デベロッパー & プラットフォーム統括本部監修

Agileイベント・フレームワークとOracle BPELを使用したPLMワークフローの拡張

Eclipse 操作方法 (Servlet/JSP 入門補助テキスト)

KDDI ペーパーレスFAXサービス

(Microsoft Word - Word\216\300\217K\212\356\221b1.doc)

Transcription:

Xamarin Studio を用いたクロスプ ラットフォーム開発入門 ios 編 Japan Xamarin User Group

演習の目標 Xamarin と Xamarin Studio を使用して ios アプリケーションを Xamarin ネイティブの手法と Xamarin.Forms の手法を用いて開発する方法について学習します 演習の概要 開発に必要な Mac OS X ios SDK Xcode Xamarin の設定を確認 Xamarin.iOS プロジェクトの作成 開発 ios Simulator へのビルド デプロイ ios Simulator でのデバッグ Xamarin.Forms (Portable) プロジェクトの作成 開発 ios へのビルド デプロイ デバッグ 予想所要時間 Xamarin ネイティブの手法 Xamarin.Forms の手法合わせて 120 分 2

本ガイドでは Xamarin Studio を使用した Xamarin.iOS アプリケーションの開発の基本的な部分を紹介します Xamarin.iOS アプリケーションのビルドと配布に必要なツール コンセプト ステップも紹介します 本ガイドでは ユーザーが入力した英数字の電話番号を数字の電話番号に変換し その番号に電話するアプリケーションを作成します 完成したアプリケーションは 以下のような画面になります 3

1 開発に必要な Mac OS X ios SDK Xcode Xamarin の設定を 確認 1.1 Xamarin を使用して ios アプリケーションを開発するには以下が必要です Mac OS X Yosemite(10.10) 以上の Mac OS X 最新の Xcode 最新の ios SDK 最新の Xamarin Mac OS X Xcode ios SDK が最新になっていることを確認したら Mac に Xamarin.iOS をインストール (http://www.xlsoft.com/jp/products/xamarin/xamarin_ios_mac_installation.html) を参考に Xamarin をインストールします 1.2 ios Simulator または実機の準備 作成したアプリをデプロイする ios Simulator または実機を用意します 実機へのデプロイは Apple Developer Program(https://developer.apple.com/programs/jp/) に加入するか Free Provisioning を利用する方法があります Xamarin での Free Provisioning の使用方法は Xcode 7 と Xamarin Studio Starter で1 円も払わずに自作 ios アプリを実機確認する (http://ytabuchi.hatenablog.com/entry/2015/09/18/191258) を参考にしてください 4

2 Hello.iOS 入門 2.1 [ アプリケーション ] フォルダまたは [Spotlight] から Xamarin Studio を起動して 起動 画面を開きます 2.2 左上の [New Solution...] をクリックして 新規に Xamarin.iOS ソリューションを作成 します 5

2.3 [ 新しいプロジェクト ] ダイアログから [ios > App > Single View App] のテンプレー トを選択し [Next] をクリックします 2.4 [App Name] に Phoneword_iOS と入力して [Next] をクリックします 6

2.5 [Version Control] [Xamarin Insights] [Xamarin Test Cloud] のチェックが外れてい ることを確認して [ 作成 ] をクリックします 2.6 [ ソリューション ] パッドの Main.storyboard をダブルクリックしてファイルを開 きます 7

2.7 [Toolbox]( 画面右側 ) にある検索バーで label と入力し デザイン画面 ( 画面中 央 ) に [Label] をドラッグします 2.8 [Dragging Controls] ( コントロールの囲いの ) のハンドルをつかみ ラベルを広げ ます 2.9 デザイン画面で選択した [Label] で [ プロパティ ] パッドを使用して [Label] の [Text] プロパティを Enter a Phoneword: に変更します 8

2.10 次に [Toolbox] で text field を検索し デザイン画面で [Toolbox] から [Text Field] をドラッグし [Label] の下に [Text Field] を配置します [Text Field] と [Label] の幅が同 じになるように調整します 2.11 デザイン画面で選択した [Text Field] で [ プロパティ ] パッドの [Widget] の [Identity] セ クションの [Name] プロパティを PhoneNumberText に変更し [lb Inspected Text] プロパティを 1-855-XAMARIN に変更します 2.12 次に [Toolbox] からデザイン画面に [Button] をドラッグし [Text Field] の下に配置し ます [Button] の幅も [Text Field] と [Label] と同じ幅になるように調整します 9

2.13 デザイン画面で選択した [Button] で [ プロパティ ] パッドの [Identity] セクションの [Name] プロパティを TranslateButton に変更します [Title] プロパティを Translate に変更します 2.14 上記 2 つのステップを繰り返し デザイン画面の [Toolbox] から [Button] をドラッグ し 最初の [Button] の下に配置します その [Button] の幅を最初の [Button] と同じ幅 になるように調整します 10

2.15 デザイン画面で選択した 2 番目の [Button] で [ プロパティ ] パッドの [Identity] セクシ ョンにある [Name] プロパティを CallButton に変更します [Title] プロパティを Call に変更します 2.16 [ ファイル > 保存 ] または [ + S] ボタンを押して作業内容を保存します 2.17 デザイン画面の左上の [Size Class] ボタンから [Compact Width > Any Height] をタップ します 11

2.18 [Compact Width > Any Height] は iphone 5/6 などで使用されるレイアウトですが 作成したオブジェクトが隠れてしまっているのが分かります 2.19 [Any > Any] のレイアウトに戻し [Constraints]( 制約 ) を追加することですべてのレイアウトに対応できるようにします [Label] を選択して再度クリックすると ハンドラーが [ ] から [ ] や [ 凸 ] などに変わります これらのハンドラーを操作して 制約を作成します 2.20 [Label] の上部のハンドラーをドラッグして [View] の上部でドロップします 12

2.21 左側のハンドラーをドラッグして [View] の左端でドロップします [ 制約 ] を指定で きる個所になると 青い点線が表示されるので活用してください 2.22 [Label] と [EditText] など オブジェクト同士の距離も [ 制約 ] を指定します 13

2.23 同様に すべてのオブジェクトに [ 制約 ] を指定してください すべて指定すると [Compact Width > Any Height] を表示しても各オブジェクトが画面内に収まるのが 分かります 適切に設定すると [ 制約 ] が青く表示されます 2.24 次に英数字から数字に電話番号を変換するコードを追加します [ ソリューション ] パッドの [Phoneword_iOS] プロジェクトを右クリックして [ 追加 > 新しいファイル ] を選択または [ + N] ボタンを押します 14

2.25 [ 新しいファイル ] ダイアログで [General > 空のクラス ] を選択し 新しいファイル に PhoneTranslator と名前を付けます 2.26 ここで 新しい C# クラスを作成します テンプレートのすべてのコードを削除し 以下のコードに置き換えます using System.Text; using System; namespace Core public static class PhonewordTranslator public static string ToNumber(string raw) if (string.isnullorwhitespace(raw)) return ""; else raw = raw.toupperinvariant(); var newnumber = new StringBuilder(); foreach (var c in raw) if (" -0123456789".Contains(c)) newnumber.append(c); else var result = TranslateToNumber(c); if (result!= null) newnumber.append(result); // 数字以外の文字はスキップします 15

return newnumber.tostring(); static bool Contains (this string keystring, char c) return keystring.indexof(c) >= 0; static int? TranslateToNumber(char c) if ("ABC".Contains(c)) return 2; else if ("DEF".Contains(c)) return 3; else if ("GHI".Contains(c)) return 4; else if ("JKL".Contains(c)) return 5; else if ("MNO".Contains(c)) return 6; else if ("PQRS".Contains(c)) return 7; else if ("TUV".Contains(c)) return 8; else if ("WXYZ".Contains(c)) return 9; return null; [PhoneTranslator.cs] ファイルを保存して閉じます 16

2.27 次にコードを追加して [ViewController] クラスのユーザーインターフェースを操作 します [ ソリューション ] パッドの [ViewController.cs] をダブルクリックして 開き ます 2.28 [TranslateButton] を操作します [ViewController] クラスで [ViewDidLoad] メソッド を見つけ ボタンのコードを追加します 以下が [ViewDidLoad()] の呼び出しで す public override void ViewDidLoad () base.viewdidload (); // code goes here 2.29 [TranslateButton] と名前を付けた最初のボタンをユーザーが押した際に応答するコー ドを追加します 以下のコードを [ViewDidLoad] の最後に追加します string translatednumber = ""; TranslateButton.TouchUpInside += (object sender, EventArgs e) => // PhoneTranslator.cs を使用してテキストから電話番号に変換します translatednumber = Core.PhonewordTranslator.ToNumber(PhoneNumberText.Text); // TextField がタップされたらキーボードを Dismiss します PhoneNumberText.ResignFirstResponder (); if (translatednumber == "") CallButton.SetTitle ("Call", UIControlState.Normal); CallButton.Enabled = false; else CallButton.SetTitle ("Call " + translatednumber, UIControlState.Normal); CallButton.Enabled = true; 17

; 2.30 次に [CallButton] と名前を付けた二番目のボタンをユーザーが押した際に応答する コードを追加します [TranslateButton] のコードの下に以下のコードを追加します CallButton.TouchUpInside += (object sender, EventArgs e) => ; var url = new NSUrl ("tel:" + translatednumber); // 標準の電話アプリを呼び出すために tel: のプリフィックスで URL ハンドラーを使用します // できない場合は AlertView を呼び出します if (!UIApplication.SharedApplication.OpenUrl (url)) var av = new UIAlertView ("Not supported", av.show (); "Scheme 'tel:' is not supported on this device", null, "OK", null); [NSUrl] クラスが存在しないというエラーが表示されるので [NSUrl] 上で右クリックし [ 解決 > using Foundation;] を選択して [using] を追加します 2.31 作業を保存し [ ビルド > すべてビルド ] を選択または [ + B] ボタンを押して アプリケーションをビルドします [AppIcons.appiconset] のエラーが表示される場合は エラーメッセージをダブルクリックして再度ビルドすると表示されなくなります アプリケーションをコンパイルすると IDE の上位に [ ビルド成功 ] とメッセージが表示されます エラーが発生する場合 前のステップに戻って アプリケーションのビルドが成功するま で 不正な箇所を修正します 18

2.32 これで アプリケーションが動作するので 最後の仕上げを加えていきましょう! [Info.plist] ファイルのアプリケーション名とアイコンを編集します [ ソリューショ ン ] パッドの [Info.plist] をダブルクリックして開きます 2.33 [ios Application Target] セクションで [Application Name] を Phoneword に変更 します 19

2.34 アプリケーションのアイコンと起動イメージを設定するために まずアイコンセット ( https://github.com/ytabuchi/xamarinhol/blob/master/xamarinappicons.zip ) をダウンロードします 2.35 アプリケーションのアイコンは [Contents.json] ファイルで指定します [ ソリューション ] パッドから [Contents.json] ファイルを見つけ ダブルクリックして開きます 2.36 ここでは ios 7 以上に必要なアイコンを追加していきます 20

2.37 すべてのファイルを登録すると次のようになります 2.38 次に [LaunchScreen] の設定を行います [LaunchScreen.xib] ファイルをダブルクリッ クして開きます 21

2.39 コントロールはすべて削除し [Toolbox] から Image を入力して検索し [ImageView] を配置します 2.40 [ プロパティ ] パッドの [Layout] タブの [View] セクションの [Width] と [Height] を [80/80] に変更し View の中央に配置します 22

2.41 中央に [Image View] の位置を固定するため [Image View] の中央の [ ] をドラッグし て縦横に [ 制約 ] を作成します 2.42 [Image View] の画像を指定するため [Resources] フォルダに [Icon-80.png] をコピー します [Resources] フォルダを右クリックし [ 追加 > ファイルを追加 ] を選択しま す 2.43 [Image View] を選択し [ プロパティ ] パッドの [Widget] タブの [Image View] セクショ ンの [Image] で追加した [Icon-80.png] を選択します 23

2.44 [View] の背景を同じ色にするため [View] を選択し [ プロパティ ] パッドの [Widget] タブの [View] セクションの [Background] をクリックし [Other] で [ カラーパネル ] を表 示し [Hex Color #] に 47C0DE を指定します 2.45 最後に ios Simulator または実機でアプリケーションをテストします IDE の左上 で 最初のドロップダウンから [Debug] を選択し 2 番目のドロップダウンから [iphone 6s ios 9.2] を選択し Start ボタン [ ] を押します 24

2.46 これで ios Simulator または実機でアプリケーションが起動します ( 画面は Simulator) 2.47 ios Simulator では電話の発信をサポートしていません そのため [Call] ボタンをクリ ックした際にアラートダイアログを表示します 初めての Xamarin.iOS アプリケーションの完成です! 次のステップ Hello, ios Multiscreen Quickstart で このガイドで習得したツールとスキルをさらに試しましょう 25

3 Hello, ios Multiscreen Quickstart このセクションでは Phoneword アプリケーションにもう一つ画面を追加し その画面にこのアプリの通話履歴を残す方法を説明します 本ガイドで完成したアプリケーションでは 以下のスクリーンショットのように 2 番目の画面に通話履歴を表示します 3.1 Xamarin Studio 上で Phoneword プロジェクトを開きます 26

3.2 まずはユーザーインターフェースの編集から始めます [ ソリューション ] パッドか ら [Main.storyboard] ファイルを開きます 3.3 ツールボックスから デザイン画面に Navigation Controller をドラッグします 27

3.4 [Sourceless Segue](Phoneword 画面の左にある灰色の矢印 ) を [Phoneword] 画面か ら [Navigation Controller] へドラッグし アプリケーションのスタートポイントを変 更します 3.5 [Root View Controller] 下部の黒いバーをクリックして選択し [Delete] キーを押して デザイン画面から削除します その後 [Navigation Controller] を [Phoneword] 画面 の横に移動させます 28

3.6 [Navigation Controller] の [Root View Controller] として [ViewController] をセットします [Ctrl] キーを押し [Navigation Controller] 内部をクリックします 青い線が表示されるので [Ctrl] キーを押したまま [Navigation Controller] から [Phoneword] 画面までドラッグします 3.7 ポップオーバーから [Relationship] の [Root] をクリックします 29

3.8 これで [ViewController] が [Navigation Controller] の [Root View Controller] になりまし た 上記のようにオブジェクトが隠れてしまう場合は [ 制約 ] が [Navigation Controller] に合わせて 下がってきているため [Update frames based on constraints] ボタンでオブジェクトの場所を 自動調整します 30

3.9 [Phoneword] 画面のタイトルバーをダブルクリックし [Title] の文字列を Phoneword に変更します 3.10 ツールボックスから [Button] をドラッグし [Call] ボタンの下に配置します ハンド ルをドラッグして 新しいボタンを [Call] ボタンと同じ幅に合わせます 31

3.11 [ プロパティ ] パッドで ボタンの名前を [CallHistoryButton] に変更し タイトルを Call History に変更します 32

3.12 [Call History] 画面を作成します [Toolbox] からデザイン画面に [Table View Controller] をドラッグします 3.13 [Table View Controller] の下の黒いバーをクリックして [Table View Controller] を選択 します [ プロパティ ] パッドで [Table View Controller] のクラスを CallHistoryController に変更し [Enter] キーを押します ios Designer は [CallHistoryController] と呼ばれるカスタムクラスを生成し Content View の オブジェクトを管理します [CallHistoryController.cs] ファイルがソリューションパッドに表 示されます 33

3.14 [CallHistoryController.cs] ファイルをダブルクリックして開き コンテンツを下記の コードに置き換えます using System; using Foundation; using UIKit; using System.Collections.Generic; namespace Phoneword_iOS public partial class CallHistoryController : UITableViewController public List<string> PhoneNumbers get; set; static NSString callhistorycellid = new NSString ("CallHistoryCell"); public CallHistoryController (IntPtr handle) : base (handle) TableView.RegisterClassForCellReuse (typeof(uitableviewcell), callhistorycellid); TableView.Source = new CallHistoryDataSource (this); PhoneNumbers = new List<string> (); class CallHistoryDataSource : UITableViewSource CallHistoryController controller; public CallHistoryDataSource (CallHistoryController controller) this.controller = controller; // テーブルの各セクションの行数を返します public override nint RowsInSection (UITableView tableview, nint section) return controller.phonenumbers.count; 34

します indexpath) // NSIndexPath の Row プロパティで指定された行のテーブルセルを返します // このメソッドは 表の各行を挿入するために複数回呼び出されます // このメソッドは自動的に画面外にスクロールした Cell を使用または必要に応じて新しいものを作成 public override UITableViewCell GetCell (UITableView tableview, NSIndexPath var cell = tableview.dequeuereusablecell (CallHistoryController.callHistoryCellId); int row = indexpath.row; cell.textlabel.text = controller.phonenumbers [row]; return cell; アプリケーションを保存し エラーがないかビルドを実行して確認します 3.15 [Phoneword] 画面と [Call History] 画面の切り替え (Segue) を作成します [Phoneword] 画面で [Call History] ボタンを選択し ボタンから [Call History] 画面に [Ctrl] を押しながらドラッグします 35

3.16 [Action Segue] のポップオーバーから [Show] を選択します 3.17 ios Designer が 2 つの画面間に [Segue] を追加します [Navigation Controller] を経由 しているので [Call History Controller] の画面上部に [Navigation Bar] も追加されま す 36

3.18 画面下の黒いバーを選択して [Table View Controller] にタイトルを追加します [ プロ パティ ] パッドの [View Controller] の [Title] を Call History に変更します 3.19 もしアプリケーションを今実行した場合 [Call History] ボタンで [Call History] 画面を表示できますが 電話番号の履歴を保持するコードが含まれていないため [Table View] には何も表示されません これから [ViewController.cs] にその機能を追加していきます まずは 電話を掛けた番号を保存するコードが必要です 電話を掛けた [PhoneNumbers] を文字列のリストとして保存していきます リストをサポートするには [System.Collections.Generic] を [ViewController] の上位で using 宣言に追加します using System.Collections.Generic; 3.20 下記のコードを使って [ViewController] クラスを修正します [translatednumber] も [ViewDidLoad] メソッド内からクラス変数へ移動します 太字が修正分です namespace Phoneword_iOS public partial class ViewController : UIViewController // translatednumber を ViewDidLoad() から移動します 37

string translatednumber = ""; public List<string> PhoneNumbers get; set; public ViewController (IntPtr handle) : base (handle) // Call History 画面用に電話番号の List を初期化します PhoneNumbers = new List<string> (); // ViewDidLoad, etc... 3.21 [CollButton] のコードを編集して [PhoneNumbers.Add (translatednumber)] を呼ぶ ことで電話を掛けた番号を電話番号のリストに追加します コード全体は下記のよ うになります CallButton.TouchUpInside += (object sender, EventArgs e) => // 変換した電話番号を PhoneNumbers に追加します PhoneNumbers.Add (translatednumber); // 標準の電話アプリを呼び出すために tel: のプリフィックスで URL ハンドラーを使用します var url = new NSUrl ("tel:" + translatednumber); // できない場合は AlertView を呼び出します if (!UIApplication.SharedApplication.OpenUrl (url)) var alert = UIAlertController.Create ("Not supported", "Scheme 'tel:' is not supported on this device", UIAlertControllerStyle.Alert); alert.addaction (UIAlertAction.Create ("Ok", UIAlertActionStyle.Default, null)); ; PresentViewController (alert, true, null); 3.22 最後に 下記のメソッドを [ViewController] クラスに追加します 下記のコードを [ViewDidLoad] メソッドより下方に配置してください public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender) base.prepareforsegue(segue, sender); // set the View Controller that s powering the screen we re // transitioning to var callhistorycontoller = segue.destinationviewcontroller as CallHistoryController; //set the Table View Controller s list of phone numbers to the // list of dialed phone numbers if (callhistorycontoller!= null) callhistorycontoller.phonenumbers = PhoneNumbers; 38

プロジェクトを保存し アプリケーションをビルドしてエラーがないか確認します 3.23 Start ボタンを押して ios Simulator 上でアプリケーションを実行します おめでとうございます 複数画面を操作する最初の Xamarin.iOS アプリケーションが完成しました! 39

4 Xamarin.Forms Quickstart このセクションでは 先ほど Xamarin.iOS プロジェクトで作成した Phone Number アプリを Xamarin.Forms を使用して作成する方法を説明します アプリケーションの完成図は以下のようになります 4.1 Xamarin Studio を起動し [New Solution] をクリックして 新しいソリューション を作成します 40

4.2 [ 新しいプロジェクト ] 画面で [Cross-platform > App > Xamarin.Forms App] をクリ ックします 4.3 [App Name] に Phoneword と入力し [Shared Code] が [Use Portable Class Library] が選択されていることを確認し [Next] をクリックします 41

4.4 [Xamarin Insights] と [Xamarin Test Cloud] のチェックが外れていることを確認し [ 作成 ] をクリックします 4.5 [ ソリューション ] パッドで [Phoneword] プロジェクトを右クリックし [ 追加 > 新し いファイル ] をクリックします << 新しい項目 >> 42

4.6 [ 新しいファイル ] 画面から [Forms > Forms ContentPage Xaml] を選択し 名前を MainPage と付け [ 新規 ] ボタンをクリックします 4.7 [MainPage.xaml] ですべてのテンプレートコードを削除し 以下のコードで置き換え ます <?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:class="phoneword.mainpage"> <ContentPage.Padding> <OnPlatform x:typearguments="thickness" ios="20, 40, 20, 20" Android="20, 20, 20, 20" WinPhone="20, 20, 20, 20" /> </ContentPage.Padding> <ContentPage.Content> <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Orientation="Vertical" Spacing="15"> <Label Text="Enter a Phoneword:" /> <Entry x:name="phonenumbertext" Text="1-855-XAMARIN" /> <Button x:name="translatebutton" Text="Translate" Clicked="OnTranslate" /> <Button x:name="callbutton" Text="Call" IsEnabled="false" Clicked="OnCall" /> </StackLayout> </ContentPage.Content> </ContentPage> 43

[ +S] を押して変更を保存します 4.8 [ ソリューション ] パッドで [MainPage.xaml] を展開し [MainPage.xaml.cs] をダブルク リックして開きます 4.9 [MainPage.xaml.cs] ですべてのテンプレートコードを以下のコードで置き換えます [OnTranslate] と [OnCall ] メソッドはユーザーインターフェースの [Translate] と [Call] ボ タンがクリックされた時にそれぞれ実行されます using System; using System.Threading.Tasks; using Xamarin.Forms; namespace Phoneword public partial class MainPage : ContentPage string translatednumber; public MainPage () InitializeComponent (); void OnTranslate (object sender, EventArgs e) translatednumber = Core.PhonewordTranslator.ToNumber (phonenumbertext.text); if (!string.isnullorwhitespace (translatednumber)) callbutton.isenabled = true; callbutton.text = "Call " + translatednumber; else 44

callbutton.isenabled = false; callbutton.text = "Call"; async void OnCall (object sender, EventArgs e) if (await this.displayalert ( "Dial a Number", "Would you like to call " + translatednumber + "?", "Yes", "No")) var dialer = DependencyService.Get<IDialer> (); if (dialer!= null) dialer.dial (translatednumber); [ +S] を押して変更を保存します この時点でいくつか参照できないクラス メソッドがあ りますが 以降の手順で作成していきます 4.10 [ ソリューション ] パッドで [Phoneword.cs] をダブルクリックして開きます 4.11 [Phoneword.cs] ですべてのテンプレートコードを削除し 以下のコードで置き換え ます using System; using Xamarin.Forms; namespace Phoneword 45

public class App : Application public App () MainPage = new Phoneword.MainPage (); protected override void OnStart () // Handle when your app starts protected override void OnSleep () // Handle when your app sleeps protected override void OnResume () // Handle when your app resumes [ +S] を押して変更を保存します 4.12 [ ソリューション ] パッドで [Phoneword] プロジェクトを右クリックし [ 追加 > 新 しいファイル ] をクリックします 46

4.13 [ 新しいファイル ] 画面から [General > 空のクラス ] を選択し 名前を PhoneTranslator と付け [ 新規 ] ボタンをクリックします 4.14 [PhoneTranslator.cs] ですべてのテンプレートコードを削除し 以下のコードで置き 換えます using System.Text; namespace Core public static class PhonewordTranslator public static string ToNumber(string raw) if (string.isnullorwhitespace(raw)) return null; raw = raw.toupperinvariant(); var newnumber = new StringBuilder(); foreach (var c in raw) if (" -0123456789".Contains(c)) else newnumber.append(c); var result = TranslateToNumber(c); if (result!= null) newnumber.append(result); // Bad character? 47

else return null; return newnumber.tostring(); static bool Contains(this string keystring, char c) return keystring.indexof(c) >= 0; static readonly string[] digits = ; "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ" static int? TranslateToNumber(char c) for (int i = 0; i < digits.length; i++) if (digits[i].contains(c)) return 2 + i; return null; [ +S] を押して変更を保存します 4.15 [ ソリューション ] パッドで [Phoneword] ソリューションを右クリックし [ 追加 > 新しいファイル ] をクリックします 48

4.16 [ 新しいファイル ] 画面から [General > 空のインターフェイス ] を選択し 新しい ファイルの名前を IDialer と付け [ 新規 ] ボタンをクリックします 4.17 [IDialer.cs] ですべてのテンプレートコードを削除し 以下のコードで置き換えます [Dial] メソッドは変換された電話番号に電話を掛けるために各プラットフォームで実 装が必要です using System; namespace Phoneword public interface IDialer bool Dial(string number); [ +S] を押して変更を保存します アプリケーションの共通コードはこれで完了です 各プラットフォームで電話を掛けるコードは DependencyService として実装します なお 本ガイドでは ios の実装のみを行います 49

4.18 [ ソリューション ] パッドで ios プロジェクト [Phoneword.iOS] プロジェクトを右ク リックし [ 追加 > 新しいファイル ] をクリックします 4.19 [ 新しいファイル ] 画面から [General > 空のクラス ] を選択し 名前を PhoneDialer と付け [ 新規 ] ボタンをクリックします 4.20 [PhoneDialer.cs] ですべてのテンプレートコードを削除し 以下のコードで置き換え ます このコードは ios で変換された電話番号に電話を掛ける [Dial] メソッドを含ん でいます using Foundation; using Phoneword.iOS; using UIKit; using Xamarin.Forms; [assembly: Dependency(typeof(PhoneDialer))] namespace Phoneword.iOS public class PhoneDialer : IDialer public bool Dial(string number) return UIApplication.SharedApplication.OpenUrl ( new NSUrl ("tel:" + number)); 50

[ +S] を押して変更を保存します 4.21 [IDialer] が見つからないというエラーが表示されることがありますが Xamarin.Forms のプロジェクト [Phoneword] をビルドすると解決します エラーが表示された場合は 表示が消えるまで修正を行ってください 4.22 Xamarin Studio で [Phoneword.iOS] を右クリックして [ スタートアッププロジェク トとして設定 ] をクリックし [ ] ボタンをクリックし アプリケーションを起動し ます 51

52

5 Xamarin.Forms Multiscreen Quickstart このセクションでは 先ほど作成した Xamarin.Forms アプリケーションをマルチスクリーンに対応させま す 完成図は次のようになります 5.1 先ほどまで作業していた [Phoneword] プロジェクトを開きます 5.2 [ ソリューション ] パッドで [Phoneword] プロジェクトを右クリックし [ 追加 > 新し いファイル ] をクリックします 53

5.3 [ 新しいファイル ] 画面から [Forms > Forms ContentPage] を選択し 名前を CallHistoryPage と付け [ 新規 ] ボタンをクリックします 5.4 [CallHistoryPage.cs] ですべてのテンプレートコードを削除し 以下のコードで置き 換えます このコードはページのユーザーインターフェースの定義を宣言していま す using System; using Xamarin.Forms; namespace Phoneword public class CallHistoryPage : ContentPage public CallHistoryPage() Title = "Recent Call"; Content = new StackLayout ; VerticalOptions = LayoutOptions.FillAndExpand, Orientation = StackOrientation.Vertical, Children = new ListView ItemsSource = App.PhoneNumbers, 54

[ +S] を押して変更を保存します 今回 [CallHistoryPage] は XAML ではなく C# で作成しました XAML で記述したい場合は次 のコードとなります <?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:local="clr-namespace:phoneword;assembly=phoneword" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:class="phoneword.callhistorypage"> <ContentPage.Content> <StackLayout VerticalOptions="FillAndExpand" Orientation="Vertical"> <ListView ItemsSource="x:Static local:app.phonenumbers" /> </StackLayout> </ContentPage.Content> </ContentPage> 5.5 [ ソリューション ] パッドで [Phoneword.cs] をダブルクリックして開きます 5.6 [Phoneword.cs] で System.Collections.Generic を名前空間に追加し [PhoneNumbers] プロパティを宣言し App のコンストクラタで初期化します そして [MainPage] を [NavigationPage] で初期化するように変更します [PhoneNumbers] コレクションは変換された各電話番号を保存するために使用されます コードの一部は次のようになります 太字が変更部分です using System; using System.Collections.Generic; using Xamarin.Forms; namespace Phoneword public class App : Application public static List<string> PhoneNumbers get; set; public App ()......... PhoneNumbers = new List<string>(); MainPage = new NavigationPage(new Phoneword.MainPage()); 55

[ +S] を押して変更を保存します 5.7 [ ソリューション ] パッドで [MainPage.xaml] をダブルクリックして開きます 5.8 [MainPage.xaml] で [Button] コントロールを [StackLayout] の最後に追加します この ボタンは [CallHistoryPage] にナビゲートするために使用されます コードの一部は次 のようになります 太字が追加部分です <StackLayout VerticalOptions="FillAndExpand"... HorizontalOptions="FillAndExpand" Orientation="Vertical" Spacing="15"> <Button x:name="callbutton" Text="Call" IsEnabled="false" Clicked="OnCall" /> <Button x:name="callhistorybutton" Text="Call History" IsEnabled="false" Clicked="OnCallHistory" /> </StackLayout> [ +S] を押して変更を保存します 5.9 [ ソリューション ] パッドで [MainPage.xaml.cs] をダブルクリックして開きます 5.10 [MainPage.xaml.cs] で [OnCallHistory] イベントハンドラーメソッドを追加します 次に [OnCall] イベントハンドラーメソッドを変換した電話番号を [App.PhoneNumbers] コレクションに追加し [dialer] 変数が [null] ではない時に [CallHistoryButton] を [enable] にするように修正します (If 文の後の を忘れないようにしてください ) コードの一部は次のようになります using System; using Xamarin.Forms; namespace Phoneword public partial class MainPage : ContentPage... async void OnCall(object sender, EventArgs e) 56

If (await this.displayalert(... Var dialer = DependencyService.Get<IDialer>(); if (dialer!= null) App.PhoneNumbers.Add(translatedNumber); callhistorybutton.isenabled = true; dialer.dial (translatednumber); async void OnCallHistory(object sender, EventArgs e) await Navigation.PushAsync(new CallHistoryPage()); [ +S] を押して変更を保存します 5.11 Xamarin Studio のメニューから [ ビルド > 全てビルド ] をクリックします [ 出力 ] ウィンドウにビルド成功の表示がされます エラーが表示された場合は 表示が消えるまで修正を行ってください 5.12 Xamarin Studio で Phoneword.iOS を [ スタートアッププロジェクトとして設定 ] でス タートアッププロジェクトとし [ ] ボタンをクリックし アプリケーションを起 動します 57

おめでとうございます! これで本講習はすべて終了です Xamarin ネイティブで ios アプリの作成方法 Xamarin.Forms で ios アプリの作成方法を学びました UWP アプリのビルドには Windows が必要ですので 本ガイドでは扱っておりません Android も試してみたい方は http://www.xlsoft.com/jp/products/xamarin/support.html の 初めての Xamarin.Android アプリケーション開発 - 入門ガイド ( http://www.xlsoft.com/jp/products/xamarin/android_hello_world.html ) などを参考に是非トライしてみてください 58