Mac App Store Approval

Mac OSX specific forum
Polo
Addict
Addict
Posts: 2422
Joined: Tue May 06, 2003 5:07 pm
Location: UK

Re: Mac App Store Approval

Post by Polo »

When I did an iphone app, they rejected it because they didn't like the screenshot, they wanted one more if I remember correctly :mrgreen:
jesperbrannmark
Enthusiast
Enthusiast
Posts: 536
Joined: Mon Feb 16, 2009 10:42 am
Location: sweden
Contact:

Re: Mac App Store Approval

Post by jesperbrannmark »

What can I say....
I couldn't have done it without the help here... thanks
http://itunes.apple.com/us/app/musclebu ... ls=1&mt=12
(check the screenshots! i am proud.. especially for them not complaining about the ipad rip-off interface)
champagne!!
Ramihyn_
Enthusiast
Enthusiast
Posts: 314
Joined: Fri Feb 24, 2006 9:40 am

Re: Mac App Store Approval

Post by Ramihyn_ »

jesperbrannmark wrote:(check the screenshots! i am proud.. especially for them not complaining about the ipad rip-off interface)
champagne!!
Grats, but the "muslces" on the top left button should be edited :)

"physiotherapiests"
jesperbrannmark
Enthusiast
Enthusiast
Posts: 536
Joined: Mon Feb 16, 2009 10:42 am
Location: sweden
Contact:

Re: Mac App Store Approval

Post by jesperbrannmark »

Yes, I had to stress it slightly because of the 1st november scare (app store not accepting old framework apps any more... which is still not proven to be anything more than a scare).. thanks for seeing that....
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4789
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Re: Mac App Store Approval

Post by Fangbeast »

jesperbrannmark wrote:What can I say....
I couldn't have done it without the help here... thanks
http://itunes.apple.com/us/app/musclebu ... ls=1&mt=12
(check the screenshots! i am proud.. especially for them not complaining about the ipad rip-off interface)
champagne!!
Was just curious about the app so had a look at the page. looks nice. You might want to fix the mis-spelling on : "Educational tool for physiotherapiests"
Amateur Radio/VK3HAF, (D-STAR/DMR and more), Arduino, ESP32, Coding, Crochet
Violet
Enthusiast
Enthusiast
Posts: 106
Joined: Sun Dec 23, 2007 6:30 pm

Re: Mac App Store Approval

Post by Violet »

@J. Baker: Awesome, dude. Thank you very much for this article. I am looking forward to make use of the knowledge provided by you. :wink:
best regards,

Violet
User avatar
J. Baker
Addict
Addict
Posts: 2181
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: Mac App Store Approval

Post by J. Baker »

Violet wrote:@J. Baker: Awesome, dude. Thank you very much for this article. I am looking forward to make use of the knowledge provided by you. :wink:
No problem. ;)
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
User avatar
J. Baker
Addict
Addict
Posts: 2181
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: Mac App Store Approval

Post by J. Baker »

I updated the info on the first topic. I believe I posted everything that needs to be done. ;)
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
jesperbrannmark
Enthusiast
Enthusiast
Posts: 536
Joined: Mon Feb 16, 2009 10:42 am
Location: sweden
Contact:

Re: Mac App Store Approval

Post by jesperbrannmark »

I felt a need to make a program to automate this entire process.
I see we edit the info.plist but I don't think this builds a final package yet.
Few ideas that might be useful:
* Save a configfile with the version number, company name, productname, bundle name and category so its already filled in?
* If we would run this in our sourcecodes where we also have executable to make a snapshot copy of all the sourcefiles and save in a folder with the name of the version (for traceability if you want to go back and look at a certain issue in a previous version)

Here is the code:

Code: Select all

