From a12d00216e546c05c13e3b4f0e124776715b1161 Mon Sep 17 00:00:00 2001 From: Joey Korkames Date: Wed, 25 Feb 2015 21:56:16 -0700 Subject: [PATCH] releasing 1.2 --- Makefile | 65 +++-- README.md | 154 ++++++----- modules/WebKitPrivates/module.modulemap | 2 - .../project.pbxproj | 257 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../AddressBookHangoutsPlugin.xccheckout | 41 +++ .../UserInterfaceState.xcuserstate | Bin 0 -> 13196 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 23 ++ .../AddressBookHangoutsPlugin.xcscheme | 77 ++++++ .../xcschemes/xcschememanagement.plist | 22 ++ .../AddressBookHangoutsPlugin.h | 31 +++ .../AddressBookHangoutsPlugin.m | 43 +++ .../AddressBookHangoutsPlugin/Info.plist | 28 ++ .../AddressBookHangoutsPlugin/Info.plist | 44 +++ .../AddressBookHangoutsPlugin/install.sh | 5 + .../Contents/Info.plist | 0 .../Contents/QuickLook/Thumbnail.png | Bin .../Contents/document.wflow | 0 18 files changed, 700 insertions(+), 99 deletions(-) create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.pbxproj create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/xcshareddata/AddressBookHangoutsPlugin.xccheckout create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/xcuserdata/joey.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcschemes/AddressBookHangoutsPlugin.xcscheme create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.h create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.m create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/Info.plist create mode 100644 sites/Hangouts/extras/AddressBookHangoutsPlugin/Info.plist create mode 100755 sites/Hangouts/extras/AddressBookHangoutsPlugin/install.sh rename sites/Hangouts/{ => extras}/G+ Hangout via Phone.workflow/Contents/Info.plist (100%) rename sites/Hangouts/{ => extras}/G+ Hangout via Phone.workflow/Contents/QuickLook/Thumbnail.png (100%) rename sites/Hangouts/{ => extras}/G+ Hangout via Phone.workflow/Contents/document.wflow (100%) diff --git a/Makefile b/Makefile index c395c1d..acbad8f 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,17 @@ #!/usr/bin/make -f appdir := apps -apps := Hangouts.app Trello.app Digg.app Vine.app +apps := Hangouts Trello Digg Vine appexec := build/MacOS/MacPin -#apps := $(addsuffix .app, $(basename $(wildcard sites/*))) -#apps := $(patsubst %, %.app, $(basename $(wildcard sites/*))) debug ?= -debug += -D APP2JSLOG -D SAFARIDBG -D WK2LOG -D DBGMENU +#debug += -D APP2JSLOG -D SAFARIDBG -D WK2LOG -D DBGMENU #^ need to make sure !release target #verbose := -driver-print-jobs # ^ just a dry-run #verbose := -v -all: $(apps) +allapps := $(patsubst %,$(appdir)/%.app,$(apps)) +allapps: $(allapps) -VERSION := 1.1.0 +VERSION := 1.2.0 LAST_TAG != git describe --abbrev=0 --tags USER := kfix REPO := MacPin @@ -25,10 +24,6 @@ frameworks := -F $(sdkpath)/System/Library/Frameworks -F build -F build/Framewor modincdirs := -I build -L build -L build/Frameworks modincdirs += $(addprefix -I ,$(patsubst %/,%,$(dir $(wildcard modules/*/module.modulemap)))) -#build/%.appex -#$(swiftc) -application-extension -# https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/SystemExtensionKeys.html#//apple_ref/doc/uid/TP40014212-SW15 - build/MacOS/%: execs/%.swift build/Frameworks/lib%.dylib install -d $(@D) $(swiftc) $(debug) $(frameworks) $(modincdirs) \ @@ -48,8 +43,14 @@ build/%.a: build/%.o ar rcs $@ $< build/%.o: objc/%.m +build/Frameworks/lib%.dylib: modules/%/*.m + install -d $(@D) xcrun -sdk macosx clang -c $(frameworks) -fmodules -o $@ $< +#build/%.ShareExtension.bundle: build/%.ShareExtension/*.swift +#$(swiftc) -application-extension +# https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/SystemExtensionKeys.html#//apple_ref/doc/uid/TP40014212-SW15 + icons/%.icns: icons/%.png python icons/AppleIcnsMaker.py -p $< @@ -58,7 +59,7 @@ icons/%.icns: icons/WebKit.icns # https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html # https://developer.apple.com/library/mac/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html -%.app: $(appexec) icons/%.icns sites/% entitlements.plist build/Frameworks/lib$(notdir $(appexec)).dylib +$(appdir)/%.app: $(appexec) icons/%.icns sites/% entitlements.plist build/Frameworks/lib$(notdir $(appexec)).dylib python2.7 -m bundlebuilder \ --name=$* \ --bundle-id=com.github.kfix.$(notdir $(appexec)).$* \ @@ -68,18 +69,18 @@ icons/%.icns: icons/WebKit.icns --file=sites/$*:Contents/Resources \ $(addprefix --lib=,$(filter %.dylib,$+)) \ build - plutil -replace CFBundleShortVersionString -string "$(VERSION)" $(appdir)/$*.app/Contents/Info.plist - plutil -replace CFBundleVersion -string "0.0.0" $(appdir)/$*.app/Contents/Info.plist - plutil -replace NSHumanReadableCopyright -string "built $(shell date) by $(shell id -F)" $(appdir)/$*.app/Contents/Info.plist - plutil -replace NSSupportsAutomaticTermination -bool true $(appdir)/$*.app/Contents/Info.plist - plutil -replace NSSupportsSuddenTermination -bool true $(appdir)/$*.app/Contents/Info.plist - -codesign -s - -f --entitlements entitlements.plist $(appdir)/$*.app && codesign -dv $(appdir)/$*.app - -asctl container acl list -file $(appdir)/$*.app - -%.appex: %.app appex.plist + plutil -replace CFBundleShortVersionString -string "$(VERSION)" $@/Contents/Info.plist + plutil -replace CFBundleVersion -string "0.0.0" $@/Contents/Info.plist + plutil -replace NSHumanReadableCopyright -string "built $(shell date) by $(shell id -F)" $@/Contents/Info.plist + plutil -replace NSSupportsAutomaticTermination -bool true $@/Contents/Info.plist + plutil -replace NSSupportsSuddenTermination -bool true $@/Contents/Info.plist + -codesign -s - -f --entitlements entitlements.plist $@ && codesign -dv $@ + -asctl container acl list -file $@ + +$(appdir)/%.appex: $(appdir)/%.app build/%.ShareExtension.bundle appex.plist # --bundle-id=com.github.kfix.macpin.$*.Extension -install: $(apps) +install: allapps cd $(appdir); cp -R $+ ~/Applications clean: @@ -89,18 +90,18 @@ clean: uninstall: -defaults delete $(appexec) -rm -rf ~/Library/Caches/com.github.kfix.$(notdir $(appexec)).* ~/Library/WebKit/com.github.kfix.$(notdir $(appexec)).* ~/Library/WebKit/$(notdir $(appexec)) - -rm -rf ~/Library/Saved\ Application\ State/com.github.kfix.macpin.* - -rm -rf ~/Library/Preferences/com.github.kfix.macpin.* + -rm -rf ~/Library/Saved\ Application\ State/com.github.kfix.$(notdir $(appexec)).* + -rm -rf ~/Library/Preferences/com.github.kfix.$(notdir $(appexec)).* -cd ~/Applications; rm -rf $(apps) - -defaults read com.apple.spaces app-bindings | grep com.github.kfix.macpin. + -defaults read com.apple.spaces app-bindings | grep com.github.kfix.$(notdir $(appexec). # open ~/Library/Preferences/com.apple.spaces.plist test: $(appexec) - #-defaults delete $(notdir appexec) + #-defaults delete $(notdir $(appexec)) $< http://browsingtest.appspot.com doc: $(appexec) - echo ":print_module MacPin" | xcrun swift $(modincdirs) -deprecated-integrated-repl + echo ":print_module $(notdir $(appexec))" | xcrun swift $(modincdirs) -deprecated-integrated-repl nightly: $(appexec) DYLD_FRAMEWORK_PATH=/Volumes/WebKit/WebKit.app/Contents/Frameworks/10.10 -defaults delete $(notdir $(appexec)) @@ -112,13 +113,19 @@ tag: $(ZIP): tag rm $(ZIP) || true - cd $(appdir); zip -no-wild -r ../$@ $(apps) --exclude .DS_Store + zip -no-wild -r $@ $(allapps) --exclude .DS_Store -release: clean $(apps) $(ZIP) +ifneq ($(GITHUB_ACCESS_TOKEN),) +release: clean allapps $(ZIP) git push -f --tags posturl=$$(curl --data $(GH_RELEASE_JSON) "https://api.github.com/repos/$(USER)/$(REPO)/releases?access_token=$(GITHUB_ACCESS_TOKEN)" | jq -r .upload_url | sed 's/[\{\}]//g') && \ dload=$$(curl --fail -X POST -H "Content-Type: application/gzip" --data-binary "@$(ZIP)" "$$posturl=$(ZIP)&access_token=$(GITHUB_ACCESS_TOKEN)" | jq -r .browser_download_url | sed 's/[\{\}]//g') && \ echo "$(REPO) now available for download at $$dload" +else +release: + @echo You need to export \$$GITHUB_ACCESS_TOKEN to make a release! + @exit 1 +endif .PRECIOUS: icons/%.icns $(appdir)/%.app build/Frameworks/lib%.dylib -.PHONY: clean install uninstall test all tag release nightly doc +.PHONY: clean install uninstall test allapps tag release nightly doc diff --git a/README.md b/README.md index 8914b68..a1c8da0 100644 --- a/README.md +++ b/README.md @@ -1,94 +1,112 @@ -MacPin -======= -MacPin creates a hybrid OSX & Web app from a simple Javascript. -It appears as a very stripped down browser with just a tab-bar (aka. "Site Specific Browser"). -You can see it in your App Switcher and it can post to Notification Center and recieve custom-scheme URLs opened on your Mac via Launch Services. +# MacPin +MacPin creates a Mac OSX App shell for websites & webapps from a short JavaScript you provide. +Some call these Apps [Site-specific Browsers](https://en.wikipedia.org/wiki/Site-specific_browser) or Hybrid apps. -(OSX 10.10 "Yosemite" required) +The Browser UI is very minimal, just a tab-bar which disappears in Full-Screen mode, leaving only the site content. -Included Apps -====== +MacPin apps sit in your Dock, App Switcher, and Launchpad. +Userscripts can be injected to facilitate posting to the Notification Center & recalling webapp locations/state from those posts. -* [Hangouts.app](http://plus.google.com/hangouts) -=== -Chrome-less Hangouts client for your desktop. -![screenie](/sites/Hangouts/screenshot.jpg?raw=true) - Load up does take about 30 secs, so be patient. - New incoming messages are shown in OSX's Notification Center, clicking them will popup the contact in the app so you can reply quickly. +Custom URL schemes can also be registered to launch your App from any other app on your Mac. -``` -# URLs: -sms:5558675309 -tel:18001234567 -hangouts:coolguy@example.com -``` - Included is an OSX Service that allows highlighting a phone number in any text and right clicking to open a Hangout Call for it. - Several browser extensions can also make phone numbers found in webpages clickable. +OSX 10.10 "Yosemite" is required. +4 apps are prebuilt for download in the GitHub release. - If you have a Google Voice number linked to your Hangouts account, incoming calls will popup in the roster. - * press Enter or Space to Accept the call - * press ESC or Backspace to Decline it +## Included Apps -* [Digg.app](http://digg.com/reader) -=== - My chosen replacement for Google Reader. -``` -# URLs: -feed:http://example.com/sampleblog.xml -rss://example.com/sampleblog.xml -``` +#### [Hangouts.app](http://plus.google.com/hangouts): SMS/IM/Video chat client for the desktop +![screenie](/sites/Hangouts/screenshot.jpg?raw=true) +Load up does take up to 30 seconds, so be patient. - If you are surfing a blog in Safari and want to subscribe to it in your Digg Reader account: - * click Safari's Sharing button - * click "Add to Shared Links" - * Answer "No" when prompted to add it your Safari Shared links. - * If Safari found a feed or rss metatag/mime-type, it will be passed to the Digg app which will prompt you to add it to your subscriptions. - * PROTIP: [Add the old RSS button back to Safari 8](http://www.red-sweater.com/blog/2624/subscribe-to-feed-safari-extension) - -* [Trello.app](http://trello.com) -=== -Mind-mapper and project planner extraordinaire. Pinterest for geeks :-) - ![screenie](/sites/Trello/screenshot.jpg?raw=true) -``` -URLs: -trello: -``` +New incoming messages are shown in OSX's Notification Center, +which you can click on to reply back in the app. + +Under [extras/](/sites/Hangouts/extras) you'll find: + +* `Call via Hangouts.service`: enables selecting and right-clicking a phone number in any App's text to make a Hangout Call +* `HangoutsAddressBookPlugin`: allows click-to-call from Contacts.app phone number fields + +Several browser extensions can also make phone numbers found in webpages clickable. + +If you have a Google Voice number linked to your Hangouts account, incoming calls will popup in the App's contacts roster. +Hangouts.app will automatically steal focus so you can quickly answer or reject the call using the keyboard: + +* press Enter or Space to accept the call +* press Escape or Backspace to decline it + +Custom URLs: [SMS](sms:5558675309) [Call](tel:18001234567) [IM](hangouts:coolguy@example.com) + + +#### [Digg.app](http://digg.com/reader): A replacement for Google Reader + +If you are surfing a blog in Safari and want to subscribe to it in your Digg Reader account: + +* click Safari's Sharing button +* click "Add to Shared Links" +* Answer "No" when prompted to add it your Safari Shared links. +* If Safari found a feed or rss metatag/mime-type, it will be passed to Digg.app which will prompt you to add it to your subscriptions. +* PROTIP: [Add the old RSS button back to Safari 8](http://www.red-sweater.com/blog/2624/subscribe-to-feed-safari-extension) + +Custom URLs: [feed](feed:http://example.com/sampleblog.xml) [rss](rss://example.com/sampleblog.xml) -Opening these urls will pop a tab with a search of your Trello boards and cards for the supplied keywords. -PROTIP: Install Alfred, Quicksilver, or Spotlight to facilitate really fast searches. +#### [Trello.app](http://trello.com): Mind-mapper and project planner +![screenie](/sites/Trello/screenshot.jpg?raw=true) -* [Vine.app](http://vine.co) -=== -It shows the mobile version of the site and does not preload any videos, -so you can choose how to spend your bandwidth & time. +#### [Vine.app](http://vine.co): Mobile-layout edition for the desktop + +Vine has a webpage now, but it is a grid layout and PRECACHES 100% of ALL OF THE VIDEOS on Safari. +Vine.app shows the mobile layout and does not preload any videos. + +Custom URLs: [search your trello for something](trello:search for something) + + +## Creating an App -Creating an App -==== ``` mkdir sites/MySite vim sites/MySite/app.js -# look at other sites/*/app.js and WebAppScriptExports for available commands +# peruse sites/*/app.js for available commands make open apps/MySite.app -# test, tweak, repeat +# test, tweak, lather, repeat + +# find a suitable .png or .icns for the app +cp ~/Pictures/MySite.png icons/ +# else WebKit.icns will be used make install open -a MySite.app -#to customize the icon, find a suitable .png or .icns and place it in icons/ and remake -cp ~/Pictures/MySite.png icons/ ``` -Develop -=== -It's mostly written in Swift using WKWebView and NSTabViewController. -No NIBs, fully programmatic UI layout. -You need Xcode installed on OSX Yosemite to get the Swift compiler and Cocoa headers. +## Hacking the Gibs^H^H^H^HMacPin + +It's written in Swift using WKWebView and NSTabViewController. +Fully programmatic NIB-less UI layout. Easy for a single window without any dialogs :-) +You need Xcode installed on OSX Yosemite to get the Swift compiler and Cocoa headers. + ``` -vim webview.swift +vim execs/MacPin.swift +vim modules/MacPin/*.swift make test ``` -Web Inspector is available in the app, and remote debugging via Safari too when debug= is set in the Makefile. -Check out https://github.com/mozilla/firefox-ios/ to see a another Swift-based browser for iOS. +Web Inspector is available in the app, and remote debugging via Safari too when `debug=` is set in the Makefile. + +The JavaScript API is undocumented and unstable, but I think its mostly fleshed out now. + +Some browser functionality is unimplementable, partly due to WKWebKit's immaturity: + +* File Uploads via File Picker (HTML5 drag & drop is working) +* Geolocation +* Printing +* Favicons + +And some things I just haven't had need to write: + +* Bookmarks, global history +* Undo/redo tabs + + +Check out [Firefox for iOS](https://github.com/mozilla/firefox-ios/) to see another Swift-based browser for iOS. diff --git a/modules/WebKitPrivates/module.modulemap b/modules/WebKitPrivates/module.modulemap index c40f742..a22e2f0 100644 --- a/modules/WebKitPrivates/module.modulemap +++ b/modules/WebKitPrivates/module.modulemap @@ -1,5 +1,3 @@ -// http://stackoverflow.com/a/24794675/3878712 -// http://clang.llvm.org/docs/Modules.html module WebKitPrivates { umbrella header "WebKitPrivates.h" export * diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.pbxproj b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2179e02 --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.pbxproj @@ -0,0 +1,257 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + D4DCB8891A9E5D25004D502E /* AddressBookHangoutsPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = D4DCB8881A9E5D25004D502E /* AddressBookHangoutsPlugin.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D4DCB8821A9E5D25004D502E /* AddressBookHangoutsPlugin.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AddressBookHangoutsPlugin.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + D4DCB8861A9E5D25004D502E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D4DCB8871A9E5D25004D502E /* AddressBookHangoutsPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddressBookHangoutsPlugin.h; sourceTree = ""; }; + D4DCB8881A9E5D25004D502E /* AddressBookHangoutsPlugin.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AddressBookHangoutsPlugin.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D4DCB87F1A9E5D25004D502E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D4DCB8791A9E5D25004D502E = { + isa = PBXGroup; + children = ( + D4DCB8841A9E5D25004D502E /* AddressBookHangoutsPlugin */, + D4DCB8831A9E5D25004D502E /* Products */, + ); + sourceTree = ""; + }; + D4DCB8831A9E5D25004D502E /* Products */ = { + isa = PBXGroup; + children = ( + D4DCB8821A9E5D25004D502E /* AddressBookHangoutsPlugin.bundle */, + ); + name = Products; + sourceTree = ""; + }; + D4DCB8841A9E5D25004D502E /* AddressBookHangoutsPlugin */ = { + isa = PBXGroup; + children = ( + D4DCB8871A9E5D25004D502E /* AddressBookHangoutsPlugin.h */, + D4DCB8881A9E5D25004D502E /* AddressBookHangoutsPlugin.m */, + D4DCB8851A9E5D25004D502E /* Supporting Files */, + ); + path = AddressBookHangoutsPlugin; + sourceTree = ""; + }; + D4DCB8851A9E5D25004D502E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + D4DCB8861A9E5D25004D502E /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + D4DCB8811A9E5D25004D502E /* AddressBookHangoutsPlugin */ = { + isa = PBXNativeTarget; + buildConfigurationList = D4DCB88C1A9E5D25004D502E /* Build configuration list for PBXNativeTarget "AddressBookHangoutsPlugin" */; + buildPhases = ( + D4DCB87E1A9E5D25004D502E /* Sources */, + D4DCB87F1A9E5D25004D502E /* Frameworks */, + D4DCB8801A9E5D25004D502E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AddressBookHangoutsPlugin; + productName = AddressBookHangoutsPlugin; + productReference = D4DCB8821A9E5D25004D502E /* AddressBookHangoutsPlugin.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D4DCB87A1A9E5D25004D502E /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = "Joey Korkames"; + TargetAttributes = { + D4DCB8811A9E5D25004D502E = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = D4DCB87D1A9E5D25004D502E /* Build configuration list for PBXProject "AddressBookHangoutsPlugin" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D4DCB8791A9E5D25004D502E; + productRefGroup = D4DCB8831A9E5D25004D502E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D4DCB8811A9E5D25004D502E /* AddressBookHangoutsPlugin */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D4DCB8801A9E5D25004D502E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D4DCB87E1A9E5D25004D502E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D4DCB8891A9E5D25004D502E /* AddressBookHangoutsPlugin.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D4DCB88A1A9E5D25004D502E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + D4DCB88B1A9E5D25004D502E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + D4DCB88D1A9E5D25004D502E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = AddressBookHangoutsPlugin/Info.plist; + INSTALL_PATH = "$(HOME)/Developer/Palettes"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + D4DCB88E1A9E5D25004D502E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = AddressBookHangoutsPlugin/Info.plist; + INSTALL_PATH = "$(HOME)/Developer/Palettes"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D4DCB87D1A9E5D25004D502E /* Build configuration list for PBXProject "AddressBookHangoutsPlugin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D4DCB88A1A9E5D25004D502E /* Debug */, + D4DCB88B1A9E5D25004D502E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D4DCB88C1A9E5D25004D502E /* Build configuration list for PBXNativeTarget "AddressBookHangoutsPlugin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D4DCB88D1A9E5D25004D502E /* Debug */, + D4DCB88E1A9E5D25004D502E /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = D4DCB87A1A9E5D25004D502E /* Project object */; +} diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..70d168a --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/xcshareddata/AddressBookHangoutsPlugin.xccheckout b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/xcshareddata/AddressBookHangoutsPlugin.xccheckout new file mode 100644 index 0000000..a562237 --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/xcshareddata/AddressBookHangoutsPlugin.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 0B16D5FE-BA72-428D-9965-A4210DBF5ADF + IDESourceControlProjectName + AddressBookHangoutsPlugin + IDESourceControlProjectOriginsDictionary + + 59FF4F5F26550A9C34113746349E7B782452D8AC + https://github.com/kfix/MacPin.git + + IDESourceControlProjectPath + sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj + IDESourceControlProjectRelativeInstallPathDictionary + + 59FF4F5F26550A9C34113746349E7B782452D8AC + ../../../../../.. + + IDESourceControlProjectURL + https://github.com/kfix/MacPin.git + IDESourceControlProjectVersion + 111 + IDESourceControlProjectWCCIdentifier + 59FF4F5F26550A9C34113746349E7B782452D8AC + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 59FF4F5F26550A9C34113746349E7B782452D8AC + IDESourceControlWCCName + MacPin + + + + diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/xcuserdata/joey.xcuserdatad/UserInterfaceState.xcuserstate b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/project.xcworkspace/xcuserdata/joey.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..9e27fd9cb6560b0814210592478762d2b47c4bdf GIT binary patch literal 13196 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 + + + + + + + + diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcschemes/AddressBookHangoutsPlugin.xcscheme b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcschemes/AddressBookHangoutsPlugin.xcscheme new file mode 100644 index 0000000..6bdaae2 --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcschemes/AddressBookHangoutsPlugin.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcschemes/xcschememanagement.plist b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..83bfd6d --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.xcodeproj/xcuserdata/joey.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + AddressBookHangoutsPlugin.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + D4DCB8811A9E5D25004D502E + + primary + + + + + diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.h b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.h new file mode 100644 index 0000000..939f96c --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.h @@ -0,0 +1,31 @@ +// +// AddressBookHangoutsPlugin.h +// AddressBookHangoutsPlugin +// +// Created by Joey Korkames on 2/25/15. +// Copyright (c) 2015 Joey Korkames. All rights reserved. +// + +#import +#import "AddressBookHangoutsPlugin.h" + +@interface AddressBookHangoutsPlugin : NSObject + +// Returns the property this action is for. +- (NSString *)actionProperty; + +// Returns the title for this action. The current person is passed in as person. +// If the actionProperty is a multiValue type, identifier will contain the identifier +// of the item the user rolled over. If the actionProperty is not a multiValue type +// identifier will be nil. +- (NSString *)titleForPerson:(ABPerson *)person identifier:(NSString *)identifier; + +// This method is called when the user selects your action. As above, this method +// is passed information about the data item rolled over. +- (void)performActionForPerson:(ABPerson *)person identifier:(NSString *)identifier; + +// Optional. Your action will always be enabled in the absence of this method. As +// above, this method is passed information about the data item rolled over. +- (BOOL)shouldEnableActionForPerson:(ABPerson *)person identifier:(NSString *)identifier; + +@end diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.m b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.m new file mode 100644 index 0000000..e470d3f --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin.m @@ -0,0 +1,43 @@ +// +// AddressBookHangoutsPlugin.m +// AddressBookHangoutsPlugin +// +// Created by Joey Korkames on 2/25/15. +// Copyright (c) 2015 Joey Korkames. All rights reserved. +// + +#import "AddressBookHangoutsPlugin.h" + +@implementation AddressBookHangoutsPlugin + +// This action works with phone numbers. +- (NSString *)actionProperty +{ + return kABPhoneProperty; +} + +- (NSString *)titleForPerson:(ABPerson *)person identifier:(NSString *)identifier +{ + ABMultiValue *values = [person valueForProperty:[self actionProperty]]; + NSString *value = [values valueForIdentifier:identifier]; + + return [NSString stringWithFormat:@"Hangout with %@", value]; +} + +- (void)performActionForPerson:(ABPerson *)person identifier:(NSString *)identifier +{ + ABMultiValue *values = [person valueForProperty:[self actionProperty]]; + NSString *phonenumber = [values valueForIdentifier:identifier]; + NSURL *hangurl = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"hangouts:%@", phonenumber]]; + + [[NSWorkspace sharedWorkspace] openURL:hangurl]; +} + +// Optional. Your action will always be enabled in the absence of this method. As +// above, this method is passed information about the data item rolled over. +- (BOOL)shouldEnableActionForPerson:(ABPerson *)person identifier:(NSString *)identifier +{ + return YES; +} + +@end diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/Info.plist b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/Info.plist new file mode 100644 index 0000000..1ff8f8d --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/AddressBookHangoutsPlugin/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.github.kfix.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2015 Joey Korkames. All rights reserved. + NSPrincipalClass + AddressBookHangoutsPlugin + + diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/Info.plist b/sites/Hangouts/extras/AddressBookHangoutsPlugin/Info.plist new file mode 100644 index 0000000..948b12c --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/Info.plist @@ -0,0 +1,44 @@ + + + + + BuildMachineOSBuild + 14C109 + CFBundleDevelopmentRegion + en + CFBundleExecutable + AddressBookHangoutsPlugin + CFBundleIdentifier + com.github.kfix.AddressBookHangoutsPlugin + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + AddressBookHangoutsPlugin + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 6A2008a + DTPlatformVersion + GM + DTSDKBuild + 14A382 + DTSDKName + macosx10.10 + DTXcode + 0611 + DTXcodeBuild + 6A2008a + NSHumanReadableCopyright + Copyright © 2015 Joey Korkames. All rights reserved. + NSPrincipalClass + AddressBookHangoutsPlugin + + diff --git a/sites/Hangouts/extras/AddressBookHangoutsPlugin/install.sh b/sites/Hangouts/extras/AddressBookHangoutsPlugin/install.sh new file mode 100755 index 0000000..42aebd2 --- /dev/null +++ b/sites/Hangouts/extras/AddressBookHangoutsPlugin/install.sh @@ -0,0 +1,5 @@ +#!/bin/sh -x +cd $(dirname $0) +bundle=build/Release/AddressBookHangoutsPlugin.bundle +[ -d $bundle ] || xcodebuild +cp -R $bundle ~/Library/Address\ Book\ Plug-Ins/ diff --git a/sites/Hangouts/G+ Hangout via Phone.workflow/Contents/Info.plist b/sites/Hangouts/extras/G+ Hangout via Phone.workflow/Contents/Info.plist similarity index 100% rename from sites/Hangouts/G+ Hangout via Phone.workflow/Contents/Info.plist rename to sites/Hangouts/extras/G+ Hangout via Phone.workflow/Contents/Info.plist diff --git a/sites/Hangouts/G+ Hangout via Phone.workflow/Contents/QuickLook/Thumbnail.png b/sites/Hangouts/extras/G+ Hangout via Phone.workflow/Contents/QuickLook/Thumbnail.png similarity index 100% rename from sites/Hangouts/G+ Hangout via Phone.workflow/Contents/QuickLook/Thumbnail.png rename to sites/Hangouts/extras/G+ Hangout via Phone.workflow/Contents/QuickLook/Thumbnail.png diff --git a/sites/Hangouts/G+ Hangout via Phone.workflow/Contents/document.wflow b/sites/Hangouts/extras/G+ Hangout via Phone.workflow/Contents/document.wflow similarity index 100% rename from sites/Hangouts/G+ Hangout via Phone.workflow/Contents/document.wflow rename to sites/Hangouts/extras/G+ Hangout via Phone.workflow/Contents/document.wflow