くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Visual Studio 15.2 で Can not resolve reference: C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/ja/mscorlib.resources.dll {iOS Project Name} というエラーが出る

環境

  • Visual Studio 2017 15.2

解決策

1. Visual Studio 2017 のインストールフォルダを開く

パスは、 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin

2. Xamarin.Apple.Sdk.targets ファイルを管理権限付きで編集画面を開く(VSCode とかで開けばOK

3. 編集をする

100 行目にある以下の箇所に一文挿入する

$(TargetFrameworkRootPath)$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)

Before

After

情報源

forums.xamarin.com

Xamarin.Android で作成した アプリの Amazon Android アプリストア へアップデート用バイナリを上げるときに、「バイナリのアップロードに失敗しました。アプリでアップロードされたすべてのバイナリのバージョンコードは一意である必要があります。バージョンコード"1"でアップロードされたバイナリは、旧バージョンのいずれかの既存のバイナリのバージョンコードと競合しています。」と出たから解決してみた

Xamarin.Android で作成した アプリの Amazon Android アプリストア へアップデート用バイナリを上げるときに、「バイナリのアップロードに失敗しました。アプリでアップロードされたすべてのバイナリのバージョンコードは一意である必要があります。バージョンコード"1"でアップロードされたバイナリは、旧バージョンのいずれかの既存のバイナリのバージョンコードと競合しています。」と出たから解決してみた

エラー内容画像

環境

  • Amazon Android アプリストア ですでにアプリを公開している
  • Xamarin.Android 製アプリの .apk 出力
  • すでに公開しているアプリに対しアップデートのために .apk ファイルをアップロード時に発生

解決策

Xamarin.Android のプロパティの中にある Android マニフェスト のところから、バージョン番号とバージョン名を変更したらおkでした。

Xamarin.iOS で System.NotSupportedException. ってエラーが出たから解決してみた

エラーメッセージ

System.NotSupportedException: Encoding 932 data could not be found. Make sure you have correct international codeset assembly installed and enabled. 

環境

  • Visual Studio 2017 Enterprise
  • Windows 10 Pro Creators Update
  • mac os 10.12.4
  • iOS 10.3

解決方法

iOS ビルドの詳細設定の 国際化の設定のところの、 CJK をオンにする

参考サイト

stackoverflow.com

Xamarin 勉強会 in 名古屋 を開催しました。

色々あって投稿が遅れましたが(^◇^;)… JXUG と MSP (Microsoft Student Partners) が共同で勉強会を開催しました。
場所は、 日本Microsoft 中部支社を借りて行いました。
なんと、 38 名もの方にご応募いただき、さらに補欠枠がいくつかできるなど、ありがたい限りです。
内容は、 登壇 4本 + LT でした。

jxug.connpass.com

入門的内容から、基礎的な内容までバランスよく混ぜれたかなと思いました。

私は、 「Xamarin を VSTS で便利に使う」という内容で登壇させていただきました。

参加者の声

f:id:kuxumarin:20170419124136p:plain

感想紹介

たくさんのコメントありがとうございます。紹介しきれないので、いくつかピックアップしてご紹介します。

@amay077 さんのセッション

Xamarin.Android で始めるクロスプラットモバイルアプリ開発

  • xamarinで実際に共通化できる部分を具体的に知れてよかった
  • 初心者ながら、何をしたらいいかが掴めました。それから、専門的な事柄多く、なかなか聞けない内容だったので楽しかったです。

@chomado さんのセッション

Visual Studio Mobile Center とXamarin と Azure で作るiOS/Android アプリ

  • “内容は非常に分かりやすかったし、3/14の東京でのセミナーになかった内容もあり、いろいろ新しい事も知ることが出来ました。 ただ、ちょっと時間が長かったように感じました。(あと10分くらい短いとちょうど良いかな、と感じました。)”
  • 概要を知りたかったので基本から応用まで網羅でき良かった。

@kazuki_kachi さんのセッション

今更だけどReactive

  • 難しかったですがRxを勉強しようと思いました。
  • Rxを丁度勉強したいと思っていたのでやくにたつと思いました

