Ad

Our DNA is written in Swift
Jump

Category Archive for ‘Updates’ rss

MyAppSales 1.0.7

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.

multi_account

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!

passcode

  • pin lockADDED: 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:

split.sh

# Usage: ./split.sh single_text_file.txt
cat $1 | cut -f13 | grep / |sort -u > days.txt
for I in `cat days.txt`
do
        NAME=`echo $I | sed -e "s/\//-/g"`
        echo "FILE: $NAME";
        head -1 $1 > $NAME.txt
        cat test.txt | grep $I | sort -u  >> $NAME.txt
        echo $I
done
 
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

I’m listening!

MyAppSales 1.0.6

There has long been an open feature request for MyAppSales on the Mantis Bug Tracker for displaying a sum total of units sold and royalties earned. Until now I had thought that I would have to rearchitect the way I am calculating sums, but it turns out that a simple SQL statement is fast enough even with almost a year worth of data in the SQLite database.

Apps Screen New LookAnd while I was at it, I also made some additional useful additions and some visual changes.

  • CHANGED: Look of Apps page changed to be closer to AppStore app
  • ADDED: Royalties earned so far and Units sold (coming from Daily Reports)
  • ADDED: Sums are being recalculated when there are new currency exchange rates and after sync
  • ADDED: Smart Auto-Sync. When started the app only communicates with iTunes Connect if there has not been a new report downloaded today.
  • ADDED: “Empty Cache” button on Settings page removes cached app icons, chart cache and other temp files that might have gotten left over in document directory. This also causes the app names to be reloaded from iTunes.

As usual you can update your source code directly from the Subversion repo.

AntiCrack 2.0

I am extremely pleased to announce a major new release of AntiCrack. While the implementation details have changed very little our new lead developer Fabian Kreiser has rewritten AntiCrack from ground up to obfuscate it to the extreme. Also he researched and developed two additional technologies which should immediately make your mouth water:

  • Denial of Debuggers. This makes it impossible for Crackulous to remove encryption.
  • Checking of binary encryption. The encrypted envelope put on by Apple in the review process is now checked for integrity.

Previously existing AntiCrack 1.x users are getting the update for free, for everybody else the minimum donation has been increased to 30 Euros. I switched from Dollars to Euros because the increasing weakness of the Dollar started to get on my nerves.

1.x versions of AntiCrack did not really prevent cracking of apps but provided a comprehensive and easy to implement toolset allowing users to dynamically adapt their app’s featureset to “Lite” once a crack was detected. The groundbreaking 2.0 release also prevents cracking in the first place. This again makes it on par with the professional Kaliap copy protection service offered by Ripdev.

Personally I believe it’s now even superior because you get full source code for AntiCrack, don’t have to pay recurring charges and you don’t have to register all new apps and app versions with an online service. I’ve updated the AntiCrack product description page if you would like to read more.

LuckyWheel 1.1.1

The version with three ones is always something special for me. That’s why I added several features to LuckyWheel 1.1.1 that have long been requested.

  • ADDED: Button to turn on/off sound effects, so you can now listen your your music without disturbance
  • ADDED: End-Of-Round Screen which shows total standings so far
  • CHANGED: You no longer loose all your previous points when hitting “bankrupt” but just the current round ones
  • CHANGED: Game state is always being saved even when on the End-Of-Round screen. Continue then starts with the next round. If this already was the last round then no continue is possible.
  • CHANGED: A new design for the buttons to replace the previously used blue standard buttons
  • FIXED: 2 minor spelling mistakes corrected in proverbs
  • ADDED: Lite Version now showing ad banner whenever a computer opponent has his turn.
  • ADDED: End-Of-Round screen also shows an unobtrusive ad.

Since the Lite version is constantly being downloaded around 400 times per day I gave in to the temptation and added AdMob advertisements. I think they will make waiting for an AI opponent to finish less boring. When it’s your turn they always make room.

And to say “Thank you” to all those people who are downloading the Lite version we have doubled the number of available proverbs to guess for free!

Both versions have been submitted to Apple. Hopefully it can get approved soon so that you can reap all those benefits.
In Review

Update September 4th: After 13 days both updates have been approved and are now in the app store.

MyAppSales 1.0.5

First day back from vacation I chose an easy thing to do to get back into the saddle. Nothing too complicated because I don’t want to relapse into needing another vacation right away. I fixed a bug in MyAppSales and bragged blogged about it. This formal release contains these updates:

  • CHANGE: All __MyCompanyName__ now changed to drobnik.com
  • FIXED: Login problems after Apple updated iTunes Connect (quick-fixed previously)
  • FIXED: Password not getting properly URLencoded

