2026年4月29日水曜日

パッケージが既存のパッケージと競合するため、アプリをインストールできませんでした。

 みなさん、こんにちは。


さて、先日Androidアプリの開発をしたって話を投稿いたしましたが、実は問題が発生して結構ドはまりしてしまったので、備忘録を兼ねて投稿いたします。


個人使用のアプリなのでapkファイルにて作成して自端末にインストールしているのですが、何故か上書きインストールが出来ません。バージョンをアップする度にデータをバックアップしてアンインストール、そして新規でインストール、最後にデータのレストア作業。

たびたびあると結構ストレスです。


上書きインストールをすると以下の流れで失敗します。


このアプリを更新しますか? ←更新を選択

インストールをしています。

アプリのスキャンをおすすめします。 ←アプリをスキャンを選択

スキャンしています...

このアプリは安全です。 ←インストールを選択

パッケージが既存のパッケージと競合するため、アプリをインストールできませんでした。


何故「パッケージが既存のパッケージと競合する」のだろうか?

ネットで検索してもコレはという解決策にたどり着きません。


落ち着いて Visual Studio 2026 のアーカイブマネージャーの挙動を観察してみます。


すると「署名アルゴリズムが正しく検出されなかったため、規定値(RSA)に戻されました。」というメッセージが表示されています。

毎回署名キーを聞いてくるのでそれがデフォルトの動きかと思っていましたが、上記メッセージから考えるにデフォルトの動作ではないようです。


まずは複数ある署名IDがいけないのかも知れない。

間違わないよう慎重に署名IDを選択しているので複数あっても問題ないと思うが、念のため一つに統一する。


次に(多分こっちが本命)前バージョンで作成したapkファイルを削除してから、新バージョンのapkファイルを発行するようにする。

Do you want to replace it?

と聞いてくるし、発行後のタイムスタンプも新しくなっているので問題ないと思っていたが、そのまま前バージョンのapkファイルに上書きをしていたのがいけなかったようです。


上記2点を実施したところ「署名アルゴリズムが正しく検出されなかったため、規定値(RSA)に戻されました。」のメッセージも消え、都度署名キーを聞かれることもなくなりました。


もしろん上書きインストールも出来るようになりました。


おそらく一連のバージョンアップ作業のどこかで違う署名キーを使用してしまっていたのかも知れません。

新バージョンのapkファイルを発行時に以前のバージョンのapkファイルがあると、以前のバージョンの情報と置き換わって発行されているのかも知れません(推測)


何はともあれ無事上書きインストール出来るようになってヤレヤレです。



ではでは~☆ミ

2026年4月14日火曜日

MAUIとmvvm、そしてGoogleのGemini

 みなさん、こんにちは。


最終投稿から8年もたってしまいました。

時がたつのは早いものですね。

8年間ぼーと過ごしたような気もしますし忙しく過ごしたような気もするし不思議な感覚です。


さて久しぶりにプログラムを書いたので今回はその件について投稿したいと思います。


コロナやなんだで世の中がだいぶ世知辛くなってきた2020年の夏、会社を自主退社いたしました。

せっかくの自由な時間がまとまって出来たので暫くのんびりと過ごしたいと考えていたのですが、やはり手元の資金が何時までもつか心配です。

何時までのんびり出来て何時頃から就職活動をすべきか、通帳の残高を確認しながら生活しなければなりません。

そこで手元資金の遣り繰りをExcelのVBAで1年先まで集計するようにし、再就職後もつい最近まで使っていたのですが、なんだか最近はPCを起動するのが面倒に感じるようになってきました。

出来れば手軽にスマホのアプリで行えればと思い、色々インストールして試してみましたが思ったようなアプリが見つかりません。(銀行やカードが自動連動するのは便利だけどねぇ)

じゃぁ今使っているExcelのVBAをスマホ用に書き直して使ってみるかぁ。ってのが開発の発端です。


さて、そうはいってもスマホのアプリなんて久しく弄ってないのでネットで最近の動向を調べてみます。

なんと私の中で最新技術だったXamarinは既にサポートが終了になっている!

ぼーと過ごしていても、世の中って動いているんだなぁ。

んで色々調べて落ち着いたのがMaui+mvvm。

ここいらが取り敢えず無難そうです。

Microsoft Visual Studio 2026 をダウンロードして準備を整えます。


起動時のメイン画面をデザインしてみます。


元々使っていたExcelのフォームから画面をデザインしたのですが、結構大変でした。

なんとか手抜きが出来ないかと考え、別ページを最近流行りのGoogleのGeminiにxamlのコード作成を丸投げしてみます。出来上がったのが以下です。

なんかカラフルでモダンな感じがしますね。

Geminiすげぇ!!

この調子で各ページのデザインとViewModelをGeminiに丸投げして作成していきます。

