SlideShare a Scribd company logo
1 of 97
Download to read offline
VSUG DAY 2012 Winter (2012.12.15)

Windows 8 ストア アプリ
開発 Tips
          小島 富治雄
自己紹介
• 小島 富治雄
• @Fujiwo
• 福井コンピュータアーキテクト株式会社
• Microsoft MVP C# (2005-2013)



            VSUG DAY 2012 Winter 2012.12.15   2
アジェンダ
1. Windows   2. Bing Map を         3. カメラを         4. ViewModel
   ストア       使ってみよう                使ってみよう
   アプリとは



5. 単体テスト     6. ポータブル              7. Windows ス    8. お役立ち
             ライブラリ                 トアへの提出             サイト




                 VSUG DAY 2012 Winter 2012.12.15
本日の資料
•   http://www.slideshare.net/Fujiwo/windo
    ws-8-15634919
•   http://slidesha.re/W3SrsK




              VSUG DAY 2012 Winter 2012.12.15
1. Windows ストア アプリとは


      VSUG DAY 2012 Winter 2012.12.15
Windows ストア アプリ




       VSUG DAY 2012 Winter 2012.12.15
Windows 8

二本立て!
• Windows ストア アプリ
• デスクトップ アプリ

            VSUG DAY 2012 Winter 2012.12.15
Windows 8 のアプリ
             デスクトップ アプリ                    Windows ストア アプリ

Windows 8    •   従来通り                      • 全画面
x86/x64          Win32 API                 • 新 API “WinRT”
             •   .NET                      • C#/VB+XAML
             •   Silverlight               • JavaScript+HTML5
             •   ほとんどそのまま動作                • C++ + XAMLで
                                             ネイティブ アプリも可
                                           • Windows Store で配布 (原則)
Windows RT   ×                                 • 審査あり
ARM


                    VSUG DAY 2012 Winter 2012.12.15
マイクロソフト スタイル




     VSUG DAY 2012 Winter 2012.12.15
Windows ストア アプリの特徴
タッチ & マウス/キーボード
基本フルスクリーン
  カスケード ウィンドウじゃない
  タイトルバー、従来のメニューがない
横長
  横スクロール
        VSUG DAY 2012 Winter 2012.12.15
Windows ストア アプリ
新たな GUI への対応
ライブタイル
  バッチ
チャーム
アプリ バー
トースト通知
セマンティック ズーム
       VSUG DAY 2012 Winter 2012.12.15
WinRT


        VSUG DAY 2012 Winter 2012.12.15
WinRT とは何か?
Win32 API とは別の
         Windows RunTime
   Win32 API を置き換える
   マイクロソフト スタイル アプリ
(≒Windows ストア アプリ) 用
        VSUG DAY 2012 Winter 2012.12.15
WinRT とは何か?

COM ベースの API
   .NET ではない
   Win32 API よりはオブジェクト指向
   C++ で書かれている


        VSUG DAY 2012 Winter 2012.12.15
VSUG DAY 2012 Winter 2012.12.15
Windows ストア アプリ開発
  C#/VB +            C++ +                    JavaScript
   XAML              XAML                      + HTML

   CLR          ネイティブ                          Chakra



                 WinRT
            VSUG DAY 2012 Winter 2012.12.15
