Skip to content

Instantly share code, notes, and snippets.

@Thinkscape
Forked from amuino/webinspector.applescript
Last active September 8, 2020 01:34
Show Gist options
  • Save Thinkscape/8538321 to your computer and use it in GitHub Desktop.
Save Thinkscape/8538321 to your computer and use it in GitHub Desktop.
Script for opening web inspector window for remote debugging iOS web apps (including phonegap and other webview apps). This version of the script will suspend and wait for 30 seconds for Safari to establish a connection with the device (or simulator) and open the web inspector window as soon as technically possible.
#!/usr/bin/osascript
# Name of the device as visible in Safari->Develop menu
set deviceName to "iPhone Simulator"
# Number of seconds to wait for the simulator window to show up
set maxWait to 30
# ---------------------------------------
# You shouldn't modify anything below here
set hasClicked to false
set x to 0
tell application "Safari"
activate
repeat until hasClicked or x > (maxWait * 10)
try
tell application "System Events"
click menu item "index.html" of menu deviceName of menu item deviceName of menu "Develop" of menu bar item $item "Develop" of menu bar 1 of application process "Safari"
end tell
set hasClicked to true
on error foo
delay 0.1
set x to x + 1
end try
end repeat
if hasClicked = false then
display dialog "Unable to connect to iOS simulator - make sure that it's working" buttons {"OK"} default button 1
else
try
tell application "System Events"
click button 1 of window "Top Sites" of application process "Safari"
end tell
end try
return
end if
end tell
@Thinkscape
Copy link
Author

I've also noticed that it's not currently possible to invoke the script as .cordova/hooks/after_run, because the way phonegap cli invokes hook scripts. The sub-process does not have access to the GUI so it's not able to find or work on safari window.

The easiest workaround is to run:

chmod a+x ./safari-webinspector.applescript

(./safari-webinspector.applescript & ); phonegap run ios

This will wait for safari to connect to iOS (i.e. simulator) and display webinspector window as soon as possible.

@mftaher
Copy link

mftaher commented Mar 2, 2014

getting this error:

./safari-webinspector.applescript:632:633: script error: Expected expression, property or key form, etc. but found unknown token. (-2741)

@johannish
Copy link

@mftaher Same error here. To fix it I removed the $item from the click menu command:

click menu item "index.html" of menu deviceName of menu item deviceName of menu "Develop" of menu bar item "Develop" of menu bar 1 of application process "Safari"

@udfalkso
Copy link

udfalkso commented Nov 5, 2014

Thanks for this!

@wearemothership
Copy link

Can't get this to work in Xcode 6.1.1
I have changed deviceName to "iOS Simulator" and applied the change suggested by @raztus. Run build but it just hangs without running the app in the Sim. Any ideas?

@jfrumar
Copy link

jfrumar commented Jan 10, 2015

OK this is awesome - thanks for sharing!

I had to make the following changes to modernize it for Yosemite:

  • Remove $item on the click menu command as mentioned above
  • Change to set deviceName to "iOS Simulator"
  • Change to click button 1 of window "Favorites" of application process "Safari"

You must also quit the Simulator between sessions (otherwise the script triggers prematurely and ends).

For cordova (assuming you keep it in the scripts folder and have chmod +x scripts/open-webinspector.applescript):

(scripts/open-webinspector.applescript &); cordova emulate ios

@CoenWarmer
Copy link

This is awesome, been looking for something like this for a while.

So just to summarize all the edits for Yosemite, here's the updated script.

Thanks to @Thinkscape, @jfrumar and @raztus 😄

#!/usr/bin/osascript

# Name of the device as visible in Safari->Develop menu
set deviceName to "iOS Simulator"

# Number of seconds to wait for the simulator window to show up
set maxWait to 30

# ---------------------------------------
# You shouldn't modify anything below here
set hasClicked to false
set x to 0
tell application "Safari"
    activate
    repeat until hasClicked or x > (maxWait * 10)
        try
            tell application "System Events"
                click menu item "index.html" of menu deviceName of menu item deviceName of menu "Develop" of menu bar item "Develop" of menu bar 1 of application process "Safari"
            end tell
            set hasClicked to true
        on error foo
            delay 0.1
            set x to x + 1
        end try
    end repeat
    if hasClicked = false then
        display dialog "Unable to connect to iOS simulator - make sure that it's working" buttons {"OK"} default button 1
    else
        try
            tell application "System Events"
                click button 1 of window "Favorites" of application process "Safari"
            end tell
        end try
        return
    end if
end tell

@uniphonic
Copy link

Thanks everyone!

I made a fork of this to both compile and run the debugger, and also made instructions on how to assign it to a shortcut key with Automator.
https://gist.github.com/uniphonic/fc4e679884aa83787c26

@benallfree
Copy link

Made a fork of @uniphonic's fork above, for iTerm - https://gist.github.com/benallfree/948994ad6b143b5566f2

@qkdreyer
Copy link

Here is my version of opening Safari Web Inspector - https://gist.github.com/14ea36ce3bc9cc5632b78252fe35ec76

@vitaly-zdanevich
Copy link

It must works for debugging of real iPad webview without emulator? I see Unable to connect to iOS simulator

@alphacat2018
Copy link

alphacat2018 commented Nov 16, 2018

I made an Alfred workflow for this. - https://github.com/alphacat2018/AlfredOpenSafariInspector

@doug-sheridan
Copy link

If you can't get @alphacat2018's suggestion to work, try using this other Workflow with Alfred:
https://github.com/dcalhoun/alfred-remote-inspector-workflow

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment