Page 2 of 3

Re: Mac App Store Approval

Posted: Thu Oct 27, 2011 10:25 am
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:

Re: Mac App Store Approval

Posted: Thu Oct 27, 2011 7:16 pm
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!!

Re: Mac App Store Approval

Posted: Thu Oct 27, 2011 8:09 pm
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"

Re: Mac App Store Approval

Posted: Fri Oct 28, 2011 6:14 am
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....

Re: Mac App Store Approval

Posted: Fri Oct 28, 2011 7:39 am
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"

Re: Mac App Store Approval

Posted: Sun Dec 25, 2011 4:53 pm
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:

Re: Mac App Store Approval

Posted: Sun Dec 25, 2011 4:59 pm
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. ;)

Re: Mac App Store Approval

Posted: Tue Aug 14, 2012 4:00 am
by J. Baker
I updated the info on the first topic. I believe I posted everything that needs to be done. ;)

Re: Mac App Store Approval

Posted: Wed Aug 15, 2012 4:34 am
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

Re: Mac App Store Approval

Posted: Fri Aug 17, 2012 5:34 pm
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.

Re: Mac App Store Approval

Posted: Fri Aug 17, 2012 6:10 pm
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.

Re: Mac App Store Approval

Posted: Fri Aug 17, 2012 6:22 pm
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

Re: Mac App Store Approval

Posted: Fri Aug 17, 2012 6:28 pm
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.

Re: Mac App Store Approval

Posted: Fri Aug 17, 2012 7:02 pm
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.

Re: Mac App Store Approval

Posted: Fri Aug 17, 2012 7:38 pm
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.