genpaku's footprint

忘れてもいいように、技術で日々が少し便利になることを書いていきます

Xamarinでプロジェクト名を含める場合に気をつけるべきこと

今回ハマったこと

今回は、Xamarin Studioを使ってXamarin.Formsプロジェクトを作ってみました。 そしたら、いきなりビルドエラーになってしまったというお話。

結論としては、

• App Nameにはアプリ名だけを入力しよう。App Nameにプロジェクト名.アプリ名という入力は、ビルドエラーになります。(解決方法は、#どこを修正したのか?を見てください)
• プロジェクト名はOrganization Identifierに含める(infoにも書いてあります)
• Xamarinをプロジェクト名に含めるのはやめた方がいいです。

もしかすると下記のような人が検索で引っかかってしまったら、この辺がオススメです。
・Xamarin Studioインストールしてみたいという方

blogs.msdn.microsoft.com

・Xamarin.Formsとはなんぞやということを知りたい人

https://www.xlsoft.com/jp/products/xamarin/forms.htmlwww.xlsoft.com

どんなエラーが出たの?

今回は「Test.MobileApp」というApp Nameをつけてみました。 f:id:crossroad19931110:20160905224028p:plain

どこを修正したのか?

でも何てことはない、クラス名に「.(ドット)」が入っているだけではないですか。

エラーにもしっかり、書いてあります。こう言う時、C#というよく知る言語だと落ち着いて対処できますね。 (知らない言語やツールを使ってエラーが出ると簡単なエラーで焦って失敗するのは私だけでしょうか。)

[Test.MobilAppPage.xaml.cs]

using Xamarin.Forms;

namespace Test.MobileApp
{
    public partial class MobileAppPage : ContentPage
    {
        public MobileAppPage()
        {
            InitializeComponent();
        }
    }
}

そして、もちろん。対になっている「Test.MobleAppPage.xaml」も直します。 この辺もasp.netなどに似てますね。(WPFは開発したことがないので、多分似ていると思います。)

[Test.MobleAppPage.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:Test.MobileApp" x:Class="Test.MobileApp.MobileAppPage">
    <Label Text="Welcome to Xamarin Forms!" VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>

これで動くだろうと思ったのですが、iOSのデバッガで起動すると「Welcome to Xamarin Forms!」が表示されません。 なぜだ・・・。と思っていたら、iOS側で「Info.plist」も変えてあげる必要がありました。 [Info.plist] f:id:crossroad19931110:20160905230418p:plain

android側の「AndroidManifest.xml」も同様に変更してあげます。

変更は以上になります。
これで無事、iOSのデバッガで「Welcome to Xamarin Forms! 」と表示されました。

ちなみに最初の結論に記述した「Xamarinをプロジェクト名に含めるのはやめた方がいいです。 」については、 Xamarinの名前空間とかぶってしまうので、やめた方がいいです。 もちろん、globalをつけるとか回避策はありますが、面倒なことこの上ないのでオススメできません。 ちなみにXamarinAppみたいな名前は問題ありません。

まとめると、よく読まずにAppNameにアプリの名前以外を含んでしまったら、ビルドエラーになって困ったというおちょっこちょいなエラーでした。 忘れてもいいように。