2020年9月3日木曜日

サーバからCookieを操作使用としているサイトで動作がうまくいかない環境がポツポツと出てきた。Cookie削除時のChromeのSameSite 問題について

現象は

Cookieの削除を行っていたサイトが、突然、削除処理が動作しなくなり、バグを生み出すようになった。
ブラウザ、Chrome、Firefox、SafariなどでSameSite属性が導入されたため。
ただ、現象が発生するのは、Chrome 85だけであり、Firefox 80は発生しない。MacのSafari 13.1.2は、発生しませんでした。

サーバサイドのロジック

サーバサイドでCookieを削除する場合は、有効期限を設定して削除する必要があります。


var cookie = context.Request.Cookies[KEY_COOKIE];
if (cookie != null)
{
	cookie.Expires = DateTime.Now.Date.AddDays(-1d);
	// 設定したパスが受け取れないため、アプリケーションパスをパスに再設定
	cookie.Path = GetApplicationPath(context.Request);
	context.Response.SetCookie(cookie);
}

レスポンスの解析結果

動作している場合のResponse(Chrome)

動作しない場合のResponse(Chrome)

動作しない場合は、SameSite属性が追加されています。

渓谷の内容は、
です。

- エラーメッセージ
This Set-Cookie was blocked because it had the "SameSite=None" attribute but did not hae the "Secure" attribute, which is required in order to use "SameSite=None"

- 日本語
このSet-Cookieは、「SameSite = None」属性があったが、「SameSite = None」を使用するために必要な「Secure」属性を持っていなかったため、ブロックされました。

対応のロジック


none

対応は、サーバへのリクエストのResponseを見て、クライアントでCookieの操作を行い対応しました。

CookieのSameSite属性について

  • Chrome 80からの変更

クッキーの新しい属性 SameSite に対応する方法 | asp.net

  • この方法は、.NET Framework 4.7.2が必要となります。

ChromeでSameSite Cookieを正しく削除する方法(80以降)

  • 削除されない理由、対応方法が記載されいます。

2020年8月31日月曜日

Azure Automated Machine Learningを使ってみた。自動MLの可能性について

ノーコードで予測分析を実施してみました。

ノーコードと言いつつ、作成したモデルをデプロイしてサービス化したあとにサービスを使用するアプリケーションはコーディングが必要とあなります。

モデルのランキングは、RMSEがNO1は、StackEnsemble

自動MLで分析を実施して、約80のアルゴリズムで分析をかけます。

使用したアルゴリズムです。

AutoArima
MaxAbsScaler, DecisionTree
MaxAbsScaler, SGD
MinMaxScaler, DecisionTree
MinMaxScaler, ElasticNet
MinMaxScaler, LightGBM
MinMaxScaler, SGD
ProphetModel
RobustScaler, DecisionTree
RobustScaler, ElasticNet
RobustScaler, LassoLars
RobustScaler, LightGBM
RobustScaler, RandomForest
StackEnsemble
StandardScalerWrapper, DecisionTree
StandardScalerWrapper, ElasticNet
StandardScalerWrapper, ExtremeRandomTrees
StandardScalerWrapper, LassoLars
StandardScalerWrapper, RandomForest
StandardScalerWrapper, SGD
TruncatedSVDWrapper, LassoLars
VotingEnsemble

実験を
type algorithm.txt | sort | uniaue > algorithm_list.txt
で出力。

中身を見てみるとどの特徴がどのくらい影響を与えているかがわかります。



デプロイしてSwaggerでI/Fを確認

ヘルスがあるんですね。



クライントロジックの作成


using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace MLWebServiceClient
{
	internal class InputData
	{

		[JsonProperty("data")]
		internal Request[] Data;
	}
	// The data structure expected by the service
	internal class Request
	{
		[JsonProperty("instant")]
		// The service used by this example expects an array containing
		//   one or more arrays of doubles
		internal int Instant;
		[JsonProperty("date"), JsonConverter(typeof(CustomDateTimeConverter))]
		internal DateTime Date;
		[JsonProperty("season")]
		internal int Season;
		[JsonProperty("yr")]
		internal int Year;
		[JsonProperty("mnth")]
		internal int Month;
		[JsonProperty("weekday")]
		internal int Weekday;
		[JsonProperty("weathersit")]
		internal int Weathersit;
		[JsonProperty("temp")]
		internal double Temp;
		[JsonProperty("atemp")]
		internal double ATemp;
		[JsonProperty("hum")]
		internal double Hum;
		[JsonProperty("windspeed")]
		internal double Windspeed;
	}
	class CustomDateTimeConverter : IsoDateTimeConverter
	{
		public CustomDateTimeConverter()
		{
			base.DateTimeFormat = "yyyy-MM-dd HH:mm:ss,ffffff";
		}
	}

	class Program
	{
		static void Main(string[] args)
		{
			Health();

			Score();
			Console.ReadKey();
		}
		private static void Health()
		{
			// Set the scoring URI and authentication key or token
			string scoringUri = "http://baeab633-xxxx-xxxx-xxxx-6b4317bfbbdf.westus.azurecontainer.io/";
			HttpClient client = new HttpClient();
			try
			{
				var request = new HttpRequestMessage(HttpMethod.Get, new Uri(scoringUri));
				request.Content = new StringContent("");
				request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
				var response = client.GetAsync(new Uri(scoringUri));
				Console.WriteLine(response.Result);
			}
			catch (Exception e)
			{
				Console.Out.WriteLine(e.ToString());
			}
		}
		private static void Score()
		{

			// Set the scoring URI and authentication key or token
			string scoringUri = "http://baeab633-xxxx-xxxx-xxxx-6b4317bfbbdf.westus.azurecontainer.io/score";
			string authKey = "<your key or token>";

			// Set the data to be sent to the service.
			// In this case, we are sending two sets of data to be scored.
			InputData payload = new InputData
			{
				Data = new[] {
			new Request
			{
				Instant = 732,
				Date = new DateTime(2013, 1, 1),
				Season = 1,
				Year = 2,
				Month = 1,
				Weekday = 5,
				Weathersit = 2,
				Temp = 0.215833,
				ATemp = 0.223487,
				Hum = 0.5775,
				Windspeed = 0.154846,
			}}
			};


			// Create the HTTP client
			HttpClient client = new HttpClient();
			// Set the auth header. Only needed if the web service requires authentication.
			//client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authKey);

			// Make the request
			try
			{
				Console.WriteLine(JsonConvert.SerializeObject(payload));
				var content = new StringContent(JsonConvert.SerializeObject(payload));
				content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
				var response = client.PostAsync(new Uri(scoringUri), content).Result;
				// Display the response from the web service
				Console.WriteLine(response.Content.ReadAsStringAsync().Result);
			}
			catch (Exception e)
			{
				Console.Out.WriteLine(e.ToString());
			}


		}
	}
}


