Als wir nach unserem 20. development Sprint unsere erste Version (pre-Alpha MVP) auf den entsprechenden App Stores veröffentlichen und die Tests gemäß der Kaskadenplanung ausrollen wollten, stellte sich Apple uns in den Weg und blockierte den App Launch für fast 4 Wochen, weil NFTs über die App verkauft werden sollten. Aber von Anfang an, was war passiert?
Der App Launch Prozess bei Apple läuft im Groben wie folgt ab. Man legt kostenpflichtig ein Entwicklerkonto and und lässt sich darüber verifizieren. Im Anschluss kann über das Entwicklerportal eine App angelegt werden. Die verschiedenen Versionen werden in sog. Builds veröffentlicht. Noch gibt es nicht viele NFT-Apps, was allerdings erstmal kein Hindernis ist. Zur Veröffentlichung muss ein Build zunächst im Testflight (Apple's Beta-App-Store) hochgeladen werden und im zweiten Schritt kann bei Versionsgleichheit dann das Build im "richtigen App Store veröffentlicht werden. Jetzt muss man wissen, dass vor der jeweiligen Veröffentlichung, jeweils ein Apple Review Team die App auf Mängel und Einhaltung der Richtlinien überprüft (den Part gibt es in ähnlicher Form auch beim Play Store). Nun ist das wie in der Rechtsprechung, dass diese Richtlinien erstmal ausgelegt werden müssen, wenn es neue Varianten gibt. Bevor Apple das Statement abgegeben hatte, dass NFTs via in-app-purchase (iap) zugänglich sein müssen, mussten die Review Teams eigenständig entscheiden, ob das Thema NFT von den Richtlinien betroffen ist oder nicht. Explizit geht's um die Anforderung, dass alle erwerblichen Inhalte auch in der App direkt zugänglich sein müssen, damit möglichst wenig Umsatz an Apple vorbei geht (die partizipieren nämlich bis zu 30% an den iap). In unserm Falle wurde die Veröffentlichung bereits mit der ersten Version blockiert, weil die NFTs, die wir anzeigen, wenn zum Beispiel die User-Wallet ausgelesen wird (das ermöglicht das Platzieren in AR), nicht gekauft werden können. Auch mehrfache Erklärungsversuche scheiterten bei uns. Als Antwort gab es immer Copy-Paste den Auszug der Richtlinie. Telefonisch sind die Teams nicht erreichbar und via dem allgemeinen Support haben wir auch erfahren, dass die gar nicht telefonieren dürfen. Nach anderthalb Wochen entschlossen wir uns dann, kurzfristig den Kauf von NFTs in der App via iap zu ermöglichen. 3 Tage später Stand die Funktion dann. Wir haben kurzerhand ein eigenes NFT entworfen, die Collection erstellt und entsprechend E2E das Feature freigeschaltet. Es stellt sich heraus, dass alleine die Möglichkeit des Verkaufs bereits gereicht hat. Zwei Wochen später kam dann auch das offen kommunizierte Statement dazu.
Kleine Anekdote: das Review Team vom "richtigen" App Store hatte die Veröffentlichung ebenfalls um einen Tag blockiert (da waren wir gerade auf der Messe), mit der Rückfrage, warum man den freigeschalteten Inhalt (also unser "VZNZ Coin" NFT) denn kaufen könnte. Nach unserm Hinweis auf den Chatverlauf mit dem Testflight-Team war das allerdings ohne weitere Rückfrage vom Tisch.
Was hat sich durch die Funktion geändert? Nun, iap ist insbesondere im Play Store umgehungsanfällig. Mit diversen Methoden können Inhalte freigeschaltet werden, obwohl der Nutzer nicht gezahlt hat. Das erfordert entsprechend Efforts der Entwickler im Security-Bereich, die sich von den Kernkompetenzen vieler Web3-Projekte unterscheiden. Wir hatten im Public Testing einige Ansatzpunkte gefunden und werden hier auch gerne mit anderen Projekten in dem Austausch gehen. Insgesamt, wird's noch einige ungeklärte Fragen geben und da Apple und Google als zentrale Stellen am längeren Hebel sitzen, wird es in den meisten Fällen wenig Alternativen geben, als den Richtlinien zu entsprechen. Falls man übrigens auch nach längerer Diskussion mit den Review Teams nicht einverstanden ist, mit deren Meinung, gibt es die Möglichkeit einer Art Revision bei Apple, welche dann bei Zeiten den Fall genauer begutachtet und Argumente entgegen nimmt. Allerdings muss man wissen, dass dadurch der Review-Verfahren durch das Entwickler Team "abgebrochen" wird und keine Bewegung in Richtung App Launch für deutlich mehr als eine Woche zu erwarten ist. Im Anschluss muss das Build ungeachtet der Einzelfallentscheidung nochmals vollständig geprüft werden.