Click here to Skip to main content
Click here to Skip to main content

Journey from development, code signing to publishing my App to Intel AppUp

, 14 Jan 2013
Rate this:
Please Sign up or sign in to vote.
Journey of TravelManager App, Starting from how i got an idea, how it's implemented with sensor capabilities, how to fake and test , how to perform unit testing, how to apply for code certificate , code signing & verification , submission to Intel AppUp, Details about the binary validation etc
Prize winner in Competition "Ultrabook Article competition" (Second Prize level)

Download Travel Manager Source

Download Travel Manager Project (*.exe)

Download Travel Manager Sensors Usage Guide(*.docx)

Download Travel Manager Presentation(*.pptx)

 

Introduction

This article is all about my experience in developing Travel Manager App for CodeProject Intel Ultrabook  Competition. Here I have summarized all the details starting from how I hit upon an idea and how I went on to implement the same. We will also be seeing how we can incorporate or showcase the Ultrabook sensors.

The entire life-cycle of my project also includes the code certification, creating installer and code signing for submission.

Chronology of my project’s life-cycle -

  1. How I came up with an idea? 
  2. How this idea has transformed into an interesting article 
  3. New to Intel AppUp , What's it?
  4. Introduction to Travel manager App 
  5. Features of Travel manager App 
  6. What sensors to incorporate?
  7. How to choose the right platform for development? 
  8. How to reference and use Windows.Devices WinRT Library in a WPF Application?
  9. General UX Design Guidelines
  10. What are the design patterns used in this project? 
  11. How to Unit Test?
  12. What could have been done better in terms of functionality and usage of App
  13. How to fake and test the GPS sensor?
  14. Code and explanation for real sensors
  15. What were the difficulties I faced in Round 1?
  16. Getting the code certificate and the challenges faced
  17. How to package the code for submission?
  18. Code signing and Verification
  19. How to submit our signed code to Intel AppUp?
  20. Details about the binary validation
  21. Celebrating the success of being one among the 50 members who received 1000$!!
  22. Screenshots of TravelManager App

Quick insight to Ultabook Sensors usage in TravelManager

Video tutorial (Part 1)- http://www.youtube.com/watch?v=uo53JF7SSGI 

More detailed explanation with code walk-through

Video tutorial (Part 2) - http://www.youtube.com/watch?v=1pXbIJqYYMQ

Background

I heard about Intel Ultrabook AppInnovation contest on CodeProject which caught my interest and I started with the TravelManager App. This article can be found here - http://www.codeproject.com/Articles/469507/Travel-Manager

Please find the URL for TravelManager App in Intel AppUp: http://www.appup.com/app-details/travel-manager

How I came up with an idea?

Working in a healthcare sector, I had a plan to come up with healthcare based apps. In fact my first entry to the ultrabook contest was a healthcare App. However there was a reason why I happened to choose the Travel one.

I wasn’t much aware of the sensors in ultrabook and when I came to know about this competition I though why not to try, learn something new and contribute to the community. That’s when I started thinking about creating apps that implements sensors. I did some research to understand about Accelerometer, GPS, Light, Compass, Simple Orientation sensor etc.

Couple of links which I referred to know about sensors

http://blogs.msdn.com/b/b8/archive/2012/01/24/supporting-sensors-in-windows-8.aspx

http://msdn.microsoft.com/library/windows/apps/windows.devices.sensors

Slowly I started learning about sensors. I downloaded a Win 8 sensors samples for my understanding. Here are few links from MSDN that I have used to make my hands dirty with sensors

Sample code to demonstrate the usage of Compass: http://code.msdn.microsoft.com/windowsapps/Compass-Sensor-Sample-0ed09c55

Sample code to demonstrate the usage of Accelerometer: http://code.msdn.microsoft.com/windowsapps/Accelerometer-Sensor-Sample-22982671

How to use GPS sensor to get the Latitude and Longitudinal values: http://blogs.msdn.com/b/windowsappdev/archive/2012/08/09/liven-up-your-app-with-location-and-sensors.aspx

Sample code form MSDN which demonstrated the usage of Light sensor: http://code.msdn.microsoft.com/windowsapps/LightSensor-Sample-4477824c

