Regelungen App-Store

Hallo in die Runde.
Nachdem ich mit dem Umstieg von REALstudio auf Xojo nun fast durch bin, möchte ich meine App in den Apple App-Store bringen. Dass ich dazu einen Entwickler-Accunt benötige, ist mir bewusst. Auf Retina habe ich auch schon Rücksicht genommen.

Welche Stolpersteine gibt es noch, die regelmäßig zur Ablehnung führen?

Insbesondere macht mir eine meiner Funktionen Sorgen, die ich ungern rauswerfen würde. Die Funktion bietet eine Ortsverwaltung, die Daten Dritter nutzt. Dazu habe ich momentan einen Button, der die (Text-)Datei (als Zip-Archiv) herunterläd, entpackt und in den Preferences-Ordner kopiert. Wird Applpe dieses Nachladen von Daten dulden? Es handelt sich nicht um Programmcode, sodern um Datensätze mit Ortsnamen, Geografischen Koordinaten, etc. Also eigentlich eine CSV-Datei.

Alternativ bietet der Anbieter der Daten auch eine Web-Schnittstelle an (ich glaube über WebDAV). Wäre das zulässig?
Falls jemand Informationen zur WebDAV-Nutzung hat (z. B. Beispielcode), bin ich daran auch interessiert.

Darf ich meine App im App-Store kostenpflichtig anbieten und dennoch den kostenlosen Download von meinem Internetauftritt beibehalten?
Was ist mit den Testversionen, auf die ich im Forum hinweise. Darf ich die weiterhin (halböffentlich) kostenlos anbieten?

Gibt es Seiten (möglichst auf deutsch), die ich mir ansehen sollte/könte.

Gruß, Stefan Mettenbrink.

  1. viele Stolpersteine. Man wird es dir sagen :wink:
  2. Daten laden geht.
  3. Web Schnittstelle anbieten geht auch. Eventuell Entitlement dafür besorgen.
  4. Ja, gratis auf der Homepage verteilen oder verkaufen geht.
  5. ja

Du kannst durchaus im App Store auf die Webseite verweisen für eine Demo.

Mache ich ja auch beim Combine PDFs. Die Version auf der Webseite kann mehr und ich verkaufe Sie ohne Apple.

Na, das hört sich doch gut an. Vielen Dank für die schnelle Reaktion.

Bislang ist mein Programm kostenlos. Da der Entwicklerzugang jedoch 99,-$ pro Jahr kostet, möchte ich das Ged gern wieder rein bekommen. Für alle, die auch ohne App-Stor die Anwendung in den Programme Ordner kopieren können, möchte ich es auch weiterhin kostenlos anbieten. Schön, dass das auch geht.

Punkt 1 bedeutet Arbeit -> Kann ich mit leben.
Punkt 3 ist wegen Punkt 2 nicht dringen :slight_smile:

Gruß, Stefan Mettenbrink.

Hier noch ein paar Tipps um eine Ablehnung durch Apple vorzubeugen:
1. Besteht das Programm nur aus einem Fenster, dann “app.autoquit = true” verwenden. Dann kann man sich den das Menü “Window” bzw. “Fenster” sparen. Weiterhin muss man somit auch keine Funktion einbauen, die bei einem Klick auf das Programm-Icon im Dock das Programm-Fenster öffnet.
2. Besteht das Programm aus mehreren Fenstern, so muss zwingend das Menü “Window” bzw. “Fenster” vorhanden sein. dort werden dann beim Öffnen der verschiedenen Programm-Fenster dynamische Einträge für jedes Fenster erstellt. Weiterhin muss man eine Funktion einbauen, die bei einem Klick auf das Programm-Icon im Dock das Standard-Programm-Fenster öffnet.
3. Keine Icons verwenden die von Apple sind oder ähnlich wie die von Apple aussehen. Das gilt auch, wenn man aus dem eigenen Programm z.B. eine E-Mail erzeugt oder Safari öffnet und dafür das entsprechende Icon verwenden möchte.
4. Links zu einer URL im Programm oder in der Beschreibung in iTunesConnect müssen funktionieren, sonst gibt es eine “Rejected” Meldung
5. Benutzt man spezielle Funktionen, Zugriffe oder Libraries, dann immer in Feld “Bemerkung” in iTunesConnect (im Bereich der App-Prüfung) eine genaue einfache Beschreibung zufügen.
6. Wurde ein Programm bei der Prüfung abgelehnt, dann kann man die neue geänderte Version mit der gleichen Release Version nicht bei iTunesConnect hochladen. Wenn man also bei den Anwender keine Verwirrung stiften möchte, da dazu immer die Bug Version erhöht werden müsste, kann man bei den „Build Settings“ bei „Short Version“ und „Long Version“ eine eigene Version für das Binary Release von iTunesConnect verwenden. Beispiel: eingereichte Version 1.0.0 wurde abgelehnt. Die Fehler nun beseitigen, in den Feldern bei „Short Version“ und „Long Version“ 1.0.1 eintragen, neues Programm erzeugen und zu iTunesConnect hochladen. Damit bleibt die Version für den Kunden im AppStore 1.0.0 und die Binary Version in iTunesConnect ist 1.0.1
7. Weiterhin habe ich festgestellt, dass Apple seit ein paar Wochen die Umsatzzahlen der einzelnen Apps prüft. Apps die gut laufen, werden bei dieser Abfrage nicht beachtet. Nun bei Apps die nicht so gut laufen, wie Apple dies möchte, erhält der Entwickler eine Meldung, dass man die App anpassen oder verbessern soll, sonst wird sie aus dem AppStore entfernt. Entweder beruft man sich darauf, dass schon seit 1 oder 2 Jahren kein Update mehr durchgeführt wurde oder, dass die App ein zu geringes Nutzererlebnis hat, obwohl die App problemlos läuft. Bei geringem Nutzererlebnis ist das dann auch so, dass man kein Bug-Fix Version mehr bereitstellen kann. Die eingereichten Versionen werden einfach abgelehnt. Das geht mir gerade mit dem Programm „Textilpflege“ für iOS so. Seit dem Update auf iOS 10.2 läuft die App nicht mehr auf dem iPad. Eine neue Version, die dieses Problem löst, wird von Apple nicht akzeptiert. Ich habe mich dann beschwert und darauf verwiesen, dass die Kunden die für diese App bezahlt haben, ihre App auch nach dem Update auf 10.2 oder 10.3 auf dem iPad nutzen möchten, doch dies wird nicht akzeptiert.

