I have an app published in the Windows Phone store for more than two years. So I started development on this app at Windows Phone 7 times where there was no In-App purchase available. Best-practice back then was to actually publish two separate apps, one Free version (most of the times ad-served) and a Pro app with some kind of Trial functionality.
In order to get both two different XAP packages I created two separate build configurations with different pre-build and post-build actions. So what the build does is:
(Pre-Build) Copy WMAppManifest file for Free/Pro (with adjusted product name, GUID, ...) to the Properties folder of the project
Build the app
(Post-Build) Rename the app package to app-name.{free/pro}.xap
(Post-Build) Copy the xap package to a separate folder
As In-App purchase is out for so long and maintaining two different apps at the same time is time-consuming (although it's 100% same code with some free/trial/pro conditions) I would like to move away to just one app in the store that is free and contains In-App purchase to enable the Pro-features.
Now my questions are:
What do you think is the best way to do that. Is there any best practice that I didn't find?
One concern that I have is that my good reviews for the pro app will then actually be lost as I can't move them obviously to the free app which will then have the Pro package for in-app purchase. Any best practices on this?
Alternatively, is there any good way to create two xap app packages without copying WMAppManifest all the time?
It's hard to answer your question - but here goes some resource - a friend of mine, once gave gave me a link to a very nice research made by Wesley De Bolster, described on his blog.
He described a method allowing to differentiate old paid users from new users - the main idea is that you get recipe with CurrentApp.GetAppReceiptAsync() and retrive the date of the purchase from it. After that you can compare the date of app's new version to the one obtained from the recipe. Then you can allow old users to use some features without buying IAP's. I haven't tested the procedure but seems to be a good idea.
Going back to your question, here is what I would do:
focus on Pro app - there are users that paid for your app, so don't disappoint them
make Pro app a free one with IAP's
implement Wesley's method to allow the old users to use features without paying once again
provide some information in the old Free app that there is a new one with new features, that will be developed further. You may also provide some methods taking advantage of RoamingSettings to exchange some information between the apps.
Related
This question already has answers here:
DevExpress: How do I develop for it without a license?
(3 answers)
Closed 5 years ago.
We are using DevExpress in my team to develop WPF application. We have limited licences but this is not a problem because you can ask someone to add DLL et work on a project without DevExpress installed.
But, because i need the combobox edit control from XPF.CORE, i saw that i need to have Dev Express installed to build the code.
SO the issue is no one can compile the code if they don't have devexpress installed.
Is someone got this issue before and find a solution?Is DevExpress.Xpf.Core the pnly one DLL with the issue?
You are violating the licensing terms of DevExpress if you copy the assemblies around. From their licensing FAQ:
Is your license on a per-developer basis? Does each developer using your products require a license?
Yes. Each developer that uses our products must have their own license. We don't license per machine, per server, or demand any royalties or run-time fees. For more information, refer to our End-User License Agreement. If you have a testing team and they need to compile the application, then those testers will also each need a license. Testers who just test the completed, compiled application (that is, use it much as an end-user does) do not need a license.
Now, when you say:
We have limited licences but this is not a problem because you can ask someone to add DLL et work on a project without DevExpress installed.
then it might not be a problem for you but do you realize that they can only dedicate so much resources to their product development if they get paid for what they deliver? I'd say take it up with your managers and convince them that the right way is to buy more licenses or cut down on the number of people working on the product because otherwise they are facilitating illegal use of the product.
So the issue was about the default theme of the application.
Starting with version 16.1, applications with DevExpress components
use the Office2016White theme by default, and the
DevExpress.Xpf.Themes.Office2016White library has to be deployed to a
client machine.
If you don't want to use the Office2016White theme in your application, specify a theme of your choice in the application constructor using the DevExpress.Xpf.Core.ApplicationThemeHelper.ApplicationThemeName property or set the ApplicationThemeHelper.UseLegacyDefaultThemeproperty to true.
Reference - DevExpress QA thread
I'm wondering if it's possible for a Xamarin application (all the platforms : Android, iOS, Windows Phone) to detect and load assemblies at runtime.
This is the kind of thing that I already did in WPF, and I'd like to use those modules (maybe with some modifications) in a Xamarin app.
I've spent yesterday looking for info online, and today I tried to implement a solution, but without success.
Prism seemed to be a way to do it, but it works only in WPF.
The restriction which makes this difficult is that I don't know at compile time any information about the assemblies. No names, no versions, no classes.
I can put the name and the version in the filename, and maybe find the classes by reflection. Using an interface as entry point (Prism use this), I should be able to do it.
Do you have any thoughts about this challenge ?
Thank you very much !
iOS: No
Apple does not allow code that was not bundled into the app at signing time to be executed, thus no on-the-fly Jit'ing of CIL allowed. The only exception to this is Javascript code that is run via their Nitro JavaScript Engine.
Android: Yes
Google allows just about anything you can think of, for better or worse ;-)
Windows Phone: No
All code must be signed as part of the Microsoft Store' App Ingestion process and thus you can not dynamically load assemblies later
Note: If this is a hard requirement for your app, you should look at hybrid mobile apps, like Cordova/Ionic, where you can perform a hot push to roll out new features, bugs fixes, etc... Besides self-hosting those hot pushes, various vendors support hosting of those, even Microsoft Azure has a full versioning publication system for this. Of course you would most likely be coding in JavaScript (or some trans-compiled variant).
I've been trying to find an answer to this for weeks. Hopefully you are able to help me out! :)
I've got a C# application. It has multiple classes and multiple Forms. The forms also have images on them in PictureBoxes.
These images are all stored in an Assets folder inside the bin folder i.e. /bin/Assets.
When developing, I run the application in Debug mode.
I have looked on YouTube and all areas of the internet to find how to create an installer for my application. I see a majority of posts about ClickOnce deployment, which looks like it's what I want. The issue is that the ClickOnce wizard asks you where to install the application:
I do not have a server to host the application on (I have tried examples I've seen such as \localhost\myfolder\myApplication) I do, however, run my own website through a NameCheap host where I could provide a link to the application for users to download. I'm not quite sure how to set this up though.
I do not want the users to install from a CD
I don't know how to do the File Share method
This is the first obstacle. Regardless of what I choose, I cannot get the setup to work. I think the big issue is that I can't find how to include my Assets in the project and I don't know where to install the application.
The next obstacle, is that when users download my application, I would like to be able to push out an update, and have them have the update automatically (or only need to restart the application to get the update). I do not want them to have to re-download the application every time there is an update, as there are updates several times per week.
Again, I believe ClickOnce handles this but since I cannot even get to this step, I am not sure.
So, in the end, this is the use-case:
User is able to download the application from a website. Once application is downloaded, all further updates to the application are pushed automatically or only require a restart of the application to obtain.
I have gone through all the documentation on ClickOnce as well. Specifically this link. My issue is on #4.
I hope you are able to help, thank you!
Sharing the installer should not be an issue you could simply do that through Dropbox.
You can host your Updater on Dropbox as well but anytime you have new Updater replace the old one so the web link remains same and that it is because you need to know the the Updater link in advance to put it in the original installer.
You mentioned that you have a website through NameCheap, I believe you could use that instead of Dropbox here is a youtube links that might help.
https://www.youtube.com/watch?v=PEXcWln2Fe8
https://www.youtube.com/watch?v=rUNQphoGVwQ
I personally don't use ClickOnce but I use A Microsoft Windows Installer and I develop my own updater. ClickOnce is easier use for you at this point but later in future, you could explore other ways.
Wish my answer is clear if not just let me know,
Good luck
Is there any known way to protect windows 8 store app from piracy? When I wrote for Windows Phone 7/8 I just checked for existance of some fields in WMAppPRHeader.xml. In Android I can check package signature and I have LVL library. In iOS it's enought to search for some files inside a package.
But does Windows 8 store app have some similar?
Yes and no.
Just about everything you do, even in those cases you mentioned above, can be disassembled and overwritten. Consider, all they have to do is replace those lines in assembly (completely ignoring disassembly) with a NOP slide and then repackage it, signing the app package with their own certificate and installing it on their own machine.
The key is the way that they have to install this. In order to install a metro application, they need to get a developer's license and side-load the application. According to MSFT, they track (in some way) the usage of this developer's side-load to ensure that you are not installing pirated applications and are indeed using it for testing and development purposes (which you have to agree to in order to get the developer's license).
Now, if someone were able to bypass this system further, then this won't affect them as much, but that's the way DRM works. As of the current state of technology, it's not perfect (and likely never will be).
To answer your question though, Windows 8 has similar features built-in to the system. Users who misuse their developer's licenses will lose that license and be unable to side-load applications at all, so long as the system works.
You can do things to make it more difficult for them to, say, disassemble and repackage your application and sell it on the store like has been quite common in Android markets. Check out Dotfuscator. They have a version specifically for Marketplace apps.
Unfortunately, that's the best that can be offered. You can make it harder to pirate, but not impossible. You could have the app hash the contents of the install directory and send that off to a mobile service to be verified, but they could just as easily run it once regularly, sniff the packets being sent, then replay the verification response. You could also create a signing certificate in the mobile service and verify that the response is coming from the mobile service itself, but they could also just replace that certificate. You could have it pull the certificate from your mobile service in the first place, but they could just point your app to their own mobile service.
And, again, they could just bypass the checks entirely.
The system has drm already in place to try and make it more difficult for pirates to create a usable system, but with piracy, where there is a will, there is a way.
i have been writing applications in VC++ & VC#.
I know how to provide user with customization for the whole application & its functionality and all.
But what i have been impressed with is Mozilla Firefox & its plugin. I can find plugin for almost any customization i want:
Multi-row bookmarks, Automatic Save Folder, Block Site, User Profiles, Flash Video Saver, Page Rank Tool, Facebook Updates and every other stupid\ingenious thing you want in your browser.
That got me thinking how far did Mozilla think before developing the base program, i.e "Firefox" with its custom settings. I mean they put in flexibility so that there could be multiple lines of bookmarks & user can select to show how many and rest will be in scroll-down. And this and all the other stuff.
All this functionality that comes from plugins, how.
If i want to make a software\application that can have upgrades\plugins\patches. How to di it.
Where & What do i need to start learning?
My idea of doing this is to write separate DLLs for a lot of things of the application\software and everything of software is defined in DLL and no matter an update\patch\plugin, just modify\upgrade\replace the DLL and you can do this.
It's a complex subject, but you might want to check out MEF at http://mef.codeplex.com/ which is a framework that guides you down creating pluggable managed applications. I remember the hands on labs being a good starter, although it was a few versions ago I last looked at it.