I started thinking about the real world scenarios where we can make use of these sensors at the most. Also this contest was all about showcasing the sensors, I thought why not create an App which exhibits most of the Ultrabook sensors in it. Also I had a plan to relocate to United States and was looking for a free app which can help me with my travel and get more information on my fingertips. This led me to create touch aware app.

How this idea has transformed into an interesting article

Article writing, creating open source apps and frameworks is my hobby. I had contributed few articles to CodeProject earlier and I loved to express my thoughts. For CodeProject article submission, I followed the standard CodeProject submission guidelines, downloaded the article submission template and started writing the article introduction.

Before I began with the article, I had few things in my mind. Later I came up with additional features. I happened to do a small prototype of this App to build a confidence within and then started off with the actual implementation. Once I had done significant coding, I took some screenshots and included the same in my article. As the first impression of the article is always the best impression, I didn't hurry up and submit.

New to Intel AppUp, What's it? 

Intel AppUp is an application store which delivers all the latest PC Apps. One can develop and publish App using technologies like C++, .NET, Java, Adobe Air. The platform includes developing apps for Windows, Ultra books. 

Intel says, with the Intel AppUp you can

  • Find the apps you want
  • Peek at some of the coolest Featured Apps 
  • Check out Staff Picks and see what we recommend
  • Find out What’s Hot, according to other AppUp users
  • Jump to the New Releases for the latest and greatest
  • Browse by category to zero in on your interests 
  • Search for relevant apps by keyword 

Intel AppUp store has free and paid apps. One can quickly and easily do the installation. Here’s the link with which one can download the Intel AppUp Center http://www.appup.com/download-appup/index 

It works on the following operating systems: 

  • Windows 8 (32 & 64 bit)  
  • Windows 8 Pro (32 & 64 bit)
  • Windows XP Home 32 bit SP 3 (with .net framework 3.5 SP1)
  • Windows XP Professional 32 bit (with .net framework 3.5 SP1)
  • MS Windows 7 Starter 32 bit
  • MS Windows 7 Home Premium 32 bit
  • MS Windows 7 Professional 32 bit
  • MS Windows 7 Ultimate 32 bit
  • MS Windows 7 Home Premium 64 bit
  • MS Windows 7 Professional 64 bit
  • MS Windows 7 Ultimate 64 bit
  • MS Windows 7 Enterprise 64 bit 

Introduction to Travel Manager App

Travel manager is a Windows based Ultrabook App, which is essential when you are travelling or wish to know the route between any two locations. It shows a map (uses Bing Map) with the directions from Source to Destination. In addition to displaying the route, the App shows the road name, direction, kilometers to travel on all the major junctions and deviations.

This App uses a compass sensor with which one can see the N, S, E, W directions while travelling. Light sensor is being used in this App, which is required when you are travelling at night when you can’t expect good light.

Features of Travel Manager App

1. On the Road navigation with additional route information.

2. Pin my current location.

3. Location tracking, if enabled, the App tracks where you are and updates the Map with the location.

4. Show compass uses compass sensor.

5. Enable / Disable light sensor, is being used to change the map tile layer based on the illuminance (Lux) value.

What sensors to incorporate?

1. Compass: Compass sensor is being used to display a pictorial view of compass if required.

2. GPS Sensor: It is used to pin our current location in the map. It is used to get the Latitude and Longitude value and the App maps it accordingly in a map by showing a pumpkin in the map. Also the GPS senor is being used while in Location Tracking. When you click on “Location Tracking” button, the App takes care of tracking the location where you are by getting the Latitude and Longitudinal value from GPS sensor and pins a pumpkin on the map. As and when we are moving, the map will be updated with the location.

3. Ambient Light Sensor is being used in this App, which will switch the Map mode from Aerial mode (Dark Green background) to Road mode (White background) based on the illuminance (Lux). If the Lux value is less than 100, the map mode gets changed to Road mode. In order to test this feature make sure you are running in this app in a place where you have sufficient light so that the map displays with Aerial mode which comes by default. Place your palm near the web cam area so that the light illuminance value comes down below 100 and you will see the map mode getting switched from Aerial to Road mode.