処理した結果

うまくコード200が返ってきて予測値が取得できました。

2020年8月29日土曜日

StackEditから持ってきたテーブルタグのレイスト修正。CSS3を使ってこのBlogのテーブルを美しく装飾する。


修正方法

テーマをHTML編集して、タグの直前に下記のコードを挿入します。


<!-- start テーブルタグの装飾を実装 -->    
<style>
table {
  width: auto;
  border-spacing: 0;
  font-size:14px;
  box-shadow: 2px 2px 1px rgba(0,0,0,0.1);
}
table th {
  color: #000;
  padding: 8px 15px;
  background: #eee;
  background:-moz-linear-gradient(#eee, #ddd 50%);
  background:-webkit-gradient(linear, 100% 0%, 100% 50%, from(#eee), to(#ddd));
  font-weight: bold;
  border-top:1px solid #aaa;
  border-bottom:1px solid #aaa;
  line-height: 120%;
  text-align: center;
  text-shadow:0 -1px 0 rgba(255,255,255,0.9);
  box-shadow: 0px 1px 1px rgba(255,255,255,0.3) inset;
}
table th:first-child {
  border-left:1px solid #aaa;
  border-radius: 5px 0 0 0;	
}
table th:last-child {
  border-radius:0 5px 0 0;
  border-right:1px solid #aaa;
}
table tr td {
  padding: 8px 15px;
  text-align: center;
}
table tr td:first-child {
  border-left: 1px solid #aaa;
}
table tr td:last-child {
  border-right: 1px solid #aaa;
}
table tr {
  background: #fff;
}
table tr:nth-child(2n+1) {
  background: #f5f5f5;
}
table tr:last-child td {
  border-bottom:1px solid #aaa;
  
}
table tr:last-child td:first-child {
  border-radius: 0 0 0 5px;
}
table tr:last-child td:last-child {
  border-radius: 0 0 5px 0;
}
table tr:hover {
  background: #eee;
  cursor:pointer;
}
</style>
<!-- end テーブルタグの装飾を実装 -->   

対応した結果

MarkDownで作成したテーブルが下記のレイアウトで表示される様になりました。

参考

ここのスタイルを修正して作成しています。
http://weboook.blog22.fc2.com/blog-entry-329.html

2020年8月28日金曜日

デバック実行のためのビルドでエラー:/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(3,3): Error MSB6006: “codesign” はコード 1 を伴って終了しました。 (MSB6006) (application-name)が発生した。


発生したエラーメッセージ

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets(3,3): Error MSB6006: “codesign” はコード 1 を伴って終了しました。 (MSB6006) (application-name)

環境

Xamarin
Visual Stuido 2019 for Mac

対応は、

問題は2つあり、

  1. 一つは、xcodeで確認すると開発用のCertificatesがなくなっていました。
    Xcodeのメニューから、xcode->Preferencesを起動して、対象の署名IDのApple development Certificatesを新規作成しました。
    その後、Apple Developerサイトに2つのCertificatesが出来るので古い方を削除しました。


直前に6つのApple Developer Certificateがあって整理したときに消してしまったようです。

  1. 2つ目は、ProfilesとCertificatesの関連設定が切れていました。
    Apple Developerサイトにログインして、「Certificates, IDs & Profiles」->「Profiles」から対象のProfileを開くと上段で作成した新しいCertificateとの関連が出来ていなかったので、チェックを追加して対応しました。


CertificateとIdentifierとProfileをキチンと意識して連携してやらないといけません。



2020年8月27日木曜日

Stackeditを使用してBloggerを更新してみたけど、ソースコードの扱いがイマイチだったのでGoogleのcode-prettifyへの変換を書いてみた。


StackeditのMDにてのコード挿入の使い方

バックシングルクォートを使用する。(Charpの場合)
```cs
source code
```

採用したコード表示用のHTML用埋め込みスクリプト

GitHub https://github.com/googlearchive/code-prettify

テンプレートの拡張方法

下記の内容テンプレートの</HEAD>に直前に挿入する。

<!-- start StackEditから取り込んだ際にcodeをcode-prettifyで処理させる。 -->
<script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js?skin=sons-of-obsidian"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
pre {
  overflow: auto;
  resize: horizontal;
}
pre.my-code {
  overflow: auto;
  resize: horizontal;
}
</style>
<script language='javascript' type='text/javascript'>
  $(function() {
    // for each pre class='prettyprint';
    $('pre>code.prism').parent().each(function(a, e) {
		console.log('calss=' + $(this).attr('class'));
		var lang = $(this).attr('class').replace(' language-', '');
		console.log('lang=' + lang);
		$(this).addClass('prettyprint linenums').attr('lang', lang);
		PR.prettyPrint();
    })
  }
);
</script>
<!-- end StackEditから取り込んだ際にcodeをcode-prettifyで処理させる。 -->

デザインについて

私は、skin=sons-of-obsidianを使用しました。
テーマの説明 https://8oclockis.blogspot.com/2018/04/google-code-prettifyblogger.html

使用できるコードについて

“bsh”, “c”, “cc”, “cpp”, “cs”, “csh”, “cyc”, “cv”, “htm”, “html”, “java”,
“js”, “m”, “mxml”, “perl”, “pl”, “pm”, “py”, “rb”, “sh”, “xhtml”, “xml”, “xsl”
https://github.com/googlearchive/code-prettify

Stackeditとの連携についての対応について

規程のコードの出力は、
<pre class=" language-html"><code class=“prism language-html”>
となります。しかし、Googleのcode-prettifyが求めいるタグが、
<pre class=“prettyprint”>
であり、私は、
<pre class=“prettyprint linenums” lang=“html”>
としたい。
それをJavascriptでコーディングしてみました。

<script language='javascript' type='text/javascript'>
  $(function() {
    // for each pre class='prettyprint';
    $('pre>code.prism').parent().each(function(a, e) {
		console.log('calss=' + $(this).attr('class'));
		var lang = $(this).attr('class').replace(' language-', '');
		console.log('lang=' + lang);
		$(this).addClass('prettyprint linenums').attr('lang', lang);
		PR.prettyPrint();
    })
  }
);
</script>

対応したことで↓のようにキチンと表示されました。



2020年8月26日水曜日

httpを使用したChrome 84からのシームレスなURLスキーム連携について

現象

Chromeのバージョンがアップに伴い、httpではURLスキーム連携を使用した際にダイヤログを表示させないということができなくなりました。(httpsは対応可能)

対応方法について

Chromeの「chrome://flags」に移動し、「Insecure origins treated as secure」に対象のサイト(例:http://example.com)を追加するとチェックボックスが表示され、選択が記憶できるようになります。
対象は、Chrome 84/MS Edge 84
(Edgeは開くと、安全でないオプションを使用しているという警告が表示されます。)

この対応で、両方のブラウザでこのフラグの設定が表示され、フラグを設定したあとにその内容が記憶され、ポップアップが出ずにシームレスな連携が実現できる形になります。


設定することでhttpでもチェックボックスが表示され、チェックをつけることで次回からブラウザからローカルのアプリをシームレスに起動できるよになります。


2020年8月25日火曜日

ADO.NET/Entity Frameworkにてコネクションプールが枯渇する。エラー:タイムアウトに達しました。プールから接続を取得する前にタイムアウト期間が過ぎました。プールされた接続がすべて使用中で、プール サイズの制限値に達した可能性があります。

パフォーマンスモニタでの監視

注目すべきは、コネクションプールが100個を超えた場合、コネクションプールからのコネクション取得タイムアウトは、コネクションタイムアウト15秒を待つことです。
15秒後にエラーが発生します。

この画像は、テストコードでコネクション数を自由にいじってみて監視してみました。テストコードで「U」キーでコネクションを増やして、「D」キーでコネクションを減らして見ました。


パフォーマンスカウンタを動作させる対応

発生しているエラー

System.InvalidOperationException
  HResult=0x80131509
  Message=タイムアウトに達しました。プールから接続を取得する前にタイムアウト期間が過ぎました。プールされた接続がすべて使用中で、プール サイズの制限値に達した可能性があります。
  Source=System.Data
  スタック トレース:
   場所 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   場所 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   場所 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   場所 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   場所 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   場所 System.Data.SqlClient.SqlConnection.Open()
   場所 ConsoleAppLegacy.Program.<Main>d__0.MoveNext() (D:\dev\sample_gomi\20200819_.NETCore_ADO.NET\ConsoleAppLegacy\ConsoleAppLegacy\Program.cs):行 22
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   場所 ConsoleAppLegacy.Program.<Main>(String[] args)

  この例外は、最初にこの呼び出し履歴 
    System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(System.Data.Common.DbConnection, System.Threading.Tasks.TaskCompletionSource<System.Data.ProviderBase.DbConnectionInternal>, System.Data.Common.DbConnectionOptions, System.Data.ProviderBase.DbConnectionInternal, out System.Data.ProviderBase.DbConnectionInternal)
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory, System.Threading.Tasks.TaskCompletionSource<System.Data.ProviderBase.DbConnectionInternal>, System.Data.Common.DbConnectionOptions)
    System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(System.Data.Common.DbConnection, System.Data.ProviderBase.DbConnectionFactory, System.Threading.Tasks.TaskCompletionSource<System.Data.ProviderBase.DbConnectionInternal>, System.Data.Common.DbConnectionOptions)
    System.Data.SqlClient.SqlConnection.TryOpenInner(System.Threading.Tasks.TaskCompletionSource<System.Data.ProviderBase.DbConnectionInternal>)
    System.Data.SqlClient.SqlConnection.TryOpen(System.Threading.Tasks.TaskCompletionSource<System.Data.ProviderBase.DbConnectionInternal>)
    System.Data.SqlClient.SqlConnection.Open()
    ConsoleAppLegacy.Program.Main(string[]) (Program.cs 内)
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
    System.Runtime.CompilerServices.TaskAwaiter.GetResult()
    ...
    [呼び出し履歴が切り捨てられました] でスローされました

エラーを検証したソース

		/// <summary>
		/// key u			::処理を実行してクローズしない。
		/// key n			::処理を実行してクローズ(normal)
		/// key d			::処理を実行して2つクローズ
		/// </summary>
		/// <param name="args"></param>
		/// <returns></returns>
		static async Task Main(string[] args)
		{
			Console.WriteLine("Hello World!");
			try
			{
				List<SqlConnection> persistantConnections = new List<SqlConnection>();
			start:
				var key = Console.ReadKey();

				SqlConnection con = new SqlConnection("Server=SQLServerIP;Database=kiyotaka;user id=sa;password=p@$$w0rd;");
				con.Open();
				var cnt = 0;
				SqlCommand cmd = new SqlCommand($@"begin tran;
insert test values(1,'{++cnt}');
insert test values(1,'{++cnt}');
commit;", con);

				cnt = await cmd.ExecuteNonQueryAsync();
				switch (key.Key)
				{
					case ConsoleKey.U:
						persistantConnections.Add(con);
						break;
					case ConsoleKey.D:
						con.Close();
						if (persistantConnections.Count > 0)
						{
							persistantConnections[0].Close();
							persistantConnections.RemoveAt(0);
						}
						break;
					default:
						con.Close();
						break;
				}

				Console.WriteLine($"cnt={cnt}");
				goto start;
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex.ToString());
			}
			Console.ReadKey();
			return;
		}

2020年6月20日土曜日

2020年6月19日金曜日

Mac/Windows Visual Studio&Xamarin開発時に遭遇したエラー集

ちょっと、終日、Xamarin開発を行ってみました。
対応OSは、iOS/Android/Windowsです。

その中で発生したエラー集です。

■1 Andorid ファイルパスが長すぎたようです。

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー Failed to create JavaTypeInfo for class: Android.Support.V4.View.Accessibility.AccessibilityManagerCompat/IAccessibilityStateChangeListenerImplementor due to MAX_PATH: System.IO.DirectoryNotFoundException: パス 'D:\dev\sample_gomi\20200514_XamarinFormsSimple\xamarin-forms-book-samples-master\Chapter18\MvvmClock\MvvmClock\MvvmClock.Droid\obj\Debug\90\android\src\mono\android\support\v4\view\accessibility\AccessibilityManagerCompat_AccessibilityStateChangeListenerImplementor.java' の一部が見つかりませんでした。
   場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   場所 System.IO.File.InternalDelete(String path, Boolean checkHost)
   場所 System.IO.File.Delete(String path)
   場所 Xamarin.Android.Tools.Files.CopyIfStreamChanged(Stream stream, String destination)
   場所 Xamarin.Android.Tasks.Generator.CreateJavaSources(TaskLoggingHelper log, IEnumerable`1 javaTypes, String outputPath, String applicationJavaClass, String androidSdkPlatform, Boolean useSharedRuntime, Boolean generateOnCreateOverrides, Boolean hasExportReference) MvvmClock.Droid


プロジェクトフォルダを移動して対応しました。


■2 UWP SQLiteのデータベースが作成できない。

エラーのパタン1
System.UnauthorizedAccessException
  HResult=0x80070005
  Message=Access to the path 'C:\Users' is denied.
  Source=System.IO.FileSystem
  スタック トレース:
   場所 System.IO.Win32FileSystem.CreateDirectory(String fullPath)
   場所 System.IO.Directory.CreateDirectory(String path)
   場所 AlertCallbacks.AlertCallbacksPage.DoSomeDataAccess() (D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello\Hello\Hello\Database\AlertCallbacksPage.xaml.cs):行 51
   場所 AlertCallbacks.AlertCallbacksPage.AlertDismissedCallback(Task`1 task) (D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello\Hello\Hello\Database\AlertCallbacksPage.xaml.cs):行 30
   場所 System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()
   場所 System.Threading.Tasks.Task.<>c.<.cctor>b__276_1(Object obj)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

エラーのパタン2
SQLite.SQLiteException
  HResult=0x80131500
  Message=Could not open database file: C:\Users\k-abe\Documents\ormdemo.db3 (CannotOpen)
  Source=SQLite-net
  スタック トレース:
   場所 SQLite.SQLiteConnection..ctor(SQLiteConnectionString connectionString)
   場所 SQLite.SQLiteConnection..ctor(String databasePath, Boolean storeDateTimeAsTicks)
   場所 AlertCallbacks.AlertCallbacksPage.DoSomeDataAccess() (D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello\Hello\Hello\Database\AlertCallbacksPage.xaml.cs):行 49
   場所 AlertCallbacks.AlertCallbacksPage.AlertDismissedCallback(Task`1 task) (D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello\Hello\Hello\Database\AlertCallbacksPage.xaml.cs):行 30
   場所 System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()
   場所 System.Threading.Tasks.Task.<>c.<.cctor>b__276_1(Object obj)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

⇒パスの設定が間違っていました。
.NET Standardなのだから、using Xamarin.Essentials;を使って対応しました。


■3 Android エラーメッセージの通り、実機に容量がなく配置が出来ませんでした。

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー ADB0060:  Deployment failed
Xamarin.AndroidTools.AndroidDeploymentException: InsufficientSpaceForPackage ---> Mono.AndroidTools.InsufficientSpaceException: There is not enough storage space on the device to store package: /data/local/tmp/com.companyname.hello-Signed.apk. Free up some space and try again.
   場所 Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName) 場所 E:\A\_work\548\s\External\androidtools\Mono.AndroidTools\Internal\AdbOutputParsing.cs:行 323
   場所 Mono.AndroidTools.AndroidDevice.<>c__DisplayClass95_0.<InstallPackage>b__0(Task`1 t) 場所 E:\A\_work\548\s\External\androidtools\Mono.AndroidTools\AndroidDevice.cs:行 753
   場所 System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()
   場所 System.Threading.Tasks.Task.Execute()
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 AndroidDeviceExtensions.<PushAndInstallPackage>d__11.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Devices\AndroidDeviceExtensions.cs:行 187
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   場所 AndroidDeviceExtensions.<PushAndInstallPackage>d__11.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Devices\AndroidDeviceExtensions.cs:行 203
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   場所 Xamarin.AndroidTools.AndroidDeploySession.<InstallPackage>d__112.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Sessions\AndroidDeploySession.cs:行 414
   --- 内部例外スタック トレースの終わり ---
   場所 Xamarin.AndroidTools.AndroidDeploySession.<InstallPackage>d__112.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Sessions\AndroidDeploySession.cs:行 421
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   場所 Xamarin.AndroidTools.AndroidDeploySession.<RunAsync>d__106.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Sessions\AndroidDeploySession.cs:行 217
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 Xamarin.AndroidTools.AndroidDeploySession.<RunLoggedAsync>d__104.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Sessions\AndroidDeploySession.cs:行 119 0

⇒残容量は500MBはあったのですが、ダメでした。空けて対応しました。


■4 Andorid 原因も対処方法も不明

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
警告 Mono.Cecil.Cil.SymbolsNotMatchingException: Symbols were found but are not matching the assembly
   場所 Mono.Cecil.ModuleDefinition.ReadSymbols(ISymbolReader reader, Boolean throwIfSymbolsAreNotMaching) 場所 /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/cecil/Mono.Cecil/ModuleDefinition.cs:行 1085
   場所 Mono.Cecil.ModuleReader.ReadSymbols(ModuleDefinition module, ReaderParameters parameters) 場所 /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/cecil/Mono.Cecil/AssemblyReader.cs:行 111
   場所 Mono.Cecil.ModuleReader.CreateModule(Image image, ReaderParameters parameters) 場所 /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/cecil/Mono.Cecil/AssemblyReader.cs:行 82
   場所 Mono.Cecil.ModuleDefinition.ReadModule(String fileName, ReaderParameters parameters) 場所 /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/cecil/Mono.Cecil/ModuleDefinition.cs:行 1118
   場所 Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.ReadAssembly(String file) 場所 /Users/runner/runners/2.165.0/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:行 149 MvvmClock.Droid

Visual StudioのNuGetでライブラリを更新して、クリーンビルドを行い対応しました。
原因と有効手段は不明のままです。


■5 UWP その他

.NET Standardを2.0から2.1に上げることを失敗しました。
どうも、2.1は各種ライブラリと相性が良くないらしい。

なので、2.0に戻して開発を実施しました。


■6 UWP httpsのWeb APIを呼び出すとこのエラーが発生する。

System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Runtime.InteropServices.COMException: このエラー コードに関連付けられたテキストが見つかりませんでした。

この証明機関は、無効か正しくありません

   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Net.Http.HttpHandlerToFilter.<SendAsync>d__15.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Net.Http.DiagnosticsHandler.<SendAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Net.Http.HttpClientHandler.<SendAsync>d__111.MoveNext()
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpClientHandler.<SendAsync>d__111.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__58.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at AlertCallbacks.AlertCallbacksPage.<DoSomeWebAccess>d__6.MoveNext()
 
------------------------------------------------------------
英語のエラーメッセージです。

InnerException {System.Runtime.InteropServices.COMException (0x80072F0D): The text associated with this error code could not be found.

The certificate authority is invalid or incorrect

at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Net.Http.HttpHandlerToFilter.d__15.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Net.Http.DiagnosticsHandler.d__2.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Net.Http.HttpClientHandler.d__111.MoveNext()} System.Exception {System.Runtime.InteropServices.COMException}

------------------------------------------------------------


https://stackoverrun.com/ja/q/12993698


⇒対応が失敗続き、、、、


⇒対応は、
if (client == null)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var httpClientHandler = new HttpClientHandler();
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
client = new HttpClient(httpClientHandler);
}

とネットの情報を真似て実装したが、動作しなかった。正しい実装は、




if (client == null)
{
var httpClientHandler = new HttpClientHandler();
#if DEBUG
//証明書が無効でも正常を返す。
httpClientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
#endif         
client = new HttpClient(httpClientHandler);
}


■7 UWP セキュリティの対応プロトコルが含まれていない。

例外がスローされました: 'System.NotSupportedException' (System.Net.ServicePoint.dll の中)
System.NotSupportedException: The requested security protocol is not supported.
   at System.Net.ServicePointManager.ValidateSecurityProtocol(SecurityProtocolType value)
   at System.Net.ServicePointManager.set_SecurityProtocol(SecurityProtocolType value)
   at AlertCallbacks.AlertCallbacksPage.<DoSomeWebAccess>d__6.MoveNext()


問題のコード
if (client == null)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var httpClientHandler = new HttpClientHandler();
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
client = new HttpClient(httpClientHandler);
}


