
Mac App Store Approval
Re: Mac App Store Approval
When I did an iphone app, they rejected it because they didn't like the screenshot, they wanted one more if I remember correctly 

-
- Enthusiast
- Posts: 536
- Joined: Mon Feb 16, 2009 10:42 am
- Location: sweden
- Contact:
Re: Mac App Store Approval
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!!
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
Grats, but the "muslces" on the top left button should be editedjesperbrannmark wrote:(check the screenshots! i am proud.. especially for them not complaining about the ipad rip-off interface)
champagne!!

"physiotherapiests"
-
- Enthusiast
- Posts: 536
- Joined: Mon Feb 16, 2009 10:42 am
- Location: sweden
- Contact:
Re: Mac App Store Approval
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....
- Fangbeast
- PureBasic Protozoa
- Posts: 4789
- Joined: Fri Apr 25, 2003 3:08 pm
- Location: Not Sydney!!! (Bad water, no goats)
Re: Mac App Store Approval
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"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!!
Amateur Radio/VK3HAF, (D-STAR/DMR and more), Arduino, ESP32, Coding, Crochet
Re: Mac App Store Approval
@J. Baker: Awesome, dude. Thank you very much for this article. I am looking forward to make use of the knowledge provided by you. 

best regards,
Violet
Violet
Re: Mac App Store Approval
No problem.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.

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.
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.
Re: Mac App Store Approval
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.
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.
-
- Enthusiast
- Posts: 536
- Joined: Mon Feb 16, 2009 10:42 am
- Location: sweden
- Contact:
Re: Mac App Store Approval
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:
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
-
- Enthusiast
- Posts: 356
- Joined: Thu Jul 02, 2009 5:42 am
Re: Mac App Store Approval
I got rejected because the menu "Preferences" was not greyed out.
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.

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
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.spacebuddy wrote:I got rejected because the menu "Preferences" was not greyed out.![]()
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.
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.
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.
-
- Enthusiast
- Posts: 356
- Joined: Thu Jul 02, 2009 5:42 am
Re: Mac App Store Approval
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
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

Re: Mac App Store Approval
Yeah, me too. I have 2 submitted apps that will probably get rejected.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
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.
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.
Re: Mac App Store Approval
Makes sense, their guidelines are strict but they make sure only good professional apps get approved.spacebuddy wrote:I got rejected because the menu "Preferences" was not greyed out.![]()
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.
Some GUI's for programs I've seen on here (the forum in general) aren't very good looking.

Re: Mac App Store Approval
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.moogle wrote:Makes sense, their guidelines are strict but they make sure only good professional apps get approved.spacebuddy wrote:I got rejected because the menu "Preferences" was not greyed out.![]()
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.
Some GUI's for programs I've seen on here (the forum in general) aren't very good looking.
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.
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.