4. Touch: Bing Map control supports touch screen capabilities, we can easily zoom in/ zoom out or rotate the map with fingers.

How to choose the right platform for development?

I work in Java, J2ME, .NET C# and VB.NET based applications. I would ideally recommend with Windows, .NET C# as we have huge resources (articles, code samples, libraries) plus .NET apps can be developed rapidly. Travel Manager App is a desktop based WPF App. The Apps that can be submitted to Intel App Up are desktop based apps. I was quite comfortable with the WPF applications so tried with WPF. If you are not so familiar with WPF, you can go with normal Windows Form Applications too.

How to reference and use Windows.Devices WinRT Library in WPF Application?

1. Unload the project from the solution explorer.

Open .csproj file in a text/xml editor and then add the following line to include the target platform version under <PropertyGroup>, save the *.csproj file and reload the project.

<TargetPlatformVersion>8.0</TargetPlatformVersion>

2. Click "Add Reference" from the Context Menu of Solution Explorer, and add Reference to Windows from Windows | Core tab.

3. Add reference to Windows assembly so that you will get access to the Windows.Devices. If you are curious to know where it is located then browse the mentioned path

C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral\Windows.winmd

General UX Design Guidelines

1. The App must run in full screen by default.

2. The App must be designed in such a way that it can be easily operated with touch or with keyboard/mouse.

3. Make sure the controls such as buttons should be large enough and having proper spacing between each controls so that the user feels no difficulty while using your App with touch screen

4. If your App has scrolling and navigations, make sure the scroll bars are wide enough so that the user should feel easy while using your App with touch screen.

5. If your App implements touch capabilities then make sure it works as expected with multi touch.

If you are developing a touch screen based Apps then please refer this design guideline http://www.sapdesignguild.org/goodies/TSDesignGL/TSDesignGL.pdf

What are the design patterns used in this project?

MVVM pattern is used. It's always recommended to do white box testing of ViewModels, helper classes etc.

How to Unit Test?

Unit testing is required to confirm the functionality of ViewModels , Helper classes. It's very important to perform unit tests to gain confidence, catch bugs in the initially stages of developement.

We shall see how we can unit test the ViewModel and sensor helper classes in TravelManager App.

Steps required

1. Create a Unit Test project, from File -> New -> Projects -> Templates -> Visual C# -> Test

2. Create a TestClass named ViewModelTest.cs

3. On TestInitialize we will create an instance of the RouteViewModel and the set the required properties and call the Execute method.

4. Create test methods to excersice the logic with the RouteViewModel

    [TestClass]
    // Make sure your internet connection is up and running in order to run the below unit test
    public class ViewModelTest
    {
        private TravelManager.ViewModels.RouteViewModel viewModel;
        
        [TestInitialize]
        public void Init()
        {
            viewModel = new TravelManager.ViewModels.RouteViewModel();
            viewModel.From = "Chicago";
            viewModel.To = "Waukegan";
            viewModel.ApplicationId = "AivGZJqsF5KID_iFT3evyvUTk9ksm98d5WX40Jf1o-cwtbP3PTm7-NphbtkWTQyU";
            viewModel.CalculateRouteCommand.Execute(null);        
        }
 
        [TestMethod]
        public void Should_Get_A_RouteResult()
        {
            Assert.IsNotNull(viewModel.RouteResult);
            Assert.AreEqual<int>(viewModel.RouteResult.Legs.Count, 1);         
        }
 
        [TestMethod]
        public void Should_Get_A_RouteItinerary()
        {
            Assert.AreEqual<int>(viewModel.RouteResult.Legs[0].Itinerary.Count, 11);
        }
 
        [TestMethod]
        public void Should_Get_Latitude_Longitude()
        {
            Assert.AreEqual<double>(viewModel.RouteResult.Legs[0].ActualEnd.Latitude, 42.361641079187393);
            Assert.AreEqual<double>(viewModel.RouteResult.Legs[0].ActualEnd.Longitude, -87.833889573812485);    
        }
    }