対応コード
//https://support.microsoft.com/ja-jp/help/3069494/cannot-connect-to-a-server-by-using-the-servicepointmanager-or-sslstre
//↓このコードを書かないことが望ましい。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;


別の問題の調査でこれをいじったことが原因だった。


■8 Android ネットワークダウンのエラーが発生する。(Andoroidシミュレータ)

[0:] System.Net.Http.HttpRequestException: Network subsystem is down ---> System.Net.Sockets.SocketException: Network subsystem is down
  at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x000c8] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:65
   --- End of inner exception stack trace ---
  at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x00180] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:84
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
  at System.Net.Http.HttpConnectionPool.CreateConnectionAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x000ea] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:371
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
  at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (System.Threading.Tasks.ValueTask`1[TResult] creationTask) [0x000a2] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:529
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
  at System.Net.Http.HttpConnectionPool.SendWithRetryAsync (System.Net.Http.HttpRequestMessage request, System.Boolean doRequestAuth, System.Threading.CancellationToken cancellationToken) [0x0003f] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:284
  at System.Net.Http.RedirectHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x00070] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs:32
  at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs:506
  at AlertCallbacks.AlertCallbacksPage.DoSomeWebAccess () [0x000e5] in D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello\Hello\Hello\Database\AlertCallbacksPage.xaml.cs:79
05-15 11:09:53.973 D/EGL_emulation(19810): eglMakeCurrent: 0xdff05600: ver 3 0 (tinfo 0xc7cfd4c0)


⇒サーバ側が、localhostの証明書設定だった。

↓のサイトを参考に対応
https://qiita.com/ledsun/items/ca77c60aad424438cdd7

applicationHost.configを編集


■9 Android ネットワークダウンのエラーが発生する。(実機)


[0:] System.Net.Http.HttpRequestException: Connection refused ---> System.Net.Sockets.SocketException: Connection refused
  at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x000c8] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:65
   --- End of inner exception stack trace ---
  at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x00180] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:84
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
  at System.Net.Http.HttpConnectionPool.CreateConnectionAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x000ea] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:371
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
  at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (System.Threading.Tasks.ValueTask`1[TResult] creationTask) [0x000a2] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:529
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
  at System.Net.Http.HttpConnectionPool.SendWithRetryAsync (System.Net.Http.HttpRequestMessage request, System.Boolean doRequestAuth, System.Threading.CancellationToken cancellationToken) [0x0003f] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:284
  at System.Net.Http.RedirectHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x00070] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs:32
  at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs:506
  at AlertCallbacks.AlertCallbacksPage.DoSomeWebAccess () [0x000e5] in D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello\Hello\Hello\Database\AlertCallbacksPage.xaml.cs:79
