Quantcast
Channel: Building Apps for Windows
Viewing all 623 articles
Browse latest View live

Dev Projects for the Long Weekend

$
0
0

Find your favorite chair, kick your feet up and grab yourself a cup of coffee. It’s finally time to pick up some of the dev projects you’ve been eyeballing from behind the hazy fog of pre-vacation deadlines.

For the long weekend, we’ve assembled a quick list of three projects we’ll be working on between family time and scouring Stack Overflow for answers to life’s questions. Take a look below to get started!

IoT for the Whole Family

IoT projects can be both fun and practical – take a look at a few of our favorite selections below. After securing your home with an IoT Security Camera and automating the rest of your house, you might really need to think about rewarding yourself with that automated Kegerator. Just saying.

Explore the Devices and Sensors GitHub Library

Thirty-five samples to work with right here, folks! With these samples, you can get familiar with the API usage patterns that make the UWP unique. This section has code samples for accelerometers, relative inclinometers and pretty much everything in between.

Dive into Microsoft Open Source Code

We’re still reeling in the excitement about our partnership with the Linux Foundation and the steps we’re taking to make the UWP an increasingly open platform. Take a look at our existing Open Source projects over on Github to see how you can get started.

And that’s all! Have a great long weekend and remember to tweet us if you have any questions or comments!

Download Visual Studio to get started.

The Windows team would love to hear your feedback.  Please keep the feedback coming using our Windows Developer UserVoice site. If you have a direct bug, please use the Windows Feedback tool built directly into Windows 10.

The post Dev Projects for the Long Weekend appeared first on Building Apps for Windows.


Standard C++ and the Windows Runtime (C++/WinRT)

$
0
0

The Windows Runtime (WinRT) is the technology that powers the Universal Windows Platform, letting developers write applications that are common to all Windows devices, from Xbox to PCs to HoloLens to phones.  Most of UWP can also be used by developers targeting traditional desktop applications.

WinRT APIs are easily accessible from managed languages like C#, however for native C++ developers, using WinRT either requires a lot of complex COM code, or the use of Visual C++ component extensions, better known as C++/CX.  These language extensions allow C++ to understand the metadata describing WinRT objects, provide automatic reference counting of WinRT objects, and a variety of other things, but are not part of the standard C++ language.

Now there’s an easier way for native C++ developers to use the standard, modern C++ language with no extensions, and target the Windows Runtime.  C++/WinRT is a standard C++ language projection for the Windows Runtime implemented solely in header files.  It allows developers to both author and consume Windows Runtime APIs using any standards-compliant C++ compiler.  C++/WinRT is designed to provide C++ developers with first-class access to the modern Windows API.

Let’s look at a simple “Hello World” code sample to better understand this new library:


struct App : ApplicationT<App>
{
    void OnLaunched(LaunchActivatedEventArgs const &)
    {
        TextBlock block;

        block.FontFamily(FontFamily(L"Segoe UI Semibold"));
        block.FontSize(72.0);
        block.Foreground(SolidColorBrush(Colors::Orange()));
        block.VerticalAlignment(VerticalAlignment::Center);
        block.TextAlignment(TextAlignment::Center);
        block.Text(L"Hello World!");

        Window window = Window::Current();
        window.Content(block);
        window.Activate();
    }
}

And now, the C++/CX version of the same code:


ref class App sealed : public Application
{
    protected:
        virtual void OnLaunched(LaunchActivatedEventArgs^ e) override
        {
            TextBlock^ block = ref new TextBlock();
            block->FontFamily = ref new FontFamily("Segoe UI Semibold");
            block->FontSize = 72.0;
            block->Foreground = ref new SolidColorBrush(Colors::Orange);
            block->VerticalAlignment = VerticalAlignment::Center;
            block->TextAlignment = TextAlignment::Center;
            block->Text = "Hello World!";

            Window^ window = Window::Current;
            window->Content = block;
            window->Activate();
        }
};

As you can see, compared to the second snippet using C++/CX, the first snippet using C++/WinRT contains no “hats” (^) and no other language extensions.  It is 100% pure, modern C++ code.

If you have ever done any WinRT development, you already know that there are many APIs which are asynchronous and are required to be called as such.  With C#, this is easily done with the async/await construct.  With the C++/WinRT framework, this becomes just as easy using C++ coroutines (co_await). Here’s an example:


fire_and_forget Async(TextBlock block)
{
    FileOpenPicker picker;
    picker.FileTypeFilter().Append(L".png");
    picker.SuggestedStartLocation(PickerLocationId::PicturesLibrary);
    auto file = co_await picker.PickSingleFileAsync();

    if (file == nullptr)
        return;

    thread_context ui_thread;
    co_await resume_background();

    auto stream = co_await file.OpenAsync(FileAccessMode::Read);
    auto decoder = co_await BitmapDecoder::CreateAsync(stream);
    auto bitmap = co_await decoder.GetSoftwareBitmapAsync();
    auto engine = OcrEngine::TryCreateFromUserProfileLanguages();
    auto result = co_await engine.RecognizeAsync(bitmap);

    co_await ui_thread;
    block.Text(result.Text());
}

But what about performance?  As it turns out, C++/WinRT performs better and produces smaller binaries than C++/CX with identical code.  For example, the code sample above produces binaries sized as shown in the table below:

C++/WinRT C++/CX C#
Smallest Binary 53KB + 594KB 86KB + 594KB 261KB + 3.31MB

But, in addition to size savings, code runs faster as well.  Here are two examples contrasting the performance of C#, C++/CX, and C++/WinRT:

picture1_revised

picture2_revised

C++/WinRT is an open source project and ready for use today with Visual Studio 15 Preview and Windows 10 Anniversary Update.  Here are some important links to get you started.

In the future, C++/WinRT will be expanded to allow WinRT component authoring as well as XAML designer support.  Stay tuned for those features, but in the meantime, get started with modern, pure C++ development with the Windows Runtime today!

The post Standard C++ and the Windows Runtime (C++/WinRT) appeared first on Building Apps for Windows.

A New Input Paradigm in Windows – The Surface Dial

$
0
0

With the debut of Windows Ink in the Windows Anniversary Update, we introduced simultaneous pen and touch as the dawn of a revolutionary change in interacting with Windows. In our blog post, we discuss how you can use the APIs that you are already familiar with for touch to handle both touch and pen processing at the same time. Now with the recent Microsoft hardware announcements, we’re happy to share another innovation in input with you – the Surface Dial.

picture1

The Surface Dial introduces a new paradigm for input in Windows. The Surface Dial is a new category of input device, which we refer to as a radial controller, and is a revolutionary new tool for the creative process. With tools and shortcuts at your fingertips, the Surface Dial allows you to remain focused on what matters most. You can manipulate images, adjust volume, change color hues and much more, all with simple gestures. With the Surface Dial in one hand and Surface Pen in the other, the creative process is made more productive and more enjoyable. Additionally, you can place your Surface Dial directly on the screen of the Surface Studio and have favorite tools – like a color picker or ruler – at hand and easily accessible on your digital drafting table.

When paired over Bluetooth with a Windows 10 Anniversary Update PC, the Surface Dial delivers a breadth of new experiences to users and opens a world of possibilities. The goal of this blog is to walk you through how you can build your own experiences on the Surface Dial in your application.

Introducing the Radial Controller

For Windows, the Surface Dial represents a totally new type of input device in the system, which we refer to as a radial controller. To go along with this brand-new type of input, Windows has delivered an integrated experience that makes it easier and faster for users to customize and do the things they love – all with a turn of the Dial.

The Surface Dial has a simple set of gestures: It can be rotated, it can be pressed like a button and it can be placed on the screen of the Surface Studio. These gestures are instantly familiar to users and easy to learn. When you press and hold the Surface Dial, a menu experience shows up that presents a selection of tools that can be controlled. These tools offer a variety of functions designed to improve the user’s workflow and keep them immersed in their creativity – from scrolling and zooming, changing volume and controlling media playback, undo and redo, custom keyboard shortcuts and more. It also integrates further with a broad and growing set of in-box and 3rd party apps, unlocking new tools when used with the Windows Ink Workspace, Office, Maps, Groove Music, Sketchable, Bluebeam Revu, Moho 12, Drawboard PDF and more. With the Surface Dial, unlocking new functions for users across every Windows app, they’ll be excited to explore how the Dial can help them in their favorite apps. With the extensibility available through the Windows universal platform, it’s easy for your app to bring that delightful Surface Dial experience they’re searching for!

The first and simplest way to add value with Surface Dial is to use Windows inbox components that come with the Surface Dial integration built-in. For developers who leverage the Windows Ink platform to give their users the power to write, draw, and create with their pen, the InkCanvas and InkToolbar XAML controls populate the Surface Dial’s menu with new tools, allowing users to quickly modify the attributes of their ink, change the thickness of their ink as they write and control the on-screen ruler. This gives you the same great Surface Dial integration available in the Sketchpad and Screen Sketch apps in the Windows Ink Workspace.

picture2

When the InkToolbar and InkCanvas are used, Surface Dial integration is automatically included!

picture3

When the on-screen ruler is visible, the Surface Dial can control its angle and position.

For media players, integrating with the SystemMediaTransportControls will give the same ability to pause, play and skip tracks with the Dial as Groove Music and Spotify.

For developers who want to go beyond the default integration built into the system and create something truly unique, Windows makes it easy for you to add your own tools to this menu through the RadialController platform. The RadialController universal APIs allow you to build your own custom tools for the Surface Dial’s menu and handle Dial input from both Universal Windows Platform apps and classic Win32 apps. You have the option to respond to the button and rotation input available on all Windows devices, or go one step further and build immersive UI experiences for when the Surface Dial is used on-screen on the Surface Studio.

Let’s start by looking at what it takes to build a custom tool experience for the Surface Dial!

Building a Custom Tool for the Surface Dial

