How do I enable apps created in Fluid to access location data for my computer?

Some of the apps I am trying to create need me to share my location to function at their best, but fluid app seems to not allow this. I have looked through all the settings, but I can't find this setting.

Google Maps, for example, does not allow me to automatically see my current location nor do my facebook and other social apps.


Solution 1:

This is not an answer to your question per se, but I stopped using Fluid and moved on to Chrome SSBs, both for the ability to add Chrome plugins (a must for me) and the better experience (IMHO) of Chrome as my browser. I've thus far created SSBs for Google Play Music, Gmail, Google Calendar, and MightyText. All work beautifully.

The script I'm using is as follows:

#!/bin/bash


# White Space Trimming: http://codesnippets.joyent.com/posts/show/1816
trim() {
  local var=$1
  var="${var#"${var%%[![:space:]]*}"}"   # remove leading whitespace characters
  var="${var%"${var##*[![:space:]]}"}"   # remove trailing whitespace characters
  /bin/echo -n "$var"
}


### Get Input
/bin/echo "What should the Application be called?"
read inputline
name=`trim "$inputline"`

/bin/echo "What is the url (e.g. https://www.google.com/calendar/render)?"
read inputline
url=`trim "$inputline"`

/bin/echo "What is the full path to the icon (e.g. /Users/username/Desktop/icon.png)?"
read inputline
icon=`trim "$inputline"`


#### Find Chrome. If its not in the standard spot, try using spotlight.
chromePath="/Applications/Google Chrome.app"
if [ ! -d "$chromePath" ] ; then
    chromePath=`mdfind "kMDItemCFBundleIdentifier == 'com.google.Chrome'" | head -n 1`
    if [ -z "$chromePath" ] ; then
    /bin/echo "ERROR. Where is chrome installed?!?!"
    exit 1
    fi
fi
chromeExecPath="$chromePath/Contents/MacOS/Google Chrome"

# Let's make the app whereever we call the script from...
appRoot=`/bin/pwd`

# various paths used when creating the app
resourcePath="$appRoot/$name.app/Contents/Resources"
execPath="$appRoot/$name.app/Contents/MacOS"
profilePath="$appRoot/$name.app/Contents/Profile"
plistPath="$appRoot/$name.app/Contents/Info.plist"
versionsPath="$appRoot/$name.app/Contents/Versions"

# make the directories
/bin/mkdir -p  "$resourcePath" "$execPath" "$profilePath"

# convert the icon and copy into Resources
if [ -f "$icon" ] ; then
    if [ ${icon: -5} == ".icns" ] ; then
        /bin/cp "$icon" "$resourcePath/icon.icns"
    else
        sips -s format tiff "$icon" --out "$resourcePath/icon.tiff" --resampleWidth 128 >& /dev/null
        tiff2icns -noLarge "$resourcePath/icon.tiff" >& /dev/null
    fi
fi

# Save a symlink to the location of the Chrome executable to be copied when the SSB is started.
/bin/ln -s "$chromeExecPath" "$execPath/Chrome"

### Create the wrapper executable
/bin/cat >"$execPath/$name" <<EOF
#!/bin/sh
ABSPATH=\$(cd "\$(dirname "\$0")"; pwd)
/bin/cp "\$ABSPATH/Chrome" "\$ABSPATH/$name Chrome"
exec "\$ABSPATH/$name Chrome" --app="$url" --user-data-dir="\$ABSPATH/../Profile" "\$@"
EOF
/bin/chmod +x "$execPath/$name"

### create the Info.plist
/bin/cat > "$plistPath" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>CFBundleExecutable</key>
<string>$name</string>
<key>CFBundleName</key>
<string>$name</string>
<key>CFBundleIconFile</key>
<string>icon.icns</string>
<key>NSHighResolutionCapable</key>
<string>True</string>
</dict>
</plist>
EOF

### link the Versions directory
/bin/ln -s "$chromePath/Contents/Versions" "$versionsPath"

### create a default (en) localization to name the app
/bin/mkdir -p "$resourcePath/en.lproj"
/bin/cat > "$resourcePath/en.lproj/InfoPlist.strings" <<EOF
CFBundleDisplayName = "$name";
CFBundleName = "$name";
EOF

### tell the user where the app is located so that they can move it to
### /Applications if they wish
/bin/cat <<EOF
Finished! The app has been installed in
$appRoot/$name.app
EOF

I am pasting it here because I cannot recall where I found it, but it's one of the only "Chrome-to-SSB" scripts that creates a unique set of preferences for the app it creates.

NOTE: You still need to customize the Preferences environment so that you do not run afoul of Mac Keychain issues with multiple browsers identifying themselves to the system as "Google Chrome" and the Keychain Access app going into an infinite loop requesting authentication rights. Trust me on this, and read the warning at the bottom.

So:

  • Download the script file
  • Stash it somewhere safe. I recommend loose in your Home folder, since this is where the Terminal will start up to.
  • Name it anything you wish (chromeSSB.sh is memorable) or create an alias to it in your .bashrc or .bash_profile.
  • Invoke the script by typing its name in the terminal, so, using the example name above:

enter image description here

and hit 'Enter'. The script will then walk you through the creation of your SSB, asking, in order…

  • What should the Application be called?
  • What is the url (e.g. https://www.google.com/calendar/render)?
  • What is the full path to the icon (e.g. /Users/username/Desktop/icon.png)?

And that's it! Make sure to download and point to a beautiful hi-res png of your desired app icon, if that matters to you.

Now, the warning mentioned above.

Because you're creating a separate instance of Chrome, and because Chrome wants to help you out in every way possible by syncing your life among every Chrome browser you use, you will want to take a couple of steps when you first launch your new Chrome-based SSB. On launching you will be greeted with:

enter image description here

1.

You're going to want to un-check that box, so that your "normal" copy of Chrome is your "default" copy.

Then you will see:

enter image description here

2.

Enter your Google Account info and "Sign In."

You should see the following screen, asking you what you would like to sync between your browsers (if you do not see this screen immediately, see below). Choose "Choose What To Sync" from the popup menu…

enter image description here

Then DESELECT EVERY CHECKBOX

enter image description here

…so that you are syncing nothing between browsers. This gives you access to your Google account info (if you need it) but otherwise leaves the browser as a completely self-standing app, which is exactly what you want. If you leave any of these 'sync' checkboxes checked, you do so at your own peril, because crossing the streams is bad. Consider that an important safety tip. ;-)

This seems overly-complicated, but just read it through once and you'll be fine.

  1. Create the app.
  2. Make sure that the new app (browser) doesn't sync with other Chrome instances.
  3. Enjoy.

If you did not see the "Choose What To Sync" preferences screen as soon as you logged into Chrome, no worries. I've seen that happen a few times. Proceed from here:

So, you are signed in to the browser session but NOT signed into Chrome (or something like that). What does this mean? You bookmarks, preferences, plugins, etc., are not automatically synced for you right now, so there's one final step to log in. Choose "Preferences" from your App's main menu (whatever you named it)…

enter image description here

and "Sign in to Chrome"…

enter image description here

Enter your login again, and then proceed to step 2, above.