05-15 20:23:45.182 I/mpanyname.hell(13708): Compiler allocated 4MB to compile void android.text.StaticLayout.generateForCJK(android.text.StaticLayout$Builder, boolean, boolean)
05-15 20:23:45.236 I/chatty  (13708): uid=10516(com.companyname.hello) Jit thread pool identical 1 line
05-15 20:23:45.281 I/mpanyname.hell(13708): Compiler allocated 4MB to compile void android.text.StaticLayout.generateForCJK(android.text.StaticLayout$Builder, boolean, boolean)

対応は、■8と同じ


■10 IIS Expressが外部からつながらない


https://qiita.com/ledsun/items/ca77c60aad424438cdd7


Windows ファイアーウォールの設定のみを実施

対応は、ポートを開けた
https://qiita.com/ledsun/items/ca77c60aad424438cdd7


■11 Android(実機)他のマシンから見るとHTTPエラー400が発生する

[0:] response:BadRequest
[0:] responseString:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>


また、他の端末(MAC)からのブラウザ表記でもBadRequsetエラーとなった


⇒WebアプリのVisual Studioを管理者権限で実行して対応


■12 WebApp IIS Expressの管理者権限実行


---------------------------
Microsoft Visual Studio
---------------------------
Web サーバー 'IIS Express' に接続できませんでした。
---------------------------
OK 
---------------------------