Custom tools for the Surface Dial are the best way to deliver a deep and engaging Dial experience for your users. Since a custom tool is personal to your application’s needs, you can identify the shortcuts and functions that matter most to the user and put it right at the user’s fingertips. By optimizing the user’s workflow and integrating with the app’s UI, your custom tool can help the user stay engaged and feel more productive as they work, play, or create with Dial.

To start creating a custom tool for the Surface Dial, the first step is to create an instance of the RadialController interface used to represent the device and interact with the Surface Dial’s menu for the lifetime of your application. Through your instance of the RadialController, you can access the RadialControllerMenu, which gives you the ability to add and remove your own application-specific tools in the Surface Dial’s menu. The RadialController also gives you access to all the input events for the Surface Dial, allowing you to create compelling experiences for your custom tool.

Let’s take a look at building a custom tool inside a sample application. Here we’ll start with a simple inking application using the InkCanvas and InkToolbar controls, which already provide Surface Dial integration for modifying inking attributes and the ruler.


    <Grid x:Name="Container"
          Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid x:Name="CanvasGrid">
            <InkCanvas x:Name="myCanvas"/>
            <InkToolbar x:Name="myToolbar"
                        VerticalAlignment="Top"
                        TargetInkCanvas="{x:Bind myCanvas}" />
        </Grid>
        <StackPanel x:Name="ToolPanel"
                    HorizontalAlignment="Right"
                    VerticalAlignment="Top"
                    Orientation="Vertical"
                    Width="300"
                    Background="White"
                    BorderBrush="Black"
                    BorderThickness="2">
            <StackPanel>
                <TextBlock Text="Red" Margin="20,5,20,5"/>
                <Slider x:Name="RValue"
                        LargeChange="1"
                        Maximum="255"
                        Margin="20,5,20,5"/>
            </StackPanel>
            <StackPanel>
                <TextBlock Text="Green" Margin="20,5,20,5"/>
                <Slider x:Name="GValue"
                        LargeChange="1"
                        Maximum="255"
                        Margin="20,5,20,5"/>
            </StackPanel>
            <StackPanel>
                <TextBlock Text="Blue" Margin="20,5,20,5"/>
                <Slider x:Name="BValue"
                        LargeChange="1"
                        Maximum="255"
                        Margin="20,5,20,5"/>
            </StackPanel>
            <StackPanel>
                <Grid x:Name="Preview"
                      Height="100" Width="250"
                      Margin="0,20,0,20"/>
            </StackPanel>
        </StackPanel>
    </Grid>

Now, let’s add deeper integration with the RadialController APIs and have the Surface Dial control the color of our background. We’ll start by adding a custom tool to the menu:


        RadialController myController;

        public MainPage()
        {
            this.InitializeComponent();
            UpdatePreview();
            highlightedItem = RValue;

            //Hide our custom tool's UI until it is activated by the Dial
            ToolPanel.Visibility = Visibility.Collapsed;

            // Create a reference to the RadialController.
            myController = RadialController.CreateForCurrentView();

            // Create a menu item for the custom tool.
            RadialControllerMenuItem myItem =
              RadialControllerMenuItem.CreateFromKnownIcon("Background", RadialControllerMenuKnownIcon.InkColor);

            //Add the custom tool's menu item to the menu
            myController.Menu.Items.Add(myItem);

            //Create a handler for when the menu item is selected
            myItem.Invoked += MyItem_Invoked;

            //Create handlers for button and rotational input
            myController.RotationChanged += MyController_RotationChanged;
            myController.ButtonClicked += MyController_ButtonClicked;

            //Remove Scroll/Zoom/Undo tools as app doesn't support them
            RadialControllerConfiguration config = RadialControllerConfiguration.GetForCurrentView();
            config.SetDefaultMenuItems(new RadialControllerSystemMenuItemKind[] { RadialControllerSystemMenuItemKind.Volume });

            …
        }

        #region Handling RadialController Input
        private void MyItem_Invoked(RadialControllerMenuItem sender, object args)
        {
            //Make RGB panel visible when the custom menu item is invoked
            ToolPanel.Visibility = Visibility.Visible;
        }

picture4

Since we used the InkToolbar, the menu comes pre-populated with inking tools!

picture5

You can see the new tool we added

The RadialController API provides simple events for handling the input coming from the Dial, from button click, to rotation to the on-screen position. In the previous snippet, we set event handlers for the RotationChanged and ButtonClicked input events from the Surface Dial. Using these events, we can have the input from the Dial modify the red, green, or blue values of our background:


    Slider selectedItem = null;
        FrameworkElement highlightedItem = null;

        private void MyController_ButtonClicked(RadialController sender, RadialControllerButtonClickedEventArgs args)
        {
            if(highlightedItem == Preview)
            {
                //Click on the Preview, update the background
                UpdateBackground();
            }

            else if (selectedItem != null)
            {
                //Click on a selected slider, unselect the slider
                selectedItem = null;
                UpdateHighlight(highlightedItem);
                //decrease sensitivity to make it more comfortable to navigate between items
                myController.RotationResolutionInDegrees = 10;
            }

            else if (selectedItem == null)
            {
                //No selection, select a slider
                UpdateSelection(highlightedItem as Slider);
                //increase sensitivity to make it easier to change slider value
                myController.RotationResolutionInDegrees = 1;
            }
        }

        private void MyController_RotationChanged(RadialController sender, RadialControllerRotationChangedEventArgs args)
        {
            if (selectedItem != null)
            {
                //Change the value on the slider
                selectedItem.Value += args.RotationDeltaInDegrees;
                UpdatePreview();
            }
            else if(args.RotationDeltaInDegrees > 0)
            {
                //Rotation is to the right, change the highlighted item accordingly
                if (highlightedItem == RValue)
                {
                    UpdateHighlight(GValue);
                }
                else if (highlightedItem == GValue)
                {
                    UpdateHighlight(BValue);
                }
                else if (highlightedItem == BValue)
                {
                    UpdateHighlight(Preview);
                }
            }
            else if (args.RotationDeltaInDegrees < 0)
            {
                //Rotation is to the left, change the highlighted item accordingly
                if (highlightedItem == GValue)
                {
                    UpdateHighlight(RValue);
                }
                else if (highlightedItem == BValue)
                {
                    UpdateHighlight(GValue);
                }
                else if (highlightedItem == Preview)
                {
                    UpdateHighlight(BValue);
                }
            }
        }

        private void UpdateHighlight(FrameworkElement element)
        {
            StackPanel parent;

            //Remove highlight state from previous element
            if (highlightedItem != null)
            {
                parent = highlightedItem.Parent as StackPanel;
                parent.BorderThickness = new Thickness(0);
            }

            //Update highlight state for new element
            highlightedItem = element;

            parent = highlightedItem.Parent as StackPanel;
            parent.BorderBrush = new SolidColorBrush(Windows.UI.Colors.Black);
            parent.BorderThickness = new Thickness(2);
        }

        private void UpdateSelection(Slider element)
        {
            selectedItem = element;

            //Update selection state for selected slider
            StackPanel parent = element.Parent as StackPanel;
            parent.BorderBrush = new SolidColorBrush(Windows.UI.Colors.Cyan);
            parent.BorderThickness = new Thickness(4);
        }

        private void UpdatePreview()
        {
            Windows.UI.Color selectedColor = new Windows.UI.Color();
            selectedColor.A = 255;
            selectedColor.R = (byte) RValue.Value;
            selectedColor.G = (byte) GValue.Value;
            selectedColor.B = (byte) BValue.Value;

            Preview.Background = new SolidColorBrush(selectedColor);
        }

        private void UpdateBackground()
        {
            CanvasGrid.Background = Preview.Background;
        }

picture6

When our custom tool is selected, the tool UI becomes visible. Rotation navigates the menu, and clicking a color value allows you to change it.

picture7

When you’ve found a color that you like, clicking on the preview image will change the background color to the one you’ve customized.

In addition to configuring how rotation interacts with the application, the RadialController APIs also give the ability to modify how rotation is delivered to your app and felt by the user. You can use the RotationResolutionInDegrees property to configure how fine the sensitivity or resolution is, and the UseAutomaticHapticFeedback property to set whether haptic feedback is enabled or disabled. In the previous example, setting the rotation to be more sensitive when changing one of the RGB values made much it easier to manipulate the slider. When not specified, the default value for rotational sensitivity is 10 degrees.

Handling On-Screen Input for Surface Studio

As we called out above, there are 2 modes which a radial controller device can be used in: off-screen and on-screen. When the Surface Dial is placed on the screen of the Surface Studio, the RadialController API gets the location and the bounds of the contact so that you can build richer and more immersive experiences for the user.

Using the Surface Dial’s on-screen position, you can build beautiful UI which centers around the Dial and gives the user richer information about the interactions that they can drive with the Dial. This allows the user to just focus on the control and placement of their hands and not have to worry about other additional menus or controls. As an example of this, take a look at the rich color palette developed by the engineers at Sketchable, or the quick insert menu developed by StaffPad which allows users to quickly add common musical notation markups.

picture8picture9

Going one step further, you also can get context for the intent of the user’s interaction from the on-screen position which can help make your custom tools more compelling. You can see this in the way the Surface Dial guides and drives the on-screen ruler in the Windows Ink Workspace’s Sketchpad, and the engineers at Bluebeam and Drawboard take this same approach with their respective Split Zoom and Ruler features.