Here's the code for Unit Testing the GeoSensorHelper class. In test Init(), we are creating a instance of GeoSensorHelper then we create a test method to verify the Latitude and Longitudinal values

    [TestClass]
    public class TestGeoSensorHelper
    {
        private GeoSensorHelper geoSensor;
 
        [TestInitialize]
        public void Init()
        {
            geoSensor = new GeoSensorHelper();
        }
 
        [TestMethod]
        public void Should_Get_Latitude_Longitude()
        {
            geoSensor.GetGeoLocation();
 
            if (!string.IsNullOrEmpty(geoSensor.Latitude))
                Assert.IsTrue(true, "We got the Latitude");
            else
                Assert.Fail("We did not get the Latitude");
 
            if (!string.IsNullOrEmpty(geoSensor.Lognitude))
                Assert.IsTrue(true, "We got the Lognitude");
            else
                Assert.Fail("We did not get the Lognitude");
        }
    }

Here's the code for Unit Testing the LightSensorHelper class. In test Init() , we are creating an instance of LightSensorHelper then we create a unit test method to verify the Lux value

    [TestClass]
    public class TestLightSensor
    {
        private LightSensorHelper lightSensor;
 
        [TestInitialize]
        public void Init()
        {
            lightSensor = new LightSensorHelper();
        }
 
        [TestMethod]
        public void Should_Get_Light_Sensor_Reading()
        {
            if(lightSensor.IlluminanceInLux > 0)
                Assert.IsTrue(true, "We got the Light IlluminanceInLux value");
            else
                Assert.Fail("Problem in getting the Light IlluminanceInLux value");
        }      
    } 

What could have been done better in terms of functionality and usage of App?

When I submitted my article in CodeProject, one of the CodeProjet members - Jason Gleim gave few good suggestions like displaying the compass in the main form rather than the user seeing the compass as and when needed. Also he suggested code changes to show the expected time of arrival based on the GPS sensor data. In addition, the ability to log the distance traveled and generate a report based on the start/end date time.

I later wished that I could have included the traffic data while travelling from a source to destination location.

The most beneficial change/update that I had planned is to integrate voice guided navigation when location tracking is enabled.

How to fake and test the GPS sensor?

In Travel Manager App, there was more of GPS functionality. Fake and test was done initially (before I received an Ultrabook from Intel) in order to make sure that the App works as expected. We will see how to fake the GPS sensor to get the latitude and longitudinal values.

Created an interface with two properties as shown below

interface IGeoLocation {
 
        string Latitude 
        {
            get;
        } 
 
        string Lognitude 
        {
            get;  
        }
}

The following code block was written in a class named IpBasedGeoLocation.cs , which implements IGeoLocation interface. It’s a fake GPS provider with this helper class we are getting the Latitude and Longitudinal values.

public static IpBasedGeoLocation whatIsMyGeoLocation()
        {
           HttpWebRequest myWebRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://geoiptool.com/data.php"));
            myWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727)";
 
            //fetch the document 
            using (HttpWebResponse webResponse = (HttpWebResponse)(myWebRequest.GetResponse()))
            {
                using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
                {
 
                    // parsing time
                    XmlDocument document = new XmlDocument();
                    document.Load(reader);
 
                    // the marker is not a root so I suppose it is probable that 
                    // it could support more than a single location for a given IP
                    XmlNodeList nodes = document.GetElementsByTagName("marker");
 
                    if (nodes.Count > 0)
                    {
                        // let's just assume that the first address 
                        // is the most likely one to use.
                        XmlElement marker = nodes[0] as XmlElement;
 
                        if (marker != null)
                        {
                            // create an instance of our location class with the
                            // data from the server response
                            IpBasedGeoLocation response = new IpBasedGeoLocation();
                            response.city = marker.GetAttribute("city");
                            response.country = marker.GetAttribute("country");
                            response.code = marker.GetAttribute("code");
                            response.host = marker.GetAttribute("host");
                            response.ip = marker.GetAttribute("ip");
                            response.latitude = marker.GetAttribute("lat");
                            response.lognitude = marker.GetAttribute("lng");
                            return response;
                        }
                    }
                }
            }
 
            // this code would only be reached if something went wrong 
            // no "marker" node perhaps?
            return null;
        }