The last part is especially necessary for you if you have a plus sign or other characters in your password which are not safe in URLs. If you previously experienced such problems please accept my apologies if you managed to lock your iTunes account. This update should fix this problem for you.

The changes which had been necessary to deal with Apple’s update for iTunes Connect had previously been in the repository but now they have a formal version number. As usual you can update your copy from the SVN customer-only repository.

MyAppSales – Quick Fix

On the very first day of my vacation Apple updated the iTunes Connect site breaking all existing report downloaders.

My hero is Lukas Matablewski who figured out the necessary changes. Stefan Sorin Nicolin, who is hosting the MyAppSales svn repo commited the changes to the trunk. So please update your working copy now.

All of this while I am in a beautiful NO SIGNAL region of Austria…

LuckyWheel 1.1.0

Lately LuckyWheel has been seeing wonderful growth in a couple of markets as I am able to see on Applyzer.

Applyzer Growth

New Player Screen

That was enough reason for my partner Michael and me to give the UI a major pimping and add a couple of bonusses some of users have been wishing for a long time.

  • Fixed: Continue Button might not get enabled even though continue is possible
  • Fixed: If player finishes round the bonus and score would not be shown correctly
  • New: UI Look redesigned
  • New: Play now against 1 or 2 AI opponents with random difficulty level
  • New: Question language can now be chosen from inside the game

I’m especially proud of the latter two. Inventing a good AI that is a challenge to play against is really hard. And the language selector is a scroll view which you can switch either with two arrow buttons on either side or with your finger.

It’s been submitted to Apple today, let’s see how long they are taking now to approve updates with the 3.0 rush going on.

We have one more thing planned for the update after this on. I want to redo the score screen and show this after each round. So if you hit the bankrupt field you only lose the current round’s points. Also I will to some more animations there. As usual let us know what

UPDATE  June 16th

Of course I missed something that Apple could use to reject the update.

Thank you for submitting LuckyWheel and LuckyWheel Lite to the App Store. We’ve reviewed LuckyWheel and LuckyWheel Lite and determined that we cannot post these versions of your iPhone applications to the App Store because of an Apple trademark image. We want to remind you of the importance of following Apple’s posted Guidelines for Using Apple’s Trademarks and Copyrights: <http://www.apple.com/legal/trademark/guidelinesfor3rdparties.html>

As an example of my trademark infringement they attached an image similar to the one above with the new player setup screen. Can you guess what their problem is? It’s the icon symbolizing a computer player! Apple does not like that it looks like an iPhone. We’ll have to think of something more original to symbolize switching between human and computer player.

UPDATE June 26th

After 10 days of waiting (probably Apple being swamped with 3.0 updates) LuckyWheel 1.1.0 finally got approved.

GeoCorder 1.0.3

The customer crash reports that Apple now makes available showed me a problem with GeoCorder that I had missed.

  • Removed redundant code that would load and save tracks in a seperate file in addition to the trackpoints written directly to a SQLite database while recording. This could cause timouts on program exit and long loading times at program start for people with lots of recorded trackpoints.
  • Thus program start and exit are now much faster for people with lots of recorded tracks.

It’s embarrassing I know, but how can you spot such a thing? When you test your app you don’t think to record so many tracks that applicationWillTerminate will time out and be aborted by the iPhone OS. But thanks to the crash reports I was immediately steered in the right direction of what to fix.

I’ve submitted this quick fix release to Apple, more usability enhancements are in the works.

UPDATE May 16th:

Apple rejected the update claiming that without network connectivity the screen stays black. That’s not possible because GeoCorder has a Default.png image and there is no network activity unless the user sends a track via e-mail. I tested the app on my iPhone 3G on 2.2.1 and iTouch 3.0b5, with and without network. No black screen.

But to be safe I ran Clang Static Analyzer over the code for 2.0 and even 3.0 and found a couple of unused variables, a mismatch between unsigned and signed and one code file that was not even used. So I cleaned those up and resubmitted.

UPDATE May 21st:

Apple rejected it again this time with an even more annoying message. But this time is the first time that they actually provide some information how I can fix it.

Your application, GeoCorder, cannot be posted to the App Store at this time because it does not adhere to the iPhone Human Interface Guidelines as outlined in iPhone SDK Agreement section 3.3.5.