⇒httpsのIPアドレスが間違っている


対応は、
applicationHost.configを編集した際のIPアドレスが間違っていた。


■13 Andorid IDEのエラーチェックの問題



重大度レベル コード 説明 プロジェクト ファイル 抑制状態
メッセージ IDE0044 フィールドを読み取り専用にします Hello D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello.Mobile\Hello\Hello\Database\AlertCallbacksPage.xaml.cs 20 アクティブ

課題
IDE0044には、複数の精度の問題があります。

対応

https://stackoverflow.com/questions/50399422/suppress-a-warning-for-all-projects-in-visual-studio


■14 Andirid IDE


重大度レベル コード 説明 プロジェクト ファイル 抑制状態
メッセージ CA1031 Modify 'DoSomeWebAccess' to catch a more specific exception type, or rethrow the exception. Hello D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello.Mobile\Hello\Hello\Database\AlertCallbacksPage.xaml.cs 93 アクティブ


今の時点で対応残はない。



■15 ログの埋め込み Sirilog




■16 UWP ContinueWithメソッドが機能しない問題

課題
ContinueWithメソッドが機能しない問題
task.ContinueWith(AlertDismissedCallback);

⇒この処理で、AlertDismissedCallbackが呼び出されませんでした。。。なぜ?

実施したこと

    <PackageReference Include="Xamarin.Forms" Version="4.4.0.991265" />
    <PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="6.1.9" />
    <PackageReference Include="Xamarin.Essentials" Version="1.3.1" />



    <PackageReference Include="Xamarin.Forms" Version="4.6.0.772" />
    <PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="6.2.10" />
    <PackageReference Include="Xamarin.Essentials" Version="1.5.3.2" />

