すぱこみっく!ユニバースVer. 1.2.5とすぱーダVer. 1.0.8をリリースしました(+α)

こんにちはー!ニアです。

本日、すぱこみっく!ユニバース及びすぱーダの最新バージョンをリリースしました。

1. アップデート内容

  • すぱこみっく!ユニバース : Ver. 1.2.3 → Ver. 1.2.5
  • すぱーダ : Ver. 1.0.5 → Ver. 1.0.8
  • エクすぱーダ : Ver. 1.0.2 → Ver. 1.0.8
  • ユニすぱーダ : Ver. 1.0.2 → Ver. 1.0.8

すぱこみっく!ユニバースでは、主にパフォーマンスの改善です。

コミックビューのページとアプリ設定のページを破棄した時に、対応するViewModelがメモリ上に残り続けるバグがあったので、それを修正しました。

なお、この修正はアイコンフォントこれくしょんの最新バージョン(Ver. 1.2.4)にも施しています。

すぱーダでは、すぱこーRSSフィードの各話のデータを格納するSpacoRSSItemクラスに、引数付き及びコピーコンストラクターを追加しました。

// 引数付きコンストラクター
public SpacoRSSItem(
	 string title = default( string ), string author = default( string ), string link = default( string ), DateTime pubDate = default( DateTime ),
	 string description = default( string ), int volume = default( int ), DateTime modifiedDate = default( DateTime ), bool isAvailable = default( bool ),
	 string mediaURL = default( string ), string thumbnailURL = default( string ), string id = default( string ) ) {
	Title = title;
	Author = author;
	Link = link;
	PubDate = pubDate;
	Description = description;
	Volume = volume;
	ModifiedDate = modifiedDate;
	IsAvailable = isAvailable;
	MediaURL = mediaURL;
	ThumbnailURL = thumbnailURL;
	ID = id;
}

// コピーコンストラクター
protected SpacoRSSItem( SpacoRSSItem item )
	: this(
		title: item?.Title, author: item?.Author, link: item?.Link, pubDate: item?.PubDate ?? default( DateTime ),
		description: item?.Description, volume: item?.Volume ?? default( int ), modifiedDate: item?.ModifiedDate ?? default( DateTime ), isAvailable: item?.IsAvailable ?? default( bool ),
		mediaURL: item?.MediaURL, thumbnailURL: item?.ThumbnailURL, id: item?.ID
	) {
}

後者は、派生クラスでSpacoRSSItemを引数に初期化するコンストラクターを定義する時、SpacoRSSItemの分を基底クラスのコンストラクターに任せることで、メンバーの初期化が派生クラスで追加したものだけで済むようになります。

public class DerivedSpacoRSSItemOld : SpacoRSSItem {
	public string Addtion { get; set; }
	
	public DerivedSpacoRSSItemOld( string addtion = "", SpacoRSSItem item )
	: base() {
		Addtion = addtion;
		if( item != null ) {
			Title = item.Title;
			Description = item.Description;
			Author = item.Author;
			PubDate = item.PubDate;
			Link = item.Link;
			ModifiedDate = item.ModifiedDate;
			Volume = item.Volume;
			IsAvailable = item.IsAvailable;
			MediaURL = item.MediaURL;
			ThumbnailURL = item.ThumbnailURL;
			ID = item.ID;
		}
	}
}

// ↓

public class DerivedSpacoRSSItemNew : SpacoRSSItem {
	public string Addtion { get; set; }
	
	public DerivedSpacoRSSItemNew( string addtion = "", SpacoRSSItem item )
	: base( item ) {
		Addtion = addtion;
	}
}

2. すぱこみっく!ユニバースVer. 1.2.4及びすぱーダVer. 1.0.6での不具合について

実はVer. 1.2.5のリリース前に、Ver. 1.2.4を提出していたのですが、すぱこーRSSフィードの取得や表示ができないという、コンテンツとして重大な不具合がありました。

Ver. 1.2.4では、どうやってもこのエラー画面になっていました。

この不具合は、すぱこみっく!ユニバースで使用している、ユニすぱーダ Ver. 1.0.6で新規に追加したコピーコンストラクターでの初期化ミスが原因でした。

C#では、コンストラクターから別のコンストラクターを呼び出す時は、以下のようにコンストラクター初期化子(以下のコードの12行目にあるthisキーワードの部分)を使用します。

// 間違った方法
protected SpacoRSSItem( SpacoRSSItem item )
	new SpacoRSSItem (
		title: item?.Title, author: item?.Author, link: item?.Link, pubDate: item?.PubDate ?? default( DateTime ),
		description: item?.Description, volume: item?.Volume ?? default( int ), modifiedDate: item?.ModifiedDate ?? default( DateTime ), isAvailable: item?.IsAvailable ?? default( bool ),
		mediaURL: item?.MediaURL, thumbnailURL: item?.ThumbnailURL, id: item?.ID
	);
}

// 正しい方法
protected SpacoRSSItem( SpacoRSSItem item )
	: this(
		title: item?.Title, author: item?.Author, link: item?.Link, pubDate: item?.PubDate ?? default( DateTime ),
		description: item?.Description, volume: item?.Volume ?? default( int ), modifiedDate: item?.ModifiedDate ?? default( DateTime ), isAvailable: item?.IsAvailable ?? default( bool ),
		mediaURL: item?.MediaURL, thumbnailURL: item?.ThumbnailURL, id: item?.ID
	) {
}

間違った方法の場合、コンストラクター内で有効なローカルなインスタンスを生成しているだけで、そもそもメンバーを初期化していない(厳密に言えば規定値で初期化している)のです。(コピーコンストラクターの意味ナス)

そのため、派生クラスでコピーコンストラクターを利用していたすぱこみっく!ユニバース Ver. 1.2.4では、RSSフィードのリストが正しく生成できていませんでした。

ただし、WebからRSSフィードを取得していた場合、ローカルファイルに書き込む前にエラーが発生するので、Ver. 1.2.3以前でローカルに保存済みのRSSフィードのデータには影響がありません。Ver. 1.2.5へアップデートすることで、そのデータを再び読み込むことができます。

現在では、その不具合を修正したバージョンがリリースされています。もし、すぱこみっく!ユニバースVer. 1.2.4及びすぱーダVer. 1.0.6をお持ちの方はお手数ですが、最新バージョンにアップデートをお願いします。

  • すぱこみっく!ユニバース : Ver 1.2.5をストアにリリースし、Ver. 1.2.4を置き換え
  • スパーダ : Ver. 1.0.8をNuGetギャラリーにリリースし、Ver. 1.0.6は削除

すぱこみっく!ユニバース及びすぱーダをご利用の方には、ご不便をおかけしたことをお詫び申し上げます。

なお、アイコンフォントこれくしょんに関しては、本不具合はありませんでした。

3. おわりに

何ともあれ、当日中にアプリの不具合を解決できてよかったです。

すぱこみっく!ユニバース Ver. 1.2.5では、Ver. 1.2.4を即急に置き換えるため、ユニすぱーダをVer. 1.0.2にロールバックしてリリースしましたが、最新バージョンのVer. 1.0.8でRSSフィードのリストを正しく生成できることを確認しました。次期バージョンからは新バージョンのユニすぱーダを入れようと思います。

それでは、See you next!

コメント

タイトルとURLをコピーしました