From APIDesign

Jump to: navigation, search

Yeah, it takes $99 to get permission to publish iOS applications to AppStore. It required just $25 to publish to GooglePlay. I managed to pay those $25 bucks and publish the app in one day. Will I succeed with AppStore as fast or will it take weeks? I started on Jul 26, 2014 and on Aug 21, 2014 the MineSweeper got accepted. Four weeks.


Giving Up

In September 2015 I decided to update the MineSweeper on AppStore to version 3.0. With a great pleasure I could announce on December 18, 2015 the version was alive! With a great despair I have to announce it is gone. Why?

Well, I am just a researcher. My whole work on the Html4Java APIs that later become known as DukeScript was motivated by overcoming challenges:

  • make sure Java can run everywhere
  • make sure Java is more effective than JavaScript
  • ensure such applications can be deployed everywhere
  • return Java Bck2Brwsr

I believe all of my goals were successfully met. The APIs I designed can be executed everywhere including such (Java) hostile environments like modern browsers. The code one has to write with Html4Java APIs is on par and sometimes even shorter than its JavaScript version. The fact that my MineSweeper can be executed on Android, iOS, desktop and in a browser is a proof that it can run everywhere.

However Apple wants me to pay $99 to proof that. I paid once when uploading the application for the first time. I paid again the next year to update it, but they want such payment every year! For what!? For me to demonstrate that developers can use Html4Java everywhere? I have no benefits from that so far, and I decided to not pay the remedies to Apple this year. The result? The MineSweeper application is no longer available from AppStore.

I am sad. Apple has no cost distributing my application. Still Apple wants me to do a yearly payment. I am giving up. If somebody wants to distribute my MineSweeper, please go on, but I am giving up - giving up on Apple. In May 2016 the ControlsJS guys picked my MineSweeper up, rewrote it to use ControlsJS technology and started to distribute it on AppStore again:

Uploading New Version

In September 2015 I decided to update the MineSweeper on AppStore to version 3.0. With a great pleasure I can announce that now, on December 18, 2015 the version is alive! Why it took so long?

Well, Apple's itunesconnect website is unusable - it isn't enough to upload new version of your application and press button Request Review. The user interface is completely messed up and hidden to make the process as obscure as possible. As a result MineSweeper was laying on the AppStore for six weeks before I found the right address (also pretty hidden) to complain at and was explained what is wrong.

Then, of course, the usual reject. This time it was due to Using images that resemble(!) Apple logo - yes, the MineSweeper is using Safari and iOS icon (check the on-line version). But these icons were present in the previous AppStore version as well. And version 2.3 was approved! Clearly the whole review process suffers from the human factor of the reviewer. What some reviewers find appropriate isn't appropriate for others.

How can I know this is a human factor? Because the new version of the MineSweeper of iOS comes with three translations - English, Czech and German (thanks to Toni) - and I am sure the reviewers checked just the English one. If the check was automatic - e.g. some scan through the binary - my submission might have been rejected again. Thankfully it wasn't. It is great we made it before Christmas, as next week the whole AppStore team is going for a vacation...

Here are the changes against standard MineSweeper source code to make the application releasable on the AppStore this time:

Enjoy version 3.0 of Fair MineSweeper on AppStore. Visit to play fair!

Available on AppStore

So finally the MineSweeper game is available everywhere: in AppStore, GooglePlay, as a NetBeans module and also directly on the web. I guess I can celebrate. The power of DukeScript's write once, display anywhere is demonstrated. Let me however add few words about Apple:

I think Apple feels they have a problem. Recently they presented new programming language. Why? Because people are reluctant to code in ObjectiveC? Because there is not enough developers coding apps for iOS? True, ObjectiveC is different - especially when you are coming from Java, but then there is RoboVM and that is certainly better than trying to invent new language. The problem is not the language.

Developing for iOS is expensive. One needs to buy a Mac (as it is not possible to develop to iPads and iPhones on a different computer than Apple one). One needs to pay $99 to deploy testing application on own iPad! Unbelievable. I bought old Mac and still needed to pay $400 to even get started. That is more than (minimal) monthly wage here!