Working from the previous example, let’s take advantage of the on-screen position to make it easier for the user to see the results of their color change manipulations, and draw the relevant UI near our Surface Dial’s on-screen position instead of in the corner of the display. Using the ScreenContact* events, we can determine where the Surface Dial is and update our UI accordingly:


  bool isRightHanded;

        public MainPage()
        {
            …

            //Query the user’s handedness
            Windows.UI.ViewManagement.UISettings settings = new Windows.UI.ViewManagement.UISettings();
            isRightHanded = settings.HandPreference == Windows.UI.ViewManagement.HandPreference.RightHanded;

            //Create handlers for when RadialController provides an on-screen position
            myController.ScreenContactStarted += MyController_ScreenContactStarted;
            myController.ScreenContactContinued += MyController_ScreenContactContinued;
            myController.ScreenContactEnded += MyController_ScreenContactEnded;

        }

        private void MyController_ScreenContactStarted(RadialController sender, RadialControllerScreenContactStartedEventArgs args)
        {
            UpdatePanelLocation(args.Contact);
        }

        private void MyController_ScreenContactContinued(RadialController sender, RadialControllerScreenContactContinuedEventArgs args)
        {
            UpdatePanelLocation(args.Contact);
        }

        private void MyController_ScreenContactEnded(RadialController sender, object args)
        {
            ResetPanelLocation();
        }

        private void UpdatePanelLocation(RadialControllerScreenContact contact)
        {
            //When an on-screen position is provided, apply a transform to the panel
            TranslateTransform x = new TranslateTransform();
            if (isRightHanded)
            {
                //Render to the right of the RadialController
                x.X = contact.Position.X + contact.Bounds.Width / 2 + 50;
            }
            else
            {
                //Render to the left of the RadialController
                x.X = contact.Position.X - contact.Bounds.Width / 2 - 50 - ToolPanel.Width;
            }
            x.Y = contact.Position.Y - 200;
            ToolPanel.RenderTransform = x;
            ToolPanel.HorizontalAlignment = HorizontalAlignment.Left;
        }
        private void ResetPanelLocation()
        {
            //When an on-screen position is not provided, clear the transform on the panel
            ToolPanel.RenderTransform = null;
            ToolPanel.HorizontalAlignment = HorizontalAlignment.Right;
        }

When dealing with on-screen input, it’s also important to be aware of whether your application has focus for Surface Dial input. When your application is minimized, another application is moved into the foreground, or the Surface Dial’s menu is opened, your application will lose focus for input and you’ll need to make sure your on-screen UI responds accordingly. On the other hand, when your app is brought into the foreground and focus is restored Surface Dial may already be on the screen of the Surface Studio, and a ScreenContactStarted event won’t be provided. Here’s an example of how to handle focus changes with Surface Dial:


        public MainPage()
        {
            …

            //Create handlers for when RadialController focus changes
            myController.ControlAcquired += MyController_ControlAcquired;
            myController.ControlLost += MyController_ControlLost;
        }


        private void MyController_ControlAcquired(RadialController sender, RadialControllerControlAcquiredEventArgs args)
        {
            //Ensure tool panel is rendered at the correct location when focus is gained
            if (args.Contact != null)
            {
                UpdatePanelLocation(args.Contact);
            }

            ToolPanel.Visibility = Visibility.Visible;
        }

        private void MyController_ControlLost(RadialController sender, object args)
        {
            //Hide tool panel when focus is lost
            ToolPanel.Visibility = Visibility.Collapsed;
            ResetPanelLocation();
        }

Start Creating with Surface Dial

Using what you’ve learned so far about the RadialController APIs, you can now integrate the Surface Dial into your application, handle input and configure the system menu to meet your needs. You can build a huge range of delightful features for your users, ranging from simple modification of values and properties, to driving complex onscreen UI for Surface Dial users on the Surface Studio.

For more information on UX design and best practices with Dial, please consult our Surface Dial development overview, and you can find the full source code used in this project on GitHub.

Surface Dial and the RadialController platform is a new area of investment for Microsoft, and one of the keys to improving the platform and making it more flexible and powerful is getting feedback from our great community of developers! If you have any questions or comments while developing for the Surface Dial, please feel free to send them via email to RadialController@microsoft.com.

The post A New Input Paradigm in Windows – The Surface Dial appeared first on Building Apps for Windows.

Symlinks in Windows 10!

$
0
0

Overview

Symlinks, or symbolic links, are “virtual” files or folders which reference a physical file or folder located elsewhere, and are an important feature built in to many operating systems, including Linux and Windows.

The Windows’ NTFS file system has supported symlinks since Windows Vista.  However, it hasn’t been easy for Windows developers to create symlinks.  In our efforts to continually improve the Windows Developer experience we’re fixing this!

Starting with Windows 10 Insiders build 14972, symlinks can be created without needing to elevate the console as administrator. This will allow developers, tools and projects, that previously struggled to work effectively on Windows due to symlink issues, to behave just as efficiently and reliably as they do on Linux or OSX.

Background

A symlink is essentially a pointer to a file or folder located elsewhere, consumes little space and is very fast to create (compared to copying a file and its contents).

Because of this, developers often replace duplicate copies of shared files/folders with symlinks referencing physical files/folders. Replacing redundant copies of files can save a great deal of physical disk space, and significantly reduce the time taken to copy/backup/deploy/clone projects.

In UNIX-compatible operating systems like Linux, FreeBSD, OSX, etc., symlinks can be created without restrictions.

However, for Windows users, due to Windows Vista’s security requirements, users needed local admin rights and, importantly, had to run mklink in a command-line console elevated as administrator to create/modify symlinks. This latter restriction resulted in symlinks being infrequently used by most Windows developers, and caused many modern cross-platform development tools to work less efficiently and reliably on Windows.

Now in Windows 10 Creators Update, a user (with admin rights) can first enable Developer Mode, and then any user on the machine can run the mklink command without elevating a command-line console.

What drove this change?

The availability and use of symlinks is a big deal to modern developers:

Many popular development tools like git and package managers like npm recognize and persist symlinks when creating repos or packages, respectively. When those repos or packages are then restored elsewhere, the symlinks are also restored, ensuring disk space (and the user’s time) isn’t wasted.

Git, for example, along with sites like GitHub, has become the main go-to-source code management tool used by most developers today.

picture1

Figure 1: SCM Tool Trends 2004-2016 (Source, Google)

The use of package managers in modern development has also exploded in recent years. For example, node package manager (npm) served ~400 million installs in the week of July 1st 2015, but served more than 1.2 billion installs just one year later – a 3x increase in just one year! In late June 2016, npm served more than 1.7 billion node packages in just seven days!

Figure 2: npm served 1.2Bn downloads in the first week of July 2016

Figure 2: npm served 1.2Bn downloads in the first week of July 2016

There are clear drivers demanding that Windows enables the ability to create symlinks to non-admin users:

  • Modern development projects are increasingly portable across operating systems
  • Modern development tools are symlink-aware, and many are optimized for symlinks
  • Windows developers should enjoy a development environment that is at least the equal of others

How to use Symlinks

Symlinks are created either using the mklink command or the CreateSymbolicLink API

mklink

  • There is no change in how to call mklink.  For users who have Developer Mode enabled, the mklink command will now successfully create a symlink if the user is not running as an administrator.

CreateSymbolicLink

  • To enable the new behavior when using the CreateSymbolicLink API, there is an additional dwFlags option you will need to set:
Value Meaning
SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE
0x2
Specify this flag to allow creation of symbolic links when the process is not elevated

Example Use

In the example below:

  • A subfolder folder called “animals” containing three files (cat.txt, dog.txt, and fish.txt)
  • (green) The mklink command is executed to create a symlink called “pet.txt” pointing at the “animals\dog.txt” file
  • (blue) When the contents of the current folder are listed, the symlink can be seen (yellow)
  • (purple) When contents of pet.txt are queried, the content of the referenced file (“dog.txt”) is displayed

picture3

Once created, symlinks can be opened, loaded, deleted, etc., just like any other file. Here, the pet.txt symlink is being opened in Notepad (red):

picture4

How do I try it?

This new symlinks support first shipped in Windows 10 Insiders Build 14972, and will be formally delivered in Windows 10 Creators Update. We are also working with the owners of open-source community tools such as Git and npm so they know symlink improvements are coming and can make the necessary changes to better support symlinks on Windows.

We encourage you to take this new feature for a spin and be sure to let us know via the Windows 10 Feedback hub or on Twitter etc. (see below). Please sign up for the Windows Insiders program if you haven’t already to try out symlinks!

Neal, Yosef (@yosefdurr), Rich (@richturn_ms), and Gilles (@khouzam).

The post Symlinks in Windows 10! appeared first on Building Apps for Windows.

ICYMI – Animations, C++/WinRT, Surface Dial and Symlinks

$
0
0

Did you miss us over the long weekend? We missed you, too.

Here’s what you might’ve missed this past week!

Symlinks

Symlinks haven’t always been easy to access or create for Windows developers. Starting with Windows 10 Insider Preview Build 14972, devs can create symlinks without needing to elevate the console as administrator. Essentially, this is just one of many steps towards making the Windows platform more efficient and easier for developers.

C++/WinRT

C++/WinRT allows developers to both author and consume Windows Runtime APIs using any standards-compliant C++ compiler.  C++/WinRT is designed to provide C++ developers with first-class access to the modern Windows API. Check it out by clicking below!

Animations

This week we ran a series of GIFs showing the possibilities of the Windows.Composition.UI, which you can see below. Check out all of the code samples here on GitHub if you want to get started.

And, if you weren’t already convinced, one of our Twitter followers @JuniperPhoton did it: https://twitter.com/JuniperPhoton/status/798414583899844608

Getting Started with the Surface Dial

It’s a lot easier than you think. Check out how to get started by clicking the below post.

Windows 10 Insider Preview Build 14977 for Mobile

And last but certainly not least, a new Windows Insider Preview BUILD! Check it out here.

Download Visual Studio to get started.

The Windows team would love to hear your feedback.  Please keep the feedback coming using our Windows Developer UserVoice site. If you have a direct bug, please use the Windows Feedback tool built directly into Windows 10.

The post ICYMI – Animations, C++/WinRT, Surface Dial and Symlinks appeared first on Building Apps for Windows.

Reengage your customers with UWP ad campaigns and push notifications

$
0
0

We’re pleased to announce that all developers can now use new features in Windows Dev Center to engage with customers of their UWP apps.  Developers can build segments of their customers and use them to create custom retargeting and reengagement ad campaigns for their UWP apps or send push notifications. Until recently, these powerful monetization and engagement capabilities were only available to Windows Dev Center Insiders.