そこそこ作成が進んだ時点でハタを気がつきました。

既にお気づきの方もいるかとは思うのですが、微妙に作成するページのテイストが違っています。

前述のページだとアイコンを使うページやカードタイプのフラットなイメージのページや、各ページ毎に違うテイストでデザインを作成しています。

またViewModelも同じロジックの処理を微妙に違う命名で別々に作成したり、データベース関連はDatabaseHelper.csに纏めて記述してあるからソコを使用するよう指示しても暫くすると忘れて勝手に作成したり・・・。

タップが確実に拾えるようにCollectionViewを使用するよう指示しても暫くすると違うタグ使ってタップが拾えなくてドはまりしたり・・・・。

う~ん、処理系のコードに関してはメンテナンスを考えて整理するにしても、他は見なかったことにして作成を進めよう。(*・ω・)(*-ω-)(*・ω・)(*-ω-)

実際にGeminiを使用して時間短縮はかなり出来ているし、不慣れなmvvmもGeminiのおかげでコーディングが出来ているし、助かっているのは事実です。

Proモードがもっと無料で使えるともっと助かるんですがねぇ。


そんな経緯があって、なんとか CashControlSystemSE Ver1.0.6 をリリースに漕ぎつけました。

表示しているのはデモデータですが、26/05/10に現預金が32,440円になるので厳しい状況です。その時までに資金の調達を検討するか、雑費予算の使用を調整する工夫をしなければなりません。
収支面は、デモデータなので滅茶苦茶ですね。

これで少し資金繰りの見通しが楽になったかな。
久しぶりのプログラミングで色々環境が変わっていて大変でしたが、GeminiやCopilotが楽しく使えたのは収穫だったと思います。


ではでは~☆ミ

2018年4月22日日曜日

灼熱の北浦釣行

みなさん、こんにちは。


本日は久しぶりの北浦釣行です。
実に10年ぶりくらいでしょうか。
たまにはメジャーどこも良いかと思ったのですが、久しぶりで状況がさっぱりわかりません。

10時位に串挽あたりから湖岸に入って南下しつつ高田方面を目指していきますが、さっぱり釣れません。
そうこうするうちに気温は30℃超え。
今は4月だったハズなのですが・・・・。

全体として雰囲気は悪くないんですけどねぇ。
魚っ気もあるし。

急に暑くなったのでダメなパターンなのかな。

金上ワンドまで行っても反応がないので近くのコンビニで一休み。
休憩後は、北上して流入河川を中心に攻め上がってくも異常なし。

延々と暑い中釣りあがっていくと、終了間際に串挽の水門脇の木陰で同行者が20cm前後を1匹ゲット。

ようやく魚に巡り会えました。

えっ、俺の釣果?
当然、ノーフィッシュです orz

次回の北浦戦までには少しお勉強をして対策をねっておきます。




ではでは~☆ミ

2018年4月15日日曜日

ブラックバス管理釣り場で釣果がパラダイス

みなさん、こんにちは。


随分久しぶりの更新となりました。
あまり久しぶりなので更新日をどうすべきか悩んでしまいます。
更新した日(今日)を設定するのか、記事が発生した日を設定するのか?

今日は7/8ですが書く内容は4/15のことなので、4/15で設定するとします。
SEO的には良くなさそうですが・・・・。


ということで本題


4/8は地元の野池に行ってなんと釣果0 orz。
バスが居ないっぽい。


翌週4/15は連続釣果0はなんとしても避けたいところです。
なので、いつも通り管理釣り場での釣行とし、なんとかバスをキャッチしたいものです。
場所は例によって「水戸南フィッシングエリア」です。

Webサイトを確認すると前日にバスエリアに放流があったようで、これは期待できます。
放流が薄い時期に行くと意外と手ごわい釣りを強いられて釣果に影響するので、放流情報は要チェックです。

11時頃に現着し何気にリグってあったスピナベをキャスト。


おぉ、いい感じ。重量感あるバスです。



ひょっとしてパラダイス?






パラダイスです。口が釣られてボロボロだけどナイスファイトのバスでした。


まぁ、いい感じで釣れてパラダイスですが、喰いはイマイチでスッポ抜けも多いです。
トレーラーフックつけて正解だったかな。


さすがにバスのスピナベへの反応が悪くなってきたので、後半はワームにてノンビリパターンに変更。



まぁまぁいい感じに釣れます。








十分満足したところで納竿としました。


本日のアタリルアーは

オーエスピー ハイピッチャー 3/8oz DW S57(C.B.パールシャッド)

価格:1,155円
(2021/6/28 18:08時点)
感想(0件)



でした。
色はパールシャッドですのでお間違いなく。

後半のワームはいつもの

ゲーリーヤマモト(Gary YAMAMOTO) シングルテールグラブ 4インチ 194 ウォーターメロン/ブラックフレーク J40-10-194J