And then the process of publishing to AppStore! I was expecting it to be painful, and to be honest, it was not that bad. It was just long - four weeks of waiting, waiting and waiting. Should Apple feel the developers are targeting Android, it is not something to be fixed by a new programming language. The problem is that developing for iOS is too costly and way too slow.

Preparing first Upload

This is the source of information I am going to follow - Ping example:

I followed the steps, downloaded distribution profile, but then it took a long time to find out where the profile is and what is its name. It is in /Users/<username>/Library/MobileDevice/Provisioning Profiles, thus I could put

tests-MacBook-Pro:minesweeper jarda$ hg diff
diff -r 77670cba08c3 minesweeper/pom.xml
--- a/minesweeper/pom.xml	Sat Jul 26 11:15:18 2014 +0200
+++ b/minesweeper/pom.xml	Sun Jul 27 07:17:58 2014 +0200
@@ -532,7 +532,7 @@
-                      <version></version>
+                      <version></version>
@@ -563,6 +563,9 @@
+        <iosSignIdentity>iPhone Distribution</iosSignIdentity>
+        <iosProvisioningProfile>E4B14DB7-81F1-4C9D-A3BE-65F86F32027F</iosProvisioningProfile>

into my pom file. Something has been generated, but application loader rejects the upload with

ERROR ITMS-9000: "Invalid Provisioning Profile. The provisioning profile included in the bundle org.apidesign.demo.minesweeper.Main [Payload/] is invalid. [Missing code-signing certificate.] For more information, visit the iOS Developer Portal."

Trying advice to check the list of certificates with:

$ security find-identity -v -p codesigning
  1) AAB1C4DEABD0B7FEA38F86791617D8EBFC9FB5C7 "iPhone Developer: Jaroslav Tulach (62CX47PZM2)"
  2) 92FF34782870A830C53567290732329E3EED53DC66 "iPhone Distribution: Jaroslav Tulach (8VI366L5Y4)"
     2 valid identities found

I had to remove an automatically generated distribution provisioning profile, obtain new one. Then I was able to upload the app and send it to verification. To pass the verification I had to include Info.plist.xml as suggested in the Ping example. This is the revision that I managed to upload to AppStore for review:

1st Review

I was waiting for 1st review more than fourteen days. It turned out to be my mistake. After waiting more than a week I got a feeling something is wrong and uploaded new version of MineSweeper - never do anything like that - that starts the review process from scratch. If you want to get Apple's feedback, just wait patiently.

But the nice thing is that the Apple's review team is responsive and polite. When I sent them email asking what's going on? they quickly and politely replied in three paragraph email which content could be condensed into just wait advice.

Being patient paid off: today morning I found result of the review: rejected. It seems there were three areas of complaints:

3.1: Apps or metadata that mentions the name of any other mobile platform will be rejected

I guess it was complain about Payload/ and its use on the application welcome screen. I placed the reference to DlvkBrwsr to demonstrate that one can write the application once and package it for various platforms. However I understand that Apple doesn't want to promote Android, so I will remove the JPG file and modify the welcome screen to not reference it. I assume other icons (like NetBeans) are OK, and I plan keep them in.

2.9: Apps that are "beta", "demo", "trial", or "test" versions will be rejected

I used word "demo" while meaning something like "showcase". The Fair MineSweeper game is fully featured, it is not beta or demo by itself. What I wanted to say is that it is "showcase" for the underlying technology which allows people to write applications once and package them for multiple platforms. I'll replace the use of word "demo" with "showcase", OK?

3.2: Apps with placeholder text will be rejected

I don't understand what you mean by placeholder text. The attached screen shot shows the whole welcome screen without identifying the problematic parts. I used the best bootstrap.css design practices to create the welcome page and as far as I can tell, it contains valid (and definitely not placeholder) information. You can be more specific and tell me what sentence was classified as placeholder text. Meanwhile I do redesign of the page to conform to 3.1 and 2.9 and we'll see if it is found appropriate next time.

Onto next Review

I've made necessary changes and uploaded my MineSweeper application for another review.

2nd Review

No complaint about the application this time. However comment 3.2 remained. However it turned out that it is a comment about metadata, e.g. need to be fixed via browser. Done that and re-submitted on Aug 21, 2014.

Personal tools