What are retargeting and reengagement ad campaigns?

A retargeting ad campaign is type of advertising campaign that helps you reach a specific group of your customers who have taken a certain action with your UWP app.

For example, if some portion of your customers have spent more than $10 on add-ons, you could retarget that specific group of customers with a custom ad campaign that drives them to a unique page within your app that offers them a special discount on a premium add-on. This helps you target high-value customers.

A reengagement ad campaign is a type of advertising campaign that helps you reach a specific group of your customers who meet a certain level of engagement with your app.

For example, you can create an ad campaign to target users who installed the app in the past three days (new users) with a special offer to WOW them in the first week. This will help decrease the customer churn rate which is usually high in the first week after app install.

Both types of campaigns enable you to deliver the right message to the right set of customers, at the right time. This helps you better achieve your campaign goals and make the most of your advertising budget.

What are segmentation and targeted push notifications?

Engaging with your customers at the right time and with the right targeted message is key to your success as an app developer. With our customer segmentation feature, you can send push notifications to all of your customers or only to a subset of your Windows 10 customers who meet the criteria you’ve defined in a customer segment. With a push notification, you engage and encourage your customers to take an action, such as rating an app, buying an add-on, trying a new feature or downloading another app.

Why should I use these kinds of campaigns?

Studies have shown that acquiring a new customer is anywhere from five to 25 times more expensive than retaining an existing one. That’s why once you’ve acquired a customer it’s important to reengage with him or her regularly so you cultivate a loyal fan base that uses your app frequently and that’s open to making additional purchases.

How do I get started?

At a high level, there are two steps to creating an engagement campaign.

  1. Use the Windows Dev Center dashboard to create a customer segment that includes the kinds of customers you want to target.

You can choose from a variety of customer criteria, such as Acquisition source, Acquisitions, Demographic, Rating, Store acquisitions, Store purchases and Store spend.

Note that for privacy reasons, the Windows Dev Center doesn’t show developers any personally identifiable information about the specific customers in a segment.

  1. Use the dashboard to create an ad campaign for your app. In the Campaign objective section, be sure to choose the Increase engagement in your app

Give it a try and if you’ve got suggestions for how we can make these features even more useful to you, please let us know at Windows Developer Feedback.

The post Reengage your customers with UWP ad campaigns and push notifications appeared first on Building Apps for Windows.

Conversion options for bringing your existing desktop app to the Universal Windows Platform using the Desktop Bridge

$
0
0

With this summer’s release of the Windows 10 Anniversary update and the recent announcement of the Store supporting apps built with the Desktop Bridge technology, we are receiving much interest from many customers wanting to participate. Many developers are seeing the value of the new Windows 10 app packaging technology that enables your app to cleanly install, uninstall and update, as well as get full access to UWP APIs including Live Tiles, Cortana, notifications and more.

However, the conversion process can be intimidating if you are not familiar with your application’s footprint on the system and the technology it uses. This article is intended to educate you on the options for converting your app’s installation into a Windows app package.

Background

Before we begin to list the options and their various pros and cons, it helps to understand a little about what makes up a Windows app package and how an existing application runs under the Desktop Bridge environment. In the context of the Desktop Bridge, the key parts of an app package, also known as a “.appx” file, has the following:

  • Application files – these are the files your app requires to execute and are usually placed in the root of the package. Typically these are the same files that are installed in the application’s folder under “C:\Program Files” or “C:\Program Files (x86).” In the Universal Windows Platform (UWP), package is placed in an app specific directory under “C:\Program Files\WindowsApps” and are secured to prevent tampering.
  • AppManifest.xml – this file is used by the Windows Store to validate the package contents and identity of the publisher, and it is used by the deployment pipeline to install the application. The purpose of the manifest is to make everything about the installation of a package declarative and thus handled by the system. A key pillar is that no user code is executed at deployment time.
  • Reg.dat – If the application writes to the registry at install time, or the app expects certain registry keys to be set when it starts, this information must be stored in a local application hive. At runtime, this hive is mounted and merged with the system registry so the application sees a merged view. The isolation provided by this model allows for no-impact install and uninstall guarantees provided by the UWP packaging model for apps in the Windows Store.
  • Virtual File System, VFS (optional) – If the application places files in other locations outside its typical product folder, i.e, c:\windows\system32, these files should be placed under the VFS folder. At runtime, the VFS is mounted and merged with the actual file system on disk so the application is presented with a merged view. The isolation provided by this model allows for no-impact install and uninstall guarantees provided by the UWP packaging model for apps in the Windows Store.

After you understand the essential parts that are required for a UWP package, the next step that will influence the conversion is understanding how the application impacts the system – what files are installed where, and what registry entries does the application installer write. Depending on how much a developer knows about their application installer, they can make the decision on the best approach.

Don’t know what your setup package does?

Desktop App Converter

The Desktop App Converter (DAC) is the first option most developers are exposed to, as it requires very little knowledge of the application’s installer. The DAC leverages an isolated environment to install the application. While the install is happening, the isolated environment captures all file system and registry access within that environment and saves the deltas to disk.

The DAC then processes the deltas, filtering out changes made by the OS itself (the isolated environment is similar to a light weight VM running the OS and so there are services, filesystem and registry access happening while the installer is running), and locates your application via shortcuts registered in that environment by the installer. The DAC saves the installer-specific changes, creates the manifest file and sample image assets, and builds the UWP package if specified.

The benefits of this approach are:

  • Straightforward if you know your installer’s silent or unattended setup flags.
  • The DAC can be used to create an initial package, and the output (the PackageFiles folder) can be manually updated with new binaries and rebuilt when there are updates to the application. There is no need to re-run the DAC unless there are significant changes to the installer.

The caveats are:

  • First-time acquisition and setup of the DAC and its base image can take some time.
  • Requires the developer to be familiar with their installer, at least enough to know if it supports a silent or unattended mode. Some installers are not very clear on how to do this and can require a lot of trial and error to figure this out, which is beyond the scope of this article.
  • If the installer hangs, it can be a challenge to get the installer log files for debugging.
  • The file and registry filtering takes a conservative approach to remove system activity because installers can have a broad impact to the system. This approach was taken to ensure the greatest level of compatibility. Developers should review the virtual file system and registry and remove entries that are not associated with their application.

The Desktop App Converter itself can be downloaded from the Windows Store. For more information, please check out the documentation on the Windows Dev Center.

XCopy Deployment?

Manual Packaging

If an application setup is very simple and does not require registry entries nor copying files to protected locations, then a manual packaging option is the most straightforward.  This solution is common for single executable tools or “xcopy” deployments. Typically, all that is required is to place the application files in a folder, and to create an AppManifest.xml with the proper fields updated to identify the publisher and the app executable. Step-by-step instructions for manual packaging can be found on the Windows Dev Center and a sample can be found on GitHub.

Need to support both MSI and Windows 10?

Install technology partners with .appx packaging support

We’ve been working with our partners that build setup technologies to add support for directly building Windows app packages (.appx file) with their tools. These tools will create the app manifest and produce the app package as part of their build process. The key benefit these solutions provide is the ability to maintain one installer code base that will produce an MSI installer typically used in older versions of Windows (e.g. Windows 7), as well as build a no-impact install package for Windows 10 (i.e., .appx file for Windows 10). More information can be found at:

Additionally, Embarcadero has announced support for the Desktop Bridge in RAD Studio, which lets you directly output a Windows app package through the build process.

In summary, the best option depends on how complex the application is and much a developer knows about their existing installation methodology. Whether you have an installer with unknown setup technology, a simple xcopy install, or an application that already has existing assets in a given installer technology, there are approaches to meet your needs.

For more information on the Desktop Bridge, please visit the Windows Dev Center.

Ready to submit your app to the Windows Store? Let us know!

The post Conversion options for bringing your existing desktop app to the Universal Windows Platform using the Desktop Bridge appeared first on Building Apps for Windows.

ICYMI – Build 14986, BUILD 2017, and Windows 10 on ARM-based computers!?

$
0
0

What a time to be a Windows developer.

This week we got a new Windows Insider Preview Build, new options added to the Desktop Bridge, expanded access to customer segmentation and notifications, and finally some big news coming from the Windows Hardware Engineer Conference (also known as WinHec 2016). More details below!

Windows 10 Insider Preview Build 14986

In the latest Insider Preview Build, you’ll find a treasure chest of updates. Our favorites include improvements to Cortana, the Windows Game Bar, Ink and enhancements to the Windows 10 experience in Asia. Click the link in the above title to read the blog post!

Desktop Bridge – Options for bringing Win32 Apps to the UWP

Use the Desktop App Converter to gain access to UWP APIs and simplify your app’s installation process with Windows 10 app packaging technology.

Customer Segmentation and Notifications

Developers can build customer segments and use the segments to create custom retargeting and reengagement ad campaigns for their UWP apps. Additionally, devs can use these segments to send push notifications. Previously this ability was only available to Windows Insiders. So on that note, we hope you enjoy it!

Windows 10 on ARM-based Computers (!)

It’s not too good to be true, nor is it some sort of developer witchcraft. It’s real and represents a huge step forward in mobile technology. Here’s a preview of what Windows 10 looks like on a Qualcomm Snapdragon processor.

And last, but not least…

BUILD 2017 dates and location announced!

And that’s it! We’re excited to get the BUILD 2017 ball rolling, and as always, tweet us @WindowsDev with any questions or feedback.

Download Visual Studio to get started.

The Windows team would love to hear your feedback.  Please keep the feedback coming using our Windows Developer UserVoice site. If you have a direct bug, please use the Windows Feedback tool built directly into Windows 10.

The post ICYMI – Build 14986, BUILD 2017, and Windows 10 on ARM-based computers!? appeared first on Building Apps for Windows.


Designing and Prototyping Apps with Adobe Experience Design CC (Beta)

$
0
0

Adobe Experience Design CC (Beta) or Adobe XD, is a new creative tool from Adobe for designing high-fidelity prototypes of websites and mobile apps.  You can try a new public preview released today of Adobe XD on Windows 10.