言語プロジェクション
      C++
   (ネイティブ)                                   WinRT
                                         (COMベース
 C#/VB       CLR                         ネイティブ)
(マネージ)


JavaScript   Chakra                  WinMD
                                      Windows MetaData
              VSUG DAY 2012 Winter 2012.12.15(型情報)
C#/VB では
•       WinRT が使える
    •   WinRT 仕様のクラス ライブラリも
•       .NET が使える
    •   .NET for Windows Store apps
    •   .NET for Windows Store apps を使ったクラ
        ス ライブラリも
    •   ポータブルクラスライブラリ (後述) も
                VSUG DAY 2012 Winter 2012.12.15
WinRT では多くの API が非同期に
•       非同期呼び出しだらけ
    •    タブレット等のデバイスで有効
    •    50ms 以上掛かる可能性がある API は非同期版のみ
•       非同期呼び出し?
    •   APIの機能リクエストと結果受け取りが別

※ これまでのプログラミング方法では複雑なコードに
   → async/await が有効
 var client = new SyndicationClient();
 var feed = await client.RetrieveFeedAsync(new Uri(feedUri));
                     VSUG DAY 2012 Winter 2012.12.15
開発の例


       VSUG DAY 2012 Winter 2012.12.15
私の開発環境
Logicool Wireless Rechargeable Touchpad t650




               VSUG DAY 2012 Winter 2012.12.15
私の開発環境




     VSUG DAY 2012 Winter 2012.12.15
2. Bing Map を使ってみよう


      VSUG DAY 2012 Winter 2012.12.15
Bing Maps SDK for Windows Store apps
http://visualstudiogallery.msdn.microsoft.com/bb764f67-6b2c-4e14-b2d3-
17477ae1eaca




                        VSUG DAY 2012 Winter 2012.12.15
Bing Maps SDK for Windows Store apps

既存のアプリに NuGet で入れることも出来る




                VSUG DAY 2012 Winter 2012.12.15
Bing Maps Account Center
http://www.bingmapsportal.com




                 VSUG DAY 2012 Winter 2012.12.15
Bing Maps Account Center




           VSUG DAY 2012 Winter 2012.12.15
Bing Maps Account Center




           VSUG DAY 2012 Winter 2012.12.15
Bing Maps Application




          VSUG DAY 2012 Winter 2012.12.15
Bing Map アプリの構成




       VSUG DAY 2012 Winter 2012.12.15
Bing Map アプリの Package.appxmanifest




                VSUG DAY 2012 Winter 2012.12.15
Bing Map アプリ - XAML
<Page
  x:Class="ShoPhotoInfo.MainPage"
  IsTabStop="false"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:ShoPhotoInfo"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="d"
  xmlns:bm="using:Bing.Maps">
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

   <bm:Map x:Name="map" Credentials=“自分の Bing Maps Key"
     ZoomLevel="16" />
</Grid>
</Page>



                                    VSUG DAY 2012 Winter 2012.12.15
Bing Map アプリ - C#
public sealed partial class MainPage : Page
{
  protected async override void OnNavigatedTo(NavigationEventArgs e)
  {
     map.Center = await GetCurrentLocation();
  }




                          VSUG DAY 2012 Winter 2012.12.15
Bing Map アプリ - C# 続き
 static async Task<Geoposition> GetCurrentPosition()
 {
    var geolocator = new Geolocator();
    geolocator.DesiredAccuracy = PositionAccuracy.High;
    return await geolocator.GetGeopositionAsync();
 }

 static async Task<Location> GetCurrentLocation()
 {
    var currentPosition = await GetCurrentPosition();
    return new Location { Latitude = currentPosition.Coordinate.Latitude,
                          Longitude = currentPosition.Coordinate.Longitude };
 }

                           VSUG DAY 2012 Winter 2012.12.15
DEMO


       VSUG DAY 2012 Winter 2012.12.15
3. カメラを使ってみよう


     VSUG DAY 2012 Winter 2012.12.15
カメラ アプリの Package.appxmanifest




               VSUG DAY 2012 Winter 2012.12.15
カメラ アプリ - XAML
<Page
  x:Class="ShoPhotoInfo.MainPage"
  IsTabStop="false"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:ShoPhotoInfo"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="d"
  xmlns:bm="using:Bing.Maps">
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">


     <Image x:Name="image" />
</Grid>
</Page>




                                    VSUG DAY 2012 Winter 2012.12.15
写真撮影 - C#
public static async Task<StorageFile> TakePhoto()
{
  var capture = new CameraCaptureUI();
  var file = await capture.CaptureFileAsync(CameraCaptureUIMode.Photo);
  return file;
}




                        VSUG DAY 2012 Winter 2012.12.15
写真の表示 - C#
public static async Task<WriteableBitmap> CreateBitmapAsync(StorageFile file) {
     var pixelSize = default(Size);
     var bytes = default(byte[]);
     using (var stream = await file.OpenReadAsync()) {
          var decoder = await BitmapDecoder.CreateAsync(stream);
          pixelSize = new Size { Width = decoder.PixelWidth, Height = decoder.PixelHeight };
          var pixelData = await decoder.GetPixelDataAsync();
          bytes = pixelData.DetachPixelData();
      }
      var bitmap = new WriteableBitmap((int)pixelSize.Width, (int)pixelSize.Height);
      using (var pixelStream = bitmap.PixelBuffer.AsStream()) {
         await pixelStream.WriteAsync(bytes, 0, bytes.Length);
      }
      return bitmap;                 要 using System.Runtime.InteropServices.WindowsRuntime;
}                                   VSUG DAY 2012 Winter 2012.12.15
写真の表示 - C#
async Task SetImageSource(StorageFile file)
{
       var bitmap = await CreateBitmapAsync(file);
       image.Source = bitmap;
}




                  VSUG DAY 2012 Winter 2012.12.15
写真のファイルオープン - C#
 public static async Task<StorageFile> GetStorageFileAsync()
 {
   var picker = new FileOpenPicker();
   picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
   picker.ViewMode = PickerViewMode.Thumbnail;

     picker.FileTypeFilter.Add(".jpg");
     picker.FileTypeFilter.Add(".jpeg");
     picker.FileTypeFilter.Add(".png");
     picker.FileTypeFilter.Add(".bmp");

     return await picker.PickSingleFileAsync();
 }
                              VSUG DAY 2012 Winter 2012.12.15
写真のファイル保存 - C#
public static async Task SavePhoto(WriteableBitmap bitmap, string fileName)
{
  var picker = new FileSavePicker();
  picker.FileTypeChoices.Add("JPEGファイル", new List<string> { ".jpg", ".jpeg" });
  picker.DefaultFileExtension = ".jpg";
  picker.SuggestedFileName = fileName;
  picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
  var file = await picker.PickSaveFileAsync();
  if (file != null)
      await bitmap.WriteAsync(file);
}

                          VSUG DAY 2012 Winter 2012.12.15
写真のプロパティ(Exif) - C#
public static async Task<ImageProperties>
                 GetImagePropertiesAsync(StorageFile file)
{
        var imageProperties = await
                                file.Properties.GetImagePropertiesAsync();
        return imageProperties;
}




                        VSUG DAY 2012 Winter 2012.12.15
DEMO


       VSUG DAY 2012 Winter 2012.12.15
4. ViewModel


         VSUG DAY 2012 Winter 2012.12.15
ViewModel のサンプル




                                         C#
XAML


       VSUG DAY 2012 Winter 2012.12.15
コード ビハインド - XAML

<Grid>
    <TextBox x:Name=“titleTextBox“
                                 LostFocus="titleTextBox_LostFocus" />
    <TextBlock x:Name=“bookTextBlock" />
    <Button x:Name="addButton" Content="追加" />
</Grid>



                        VSUG DAY 2012 Winter 2012.12.15
コードビハインド – C#
public class Book
{
     string title = string.Empty;

     public string Title { get { return title; } set { title = value; } }

     public bool IsValid {
       get { return !string.IsNullOrWhiteSpace(Title) && Price >= 0; }
     }

     public override string ToString() { return Title; }
}
                                  VSUG DAY 2012 Winter 2012.12.15
コードビハインド – C#
 public sealed partial class BookPage : Page
{
     Book book = new Book();

    public BookPage()
    {
      InitializeComponent();
      titleTextBox.Text = book.Title;
      bookTextBlock.Text = book.ToString();
    }

    void titleTextBox_LostFocus(object sender, Windows.UI.Xaml.RoutedEventArgs e)
    {
      book.Title = titleTextBox.Text;
      titleTextBox.Text = book.Title;
      bookTextBlock.Text = book.ToString();
      addButton.IsEnabled = book.IsValid;
    }
}
                                               VSUG DAY 2012 Winter 2012.12.15
ViewModel – C#
public class Book : INotifyPropertyChanged
{
     public event PropertyChangedEventHandler PropertyChanged;
     string title = string.Empty;

    public string Title {
      get { return title; }
      set {
         if (value != title) {
             title = value;
             if (PropertyChanged != null)
                 PropertyChanged(this, new PropertyChangedEventArgs("Title"));
         }
      }
    }

    public bool IsValid               { get { return !string.IsNullOrWhiteSpace(Title) && Price >= 0; } }
    public AddBookCommand AddBook { get { return new AddBookCommand(this);                            }}
    public override string ToString() { return Title;                                                   }
}                                           VSUG DAY 2012 Winter 2012.12.15
ViewModel – C#
public class AddBookCommand : ICommand
{
     public event EventHandler CanExecuteChanged;

    readonly Book book;

    public AddBookCommand(Book book)
    {
      this.book = book;
      book.PropertyChanged += delegate {
         if (CanExecuteChanged != null)
             CanExecuteChanged(this, EventArgs.Empty);
      };
    }

    public bool CanExecute(object parameter)
    {
      return book.IsValid;
    }
}                                          VSUG DAY 2012 Winter 2012.12.15
ViewModel - XAML
<Page.Resources>
    <viewModel:Book x:Key="book" />
</Page.Resources>

<Grid DataContext="{Binding Source={StaticResource book}}" >
    <TextBox Text="{Binding Path=Title, Mode=TwoWay}" />
    <TextBlock Text="{Binding}" />
    <Button Content="追加" Command="{Binding Path=AddBook}"
CommandParameter="{Binding}" />
</Grid>

                       VSUG DAY 2012 Winter 2012.12.15
ViewModel その2 – C#
public class ViewModelBase : INotifyPropertyChanged
{
     public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged<PropertyType>(
                                       Expression<Func<PropertyType>> propertyExpression)
    {
      var propertyName = ((MemberExpression)propertyExpression.Body).Member.Name;
      RaisePropertyChanged(propertyName);
    }

    void RaisePropertyChanged(string propertyName)
    {
      if (PropertyChanged != null)
          PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
                                   VSUG DAY 2012 Winter 2012.12.15
ViewModel その2 – C#
public class Book : ViewModelBase
{
     // public event PropertyChangedEventHandler PropertyChanged;
     string title = string.Empty;

    public string Title {
      get { return title; }
      set {
         if (value != title) {
             title = value;
             //if (PropertyChanged != null)
             // PropertyChanged(this, new PropertyChangedEventArgs("Title"));
             RaisePropertyChanged(() => Title);
         }
      }
    }
    public bool IsValid                     { get { return !string.IsNullOrWhiteSpace(Title) && Price >= 0; } }
    public AddBookCommand AddBook { get { return new AddBookCommand(this);                                  }}
    public override string ToString()       { return Title;                                                   }
}                                             VSUG DAY 2012 Winter 2012.12.15
DEMO


       VSUG DAY 2012 Winter 2012.12.15
5. 単体テスト


      VSUG DAY 2012 Winter 2012.12.15
単体テスト ライブラリ




     VSUG DAY 2012 Winter 2012.12.15
単体テスト
[TestClass]
public class UnitTest1
{
     Book book;
     AddBookCommand addCommand;

   [TestInitialize]
   public void Setup()
   {
     book = new Book();
     addCommand = new AddBookCommand(book);
   }

                       VSUG DAY 2012 Winter 2012.12.15
単体テスト
    [TestMethod]
    public void AddCommandのCanExecuteが変化するか() {
       Assert.IsFalse(addCommand.CanExecute(null));

        book.Title = "Windows 8 入門";
        book.Price = 2980;
        Assert.IsTrue(addCommand.CanExecute(null));

        book.Title = "";
        book.Price = 1000;
        Assert.IsFalse(addCommand.CanExecute(null));

        book.Title = "WinRT 入門";
        book.Price = -1;
        Assert.IsFalse(addCommand.CanExecute(null));
    }
}
                                     VSUG DAY 2012 Winter 2012.12.15
DEMO


       VSUG DAY 2012 Winter 2012.12.15
6. ポータブル ライブラリ


     VSUG DAY 2012 Winter 2012.12.15
XAML ファミリー
XAMLファミリーでコードを共通化できないか?
•  Windows Store アプリ
•  Windows Phone アプリ
•  Silverlight アプリ
•  WPF アプリ



        VSUG DAY 2012 Winter 2012.12.15
WPF と Silverlight の .NET




          VSUG DAY 2012 Winter 2012.12.15
Phone と Store の .NET




         VSUG DAY 2012 Winter 2012.12.15
ポータブル ライブラリ




     VSUG DAY 2012 Winter 2012.12.15
ポータブル ライブラリ




     VSUG DAY 2012 Winter 2012.12.15
ポータブル ライブラリ
class Super { }
class Sub : Super
{
   public int Number { get; set; }
   public string Name { get; set; }
}

class Program
{
   static void Main()
   {
      var sub = new Sub();

        bool result1 = typeof(Sub).IsSubclassOf(typeof(Super));
        bool result2 = sub.GetType().IsSubclassOf(typeof(Super));
        bool result3 = sub.GetType().IsAssignableFrom(typeof(Super));
        bool result4 = sub is Super;

        var properties1 = typeof(Sub).GetProperties();
    }
}
                                                 VSUG DAY 2012 Winter 2012.12.15
DEMO


       VSUG DAY 2012 Winter 2012.12.15
7. Windows ストアへの提出


      VSUG DAY 2012 Winter 2012.12.15
Windows ストア アプリ デベロッパー センター

• http://msdn.microsoft.com/ja-JP/windows/apps
• https://appdev.microsoft.com/StorePortals/




                  VSUG DAY 2012 Winter 2012.12.15
Windows ストア アプリ デベロッパー センター




           VSUG DAY 2012 Winter 2012.12.15
アプリ名の予約




      VSUG DAY 2012 Winter 2012.12.15
アプリ名の予約




     VSUG DAY 2012 Winter 2012.12.15
アプリ名の予約




     VSUG DAY 2012 Winter 2012.12.15
Windows ストア アプリ 登録の手引き
Windows 8 アプリ開発体験テンプレート
http://msdn.microsoft.com/ja-jp/jj556277


参考資料
Windows ストア アプリ 登録の手引き
本自習書では、Microsoft アカウントの取得から Windows ストア アプリの審査登録までの手順を紹介し
ます。
Windows ストア アプリ開発のためのポイント
より効率的にアプリのストア登録をしていただくためのヒントをまとめました。是非ご参照ください。
アイコン作成用テンプレート
ストア申請のために必要となるサイズのアイコンを、より簡単につくっていただくためのテンプレートを
ご用意しました。




                                  VSUG DAY 2012 Winter 2012.12.15
リジェクトの理由と対策


    VSUG DAY 2012 Winter 2012.12.15
リジェクト理由
2012/09/24

お客様のアプリは、要件 4.1 を満たしていません。
審査担当者からのコメント:
There is no privacy policy in metadata regarding internet
connection.
No privacy policy in Settings Charm




                    VSUG DAY 2012 Winter 2012.12.15
対処: プライバシーポリシー
プライバシーポリシー
はじめに
Sho's Software (以下「本サービス」) は、本サービスを利用する 全ての方 (以下「利用者」といいます) のプライバシーを尊重するために、 利用者の個人情報を以下の定義に従い、個人情報の適切な取り扱いに取り組んでまいります。
■個人情報の定義
個人情報とは、本サービスを通じて利用者から取得する氏名、年齢、メールアドレス、その他の利用者個人を特定できる情報のことを指します。 収集する個人情報は、利用者から本サービスにてご登録いただく情報に限られます。
■個人情報の利用目的について
本サービスは、利用者の個人情報を以下の目的で利用することができるものとします。
本サービスならびにその他本サービスに関連する情報の提供のため
利用者の本人確認のため
本サービスの運営上必要な事項の通知 (電子メールによるものを含むものとします)
本サービス上で、個人を特定できない範囲においての統計情報の作成および利用
本サービスの新規開発に必要なデータの解析や分析 •契約や法律等に基づく権利の行使や義務の履行
アフターサービス、各種問い合わせ対応のため •利用規約に反する態様でのご利用を防止するため
■統計データの利用
当社は、ユーザーの個人情報をもとに、個人を識別できないように加工した統計データを作成することがあります。個人を識別できない統計データについては、個人情報には当たらず、当社は何ら制限なく利用することができるものとします
。
■個人情報の共有ならびに利用制限について
本サービスは、以下に定める場合を除いて、事前に利用者本人の同意を得ず、利用目的の達成に必要な範囲を超えて個人情報を利用または共有することはありません。
法令により認められた場合
利用者の皆様の同意があった場合
人の生命、身体または財産の保護のために必要があり、さらに利用者の同意を得るのが困難な場合
裁判所、検察庁、警察、税務署、弁護士会またはこれらに準じた権限を持つ機関から、個人情報の開示を求められた場合
合併、営業譲渡その他の事由による事業の承継の際に、事業を承継する者に対して開示する場合
■個人情報の安全管理について
本サービスでは、個人情報の漏洩または毀損の防止ならびにその他個人情報の安全管理が行われるよう、個人情報の適切な監督を行います。 本サービスでは、業務遂行に必要な範囲内で、権限を与えられた者のみが個人情報を取り扱います
。 個人情報の取扱いを外部に委託する場合には、機密保持契約を締結のうえ委託先を監督します。
■個人情報の開示、訂正、削除について
本サービスは、個人情報保護法その他の法令等に基づき、個人情報の開示、訂正、追加、削除、利用停止、消去、第三者提供の停止、利用目的の 通知の請求に対応いたします。 請求が本人確認不可能な場合や、個人情報保護法の定める要件
を満たさない場合、ご希望に添えない場合があります。 なお、アクセスログなどの個人情報以外の情報については、原則として開示等はいたしません。
■プライバシーポリシーの更新について
本サービスは、個人情報保護を図るため、法令等の変更や必要に応じて、本プライバシーポリシーを改訂することがあります。 その際は、最新のプライバシーポリシーを本サービスに掲載いたします。本ページを都度ご確認の上、本サービ
スのプライバシーポリシーをご理解いただくよう お願いします。
■プライバシーポリシーに関するお問い合わせ
本サービスのプライバシーポリシーに関するお問い合わせは、下記までご連絡お願い致します。




                                        VSUG DAY 2012 Winter 2012.12.15
リジェクト理由
2012/09/27

お客様のアプリは、要件 2.4 を満たしていません。

アプリがこの要件を満たしていないと見なされる一般的な理
由は、アプリの主要なシナリオの 1 つに該当する部分を完
了するために、ユーザーが Web ブラウザーにリダイレクト
されることです。


             VSUG DAY 2012 Winter 2012.12.15
対処: …
•   Windows 8 アプリ開発体験テンプレート
    http://msdn.microsoft.com/ja-jp/jj556277
    「NewsReader テンプレート XAML/C# 用」
    で作ったアプリから、
    「Web ブラウザーで開く」機能を削除




               VSUG DAY 2012 Winter 2012.12.15
リジェクト理由
2012/09/25

お客様のアプリは、要件 4.1 を満たしていません。




             VSUG DAY 2012 Winter 2012.12.15
対処: プライバシーポリシー
Privacy Policy
Sho's Software takes the privacy of its users very respectfully. We also comply fully with the Act on the
Protection of Personal Information.
Sho's Software does not collect personally identifiable information (e.g., name, address, telephone
number, e-mail address) unless you provide it to us.




                                     VSUG DAY 2012 Winter 2012.12.15
対処: Package.appxmanifest




          VSUG DAY 2012 Winter 2012.12.15
リジェクト理由
2012/09/25

お客様のアプリは、要件 6.5 を満たしていません。
アプリがこの要件を満たしていないと見なされる一般的な理由:
アプリが、1 つ以上の認定言語をサポートしていない。
提出時に指定された言語の一部ではアプリが動作するが、すべての言語では動作
しない。
アプリの [説明] ページに記載されている情報 (説明、機能、スクリーンショット
など) が、アプリのローカライズ量を反映していない。




             VSUG DAY 2012 Winter 2012.12.15
対処: Package.appxmanifest
<Resources>
 <Resource Language="x-generate" />
</Resources>

対処:
<Resources>
 <Resource Language=“en" />
</Resources>



                    VSUG DAY 2012 Winter 2012.12.15
リジェクト理由
2012/09/25

お客様のアプリは、要件 6.8 を満たしていません。
アプリがこの要件を満たしていないと見なされる一般的な理由は、1 つ以上のス
クリーンショットに、実際より良く見えるようなグラフィック処理が施されてい
ることです。

対処:
審査担当者へのコメント
Background image will be choosen from 6 images randomly.


                   VSUG DAY 2012 Winter 2012.12.15
リジェクト理由
2012/10/04
お客様のアプリは、要件 1.2 を満たしていません。
審査担当者からのコメント:
You should add more detail to your app description, it read too generic or vague
to adequately represent the app's unique value.


対処:

「説明」をより詳細に


                           VSUG DAY 2012 Winter 2012.12.15
リジェクト理由
2012/09/28

お客様のアプリは、要件 2.3 を満たしていません。 詳細情報
アプリがこの要件を満たしていないと見なされる一般的な理由は、アプリ タイ
ル、アプリ バー、設定チャーム ([バージョン情報] リンクを含む) が、プロモー
ション資料に使用されていることです。


対処:

アプリの中の “Die Hard” を別の表現に変更。

              VSUG DAY 2012 Winter 2012.12.15
Windows 8 Clinic
•   http://msdn.microsoft.com/ja-jp/jj820154




                VSUG DAY 2012 Winter 2012.12.15
8. お役立ちサイト


     VSUG DAY 2012 Winter 2012.12.15
参考資料: 開発を始めるとき
•   デベロッパー センター - Windows ストア アプリ
    http://msdn.microsoft.com/ja-JP/windows/apps
    Windows ストア アプリ開発は先ずここから
•   Windows ストア アプリ プログラミングの開発者向け ダウンロード - デベロッパー センター -
    Windows ストア アプリ
    http://msdn.microsoft.com/ja-jp/windows/apps/br229516.aspx
•   Windows 8 アプリ開発体験テンプレート
    http://msdn.microsoft.com/ja-jp/jj556277
•   Windows アプリ アート ギャラリー - アプリに組み込めるイメージ素材集
    http://msdn.microsoft.com/ja-jp/windowsphone/hh544699
•   Developer Camp 2012 Japan Fall - Channel 9
    http://channel9.msdn.com/Events/Windows-Azure-DevCamps/Developer-Camp-2012-Japan-Fall
    動画と資料
•   Windows Store app samples - デベロッパー センター - Windows ストア アプリ
    http://code.msdn.microsoft.com/windowsapps/
•   MSDN マガジン Windows 8 Special Issue 2012
    http://msdn.microsoft.com/ja-jp/magazine/jj660298.aspx
                                VSUG DAY 2012 Winter 2012.12.15
参考資料: ブログ
•   Windowsストアアプリ - 田中達彦のブログ - MSDN Blogs
    http://blogs.msdn.com/b/ttanaka/archive/tags/windows_b930c830a230a230d730ea30_/
•   windows - Akira Onishi's weblog - MSDN Blogs
    http://blogs.msdn.com/b/aonishi/archive/tags/windows/
•   WinRT - 荒井省三のBlog - MSDN Blogs
    http://blogs.msdn.com/b/shozoa/archive/tags/winrt/
•   Windows Store 開発者向けブログ - MSDN Blogs
    http://blogs.msdn.com/b/windowsstore_ja/
•   Windows8 - 眠るシーラカンスと水底のプログラマー
    http://coelacanth.heteml.jp/blog/category/windows8/
•   プログラミング ( Metro スタイル ) - biac の それさえもおそらくは幸せな日々@nifty
    http://bluewatersoft.cocolog-nifty.com/blog/metro/
•   [WinRT] - かずきのBlog@Hatena
    http://d.hatena.ne.jp/okazuki/searchdiary?word=%2A%5BWinRT%5D

                              VSUG DAY 2012 Winter 2012.12.15
参考資料: 連載記事
• 速習 Windowsストアアプリケーション - CodeZine
  http://codezine.jp/article/corner/471
• WinRT/Metro TIPS - Insider.NET - @IT
  http://www.atmarkit.co.jp/ait/subtop/features/da/ap_winrttips_index.html
• Windows 8 APIの基礎 - ITpro
  http://itpro.nikkeibp.co.jp/article/COLUMN/20121206/442473/




                         VSUG DAY 2012 Winter 2012.12.15
参考資料: ポータブル ライブラリ
•   [Windows Store アプリ][XAML] Windows Store アプリと Windows Phone アプリ、
    Silverlight アプリ、WPF アプリでソースコードを共通化する方法に関する記事
    http://blog.shos.info/archives/2012/11/windows_store_windows_phone_si.html
•   Windowsストアアプリで利用できるライブラリの種類 - もりひろゆきの日々是勉強
    http://moriblog.kit-
    eng.com/2012/12/08/windows%E3%82%B9%E3%83%88%E3%82%A2%E3%82%A2%E3%83
    %97%E3%83%AA%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82
    %8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E7%A8
    %AE%E9%A1%9E/
•   Win8ストア・アプリ WP8アプリ、両面撃破作戦 - slideshare
    http://www.slideshare.net/yasuhikoy/2520121201-win8-wp8




                           VSUG DAY 2012 Winter 2012.12.15
参考資料: 単体テスト、ViewModel、その他
•   Metroアプリをテストファーストするときのポイント - slideshare
    http://www.slideshare.net/yasuhikoy/2520121201-tdd13
•   Windows 8 で MVVM パターンを使用する (機械翻訳) - MSDN マガジン
    http://msdn.microsoft.com/ja-jp/magazine/jj651572.aspx
    MVVM Light Toolkit http://mvvmlight.codeplex.com を使ったサンプル。
•   WinRT/Metro TIPS:多言語化対応を楽に行うには?[Win 8] - @IT
    http://www.atmarkit.co.jp/ait/articles/1211/08/news025.html
•   WinRT/Metro TIPS:文字列を多言語化対応するには?[Win 8] - @IT
    http://www.atmarkit.co.jp/ait/articles/1211/01/news069.html
•   WinRT/Metro TIPS:文字列リソースを使うには?[Win 8] - @IT
    http://www.atmarkit.co.jp/ait/articles/1210/25/news026.html
    固定文字列を、多言語化対応などのために、文字列リソースとして別のファイルに分けて
    おく方法



                       VSUG DAY 2012 Winter 2012.12.15
VSUG DAY 2012 Winter (2012.12.15)

Windows 8 ストア アプリ
開発 Tips
          小島 富治雄

More Related Content

What's hot

Xamarin で今日から始めるクロスプラットフォーム開発
Xamarin で今日から始めるクロスプラットフォーム開発Xamarin で今日から始めるクロスプラットフォーム開発
Xamarin で今日から始めるクロスプラットフォーム開発友太 渡辺
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソYoshitaka Seo
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~normalian
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発Daizen Ikehara
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm伸男 伊藤
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介david9142
 
Async Enhancement
Async EnhancementAsync Enhancement
Async Enhancementkamiyam .
 
わんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみたわんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみた伸男 伊藤
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 miso- soup3
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackkimukou_26 Kimukou
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~Yoshitaka Seo
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCYu Nobuoka
 
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築kimukou_26 Kimukou
 

What's hot (20)

Xamarin で今日から始めるクロスプラットフォーム開発
Xamarin で今日から始めるクロスプラットフォーム開発Xamarin で今日から始めるクロスプラットフォーム開発
Xamarin で今日から始めるクロスプラットフォーム開発
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 
C# 3.0 以降
C# 3.0 以降C# 3.0 以降
C# 3.0 以降
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
AngularJS入門
AngularJS入門AngularJS入門
AngularJS入門
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
 
Async Enhancement
Async EnhancementAsync Enhancement
Async Enhancement
 
Mvpvm pattern
Mvpvm patternMvpvm pattern
Mvpvm pattern
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
わんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみたわんくまT78 mfcを始めようとしてみた
わんくまT78 mfcを始めようとしてみた
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築
 

Similar to Windows 8 ストア アプリ 開発 Tips

今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!Yuya Yamaki
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力Keiji Ariyama
 
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発tomotoshi
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートAkira Inoue
 
.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~Fujio Kojima
 
Silverlight Line-Of-Business Applications
Silverlight Line-Of-Business ApplicationsSilverlight Line-Of-Business Applications
Silverlight Line-Of-Business ApplicationsYuya Yamaki
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 
Blendの便利機能振り返り
Blendの便利機能振り返りBlendの便利機能振り返り
Blendの便利機能振り返り一希 大田
 
Androidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチAndroidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチTakao Sumitomo
 
[DevSummit2013S]Android_Multi-Version_Multi-Device
[DevSummit2013S]Android_Multi-Version_Multi-Device[DevSummit2013S]Android_Multi-Version_Multi-Device
[DevSummit2013S]Android_Multi-Version_Multi-DeviceKenichi Kambara
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
Metroスタイルアプリに向けたxamlデザイナーの変更点
Metroスタイルアプリに向けたxamlデザイナーの変更点Metroスタイルアプリに向けたxamlデザイナーの変更点
Metroスタイルアプリに向けたxamlデザイナーの変更点vsug_jim
 
Adobe Edge Inspectを利用してデバッグ
Adobe Edge Inspectを利用してデバッグAdobe Edge Inspectを利用してデバッグ
Adobe Edge Inspectを利用してデバッグKeisuke Todoroki
 
SAPPORO CEDEC 2014 Visual Studio Tools for Unity
SAPPORO CEDEC 2014 Visual Studio Tools for UnitySAPPORO CEDEC 2014 Visual Studio Tools for Unity
SAPPORO CEDEC 2014 Visual Studio Tools for UnityAkira Onishi
 
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」Yasuhiko Yamamoto
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Yuki Higuchi
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるdavid9142
 

Similar to Windows 8 ストア アプリ 開発 Tips (20)

今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Silverlight to Next オンライン セミナー
Silverlight to Next オンライン セミナーSilverlight to Next オンライン セミナー
Silverlight to Next オンライン セミナー
 
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
VSUGDAY2012 - ASP.NET MVC 4 Deveoper Preview による モバイルWEBアプリケーション開発
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
 
.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~
 
Silverlight Line-Of-Business Applications
Silverlight Line-Of-Business ApplicationsSilverlight Line-Of-Business Applications
Silverlight Line-Of-Business Applications
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
Blendの便利機能振り返り
Blendの便利機能振り返りBlendの便利機能振り返り
Blendの便利機能振り返り
 
Androidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチAndroidレイアウトのスタンダードアプローチ
Androidレイアウトのスタンダードアプローチ
 
いまさらJavaScript
いまさらJavaScriptいまさらJavaScript
いまさらJavaScript
 
[DevSummit2013S]Android_Multi-Version_Multi-Device
[DevSummit2013S]Android_Multi-Version_Multi-Device[DevSummit2013S]Android_Multi-Version_Multi-Device
[DevSummit2013S]Android_Multi-Version_Multi-Device
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
Metroスタイルアプリに向けたxamlデザイナーの変更点
Metroスタイルアプリに向けたxamlデザイナーの変更点Metroスタイルアプリに向けたxamlデザイナーの変更点
Metroスタイルアプリに向けたxamlデザイナーの変更点
 
Adobe Edge Inspectを利用してデバッグ
Adobe Edge Inspectを利用してデバッグAdobe Edge Inspectを利用してデバッグ
Adobe Edge Inspectを利用してデバッグ
 
SAPPORO CEDEC 2014 Visual Studio Tools for Unity
SAPPORO CEDEC 2014 Visual Studio Tools for UnitySAPPORO CEDEC 2014 Visual Studio Tools for Unity
SAPPORO CEDEC 2014 Visual Studio Tools for Unity
 
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
 
Aiming study#6pdf
Aiming study#6pdfAiming study#6pdf
Aiming study#6pdf
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 

More from Fujio Kojima

Burikaigi 2023「C# Live Coding!」 小島の分
Burikaigi  2023「C# Live Coding!」 小島の分Burikaigi  2023「C# Live Coding!」 小島の分
Burikaigi 2023「C# Live Coding!」 小島の分Fujio Kojima
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発Fujio Kojima
 
.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発Fujio Kojima
 
BuriKaigi 2022 「C# Live Coding!」 小島の分
BuriKaigi 2022 「C# Live Coding!」 小島の分BuriKaigi 2022 「C# Live Coding!」 小島の分
BuriKaigi 2022 「C# Live Coding!」 小島の分Fujio Kojima
 
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~Fujio Kojima
 
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」Fujio Kojima
 
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~Fujio Kojima
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~Fujio Kojima
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020Fujio Kojima
 
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分Fujio Kojima
 
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights FukuiFujio Kojima
 
機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 Fujio Kojima
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編Fujio Kojima
 
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分Fujio Kojima
 
機械学習入門
機械学習入門機械学習入門
機械学習入門Fujio Kojima
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようFujio Kojima
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~Fujio Kojima
 
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」Fujio Kojima
 
.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分Fujio Kojima
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...Fujio Kojima
 

More from Fujio Kojima (20)

Burikaigi 2023「C# Live Coding!」 小島の分
Burikaigi  2023「C# Live Coding!」 小島の分Burikaigi  2023「C# Live Coding!」 小島の分
Burikaigi 2023「C# Live Coding!」 小島の分
 
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
2022.04.23 .NET 6 -7 時代のデスクトップ アプリケーション開発
 
.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発.NET 6 時代のデスクトップ アプリケーション開発
.NET 6 時代のデスクトップ アプリケーション開発
 
BuriKaigi 2022 「C# Live Coding!」 小島の分
BuriKaigi 2022 「C# Live Coding!」 小島の分BuriKaigi 2022 「C# Live Coding!」 小島の分
BuriKaigi 2022 「C# Live Coding!」 小島の分
 
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~
 
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
 
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
『議論パターン』 (Discussion Patterns) ~不毛な議論を避け、実り有る議論とするために~
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
 
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
 
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
牛タン会議 2019 @ 仙台 「C# ドキドキ ライブ!!」 小島の分
 
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
 
機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編 機械学習 (AI/ML) 勉強会 #2 IoT編
機械学習 (AI/ML) 勉強会 #2 IoT編
 
機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編機械学習 (AI/ML) 勉強会 #1 基本編
機械学習 (AI/ML) 勉強会 #1 基本編
 
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
BuriKaigi2019 「C# ドキドキ・ライブコーディング」 小島の分
 
機械学習入門
機械学習入門機械学習入門
機械学習入門
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
 
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
「ふくいソフトウェアコンペティション 2014 大賞受賞者プレゼンテーション」
 
.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分
 
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...Windows アプリケーション開発はじめに ~ Windows アプリケーション開発初学者の方向けVisual Studio を使ったアプリケーショ...
Windows アプリケーション開発 はじめに ~ Windows アプリケーション開発初学者の方向け Visual Studio を使ったアプリケーショ...
 

Recently uploaded

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (7)

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

Windows 8 ストア アプリ 開発 Tips

  • 1. VSUG DAY 2012 Winter (2012.12.15) Windows 8 ストア アプリ 開発 Tips 小島 富治雄
  • 2. 自己紹介 • 小島 富治雄 • @Fujiwo • 福井コンピュータアーキテクト株式会社 • Microsoft MVP C# (2005-2013) VSUG DAY 2012 Winter 2012.12.15 2
  • 3. アジェンダ 1. Windows 2. Bing Map を 3. カメラを 4. ViewModel ストア 使ってみよう 使ってみよう アプリとは 5. 単体テスト 6. ポータブル 7. Windows ス 8. お役立ち ライブラリ トアへの提出 サイト VSUG DAY 2012 Winter 2012.12.15
  • 4. 本日の資料 • http://www.slideshare.net/Fujiwo/windo ws-8-15634919 • http://slidesha.re/W3SrsK VSUG DAY 2012 Winter 2012.12.15
  • 5. 1. Windows ストア アプリとは VSUG DAY 2012 Winter 2012.12.15
  • 6. Windows ストア アプリ VSUG DAY 2012 Winter 2012.12.15
  • 7. Windows 8 二本立て! • Windows ストア アプリ • デスクトップ アプリ VSUG DAY 2012 Winter 2012.12.15
  • 8. Windows 8 のアプリ デスクトップ アプリ Windows ストア アプリ Windows 8 • 従来通り • 全画面 x86/x64 Win32 API • 新 API “WinRT” • .NET • C#/VB+XAML • Silverlight • JavaScript+HTML5 • ほとんどそのまま動作 • C++ + XAMLで ネイティブ アプリも可 • Windows Store で配布 (原則) Windows RT × • 審査あり ARM VSUG DAY 2012 Winter 2012.12.15
  • 9. マイクロソフト スタイル VSUG DAY 2012 Winter 2012.12.15
  • 10. Windows ストア アプリの特徴 タッチ & マウス/キーボード 基本フルスクリーン カスケード ウィンドウじゃない タイトルバー、従来のメニューがない 横長 横スクロール VSUG DAY 2012 Winter 2012.12.15
  • 11. Windows ストア アプリ 新たな GUI への対応 ライブタイル バッチ チャーム アプリ バー トースト通知 セマンティック ズーム VSUG DAY 2012 Winter 2012.12.15
  • 12. WinRT VSUG DAY 2012 Winter 2012.12.15
  • 13. WinRT とは何か? Win32 API とは別の Windows RunTime Win32 API を置き換える マイクロソフト スタイル アプリ (≒Windows ストア アプリ) 用 VSUG DAY 2012 Winter 2012.12.15
  • 14. WinRT とは何か? COM ベースの API .NET ではない Win32 API よりはオブジェクト指向 C++ で書かれている VSUG DAY 2012 Winter 2012.12.15
  • 15. VSUG DAY 2012 Winter 2012.12.15
  • 16. Windows ストア アプリ開発 C#/VB + C++ + JavaScript XAML XAML + HTML CLR ネイティブ Chakra WinRT VSUG DAY 2012 Winter 2012.12.15
  • 17. 言語プロジェクション C++ (ネイティブ) WinRT (COMベース C#/VB CLR ネイティブ) (マネージ) JavaScript Chakra WinMD Windows MetaData VSUG DAY 2012 Winter 2012.12.15(型情報)
  • 18. C#/VB では • WinRT が使える • WinRT 仕様のクラス ライブラリも • .NET が使える • .NET for Windows Store apps • .NET for Windows Store apps を使ったクラ ス ライブラリも • ポータブルクラスライブラリ (後述) も VSUG DAY 2012 Winter 2012.12.15
  • 19. WinRT では多くの API が非同期に • 非同期呼び出しだらけ • タブレット等のデバイスで有効 • 50ms 以上掛かる可能性がある API は非同期版のみ • 非同期呼び出し? • APIの機能リクエストと結果受け取りが別 ※ これまでのプログラミング方法では複雑なコードに → async/await が有効 var client = new SyndicationClient(); var feed = await client.RetrieveFeedAsync(new Uri(feedUri)); VSUG DAY 2012 Winter 2012.12.15
  • 20. 開発の例 VSUG DAY 2012 Winter 2012.12.15
  • 21. 私の開発環境 Logicool Wireless Rechargeable Touchpad t650 VSUG DAY 2012 Winter 2012.12.15
  • 22. 私の開発環境 VSUG DAY 2012 Winter 2012.12.15
  • 23. 2. Bing Map を使ってみよう VSUG DAY 2012 Winter 2012.12.15
  • 24. Bing Maps SDK for Windows Store apps http://visualstudiogallery.msdn.microsoft.com/bb764f67-6b2c-4e14-b2d3- 17477ae1eaca VSUG DAY 2012 Winter 2012.12.15
  • 25. Bing Maps SDK for Windows Store apps 既存のアプリに NuGet で入れることも出来る VSUG DAY 2012 Winter 2012.12.15
  • 26. Bing Maps Account Center http://www.bingmapsportal.com VSUG DAY 2012 Winter 2012.12.15
  • 27. Bing Maps Account Center VSUG DAY 2012 Winter 2012.12.15
  • 28. Bing Maps Account Center VSUG DAY 2012 Winter 2012.12.15
  • 29. Bing Maps Application VSUG DAY 2012 Winter 2012.12.15
  • 30. Bing Map アプリの構成 VSUG DAY 2012 Winter 2012.12.15
  • 31. Bing Map アプリの Package.appxmanifest VSUG DAY 2012 Winter 2012.12.15
  • 32. Bing Map アプリ - XAML <Page x:Class="ShoPhotoInfo.MainPage" IsTabStop="false" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ShoPhotoInfo" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:bm="using:Bing.Maps"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <bm:Map x:Name="map" Credentials=“自分の Bing Maps Key" ZoomLevel="16" /> </Grid> </Page> VSUG DAY 2012 Winter 2012.12.15
  • 33. Bing Map アプリ - C# public sealed partial class MainPage : Page { protected async override void OnNavigatedTo(NavigationEventArgs e) { map.Center = await GetCurrentLocation(); } VSUG DAY 2012 Winter 2012.12.15
  • 34. Bing Map アプリ - C# 続き static async Task<Geoposition> GetCurrentPosition() { var geolocator = new Geolocator(); geolocator.DesiredAccuracy = PositionAccuracy.High; return await geolocator.GetGeopositionAsync(); } static async Task<Location> GetCurrentLocation() { var currentPosition = await GetCurrentPosition(); return new Location { Latitude = currentPosition.Coordinate.Latitude, Longitude = currentPosition.Coordinate.Longitude }; } VSUG DAY 2012 Winter 2012.12.15
  • 35. DEMO VSUG DAY 2012 Winter 2012.12.15
  • 36. 3. カメラを使ってみよう VSUG DAY 2012 Winter 2012.12.15
  • 37. カメラ アプリの Package.appxmanifest VSUG DAY 2012 Winter 2012.12.15
  • 38. カメラ アプリ - XAML <Page x:Class="ShoPhotoInfo.MainPage" IsTabStop="false" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ShoPhotoInfo" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:bm="using:Bing.Maps"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Image x:Name="image" /> </Grid> </Page> VSUG DAY 2012 Winter 2012.12.15
  • 39. 写真撮影 - C# public static async Task<StorageFile> TakePhoto() { var capture = new CameraCaptureUI(); var file = await capture.CaptureFileAsync(CameraCaptureUIMode.Photo); return file; } VSUG DAY 2012 Winter 2012.12.15
  • 40. 写真の表示 - C# public static async Task<WriteableBitmap> CreateBitmapAsync(StorageFile file) { var pixelSize = default(Size); var bytes = default(byte[]); using (var stream = await file.OpenReadAsync()) { var decoder = await BitmapDecoder.CreateAsync(stream); pixelSize = new Size { Width = decoder.PixelWidth, Height = decoder.PixelHeight }; var pixelData = await decoder.GetPixelDataAsync(); bytes = pixelData.DetachPixelData(); } var bitmap = new WriteableBitmap((int)pixelSize.Width, (int)pixelSize.Height); using (var pixelStream = bitmap.PixelBuffer.AsStream()) { await pixelStream.WriteAsync(bytes, 0, bytes.Length); } return bitmap; 要 using System.Runtime.InteropServices.WindowsRuntime; } VSUG DAY 2012 Winter 2012.12.15
  • 41. 写真の表示 - C# async Task SetImageSource(StorageFile file) { var bitmap = await CreateBitmapAsync(file); image.Source = bitmap; } VSUG DAY 2012 Winter 2012.12.15
  • 42. 写真のファイルオープン - C# public static async Task<StorageFile> GetStorageFileAsync() { var picker = new FileOpenPicker(); picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; picker.ViewMode = PickerViewMode.Thumbnail; picker.FileTypeFilter.Add(".jpg"); picker.FileTypeFilter.Add(".jpeg"); picker.FileTypeFilter.Add(".png"); picker.FileTypeFilter.Add(".bmp"); return await picker.PickSingleFileAsync(); } VSUG DAY 2012 Winter 2012.12.15
  • 43. 写真のファイル保存 - C# public static async Task SavePhoto(WriteableBitmap bitmap, string fileName) { var picker = new FileSavePicker(); picker.FileTypeChoices.Add("JPEGファイル", new List<string> { ".jpg", ".jpeg" }); picker.DefaultFileExtension = ".jpg"; picker.SuggestedFileName = fileName; picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; var file = await picker.PickSaveFileAsync(); if (file != null) await bitmap.WriteAsync(file); } VSUG DAY 2012 Winter 2012.12.15
  • 44. 写真のプロパティ(Exif) - C# public static async Task<ImageProperties> GetImagePropertiesAsync(StorageFile file) { var imageProperties = await file.Properties.GetImagePropertiesAsync(); return imageProperties; } VSUG DAY 2012 Winter 2012.12.15
  • 45. DEMO VSUG DAY 2012 Winter 2012.12.15
  • 46. 4. ViewModel VSUG DAY 2012 Winter 2012.12.15
  • 47. ViewModel のサンプル C# XAML VSUG DAY 2012 Winter 2012.12.15
  • 48. コード ビハインド - XAML <Grid> <TextBox x:Name=“titleTextBox“ LostFocus="titleTextBox_LostFocus" /> <TextBlock x:Name=“bookTextBlock" /> <Button x:Name="addButton" Content="追加" /> </Grid> VSUG DAY 2012 Winter 2012.12.15
  • 49. コードビハインド – C# public class Book { string title = string.Empty; public string Title { get { return title; } set { title = value; } } public bool IsValid { get { return !string.IsNullOrWhiteSpace(Title) && Price >= 0; } } public override string ToString() { return Title; } } VSUG DAY 2012 Winter 2012.12.15
  • 50. コードビハインド – C# public sealed partial class BookPage : Page { Book book = new Book(); public BookPage() { InitializeComponent(); titleTextBox.Text = book.Title; bookTextBlock.Text = book.ToString(); } void titleTextBox_LostFocus(object sender, Windows.UI.Xaml.RoutedEventArgs e) { book.Title = titleTextBox.Text; titleTextBox.Text = book.Title; bookTextBlock.Text = book.ToString(); addButton.IsEnabled = book.IsValid; } } VSUG DAY 2012 Winter 2012.12.15
  • 51. ViewModel – C# public class Book : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; string title = string.Empty; public string Title { get { return title; } set { if (value != title) { title = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Title")); } } } public bool IsValid { get { return !string.IsNullOrWhiteSpace(Title) && Price >= 0; } } public AddBookCommand AddBook { get { return new AddBookCommand(this); }} public override string ToString() { return Title; } } VSUG DAY 2012 Winter 2012.12.15
  • 52. ViewModel – C# public class AddBookCommand : ICommand { public event EventHandler CanExecuteChanged; readonly Book book; public AddBookCommand(Book book) { this.book = book; book.PropertyChanged += delegate { if (CanExecuteChanged != null) CanExecuteChanged(this, EventArgs.Empty); }; } public bool CanExecute(object parameter) { return book.IsValid; } } VSUG DAY 2012 Winter 2012.12.15
  • 53. ViewModel - XAML <Page.Resources> <viewModel:Book x:Key="book" /> </Page.Resources> <Grid DataContext="{Binding Source={StaticResource book}}" > <TextBox Text="{Binding Path=Title, Mode=TwoWay}" /> <TextBlock Text="{Binding}" /> <Button Content="追加" Command="{Binding Path=AddBook}" CommandParameter="{Binding}" /> </Grid> VSUG DAY 2012 Winter 2012.12.15
  • 54. ViewModel その2 – C# public class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void RaisePropertyChanged<PropertyType>( Expression<Func<PropertyType>> propertyExpression) { var propertyName = ((MemberExpression)propertyExpression.Body).Member.Name; RaisePropertyChanged(propertyName); } void RaisePropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } VSUG DAY 2012 Winter 2012.12.15
  • 55. ViewModel その2 – C# public class Book : ViewModelBase { // public event PropertyChangedEventHandler PropertyChanged; string title = string.Empty; public string Title { get { return title; } set { if (value != title) { title = value; //if (PropertyChanged != null) // PropertyChanged(this, new PropertyChangedEventArgs("Title")); RaisePropertyChanged(() => Title); } } } public bool IsValid { get { return !string.IsNullOrWhiteSpace(Title) && Price >= 0; } } public AddBookCommand AddBook { get { return new AddBookCommand(this); }} public override string ToString() { return Title; } } VSUG DAY 2012 Winter 2012.12.15
  • 56. DEMO VSUG DAY 2012 Winter 2012.12.15
  • 57. 5. 単体テスト VSUG DAY 2012 Winter 2012.12.15
  • 58. 単体テスト ライブラリ VSUG DAY 2012 Winter 2012.12.15
  • 59. 単体テスト [TestClass] public class UnitTest1 { Book book; AddBookCommand addCommand; [TestInitialize] public void Setup() { book = new Book(); addCommand = new AddBookCommand(book); } VSUG DAY 2012 Winter 2012.12.15
  • 60. 単体テスト [TestMethod] public void AddCommandのCanExecuteが変化するか() { Assert.IsFalse(addCommand.CanExecute(null)); book.Title = "Windows 8 入門"; book.Price = 2980; Assert.IsTrue(addCommand.CanExecute(null)); book.Title = ""; book.Price = 1000; Assert.IsFalse(addCommand.CanExecute(null)); book.Title = "WinRT 入門"; book.Price = -1; Assert.IsFalse(addCommand.CanExecute(null)); } } VSUG DAY 2012 Winter 2012.12.15
  • 61. DEMO VSUG DAY 2012 Winter 2012.12.15
  • 62. 6. ポータブル ライブラリ VSUG DAY 2012 Winter 2012.12.15
  • 63. XAML ファミリー XAMLファミリーでコードを共通化できないか? • Windows Store アプリ • Windows Phone アプリ • Silverlight アプリ • WPF アプリ VSUG DAY 2012 Winter 2012.12.15
  • 64. WPF と Silverlight の .NET VSUG DAY 2012 Winter 2012.12.15
  • 65. Phone と Store の .NET VSUG DAY 2012 Winter 2012.12.15
  • 66. ポータブル ライブラリ VSUG DAY 2012 Winter 2012.12.15
  • 67. ポータブル ライブラリ VSUG DAY 2012 Winter 2012.12.15
  • 68. ポータブル ライブラリ class Super { } class Sub : Super { public int Number { get; set; } public string Name { get; set; } } class Program { static void Main() { var sub = new Sub(); bool result1 = typeof(Sub).IsSubclassOf(typeof(Super)); bool result2 = sub.GetType().IsSubclassOf(typeof(Super)); bool result3 = sub.GetType().IsAssignableFrom(typeof(Super)); bool result4 = sub is Super; var properties1 = typeof(Sub).GetProperties(); } } VSUG DAY 2012 Winter 2012.12.15
  • 69. DEMO VSUG DAY 2012 Winter 2012.12.15
  • 70. 7. Windows ストアへの提出 VSUG DAY 2012 Winter 2012.12.15
  • 71. Windows ストア アプリ デベロッパー センター • http://msdn.microsoft.com/ja-JP/windows/apps • https://appdev.microsoft.com/StorePortals/ VSUG DAY 2012 Winter 2012.12.15
  • 72. Windows ストア アプリ デベロッパー センター VSUG DAY 2012 Winter 2012.12.15
  • 73. アプリ名の予約 VSUG DAY 2012 Winter 2012.12.15
  • 74. アプリ名の予約 VSUG DAY 2012 Winter 2012.12.15
  • 75. アプリ名の予約 VSUG DAY 2012 Winter 2012.12.15
  • 76. Windows ストア アプリ 登録の手引き Windows 8 アプリ開発体験テンプレート http://msdn.microsoft.com/ja-jp/jj556277 参考資料 Windows ストア アプリ 登録の手引き 本自習書では、Microsoft アカウントの取得から Windows ストア アプリの審査登録までの手順を紹介し ます。 Windows ストア アプリ開発のためのポイント より効率的にアプリのストア登録をしていただくためのヒントをまとめました。是非ご参照ください。 アイコン作成用テンプレート ストア申請のために必要となるサイズのアイコンを、より簡単につくっていただくためのテンプレートを ご用意しました。 VSUG DAY 2012 Winter 2012.12.15
  • 77. リジェクトの理由と対策 VSUG DAY 2012 Winter 2012.12.15
  • 78. リジェクト理由 2012/09/24 お客様のアプリは、要件 4.1 を満たしていません。 審査担当者からのコメント: There is no privacy policy in metadata regarding internet connection. No privacy policy in Settings Charm VSUG DAY 2012 Winter 2012.12.15
  • 79. 対処: プライバシーポリシー プライバシーポリシー はじめに Sho's Software (以下「本サービス」) は、本サービスを利用する 全ての方 (以下「利用者」といいます) のプライバシーを尊重するために、 利用者の個人情報を以下の定義に従い、個人情報の適切な取り扱いに取り組んでまいります。 ■個人情報の定義 個人情報とは、本サービスを通じて利用者から取得する氏名、年齢、メールアドレス、その他の利用者個人を特定できる情報のことを指します。 収集する個人情報は、利用者から本サービスにてご登録いただく情報に限られます。 ■個人情報の利用目的について 本サービスは、利用者の個人情報を以下の目的で利用することができるものとします。 本サービスならびにその他本サービスに関連する情報の提供のため 利用者の本人確認のため 本サービスの運営上必要な事項の通知 (電子メールによるものを含むものとします) 本サービス上で、個人を特定できない範囲においての統計情報の作成および利用 本サービスの新規開発に必要なデータの解析や分析 •契約や法律等に基づく権利の行使や義務の履行 アフターサービス、各種問い合わせ対応のため •利用規約に反する態様でのご利用を防止するため ■統計データの利用 当社は、ユーザーの個人情報をもとに、個人を識別できないように加工した統計データを作成することがあります。個人を識別できない統計データについては、個人情報には当たらず、当社は何ら制限なく利用することができるものとします 。 ■個人情報の共有ならびに利用制限について 本サービスは、以下に定める場合を除いて、事前に利用者本人の同意を得ず、利用目的の達成に必要な範囲を超えて個人情報を利用または共有することはありません。 法令により認められた場合 利用者の皆様の同意があった場合 人の生命、身体または財産の保護のために必要があり、さらに利用者の同意を得るのが困難な場合 裁判所、検察庁、警察、税務署、弁護士会またはこれらに準じた権限を持つ機関から、個人情報の開示を求められた場合 合併、営業譲渡その他の事由による事業の承継の際に、事業を承継する者に対して開示する場合 ■個人情報の安全管理について 本サービスでは、個人情報の漏洩または毀損の防止ならびにその他個人情報の安全管理が行われるよう、個人情報の適切な監督を行います。 本サービスでは、業務遂行に必要な範囲内で、権限を与えられた者のみが個人情報を取り扱います 。 個人情報の取扱いを外部に委託する場合には、機密保持契約を締結のうえ委託先を監督します。 ■個人情報の開示、訂正、削除について 本サービスは、個人情報保護法その他の法令等に基づき、個人情報の開示、訂正、追加、削除、利用停止、消去、第三者提供の停止、利用目的の 通知の請求に対応いたします。 請求が本人確認不可能な場合や、個人情報保護法の定める要件 を満たさない場合、ご希望に添えない場合があります。 なお、アクセスログなどの個人情報以外の情報については、原則として開示等はいたしません。 ■プライバシーポリシーの更新について 本サービスは、個人情報保護を図るため、法令等の変更や必要に応じて、本プライバシーポリシーを改訂することがあります。 その際は、最新のプライバシーポリシーを本サービスに掲載いたします。本ページを都度ご確認の上、本サービ スのプライバシーポリシーをご理解いただくよう お願いします。 ■プライバシーポリシーに関するお問い合わせ 本サービスのプライバシーポリシーに関するお問い合わせは、下記までご連絡お願い致します。 VSUG DAY 2012 Winter 2012.12.15
  • 80. リジェクト理由 2012/09/27 お客様のアプリは、要件 2.4 を満たしていません。 アプリがこの要件を満たしていないと見なされる一般的な理 由は、アプリの主要なシナリオの 1 つに該当する部分を完 了するために、ユーザーが Web ブラウザーにリダイレクト されることです。 VSUG DAY 2012 Winter 2012.12.15
  • 81. 対処: … • Windows 8 アプリ開発体験テンプレート http://msdn.microsoft.com/ja-jp/jj556277 「NewsReader テンプレート XAML/C# 用」 で作ったアプリから、 「Web ブラウザーで開く」機能を削除 VSUG DAY 2012 Winter 2012.12.15
  • 83. 対処: プライバシーポリシー Privacy Policy Sho's Software takes the privacy of its users very respectfully. We also comply fully with the Act on the Protection of Personal Information. Sho's Software does not collect personally identifiable information (e.g., name, address, telephone number, e-mail address) unless you provide it to us. VSUG DAY 2012 Winter 2012.12.15
  • 84. 対処: Package.appxmanifest VSUG DAY 2012 Winter 2012.12.15
  • 85. リジェクト理由 2012/09/25 お客様のアプリは、要件 6.5 を満たしていません。 アプリがこの要件を満たしていないと見なされる一般的な理由: アプリが、1 つ以上の認定言語をサポートしていない。 提出時に指定された言語の一部ではアプリが動作するが、すべての言語では動作 しない。 アプリの [説明] ページに記載されている情報 (説明、機能、スクリーンショット など) が、アプリのローカライズ量を反映していない。 VSUG DAY 2012 Winter 2012.12.15
  • 86. 対処: Package.appxmanifest <Resources> <Resource Language="x-generate" /> </Resources> 対処: <Resources> <Resource Language=“en" /> </Resources> VSUG DAY 2012 Winter 2012.12.15
  • 87. リジェクト理由 2012/09/25 お客様のアプリは、要件 6.8 を満たしていません。 アプリがこの要件を満たしていないと見なされる一般的な理由は、1 つ以上のス クリーンショットに、実際より良く見えるようなグラフィック処理が施されてい ることです。 対処: 審査担当者へのコメント Background image will be choosen from 6 images randomly. VSUG DAY 2012 Winter 2012.12.15
  • 88. リジェクト理由 2012/10/04 お客様のアプリは、要件 1.2 を満たしていません。 審査担当者からのコメント: You should add more detail to your app description, it read too generic or vague to adequately represent the app's unique value. 対処: 「説明」をより詳細に VSUG DAY 2012 Winter 2012.12.15
  • 89. リジェクト理由 2012/09/28 お客様のアプリは、要件 2.3 を満たしていません。 詳細情報 アプリがこの要件を満たしていないと見なされる一般的な理由は、アプリ タイ ル、アプリ バー、設定チャーム ([バージョン情報] リンクを含む) が、プロモー ション資料に使用されていることです。 対処: アプリの中の “Die Hard” を別の表現に変更。 VSUG DAY 2012 Winter 2012.12.15
  • 90. Windows 8 Clinic • http://msdn.microsoft.com/ja-jp/jj820154 VSUG DAY 2012 Winter 2012.12.15
  • 91. 8. お役立ちサイト VSUG DAY 2012 Winter 2012.12.15
  • 92. 参考資料: 開発を始めるとき • デベロッパー センター - Windows ストア アプリ http://msdn.microsoft.com/ja-JP/windows/apps Windows ストア アプリ開発は先ずここから • Windows ストア アプリ プログラミングの開発者向け ダウンロード - デベロッパー センター - Windows ストア アプリ http://msdn.microsoft.com/ja-jp/windows/apps/br229516.aspx • Windows 8 アプリ開発体験テンプレート http://msdn.microsoft.com/ja-jp/jj556277 • Windows アプリ アート ギャラリー - アプリに組み込めるイメージ素材集 http://msdn.microsoft.com/ja-jp/windowsphone/hh544699 • Developer Camp 2012 Japan Fall - Channel 9 http://channel9.msdn.com/Events/Windows-Azure-DevCamps/Developer-Camp-2012-Japan-Fall 動画と資料 • Windows Store app samples - デベロッパー センター - Windows ストア アプリ http://code.msdn.microsoft.com/windowsapps/ • MSDN マガジン Windows 8 Special Issue 2012 http://msdn.microsoft.com/ja-jp/magazine/jj660298.aspx VSUG DAY 2012 Winter 2012.12.15
  • 93. 参考資料: ブログ • Windowsストアアプリ - 田中達彦のブログ - MSDN Blogs http://blogs.msdn.com/b/ttanaka/archive/tags/windows_b930c830a230a230d730ea30_/ • windows - Akira Onishi's weblog - MSDN Blogs http://blogs.msdn.com/b/aonishi/archive/tags/windows/ • WinRT - 荒井省三のBlog - MSDN Blogs http://blogs.msdn.com/b/shozoa/archive/tags/winrt/ • Windows Store 開発者向けブログ - MSDN Blogs http://blogs.msdn.com/b/windowsstore_ja/ • Windows8 - 眠るシーラカンスと水底のプログラマー http://coelacanth.heteml.jp/blog/category/windows8/ • プログラミング ( Metro スタイル ) - biac の それさえもおそらくは幸せな日々@nifty http://bluewatersoft.cocolog-nifty.com/blog/metro/ • [WinRT] - かずきのBlog@Hatena http://d.hatena.ne.jp/okazuki/searchdiary?word=%2A%5BWinRT%5D VSUG DAY 2012 Winter 2012.12.15
  • 94. 参考資料: 連載記事 • 速習 Windowsストアアプリケーション - CodeZine http://codezine.jp/article/corner/471 • WinRT/Metro TIPS - Insider.NET - @IT http://www.atmarkit.co.jp/ait/subtop/features/da/ap_winrttips_index.html • Windows 8 APIの基礎 - ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20121206/442473/ VSUG DAY 2012 Winter 2012.12.15
  • 95. 参考資料: ポータブル ライブラリ • [Windows Store アプリ][XAML] Windows Store アプリと Windows Phone アプリ、 Silverlight アプリ、WPF アプリでソースコードを共通化する方法に関する記事 http://blog.shos.info/archives/2012/11/windows_store_windows_phone_si.html • Windowsストアアプリで利用できるライブラリの種類 - もりひろゆきの日々是勉強 http://moriblog.kit- eng.com/2012/12/08/windows%E3%82%B9%E3%83%88%E3%82%A2%E3%82%A2%E3%83 %97%E3%83%AA%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82 %8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E7%A8 %AE%E9%A1%9E/ • Win8ストア・アプリ WP8アプリ、両面撃破作戦 - slideshare http://www.slideshare.net/yasuhikoy/2520121201-win8-wp8 VSUG DAY 2012 Winter 2012.12.15
  • 96. 参考資料: 単体テスト、ViewModel、その他 • Metroアプリをテストファーストするときのポイント - slideshare http://www.slideshare.net/yasuhikoy/2520121201-tdd13 • Windows 8 で MVVM パターンを使用する (機械翻訳) - MSDN マガジン http://msdn.microsoft.com/ja-jp/magazine/jj651572.aspx MVVM Light Toolkit http://mvvmlight.codeplex.com を使ったサンプル。 • WinRT/Metro TIPS:多言語化対応を楽に行うには?[Win 8] - @IT http://www.atmarkit.co.jp/ait/articles/1211/08/news025.html • WinRT/Metro TIPS:文字列を多言語化対応するには?[Win 8] - @IT http://www.atmarkit.co.jp/ait/articles/1211/01/news069.html • WinRT/Metro TIPS:文字列リソースを使うには?[Win 8] - @IT http://www.atmarkit.co.jp/ait/articles/1210/25/news026.html 固定文字列を、多言語化対応などのために、文字列リソースとして別のファイルに分けて おく方法 VSUG DAY 2012 Winter 2012.12.15
  • 97. VSUG DAY 2012 Winter (2012.12.15) Windows 8 ストア アプリ 開発 Tips 小島 富治雄