対応は、
「ソリューションのクリーン」を行いフルビルドを行ったが、なおらずに
UWPプロジェクトのプロパティ>アプリケーション>からターゲットバージョンを修正したらなおりました。

Windows 10 version 2004を追加。


■17 iOS 実機 シミュレーターは動作するが、実機でのデバック実行が何時までまっても始まらない。

対応は、
MacのVisual Studioを更新したら、デバックができるようになりました。

昨日、更新たばかりなのですが、■16のリリースに伴い、Mac側も対応が必要になったということですね。


■18 Andorid 実機で配置エラーが発生する。

エラーメッセージ
Microsoft Visual Studio
------------------------------------------------------------
配置エラーが発生しました。続行しますか?

続行しても、進めないということで、エラーメッセージの詳細を見る。

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー ADB0010:  Deployment failed
Mono.AndroidTools.InstallFailedException: Unexpected install output:
Exception occurred while executing:
android.os.ParcelableException: java.io.IOException: Requested internal only, but not enough space
at android.util.ExceptionUtils.wrap(ExceptionUtils.java:34)
at com.android.server.pm.PackageInstallerService.createSession(PackageInstallerService.java:501)
at com.android.server.pm.PackageManagerShellCommand.doCreateSession(PackageManagerShellCommand.java:2415)
at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:907)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:158)
at android.os.ShellCommand.exec(ShellCommand.java:103)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:25981)
at android.os.Binder.shellCommand(Binder.java:642)
at android.os.Binder.onTransact(Binder.java:540)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:3329)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4782)
at android.os.Binder.execTransact(Binder.java:739)
Caused by: java.io.IOException: Requested internal only, but not enough space
at com.android.internal.content.PackageHelper.resolveInstallVolume(PackageHelper.java:531)
at com.android.internal.content.PackageHelper.resolveInstallVolume(PackageHelper.java:447)
at com.android.internal.content.PackageHelper.resolveInstallVolume(PackageHelper.java:462)
at com.android.server.pm.PackageInstallerService.createSessionInternal(PackageInstallerService.java:657)
at com.android.server.pm.PackageInstallerService.createSession(PackageInstallerService.java:499)
... 10 more

   場所 Mono.AndroidTools.Internal.AdbOutputParsing.CheckInstallSuccess(String output, String packageName) 場所 E:\A\_work\548\s\External\androidtools\Mono.AndroidTools\Internal\AdbOutputParsing.cs:行 345
   場所 Mono.AndroidTools.AndroidDevice.<>c__DisplayClass95_0.<InstallPackage>b__0(Task`1 t) 場所 E:\A\_work\548\s\External\androidtools\Mono.AndroidTools\AndroidDevice.cs:行 753
   場所 System.Threading.Tasks.ContinuationTaskFromResultTask`1.InnerInvoke()
   場所 System.Threading.Tasks.Task.Execute()
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 AndroidDeviceExtensions.<PushAndInstallPackage>d__11.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Devices\AndroidDeviceExtensions.cs:行 187
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   場所 AndroidDeviceExtensions.<PushAndInstallPackage>d__11.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Devices\AndroidDeviceExtensions.cs:行 203
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   場所 Xamarin.AndroidTools.AndroidDeploySession.<InstallPackage>d__112.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Sessions\AndroidDeploySession.cs:行 433
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   場所 Xamarin.AndroidTools.AndroidDeploySession.<RunAsync>d__106.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Sessions\AndroidDeploySession.cs:行 217
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
   場所 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   場所 Xamarin.AndroidTools.AndroidDeploySession.<RunLoggedAsync>d__104.MoveNext() 場所 E:\A\_work\548\s\External\androidtools\Xamarin.AndroidTools\Sessions\AndroidDeploySession.cs:行 119 0

対応は、容量なしなので、本体のメモリを空けて対応


■19 iOS 実機 画面の一部が隠れてしまう


Xamarin OnPlatformを使用すると良い。

https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/xaml/xaml-basics/essential-xaml-syntax?WT.mc_id=aiapril-xamblog-masoucou#platform-differences-with-onplatform

C#で対応

Device.OnPlatform(iOS: () => { Padding = new Thickness(0, 20, 0, 0); });

Xamlで対応

    <ContentPage.Padding>
        <OnPlatform x:TypeArguments="Thickness">
            <On Platform="iOS" Value="0, 20, 0, 0" />
            <On Platform="Android, UWP" Value="0, 0, 0, 0" /> <!-- 削除可能 -->
        </OnPlatform>
    </ContentPage.Padding>

補足

他のやり方で共有プロジェクト(SAP)作成して、

#if __IOS__
Padding = new Thickness(0, 20, 0, 0);
#endif

という手もある。


■20 処理 AcitonをEventに紐付けようとして失敗した。

どうもActionとEventは機構が違うのでダメらしい。(エビデンスなし)
う~ん。ひと手間加えれば、繋がりますが、コンパイラに手を入れたほうが良いテーマですね。

SizeChanged += new EventHandler(AlertCallbacksPage_SizeChanged);
SizeChanged += AlertCallbacksPage_SizeChanged;
//これが出来ない? ActionとEvent(event, delegate)は機構がそもそも違う??
//Action<object, EventArgs> onclick = (s, e) => { };
//SizeChanged += onclick;
SizeChanged += delegate { };
SizeChanged += delegate(object sender, EventArgs args) { };
SizeChanged += (s, e) => { };


■21 Android シミュレーターでRotate(画面の縦/横の自動回転)ががうまくいかない


シミュレーター側は、Ctrl+L/Rで、Rotateができます。

対応は、Android OSの設定で、「Auto-rotate screen」がOffになっているので、Onにする


■22 Android シミュレーターのRotateでSystem.ArgumentNullExceptionエラーが発生する

発生するエラー
**System.ArgumentNullException:** 'Value cannot be null.
Parameter name: enumerable'

System.ArgumentNullException
  Message=Value cannot be null.
Parameter name: enumerable

・・・全く原因が不明、とりあえず、実機で動作するかを検証する。⇒実機でも結果は同じ

共通項はAndroid 9.0ということ


https://stackoverflow.com/questions/58435211/i-am-getting-nullreferenceexception-when-devices-orientation-change-in-xamarin-f

MainActivity.csに↓を追加しました。

using Android.Content.Res;

        public override void OnConfigurationChanged(Configuration newConfig)
        {
            base.OnConfigurationChanged(newConfig);
        }

↓しかし、まだ、ここにパラメータ enumerable がない。

System.ArgumentNullException
  Message=Value cannot be null.
Parameter name: enumerable


- $exception {System.ArgumentNullException: Value cannot be null.
Parameter name: enumerable
  at Xamarin.Forms.Internals.EnumerableExtensions.IndexOf[T] (System.Collections.Generic.IEnumerable`1[T] enumerable, T item) [0x00003] in D:\a\1\s\Xamarin.Forms.Core\EnumerableExtensions.cs:79
  at Xamarin.Forms.Application.OnRequestedThemeChanged (Xamarin.Forms.AppThemeChangedEventArgs args) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Application.cs:172
  at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnConfigurationChanged (Android.Content.Res.Configuration newConfig) [0x0001e] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\FormsAppCompatActivity.cs:90
  at Hello.Droid.MainActivity.OnConfigurationChanged (Android.Content.Res.Configuration newConfig) [0x00001] in D:\dev\sample_gomi\20200514_XamarinFormsSimple\Hello.Mobile\Hello\Hello.Android\MainActivity.cs:37
  at Android.App.Activity.n_OnConfigurationChanged_Landroid_content_res_Configuration_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_newConfig) [0x00011] in <4ccdb3137d974856b786e1aeebbfbab6>:0
  at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.12(intptr,intptr,intptr)} System.ArgumentNullException


newConfig = {{1.0 310mcc260mnc [en_US] ldltr sw411dp w683dp h387dp 420dpi nrml land finger qwerty/v/v -nav/h winConfig={ mBounds=Rect(0, 0 - 1794, 1080) mAppBounds=Rect(126, 0 - 1920, 1080) mWindowingMode=fullscreen mActivityType=standard} s.14}}

う~ん。

近いしい記事として、↓がある。Xamarin

https://github.com/xamarin/Xamarin.Forms/issues/10712


対応は、
Xamarin.Formsのバージョンが4.6.0.726
だと動作するが、
Xamarin.Forms 4.6.0.772
だとうまく動作しません。


ということで、Xamarin.Formsのバージョンを一つだけ下げました。

結果、MainActivity.csのvoid OnConfigurationCahngedのverfideは必要ありませんでした。


■23 Android ビルドエラー

ん?

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー failed to open directory: 謖・ョ壹&繧後◆繝輔ぃ繧、繝ォ縺瑚ヲ九▽縺九j縺セ縺帙s縲・(2). ModelessAndModal.Droid D:\dev\sample_gomi\20200514_XamarinFormsSimple\ModelessAndModal笘・ModelessAndModal\ModelessAndModal.Droid\obj\Debug\81\lp\12\jl\res

エラーが文字化けしているが、Directoryのオープンに失敗しているようです。


しかし、文字化けでどこのディレクトリに失敗しているかが不明

Resource/layout/Tabbar.axml
Resource/layout/Toolbar.axml

の2つがデザイナで開けないことを確認


対応策は、




■24 Android 警告エラー API 16がサポートされていない。


重大度レベル コード 説明 プロジェクト ファイル 抑制状態
警告 AndroidManifest.xml //uses-sdk/@android:minSdkVersion '15' is less than API-16, this configuration is not supported. ModelessAndModal.Droid D:\dev\sample_gomi\20200514_XamarinFormsSimple\ModelessAndModal★\ModelessAndModal\ModelessAndModal.Droid\Properties\AndroidManifest.xml



対応策は、
AndroidのターゲットをAndroid 9.0に変更

そして、AndroidManifest.xmlのsdkバージョンを変更

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28" />
<application android:label="ModelessAndModal.Droid"></application>
</manifest>



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="28" android:targetSdkVersion="28" />
<application android:label="ModelessAndModal.Droid"></application>
</manifest>


SDKをインストールすれば動作するかと思うが対応せずに、SDKの対象バージョンを変更した。

■25 iOS 実機でデバック実行ができない。シミュレーターは動作します。

The project ModelessAndModal.iOS is not configured to be deployed. Please, enable it in the Solution Configuration Manager.

対策は、
ソリューション>構成マネージャで、iOSのプロジェクトの配置にチェックが付いていませんでした。

はて?どこで消えたのでしょうか?原因は不明ですが、対応しました。


■26 UWP 配置エラーが発生 マニフェストファイルが読み込めない。


重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー DEP1560: マニフェスト ファイル "D:\ModelessAndModal★\ModelessAndModal\ModelessAndModal.UWP\bin\x86\Debug\Core\AppxManifest.xml" を読み取ることができませんでした。再生成する必要がある可能性があります。[ソリューションのリビルド] コマンドを実行して、エラーの修正を試みてください。DirectoryNotFoundException - パス 'D:\ModelessAndModal★\ModelessAndModal\ModelessAndModal.UWP\bin\x86\Debug\Core\AppxManifest.xml' の一部が見つかりませんでした。 [0x80070003] ModelessAndModal.UWP


これは、パスの変更が影響している

対応は、
プロジェクトのクリーンを実行して、ビルド>デバック実行を行い対応した。


■27 Android シミュレーター モーダレスページからの戻りでエラーが発生。

System.ArgumentOutOfRangeException
  Message=Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

スペルミスで、モードレスの画面遷移にモーダルの画面スタックを戻す処理を入れてしまいました。

もう自分はアホなのかと思いました。

対処は、
await Navigation.PopModalAsync();

await Navigation.PopAsync();


■28 iOS 実機でアプリケーションをZoomへ戻そうと左上の「Goto Zoom」を押したら、エラーが発生した。

**System.ArgumentNullException:** 'Value cannot be null.
Parameter name: enumerable'

Androidのときに修理で、1つバージョンXamarin.Formsを使用して回避したので、その同じやり方で対応する。

対応は、
Xamarin.Forms 4.6.0.772

Xamarin.Forms 4.6.0.726

にすることで回避しました。


■29 Android 実機(タブレット)、開発者向けオプションが表示されない

対応は、
開発者向けオプションが表示されていなければ、 設定 > システム > タブレット情報 > ビルド番号 を連打して表示させる

うまくいくと、デバック実行の対象に「Teclast M30(Android 8.0 - API26)」が表示されます。


■30 Androrid 実機(タブレット)、M30 Android 8.0(API 26)にてエラーが発生する。

エラーの詳細

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー The $(TargetFrameworkVersion) for MasterDetailBehaviors.Droid (v8.1) is less than the minimum required $(TargetFrameworkVersion) for Xamarin.Forms (9.0). You need to increase the $(TargetFrameworkVersion) for MasterDetailBehaviors.Droid. MasterDetailBehaviors.Droid


原因は、ターゲットフレームワークの最低バージョンを9.0としているため、8.0ではビルドできない。

試みた対応は、
・Andorid SDKに、Android 8.0(API26)の「Android SDK Platfrom 26」がなかったので、追加した。
・XXX.Droidプロジェクトのプロパティのターゲットフレームワークを「Andorid 8.0(Oreo)」に変更した。

しかし、現象は改善されない。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="26" />
<application android:label="MasterDetailBehaviors.Droid"></application>
</manifest>

↓この対応でもNGでした。。。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="26" />
<application android:label="MasterDetailBehaviors.Droid"></application>
</manifest>




重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー Failed to create JavaTypeInfo for class: Android.Support.V4.View.Accessibility.AccessibilityManagerCompat/IAccessibilityStateChangeListenerImplementor due to MAX_PATH: System.IO.DirectoryNotFoundException: パス 'D:\dev\sample_gomi\20200514_XamarinFormsSimple\MasterDetailBehaviors\MasterDetailBehaviors\MasterDetailBehaviors.Droid\obj\Debug\90\android\src\mono\android\support\v4\view\accessibility\AccessibilityManagerCompat_AccessibilityStateChangeListenerImplementor.java' の一部が見つかりませんでした。
   場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   場所 System.IO.File.InternalDelete(String path, Boolean checkHost)
   場所 System.IO.File.Delete(String path)
   場所 Xamarin.Android.Tools.Files.CopyIfStreamChanged(Stream stream, String destination)
   場所 Xamarin.Android.Tasks.Generator.CreateJavaSources(TaskLoggingHelper log, IEnumerable`1 javaTypes, String outputPath, String applicationJavaClass, String androidSdkPlatform, Boolean useSharedRuntime, Boolean generateOnCreateOverrides, Boolean hasExportReference) MasterDetailBehaviors.Droid



1)過去は
2018年8月以降、Google Play コンソールでは、新しいアプリが API レベル 26 (Android 8.0) 以降を対象とする必要があります。 既存のアプリは、2018年11月以降の API レベル26以降をターゲットにする必要があります。 詳細については、「 Google Play でのアプリのセキュリティとパフォーマンスの向上」を参照してください。

https://docs.microsoft.com/ja-jp/xamarin/android/app-fundamentals/android-api-levels?tabs=windows


2)では、現在はどうなの?