From the above code you can notice that we are making a web based request to http://geoiptool.com/data.php , in order to get the Latitude and Longitudinal values

Code and explanation for real sensors

Let us see with a helper class to understand how we can get the Latitude and Longitudinal information from GPS Sensor.

What we are doing here is creating an instance of GeoLocator class and registering a position changed event so that if there is a change in the position we can get set the Latitude and Longitudinal properties. In order to

get these values, one has to just call a method GetGeoLocation. You can notice that we are calling an async method GetGeopositionAsync and then we are looping through until the operation status is completed. Once we know that the operation status is completed we can get the co-ordinate values correctly.

    public class GeoSensorHelper : IGeoLocation
    {
        private Geolocator _geolocator = null;
        private Geoposition position;
 
        public GeoSensorHelper()
        {
            _geolocator = new Geolocator();
            _geolocator.PositionChanged += new TypedEventHandler<geolocator,>(OnPositionChanged);          
        }
 
        public void GetGeoLocation()
        {
            var pos = _geolocator.GetGeopositionAsync();
            while (pos.Status != AsyncStatus.Completed){ }
            position = pos.GetResults();
            Latitude = position.Coordinate.Latitude.ToString();
            Lognitude = position.Coordinate.Longitude.ToString();
        }
 
        public string Latitude
        {
            get;
            set;
        }
 
        public string Lognitude
        {
            get;
            set;
        }
 
        private void OnPositionChanged(Geolocator sender, PositionChangedEventArgs e)
        {
            Geoposition pos = e.Position;
            Latitude = pos.Coordinate.Latitude.ToString();
            Lognitude = pos.Coordinate.Longitude.ToString();
        }
    }

Light sensor:

Below is the helper class for light sensor. For getting the Lux value, we need to get the default instance of LightSensor. In order to continuously get the light sensor readings, we are creating a timer instance, registering its

Tick event and we set the time interval to fire the Tick event. While in event we are getting the light sensor readings.

Start and Stop methods are used to start and stop the timer.

    public class LightSensorHelper
    {
        private DispatcherTimer _dispatcherTimerForLightSensor;
        private LightSensor _sensor;
 
        public delegate void GetCurrentReadingDelegate(double illuminanceInLux);
        public event GetCurrentReadingDelegate CurrentIlluminanceInLuxEvent;
 
        double illuminanceInLux;
 
        public LightSensorHelper()
        {
            _sensor = LightSensor.GetDefault();
            InitTimer();         
        }
 
        public bool IsLightSensorFound
        {
            get
            {
                return _sensor != null;
            }
        }
 
        public float MinIlluminance
        {
            get;
            set;
        }
 
        public uint DesiredReportInterval
        {
            get;
            set;
        }
 
        public uint MinimumReportInterval
        {
            get { return _sensor.MinimumReportInterval; }
        }
 
        public double IlluminanceInLux
        {
            get
            {                
                illuminanceInLux = _sensor.GetCurrentReading().IlluminanceInLux;
                return illuminanceInLux;
            }
            set
            {
                illuminanceInLux = value;
            }
        }
 
        public void Start()
        {
            _dispatcherTimerForLightSensor.Start();
        }
 
        public void Stop()
        {
            if(_dispatcherTimerForLightSensor != null)
                _dispatcherTimerForLightSensor.Stop();
        }
 
        public void InitTimer()
        {
            _dispatcherTimerForLightSensor = new DispatcherTimer();
            _dispatcherTimerForLightSensor.Tick += DisplayCurrentReading;
            _dispatcherTimerForLightSensor.Interval = new TimeSpan(0, 0, 0, 0, (int)DesiredReportInterval);
        }
 
        private void ReadingChanged(object sender, LightSensorReadingChangedEventArgs e)
        {
            LightSensorReading reading = e.Reading;
            IlluminanceInLux = reading.IlluminanceInLux;
            if (CurrentIlluminanceInLuxEvent != null)
                CurrentIlluminanceInLuxEvent(IlluminanceInLux);
        }
 
        private void DisplayCurrentReading(object sender, object args)
        {
            LightSensorReading reading = _sensor.GetCurrentReading();
            if (reading != null)
            {
                IlluminanceInLux = reading.IlluminanceInLux;
                if (CurrentIlluminanceInLuxEvent != null)
                    CurrentIlluminanceInLuxEvent(IlluminanceInLux);
            }
        }
    }    