@fumiya_kume さんのセッション

VSTS で Xamarin を便利にする!

  • “(学生向けサービスの紹介のため)知らなかったことだったので、「こういうのもあるんだ」と言う事を知ることが出来ました。 時間の関係で多少端折らざるを得なかったと思うので、次回はじっくり話を聞けたら、と思います。”
  • VSTSについてもっと詳しく知りたいと思いました

より良いコミュニティ/勉強会の運営でご希望やコメントがあればお知らせください。

  • 定期的なもくもく会や勉強会ができればいいと思います。
  • 超超超初心者向きの勉強会も、もしよかったら開催してください。
  • JAVAをやっていたが、アプリ開発も視野に入れたく、xamarinの基本的な勉強会があって良かったです。

写真

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17834834_1475247772548580_7212286940498090492_o.jpg?oh=aa63a3b936ee0215565ac1526ffae703&oe=598C0C64

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17854771_1475247719215252_5552700728008388482_o.jpg?oh=ff21cbe3e5d982210b7012f71955b2a8&oe=59814B72

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17807451_1475247509215273_1396018021337513351_o.jpg?oh=8014ae57a971c0d52e30f5a6980b5910&oe=59997B3E

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17854858_1475247342548623_3954597159149668244_o.jpg?oh=1695dcc7c1dff9c8926f2bd8b5c63445&oe=59882E95

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17879920_1475247242548633_1456003615563702401_o.jpg?oh=457e8c57357b432d584e99f7630c4389&oe=598315D7

https://scontent-nrt1-1.xx.fbcdn.net/v/t1.0-0/p296x100/17796825_1473534649386559_838954676787632599_n.jpg?oh=b9c1d1df08d381a89051ca747db32d1c&oe=594DDB27

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17854754_1475247895881901_4672113518321911407_o.jpg?oh=c1c99157f4e1b50afd99abb221045147&oe=598807A6

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17855471_1475247989215225_8943432429250987293_o.jpg?oh=29438cfb733997285685d76f399d88fb&oe=59902787

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17834099_1475248085881882_6049245659893178580_o.jpg?oh=0283a03fe7d06b2aefcf6fc407f3cf85&oe=598B4EB6

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17834840_1475248735881817_392619415528262172_o.jpg?oh=4da99411c2a9a598e7609b29f06b6e17&oe=5992444C

https://scontent-nrt1-1.xx.fbcdn.net/v/t1.0-9/17800254_1475248942548463_4921846407256770102_n.jpg?oh=ed23fa6093b007292d48108569be2e32&oe=597C1C27

https://scontent-nrt1-1.xx.fbcdn.net/v/t31.0-8/17807225_1475249725881718_116702526923608415_o.jpg?oh=9a5556a5d30e7bd73aef18c9c85731c0&oe=59517596

.NET STAMDERD LIBRARY をが含まれている Xamarin.iOS プロジェクト で "ConvertPdbToMdb" タスクが予期せずに失敗しました。 って出るから解決してみた

エラー

重大度レベル コード 説明 プロジェクト ファイル 抑制状態
エラー "ConvertPdbToMdb" タスクが予期せずに失敗しました。Pdb2Mdb.PortablePdbNotSupportedException: Portable PDB 'C:\Users\User Name\Source\Repos...\obj\Release\netstandard1.0\Project Name.pdb' can't be converted to mdb. Consider setting the project 'DebugType' property to 'Full'. 場所 Pdb2Mdb.Converter.Convert(String filename) 場所 C:\d\lanes\4471\3f99c5a7\source\xamarinvs\src\MSBuild\Xamarin.iOS.Tasks\Pdb2mdb\Driver.cs:行 43 場所 Xamarin.iOS.Tasks.ConvertPdbToMdb.Execute() 場所 C:\d\lanes\4471\3f99c5a7\source\xamarinvs\src\MSBuild\Xamarin.iOS.Tasks\Tasks\ConvertPdbToMdb.cs:行 26 場所 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 場所 Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext() Project Name.iOS

解決方法

NET STANDARD Project の プロパティの詳細設定を開く

デバッグ情報を Full にする

参考サイト

bugzilla.xamarin.com

リセットした Mac を Xamarin Mac Agent として設定できなかったから解決した。

状況

状況

Xamarin Mac Agent として Mac たんを設定しようとしても、できなかった。

ログファイルより

Xamarin.VisualStudio.Remote.State.DisconnectedState|Error|0|Mac に対して接続し、作業するには、Xcode ライセンスに同意する必要があります

やったこと

1. Xcode CLI Tool をインストール

ダウンロードリンク

https://developer.apple.com/download/more/developer.apple.com

Xcode の場所を設定

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

Xcode のライセンスに同意

$ sudo xcodebuild -license

新しい SSH フィンガープリントに同意

f:id:kuxumarin:20170413195615p:plain

完了

まとめ

知っていれば、どうでもいいかもしれないけど、知らないとつらい案件

VSTS のビルド結果を Github Badge として表示する方法

VSTS のビルド結果を Github Badge として表示する方法

Github Badge とは

Github へビルド状態のステータスとか Gitter へのリンクなどの小さな画像リンクを表示できるサービスです。

こんなの

今回は、 VSTS のビルド結果を Github で表示しようってやつです!

ほかの種類のbadgeについてはここが詳しい

qiita.com

やってみる

1. VSTS の適当なビルド定義の編集画面を開いてください

2. Options のタブを開いてください

3. Badge Enabled をクリックしてON状態にしてください

ONにしたら一回SAVEしてください

4. 出てきた URL をコピーしてください

テキストボックスの右側にあるアイコンをクリックするとテキストのコピーができます。

5. Github の 編集したい README ファイルの編集画面を開く

その中に以下のテキストを打ち込みます。

![]({さっきコピーしたURL})

6. 見てみる

わーい!

Xamarin Forms Preview で **Unsupported Java Version Detected** ってエラーメッセージが出たから解決してみた。

Xamarin Forms Preview で Unsupported Java Version Detected ってエラーメッセージが出たから解決してみた。

エラーメッセージ

The previewer requires a 64-bit version of Oracle Java JDK 8 (1.8) or higher. Please install it and then set the Java JDK location in the Xamarin Studio or Visual Studio preferences.

解決方法

64 bit バージョンの JDK をインストールする

www.oracle.com

難しいところ

Visual Studio 2017 のインストーラーがデフォでインストールするのが、 32 bit バージョンだということです。

Xamarin.Forms 2.3.4 で追加された Bindable Picker を RxPRop で使ってみた (長濱 ねるちゃんはいいぞ)

Xamarin.Forms 2.3.4 で Picker の Item Source が Bindable になりました。

ソース

blog.xamarin.com

しかし、ネットでググっても、 ReactiveProrpety で 利用しているサンプルがなかったため、自分で書いてみました。

ソース

MainPage.Xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:BindablePickerTest"
             xmlns:viewmodel="clr-namespace:BindablePickerTest.ViewModel;assembly=BindablePickerTest"
             BindingContext="{Binding Source={x:Static viewmodel:DesignTimeViewModel.MainPageViewModel}}"
             x:Class="BindablePickerTest.MainPage">
    <StackLayout 
        Padding="20,20,20,20">
        <Picker HeightRequest="40"
                Title="欅坂46 で一番かわいいのは?"
                ItemsSource="{Binding KEYAKIMember}"
                ItemDisplayBinding="{Binding Name}"
                SelectedItem="{Binding FavoriteMember.Value, Mode=OneWayToSource}"/>
        <Label Text="{Binding FavoriteMember.Value.Name, StringFormat='{0} かわいいよね( ˘ω˘ )'}" />

    </StackLayout>
</ContentPage>

MainPageViewModel.cs

using Reactive.Bindings;

namespace BindablePickerTest.ViewModel
{
    public class MainPageViewModel
    {
        public ReactiveCollection<MemberInfomation> KEYAKIMember { get; set; } = new ReactiveCollection<MemberInfomation>();