Danke für die Tipps.

Zu 2: Ich biete derzeit durchaus ein Programm mit dem Menüpunkt “Fenster”. Dort werden aber nicht die Fenster aufgelistet, die man gerade geöffnet hat, sondern solche, die man noch öffnen kann.
Wenn ich mir Xojo ansehe, kann ich erkennen, was gemeint ist. Ich finde das unnötig, da diese Funktion bereits über das Dock-Icon verfügbar ist. Besteht Apple darauf?

Zu 5: Woran erkenne ich das? Ich nutze die MBS-Plugins. Das halte ich für problemlos.

Gruß, Stefan Mettenbrink.

Antwort zu 2.
Bei einem Programm mit mehreren Fenstern muss ja “app.autoquit = false” gesetzt sein. Wenn man nun alle Fenster geschlossen hat, dann ist das Programm immer noch aktiv und im Dock sichtbar. In diesem Fall besteht Apple darauf, dass es einen Menüeintrag für das Standard-Fenster im Menü “Fenster” gibt, und dass mit einem Klick auf das Programm-Icon im Dock das Hauptfenster geöffnet wird.

Antwort zu 5.
Ich benutze z.B. die Kalender-Funktionen von den MBS-Plugins für Termine (lesen, auflisten, neue Termine eintragen oder vorhandene löschen). Dann muss man in AppWrapper unter “Capabilities” => “Apple Script & Apple Events Access” folgenden Eintrag zufügen “com.apple.iCal” und dies bei der Prüfung begründen.

Zu 2:
Mit Ablage -> Neue Date bekommt man ein neues Fenster. Ebenso wenn man eine Datei öffnet.
Wenn bei meinem Programm keine Fenster offen sind und man auf das Programmicon klickt, wird die zuletzt benutzte Datei geladen und das Haupfenster geöffnet. Reicht das?

Zu 5:
Ich benutze keine externen Programme. Allerdings biete ich die Möglichkeit, Bilder oder andere Dokumente mit den Standardprogrammen anzeigen zu lassen. Muss ich das ebenfalls begründen?

Ja, das sollte reichen. Bilder und andere Dokumente können mit dem Standart-Programm geöffnet werden, solange sich die Dateien im Sandbox Container ($HOME/Library/Containers/) befinden. Zugriffe auf das Dateisystem außerhalb dieses Containers sind nicht möglich, bzw nur durch einen interaktiven “Openfolder event” des Anwenders.

Es sollen Bilder des Anwenders geöffnet werden. Also z. B. aus dem Dokumente-Ordner oder einen der Unterordner dort. Also nicht anders, als wenn ich einen Doppelklick auf die Datei ausführe.

Das geht nicht. Alle Zugriffe, die ausserhalb der Sandbox stattfinden sind nicht erlaubt. Man kann nur Berechtigungen für folgendes beantragen:
Fotos
Musik
Kontakte
Kalender
Ortungsdienste
/Applications
Ordner und Dateien die der Anwender interaktiv geöffnet hat, kann man in den “Security-Scoped Bookmarks” speichern. Dann kann man diese Pfade wieder direkt mit dem Programm öffnen.

Ich hoffe, das gilt nur für iOS!
Ich entwickle derzeit für Mac OS. Dass ich hier nicht auf die vom Anwender gewünschten Datein zugreifen darf (solange die Benutzerrechte nicht dagegen sprechen) ist mir neu.

Nein, das sind die Beschrnkungen seit Apple die Sandbox bzw. Gatekeeper fr maxOS eingefhrt hat. Das gilt natrlich nur fr Apps die fr den AppStore gemacht sind. Hier ein Beispiel fr die Berechtigungen die man mit AppWrapper aktiveren kann:

Bei Macwelt gibt es auch eine deutsche Beschreibung dazu.

Ich glaube, ich verstehe das nicht.
Ich kann beliebige Dateien aus dem Benutzerordner nur über den Open/Save-Dialog laden? Derzeit merke ich mir die zuletzt verwendete Datei und öffne sie bei Programmstart. Das soll dann nicht mehr möglich sein?

Der Anwender kann Bilder in das Programm ziehen, die dann in einen (vom Anwender angegebenen) Ordner kopiert werden. Der Zugriff darauf bleibt mir verwehrt?

Die Bilder aus diesem Bilderordner zeige ich in meinem Programm an. Per Doppelklick sollen sie mit der Standardanwenddung geöffnet werden. Auch das ist verboten?

Oder gilt das alles nur, wenn ich unter App Sandbox die Einstellung “App Store Only” wähle.

Hier erkenne ich Einschränungen, die den Nutzwert meines Programms erheblich einschränken. :frowning:

Die Einschrnkungen sind nur fr Apps gltig, die ber den AppStore vertrieben werden bzw. mit AppWrapper fr den AppStore bearbeitet wurden (AppWrapper Einstellungen: App Sandbox “App Store Only”). Diese Einstellungen in AppWrapper sind aber zwingend notwendig wenn die App ber den AppStore vertrieben werden soll.
Der Anwender kann natrlich Dateien, Bilder usw, per Drag and Drop in das Programm ziehen. Wenn dann das Programm die Pfade dieser Datei abspeichern soll um spter wieder darauf zugreifen zu knnen, dann geht das nur mit “Security-Scoped Bookmarks”, da die Sandbox einen Zugriff auerhalb der Sandbox nicht zulsst.
Hier ein Beispiel einer Sandbox-Umgebung einer AppStore App:

Fr alle rot markierten Ordner mssen die Berechtigungen in der Sandbox beantrag bzw. freigeschaltet werden. Nur Die Ordner Documents und Libraries innerhalb der Sandbox sind per Default verfgbar. Der Desktop des Anwenders der sich ja auerhalb der Sandbox befindet ist ebenfalls verfgbar. Auf alle anderen Ordner (wo immer sie auch liegen) sind nicht verfgbar. Das geht dann nun per OpenFolder Dialog, Drag and Drop und Security-Scoped Bookmarks" fr jede einzelne Datei.

Diese Einschrnkung kann man in einigen Programmen sehen. Die Valentina Studio-Version vom AppStore hat eine zustzliche Option fr den Ordner, auf den das Programm zugreifen kann. Total berflssig IMO. Das ist einer der Grnde, warum ich ungern Apps vom AppStore verwende.

Noch mal zur Verdeutlichung:
Meine Pfadeinstellungen sehen soaus:

Da kann der Anwender also beispielsweise angeben, wo die im Programm (vom Anwender) verwendeten (und vom Anwender zugewiesenen) Bilder gesichert werden sollen.
Ebenso wird beim Sichern (cmd-S) die bisherige Datei umbenannt, in einen Ordner (vom Anwender in diesem Dialog anzugeben) verschoben und eine neue Datei mit bisherigem Namen am bisherigen Platz geschrieben.
Da hierfür kein Save-Dialog aufgerufen wird, fällt das dann wohl auch unter die Beschränkungen.

Selbst der Pfad ~:Library:Preferences wird bei AppWrapper nicht aufgeführt. Demnach darf ich nicht mal Programmeinstellungen sichern?

Also entweder ist das nicht so wie ich es verstanden habe oder es ist für mich unbrauchbar.
Das würde mit krassen Einschränkungen für die Anwender einhergehen. Ich glaube, ich muss mir mal ein paar Apps aus dem App-Store ansehen, wie die das handhaben.

Die Preferences sind von der Sandbox natürlich ausgenommen, da es dafür ein eigenes API gibt.

Warum machst Du das hier?

Wenn der User die oben angegebene Pfade über einen OpenFolder Dialog auswählt und das Programm diese Pfad in den “Security-Scoped Bookmarks” speichert, dann sollte das gehen. Wie schon erwähnt, sind alle Ordner außerhalb der Sandbox-Umgebung nicht verfügbar. Unter macOS 10.12.x ist das sogar noch strenger geworden. Da kann man nicht einmal mehr mit einer Shell auf “/bin/diskutil” oder “/bin/ls” zugreifen. Mit macOS 10.11 und früher ging das problemlos.

-> Beatrix Willius
Damit erreiche ich (auch unter Windows und Linux) eine Art Versionierung und zustzliche Sicherheitskopien fr den Anwender.

-> Horst Jehle
Wie speichert man denn den Pfad in den “Security Scoped Bookmarks”?
In der Language Reference finde ich nichts dazu.

Hier gibt es die Tools dazu:
Security-Scoped Bookmarks