Why Adobe XD?

A well-designed app often starts out with a sketch, a rough prototype, something that can be shared with stakeholders. But the challenge has always been that to get something testable and demonstrable, you needed to do some coding, you needed to get developers involved in building a prototype that might get thrown away.  But once you have developers investing in coding, they are reluctant to change the code – even if that’s the right thing to do based on the feedback from your prototype.  In his book The Inmates are Running the Asylum, Alan Cooper discusses just this challenge.  That’s where Adobe XD comes in – it is a tool expressly designed for building quick prototypes as well as high-fidelity user experience designs.  With Adobe XD, anyone can create wireframes, interactive prototypes, and high-fidelity designs of apps and websites.  Once you have your prototype, you then can import the visuals into Visual Studio or the IDE of your choice to start building out the final application.

Below is a quick walk-through of using Adobe XD.

Designing a User Experience

To give you an idea of how to use Adobe XD to design quick prototypes, I am going to walk you through the process that I am going through to redesign an app and create a quick prototype with Adobe XD.  I have found that having an interactive prototype with transitions and multiple screens is much more effective at illustrating a user journey than a storyboard of screen images.  I am designing a new version of an app, Architecture, that I originally built for Windows but now I’m using Xamarin to make a cross-platform version that works on Windows, iOS and Android.  Having studied architecture in college, I have always loved the field.  Quite often, I start off with a rough sketch in my journal but that isn’t typically something that is interactive or in a state that can be shared with enough fidelity, so I use XD.

When I start it up, Adobe XD greets me with a blank canvas where I want to place artboards, one for each screen of my app. To place artboards on the canvas, I press the artboard button (the last icon on the left toolbar) – then I see options for various device form factors, including options for iOS, Android, Surface and Web.

To start, I pick a few screen sizes by tapping on Android Mobile, iPhone and Surface Pro 4 on in the property inspector on the right and blank artboards for each format are created on the design canvas.

To start my design I first focus on designing a map page which would show a map of the user’s current location and notable buildings nearby. I grab a screenshot of San Francisco in a folder on my PC and drag it onto each page, resizing it.  Once I place an image onto a page, any overflow is hidden once I deselect the image.  This is very helpful as I design multiple screen sizes in parallel.

Now I want to focus on one of the designs to add some more detail, in this case, the Android design on the left.  I navigate around the artboard by using the trackpad on my computer, panning with two fingers and zooming in and out on the trackpad by pinching and expanding gestures.  This is similar to the interaction method for XD on macOS.  In this initial preview of XD for Windows, touch and pen support are not enabled yet on the design canvas but they do work on the toolbar and in the property inspector. My team is working closely with the XD team to enable a great experience for pen and touch with Adobe XD that will be ready later in 2017.

I’ve started by adding three red boxes for architectural landmarks in San Francisco, and three boxes at the bottom that will work as buttons for UI interactions.  As I draw each button, XD puts snapping guidelines in to help me position the buttons relative to each other.  I ignore the guidelines to show that by selecting all three buttons and pressing the align bottom button at the top of the property inspector (the pane on the right), I can quickly align the buttons and set them all to have the same width and height in the property task pane.  I can then distribute the buttons horizontally using the hotkey Ctrl-Shift-H.  You can also distribute objects horizontally and vertically using the distribute icons in the property inspector.

I then use the text tool to add placeholder icons to the buttons, taking advantage of the Segoe MDL2 Assets Font (use the Character Map app that comes with Windows) for graphics for the Buildings, Locate Me, and Add buttons.  In a few minutes, I get my ideas out and start a first page of my Architecture app.  Now I want to add another page that would be used to browse a list of buildings by pressing the first button on the first page.  I add another Android mobile page by clicking on the artboard button and selecting a new Android mobile page.  A new artboard page is now placed on my design canvas right below the page I’m working on.  Since this page is for browsing a list of buildings, I start with a design of what each building in the list would look like.  I drag an image of a building from my desktop onto a square and it automatically resizes and crops the image to the square.

After finishing that first item design, I select all of the elements for the building and press the Repeat Grid button on the right and then drag the handle that appeared on the bottom of the rectangle to the bottom of the page, repeating the element.

While I’m dragging the repeat grid, I see the items building instantly and hints showing me the spacing between the items.  Once I look at the items together, it becomes clear that I don’t need the frame around the items and the spacing is a bit wide. All I need to do is select the prototypical items at the top of the list and edit the that item – the changes are replicated throughout the list. To change the spacing, I put my cursor between the items and the pink spacing guide appears. By dragging that, I change the spacing between the items and see the results instantly.

The last thing I want to do on this page is to use different images and text for each building in the list.  To do this, I just grab some images that I have in a folder on my PC and drop them on one of the images in the list.  I also have a text file with the names of the buildings that I drag onto the “Building Name” text.  I instantly have a list of items with unique text images and text, a perfect design for the Xamarin ImageCell element when I’m ready to code this.

Now that I have two related pages, I want to connect them so I have a prototype that starts on the map page and then shows the Buildings page when the user clicks on the Buildings button.  I do that in the Adobe XD Prototyping interface by pressing the Prototype button at the top of the window. I start by clicking on the Buildings button on the maps page and the button is highlighted in blue and a blue arrow appears on the right of the button.  All I do is drag and drop that arrow onto the Building page and a connection is made – I can set the transition type, easing type and duration – very easy.

To test that action, I press the desktop preview button (Play button) in the upper right of the application window and a new window with the map page pops up.  I can then press the Buildings button and see the transition as the app preview shows the Buildings page. I can also drag that preview page to another screen if I have an extended desktop and I can even make changes in the design view while the preview is running.  Once you are done with the design prototype, you can easily export the artboards as images that developers could use as starting points for app development.

As a last step, I exported the artboards as PNG images and opened them up in Visual Studio to start the process of laying out the Xaml for my app:

“Design at the Speed of Thought”

Adobe looked at making XD enable “design at the speed of thought” and through this short walk-through, I hope you get the idea that adding the app to your toolbox will help you design, prototype, test and refine your designs quickly and fluidly.

The Technology Behind Adobe XD

Working with Adobe to bring an app of this sophistication and quality will help other developers prepare for Windows 10. Through close collaboration on this app, we have taken much of the feedback from the Adobe developers to make the Universal Windows Platform even better.

Adobe XD on Windows is a UWP app using XAML, C++, JavaScript, and ANGLE striving for a best-in-class Windows UWP experience while sharing as much code as possible with their Mac version. As Adobe has a very high quality bar for app development, the app is testable through automated tests using the Adobe first released Adobe XD earlier this year on the Mac as a public preview and through that preview, Adobe got input that enabled them to make it the best app for designing user experiences.  That feedback went into making both the Mac and Windows versions of XD even better.  Interestingly, Adobe is taking advantage of some of the new functionality in the Windows Anniversary Edition to enable them to release Adobe XD through their Creative Cloud app (how you get Photoshop, Illustrator Lightroom and other creative apps today) instead of the Windows Store.

Help Shape Adobe XD on Windows

Now that you can start using Adobe XD on Windows, please try it and submit your feedback to Adobe through their UserVoice site and help shape the future of Adobe XD on Windows 10. This is just the beginning.

  • Read Adobe’s blog post about today’s release of Adobe XD on Windows 10.
  • Try the Adobe XD public preview (all you need is a Windows 10 PC running the Anniversary Edition and a free Adobe ID or Creative Cloud account).
  • Provide feedback to Adobe on any topic but we’re especially interested in understanding how would you want to use pen and touch in Adobe XD and how you would want to use the new Surface Dial? How would you use pen and touch simultaneously with Adobe XD?  What other apps  and services would you want Adobe XD to connect with? What kinds of extensibility would make Adobe XD even better for your designer-developer workflow?

Get started today with Adobe XD on Windows 10 with the public preview today.

The post Designing and Prototyping Apps with Adobe Experience Design CC (Beta) appeared first on Building Apps for Windows.

Cortana to open up to new devices and developers with Cortana Skills Kit and Cortana Devices SDK

$
0
0

We believe that everyone deserves a personal assistant. One to help you cope as you battle to stay on top of everything, from work to your home life. Calendars, communications and commitments. An assistant that is available everywhere you need it, working in concert with the experts you rely on to get things done.

We’re at the beginning of a technological revolution in artificial intelligence. The personal digital assistant is the interface where all the powers of that intelligence can become an extension of each one of us. Delivering on this promise will take a community that is equally invested in the outcome and able to share in the benefits.

Today we are inviting you to join us in this vision for Cortana with the announcement of the Cortana Skills Kit and Cortana Devices SDK.

The Cortana Skills Kit is designed to help developers reach the growing audience of 145 million Cortana users, helping users get things done while driving discovery and engagement across platforms: Windows, Android, iOS, Xbox and new Cortana-powered devices.

The Cortana Devices SDK will allow OEMs and ODMs to create a new generation of smart, personal devices – on no screen or the big screen, in homes and on wheels.

Developers and device manufacturers can sign up today to receive updates as we move out of private preview.

Cortana Skills Kit Preview

The Cortana Skills Kit will allow developers to leverage bots created with the Microsoft Bot Framework and publish them to Cortana as a new skill, to integrate their web services as skills and to repurpose code from their existing Alexa skills to create Cortana skills. It will connect users to skills when users ask, and proactively present skills to users in the appropriate context. And it will help developers personalize their experiences by leveraging Cortana’s understanding of users’ preferences and context, based on user permissions.

In today’s San Francisco event, we showed how early development partners are working with the private preview of the Cortana Skills Kit ahead of broader availability in February 2017.

  • Knowmail is applying AI to the problem of email overload and used the Bot Framework to build a bot which they’ve published to Cortana. Their intelligent solution works in Outlook and Office 365, learning your email habits in order to prioritize which emails to focus on while on-the-go in the time you have available.
  • We showed how Capital One, the first financial services company to sign on to the platform, leveraged existing investments in voice technology to enable customers to efficiently manage their money through a hands-free, natural language conversation with Cortana.
  • Expedia has published a bot to Skype using the Microsoft Bot Framework, and they demonstrated how the bot, as a new Cortana skill, will help users book hotels.
  • We demonstrated TalkLocal’s Cortana skill, which allows people to find local services using natural language. For example, “Hey Cortana, there’s a leak in my ceiling and it’s an emergency” gets Talk Local looking for a plumber.