        public ReactiveProperty<MemberInfomation> FavoriteMember { get; set; } = new ReactiveProperty<MemberInfomation>();
        
        public MainPageViewModel()
        {

            KEYAKIMember.Add(new MemberInfomation { Name = "長濱 ねる" });
            KEYAKIMember.Add(new MemberInfomation { Name = "渡邊 りさ" });
            KEYAKIMember.Add(new MemberInfomation { Name = "菅井さま" });
            KEYAKIMember.Add(new MemberInfomation { Name = "今泉 佑唯" });
        }
    }
    public class MemberInfomation
    {
        public string Name { get; set; }
    }
}

動作動画

https://goo.gl/bQC0hi

解説

ソースの通りな感じです。まぁ、 Xaml ファイルでインテリセンスが利くように小細工してるぐらいでしょうか

blog.nuits.jp

ハマったポイント

Reactive Proprety を利用すると、 バインディングするときのパスで、 .Value を追加しなければいけないのに気づけず、ハマっていました。

参考サイト

ticktack.hatenablog.jp

Visual Studio Team Services で Xamarin.iOS をビルドする!

Xamarin.iOS を VSTS でビルドする

VSTS とは

VSTS とは、 Microsoft の提供している開発者が開発を効率的に行えるようにするサービスです。

VSTS に含まれている機能

アジャイル開発とかをしやすくするための機能がたくさん含まれてます。 今回は、VSTS 自体についての記事ではないので詳しくは、ぐぐってください。

  • 継続的インテグレーション
  • バックログ、タスク管理

やっていく

VSTS で Xamarin.iOS のプロジェクトをビルドするための ビルド構成を作る

VSTS で Xamarin.iOS をビルドするときに、 Xamarin.Android のプロジェクトが混じっているとビルドに失敗します。 ということで、新しく、 Xamarin.iOSをビルド専用のビルド構成 を作ります。

Visual Studio で Xamarin,iOS の含まれているソリューションを開き、構成マネージャーを開いて新規構成を選ぶ

この時に、設定のコピー元は、 Release を選んだ方がいいと思います。

Xamarin.iOS のビルドに必要なプロジェクト以外のチェックを外して、 iOS Release という名前で保存する

自分の場合、こんな感じになりました。

これを、アクティブソリューションプラットフォームを iPhone, iPhone Simulator と2つ切り替えて設定します。

Github との連携設定

今回は、 Github においてある Visual Studio の Xamarin Template で作ったまんまの コードをビルドしていきたいと思います。

Github との連携するために Github による VSTS に対する認証が必要です。

ここで、 上部にあるツールバーの一番右に配置してある歯車のアイコンにマウスをホバーさせると出てくるメニュー の中から Services を選択します。

Services の画面

New Service Endpoint の部分をクリックし、 出てくるドロップダウンボックスから Github を選択します。

すると、Github との連携の設定画面が出てきます。 Authorize をクリックしてください。

出てきた、 Github との連携の設定画面

ID/Pass を入力して、認証してください。 Github との認証が完了した画面

iOS アプリをビルドするために手持ちの Mac マシンに Build Agent をインストールしてく

現在、 VSTS で提供されている ビルドマシンは、以下の3種類あります。
ビルドマシンは、 VSTS でアプリ等をビルドするタスクが発行されたときにビルドをするためのマシンです。

  • Hosted (メイン, Windows機)
  • Hosted Linux Preview (プレビュー, Linux)
  • Hosted VS 2017 (プレビュー, Windows)

名前を見ればどのようなマシンかはわかるかと思います。
まぁ、プレビューなので選択しは実質1つだけですが。

iOS アプリのビルドをするためには、 Mac マシンが必要

iOS アプリをビルドするためには、 Apple の利用規約の関係で Mac マシン上でビルドしなければいけません。
ところが、VSTS でビルドのために使えるマシンは、上で書いてあるように、 Windows (一応、Linux)しかありません。 Mac は使えない感じです。

どうすれば、 iOS アプリをビルドできるでしょうか?

