macoslib receipt validation und 64bit

Wollte gerade mal meine App das erste mal für 64 bit compilieren und stelle fest, dass wohl ReadReceipt aus der macoslib nicht 64bit kompatibel ist.

Gibt es da eine neuere Version oder eine andere Möglichkeit? Wie macht ihr das?

OK, habs gefunden, sollte so klappen:

					dim a as new AppReceiptVerificatorMBS
					file = app.ExecutableFile.Parent.Parent 
					file = file.Child("_MASReceipt").Child("receipt") 
					dim r as AppReceiptMBS = AppReceiptMBS.receiptForFile(file)
					a.bundleIdentifier = "de.onlymac.minerals"
					if a.verifyReceipt(r) then
							  // alles gut
					else
							  declare sub exit_ lib "System" alias "exit" (code as Integer)
							exit_ (173)
					end if

Super Plugins :slight_smile:

Absolut…

allerdings, ich wünsche mir mehr Beispiele :wink:

Das hat den Nachteil, dass man das Plugin erst registrieren muss.

Bei mir funktioniert es tatschlich auch nicht. Erstens hatte ich schnell herausgefunden, dass man mit NOE so rechnen muss:

dim a as new AppReceiptVerificatorMBS
dim f as FolderItem = App.ExecutableFile.Parent.Parent.Child("_MASReceipt").Child("receipt")
if f <> Nil and f.exists then
  dim r as AppReceiptMBS = AppReceiptMBS.receiptForFile(f)
  a.BundleIdentifier = "com.mybusiness.myapp"
  if a.verifyReceipt(r) then  
    // alles gut
  else
    declare sub exit_ lib "System" alias "exit" (code as Integer)
    exit_ (173)
  end if
else
  declare sub exit_ lib "System" alias "exit" (code as Integer)
  exit_ (173)
end if

So weit in Ordnung.

Aber nach der CodeSign, bei 64-Bit-Builds ist die App anscheinend defekt. Normalerweise muss der Validation-Tester einmalig eine Apple-ID eingeben, und dann startet die App. Hier stimmt das nicht. Das Fenster ffnet sich in einer Endlosschleife, in der immer wieder nach dem Login gefragt wird, und die App startet nie.

MAS lehnte sie ab, mit “We noticed that with a valid receipt installed, your app still quits on launch. The Console reports the app “Exited with exit code: 173” and the OS states the app “is damaged and can’t be opened.” This generally indicates that the app is not verifying its receipt correctly.”

Zurck zum 32-Bit und MacOSLib, ist alles wieder in Ordnung. Sehr Schade.

ich sehe, ihr überschreibt a.BundleIdentifier. Wieso?

Die Klasse AppReceiptVerificatorMBS hat ein FailReason property, was einem sagt, was nicht stimmt.
Vielleicht ja die Version?

Und wenn man 173 zurück gibt, sollte der App Store Dialog kommen. Wenn man den beantwortet, sollte es nochmal starten,

[quote=376315:@Christian Schmitz]ich sehe, ihr überschreibt a.BundleIdentifier. Wieso?

Die Klasse AppReceiptVerificatorMBS hat ein FailReason property, was einem sagt, was nicht stimmt.
Vielleicht ja die Version?[/quote]

Würde ich gern prüfen, aber man kann das bei DebugBuild eigentlich nicht prüfen.

[quote]
Und wenn man 173 zurück gibt, sollte der App Store Dialog kommen. Wenn man den beantwortet, sollte es nochmal starten,[/quote]

Genau. Ich meine, man beantwortet den Dialog, und es startet nochmal wieder mit dem gleichen Dialog. Im Schleifer, sozusagen. Die App startet nie ohne Dialog.

per msgbox anzeigen geht doch. Oder System.debuglog.

Vermutlich eben eine Kleinigkeit, die beim Validieren nicht passt.

[quote=376319:@Christian Schmitz]per msgbox anzeigen geht doch. Oder System.debuglog.

Vermutlich eben eine Kleinigkeit, die beim Validieren nicht passt.[/quote]

Ja, vielleicht. Aber es ist ein Catch-22, weil ich es nicht überprüfen kann, ohne vorher eine gültige Receipt zu haben. Ich kann das aber in der kompilierte App fügen, nur fürs Überprüfen.

ich hab immer version und bundle identifier überschreiben, damit ich mit einem Receipt von einer anderen App aus dem App Store testen konnte.

Gute Idee.

Inzwischen habe ich die kostenlose “Receipt Tester” Xojo-App gefunden — http://www.ohanaware.com/xojo/

Zum Gluck funktioniert alles einwandfrei.

Danke trotzdem. Ohne MBS hätte ich keine MAS-Apps programmieren können. Wirklich hammer Plugins, also nochmal danke.

Moment, der müsste doch auch das gleiche Testen und zum gleichen Ergebnis kommen.

Ich wei nur, dass der “Receipt-Tester”-Code funktioniert und der AppReceiptVerificatorMBS nicht. Der Code mit AppReceiptVerificatorMBS steht da oben. Der Code fr den Receipt-Tester kann nach dem Download vollstndig eingesehen werden. Alles andere in meiner App bleibt unverndert …

[EDIT: … auer dass bei der Verwendung von AppReceiptVerificatorMBS das Plugin zuerst registriert werden muss. Mit dem “Receipt-Tester” registriere ich es nach Beendigung des Open-Events.]