What were the difficulties I faced in Round 1?

One of the main difficulties that I had faced was getting the accurate Latitude and Longitudinal values. GPS was essential for this App and I was quite worried on how to get the accurate reading at least with an accuracy of 100

meters. The only possible way through which I got a within 100meters accuracy reading is when I connected my Ultrabook to Wi-Fi.

Getting the code certificate and the challenges faced

Developers who already have either of the below mentioned valid certificates can skip this topic

Chosen Security, Verisign, Globalsign, Thawte, Trust Center, Go Daddy Secure Certification Authority and Comodo

Below is the brief process of getting a certificate for developers who do not own any certificates

Here’s the first thing which I want to tell you , you should have some patience as it would take at least a week or so to get the code certificate because it involves lot of things behind the scene.

Comodo provides code signing certificate service for all the developers who wish to submit their apps to Intel App Up.

Browser Support: Comodo recommends using Microsoft Internet Explorer* or Firefox for submitting a certificate application and retrieval. Chrome* browser may not work as desired

Here’s the link below (Well explained article by Meghana Rao) which I referred for applying the code certificate. The pre perquisite is to have an Intel account

http://software.intel.com/en-us/articles/how-do-i-get-code-signing-certificate-certifying-authority

Certificates can be obtained either for individuals or for a company.

One important thing to be aware of, one receives a certificate to the same machine which he/she has requested for. Once we get the certificate, it can be easily exported and used to sign the code from any machine. We will see next on how to sign our code using code signing utility.

Once you apply for the certificate, Comodo will send you an email requesting few documents to Fax or email them. One has to provide either of the following documents for verification. Please note that comodo accepts document with the following formats: .jpg, .gif, .pdf, .efx or .bmp.

  • Articles of Incorporation (with address)
  • Government Issued Business License (with address)
  • Copy of a recent company bank statement (you may blacken out the Account Number)
  • Copy of a recent company phone bill
  • Copy of a recent major utility bill of the company (i.e. power bill, water bill, etc.) or current lease agreement for the company

For me, I happened to submit my bank statement for address proof, Government Identity card that is being issued by our country i.e. India which has my full name and photo. Comodo just asked me an additional photo identification proof. After all the document verification, Comodo will reply stating that you will have to update online directory with our full name and phone number.

Challenge:

The main problem I faced with the code certification was updating the online directory with the details that Comodo has asked to update. I would like to say one more thing that there are some online directories which are paid ones such as Dun (http://www.dnb.co.in/duns.asp) Comodo initially suggested to update then later I just asked if there are any other alternative sites where I can update my information.

Comodo had sent a link of government sites, as I remember there were at-least 8-10 sites however there were few links which did not work as expected. Also the other problem was if I needed to update my information on their site, I would have to take a phone connection provided by that site. There was one other site named “Yellow Site” where I tried, however I got stuck there as well as the Yellow site is not for individuals, it is meant only for companies.

Finally a CodeProject memeber Febin John James provided me the below mentioned steps for updating the online directory http://bangaloreyellowpagesonline.com/register/addlisting.php?type=nonelite

Enter your information, remember to write the company name as your name. Fields like add your company logo can be kept blank. Submit it and then copy the link and send it to Comodo. Make sure your phone is switched on. They will call you up for verification. You will receive your certificate immediately once the verification is done.

How to package the code for submission

We will see how to package our code for submission. If we are submitting a WinForm app to Intel App Up we can either submit as MSI or EXE. You might have noticed one thing while working with VS 2012, MS has removed the default Microsoft set up and deployment type project. Now the only available option which is available is to make use of Limited Edition of Install Shield for creating a setup project.

If it’s the first time we are trying to create a setup project, we will have to download and install “Install shield”.

Please refer this link if you are doing it for first time

http://msdn.microsoft.com/en-us/library/2kt85ked.aspx

Also please refer the below link to understand how to create a setup project with Install Shied

http://www.c-sharpcorner.com/UploadFile/cb88b2/simple-steps-to-create-setup-file-using-install-shield-le-fr/

Thanks to Jay Parekh for posting a nice article on creating a setup file using Install Shield

Code signing and Verification

Code Signing:

The Apps ready for submission must be signed with the valid certificate that we have received from the Certificate Authority (CA) such as Comodo.

Note: Code signing is mandatory. All apps that we are submitting to Intel AppUp needs to be signed by an approved CA.

Intel has provided as good code signing utility, Please follow the below link to download the same

http://appdeveloper.intel.com/en-us/article/app-signing-tool-download

Here is link from Intel explains in details about how we can sign the MSI/EXE installers

http://software.intel.com/en-us/articles/signing-msi-files

The Intel code signing tool requires us to browse or drag and drop the certificate and select the MSI/EXE installer for code signing. Also please make sure your internet connection is ON so that the code which is signed will also
have a valid timestamp else the submission may be failed without a proper timestamp.

Verification:

It’s a very important step to verify whether the installers are properly signed or not before submission.

SignTool.exe is required for this verification and It’s provided as a part of the Windows* SDK. Please refer the below link for getting the latest version of Windows SDK

http://msdn.microsoft.com/en-us/windows/bb980924

If you have already installed your system with Win 8 Phone SDK then you may find the signtool.exe in C:\Program Files (x86)\Windows Kits\8.0\bin\x64 location.

How to submit our signed code to Intel AppUp?

Here’s the link to a video tutorial which explains the process of submitting our signed MSI/Setup.exe

Thanks Praveen Kundurthy for presenting such a beautiful video on the AppUp code submission

http://software.intel.com/en-us/videos/submitting-your-app-to-the-intel-appup-app-innovation-contest

Details about the binary validation?

Once our executable is submitted to Intel AppUp, Intel validation team does the binary validation. Our App gets rejected if the validation team finds any failures in their process. What I have noticed most of the time is it is due

to user interface consistency issues.

Below are the validation steps

TCM - Test Environment

UIX02 - User Interface consistency must be preserved across the application

ILU01 - Application must download and install from AppUpSM Center

ILU03 - Application should launch on target device

TCM: Test Environment

Test Configuration Management – Passed/Failed

This section includes the details of the environment your application was tested.

Policy Check

This test for the application was executed on the following Device:

Ultrabook SDP.

Application was tested on the following Operating system: Windows

8 (64-bit).

UIX0 2 - User Interface consistency must be preserved across the application

User Interface consistency – Passed/Failed

Applications Menus and user inputs that do not function as expected will be rejected

In this section you will see the application user interface consistency is passed or rejected. If rejected you will see the detailed explanation about the inconsistency. In addition to that you will also find a link to the screenshots

so that one will clearly understand the reason for rejection.

ILU0 1 - Application must download and install from AppUpSM Center

Below are the details about the installation of TravelManager App in target device.

Applications that do not install and run correctly on the target device will be rejected

  • The AppUp client recognizes the app as being installed

  • Application should also run natively outside of the AppUp client (e.g. Start menu, program files, etc.)

Applications submitted for Windows XP and other versions of Windows 7 will be rejected if they do not run on those versions of Windows.

Application Install Passed/Failed

OS Window s8x64 - En-us

Size of the Application (MB): 2.40. Time taken to download the Application

(Minutes): <1. Application installed successfully. This test step has passed validation. However, we have made the following observation: Application gets installed through Appup client but when clicking on the download button a “warning” message is received.

Associated Files: TravelManagerWin8x64installObservation.jpg

Application Install (Windows) Passed/Failed

OS Window s8x64 - En-us

GUID listed in the XML file matches the GUID in the manifest data on the work order page. XML file attached.

Associated Files:

2af0cb0b- e5f3- 437e- ab98- d3224f0eff9b.xml

ILU03 - Application should launch on target device

Applications that do not launch on the target device will be rejected

Applications that crash or have errors will be rejected

Applications that do not function as expected will be rejected

When error messages regarding launch are displayed to end users, the AppUp client should be referred to as “Intel AppUpSM center".

Application Launch Passed/Failed

OS Window s8x64 - En-us

This test for the application was executed on the following Device:

Ultrabook SDP.

Application was tested on the following Operating system:

Windows 8 (64-bit).

Celebrating the success of being one among the 50 members who received 1000$!!

First of all I would like to thank Intel and CodeProject for selecting my app, I'm happy to be a part of the first 50 members to receive 1000$. I was enthusiastic from the beginning of the contest and it was really a great
experience competing in this contest.

Screenshots of Travel Manager App

Points of Interest

I learnt a lot after developing an App for Intel AppUp. Integrating sensors to our App and playing with it was truly an amazing experience. With this contest I learnt how effectivily we can make use of Ultrabook sensors in our App. Although one can easily get sensors samples in MSDN etc however one can only understand and would love to work with sensors if we have an Ultrabook in hand with that I would like to thank again to CodeProject and Intel for providing me an opportunity to develop and selected my App from among the first 50 members.

History

V1.0.0 - Initial release - 12.27.2012.






License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Ranjan.D
Web Developer
United States United States
Profile
 
Around 9 years of professional software development experience in analysis, design, development, testing and implementation of enterprise web applications for healthcare domain with good exposure to object-oriented design, software architectures, design patterns, test-driven development and agile practices.
 
In Brief
 
Analyse and create High Level , Detailed Design documents.
Use UML Modelling and create Use Cases , Class Diagram , Component Model , Deployment Diagram, Sequence Diagram in HLD.
 
Area of Working : Dedicated to Microsoft .NET Technologies
Experience with : C# , J2EE , J2ME, Windows Phone 8, Windows Store App
Proficient in: C# , XML , XHTML, XML, HTML5, Javascript, Jquery, CSS, SQL, LINQ, EF
 
Software Development
 
Database: Microsoft SQL Server, FoxPro
Development Frameworks: Microsoft .NET 1.1, 2.0, 3.5, 4.5
UI: Windows Forms, Windows Presentation Foundation, ASP.NET Web Forms and ASP.NET MVC3, MVC4
Coding: WinForm , Web Development, Windows Phone, WinRT Programming, WCF, WebAPI
 
Healthcare Domain Experience
 
CCD, CCR, QRDA, HIE, HL7 V3, Healthcare Interoperability
 
Others:
 
TTD, BDD
 
Education
 
B.E (Computer Science)
 
CodeProject Contest So Far:
 
1. Windows Azure Developer Contest - HealthReunion - A Windows Azure based healthcare product , link - http://www.codeproject.com/Articles/582535/HealthReunion-A-Windows-Azure-based-healthcare-pro
 
2. DnB Developer Contest - DNB Business Lookup and Analytics , link - http://www.codeproject.com/Articles/618344/DNB-Business-Lookup-and-Analytics
 
3. Intel Ultrabook Contest - Journey from development, code signing to publishing my App to Intel AppUp , link - http://www.codeproject.com/Articles/517482/Journey-from-development-code-signing-to-publishin
 
4. Intel App Innovation Contest 2013 - eHealthCare - http://www.codeproject.com/Articles/635815/eHealthCare
 
5. Grand Prize Winner of CodeProject HTML5 &CSS3 Article Content 2014

Comments and Discussions

 
GeneralMy vote of 5 PinprofessionalRenju Vinod8-Sep-13 21:16 
GeneralRe: My vote of 5 PinprofessionalRanjan.D9-Sep-13 1:21 
GeneralMy vote of 5 PinmemberAbhishek Nandy9-Jan-13 18:10 
GeneralRe: My vote of 5 PinmemberRanjan.D9-Jan-13 18:29 
GeneralMy vote of 5 Pinmembersraoh29-Dec-12 17:34 
GeneralMy vote of 5 Pinmemberstpraveen129-Dec-12 6:35 
Great dear !!
GeneralRe: My vote of 5 PinmemberRanjan.D29-Dec-12 15:35 
GeneralRe: My vote of 5 PingroupGrasshopper.iics1-Feb-13 22:59 
GeneralRe: My vote of 5 PinmemberRanjan.D2-Feb-13 5:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140721.1 | Last Updated 14 Jan 2013
Article Copyright 2012 by Ranjan.D
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid