MAUIでiOSアプリの開発!

MAUIを使ったiOSアプリの開発についての技術的なメモです。

Xamarin.Forms

iPadで入力した¥マーク

iPadで入力した文字が半角英数字記号かをチェックする為に、以下の正規表現を使っていました。 [ -~]+ シミュレータのテストでは特に問題ありませんでしたが、iPadの実機を使ってテストしていたろころ、¥だけがチェックに引っかかりました。 シミュレータで…

アプリ内のフォルダをバックアップ対象外にする方法

アプリ内のLibraryフォルダにDBファイルを作成・保持しているのですが、PCでバックアップした際にDBファイルがバックアップされるので、無理やり中身を確認することができてしまいます。 そこでLibraryフォルダをバックアップ対象外にしました。 参考 iOS/An…

メモリリークの対応

Instrumentsではメモリリークの原因・箇所の特定にはいたりませんでしたので、.NETでの一般的なメモリリーク観点で問題がないか、コードのチェックを行いました。 以下のサイトが参考になりました。 michaelscodingspot.com 概ねこの内容にそって修正するこ…

Xamarinでメモリリークの確認

アプリの連続試験でメモリリークの確認を行うため、XCodeのInstrumentsを使ってメモリ使用量の計測をおこないました。 マウスを自動操作するツールで連続して操作した結果、メモリが増加傾向にあることがわかりました。 リークの解析はXamarim.Profilerとい…

ListViewで表示したリストの一番下が切れた状態で表示される

ListViewを使ってリストを作成していますが、リスト表示時にアニメーションでパラパラと表示されるのが嫌だったので、以下の設定でアニメーションなしにしました。 ListView(リスト)を表示した際に、中のコントロールがぱらぱらと追加されていくアニメーシ…

デバッグ実行するときに、シミュレータが表示されない

新しいWindowsPCをmacにつなげてVisualStudioでデバッグ実行しようとしましたが、▶のところに通常であればシミュレータの機種・OSが表示されるのですが、「接続」となっており、実行できませんでした。 XCodeをアップデートしたり、VisualStudioをアップデー…

iOSのシミュレータでのピンチイン・ピンチアウト

シミュレーター上でピンチイン・ピンチアウトを行いたい場合は、Altキーを押しながらマウス操作することで可能です。 ただ、画面の中心を起点としての拡大縮小になります。 これを画面の好きな場所で行う事ができます。 シミュレータ画面の左下にある のとこ…

ListView(リスト)を表示した際に、中のコントロールがぱらぱらと追加されていくアニメーションをやめる

docs.microsoft.com

DB Browser for SQLiteからSQLで大量データのINSERTしたが遅い

大量データのテストを行うために、データの数だけINSERT文を作成してDB Browser for SQLiteからSQLを実行したのですがデータが入れ終わるまでにかなり時間がかかりました。 トランザクションを使えば早く終るらしいのですが、バルクインサートを試すと一瞬で…

アプリのアップデート時に、内部で保持するSQLiteのDBを作り直す方法

アプリでSQLiteを使用しており、dbファイルはLibraryフォルダ配下に格納しています。 アプリ起動時にdbファイルをチェックし、ファイルが存在しなければdbファイル作成とテーブルのCreate実行をしています。アプリ起動時にdbファイルが存在すれば、テーブル…

iPadの実機からログを取り出す方法

開発しているアプリは、デバッグ用ログをLibraryフォルダの中に出力しています。不具合の調査時などで実機からログを確認方法についてです。 こちらのサイトを参考にさせてもらいましたが、アプリ内で使用しているファイルを取り出すことができます。 【Swif…

Xamarin.Formsで開発をしてみた感想

私はもともとはC#の開発歴は長いですが、タブレット開発やMac使用はさっぱりでした。 まだ開発は途中ですが、3か月くらいがっつりXamarin.Formsで開発してみての感想です。 画面の開発はWindowsフォームでしか経験がなく、WPFもやったことがなかったので、X…

SQLiteでテーブルのデータを1行ずつ取得する

テーブルに大量のデータが入っているので、いっぺんに変数に取得するのではなく、カーソルを使って1行ずつとりだす方法です。 cursorなどで検索してもなかなかみつからなかったのですが、以下のようにできました。 var queryEnumerable = tran.CreateComman…

バイト配列のSJISデータをSJIS文字にエンコードしようとすると例外

ShiftJISのバイト配列のデータを受け取って、それをstringの変数にエンコードして格納する為に以下のコードを書きました。 var text = Encoding.GetEncoding("Shift_JIS").GetString(bytedata); すると例外が発生しました。 System.NotSupportedException: E…

Pickerコントロールでキーと文字のペアを使用する

Pickerコントロールで文字を選択したときに、プログラムで取得する値を文字ではなくキー値で取得した場合があります。 以下のようにすれば選択した文字に対応するキー値を取得できます。 Xamlファイル <Picker ・・・ ItemsSource="{Binding ListItemSource}" SelectedItem="{Binding SelectListItem}" ItemDisplayBinding="{Binding Name}" /> ※ItemDisplayBindingにて、表示する文字が格納されてい</picker>…

テキスト入力時に、先頭文字を勝手に大文字にならないようにする

Entryコントロールでテキスト入力を行えますが、ソフトウェアキーボードで入力すると最初の英字が大文字になります。 Xamlに以下のように記述することで、大文字にはなりません。 <Entry ・・・> <Entry.Keyboard> <Keyboard x:FactoryMethod="Create"> <x:Arguments> <KeyboardFlags>None</KeyboardFlags> </x:Arguments> </Keyboard> </Entry.Keyboard> </Entry> docs.microsoft.com

