(たぶんVS2017 15.6.0にアプデしたせいで)"apksigner.BAT" exited with code 1.

Debugのデプロイ時に "apksigner.BAT" exited with code 1. と出てデプロイできず。
他にもapk signature fails (apksigner.BAT) - Developer Communityのように出てる人いるっぽいし日付から15.6入れたせいとかですかね…

先日のVisual Studio 2017 15.6.0にアップデートしたらXamarin.Androidビルドできなくなる。 - omanuke-ekunamoの日記と同じように
23.0.3
を入れたら無事解決。というかそこで入れてる修正ブランチ別で入ってなかった。

まぁ後でこれ入れたの忘れてなにか問題起こしそうな予感( ^ω^)・・・

Visual Studio 2017 15.6.0にアップデートしたらXamarin.Androidビルドできなくなる。

プロジェクトリリース直後のさなか、F#いろいろ機能改善したよというので出たての15.6.0にアップデートしたらなにやらXamarin.Androidのプロジェクトがビルドはできても実機、シミュレーターにデプロイできなくなってトラブルのデバッグができず死にそうに。
Deloyができない的な感じだけ出て詳細がよくわからずVisual StudioのTool>Option>Projects and Solutions>Build andRun>MSBuild project build output verbosityをNormalに。ちなDiagnosticにしたら詳細すぎて死にました。

エラーを見るとリビルドさせたときとかで何やらエラメッセージが変わるんですが、最終的には"Unsupported major.minor version 52.0"が出る模様。
ググるとXamarin ForumのUnsupported major.minor version 52.0 — Xamarin Community Forumsにたどり着き。

最後のほうに同じようにVSアップデートしたら出たぞゴラァと言ってる人がいました。
そこの上の方に書いてあるの、結局どれをしたら直るかわからず、プロジェクトや環境をいろいろいじるのやだなぁと思っていたところ、さらにぐぐってたらTechnical Bulletin: Android SDK Build-tools 24 | Xamarin Releasesこちらにたどり着きました。

こちらの中で解決方法としていくつか載ってたもののうち、
23.0.3
Androidのcsprojの一番上のProperty Groupに追加しろというのがあって、それが一番環境変更負荷低そうだなぁと思い試したら無事デバッグ実行できるようになりました。
これやったら他にどう影響するのかよくわかってませんが…

とりあえずこれで何とかしのげそうですが、もうほいほいVSアップデートするのはやめようと思います。つか簡単に戻せるようにしてもらえないとただでさえ環境壊れやすいんだから困りますー(´・ω・`)

ちな、最終的には"Unsupported major.minor version 52.0"が出る感じですが、クリーンリビルドする前は"package file was not signed correctly"とかXamarin.Form.dllかなにかが絡んでTargetFrameworkを7.1にしろとか出てた気がします。メモっとけばよかった…

WinRTでAssetsの下のものを列挙

Assetsの下のファイル名などを列挙したかったのだけれど

StorageFolder folder = await StorageFolder.GetFolderFromPathAsync("ms-appx:///Assets/Icons");

だと不正なパスだとか出てアクセスできず。
StorageFile直をとるのは

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Icons/smart.svg"));

で出来るようだけれどStorageFolderとる方法はわからず。

結局c# - Search files in project folder dynamically - Stack Overflowの下にあったものを参考にして

StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
StorageFolder subFolder = await installedLocation.GetFolderAsync("Assets");
subFolder = await subFolder.GetFolderAsync("Icons");
var files = await subFolder.GetFilesAsync();

で列挙でき(´・ω・`)

SourceTreeからTFSのGitにアクセスしようとしてAuthentication failed.

最近ドメインの認証パスワードの期限がきたので変えたんですが、それを変えたあたりからなんかプルやプッシュでAuthentication failedとでて実行できず。
ツール>オプション>認証のアカウントの中にそれっぽいtfsのサーバー名あるのでそこの編集や削除押してゴニョゴニョしても状況変わらず。
そこらへんいじると資格情報マネージャー>Windows資格情報>汎用資格情報のgit:http://tfsのサーバーアドレスのあたりが変わるような変わらないような、いやここ関係あるの?ないの?とかよくわからずいろいろ調べてたらGit Credential Manager for Windowsとかよくわからないの出てきてよくわからず。
インスコしてもなんか前の情報残ってるっぽくて何も変わらない。
もうめんどくさいからうごくGitKrakenでプッシュ・プルしてほかのローカルコミットとかはSourceTreeでいいかと思ってたところあめいさんより
あめいぱわーにおまかせろ! on Twitter: "https://t.co/4JrjzcSZAL
で何か変わるかもです。ClickOnce のせいか、変なところに入れるしテンポラリディレクトリできちゃうみたいですね。… "