Developers can sign up today to stay up to date with news about the Cortana Skills Kit.

Cortana Devices SDK for device manufacturers

We believe that your personal assistant needs to help across your day wherever you are: home, at work and everywhere in between. We refer to this as Cortana being “unbound” – tied to you, not to any one platform or device. That’s why Cortana is available on Windows 10, on Android and iOS, on Xbox and across mobile platforms.

We shared last week that Cortana will be included in the IoT Core edition of the Windows 10 Creators Update, which powers IoT devices.

The next step in this journey is the Cortana Devices SDK, which makes Cortana available to all OEMs and ODMs to build smarter devices on all platforms.

It will carry Cortana’s promise in personal productivity everywhere and deliver real-time, two-way audio communications with Skype, Email, calendar and list integration – all helping Cortana make life easier, everywhere. And, of course, it will carry Cortana expert skills across devices.

We are working with partners across a range of industries and hardware categories, including some exciting work with connected cars. The devices SDK is designed for diversity, supporting cross platforms including Windows IoT, Linux, Android and more through open-source protocols and libraries.

One early device partner, Harman Kardon, a leader in premium audio, will have more news to share next year about their plans, but today provided a sneak peek at their new device coming in 2017.

The Cortana Devices SDK is currently in private preview and will be available more broadly in 2017. If you are an OEM or ODM interested in including Cortana in your device, please contact us using this form to receive updates on the latest news about the Cortana Devices SDK and to be considered for access to the early preview.

The post Cortana to open up to new devices and developers with Cortana Skills Kit and Cortana Devices SDK appeared first on Building Apps for Windows.

GameAnalytics SDK for Microsoft UWP Released

$
0
0

We’re excited to announce our partnership with GameAnalytics, a powerful tool that helps developers understand player behavior so they can improve engagement, reduce churn and increase monetization.

The tool gives game developers a central platform that consolidates player data from various channels to help visualize their core gaming KPIs in one convenient view. It also enables team members to collaborate with reporting and benchmark their game to see how it compares with more than 10,000 similar titles.

You can set up GameAnalytics in a few minutes and it’s totally free of charge, without any caps on usage or premium subscription tiers. If you’d rather see the platform in action before making any technical changes, just sign up to view the demo game and data.

GameAnalytics is used by more than 30,000 game developers worldwide and handles over five billion unique events every day across 1.7 billion devices.

“I believe the single most valuable asset for any game developer in today’s market is knowledge,” said GameAnalytics Founder and Chairman, Morten E Wulff. “Since I started GameAnalytics back in 2012, I’ve met with hundreds of game studios from all over the world, and every single one is struggling with increasing user acquisition costs and falling retention rates.”

“When they do strike gold, they don’t always know why. GameAnalytics is here to change that. To be successful, game studios will have to combine creative excellence with a data-driven approach to development and monetization. We are here to bridge this gap and make it available to everyone for free,” he added.

GameAnalytics provides SDKs for every major game engine. The following guide will outline how to install the SDK and setup GameAnalytics to start tracking player behavior in four steps.

1.  Create a free GameAnalytics account

To get started, sign up for a free GameAnalytics account and add your first game. When you’ve created your game, you’ll find the integration keys in the settings menu (the gear icon), under “Game information.” You’ll need to copy your Game Key and Secret Key for the following steps.

2.  Download the standalone SDK for Microsoft UWP

Next, download the GameAnalytics SDK for Microsoft UWP. Once downloaded, you can begin the installation process.

3.  Install the native UWP SDK

To install the GameAnalytics SDK for Microsoft UWP, simply install using the Nuget by adding the GameAnalytics.UWP.SDK package from Nuget package manager. For Manual installation, use the following instructions:

Manual installation

  • Open GA-SDK-UWP.sln and compile the GA_SDK_UWP project
  • Create a Nuget package: nuget pack GA_SDK_UWP/GA_SDK_UWP.nuspec
  • Copy the resulting GameAnalytics.UWP.SDK.[VERSION].nupkg (where [VERSION] is the version specified in the .nuspec file) into for example C:\Nuget.Local (the name and location of the folder is up to you)
  • Add C:\Nuget.Local (or whatever you called the folder) to the Nuget package sources (and disable Official Nuget source)
  • Add GameAnalytics.UWP.SDK package from Nuget packet manager

4.  Initialize the integration

Call this method to initialize using the Game Key and Secret Key for your game (copied in step 1):


// Initialize
GameAnalytics.Initialize("[game key]", "[secret key]");
:bulb:

Below is a practical example of code that is called at the beginning of the game to initialize GameAnalytics:


using GameAnalyticsSDK.Net;

namespace MyGame
{
    public class MyGameClass
    {
        // ... other code from your project ...
        void OnStart()
        {
            GameAnalytics.SetEnabledInfoLog(true);
            GameAnalytics.SetEnabledVerboseLog(true);
            GameAnalytics.ConfigureBuild("0.10");

            GameAnalytics.ConfigureAvailableResourceCurrencies("gems", "gold");
            GameAnalytics.ConfigureAvailableResourceItemTypes("boost", "lives");
            GameAnalytics.ConfigureAvailableCustomDimensions01("ninja", "samurai");
            GameAnalytics.ConfigureAvailableCustomDimensions02("whale", "dolpin");
            GameAnalytics.ConfigureAvailableCustomDimensions03("horde", "alliance");
            GameAnalytics.Initialize("[game key]", "[secret key]");
        }
    }
}

5.  Build to your game engine

GameAnalytics has provided full documentation for each game engine and platform. You can view and download all files via their Github page, or follow the steps below. They currently support building to the following game engines with Microsoft UWP:

You can also connect to the service using their Rest API.

Viewing your game data

Once implemented, GameAnalytics provides insight into more than 50 of the top gaming KPIs, straight out of the box. Many of these metrics are viewable on a real-time dashboard to get a quick overview into the health of your game throughout the day.

The real-time dashboard gives you visual insight into your number of concurrent users, incoming events, new users, returning users, transactions, total revenue, first time revenue and error logs.

Creating custom events

You can create your own custom events with unique IDs, which allow you to track actions specific to your game experience and measure these findings within the GameAnalytics interface. Event IDs are fully customizable and should fall within one of the following event types:

Event Description
Business In-App Purchases supporting receipt validation on GA servers.
Resource Managing the flow of virtual currencies – like gems or lives.
Progression Level attempts with Start, Fail & Complete event.
Error Submit exception stack traces or custom error messages.
Design Submit custom event IDs. Useful for tracking metrics specifically needed for your game.

For more information about planning and implementing each of these event types to suit your game, visit the game analytics data and events page.

GameAnalytics Dashboards

Developers using GameAnalytics can track their events in a selection of dashboards tailored specifically to games. The dashboards are powerful, yet totally flexible to suit any use case.

Overview Dashboard

With this dashboard you will see a quick snapshot of your core game KPIs.

Acquisition Dashboard

This dashboard provides insight into your player acquisition costs and best marketing sources.

Engagement

This dashboard helps to measure how engaged your players are over time.

Monetization

This dashboard visualizes all of the monetization metrics relating to your game.

Progression

This dashboard helps you understand where players grind or drop off in your game.

Resources

This dashboard helps you balance the flow of “sink” and “gain” resources in your game economy.

You can find a more detailed overview for each dashboard on the GameAnalytics documentation portal.

The post GameAnalytics SDK for Microsoft UWP Released appeared first on Building Apps for Windows.

UWP Experiences – App Samples

$
0
0

The UWP App Experiences are beautiful, cross-device, feature-rich and functional app samples built to demonstrate realistic app scenarios on the UWP platform across PC, Tablet, Xbox and more. Besides being open source on GitHub, each sample is accompanied by at least one blog post and short overview video, and will be published on the Windows Store in the upcoming month to provide easier access for developers.

The News Experience

( source | blog post | video )

Fourth Coffee is a news app that works across desktop, phone, and Xbox One, and offers a premium experience that takes advantage of each device’s strengths including tailored UI for each input modality such as controller on Xbox, touch on tablet and mouse on Desktop.

The Weather Experience

( source | blog post | video )

Atmosphere is a weather app that showcases the use of the popular Unity Engine to build beautiful UWP apps. In addition, the app implements UWP app extensions to enable other developers to extend certain areas of the app, as well as exposes an app service that enables other apps to use that weather information, as illustrated by Fourth Coffee.

The Music Experience

( source | blog post | video )

Backdrop is a cross-platform music app sharing code between UWP and other platforms using Xamarin. It supports background audio on UWP devices and cross-platform device collaboration using SignalR.

The Video Experience

( source | blog post | video )

South Ridge Video is a hosted web application built with React.js and hosted on a web server. The app can easily be converted to a UWP application that takes advantage of native platform capabilities, and can be distributed through the Windows Store as with any other UWP app.

The IoT Experience

( source | blog post | video )

Best For You is a fitness UWP app focused on collecting data from an IoT device using Windows IoT Core, Azure IoT Hub, Azure Event Hub and Azure Stream Analytics for processing.

The Social Experience

( source )

Adventure Works is a cross-device UWP application for sharing adventures and experiences with fictional friends. It is separated into three parts:

About the samples

These samples have been built and designed for multiple UWP devices and scenarios in mind from the start and are meant to showcase end to end solutions. Any developer can take advantage of these samples regardless of the device type or features they are targeting, and we are looking forward to hearing about your experience on the official GitHub repository.

Happy coding!

The post UWP Experiences – App Samples appeared first on Building Apps for Windows.

ICYMI – Cortana Skills Kit, Adobe XD, Surface Dial and the GameAnalytics SDK