SQLiteを非同期で実装し、トランザクション処理中に非同期の処理を行うと、awaitで待機されない

SQLiteを非同期で実行できるよう「SQLiteAsyncConnection」を使った実装にし、トランザクションを開始して、サーバと非同期通信を行って取得したデータをテーブルに格納するようなプログラムを組みました。 しかし実行してみると、非同期通信が終わるのを待…

Commandパラメータの受け取り方

画面に複数のボタンを配置して、バインド先のメソッドは1つにして、CommandParameterの値で押下したボタンを判別する場合。 ネットで探してもなぜかすぐには見つからなかったので、メモしときます。 Xaml ※「DialogButtonType」は列挙体 <Button Command="{Binding Source={x:Reference Dialog}, Path=DialogOkCommand}" CommandParameter="{x:Static local:DialogButtonType.DialogOkButon}" ・・・ > </button>

各世代のMacでXamarinのビルドしたときにかかる時間

最近Mac mini(M1)を購入したので、Intelの前世代のMacとXamarinビルド時間を比較してみました。WindowsのVisualStudioで、クリーンした状態からビルドにかかった時間を計測しました。 iMac(2017) ・プロセッサ:2.3GHz デュアルコアIntel Core i5 ・メモ…

System.Text.JsonのJsonSerializer.Serializeで例外が発生

System.Text.JsonのJsonSerializer.Serializeを使ってクラスオブジェクトをJson文字列に変換しようとしましたが、以下の例外が発生しました。 System.TypeInitializationException: The type initializer for 'System.Text.Json.JsonSerializer' threw an ex…

WebAPIを使うiOSアプリで通信のテストをする場合(その2)

以前、Mac上のiOSシミュレータのアプリからWebAPI(https/自己証明書)通信を行うと例外が発生するので、httpでアクセスする方法について記載しましたが、回避する方法がありました。 iOS シミュレーターと Android エミュレーターからローカル Web サービ…

WebAPIを使うiOSアプリで通信のテストをする場合

サーバ(Windows)とWebAPIで通信を行うiOSアプリを開発しています。 テスト用にWindowsにASP.NETのWebAPI2のアプリを立ち上げて、Mac上のiOSシミュレータのアプリからWebAPI(https)通信を行ってみました。 結果、HttpClientのメソッドを呼び出したところ…

アプリ内に作成されるファイルが、Mac上のどのパスに格納されるか確認する方法

NLogを使ってファイルを出力したり、SQLiteのdbファイルをアプリ内に格納しています。これらファイルの内容を確認する為に、シミュレータ上に作成されるパスをMac上で調べる方法です。 今まではデバッグ実行中に 「System.Environment.GetFolderPath(System.…

Windows上のXamarinでデバッグ実行したときに、ブレイクポイントで処理が止まらない

WindowsのXamarinでデバッグ実行したときに、ブレイクポイントを設定しているのに処理が止まりませんでした。 調べたところ、以下の設定で止まるようになりました。 ・プロジェクトのプロパティを表示します ・「ビルド」から「詳細設定」ボタン押下し、「ビ…

Xamarin simulator 「デバイス XXX が見つかりませんでした」

Xamarinの環境をセットアップして、いざデバッグ実行すると、「デバイス XXX が見つかりませんでした」のエラーが表示されてシミュレータが立ち上がりませんでした。 調べてみると以下のサイトで色々やりとりがされてました。 xamarin.ios - Xamarin iOS sim…

デバッグ実行時に「アプリケーションを実行する前に有効なデバイスを選択してください。」

デバッグ実行の▶を押したときにこのメッセージが表示されて実行できませんでした。この時▶の右に表示されてたのは「Simulater」で、端末の名称は表示されてませんでした。 VisualStudioを再起動して、Macとペアリングしてしばらく待つと、▶の右の「Simulater…

新しいバージョンのXamarinプロジェクトを古いMacで実行しようとすると、シミュレータが起動できない

前回、最新のXamarinのバージョンで作成したプログラムを古いMac上のVisualStudio for macでビルドしましたが、今度はデバッグ時に起動するデバイスが「汎用シミュレーター」から変えられなくなりました。 以前も似たような現象がありましたが、 xamarinapp.…

新しいバージョンのXamarinプロジェクトを古いMacでビルドしようとすると、XCodeのバージョンがあわない

会社で作成したXamarinのサンプルプログラムを家の古いMacで動かそうと思い、プロジェクトのファイル一式をMacにコピーしてVisualStudio for macで開いたところ、XCodeのバージョンが古いとの警告が。 XCodeをアップデートしようと思いAppStoreを確認しまし…

シミュレータではアプリが正常に起動するが、実機では起動しない場合

iOSアプリをシミュレーター上では正常に起動・実行できますが、実機に入れて起動するとすぐに落ちる現象が発生しました。 こちらのサイト Xamarin を使えば iPhone 端末が要らない、ワケがない によると、・iOSシミュレーター上のアプリと、実機向けのアプリ…

シミュレータではアプリが正常に起動するが、実機では起動しない場合

iOSアプリをシミュレーター上では正常に起動・実行できますが、実機に入れて起動するとすぐに落ちる現象が発生しました。 こちらのサイト Xamarin を使えば iPhone 端末が要らない、ワケがない によると、・iOSシミュレーター上のアプリと、実機向けのアプリ…