などと教えていただきもにょもにょしてみることに。なんか長い名前のフォルダ削ればいいのかとかやってみたけれど変わらないので、めんどくせえとおもいC:\Users\xxxxxx\AppData\Local\Atlassianフォルダの下全削除。そのうえで再インスコしてみたらなんかまっさらになったっぽく初期設定からまっさらインスコっぽくなってローカルのリポジトリ再登録してプルしてみたところ認証ダイアログが出てきたので名前はxxx\xxxとドメインのユーザーネーム入れてパスはドメインのパス入れてOKしたら通ったっぽい!
結局資格情報マネージャーとか関係してるのかなど全然わかりませんが、なんか動いたからこれでいいです。
あめいさん教えてくれてありがとうー!(´・ω・`)

VS2017Upd3のXamarin.Androidで大量のMonoのログ出力がが

VS2017Upd3に変えたら

08-15 09:13:23.275 D/Mono ( 3119): [0x9a5be930] worker unparking, timeout? no interrupted? no
08-15 09:13:23.275 D/Mono ( 3119): [0x9a5be930] worker parking

という感じのメッセージが大量にOutputに出力されるように…
ほどなく修正されるんでしょうが、とりあえず自分で出すログが埋もれるレベルで出てくるので抑制が必要。

c# - Strange debug output in app since upgrade to Visual Studio 2017 15.3.0 - Stack Overflow
58829 – Application Output Window being flooded with "[Mono] worker parking, [Mono] worker unparking" messages when debugging agasint Android Emulator.

こちらにあるようにXamarin.Androidのプロジェクトにテキストファイル追加してログレベルを書くということで、自分はapp.configと同じ位置にmonoEnv.txtという名前でテキストファイルを追加、テキストファイルの中身は

MONO_LOG_LEVEL=message

とだけ書いて、Build ActionをAndroidEnvironmentに指定、念のためクリーン->リビルドしたらログは出なくなりました。

global::Xamarin.Forms.Forms.Init(this, prm.Bundle)を呼び出す場所

Xamarin.Forms使って複数社に横展開してるアプリがあるんですが、初期処理を共通化しようとして共通のプロジェクトを作って
Android側ではglobal::Xamarin.Forms.Platform.Android.FormsAppCompatActivityを継承したMainActivityBaseクラスを作成、
そちらにいにしえのTemplateMethod的な感じで初期化処理を記述、MainActivitiyではMainActivityBaseを継承元とし各社で違うところをパラメータで渡すといった感じにしたんですが、アイコンが表示されない感じに。
同じコードをMainActivitiyのほうに持ってくると正常に動くっぽい。
同じコードなのになんで?と思いXamarin.Formsの初期化がらみかなーと

global::Xamarin.Forms.Forms.Init(this, prm.Bundle);

デコンパイルされたコードを見ると

    public static void Init(Context activity, Bundle bundle)
    {
      Assembly callingAssembly = Assembly.GetCallingAssembly();
      Xamarin.Forms.Forms.SetupInit(activity, callingAssembly);
    }

という感じに呼び出し元Assembyをひっぱて何やらやってる様子。
初期化コードをBaseクラスに戻してXamarin.Forms.Init呼ぶのはMainActivitiyで呼ぶことにしてその部分をAction渡しで初期化コードから呼び出すようにしたら無事に動いた…かな?。
SetupInitの中で何やってるのかまでは見てませんが、一応変な現象が出て一応解決したっぽい?という報告まで。
ちなiOSのほうも共通プロジェクト内でForms.Init呼び出してましたが、そちらは今のところ変な結果にはなってないような。けどソース見てないので実はもしかしたらどこかに影響あるのかもしれません。