ディーバ Blog

大阪発 C#の会社、株式会社ディーバの Blog です。

Xamarin.iOS で psd ファイルを表示

Visual Studio (Xamarin.iOS)の iOS アプリで Photoshop ファイル(.psd ファイル)を、できるだけお手軽に表示する方法です。

UIWebView

iOS 10 から UIWevView で psd ファイルが表示できるようになっています! JPEG 画像と同じように表示するだけで psd ファイルが描画されます。

webView.LoadRequest(new NSUrlRequest("file://***"));

PSD Plugin for Paint.NET

C# によるライブラリでは、Paint.NET で psd ファイルを読み込み・保存可能にするプラグイン「PSD Plugin for Paint.NET」を開発されている方がいます。

Xamarin.iOS プロジェクトに組み込んでみたところ、少しの修正で使えました。コードは割愛。

プラグインのソースコードは、CodePlex にあります(MIT ライセンス)。現在のバージョンは、Version 2.5.0 (Sep 11, 2016)。

特徴は、レイヤー情報も読み込めます。ただし、各レイヤーの合成は Paint.NET 本体の仕事です。合成しようとすると、また別に自力で処理が必要なため、使いどころは難しそうです。。

Magick.NET

最後は参考情報です。

C# 製の画像ライブラリ「Magick.NET」では、psd ファイルも扱えます。ただし Windows 専用です。

.NET Core 版も開発されていますが、現在(Version 7.0.5.502)は、Windows でのみしか動きません。今後、Xamarin.iOS 等と組み合わせて使えるようになるかもしれません。

例外 Foundation.You_Should_Not_Call_base_In_This_Method

Xamarin で開発していると「Foundation.You_Should_Not_Call_base_In_This_Method: Exception of type ‘Foundation.You_Should_Not_Call_base_In_This_Method’ was thrown.」という例外とメッセージが出ることがあります。

名前の通り、base クラスのメソッドを呼び出してはいけません。UITableViewSource など override して使っているメソッドで、エディターが自動挿入した base クラスへの呼び出しがないか確認してみてください。

Xamarin + MvvmCross などの環境の場合、ピンポイントで例外発生場所を示してくれないときがあります。TableViewSource の場合、CanEditRow メソッドなどが base クラスのメソッドをつかえません。

MvvmCross + Xamarin.iOS で NavigationBar 付きの modal 画面を使う

MvvmCross で画面遷移は ViewModel 側で ShowViewModel<SecondViewModel>() のように ShowViewModel メソッドを使います。

github.com

このとき iOS アプリで modal 画面として表示する方法です。

IMvxModalIosView の実装

View 側のクラスは IMvxModalIosView を実装します。

public partial class SecondView : MvxViewController<SecondViewModel>, IMvxModalIosView<SecondViewModel>
{
    public SecondView(IntPtr handle) : base(handle)
    {
    }
}

MvxIosViewPresenter のカスタマイズ

デフォルトの Presenter クラスを override することで、iOS の画面遷移・表示をカスタマイズできます。modal 表示をサポートするクラスが用意されているので、これを使います。

AppDelegate.cs にある次の部分を修正します。

var setup = new Setup(this, Window);
setup.Initialize();

単に modal を使う場合は、MvxModalSupportIosViewPresenter クラスを使います。この場合は modal 画面の NavigationController は null になります。

var presenter = new MvxModalSupportIosViewPresenter(this, Window);
var setup = new Setup(this, presenter);
setup.Initialize();

NavigationBar を付けて modal 画面を表示したい場合は、MvxModalNavSupportIosViewPresenter クラスを使います。

var presenter = new MvxModalNavSupportIosViewPresenter(this, Window);
var setup = new Setup(this, presenter);
setup.Initialize();

何をしているかはソースコードを読むしかありません。

github.com

Xamarin.Android で interface を実装するとき Handle と Dispose の実装

Xamarin.Android で Listener などの interface を実装しようとしたとき、Handle プロパティと Dispose メソッドを実装する必要があります。

class SampleListener : AppBarLayout.IOnOffsetChangedListener
{
    public IntPtr Handle => throw new NotImplementedException();

    public void Dispose()
    {
        throw new NotImplementedException();
    }

    public void OnOffsetChanged(AppBarLayout appBarLayout, int verticalOffset)
    {
        throw new NotImplementedException();
    }
}

これは Java.Lang.Object を継承すれば解決します。

class SampleListener : Java.Lang.Object, AppBarLayout.IOnOffsetChangedListener
{
    public void OnOffsetChanged(AppBarLayout appBarLayout, int verticalOffset)
    {
        throw new NotImplementedException();
    }
}

「エラー: error MT1108: Could not find developer tools for this 10.2.1 (14D27) device.」でアプリが起動しない

Xamarin (Visual Studio) で次のようなエラーが出る場合の対処です。

起動に失敗しました。アプリ ‘AppName’‘DeviceName’ で起動できませんでした。 エラー: error MT1108: Could not find developer tools for this 10.2.1 (14D27) device. Please ensure you are using a compatible Xcode version and then connect this device to Xcode to install the development support files.

  • アプリの SDK バージョンが iOS 10.1
  • デバッグ対象のデバイスが iOS 10.2
  • Xcode のサポートしているバージョンが iOS 10.1

というように、アプリの配置先の方が新しいバージョンだと起こるようです。

対処は、最新の Xcode をインストールして、アプリの SDK バージョンを対象のデバイスと合わせます。

※ このエラーは Xcode によるもので Xamarin とは直接関係しません。

「Visual Studio 2017 先取り特集」連載の「Visual Studio for Mac」紹介記事が公開されています

2016/2/15、CodeZine で 次期バージョン「Visual Studio 2017(Visual Studio “15")」先取り特集 第3回『使う言語はC#のみ! Macアプリケーションはもちろん、Webアプリやスマホアプリも開発可能な「Visual Studio for Mac」登場』が公開されています。

この第3回は、株式会社ディーバ 代表取締役 青柳臣一が担当しています。

対象読者は次の通り。ご興味のある方はどうぞ。

  • Macでアプリケーション開発をおこなっている方
  • Visual Studioでアプリケーション開発をおこなっていてMacでも開発をおこないたい方
  • Xamarinでの開発をおこなっている方

codezine.jp

ディーバは、エクセルソフト「Xamarin 開発支援サービス」のパートナー企業です

株式会社ディーバは、エクセルソフト株式会社の提供する「Xamarin 開発支援サービス」の パートナー企業 に登録されました。

Xamarin 開発支援サービスについて

2017年1月11日 Xamarin 開発支援サービス プレスリリース より。

エクセルソフトは、Xamarin のエキスパートであるパートナー企業と提携し、モバイル アプリの開発支援サービスを提供開始

エクセルソフト株式会社(東京都港区)は、マイクロソフト社の Visual Studio に統合され、クロスプラットフォーム モバイル アプリの開発環境としてますます注目を集めている Xamarin のエキスパートでモバイル アプリの開発実績のあるパートナー企業と提携し、モバイル アプリの開発支援サービスを 2017 年 1 月 11 日より日本国内で提供開始しました。

株式会社ディーバについて

大阪発 C# の会社「株式会社ディーバ」は、平成4年創立以来 、最新の技術を自分たち自身で確かめ、その技術を元にお客様のさまざまなニーズに幅広くお答えしてきました。Xamarin を活用し最新技術を駆使した iOS / Android / Windows モバイルアプリケーションおよびデスクトップアプリケーション、さらにはサーバーアプリケーションも含めて幅広いソフトウエア開発ソリューションをご提供いたします。

詳細は以下のページをご参照ください。 株式会社ディーバ