Xamarin.Forms でサポートされているプラットフォーム
https://docs.microsoft.com/ja-jp/xamarin/get-started/supported-platforms?tabs=windows

⇒Andorid 4.4 API19から対応しているように記載している。



試しにXamarin.Formsを
4.6.0.772

4.4.0.991864
へ変更して試してみる。

この試す仮設は、Xamarin.Formsによって、対応しているAndroidの最低バージョンが決まっているのではないかという疑念があるため。


試した結果、↓のエラーとなり、Xamarin.Fromsのバージョンによって、Androidの最低バージョンが変わりました。

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー The $(TargetFrameworkVersion) for MasterDetailBehaviors.Droid (v8.0) is less than the minimum required $(TargetFrameworkVersion) for Xamarin.Forms (8.1). You need to increase the $(TargetFrameworkVersion) for MasterDetailBehaviors.Droid. MasterDetailBehaviors.Droid


ということは、調査をはしらせる。


Xamarin.Forms       4.6.0.772 Android 9.0・・バグ有り版。
Xamarin.Forms       4.6.0.726 Android 9.0
Xamarin.Forms       4.5.0.725 Android 9.0
Xamarin.Forms 4.4.0.991864 Android 8.1
Xamarin.Forms 4.3.0.991250 Android 8.1
Xamarin.Forms 4.2.0.910310 Android 8.1・・試していないけど多分8.1
Xamarin.Forms 4.1.0.778454 Android 8.1・・試していないけど多分8.1
Xamarin.Forms 4.0.0.709238 Android 8.1
Xamarin.Forms 3.6.0.709228 Android 8.1が最低バージョン
Xamarin.Forms 3.5.0.274416 ビルドが通らない...※
Xamarin.Forms 3.4.0.1039999 Android 8.0(OREO)は動く
Xamarin.Forms 3.3.0.967583 Android 8.0(OREO)は動く
Xamarin.Forms 3.2.0.871581 Android 8.0(OREO)は動く
Xamarin.Forms 3.1.0.697729 Android 8.0(OREO)は動く