価格:880円
(2021/6/28 18:05時点)
感想(0件)



でした。
ゲーリーさん、いつも大変お世話になってますw


ではでは~☆ミ

2018年3月18日日曜日

3月のバス釣り、管釣りで楽しむ

みなさん、こんにちは。


昨日は野池へ出かけノーフィッシュに終わってしまいました。


ライズあり~の、ベイトフィッシュあり~ので魚っ気はたっぷりだったのですが、やはり3月の野池。
あまくはありませんでした。

で、今日は暖かくなりそうなので昨日のリベンジといきたいのですが、やはり魚の顔は見たい。
ということでいつも通り水戸南フィッシングエリアです。

朝のうちに予定の所用を片付け9時半出発、現着10時半頃でしょうか。

1投目のヤマセンコーノーシンカーにバイト。
これは期待できるかと思いましたが後が続きません。

先日好調だった「ゲリーヤマモトの4inchグラブ、ウォーターメロン」にチェンジするも反応なし。
ネコリグやってみるもバイトなし。

さてさて、困りました。

水もマッディーだし定番のチャートにチェンジしてみますか。












ということで、正解は

ゲーリーヤマモト 4インチ シングルテールグラブ 169(チャート/チャート&ライムフレーク)【ゆうパケット】

価格:880円
(2021/6/28 18:02時点)
感想(1件)


チャートのグラブノーシンカーでした。

残念なのは前回、のらなかったけど反応の良かったスピナベが無反応だったこと。
小一時間投げ続けましたがノーバイトでした。


楽しい一日も、日没終了ということで17時30分に納竿です。


晩飯は味噌ラーメン。



ではでは~☆ミ

2018年3月11日日曜日

2018年 初バス 水戸南フィッシングエリア

みなさん、こんにちは。


ここ最近暖かい日が少し続きました。
初バスゲットのチャンスです。

とはいえ、野池は厳しそうなので水戸南フィッシングエリアでチャレンジです。
放流があるとの情報ですしね。

9時過ぎ現着。

早速2号池のいつもの場所からキャストを開始。
ルアーはゲリーヤマモトの4inchグラブ、ウォーターメロン。

ゲーリーヤマモト 4インチ シングルテールグラブ 194(ウォーターメロンペッパー)【ゆうパケット】

価格:880円
(2021/6/28 18:00時点)
感想(0件)


ただし、色は自然劣化バージョンです。

まずはボトムから攻めますが、なかなか反応がありません。
沖の馬の背になっている部分は諦めて、岸から2m程度のブレイクを探ると、1バラシ、2ラインブレイク。

なぜ~~。

えっと、前シーズンからスピニングに巻きぱなしだったフロロ4ポンドが劣化していて、ラインがプチプチ切れちゃいます。
これじゃぁアワセ切れしてしまいます。(反省)

スピニングは封印して、ベイト2本での勝負。
スピニングが使えないのはきついなぁ。

フィネス系のベイトにヤマセンコーてボトムをズルびいてみるも反応なし。
やっぱりグラブですかぁ。
ベイトでノーシンカーグラブだと、たいして飛ばないから楽しくないんだよね。

でもグラブでなんとかボトムを探っていると、やっぱり岸側のブレイクでバイト。
この時期はじっくり送ってからフッキング。

飲まれてました。orz

まぁ、このくらいならスグに外せるし・・・・・?!。


うっそ~、ラジペンがない!!

なんとかフックを素手で取り外ししてリリースできたけど、今日一日は飲まれないように早アワセで勝負かぁ。
もう帰ろかな (;_:)

まぁ、そんなこんなで苦労していると3号池に放流が始まった様子です。
しばし様子をみていると、釣れてる気配がありません。
このまま2号池を継続して、3号池が空いてからチェックにいくとします。

で、放流後3号池に集まっていた人も2号池に戻ってきてこっちも混んできたので、空いた3号池に移動します。

ガラ空きなのでスピナベを流していると、岩があるエリアと土がむき出しのエリアの境目でバイト。
スピナベには乗りませんでしたが、フォローでいれた4inchグラブノーシンカーでゲット。

2号池に戻り、スピナベでチェックして反応があったところをノーシンカーでフォロー。
ゲリーヤマモトの4inchグラブ、ウォーターメロン色相自然劣化バージョンのストックがなくなったので、カットテール4inchパンプキンのネコリグに変更。

ゲーリーヤマモト 4”カットテールワーム 196 パンプキン/グリーン&ブラックフレーク 【ブラックバス用】【ワーム】【4インチ】

価格:792円
(2021/6/28 17:49時点)
感想(0件)


実はネコリグであまり釣ったことがない俺。
よい練習になります。


さて、4時過ぎ。
バイトはまだありますが、日が傾いて寒くなってきたので本日は納竿とします。