When the device is not connected to a network, GeoCorder does not load its contents. When the user is on the “Record GPS Tack” screen the App fails to load location (please refer to screen shot). This behavior might lead to user confusion. It would be appropriate to display either a notification or an alert stating that internet connectivity is required.

Please take a look at the Reachability iPhone program sample which demonstrates the use of the System Configuration Reachability API to detect the absence of WiFi and Wireless Wide Area Network (WWAN) services. Your application can then take appropriate action at the first point where network services are required.

Translation from convoluted to plain English: In Airplane Mode the iPhone does not get Core Location updates. Now why do they think of this NOW on the THIRD version I submitted to them for review?!

SECOND UPDATE MAY 21st:

I finished the app (once again) and submitted it to Apple with these enhancements:

  • I revamped the inner workings of the blip graph so that it can show recieving of Core Location updates independently from whether the user chooses to record them or not. Non-recorded blips are grey, recorded ones are red.
  • Position updates are now active as soon as the recording modal screen is opened and are deactivated as soon as the screen is exited.
  • Implemented connectivity sensing according to Apple’s suggestion. If you enter the recording screen without internet connectivity you get an alert to that effect.
  • I made a nicer splash screen, because having it look like the final recording table view would anger users because it would look like for the time of loading that the app does not react to user input.
  • Also I submitted a new free version of GeoCorder which will be sponsored by AdMob. It’s technologically identical to original GeoCorder.

I’ll update as soon as they get through.

UPDATE May 24th:

I received a crashing bug rejection (for a change *G*) for GeoCorder [FREE].

Thanks to the attached crash report and detailed instructions on how to reproduce the crash I quickly found the problem and fixed it. I had a dangling object reference to previously released memory. This would show if you recorded a track, removed it and tried to record another. Since both GeoCorders share the same code I had to replace the binary for regular GeoCorder as well.

Apple is getting faster, at least with newly submitted apps. I’m glad Apple Reviewers are working on Saturdays as well to work through new apps. That can only mean that they have multiple shifts, because Saturday is not a regular work day in the USA.

UPDATE June 16th

Apple had approved the free version rather quickly but the regular version was stuck “in review” even though it contains exactle the same code and functionality minus the ads. I wrote to Apple two days again and now finally the regular version became available as well.

MyAppSales 1.0.4

I woke up early and was looking for something useful to do with this extra time that would not take too much brain power. This minor update to MyAppSales addresses a pressing issue and some internal cosmetics.

  • Before this fix the local timezone would be used when interpreting a report date. This could lead to unexpected behavior when travelling and synching reports in an earlier timezone. Now all report dates are interpreted as from timezone “America/Los_Angeles”, which is the timezone of Apple in Cupertino.
  • Cleaned up code of iTunes Connector class as a result of making the exchange rate class a shared instance, ordered the functions therein in a more logical way and added section titles for clarification.
  • Now for finding out if a report already was downloaded only the date and type is used. Before this change also time was used but this would change with different local timezones causing duplicate entries.

Refresh your copy from the customer-only SVN to get this update.

UPDATE: WAIT with updating if you have previously existing entries!!! You will get duplicate entries.  (see third fix above. Let me know if you need help cleaning up duplicate entries from your database)

MyAppSales 1.0.3

Two minor fixes make out version 1.0.3 of MyAppSales.

  • Removed all NSLog statements
  • Revampted calculation of  sums as to make them match with the detail lines

The latter bug was caused by using old currency exchange data to pre-calculate sums but using newer exchange rates for detail lines. This would sometimes cause a difference of a couple of cents which was more than a rounding error. There might still be a difference of one cent but that is because MyAppSales calculates all amounts in floating point without limit of decimal places, but only two rounded decimal places are show on the reports regardless of currency.

Get the new version from the customer-only SVN. UPDATE: I had forgotten to bump the version in info.plist. That’s fixed now.

PS: Dylan Prozenak of AppViz contacted me earlier, regarding my call to action for an open report downloading API:

I had contacted Apple directly about this a while ago and received a reply indicating that they were looking at it. I just filed a bug report as suggested. Probably should have done that first thing.

Hopefully it will make a difference; I’d love to make an AppViz for the App Store and hearing both your story and some friends of mine who developed a similar product makes me shudder. I know how much time goes into these things and then not being able to sell it is like getting slapped in the face; particularly since there seem to be a couple that made it in. Competition can only be good for this space; it keeps us all on our toes and innovating.