ちゃんと、やり方は用意されています。
手元にある Mac マシンをビルドするために使います。具体的には、 VSTS で iOS アプリのビルドするタスクが呼び出されたら、 VSTS の Build Agent がインストールされたマシンが代わりにビルドを行います。

Build Agent ... 知らない子ですね。

Build Agent とは、

Build Agent とは、 Hosted ビルドマシンでは無理な場合(今回のように Mac が必要なときや、Hosted マシンの1か月の利用時間制限を使い切ってるとき)に設定して使うときに使うソフトウェア?です。

VSTS のサイトから無料で入手することができます。

今回は、このソフトウェアを Mac マシンにインストールしていきます。
(Mac Book Air をビルドマシンにしてるから、Mac mini ほしい...)

www.amazon.co.jp

Build Agent を入手する

Build Agent は上でも書いた通り VSTS のサイトから入手することができます。 具体的には、 設定画面Agent QueueDownload Agent のボタンからダウンロードで入手できます。

Build Agent を Mac へ設定している様子を動画で撮影してみました。

Build Agent にした Mac マシンでビルドするための証明書を作る

iOS アプリをビルドするためには、 アプリパッケージを作るための、証明書が必要です。 しかし、証明書を作るためには、 XCode を利用して作られます。つまり、Xamarin Studio や Visual Studio では作成できない。 また、証明書の判別は、 Bundle identifier を利用して行われています。
ということで、

Xcode でダミーのプロジェクトを作成し、 Xamarin.iOS のプロジェクトの Bundle identifier と同じにして証明書を作ってあげる必要があります。 証明書の作成は、 XCode で、 Bundle identifier を同じにした 適当な iOS アプリをシミュレーターで動かすだけでおkです。

今回の場合は、 Build Agent に設定してあるマシンでも証明書を作らなければいけないので、下準備として、

Build Agent に設定してある Mac マシンの Xcode 上で Xamarin.iOS の Bundle identifier な証明書を作成する必要があります

新しいビルド定義を作成する

VSTS では、ビルド定義に従って、ビルドを行っていきます。まず、ビルド定義を作成していきます。

ダッシュボードにアクセス

ダッシュボードにアクセスするところから始めていきます。

Build && Release タブへ移動

継続的インテグレーションやリリースの管理はこのタブで行います。
すでに、 Android のビルド定義が1つされている感じです。

新しいビルド定義の作成

+New の部分をクリックして、新しいビルド定義を作成します。

新しいビルド定義ができた!

Github にある ビルドしたリポジトリを指定する

VSTS 自体にもコードを管理する機能がついています。しかし、ほかの ツール等への移行をしようとしたときに辛みが出てくるので、今回は、 Github でホスティングしているリポジトリをビルドしていきます。

Github にある リポジトリやブランチの選択

Xamarin Component Restore のタスクを削除

今回ビルドするプロジェクトでは、 Xamarin Component は使ってないため、タスクを削除します。

Xamarin.iOS のビルド設定

たぶん、一番メインのタスクです。

ビルドするソリューションの選択

ビルドするを選択するためにファイルピッカーを開いて設定していきます。

Xamarin Test Cloud のタスクを削除

Xamarin Test Cloud は様々なデバイスでのUIテストを行ってくれるものですが、今回は使用しないので削除します。

設定が完了

これで、ほとんどの設定が完了しました。

それでは、、、

設定を保存してから

ビルドするマシンを先ほど設定した Mac に変更して、

ビルド設定を iOS Release に変更、、、

緊張の...

ビルド...

成功!!

Xamarin.Android を VSTS でビルドしたい場合は、こちらを見てね!

goo.gl

参考情報

https://blogs.msdn.microsoft.com/chomado/xamarin/vsts-xamarin-hockeyapp-bookmarks/

Build Xamarin apps - Azure Pipelines | Microsoft Docs

Xamarin Blog | An open source mobile platform for building Android, iOS, macOS, watchOS, and tvOS apps with .NET.

24 時間自宅で動かせる Mac 開発機がほしい!!!!!!!!!!!!!

www.amazon.co.jp