本日釣果は5匹で、やっぱアワセミスは多数でした。
最初の2匹は写真なし。





ではでは~☆ミ

2018年3月10日土曜日

EXCEL VBA で、RecordSet を使いまわしする

みなさん、こんにちは。


今回も先日に続き EXCEL VBA についてです。

シートのデータを RecordSet に取り込んで利用されている方も多いかと思います。

Dim dbRes As ADODB.Recordset
Set dbRes = New ADODB.Recordset

dbRes.Open SQLstr, ShtConn, adOpenKeyset, adLockOptimistic

'何かRecordSetを操作する処理を行う
dbRes.MoveFirst
Do Until dbRes.EOF
 dbRes.MoveNext
Loop

dbRes.Close

こんな感じでしょうか。

RecordSet を Close する前に希望の処理を記述します。
この場合、dbRes.MoveNext です。
しかし Close した後では RecordSet は使用できなくなります。

Dim dbRes As ADODB.Recordset
Set dbRes = New ADODB.Recordset

dbRes.Open SQLstr, ShtConn, adOpenKeyset, adLockOptimistic

dbRes.Close

'何かRecordSetを操作する処理を行う
dbRes.MoveFirst
Do Until dbRes.EOF
 dbRes.MoveNext
Loop


実行時エラー'3704':
オブジェクトが閉じている場合は、操作は許可されません。

閉じる前に全ての処理を記述できればよいのですが、そうもいきません。
最悪、Close しないで処理を続けても動くとは思いますが、なんか気持ち悪いですね。

それにRecodeSet は任意のタイミングで操作したい。

Dim cloneRs As ADODB.Recordset
Set cloneRs = dbRes.clone

として dbRes を cloneRs にコピーをして cloneRs を使いまわそうと思っても、オリジナルの dbRes を Close すると cloneRs まで同じタイミングで破棄されるので結局意味がありません。

2次元配列かRecordSetを作成してレコードごとに書き出していくしかないようです。
どうせなら RecordSet に書き出すようにしてみます。
(cloneRsを変数宣言していますが実際は引数で与えます)

Dim cloneRs As ADODB.Recordset
Dim fld As ADODB.Field

Set cloneRs = New ADODB.Recordset
For Each fld In dbRes.Fields
    cloneRs.Fields.Append fld.Name, fld.Type, fld.DefinedSize,
fld.Attributes
Next

cloneRs.Open

Do Until dbRes.EOF

    cloneRs.AddNew

    For Each fld In dbRes.Fields
        cloneRs.Fields(fld.Name).Value = fld.Value
    Next

    cloneRs.Update
    dbRes.MoveNext

Loop


これで、dbRes を Close しても、cloneRs は、使用ができます。


下記が、コードとなります。
cnStr は、起動時並びにファイルを「名前を付 けて保存」した際に、再読み込みできるよう別プロシージャにしました。

Option Explicit
Public cnStr As String


Sub GetCnStr()  '接続文字列の作成

Dim PathStr As String
PathStr = ThisWorkbook.Path & "\" & ThisWorkbook.Name

cnStr = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ="
cnStr = cnStr + PathStr
cnStr = cnStr + "; ReadOnly=False;Extended Properties= "Excel 8.0; HDR=YES;""

End Sub


Sub GetData(cloneRs As ADODB.Recordset, sheetName As String)    'シートデータを取得しRecordSetに変換

Dim SQLstr As String
Dim ColName As String
ColName = Sheets(sheetName).Range("A1").Value
SQLstr = "SELECT * FROM [" & sheetName & "$] WHERE " & ColName & " IS NOT
NULL"


Dim ShtConn As ADODB.Connection
Set ShtConn = New ADODB.Connection

ShtConn.ConnectionString = cnStr
ShtConn.Open

Dim dbRes As ADODB.Recordset
Set dbRes = New ADODB.Recordset

dbRes.Open SQLstr, ShtConn, adOpenKeyset, adLockOptimistic

If dbRes.RecordCount = 0 Then
    GoTo Label1
End If

dbRes.MoveFirst

Dim fld As ADODB.Field

Set cloneRs = New ADODB.Recordset
For Each fld In dbRes.Fields
    cloneRs.Fields.Append fld.Name, fld.Type, fld.DefinedSize, fld.Attributes
Next

cloneRs.Open

Do Until dbRes.EOF
    cloneRs.AddNew

    For Each fld In dbRes.Fields
        cloneRs.Fields(fld.Name).Value = fld.Value
    Next

    cloneRs.Update
    dbRes.MoveNext
Loop

Label1:

dbRes.Close
Set dbRes = Nothing
ShtConn.Close

End Sub

こうしておけば、RecordSetを宣言していろいろなRecordSetを取り出せます。


ではでは~☆ミ