Hi,
First, I apologize if you already know this, but I'm gonna describe it anyway just to make sure
When you upload a file using a fileInput control you point to the file on the client computer, and Shiny will upload the file to the server and create a local copy in a tmp folder. In the fileInput event you get the path to this temp location in input$<name-of-fileInput-control>
$datapath. When you then bookmark the Shiny app, Shiny will copy the file from the temp location to the bookmark folder, and change the datapath field of the fileInput control to point to the new location. When you restore your Shiny app from the bookmark, Shiny will again copy the file from the bookmark location to a new temp location and change the datapath field accordingly. So you really don't need to worry about the location of the uploaded file, it will all be taken care of by Shiny, and the datapath field of the fileInput control will always contain the correct location.
I don't run my Shiny apps directly from RStudio as it blocks the terminal, and I usually need the terminal during debugging. Instead, during development I launch the Shiny app in a separate process (running something like R -e 'shiny::runApp("~/<path-to-shiny-app>", host="0.0.0.0", port=4000
. Then I can reach my Shiny app going to localhost:4000 in a browser). In production the app is hosted on a Shiny Server instance. But it doesn't really matter here, it just changes the location of temp folder and the bookmark folder, but since I don't really need to care about those locations (they are available from the datapath field) I think you should be fine on Mac. Just remember that if you run the Shiny app in a separate process you will need to reload the app when you have made changes - Shiny looks at the timestamp of app.R to determine whether a reload is necessary. If app.R didn't change Shiny won't reload your modifications. I usually just touch app.R to make sure.
Happy hunting!
Steen