Sep 17, 2010
With Apple totally revamping the “Sales & Trends” and “Financial Reports” they gave a shiny and wonderful AJAX Interface. But at the same time, because of the lack of a public API, this meant that we tool vendors had to burn some midnight oil to get our downloaders fixed up again.
This version of MyAppSales is a maintenance release with these goals:
- navigate the AJAX pages to retrieve Daily, Weekly and Financial reports
- adapt to the changes in the financial reports format (reports would be empty)
- Minor tweaks, like use the smaller financial report description when displaying report sums
I am still working on migrating the database into CoreData to be able to make it 4.x compatible. Currently there are lots of caching mechanism that cannot handle when the app is being killed, like when you remove it from the recent apps list. Another problem is that settings will not be saved. So until further notice you have to keep building it against SDK 3.2, it will still run fine on your iPhone with iOS 4.x.
The update is in the trunk of the subversion repository.
Aug 09, 2010
A user of MyAppSales approached me and asked for the possibility to pre-configure the app such that he could give it to a partner of his. The goal was twofold:
- Pre-configure the account for iTunes Connect such that you don’t have to give your credentials to your partner
- Filter sales reports such that only the apps come through that the partner is receiving a share of sales for
… and all of this without impacting the other features like review downloading.
Since I have such a partner myself for which I’m now publishing 3 apps, I sat down and – after fighting with Xcode over a second target – added a couple of lines to the MyAppSales trunk to enable the “Partner Version”.
In the PCH file you enable and configure this special version by removing the // in front of the first define. Then you need to specifying your ITC credentials and an NSSet of Apple App Identifiers.
// to enable the partner version, re-enable the following define and fill in the three values below
#define PARTNERVERSION_ITC_LOGIN @"email@example.com"
#define PARTNERVERSION_ITC_PASSWORD @"SECRETPASSWORD"
#define PARTNERVERSION_FILTER_APPS_SET [NSSet setWithObjects:@"335519920", @"329678407", @"374457741", nil]
I’ve added a filter for the specified PARTNERVERSION_FILTER_APPS_SET in two places to ignore all lines on sales report where neither the Apple Identifier nor the Parent ID is in this list. Since the app never sees any apps outside of this filter those also won’t pop up on the apps page.
For the preconfigured account, the app adds this ITC account if there are no accounts defined. So if your partner were to remove this account accidentally it would be configured once more on next app start.
All you need to do after configuring and building a release version is to zip and ship the app and provisioning profile to your partner. Easy enough?
Jul 21, 2010
Apple changed two column headings on the financial reports because apparently the June reports are the first ones which will also show eBook publishers their revenues.
- “Artist/Show/Developer” became “Artist/Show/Developer/Author”
- “Label/Studio/Network/Developer” became “Label/Studio/Network/Developer/Publisher”
There where quite a few hot fixes that I had to put into MyAppSales and also if you look at the code you’ll see that it’s in the middle of being migrated to CoreData. The latter is necessary because the current method of caching everything is really ugly code whereas CoreData will permit me to make the app perform way better and it only fetches data I truly need.
Unfortunately (or fortunately depending on how you look at it) I’m very busy with a major project for the last few months, so I cannot really muster the time right now to carry through this migration. But because this is a point of stability in MyAppSale’s live that I can publish it as a new version. Lots of people where continuing to use the previous “released” version because for some reason they feared that the “2.0 BETA” in the Subversion trunk might be unstable. When in reality it aways was the code I’ve been using on my iPhone.
Speaking of iPhone 4, you still need to build it with SDK 3.2 until further notice for exactly the reason I mentioned above: ugly caching. It works fine on my iPhone 4.
Here are some goodies that I also hacked into 1.0.16:
- Ability to remove individual reports. For example if something goes wrong during download.
- You can opt to show a report sum on the overview pages. This is slower because for it the app needs to fetch the sales data, so it will impact scrolling. But if you don’t scroll much then its a useful number to see at a glance.
- I’m now using the standard currency formatter for all amounts
Please update your copy from the repository as usual.
Dec 24, 2009
The latest version of MyAppSales contains a fix for times when iTunes Connect is offline, but the ITTS reporting site is still running.
This way you still get your daily sales reports throughout the downtime for ITC which was announced to go from December 23rd until December 29th.
Another minor change is that review scraping no longer is requires for the app totals to be loaded because all reviews for all apps are scraped at the same time anyway. This is a minor startup speed benefit.
Merry Christmas and Happy Holidays!
UPDATE Dec 26th: Apple caught up on using the ITTS url for report downloading and shut this down as well, giving this message.
So, there now really IS no way to get to your daily reports anymore. We all have to wait until Dec 29th.
Dec 10, 2009
There are a couple of users of MyAppSales who have been collecting daily reports since the first feeble beginnings. Turns out that if you have upwards of 300 reports in your apps.db then the previous method of loading everything at program start has a major drawback. There is a watchdog timer which kills any app that takes more than 20 seconds to start which caused a couple of users grief because that’s how long it took to load on iPhone 2G or 3G if you had that many reports.
This release is all about startup speed. On my own iPhone 3GS I managed to get from 12 seconds down to about 2. Also I was intrigued by the request to add a Tweetie-2-like Pull-To-Refresh mechanism, so that’s in there as well.
- ADDED: Added Pull-to-Refresh on all review table views. Just like in Tweetie 2.
- CHANGED: If a review text or rating changes then the review will now be updated and marked as changed.
- FIXED: Country assignments for some report regions where incorrect causing financial reports to be incorrectly rejected as duplicate. Fixed translation language for China.
- FIXED: Changed from GET to POST for Google Translations to support extra long review texts.
- FIXED: Bug would cause link between InAppPurchase and App to disappear upon restart
- CHANGED: Rewrote totalling to cache and replace averaging
- CHANGED: Numerous performance improvements
- ADDED: Lazy loading for reviews for additional speed improvement on startup
- ADDED: Transparent 2-stage loading of reviews to speed up opening of review page for an app
- CHANGED: Made more UI elements opaque to speed up table view drawing
- ADDED: Financial and Monthly Free download on Import/Export homepage
Generally if you have any issues after applying this update then please go to the settings page and tap “Empty Caches”. This removes all the cached .dat files keeping information for faster access.
Now that I am coding full time I can spend hours and hours on lots of things. I have to literally force myself not to take on too much before releasing a new version. I’ll have to start updating all my other apps, create some new ones and then there are some looming contracts.
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.