⇒結論、Xamarin.Formsのバージョンを変更することで、Android 8.0でも動作したが、、、、あまりよろしくない。



※エラーは2つ

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー CS0115 'MainActivity.OnCreate(Bundle)': オーバーライドする適切なメソッドが見つかりませんでした。 MasterDetailBehaviors.Droid D:\MasterDetailBehaviors\MasterDetailBehaviors\MasterDetailBehaviors.Droid\MainActivity.cs 15 アクティブ

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー CS0234 型または名前空間の名前 'Android' が名前空間 'Xamarin.Forms.Platform' に存在しません (アセンブリ参照があることを確認してください)。 MasterDetailBehaviors.Droid D:\MasterDetailBehaviors\MasterDetailBehaviors\MasterDetailBehaviors.Droid\MainActivity.cs 13 アクティブ


■31 ビルドエラーが発生する。しかし、エラー箇所がNuGetで取得したパッケージの内容となっている。



重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー MSB4064 "ValidateOnly" パラメーターは "XamlCTask" タスクではサポートされていません。タスク上にパラメーターが存在し、設定可能なパブリック インスタンス プロパティであることを確認してください。 MasterDetailBehaviors C:\Users\k-abe\.nuget\packages\xamarin.forms\4.6.0.772\buildTransitive\Xamarin.Forms.targets 120
エラー MSB4063 "XamlCTask" タスクを指定の入力パラメーターで初期化できませんでした。 MasterDetailBehaviors C:\Users\k-abe\.nuget\packages\xamarin.forms\4.6.0.772\buildTransitive\Xamarin.Forms.targets 114


同様のもd内で悩んでいる
https://github.com/xamarin/Xamarin.Forms/issues/8209


対応は、Xamarin.Formsを4.6.0.726に戻したら治りました。


■32

疲れた。。。