Nov 29, 2009
This new release is about fully integrating In App Purchases (IAP) into MyAppSales. Until now I did not need for IAPs to be displayed correctly because none of my apps have them. But my friends over at Crowded Road kept insisting that this is a key feature, so I invested some time to give IAP the special treatment.
- FIXED: Prevent app from saving incomplete reports without a date. This would cause a crash on subsequent starts of the app. There are also additional measures to prevent loading such a report should it be present in the database.
- FIXED: Added missing country FI as identifier for Europe region of financial reports.
- FIXED: Added missing country CO as identifier for USA region.
- FIXED: Correct spelling of country Vietnam. This would cause a financial report with this country in the first line to be detected as “rest of world”.
- CHANGED: If you have reports from more than one app grouping (aka Apple account) then reports for those no longer show the apps of other groupings.
- CHANGED: Apps and IAPs are now child classes of Product to allow for polymorphism.
- ADDED: IAP Products are now kept in a separate table from apps
- ADDED: IAP support on the overview and country detail report views
- ADDED: IAP support for export via built-in web server
The other reporting apps I had a look at tread IAPs just like regular apps, because at first glance they look the same in Apple’s reports. They have an apple identifier, but it’s not valid to open iTunes with it. To tell IAPs apart from apps you have to look for the IA1 transaction code and the filled in parent code. In the table the transaction is represented as 101 because it needs to be numeric.
Personally I am opposed to showing IAPs at the same level as apps and therefore MyAppSales shows you IAPs as part of the total royalties and average daily sales on the app page and also integrates it into the report views. If you don’t have IAPs you will not notice any difference in the UI.
Still you are encouraged to update your working copy to the latest version in the repo’s trunk or the release-1.0.13 tag because of the multitude of small fixes contained and for IAPs to be handled correctly should you ever have any on any report.
Bug reports or feature requests please add to my bug tracker.
Nov 19, 2009
This new release fixes two urgent issues that became pressing today: Downloading and Notifications.
- FIXED: Apple modified form field names in iTunes Connect yesterday which would cause permanent “no day options found” error message
- CHANGED: Added code to get the field names from the HTML so that similar changes would not cause this problem any more.
- FIXED: Push Notifications via the Notifications would cease to function. This was a bug on the server-side. Any new subscriber would overwrite the previous subscriber.
- ADDED: If there is a Notifications account set up then the app will now check if it is subscribed at every launch. It will then subscribe if it is not – for some strange reason.
Any version prior to 1.0.12 is no longer able to download reports as of today. So if you put off updating until now then you have no choice any more.
To update either do a fresh checkout or update your existing working copy. If you have not linked your checkout back to the repository please do so and then “SCM – Update Entire Project”.
I’m also announcing the MyAppSales VIP List. If you are a CEO or otherwise important person and cannot be bothered to update your working copy of MyAppSales via XCode then this is for you. I have very limited space available on my device list but for VIPs on this list I will be making AdHoc builds for each future version. You may apply for inclusion via e-mail.
Nov 09, 2009
Always towards the middle of the month I seem to accumulate so many fixes and tweaks from my user base so that it I feel pressed to formally release a new version. For 1.0.11 I fixed several minor things and as a bonus I added the possibility of forwarding all reviews for one app via in-app-email.
- FIXED: Users with multiple vendor IDs would get an error message because of the extra vendor selection screen in iTunes Connect. Now always the highest vendor ID is used.
- FIXED: Users who enabled passcode protection would never get any reviews being downloaded.
- ADDED: In-App-Purchases have a alphanumeric trasaction code. This is now changed from IA1 to 101 so that it can be saved to the database. There is no reflection of IAPs in the UI yet. Previously such lines would have gotten ignored.
- FIXED: Added agent string so that app icons can be be retrieved. This fixes Apple’s recent change requiring an “iTunes” agent string.
- FIXED: Even if the language code for a store was the same as the chosen target language reviews would still be tried to be translated.
- FIXED: Users who updated from earlier versions have a service type “HomeDir”. The previous workaroudn was to remove the account and create a new ITC account in Settings. This is no longer necessary and done automatically.
- FIXED: Deselect report row if chart has no row.
- CHANGED: Shortened Back Button to “Apps” on review screen.
- ADDED: You can now forward all reviews for an app via In-App-Email.
- FIXED: Removed gray shadow of app subtext on app tab which would cause blurry look.
So if you have translated reviews behind one app, you notice the new forward button in the upper right-hand corner…
You can now e-mail the developer (or yourself) all the reviews as an invaluable source of inspiration to improve your app! In-App-Email also supports landscape view by the way.
Version 1.0.11 is tagged in the Subversion Repository. You can either update your source from there or opt to update from trunk where development is continuing. Tagged versions are always a stable milestone while in the trunk I make no such warranty.
Note: if you checkout a project from any repository you have to set the project root to be the repo you set up to establish the link. I noticed quite a few users always doing exports when it is so much easier to only push “SCM – Update Entire Project” to get the latest version. So please go into the project settings and make the connection.
Oct 25, 2009
Exactly a month and 2 days have passed since the latest update and you guessed correctly: this is a major one. It brings two technologies into MyAppSales that I was kind of afraid to try because I was fearing the technical difficulties and the work that was necessary to make them work. But now that they are in, I’m glad I did.
- ADDED: Smart Multi-Account capability. You can now add multiple ITC accounts and the reports will be downloaded. Note that the UI is still the same, so reports will appear individually, always showing all apps. This will be addressed in a future version.
- FIXED: The Passcode Lock also appears if the app resigns active status.
- FIXED: Some financial reports from January 2009 or before would cause a crash because Apple was using full country names previously, some with strange abbreviations.
- ADDED: When a new report is downloaded my server is anonymously pinged and saves the availability time. The first time a new report is encountered a push notification is sent out.
- ADDED: Different types of accounts are now supported. To begin with you can setup multiple ITC accounts and one Notifications account.
- ADDED: Notifications via the 3rd party app Notifications can now be subscribed or deleted via adding and removing of the account in settings.
- ADDED: The myappsales:// URL scheme is now supported to open MyAppSales to a specific report screen. This is used by the push notifications to open up the daily reports page where you can see the new report appear.
If you are upgrading from a previous version then it will appear as if MyAppSales is downloading all reports again. It does not really duplicate the reports and you can just let it run. But you may also quit the app via the home button after the first such download. This is necessary to establish the smart app groupings. MyAppSales figures out which apps belong to which group (aka account) and will use this fingerprint in the future to intelligently establish which account a report belongs to and if it is a duplicate. This approach also allows to detect from which account manually imported reports are coming and sets up the app to get reports from totally different sources in the future. One such service will be allowing you to share sales data on specific apps with selected users.
I have to use a 3rd party app to do the push because only Apple approved apps can do push notifications. But I can piggyback on their service to make the experience identical as if MyAppSales had notifications itself. The only differences are that you have to set up a Notifications account and that MyAppSales cannot directly deal with notifications while its open. So if you are the first to see a report and you get the notification just click “Cancel”.
It is recommended that you make a local copy of the database via the built-in webserver. There should be no problems in updating, but in some rare cases manual changes might be necessary. And it never hurts to have a backup.
Version 1.0.10 is tagged in the Subversion Repository. You can either updated your source from there or opt to update from trunk where development is continuing. Tagged versions are always a stable milestone while in the trunk I make no such warranty.
Oct 23, 2009
When I researched locales for LuckyWheel and time zones for MyAppSales I discovered that Apple had outfitted my iPhone with a complete database of all timezones worldwide as well as methods that would return the next DST switching time. Back then I thought “that would be a cool feature” and found it strange that there is nothing like this in the regular iPhone UI to actually access this data.
Do you know the feeling that you have an app stuck in your head that wants to get out? You’ll know what I am talking about if you have an idea that frequently comes into your mind because you have not acted on it. There are three ways to deal with such ideas:
- look up your local locale and down enough alcoholic beverages to destroy those few synapses that kept bothering you.
- use a notepad (or notepod) to jot down the idea and draw some sketches off the pictures that float around in your head. To the idea this will feel like validation and it will stop vying for your attention.
- or if it can be done in a day, build the app!
I just had finished my work on the H1N1 Swineflu Defender app contract, so I had a couple of days of my spare time to spare for a quick app like that. And strangely enough this way just the perfect time right before the next DST switches for Europe and the USA to also capitalize on DST being a hot topic this time of year as everybody is searching on Wikipedia or Google for when the switch will actually occur.
Oct 05, 2009
In the reviews (which we are now getting with MyAppSales *g*) we saw some complaints which this update aims to address:
- Customers complained of some really “bad English”. Native English speaker Michael Kayne of SendMeToSpace.co.uk volunteered to proof-read and massively correct all of this.
- Due to a partially intentional “bug” some people who bought the full version saw advertisements on the end-of-round screen. Since they gave rather passionate feedback against that we decided to end this experiment. First via disabling ads on the AdMob dashboard, and now by removing the ad code altogether from the full 1.1.2 version.
As usual we dropped to price to $1 until Apple gives it the nod. We sent them the binary yesterday.
Sep 23, 2009
This new version, on which I’ve literally been working every free minute in the past week, completes the featureset to make reviews useful for people of all languages because it introduces automatic background translations to a language of your choice. And finally you now find full support for automatic downloading Monthly Free and Monthly Financial reports.
- ADDED: Background processing of review texts with optional language translation.
- ADDED: New setting to choose target language or no translation.
- ADDED: If you change target language you get the option of deleting previous translations and redo them for the new language.
- ADDED: Downloading of Monthly Free reports which complement the financial reports showing downloads of free apps.
- ADDED: Downloading of Monthly Financial reports
- FIXED: Flag would not show if there was no sale in last 7 days.
- FIXED: Many other small bugs related to reviews, translations or financial reports.
- CHANGED: Apple uses 50 pixel country flags now, changed code to get flags of new stores from new URL
- CHANGED: Revamped duplicate checking code to be more robust.
There is a known issue with the new downloading pipeline which is actually Apple’s problem. It seems that under some circumstances (too much load?) their ITC website does not properly pass on credential cookies to ITTS which is where the daily and weekly reports are hosted. So every once in a while you might get a red message stating that an unrecognized response was received. This is due to the fact that ITTS is sending an HTML page stating that the session has expired when it actually just has started. The present workaround is to simply hit the refresh button on the reports page, the second time it generally works.
As usual you can get these updates via SVN, it’s tagged as well as the current contents of trunk. And of course I am still happy to receive your donations if you think I am doing a good job maintaining and improving MyAppSales.
Sep 15, 2009
If you’re scratching your head, thinking to yourself “didn’t I just see a new version just 5 days ago?” then you are absolutely right. There really was a new version that recently. But that did not prevent me from going into overdrive and burn much midnight oil to get the next release out.
Buckle up, this is “The Review Release”!
- ADDED: Tapping on a row on the apps tab now shows the reviews sorted chronologically, new reviews have a red headline
- FIXED: A bug would cause a chart to hang if the user had sales in excess of a couple of thousand dollars per day or week. Yes, there are really such iPhone Developers who make boatloads of money and they use MyAppSales.
- CHANGED: Added compiler directive to prevent trying to build the project below SDK 3.0. I figure you are all developers out there and no serious developer would still have his iPhone on an OS below 3.0.
- CHANGED: The iTunes Connect downloading pipeline is now an NSOperation using synchronous calls. Added a ton of additional error catching code.
- ADDED: Buttons on the review screen to directly page to the previous or next report of the same type.
- ADDED: A multi-threaded review scraping engine which is also based on NSOperation. This is amazingly fast compared to competing engines, and all running completely on a background thread. So this can run while you are checking the new daily report.
- ADDED: Settings to allow enabling of review downloading and setting of the interval.
- ADDED: Badges on the app icons show the existence of new reviews.
- CHANGED: your database will be upgraded to schema version 3 with new tables for the review stuff.
- FIXED: The sync button on the review page is now properly disabled when the sync manager is active.
- ADDED: Monthly Free reports now get downloaded as well.
- Financial reports are still experimental and thus don’t get downloaded automatically. Sometimes they are labelled incorrectly and there are lots of other unsolved problems. Check the bug tracker to find out which.
- Sums are generated every time after there are new exchange rates or new reports. This might cause short periods of lagging.
As usual, before you upgrade, please make a backup of your apps.db. The upgrade should be straightforward, but it never hurts to have a backup.
The release is tagged in /tags/release-1.0.8 and you may checkout this exact version either from the terminal or via XCode. Or you can simply “Update Entire Project” in XCode’s SCM Menu provided that you have linked your working copy with the repo.
If you have not donated yet to keep me improving MyAppSales, then please do so now to get access to this fabulous update. If you already did, you are welcome to show your continued appreciation by another small donation.
Sep 10, 2009
The gist of the updates to the MyAppSales codebase for version 1.0.7 where related to improving performance and lay the groundwork to be able to add new features or rewrite current ones with the least impact. For example I added a method that allows me to dynamically upgrade the DB schema from all previous versions to the current one without losing data. This way I can add new tables to existing databases.
Also I added an AccountManager class which allows me to enumerate and deal with multiple accounts. Currently only the first you set up is checked, until I can figure out a safe way to prevent duplicates or wrongfully detected report duplicates from multiple accounts. I am thinking of doing sort of finger-printing letting the app figure out which apps belong to the same account. Something smart like this is necessary because a user is at liberty to delete an ITC account and also a future import mechanism will be FTP and there you also don’t know which account those files are from.
There where so many little changes that I simply did not want to wait any more to tell you what’s been going on there. So please be easy on me regarding unfinished features. It’s coming, be patient grasshopper!
- ADDED: Experimental support for monthly (financial) reports. Manual import only.
- ADDED: Possibility to lock MyAppSales with a passcode (aka PIN)
- CHANGED: Ssettings are now saved in NSUserDefaults as opposed to a plist in the app’s doc dir
- CHANGED: Split the database code and the iTunes Connect code into discrete classes in preparation for future multiple data sources
- CHANGED: Replaced keychain wrapper with new custom AccountManager class that allows me to enumerate over accounts in preparation for future additional data sources like multiple ITC accounts as well as applyzer, admob et al.
- FIXED: The lower part of the cancel button behind “Empty Cache” was irresponsive
- ADDED: Smart detection of iTunes Connect downtime due to maintenance
- ADDED: now the iTunes Connect cookies are checked to see if a login was successfully as opposed to scraping
- FIXED: Login failing after clearing the cache
- CHANGED: It is no longer possible to combine multiple reports into a single text file for import. The first line of a report is used to determine the report type and dates for the whole file.
If you have a large database and use the passcode lock you might experience a second or so delay right after program start when entering the code. This is normal, and caused by summing app totals being done right after app start. I’ll have to move this to a background process eventually.
If you have multiple old text files to import it is best to feed them in original format to MyAppSales. Should you have several reports mixed into one, here’s a quick shell script that splits those into multiple files and zips them for single-file-importing:
# Usage: ./split.sh single_text_file.txt
cat $1 | cut -f13 | grep / |sort -u > days.txt
for I in `cat days.txt`
NAME=`echo $I | sed -e "s/\//-/g"`
echo "FILE: $NAME";
head -1 $1 > $NAME.txt
cat test.txt | grep $I | sort -u >> $NAME.txt
zip import_me.zip *-*-*.txt
I have begun to tag the releases on the svn repo. In the trunk you will always find my latest experiments. If you want to get stable code you can now get that from the tags folder.
To summarize: In this release you will find a little bit of eyecandy. But I am proud of the passcode locking feature which has only been requested last week and now it’s already implemented. (Honestly I needed it for another project, speaking of reusable code). I am excited to be approaching a state of the code where I can think of adding data from Applyzer, advertisement reports from AdMob or simple add reviews.
Please let me know what you think by either commenting here or raising a
bug report feature request at http://www.drobnik.com/bugs