Procedure.s RunPrg(prg.s,param.s)
  Program = RunProgram(prg, param, "", #PB_Program_Open|#PB_Program_Read)
  Output$ = prg.s+" "+param.s+Chr(13)+"---------------------------------------"+Chr(13)
  If Program
    While ProgramRunning(Program)
      If AvailableProgramOutput(Program)
        Output$ + ReadProgramString(Program) + Chr(13)
      EndIf
    Wend
    Output$ + Chr(13)
    Output$ + "Exitcode: " + Str(ProgramExitCode(Program))+Chr(13)+Chr(13)
    
    CloseProgram(Program) ; Close the connection to the program
  EndIf
  ProcedureReturn Output$
EndProcedure
Procedure ListContent(app.s)
  ;Shall this file be saved in utf8 ?
  CreateFile(0,app.s+"/Contents/info.plist")
  WriteStringN(0,"<?xml version="+Chr(34)+"1.0"+Chr(34)+" encoding="+Chr(34)+"UTF-8"+Chr(34)+"?>")
  WriteStringN(0,"<!DOCTYPE plist PUBLIC "+Chr(34)+"-//Apple//DTD PLIST 1.0//EN"+Chr(34)+" "+Chr(34)+"http://www.apple.com/DTDs/PropertyList-1.0.dtd"+Chr(34)+">")
  WriteStringN(0,"<plist version="+Chr(34)+"1.0"+Chr(34)+">")
  WriteStringN(0,"<dict>")
  WriteStringN(0,"<key>LSApplicationCategoryType</key>")
  WriteStringN(0,"<string>"+GetGadgetText(2)+"</string>")
  WriteStringN(0,"<key>CFBundleDevelopmentRegion</key>")
  WriteStringN(0,"<string>English</string>")
  WriteStringN(0,"<key>CFBundleExecutable</key>")
  WriteStringN(0,"<string>"+GetGadgetText(4)+"</string>")
  WriteStringN(0,"<key>CFBundleGetInfoString</key>")
  WriteStringN(0,"<string>"+GetGadgetText(4)+" "+GetGadgetText(8)+", Copyright © "+Str(Year(Date()))+" "+GetGadgetText(6)+". All rights reserved.</string>")
  WriteStringN(0,"<key>CFBundleIconFile</key>")
  WriteStringN(0,"<string>icon.icns</string>")
  WriteStringN(0,"<key>CFBundleIdentifier</key>")
  WriteStringN(0,"<string>"+GetGadgetText(10)+"</string>")
  WriteStringN(0,"<key>CFBundleInfoDictionaryVersion</key>")
  WriteStringN(0,"<string>6.0</string>")
  WriteStringN(0,"<key>CFBundleName</key>")
  WriteStringN(0,"<string>"+GetGadgetText(4)+"</string>")
  WriteStringN(0,"<key>CFBundlePackageType</key>")
  WriteStringN(0,"<string>APPL</string>")
  WriteStringN(0,"<key>CFBundleShortVersionString</key>")
  WriteStringN(0,"<string>"+GetGadgetText(8)+"</string>")
  WriteStringN(0,"<key>CFBundleSignature</key>")
  WriteStringN(0,"<string>PURE</string>")
  WriteStringN(0,"<key>CFBundleVersion</key>")
  WriteStringN(0,"<string>"+GetGadgetText(8)+"</string>")
  WriteStringN(0,"<key>LSMinimumSystemVersion</key>")
  WriteStringN(0,"<string>10.6</string>")
  WriteStringN(0,"</dict>")
  WriteStringN(0,"</plist>")
  CloseFile(0)
  ;Check if checkbox 11 is checked? what if not?
  CreateFile(0,app.s+".entitlements")
  WriteStringN(0,"<?xml version="+Chr(34)+"1.0"+Chr(34)+" encoding="+Chr(34)+"UTF-8"+Chr(34)+"?>")
  WriteStringN(0,"<!DOCTYPE plist PUBLIC "+Chr(34)+"-//Apple//DTD PLIST 1.0//EN"+Chr(34)+" "+Chr(34)+"http://www.apple.com/DTDs/PropertyList-1.0.dtd"+Chr(34)+">")
  WriteStringN(0,"<plist version="+Chr(34)+"1.0"+Chr(34)+">")
  WriteStringN(0,"<dict>")
  WriteStringN(0,"<key>com.apple.security.app-sandbox</key>")
  WriteStringN(0,"<true/>")
  WriteStringN(0,"<key>com.apple.security.files.user-selected.read-write</key>")
  WriteStringN(0,"<true/>")
  WriteStringN(0,"<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>")
  WriteStringN(0,"<array>")
  WriteStringN(0,"<string>/</string>")
  WriteStringN(0,"</array>")
  WriteStringN(0,"</dict>")
  WriteStringN(0,"</plist>")
  CloseFile(0)
  returnmessage.s=RunPrg("sudo","chmod -R a+xr "+Chr(34)+app.s+Chr(34))
  returnmessage.s+RunPrg("codesign"," -f -s "+Chr(34)+"3rd Party Mac Developer Application: "+GetGadgetText(6)+Chr(34)+" --entitlements "+Chr(34)+app.s+".entitlements"+Chr(34)+Chr(32)+Chr(34)+app.s+Chr(34))
  returnmessage.s+RunPrg("productbuild","--component "+Chr(34)+app.s+Chr(34)+" /Applications --sign "+Chr(34)+"3rd Party Mac Developer Installer: "+GetGadgetText(6)+Chr(34)+" yourapp.pkg")
  MessageRequester("Now its signed!",returnmessage.s)
EndProcedure
OpenWindow(0, 270, 100, 640, 480, "Click on app to sign it")
ListViewGadget(0, 10, 10, 300, WindowHeight(0) - 20)
TextGadget(1,320,10,300,24,"Category")
ComboBoxGadget(2,320,30,300,24,#PB_ComboBox_Editable)
AddGadgetItem(2,-1,"public.app-category.business")
AddGadgetItem(2,-1,"public.app-category.developer-tools")
AddGadgetItem(2,-1,"public.app-category.education")
AddGadgetItem(2,-1,"public.app-category.entertainment")
AddGadgetItem(2,-1,"public.app-category.finance")
AddGadgetItem(2,-1,"public.app-category.games")
AddGadgetItem(2,-1,"public.app-category.action-games")
AddGadgetItem(2,-1,"public.app-category.adventure-games")
AddGadgetItem(2,-1,"public.app-category.arcade-games")
AddGadgetItem(2,-1,"public.app-category.board-games")
AddGadgetItem(2,-1,"public.app-category.card-games")
AddGadgetItem(2,-1,"public.app-category.casino-games")
AddGadgetItem(2,-1,"public.app-category.dice-games")
AddGadgetItem(2,-1,"public.app-category.educational-games")
AddGadgetItem(2,-1,"public.app-category.family-games")
AddGadgetItem(2,-1,"public.app-category.kids-games")
AddGadgetItem(2,-1,"public.app-category.music-games")
AddGadgetItem(2,-1,"public.app-category.puzzle-games")
AddGadgetItem(2,-1,"public.app-category.racing-games")
AddGadgetItem(2,-1,"public.app-category.role-playing-games")
AddGadgetItem(2,-1,"public.app-category.simulation-games")
AddGadgetItem(2,-1,"public.app-category.sports-games")
AddGadgetItem(2,-1,"public.app-category.strategy-games")
AddGadgetItem(2,-1,"public.app-category.trivia-games")
AddGadgetItem(2,-1,"public.app-category.word-games")
AddGadgetItem(2,-1,"public.app-category.graphics-design")
AddGadgetItem(2,-1,"public.app-category.healthcare-fitness")
AddGadgetItem(2,-1,"public.app-category.lifestyle")
AddGadgetItem(2,-1,"public.app-category.medical")
AddGadgetItem(2,-1,"public.app-category.music")
AddGadgetItem(2,-1,"public.app-category.news")
AddGadgetItem(2,-1,"public.app-category.photography")
AddGadgetItem(2,-1,"public.app-category.productivity")
AddGadgetItem(2,-1,"public.app-category.reference")
AddGadgetItem(2,-1,"public.app-category.social-networking")
AddGadgetItem(2,-1,"public.app-category.sports")
AddGadgetItem(2,-1,"public.app-category.travel")
AddGadgetItem(2,-1,"public.app-category.utilities")
AddGadgetItem(2,-1,"public.app-category.video")
AddGadgetItem(2,-1,"public.app-category.weather")
;
TextGadget(3,320,70,300,24,"Your App Name")
StringGadget(4,320,100,300,24,"Your App Name")
;
TextGadget(5,320,140,300,24,"Your Company Name")
StringGadget(6,320,170,300,24,"Your Company Name")
;
TextGadget(7,320,210,300,24,"Version")
StringGadget(8,320,240,300,24,"1.0.0")
;
TextGadget(9,320,270,300,24,"Bundle name")
StringGadget(10,320,300,300,24,"com.company name.app name")
;
CheckBoxGadget(11,320,270,300,24,"Sandbox app?")

If ExamineDirectory(0, "/Applications", "")
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
      If LCase(Right(DirectoryEntryName(0), 4)) = ".app"
        AddGadgetItem(0, -1, DirectoryEntryName(0))
      EndIf
    EndIf
  Wend
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      If EventGadget() = 0
        If EventType() = #PB_EventType_LeftClick
          ListContent("/Applications/" + GetGadgetText(0))
        EndIf
      EndIf
  EndSelect
ForEver
spacebuddy
Enthusiast
Enthusiast
Posts: 356
Joined: Thu Jul 02, 2009 5:42 am

Re: Mac App Store Approval

Post by spacebuddy »

I got rejected because the menu "Preferences" was not greyed out. :shock:

If you do not grey it out then make sure something happens when someone clicks
on "Preferences". The latest PB beta 4.7 1.5 has a bug and the "Preferences" menu
does not grey out.
User avatar
J. Baker
Addict
Addict
Posts: 2181
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: Mac App Store Approval

Post by J. Baker »

spacebuddy wrote:I got rejected because the menu "Preferences" was not greyed out. :shock:

If you do not grey it out then make sure something happens when someone clicks
on "Preferences". The latest PB beta 4.7 1.5 has a bug and the "Preferences" menu
does not grey out.
Sorry to hear that. I think that is something Apple should have disabled until a developer wants to use it. That's more their issue then any developers and shouldn't be worth a rejection.
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
spacebuddy
Enthusiast
Enthusiast
Posts: 356
Joined: Thu Jul 02, 2009 5:42 am

Re: Mac App Store Approval

Post by spacebuddy »

Sorry to hear that. I think that is something Apple should have disabled until a developer wants to use it. That's more their issue then any developers and shouldn't be worth a rejection.[/quote]


When I used PB 4.61 it greyed it out automatically for me, but when I submitted with latest beta
I did not notice that PB did not grey it out :(

Hopefully Fred will fix this soon so I can re-submit my program to the app store :D
User avatar
J. Baker
Addict
Addict
Posts: 2181
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: Mac App Store Approval

Post by J. Baker »

spacebuddy wrote:When I used PB 4.61 it greyed it out automatically for me, but when I submitted with latest beta
I did not notice that PB did not grey it out :(

Hopefully Fred will fix this soon so I can re-submit my program to the app store :D
Yeah, me too. I have 2 submitted apps that will probably get rejected.
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
moogle
Enthusiast
Enthusiast
Posts: 372
Joined: Tue Feb 14, 2006 9:27 pm
Location: London, UK

Re: Mac App Store Approval

Post by moogle »

spacebuddy wrote:I got rejected because the menu "Preferences" was not greyed out. :shock:

If you do not grey it out then make sure something happens when someone clicks
on "Preferences". The latest PB beta 4.7 1.5 has a bug and the "Preferences" menu
does not grey out.
Makes sense, their guidelines are strict but they make sure only good professional apps get approved.

Some GUI's for programs I've seen on here (the forum in general) aren't very good looking.
Image
User avatar
J. Baker
Addict
Addict
Posts: 2181
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: Mac App Store Approval

Post by J. Baker »

moogle wrote:
spacebuddy wrote:I got rejected because the menu "Preferences" was not greyed out. :shock:

If you do not grey it out then make sure something happens when someone clicks
on "Preferences". The latest PB beta 4.7 1.5 has a bug and the "Preferences" menu
does not grey out.
Makes sense, their guidelines are strict but they make sure only good professional apps get approved.

Some GUI's for programs I've seen on here (the forum in general) aren't very good looking.
It may appear that way. I don't see how some apps make it through the app store. Some even have major bugs that never get fixed and in my opinion, should be removed from the app store.
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef


Even the vine knows it surroundings but the man with eyes does not.
Post Reply