$
0
0

No time for an intro, we want to jump right into this.

The New Cortana Skills Kit

Excited doesn’t even begin to describe the glass case of emotion containing our feelings toward the new Cortana Skills Kit announced this week. In addition to preparing developers to reach millions of new users, the Cortana Skills Kit will also help developers leverage bots and personalize apps to specific users.

Adobe XD

Many creatives use tools like Photoshop, Premiere and the entire Adobe Creative Cloud on a daily basis to mock up and prototype a wide range of assets. Now, UWP developers can tap into the prototyping power of the Adobe Creative Cloud with Adobe Experience Design (Adobe XD).

Surface Dial for Devs

The Surface Dial is an amazing new input method, and in our latest Surface Dial blog post, we show how developers can either add it to their toolkit or develop apps with the Surface Dial in mind.

GameAnalytics SDK for UWP

Get all of the information you need and see how your game is performing in one easy-to-digest dashboard. Even better, GameAnalytics is free. Click below to read more and get started.

TL;DR: Go check out the Cortana Skills Kit, dial in the dev side of the Surface Dial, prototype your UWP app idea with Adobe XD, and check your game’s performance with the GameAnalytics SDK.

Download Visual Studio to get started.

The Windows team would love to hear your feedback.  Please keep the feedback coming using our Windows Developer UserVoice site. If you have a direct bug, please use the Windows Feedback tool built directly into Windows 10.

The post ICYMI – Cortana Skills Kit, Adobe XD, Surface Dial and the GameAnalytics SDK appeared first on Building Apps for Windows.

AdDuplex – your one stop shop for Windows app and game marketing and monetization

$
0
0

From the early days of the Windows Phone 7 Marketplace to the modern days of Windows Store, AdDuplex was and is committed to providing top-notch advertising solutions for app and game developers, publishers and advertisers.

Premier cross-promotion network

Back in 2011, AdDuplex launched the first cross-promotion network for Windows Phone 7 apps and empowered thousands of independent developers to advertise their apps for free by helping fellow app and game creators. Apps that got initial attention in the early days of the ecosystem received an overall boost and enjoyed the early exposure for years to come. AdDuplex helped such apps by utilizing their ad space before they had reached a level of popularity that made monetization efforts worthwhile.

AdDuplex cross-promotion network works as an enabler of advertising exchange between participating apps and games. Developers place a line of code into their apps and start promoting other apps on the network. Those other apps return the favor. The exchange ratio is 10:8, meaning that for every 10 ad impressions your app shows, you are advertised eight times in other apps. The remaining two impressions are used by AdDuplex to help commercial advertisers reach their potential users and support future development of the platform.

Since 2011, more than 10,000 apps joined AdDuplex and use it to accelerate and amend their growth efforts.

User acquisition on Windows

Free cross-promotion is great, but it limits the velocity of your growth to a pretty linear scale. What if you want to grow faster and have a budget for that? AdDuplex provides an opportunity for app and game publishers to reach more users faster via paid advertising campaigns.

Publishers from all over the world use AdDuplex to both jumpstart their new apps and games, and acquire new users for their other apps and games.

Windows 10 era

The day after the initial public Windows 10 launch, AdDuplex was ready with an SDK for UWP apps. It lets developers use the same SDK and even the same ad units across desktop and mobile, and is now ready for your apps on Xbox One.

App developers and advertisers can target various versions of Windows Phone and Windows across all main device families and reach exactly the users they are looking for through either banner or full-screen ads.

Make money with your Windows apps and AdDuplex

The most recent development was a launch of ad monetization part of AdDuplex. While still in invite-only mode, every app and game developer is welcome to apply for and participate in a revenue-sharing scheme in which developers get 70 percent of the money that advertisers pay AdDuplex. And even when there are no paid campaigns to show, your ad space is not wasted – AdDuplex cross-promotion network kicks in and generates free advertising for your app or game.

Getting started with AdDuplex

Whether you are an independent app developer or an advertiser in search of scale, benefitting from AdDuplex services is really easy. Here are the basics you’ll need to get started (plus some nice extras):

The post AdDuplex – your one stop shop for Windows app and game marketing and monetization appeared first on Building Apps for Windows.

Windows Bridge for iOS: Customizing the Surface Dial Experience

$
0
0

In part one of the Windows Bridge for iOS series, we created a simple to-do list app in Xcode and used the iOS bridge to bring it over to Windows 10. In part two of the series, we went on a tour of Visual Studio for iOS developers. In part three, we used the Windows Bridge for iOS to convert an iOS calculator app created using Storyboards and Auto Layout to a Universal Windows Platform app that adjusts to various form factors on Windows 10. In part four, we discussed how to mix and match UIKit with XAML controls in a bridged UWP app.

Today, we explain how to customize the Surface Dial Experience for bridged UWP apps using Objective-C projections.

Getting Started

For today’s tutorial, you will need:

If you don’t have a Windows 10 PC, you can download one of our pre-built evaluation virtual machines from the Windows Bridge for iOS website. Download the package for your preferred virtualization environment and you’ll be up and running in no time.

Understanding the Project Structure

With the radial control sample initial code downloaded and unzipped on your Mac development environment, open the Xcode project and briefly explore the application. The application consists of:

  • AppDelegate – contains the UIApplicationInitialStartupMode Category that ensures the app scales properly on Windows 10 for a variety of form factors.
  • ViewController – provides the view management infrastructure for the app’s user interface, which consists of a slider, a label that is updated with the value of the slider and a switch.

Build and run the application in the simulator and move the slider to make sure everything is properly set up.

Using vsimporter

You are now ready to run the app through the vsimporter tool. To do so, you’ll need to copy your Xcode project files to your Windows Machine (or VM). With the files copied, follow the steps under the Using vsimporter section of part three of the blog series. Once you’re done, return to your radial control project directory, which should now contain a brand new Visual Studio solution file.

Open the Visual Studio solution by double-clicking on the RadialControlSample-WinStore10.sln file and build and run the application on your local machine by clicking on the Run button on the top menu. You’ll notice the same UI we saw running in the Xcode Simulator — you now have a native iOS app running on Windows. Try moving the slider and you’ll see its value label change.

Adding a New Menu Item to the Radial Controller Tool

You will now update this app to add a custom menu item to the radial controller tool that will respond to rotate and click actions by changing the slider value and toggling the switch.

To implement radial controller features in your app, you will need the public headers for the relevant UWP frameworks. In the bridge SDK you downloaded, go to the include\Platform\Universal Windows\UWP directory and take a look at what you find. Each header file represents a different namespace within the Windows Runtime APIs. For our purposes, you will need APIs from Windows.UI.Input since the radial controller is an input device and all of its classes are contained in that namespace.

To include this framework – and make sure it’s only included when the code is being run on Windows – start by adding an #ifdef and the #import macros to the top of the view controller implementation file:


#import "ViewController.h"

  #ifdef WINOBJC
  #import <UWP/WindowsUIInput.h>
  #endif

To interact with the radial controller, you will need to add a property to the view controller of your app that will allow you to access it. In C++, wheel input devices are represented by the RadialController class. However, as you build using Objective-C projections, you will notice that the standard naming scheme for these objects has been modified to match Objective-C conventions, where classes are prefixed with the letters that constitute their containing namespace:

  • Windows.UI.Input.RadialController becomes WUIRadialController

As a result, add a WUIRadialController property to the @interface section of the view controller implementation file:


 @interface ViewController()

  @property UILabel *demoTitle;
  @property UILabel *demoInfo;
  @property UISlider *slider;
  @property UILabel *sliderLabel;
  @property UISwitch *switchControl;

  #ifdef WINOBJC
  @property WUIRadialController* radialController;
  #endif

  @end

Next, you need to get a reference to the WUIRadialController object with the CreateForCurrentView method as explained in the RadialController class documentation. Looking at the WindowsUIInput.h header you’ll find the equivalent Objective-C projection under the WUIRadialController class interface:


  @interface WUIRadialController : RTObject
  [...]
  + (WUIRadialController*)createForCurrentView;

Call this method at the end of the viewDidLoad method of the view controller file to instantiate the WUIRadialController property:


- (void)viewDidLoad {
    [...]

  #ifdef WINOBJC
    // Create a reference to the radial controller
    self.radialController = [WUIRadialController createForCurrentView];
  #endif
  }

Now you need to get a reference to the radial controller menu and its items. This is done via the Menu property of the RadialController class that returns a RadialControllerMenu object. Looking back at the  WindowsUIInput.h header, you’ll find the equivalent Objective-C property under the WUIRadialController class interface that returns a WUIRadialControllerMenu object:


@interface WUIRadialController : RTObject
  [...]
  @property (readonly) WUIRadialControllerMenu* menu;

Call this property to get a reference to the radial controller menu:


- (void)viewDidLoad {
    [...]

  #ifdef WINOBJC
    // Create a reference to the radial controller
    self.radialController = [WUIRadialController createForCurrentView];

    // Get the radial controller menu
    WUIRadialControllerMenu* menu = self.radialController.menu;
  #endif
  }

The menu items are accessible via the Items property of the RadialControllerMenu class. As before, the interface of the WUIRadialControllerMenu class in the WindowsUIInput.h header gives you the equivalent Objective-C property:


  @interface WUIRadialControllerMenu : RTObject
  [...]
  @property (readonly) NSMutableArray* /* WUIRadialControllerMenuItem* */ items;

Call this property to get a reference to the menu items:


  - (void)viewDidLoad {
    [...]

    // Get the radial controller menu
    WUIRadialControllerMenu* menu = self.radialController.menu;

    // Get the menu items
    NSMutableArray* menuItems = menu.items;
  #endif
  }

Next, you need to create a new RadialControllerMenuItem object to add to the menu with the projection of the CreateFromKnownIcon class method:


@interface WUIRadialControllerMenuItem : RTObject
  + (WUIRadialControllerMenuItem*)createFromIcon:(NSString *)displayText icon:(WSSRandomAccessStreamReference*)icon;

Call this method to create the new menu item:


- (void)viewDidLoad {
    [...]

    // Get the menu items
    NSMutableArray* menuItems = menu.items;

    // Create a new menu item
    // To use your own custom icon for the menu item, use the createFromIcon method instead
    WUIRadialControllerMenuItem* newMenuItem = [WUIRadialControllerMenuItem createFromKnownIcon:@"Custom Tool" value:WUIRadialControllerMenuKnownIconRuler];
  #endif
  }

Note that we reused an existing icon for our tool from the RadialControllerMenuKnownIcon enumeration, but you can create your own and use the CreateFromIcon method instead.

Finally, add your new menu item to the menu items array:


  - (void)viewDidLoad {
    [...]

    // Create a new menu item
    // To use your own custom icon for the menu item, use the createFromIcon method instead
    WUIRadialControllerMenuItem* newMenuItem = [WUIRadialControllerMenuItem createFromKnownIcon:@"Custom Tool" value:WUIRadialControllerMenuKnownIconRuler];
  #endif

    // Add a new menu item
    [menuItems addObject:newMenuItem];
  }

That’s it! Now build and run your application and press and hold the Surface Dial to see the new menu item appear.

Adding a Handler for Click Input

In this section, you will add a handler for click input that will toggle the application switch control if the radial controller is clicked when the new tool you added to the menu is selected. Taking a look at the WindowsUIInput.h header, you’ll see you need the addButtonClickedEvent: method:


@interface WUIRadialController : RTObject
   [...]
   - (EventRegistrationToken)addButtonClickedEvent:(void(^)(WUIRadialController*, WUIRadialControllerButtonClickedEventArgs

Since the callback relies on Objective-C blocks, you need to mark the self reference with the __block keyword before using it to access the switch to avoid creating a retain cycle. Add the following code at the end of the viewDidLoad method to do this:


  - (void)viewDidLoad {
    [...]

    // Add a new menu item
    [menuItems addObject:newMenuItem];

    __weak ViewController* weakSelf = self; // Ensures self will not be retained
  }

Now you can safely toggle the switch in the radial controller click callback:


 - (void)viewDidLoad {
    [...]

    __weak ViewController* weakSelf = self; // Ensures self will not be retained

    // Add a handler for click input from the radial controller
    [self.radialController addButtonClickedEvent:^(WUIRadialController* controller, WUIRadialControllerButtonClickedEventArgs* args)
     {
         [weakSelf.switchControl setOn:!(weakSelf.switchControl.on) animated:YES];
     }];
  }

You can now build and run your application, select the new menu item, and click on the radial controller to see the switch toggle.

Adding a Handler for Rotation Input

In this section, you will add a handler for rotation input that will move the application slider control if the radial controller is rotated when the new tool you added to the menu is selected. Taking a look at the WindowsUIInput.h header, you’ll see that you need the addRotationChangedEvent: method:


  @interface WUIRadialController : RTObject
   [...]
   - (EventRegistrationToken)addRotationChangedEvent:(void(^)(WUIRadialController*, WUIRadialControllerRotationChangedEventArgs

As for the click event handler, simply call the method and update the slider value in the callback block:


  - (void)viewDidLoad {
    [...]

    __weak ViewController* weakSelf = self; // Ensures self will not be retained

    [...]

    // Add a handler for rotation input from the radial controller
    [self.radialController addRotationChangedEvent:^(WUIRadialController* controller, WUIRadialControllerRotationChangedEventArgs* args)
     {
         [weakSelf.slider setValue:(weakSelf.slider.value + ([args rotationDeltaInDegrees]/360.0f)) animated:YES];
     }];
  }

That’s it! Now build and run your application, select the new menu item and rotate the radial controller to see the slider value change.

Wrapping Up

Thanks for following along! You can download the complete Radial Control sample for the final project. Take a look at the following resources for more information:

Also, be sure to check out the other posts in our series:

The post Windows Bridge for iOS: Customizing the Surface Dial Experience appeared first on Building Apps for Windows.


Just released – Windows developer virtual machines – December 2016 build

$
0
0

We’re releasing the December 2016 edition of our evaluation and licensed Windows developer virtual machines (VM) on Windows Dev Center. The VMs come in Hyper-V, Parallels, VirtualBox and VMWare flavors.  The evaluation version will expire on 04/08/17.

Evaluation VM contain:

Licensed VM contain:

If you don’t currently have a Windows 10 Pro license, you can get one from the Microsoft Store. If you just want to try out Windows 10 and UWP, use the free evaluation version of the VMs. The evaluation copies will expire after a pre-determined amount of time.

The Azure portal also has virtual machines you can spin up with the Windows Developer tooling installed as well!

If you have feedback on the VMs, please provide it over at the Windows Developer Feedback UserVoice site.

The post Just released – Windows developer virtual machines – December 2016 build appeared first on Building Apps for Windows.

We Want You (to help us improve our blog)

$
0
0

Developers,

First of all, we can’t thank you enough for reading our blog. We put a lot of time and care into managing this site, and it means a lot that so many of you tune in regularly. That being said, we want to improve.

We want to make sure that we’re giving you more than just the best possible content. We want to give you all of the content that you want, too.

In order to make sure that every piece is something that you’ll want to read and share with your fellow developers, we need your input.

Do you like tutorials? Updates? Interviews? Jokes? All of it? None of it at all?

That’s exactly what we want to know. By learning more about the topics that interest you, we can tailor our content to your specific interests and hopefully help you become an even better developer. Our goal is to help you achieve your goals. And this survey is a good start to helping us help you.

Thank you in advance! We can’t wait to hear your feedback.

Ready to take the survey? Take it here: http://wndw.ms/bafw

The post We Want You (to help us improve our blog) appeared first on Building Apps for Windows.

ICYMI – AdDuplex, Windows Bridge for iOS, new Virtual Machine

$
0
0

It’s that time of the week, devs.

In case you missed our updates, here is an annotated list of the latest announcements coming from the Windows Developer team. We hope you enjoy them!

AdDuplex Monetization and Marketing

AdDuplex helps apps utilize app ad space before the app has reached a level of popularity that makes monetization efforts worthwhile. From there, AdDuplex can help devs continue managing, marketing and monetizing their apps.

Customize the Surface Dial

In this post, we explain how to customize the Surface Dial Experience for bridged UWP apps using Objective-C projections. It’s neat.

Virtual Machines Update

We’re releasing the December 2016 edition of our evaluation and licensed Windows developer virtual machines (VM) on Windows Dev Center. The VMs come in Hyper-V, Parallels, VirtualBox and VMWare flavors.  The evaluation version will expire on 04/08/17.

Other than that, have a great new year celebration! We’ll see you in 2017.

Download Visual Studio to get started.

The Windows team would love to hear your feedback.  Please keep the feedback coming using our Windows Developer UserVoice site. If you have a direct bug, please use the Windows Feedback tool built directly into Windows 10.

The post ICYMI – AdDuplex, Windows Bridge for iOS, new Virtual Machine appeared first on Building Apps for Windows.

ICYMI – What happened over vacation?

$
0
0

We hope everyone had a great vacation and a very happy New Year!

We’re excited to be back and while we have a few exciting updates on the way, here are a few things that you might have missed.

Patterns & Controls Tutorials

Fly out menus. Dialogue boxes. Buttons. Check, check and check. Learn how to add all of these controls and patterns to your UWP apps, and spruce up your UI for 2017.

Tell us what you want to see on our blog!

Our blog team wants to create the content that you want to read. Sounds simple, right? Do you want more tutorials? More code samples? Guest blogs? Whatever you want more of, let us know. We’ll do our best to use your feedback to inform our future blog content.

New Ch9 Show on Gaming

Don’t miss Stacey Haffner, our very own .NET Program Manager, in her new Ch9 show all about gaming and UWP game development.

Typescript Tutorial for C# Developers

Jesse Liberty has a new video tutorial about Typescript for C# devs.

He says that, “TypeScript brings object-oriented programming to JavaScript, giving developers a scalable, feature-rich language that compiles into super clean code. While TypeScript is traditionally taught from the perspective of JavaScript, C# is a great entry point, since it features some of the same constructs, abstractions and syntax.”

Check it out below.

The best automated e-mail response of the break:

And that’s it! Have a great weekend and we’ll see you next week.

Download Visual Studio to get started.

The Windows team would love to hear your feedback. Please keep the feedback coming using our Windows Developer UserVoice site. If you have a direct bug, please use the Windows Feedback tool built directly into Windows 10.

The post ICYMI – What happened over vacation? appeared first on Building Apps for Windows.

Join us on Feb 8th for Windows Developer Day – Creators Update livestream

$
0
0

On February 8, we’ll be livestreaming a Windows Developer Day, which will outline what’s new for developers in the Windows 10 Creators Update. Whether you’re building for the web or UWP, the latest consumer app or line of business tool, there’s something in it for you. RSVP on the Windows Developer Day site to be the first to know as we share more details in the coming weeks.

Join Kevin Gallo and the Windows engineering team, as they talk through how the latest advances in Windows 10 APIs and tooling enable you to build great things:

  • What’s new with Windows developer tooling: UWP tooling, BASH, Developer mode, and more
  • Learn about the latest XAML advancements, and how UWP helps you build Windows apps that are more personal and productive
  • Hear the developer story behind the recent announcements of Cortana skills and the new Windows mixed reality headsets
  • We’ll also close out the event with a live Q&A panel, where anyone can ask their questions

For this Windows Developer Day, we’re partnering with Channel 9 to share it with the world. We’re also in the process of working with our Windows Developer MVP community to setup local viewing parties around the world, where Windows devs can get together, share tips and network with one another.

Be sure to stay in the loop. Bookmark and RSVP on the Windows Developer Day site to be the first to know as we share more details in the coming weeks.

The post Join us on Feb 8th for Windows Developer Day – Creators Update livestream appeared first on Building Apps for Windows.

Viewing all 623 articles
Browse latest View live