├── Helium ├── Helium │ ├── Sparkle.framework │ │ ├── Versions │ │ │ ├── Current │ │ │ └── A │ │ │ │ ├── Resources │ │ │ │ ├── fr_CA.lproj │ │ │ │ ├── pt.lproj │ │ │ │ ├── Autoupdate.app │ │ │ │ │ └── Contents │ │ │ │ │ │ ├── PkgInfo │ │ │ │ │ │ ├── MacOS │ │ │ │ │ │ └── Autoupdate │ │ │ │ │ │ ├── Resources │ │ │ │ │ │ ├── AppIcon.icns │ │ │ │ │ │ ├── SUStatus.nib │ │ │ │ │ │ ├── ar.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── cs.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── da.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── de.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── el.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── en.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── es.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── fr.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── is.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── it.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ja.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ko.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── nb.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── nl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ro.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── ru.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sk.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sl.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── sv.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── th.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── tr.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── uk.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pt_BR.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── pt_PT.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ ├── zh_CN.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ └── zh_TW.lproj │ │ │ │ │ │ │ └── Sparkle.strings │ │ │ │ │ │ └── Info.plist │ │ │ │ ├── SUStatus.nib │ │ │ │ ├── ar.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── cs.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── da.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── de.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── el.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── en.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── es.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── fr.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── is.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── it.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── ja.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── ko.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── nb.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── nl.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── pl.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── ro.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── ru.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── sk.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── sl.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── sv.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── th.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── tr.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── uk.lproj │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── pt_BR.lproj │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── pt_PT.lproj │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── zh_CN.lproj │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── zh_TW.lproj │ │ │ │ │ ├── SUUpdateAlert.nib │ │ │ │ │ ├── Sparkle.strings │ │ │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ │ └── SUUpdatePermissionPrompt.nib │ │ │ │ ├── Info.plist │ │ │ │ └── SUModelTranslation.plist │ │ │ │ ├── Sparkle │ │ │ │ ├── Modules │ │ │ │ └── module.modulemap │ │ │ │ └── Headers │ │ │ │ ├── SUExport.h │ │ │ │ ├── SUVersionDisplayProtocol.h │ │ │ │ ├── Sparkle.h │ │ │ │ ├── SUVersionComparisonProtocol.h │ │ │ │ ├── SUAppcast.h │ │ │ │ ├── SUStandardVersionComparator.h │ │ │ │ ├── SUErrors.h │ │ │ │ ├── SUAppcastItem.h │ │ │ │ └── SUUpdater.h │ │ ├── Headers │ │ ├── Modules │ │ ├── Sparkle │ │ └── Resources │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── icon_1024.png │ │ │ ├── icon_128.png │ │ │ ├── icon_16.png │ │ │ ├── icon_256.png │ │ │ ├── icon_32.png │ │ │ ├── icon_512.png │ │ │ ├── icon_64.png │ │ │ └── Contents.json │ ├── Helium-Bridging-Header.h │ ├── WKWebViewPrivate.h │ ├── HeliumPanel.swift │ ├── StringHelpers.swift │ ├── UserSettings.swift │ ├── dsa_pub.pem │ ├── Info.plist │ ├── AppDelegate.swift │ ├── WebViewController.swift │ ├── UrlHelpers.swift │ ├── HeliumPanelController.swift │ └── Base.lproj │ │ └── Main.storyboard ├── HeliumShareExtension │ ├── icon.icns │ ├── Info.plist │ ├── ShareViewController.swift │ └── Base.lproj │ │ └── ShareViewController.xib ├── Helium.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── Helium.xcscheme │ └── project.pbxproj └── HeliumTests │ ├── Info.plist │ └── HeliumTests.swift ├── helium_start.html ├── .gitignore ├── README.md ├── LICENSE ├── .travis.yml └── HeliumUpdatesSparkleFeed.xml /Helium/Helium/Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/fr_CA.lproj: -------------------------------------------------------------------------------- 1 | fr.lproj -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt.lproj: -------------------------------------------------------------------------------- 1 | pt_BR.lproj -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /Helium/HeliumShareExtension/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/HeliumShareExtension/icon.icns -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_1024.png -------------------------------------------------------------------------------- /Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_128.png -------------------------------------------------------------------------------- /Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_16.png -------------------------------------------------------------------------------- /Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_256.png -------------------------------------------------------------------------------- /Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_32.png -------------------------------------------------------------------------------- /Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_512.png -------------------------------------------------------------------------------- /Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Images.xcassets/AppIcon.appiconset/icon_64.png -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Sparkle { 2 | umbrella header "Sparkle.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Helium/Helium/Helium-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "WKWebViewPrivate.h" 6 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Helium/Helium.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stek29/Helium/HEAD/Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Helium/Helium/WKWebViewPrivate.h: -------------------------------------------------------------------------------- 1 | // 2 | // Test.h 3 | // Helium 4 | // 5 | // Created by Jaden Geller on 4/13/15. 6 | // Copyright (c) 2015 Jaden Geller. All rights reserved. 7 | // 8 | 9 | @import WebKit; 10 | 11 | @interface WKWebView (Privates) 12 | 13 | @property (copy, setter=_setCustomUserAgent:) NSString *_customUserAgent; 14 | 15 | @property (nonatomic, readonly) NSString *_userAgent; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/SUExport.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUExport.h 3 | // Sparkle 4 | // 5 | // Created by Jake Petroules on 2014-08-23. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUEXPORT_H 10 | #define SUEXPORT_H 11 | 12 | #ifdef BUILDING_SPARKLE 13 | #define SU_EXPORT __attribute__((visibility("default"))) 14 | #else 15 | #define SU_EXPORT 16 | #endif 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /helium_start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 |
Navigate to a webpage using the Location menu in the menubar. 14 |

15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | #Pods/ 27 | 28 | .DS_Store 29 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionDisplayProtocol.h 3 | // EyeTV 4 | // 5 | // Created by Uli Kusterer on 08.12.09. 6 | // Copyright 2009 Elgato Systems GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SUExport.h" 11 | 12 | /*! 13 | Applies special display formatting to version numbers. 14 | */ 15 | @protocol SUVersionDisplay 16 | 17 | /*! 18 | Formats two version strings. 19 | 20 | Both versions are provided so that important distinguishing information 21 | can be displayed while also leaving out unnecessary/confusing parts. 22 | */ 23 | - (void)formatVersion:(NSString **)inOutVersionA andVersion:(NSString **)inOutVersionB; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/Sparkle.h: -------------------------------------------------------------------------------- 1 | // 2 | // Sparkle.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SPARKLE_H 10 | #define SPARKLE_H 11 | 12 | // This list should include the shared headers. It doesn't matter if some of them aren't shared (unless 13 | // there are name-space collisions) so we can list all of them to start with: 14 | 15 | #import 16 | #import 17 | #import 18 | #import 19 | #import 20 | #import 21 | #import 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /Helium/HeliumTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionComparisonProtocol.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUVERSIONCOMPARISONPROTOCOL_H 10 | #define SUVERSIONCOMPARISONPROTOCOL_H 11 | 12 | #import 13 | #import "SUExport.h" 14 | 15 | /*! 16 | Provides version comparison facilities for Sparkle. 17 | */ 18 | @protocol SUVersionComparison 19 | 20 | /*! 21 | An abstract method to compare two version strings. 22 | 23 | Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, 24 | and NSOrderedSame if they are equivalent. 25 | */ 26 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! 27 | 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/SUAppcast.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcast.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCAST_H 10 | #define SUAPPCAST_H 11 | 12 | #import 13 | #import "SUExport.h" 14 | 15 | @protocol SUAppcastDelegate; 16 | 17 | @class SUAppcastItem; 18 | SU_EXPORT @interface SUAppcast : NSObject 19 | 20 | @property (weak) id delegate; 21 | @property (copy) NSString *userAgentString; 22 | 23 | - (void)fetchAppcastFromURL:(NSURL *)url; 24 | 25 | @property (readonly, copy) NSArray *items; 26 | @end 27 | 28 | @protocol SUAppcastDelegate 29 | - (void)appcastDidFinishLoading:(SUAppcast *)appcast; 30 | - (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; 31 | @end 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Helium 2 | [![Build Status](https://travis-ci.org/stek29/Helium.svg?branch=master)](https://travis-ci.org/stek29/Helium) 3 | 4 | Helium is a floating browser window that allows you to watch media, browse the 5 | web and do much more while you stay productive. Your content will never fall 6 | behind your other windows even as you switch tasks. Helium supports a 7 | customizable translucency mode that allows you to simultaneously see your 8 | content and your work, without intercepting mouse clicks when it's translucent. 9 | You have the ability to click, drag, scroll behind your floating content. 10 | 11 | ## Getting Started 12 | 13 | Head over to http://heliumfloats.com and install the latest version of Helium. 14 | If you don't already allow apps from unidentified developers, you'll need to 15 | right-click and choose "Open" the first time you use the app (instead of 16 | opening the app with a single click). 17 | 18 | http://heliumfloats.com 19 | 20 | ![Screenshot](http://heliumfloats.com/screenshot.png) 21 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUStandardVersionComparator.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUSTANDARDVERSIONCOMPARATOR_H 10 | #define SUSTANDARDVERSIONCOMPARATOR_H 11 | 12 | #import "SUExport.h" 13 | #import "SUVersionComparisonProtocol.h" 14 | 15 | /*! 16 | Sparkle's default version comparator. 17 | 18 | This comparator is adapted from MacPAD, by Kevin Ballard. 19 | It's "dumb" in that it does essentially string comparison, 20 | in components split by character type. 21 | */ 22 | SU_EXPORT @interface SUStandardVersionComparator : NSObject 23 | 24 | /*! 25 | Returns a singleton instance of the comparator. 26 | */ 27 | + (SUStandardVersionComparator *)defaultComparator; 28 | 29 | /*! 30 | Compares version strings through textual analysis. 31 | 32 | See the implementation for more details. 33 | */ 34 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; 35 | @end 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Jaden Geller 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/SUErrors.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUErrors.h 3 | // Sparkle 4 | // 5 | // Created by C.W. Betts on 10/13/14. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUERRORS_H 10 | #define SUERRORS_H 11 | 12 | #import 13 | #import "SUExport.h" 14 | 15 | /** 16 | * Error domain used by Sparkle 17 | */ 18 | SU_EXPORT extern NSString *const SUSparkleErrorDomain; 19 | 20 | typedef NS_ENUM(OSStatus, SUError) { 21 | // Appcast phase errors. 22 | SUAppcastParseError = 1000, 23 | SUNoUpdateError = 1001, 24 | SUAppcastError = 1002, 25 | SURunningFromDiskImageError = 1003, 26 | 27 | // Downlaod phase errors. 28 | SUTemporaryDirectoryError = 2000, 29 | 30 | // Extraction phase errors. 31 | SUUnarchivingError = 3000, 32 | SUSignatureError = 3001, 33 | 34 | // Installation phase errors. 35 | SUFileCopyFailure = 4000, 36 | SUAuthenticationFailure = 4001, 37 | SUMissingUpdateError = 4002, 38 | SUMissingInstallerToolError = 4003, 39 | SURelaunchError = 4004, 40 | SUInstallationError = 4005, 41 | SUDowngradeError = 4006 42 | }; 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode8.3 3 | xcode_project: Helium/Helium.xcodeproj 4 | xcode_scheme: Helium 5 | script: 6 | - set -o pipefail 7 | - xcodebuild -project $TRAVIS_XCODE_PROJECT -scheme $TRAVIS_XCODE_SCHEME -configuration 8 | Release build test | xcpretty 9 | 10 | before_deploy: 11 | - OUTPUTDIR="$PWD/Helium/build/Release" 12 | - cd $OUTPUTDIR 13 | - ditto -c -k --sequesterRsrc --keepParent "Helium.app" "Helium-$TRAVIS_TAG.zip" 14 | deploy: 15 | provider: releases 16 | api_key: 17 | secure: AhCUhASzVApSHhl2TLPggIDGEgdRpdU1YVlrnYCn9CZT2ZrfAommRU4WFOWldCEpoW+AJnXfGHIVUH7Mxp7D8VWT8Y03glezH5SjUMjFi7JYmuih6nLdVgEwXAKa3aSFE/pnJE1E6uOrW+WXcmCukfJg1KWoCbw+0bUVSswkLgLwVGZNC71/Dv2DEvBfCCL9d2t/nddMndaBu1PbWIWZ8h7FnImgcRg7RE/UntivcRI3zKPEfSzO17wObS+BgjWkFHjk/4HxBNdBeP8z3zGge8gj8rmvl6MG1Nl2kqRc3sN3kbAnarhCaHT+j7ilMAUds36wDI1xCWeXbhbkr4qjMg09XH3RKTs1OJGGhEdTfQkL+4ilVbCGlJHPk2/XEi8Dh997unmbdFHfJoXXEFExS027TJAD6PbR4QpanDKnw084mwbv71oO5LlkYAXeoiVWXr+vj1PxfYUaNoDcGgnmw3/Y91TXQGgbeICi0y8/h/pxoIUzPJp2oWFvaXG+6LiKSaaDXwhjs6jWI63vKixvTRvincVXQxAsx9igTcm7tZ4E4XBSk2p4oUt3oTBC+o9TwvTD1Wodh075P3kPcE6RGp4WaU7/ELoLblYE1B6obyOTe0TnGHpDQpATDupAby383RGQJwLDyesil7xelNydb9MBU2SyAz8ZUuvzzzYqpG0= 18 | file: $OUTPUTDIR/Helium-$TRAVIS_TAG.zip 19 | skip_cleanup: true 20 | on: 21 | repo: stek29/Helium 22 | tags: true 23 | -------------------------------------------------------------------------------- /Helium/Helium/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /Helium/Helium/HeliumPanel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Panel.swift 3 | // Helium 4 | // 5 | // Created by shdwprince on 8/10/16. 6 | // Copyright © 2016 Jaden Geller. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Cocoa 11 | 12 | // Sugar 13 | extension NSPoint { 14 | static func - (left: NSPoint, right: NSPoint) -> NSPoint { 15 | return NSPoint(x: left.x - right.x, y: left.y - right.y) 16 | } 17 | } 18 | 19 | class HeliumPanel: NSPanel { 20 | override var canBecomeKey: Bool { 21 | return true 22 | } 23 | 24 | override var canBecomeMain: Bool { 25 | return true 26 | } 27 | 28 | // nil when not dragging 29 | var previousMouseLocation: NSPoint? 30 | 31 | override func sendEvent(_ event: NSEvent) { 32 | switch event.type { 33 | case .flagsChanged: 34 | // If modifier key was released, dragging should be disabled 35 | if !event.modifierFlags.contains(.command) { 36 | previousMouseLocation = nil 37 | } 38 | case .leftMouseDown: 39 | if event.modifierFlags.contains(.command) { 40 | previousMouseLocation = event.locationInWindow 41 | } 42 | case .leftMouseUp: 43 | previousMouseLocation = nil 44 | case .leftMouseDragged: 45 | if let previousMouseLocation = previousMouseLocation { 46 | let delta = previousMouseLocation - event.locationInWindow 47 | let newOrigin = self.frame.origin - delta 48 | self.setFrameOrigin(newOrigin) 49 | return // don't pass event to super 50 | } 51 | default: 52 | break 53 | } 54 | 55 | super.sendEvent(event) 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcastItem.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCASTITEM_H 10 | #define SUAPPCASTITEM_H 11 | 12 | #include "SUExport.h" 13 | 14 | SU_EXPORT @interface SUAppcastItem : NSObject 15 | @property (copy, readonly) NSString *title; 16 | @property (copy, readonly) NSDate *date; 17 | @property (copy, readonly) NSString *itemDescription; 18 | @property (strong, readonly) NSURL *releaseNotesURL; 19 | @property (copy, readonly) NSString *DSASignature; 20 | @property (copy, readonly) NSString *minimumSystemVersion; 21 | @property (copy, readonly) NSString *maximumSystemVersion; 22 | @property (strong, readonly) NSURL *fileURL; 23 | @property (copy, readonly) NSString *versionString; 24 | @property (copy, readonly) NSString *displayVersionString; 25 | @property (copy, readonly) NSDictionary *deltaUpdates; 26 | @property (strong, readonly) NSURL *infoURL; 27 | 28 | // Initializes with data from a dictionary provided by the RSS class. 29 | - (instancetype)initWithDictionary:(NSDictionary *)dict; 30 | - (instancetype)initWithDictionary:(NSDictionary *)dict failureReason:(NSString **)error; 31 | 32 | @property (getter=isDeltaUpdate, readonly) BOOL deltaUpdate; 33 | @property (getter=isCriticalUpdate, readonly) BOOL criticalUpdate; 34 | 35 | // Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. 36 | @property (readonly, copy) NSDictionary *propertiesDictionary; 37 | 38 | - (NSURL *)infoURL; 39 | 40 | @end 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 14C106a 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Sparkle 11 | CFBundleIdentifier 12 | org.andymatuschak.Sparkle 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Sparkle 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 1.9.0 git-ce22598 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.9.0 25 | DTCompiler 26 | com.apple.compilers.llvm.clang.1_0 27 | DTPlatformBuild 28 | 6A2008a 29 | DTPlatformVersion 30 | GM 31 | DTSDKBuild 32 | 14A382 33 | DTSDKName 34 | macosx10.10 35 | DTXcode 36 | 0611 37 | DTXcodeBuild 38 | 6A2008a 39 | SUAppendVersionNumber 40 | 1 41 | SUEnableAutomatedDowngrades 42 | 0 43 | SUNormalizeInstalledApplicationName 44 | 0 45 | SURelaunchToolName 46 | Autoupdate 47 | 48 | 49 | -------------------------------------------------------------------------------- /Helium/HeliumShareExtension/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | Open in Helium 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIconFile 12 | icon 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | $(PRODUCT_NAME) 19 | CFBundlePackageType 20 | XPC! 21 | CFBundleShortVersionString 22 | 1.9 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 19 27 | LSMinimumSystemVersion 28 | $(MACOSX_DEPLOYMENT_TARGET) 29 | NSExtension 30 | 31 | NSExtensionAttributes 32 | 33 | NSExtensionActivationRule 34 | 35 | NSExtensionActivationSupportsWebURLWithMaxCount 36 | 1 37 | 38 | 39 | NSExtensionPointIdentifier 40 | com.apple.share-services 41 | NSExtensionPrincipalClass 42 | $(PRODUCT_MODULE_NAME).ShareViewController 43 | 44 | NSHumanReadableCopyright 45 | Copyright © 2015 Jaden Geller. All rights reserved. 46 | 47 | 48 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 14C106a 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | Autoupdate 11 | CFBundleIconFile 12 | AppIcon 13 | CFBundleIdentifier 14 | org.sparkle-project.Sparkle.Autoupdate 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.9.0 git-ce22598 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.9.0 25 | DTCompiler 26 | com.apple.compilers.llvm.clang.1_0 27 | DTPlatformBuild 28 | 6A2008a 29 | DTPlatformVersion 30 | GM 31 | DTSDKBuild 32 | 14A382 33 | DTSDKName 34 | macosx10.10 35 | DTXcode 36 | 0611 37 | DTXcodeBuild 38 | 6A2008a 39 | LSBackgroundOnly 40 | 1 41 | LSMinimumSystemVersion 42 | 10.7 43 | LSUIElement 44 | 1 45 | NSMainNibFile 46 | MainMenu 47 | NSPrincipalClass 48 | NSApplication 49 | 50 | 51 | -------------------------------------------------------------------------------- /Helium/Helium/StringHelpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringHelpers.swift 3 | // Helium 4 | // 5 | // Created by Samuel Beek on 16/03/16. 6 | // Copyright © 2016 Jaden Geller. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | func replacePrefix(_ prefix: String, replacement: String) -> String { 13 | if hasPrefix(prefix) { 14 | return replacement + substring(from: prefix.endIndex) 15 | } else { 16 | return self 17 | } 18 | } 19 | 20 | func indexOf(_ target: String) -> Int { 21 | let range = self.range(of: target) 22 | if let range = range { 23 | return self.characters.distance(from: self.startIndex, to: range.lowerBound) 24 | } else { 25 | return -1 26 | } 27 | } 28 | } 29 | 30 | // From http://nshipster.com/nsregularexpression/ 31 | extension String { 32 | /// An `NSRange` that represents the full range of the string. 33 | var nsrange: NSRange { 34 | return NSRange(location: 0, length: utf16.count) 35 | } 36 | 37 | /// Returns a substring with the given `NSRange`, 38 | /// or `nil` if the range can't be converted. 39 | func substring(with nsrange: NSRange) -> String? { 40 | guard let range = nsrange.toRange() 41 | else { return nil } 42 | let start = UTF16Index(range.lowerBound) 43 | let end = UTF16Index(range.upperBound) 44 | return String(utf16[start.. Range? { 50 | guard let range = nsrange.toRange() else { return nil } 51 | let utf16Start = UTF16Index(range.lowerBound) 52 | let utf16End = UTF16Index(range.upperBound) 53 | 54 | guard let start = Index(utf16Start, within: self), 55 | let end = Index(utf16End, within: self) 56 | else { return nil } 57 | 58 | return start.. { 13 | private let key: String 14 | private let defaultValue: T 15 | 16 | init(_ userDefaultsKey: String, defaultValue: T) { 17 | self.key = userDefaultsKey 18 | self.defaultValue = defaultValue 19 | } 20 | 21 | var value: T { 22 | get { 23 | return self.get() 24 | } 25 | set (value) { 26 | self.set(value) 27 | } 28 | } 29 | 30 | private func get() -> T { 31 | if let value = UserDefaults.standard.object(forKey: self.key) as? T { 32 | return value 33 | } else { 34 | // Sets default value if failed 35 | set(self.defaultValue) 36 | return self.defaultValue 37 | } 38 | } 39 | 40 | private func set(_ value: T) { 41 | UserDefaults.standard.set(value as Any, forKey: self.key) 42 | } 43 | } 44 | 45 | static let disabledMagicURLs = Setting("disabledMagicURLs", defaultValue: false) 46 | 47 | static let disabledFullScreenFloat = Setting("disabledFullScreenFloat", defaultValue: false) 48 | 49 | static let opacityPercentage = Setting("opacityPercentage", defaultValue: 60) 50 | // See values in HeliumPanelController.TranslucencyPreference 51 | static let translucencyPreference = Setting("rawTranslucencyPreference", defaultValue: 0) 52 | 53 | static let homePageURL = Setting( 54 | "homePageURL", 55 | defaultValue: "https://cdn.rawgit.com/JadenGeller/Helium/master/helium_start.html" 56 | ) 57 | 58 | static let userAgent = Setting( 59 | "userAgent", 60 | defaultValue: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30" 61 | // swiftlint:disable:previous line_length 62 | ) 63 | } 64 | -------------------------------------------------------------------------------- /Helium/HeliumTests/HeliumTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HeliumTests.swift 3 | // HeliumTests 4 | // 5 | // Created by Jaden Geller on 4/9/15. 6 | // Copyright (c) 2015 Jaden Geller. All rights reserved. 7 | // 8 | // swiftlint:disable line_length 9 | 10 | import Cocoa 11 | import XCTest 12 | 13 | class MagicTests: XCTestCase { 14 | static func t(_ stringURL: String) -> String? { 15 | if let afterUrl = UrlHelpers.doMagic(stringURL: stringURL) { 16 | return afterUrl.absoluteString 17 | } else { 18 | return nil 19 | } 20 | } 21 | 22 | func testYoutube() { 23 | XCTAssertEqual(MagicTests.t("https://youtu.be"), nil) 24 | XCTAssertEqual(MagicTests.t("https://youtu.be/5z887j6gBr4"), "https://youtube.com/embed/5z887j6gBr4") 25 | XCTAssertEqual(MagicTests.t("youtu.be/xWcldHxHFpo&t=3h6m9s"), "https://youtube.com/embed/xWcldHxHFpo?start=11169") 26 | XCTAssertEqual(MagicTests.t("https://www.youtube.com/watch?v=q6EoRBvdVPQ?t=4"), "https://youtube.com/embed/q6EoRBvdVPQ?start=4") 27 | } 28 | 29 | func testTwitch() { 30 | XCTAssertEqual(MagicTests.t("https://twitch.tv/"), nil) 31 | XCTAssertEqual(MagicTests.t("https://twitch.tv/p/about"), nil) 32 | XCTAssertEqual(MagicTests.t("http://twitch.tv/playbattlegrounds"), "https://player.twitch.tv?html5&channel=playbattlegrounds") 33 | XCTAssertEqual(MagicTests.t("https://www.twitch.tv/videos/140064610"), "https://player.twitch.tv?html5&video=v140064610") 34 | } 35 | 36 | func testVimeo() { 37 | XCTAssertEqual(MagicTests.t("vimeo.com"), nil) 38 | XCTAssertEqual(MagicTests.t("https://vimeo.com/armanddijcks"), nil) 39 | XCTAssertEqual(MagicTests.t("vimeo.com/215405296"), "https://player.vimeo.com/video/215405296") 40 | } 41 | } 42 | 43 | class HelpersTest: XCTestCase { 44 | func testValidate() { 45 | XCTAssertEqual(UrlHelpers.isValid(urlString: "njknfs"), false) 46 | XCTAssertEqual(UrlHelpers.isValid(urlString: ""), false) 47 | XCTAssertEqual(UrlHelpers.isValid(urlString: "http://"), false) 48 | XCTAssertEqual(UrlHelpers.isValid(urlString: "http://example.com"), true) 49 | XCTAssertEqual(UrlHelpers.isValid(urlString: "https://note.it/?q=Spaces NOT escaped"), false) 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Helium/Helium/dsa_pub.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIGOzCCBC0GByqGSM44BAEwggQgAoICAQDB4QnrUAxQ8mnsiUM9ZoNP8CkLvBEK 3 | XtabEFABAScVQbm3+eYb7Pt4PLjCJTgVkbcFWE0/wf4cAT54HvjIalD2DGMXdW5O 4 | KGD+q0W+WL/wunKMi0mSPX6tMbxd3oPEXqFL8uXtJ0bifizK2fJbK6WvnBlI35oE 5 | HwViThGZ1Tj5zJDcuOno3xOoLeV76CZUY53dEUdEpr0qqH1cwjZEpmRsG4rhkV92 6 | lvD/aklWZ6FiCdZbcc38LJkxp953f/Md776EkwYy1bKkzUd4zSCWBFjUuphCMh64 7 | WKDl5qzUpQQRRU4XyHMEokXoMHTbjRdxVdqHFz/r3TpK+4IjTBVo/ZsdwCVer0ZG 8 | fF3HqBKZYSeDdMIKALnoFz0cPOjnZfF5z2z+9S6VUteJz6Mb/3l+vhCdIVFlPNra 9 | FGAUNCXQPOmUChWSEHBpw+iBnGLZrjElQdlQpdAbYbLfWF+yySyju/grX+Z5QmF/ 10 | RA0MsT+tRf/F9Ozr05sKCeRzMgi3Cdj6rvsT1xLAbvjQp+GFPcqgTMhTR0zAB8MU 11 | CJXX+HvX9dh8ZlCp3/SZyUOf7FIG2FzJp66fD8HXE3unEqr0hYGZkMgULN4dey6w 12 | 3kFgogJuFlbj4QlgN2fzMuXWrAf0eYkzX1m+OCeSuMCz/M0fYvO8WLMGCrTEpBqH 13 | Crq/3r1D09SIqQIVAMzaW/mEtq2EW8YZaqEjGvrdujiXAoICABdFYqE2HFZpOfT+ 14 | u1nZ56ajwF4SwLNSbLnagfcQa3By8SUJPd0Xyvclrwro49zelkyTpre5gIXnYzb/ 15 | DXwl/AXp4lIUldTyraHnwXIsAB58QQZ3TrqFRyHvWX0ofK0KdmVmdFDN6Ij9hhPi 16 | FhX9DqoWjqWUJEShR+iZhYZRkojWaGH29ROat4zrYntqdUSl1s26om9Tpd6411as 17 | +oPvSss4Hl7FxcZLPn/16hO7oE3LnoiWMt7UNhFfYQiWRnbxNfRiXsg7PPPpXq64 18 | Jh+PrKk3PwjtIwzbfPgYLnehmxBAkwc/k08PnTE8Rcc9bzABXBrBaQBhjnt9eO6n 19 | reUWFZf/y4rpkzTWgDhkCft8h6Q2TkVIRwFv85bjFpFFBYDxe9RmZBdV/9dNAys/ 20 | 0m+cmnvYDSXMyexQRu2LWJUTozvoX8Y3QiSNlfxiuukZkty50BUEgD+TOFU5autJ 21 | yqZkgjD4slhOIsUJW58/H9yUCtJ9smBqBJD622DomgddKObytbg8D9pI9PoLGW+h 22 | EAAclfTalbryspmhfpU8k6t8/kf2y4WqgdYfFtaMEabtpIgl0xAe6FmhaqUoGgFQ 23 | 1J5g5q60LHtXlSyOJTXyVw49V5HoHk8aVbravjtThTCxkIejxNUINVYHu/bqsSH2 24 | Iv2nJudMQhU29qGcD0q0tsyxNxcKA4ICBgACggIBAIHFSTLFdC8hqEFlUhNT9wdX 25 | f20bnNqkFoChJRVF3f/o4J05KwV8jNOpj8wKzveRH5bc4oitKbaPkcKu5EghR/Rf 26 | 77+V0t8bA/z/pT7IgKMj9HDFvJKLACqh9kxbuzwLvNMApcdsqNz/GI9BeQiNPlHh 27 | CSji1RRGPnMvNtBgz6f2pMG3ohjYdFbwjBYFEIW0MjYX3scCqtCi0ve/NGQrqZEM 28 | QKeoI0aG8iGceoQKwNLgeo6OGVgVK24r3Zv6zObRwVRswzXK0XK8RLh3Jcf3697A 29 | BiU1ky9rmg2qDc2mIIi7ILXAAXVNMgZSakdsK/PGLFpB3g11zXZnHPeuRQQH9lHo 30 | hBBLcPdo68OkexSf/t/25A/GuZO3sQRBHhlAw7jw18wqteXHoQnQiFl6K0hAbwAV 31 | hcA2hakoBbumQz5wo/c2decTUqragBbFioPpNLJ64AIQj3dt01c6Zv60/6aawDBA 32 | yFAO0/+DVQBJi6C5sATetZF2XdyOh6O9G4SVsMu1SgYcdQuxbLXXqL+dKnDuoAKT 33 | +7TDgLb6/MB994BmILIi3zK2H0S4dAcmM7L5RRZu7F/CRIh8WGni9WIaGmwO4Xbf 34 | FrGOl3GqLgjtNXjMavZRVB7r+0YuOgmA8XcaPdolpwxs+rPGiou04gnFpTYIqRz/ 35 | 7q7l5x6pHs8g3VGh1i5g 36 | -----END PUBLIC KEY----- 37 | -------------------------------------------------------------------------------- /Helium/Helium/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 2.0.2 21 | CFBundleSignature 22 | ???? 23 | CFBundleURLTypes 24 | 25 | 26 | CFBundleTypeRole 27 | Viewer 28 | CFBundleURLName 29 | helium 30 | CFBundleURLSchemes 31 | 32 | helium 33 | 34 | 35 | 36 | CFBundleVersion 37 | 19 38 | LSApplicationCategoryType 39 | public.app-category.utilities 40 | LSMinimumSystemVersion 41 | $(MACOSX_DEPLOYMENT_TARGET) 42 | NSAppTransportSecurity 43 | 44 | NSAllowsArbitraryLoads 45 | 46 | 47 | NSHumanReadableCopyright 48 | Copyright © 2015 Jaden Geller. All rights reserved. 49 | NSMainStoryboardFile 50 | Main 51 | NSPrincipalClass 52 | NSApplication 53 | SUFeedURL 54 | https://rawgit.com/stek29/Helium/master/HeliumUpdatesSparkleFeed.xml 55 | SUPublicDSAKeyFile 56 | dsa_pub.pem 57 | NSServices 58 | 59 | 60 | NSPortName 61 | Helium 62 | NSRequiredContext 63 | 64 | NSTextContent 65 | URL 66 | 67 | NSSendTypes 68 | 69 | public.utf8-plain-text 70 | 71 | NSMessage 72 | handleURLPboard 73 | NSMenuItem 74 | 75 | default 76 | Open in Helium 77 | 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /Helium/Helium/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Helium 4 | // 5 | // Created by Jaden Geller on 4/9/15. 6 | // Copyright (c) 2015 Jaden Geller. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | @NSApplicationMain 12 | class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate { 13 | 14 | @IBOutlet weak var magicURLMenu: NSMenuItem! 15 | @IBOutlet weak var percentageMenu: NSMenuItem! 16 | @IBOutlet weak var fullScreenFloatMenu: NSMenuItem! 17 | 18 | func applicationWillFinishLaunching(_ notification: Notification) { 19 | NSAppleEventManager.shared().setEventHandler( 20 | self, 21 | andSelector: #selector(AppDelegate.handleURLEvent(_:withReply:)), 22 | forEventClass: AEEventClass(kInternetEventClass), 23 | andEventID: AEEventID(kAEGetURL) 24 | ) 25 | } 26 | 27 | func applicationDidFinishLaunching(_ aNotification: Notification) { 28 | NSApp.servicesProvider = self 29 | 30 | magicURLMenu.state = UserSettings.disabledMagicURLs.value ? NSOffState : NSOnState 31 | 32 | fullScreenFloatMenu.state = UserSettings.disabledFullScreenFloat.value ? NSOffState : NSOnState 33 | 34 | let alpha = UserSettings.opacityPercentage.value 35 | let offset = alpha/10 - 1 36 | for (index, button) in percentageMenu.submenu!.items.enumerated() { 37 | (button).state = (offset == index) ? NSOnState : NSOffState 38 | } 39 | } 40 | 41 | func applicationWillTerminate(_ aNotification: Notification) { 42 | // Insert code here to tear down your application 43 | } 44 | 45 | @IBAction func magicURLRedirectToggled(_ sender: NSMenuItem) { 46 | sender.state = (sender.state == NSOnState) ? NSOffState : NSOnState 47 | UserSettings.disabledMagicURLs.value = (sender.state == NSOffState) 48 | } 49 | 50 | // MARK: - handleURLEvent 51 | // Called when the App opened via URL. 52 | @objc func handleURLEvent(_ event: NSAppleEventDescriptor, withReply reply: NSAppleEventDescriptor) { 53 | 54 | guard let keyDirectObject = event.paramDescriptor(forKeyword: AEKeyword(keyDirectObject)), 55 | let urlString = keyDirectObject.stringValue else { 56 | return print("Can't get URL from event") 57 | } 58 | 59 | // skip 'helium://' 60 | let index = urlString.index(urlString.startIndex, offsetBy: 9) 61 | let url = urlString.substring(from: index) 62 | 63 | NotificationCenter.default.post(name: Notification.Name(rawValue: "HeliumLoadURLString"), object: url) 64 | } 65 | 66 | @objc func handleURLPboard(_ pboard: NSPasteboard, userData: NSString, error: NSErrorPointer) { 67 | if let selection = pboard.string(forType: NSPasteboardTypeString) { 68 | // Notice: string will contain whole selection, not just the urls 69 | // So this may (and will) fail. It should instead find url in whole 70 | // Text somehow 71 | NotificationCenter.default.post(name: Notification.Name(rawValue: "HeliumLoadURLString"), object: selection) 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /Helium/HeliumShareExtension/Base.lproj/ShareViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 31 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /HeliumUpdatesSparkleFeed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Helium Changelog 5 | https://raw.githubusercontent.com/JadenGeller/Helium/master/HeliumUpdatesSparkleFeed.xml 6 | Most recent changes with links to updates. 7 | en 8 | 9 | Version 1.9 10 | 11 | 14 |
  • "Open in Helium" from Safari with the built-in share extension!
  • 15 |
  • Stays on top even as you switch between spaces—even full screen ones! (This can be disabled in preferences.)
  • 16 |
  • Navigation gestures like swipe to go back
  • 17 | 18 | Last update: 19 |
      20 |
    • Support for Netflix HTML5 player! (Bye, Silverlight!)
    • 21 |
    • URL scheme improvements
    • 22 |
    • Gatekeeper-compatible
    • 23 |
    • Other bug fixes and minor features
    • 24 |
    • Translucency preferences: "Always", "Mouse Over", "Mouse Outside" 25 |
    • Updated menu bar interface to make it easier to use 26 |
    27 | ]]> 28 |
    29 | Fri, 30 Oct 2015 19:35:00 -0000 30 | 31 | 37 |
    38 | 39 | Version 1.8 40 | 41 | 44 |
  • Translucency preferences: "Always", "Mouse Over", "Mouse Outside" 45 |
  • Updated menu bar interface to make it easier to use 46 | 47 | Last update: 48 |
      49 |
    • Support for Netflix HTML5 player! (Bye, Silverlight!)
    • 50 |
    • URL scheme improvements
    • 51 |
    • Gatekeeper-compatible
    • 52 |
    • Other bug fixes and minor features
    • 53 |
    54 | ]]> 55 | 56 | Sun, 26 Oct 2015 16:00:00 -0000 57 | 58 | 64 | 65 | 66 | Version 1.7 67 | 68 | 70 |
  • Support for Netflix HTML5 player! (Bye, Silverlight!)
  • 71 |
  • URL scheme improvements
  • 72 |
  • Gatekeeper-compatible
  • 73 |
  • Other bug fixes and minor features
  • 74 | 75 | ]]> 76 |
    77 | Sun, 25 Oct 2015 20:00:00 -0000 78 | 79 | 85 |
    86 |
    87 |
    88 | -------------------------------------------------------------------------------- /Helium/Helium.xcodeproj/xcshareddata/xcschemes/Helium.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 11 | 14 | 15 | 16 | 17 | 18 | 24 | 30 | 31 | 32 | 33 | 34 | 39 | 40 | 42 | 48 | 49 | 50 | 51 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 73 | 75 | 81 | 82 | 83 | 84 | 85 | 86 | 92 | 94 | 100 | 101 | 102 | 103 | 105 | 106 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /Helium/Helium/WebViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Helium 4 | // 5 | // Created by Jaden Geller on 4/9/15. 6 | // Copyright (c) 2015 Jaden Geller. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import WebKit 11 | 12 | class WebViewController: NSViewController, WKNavigationDelegate { 13 | 14 | var trackingTag: NSTrackingRectTag? 15 | 16 | // MARK: View lifecycle 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | 20 | NotificationCenter.default.addObserver( 21 | self, 22 | selector: #selector(WebViewController.loadURL(urlObject:)), 23 | name: NSNotification.Name(rawValue: "HeliumLoadURLString"), 24 | object: nil) 25 | 26 | // Layout webview 27 | view.addSubview(webView) 28 | webView.frame = view.bounds 29 | webView.autoresizingMask = [.viewHeightSizable, .viewWidthSizable] 30 | 31 | // Allow plug-ins such as silverlight 32 | webView.configuration.preferences.plugInsEnabled = true 33 | 34 | // Custom user agent string to mimic Safari -- some sites rely on this 35 | webView._customUserAgent = UserSettings.userAgent.value 36 | 37 | // Setup magic URLs 38 | webView.navigationDelegate = self 39 | 40 | // Allow zooming 41 | webView.allowsMagnification = true 42 | 43 | // Alow back and forth 44 | webView.allowsBackForwardNavigationGestures = true 45 | 46 | // Listen for load progress 47 | webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil) 48 | 49 | clear() 50 | } 51 | 52 | override func viewDidLayout() { 53 | super.viewDidLayout() 54 | 55 | if let tag = trackingTag { 56 | view.removeTrackingRect(tag) 57 | } 58 | 59 | trackingTag = view.addTrackingRect(view.bounds, owner: self, userData: nil, assumeInside: false) 60 | } 61 | 62 | // MARK: Actions 63 | override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool { 64 | switch menuItem.title { 65 | case "Back": 66 | return webView.canGoBack 67 | case "Forward": 68 | return webView.canGoForward 69 | default: 70 | return true 71 | } 72 | } 73 | 74 | @IBAction func backPress(_ sender: AnyObject) { 75 | webView.goBack() 76 | } 77 | 78 | @IBAction func forwardPress(_ sender: AnyObject) { 79 | webView.goForward() 80 | } 81 | 82 | fileprivate func zoomIn() { 83 | webView.magnification += 0.1 84 | } 85 | 86 | fileprivate func zoomOut() { 87 | webView.magnification -= 0.1 88 | } 89 | 90 | fileprivate func resetZoom() { 91 | webView.magnification = 1 92 | } 93 | 94 | @IBAction fileprivate func reloadPress(_ sender: AnyObject) { 95 | requestedReload() 96 | } 97 | 98 | @IBAction fileprivate func clearPress(_ sender: AnyObject) { 99 | clear() 100 | } 101 | 102 | @IBAction fileprivate func resetZoomLevel(_ sender: AnyObject) { 103 | resetZoom() 104 | } 105 | @IBAction fileprivate func zoomIn(_ sender: AnyObject) { 106 | zoomIn() 107 | } 108 | @IBAction fileprivate func zoomOut(_ sender: AnyObject) { 109 | zoomOut() 110 | } 111 | 112 | // MARK: - URL management 113 | internal var currentURL: String? { 114 | return webView.url?.absoluteString 115 | } 116 | 117 | internal func loadURL(text: String) { 118 | let text = UrlHelpers.ensureScheme(text) 119 | if let url = URL(string: text) { 120 | loadURL(url: url) 121 | } 122 | } 123 | 124 | internal func loadURL(url: URL) { 125 | webView.load(URLRequest(url: url)) 126 | } 127 | 128 | func loadURL(urlObject: Notification) { 129 | if let string = urlObject.object as? String { 130 | loadURL(text: string) 131 | } 132 | } 133 | 134 | fileprivate func requestedReload() { 135 | webView.reload() 136 | } 137 | 138 | // MARK: Webview functions 139 | /// Reload to home page (or default if no URL stored in UserDefaults) 140 | func clear() { 141 | loadURL(text: UserSettings.homePageURL.value) 142 | } 143 | 144 | var webView = WKWebView() 145 | 146 | // MARK: - Redirect magic urls 147 | func webView(_ webView: WKWebView, 148 | decidePolicyFor navigationAction: WKNavigationAction, 149 | decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { 150 | guard !UserSettings.disabledMagicURLs.value, 151 | let url = navigationAction.request.url else { 152 | decisionHandler(WKNavigationActionPolicy.allow) 153 | return 154 | } 155 | 156 | if let newUrl = UrlHelpers.doMagic(url) { 157 | decisionHandler(WKNavigationActionPolicy.cancel) 158 | loadURL(url: newUrl) 159 | } else { 160 | decisionHandler(WKNavigationActionPolicy.allow) 161 | } 162 | } 163 | 164 | func webView(_ webView: WKWebView, didFinish navigation: WKNavigation) { 165 | if let pageTitle = webView.title { 166 | var title = pageTitle 167 | if title.isEmpty { title = "Helium" } 168 | let notif = Notification(name: Notification.Name(rawValue: "HeliumUpdateTitle"), object: title) 169 | NotificationCenter.default.post(notif) 170 | } 171 | } 172 | 173 | override func observeValue( 174 | forKeyPath keyPath: String?, 175 | of object: Any?, 176 | change: [NSKeyValueChangeKey : Any]?, 177 | context: UnsafeMutableRawPointer?) { 178 | 179 | if keyPath == "estimatedProgress", 180 | let view = object as? WKWebView, view == webView { 181 | if let progress = change?[NSKeyValueChangeKey(rawValue: "new")] as? Float { 182 | let percent = progress * 100 183 | var title = NSString(format: "Loading... %.2f%%", percent) 184 | if percent == 100 { 185 | title = "Helium" 186 | } 187 | 188 | let notif = Notification(name: Notification.Name(rawValue: "HeliumUpdateTitle"), object: title) 189 | NotificationCenter.default.post(notif) 190 | } 191 | } 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /Helium/Helium/UrlHelpers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UrlHelpers.swift 3 | // Helium 4 | // 5 | // Created by Viktor Oreshkin on 9.5.17. 6 | // Copyright © 2017 Jaden Geller. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct UrlHelpers { 12 | /// Prepends `http://` if scheme isn't `https?://` 13 | static func ensureScheme(_ urlString: String) -> String { 14 | if !(urlString.lowercased().hasPrefix("http://") || urlString.lowercased().hasPrefix("https://")) { 15 | return "http://" + urlString 16 | } else { 17 | return urlString 18 | } 19 | } 20 | 21 | // https://mathiasbynens.be/demo/url-regex 22 | static func isValid(urlString: String) -> Bool { 23 | // swiftlint:disable:next force_try 24 | let regex = try! NSRegularExpression(pattern: "^(https?://)[^\\s/$.?#].[^\\s]*$") 25 | return (regex.firstMatch(in: urlString, range: urlString.nsrange) != nil) 26 | } 27 | } 28 | 29 | // MARK: - Magic Handlers 30 | extension UrlHelpers { 31 | static func doMagic(_ url: URL) -> URL? { 32 | return UrlHelpers.Magic(url).newUrl 33 | } 34 | 35 | static func doMagic(stringURL: String) -> URL? { 36 | let stringURL = UrlHelpers.ensureScheme(stringURL) 37 | if let url = URL(string: stringURL) { 38 | return UrlHelpers.doMagic(url) 39 | } else { 40 | return nil 41 | } 42 | } 43 | 44 | class Magic { 45 | fileprivate var modified: URLComponents 46 | fileprivate var converted: Bool = false 47 | public var newUrl: URL? { 48 | return self.converted ? self.modified.url : nil 49 | } 50 | 51 | fileprivate let url: URL 52 | fileprivate let urlString: String 53 | 54 | init(_ url: URL) { 55 | self.url = url 56 | self.urlString = url.absoluteString 57 | 58 | self.modified = URLComponents() 59 | self.modified.scheme = url.scheme 60 | 61 | // Paranoind check 62 | if url.host != nil { 63 | self.converted = self.hYouTube() || 64 | self.hTwitch() || 65 | self.hVimeo() || 66 | self.hYouku() || 67 | self.hDailyMotion() 68 | } 69 | } 70 | } 71 | } 72 | 73 | // MARK: Generic Handler Factory - just replaces prefix 74 | extension UrlHelpers.Magic { 75 | fileprivate static func genericHandlerFactory(prefix: String, replacement: String) -> ((UrlHelpers.Magic) -> Bool) { 76 | return { (instance: UrlHelpers.Magic) in 77 | if instance.urlString.hasPrefix(prefix) { 78 | let urlStringModified = instance.urlString.replacePrefix(prefix, replacement: replacement) 79 | if let newComponents = URLComponents(string: urlStringModified) { 80 | instance.modified = newComponents 81 | return true 82 | } 83 | } 84 | return false 85 | } 86 | } 87 | } 88 | 89 | // MARK: Youku Handler 90 | extension UrlHelpers.Magic { 91 | private static let YoukuClosure = UrlHelpers.Magic.genericHandlerFactory( 92 | prefix: "http://v.youku.com/v_show/id_", 93 | replacement: "http://player.youku.com/embed/") 94 | 95 | fileprivate func hYouku() -> Bool { 96 | return UrlHelpers.Magic.YoukuClosure(self) 97 | } 98 | } 99 | 100 | // MARK: DailyMotion Handler 101 | extension UrlHelpers.Magic { 102 | private static let DailyMotionShort = UrlHelpers.Magic.genericHandlerFactory( 103 | prefix: "http://www.dailymotion.com/video/", 104 | replacement: "http://www.dailymotion.com/embed/video/") 105 | 106 | private static let DailyMotionLong = UrlHelpers.Magic.genericHandlerFactory( 107 | prefix: "http://dai.ly/video/", 108 | replacement: "http://www.dailymotion.com/embed/video/") 109 | 110 | fileprivate func hDailyMotion() -> Bool { 111 | return UrlHelpers.Magic.DailyMotionLong(self) || 112 | UrlHelpers.Magic.DailyMotionShort(self) 113 | } 114 | } 115 | 116 | // MARK: Twitch.tv Handler 117 | extension UrlHelpers.Magic { 118 | fileprivate func hTwitch() -> Bool { 119 | // swiftlint:disable:next force_try 120 | let TwitchRegExp = try! NSRegularExpression(pattern: "https?://(?:www\\.)?twitch\\.tv/([\\w\\d\\_]+)(?:/(\\d+))?") 121 | 122 | if let match = TwitchRegExp.firstMatch(in: urlString, range: urlString.nsrange), 123 | let channel = urlString.substring(with:match.rangeAt(1)) { 124 | var magicd = false 125 | switch channel { 126 | case "directory", "products", "p", "user": 127 | break 128 | case "videos": 129 | if let idString = urlString.substring(with:match.rangeAt(2)) { 130 | modified.query = "html5&video=v" + idString 131 | magicd = true 132 | } 133 | default: 134 | modified.query = "html5&channel=" + channel 135 | magicd = true 136 | } 137 | 138 | if magicd { 139 | // Enforce https 140 | modified.scheme = "https" 141 | modified.host = "player.twitch.tv" 142 | } 143 | 144 | return magicd 145 | } 146 | 147 | return false 148 | } 149 | } 150 | 151 | // MARK: Vimeo Handler 152 | extension UrlHelpers.Magic { 153 | fileprivate func hVimeo() -> Bool { 154 | // Enforce https 155 | let urlStringModified = self.urlString.replacingOccurrences( 156 | of: "(?:https?://)?(?:www\\.)?vimeo\\.com/(\\d+)", 157 | with: "https://player.vimeo.com/video/$1", 158 | options: .regularExpression) 159 | 160 | if urlStringModified != self.urlString, let newComponents = URLComponents(string: urlStringModified) { 161 | self.modified = newComponents 162 | 163 | return true 164 | } 165 | 166 | return false 167 | } 168 | } 169 | 170 | // MARK: YouTube Handler 171 | extension UrlHelpers.Magic { 172 | fileprivate func hYouTube() -> Bool { 173 | // (video id) (hours)?(minutes)?(seconds) 174 | // swiftlint:disable:next force_try line_length 175 | let YTRegExp = try! NSRegularExpression(pattern: "(?:https?://)?(?:www\\.)?(?:youtube\\.com/watch\\?v=|youtu.be/)([\\w\\_\\-]+)(?:[&?]t=(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s?))?") 176 | 177 | if let match = YTRegExp.firstMatch(in: self.urlString, range: self.urlString.nsrange) { 178 | // Enforce https 179 | self.modified.scheme = "https" 180 | self.modified.host = "youtube.com" 181 | self.modified.path = "/embed/" + self.urlString.substring(with: match.rangeAt(1))! 182 | 183 | var start = 0 184 | var multiplier = 60 * 60 185 | for idx in 2...4 { 186 | if let tStr = self.urlString.substring(with: match.rangeAt(idx)), let tInt = Int(tStr) { 187 | start += tInt * multiplier 188 | } 189 | multiplier /= 60 190 | } 191 | if start != 0 { 192 | self.modified.query = "start=" + String(start) 193 | } 194 | 195 | return true 196 | } 197 | 198 | return false 199 | } 200 | } 201 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ADP2,1 6 | Developer Transition Kit 7 | iMac1,1 8 | iMac G3 (Rev A-D) 9 | iMac4,1 10 | iMac (Core Duo) 11 | iMac4,2 12 | iMac for Education (17 inch, Core Duo) 13 | iMac5,1 14 | iMac (Core 2 Duo, 17 or 20 inch, SuperDrive) 15 | iMac5,2 16 | iMac (Core 2 Duo, 17 inch, Combo Drive) 17 | iMac6,1 18 | iMac (Core 2 Duo, 24 inch, SuperDrive) 19 | iMac8,1 20 | iMac (Core 2 Duo, 20 or 24 inch, Early 2008 ) 21 | iMac9,1 22 | iMac (Core 2 Duo, 20 or 24 inch, Early or Mid 2009 ) 23 | iMac10,1 24 | iMac (Core 2 Duo, 21.5 or 27 inch, Late 2009 ) 25 | iMac11,1 26 | iMac (Core i5 or i7, 27 inch Late 2009) 27 | iMac11,2 28 | iMac (Core i3 or i5, 27 inch Mid 2010) 29 | iMac11,3 30 | iMac (Core i5 or i7, 27 inch Mid 2010) 31 | iMac12,1 32 | iMac (Core i3 or i5 or i7, 21.5 inch Mid 2010 or Late 2011) 33 | iMac12,2 34 | iMac (Core i5 or i7, 27 inch Mid 2011) 35 | iMac13,1 36 | iMac (Core i3 or i5 or i7, 21.5 inch Late 2012 or Early 2013) 37 | iMac13,2 38 | iMac (Core i5 or i7, 27 inch Late 2012) 39 | iMac14,1 40 | iMac (Core i5, 21.5 inch Late 2013) 41 | iMac14,2 42 | iMac (Core i5 or i7, 27 inch Late 2013) 43 | iMac14,3 44 | iMac (Core i5 or i7, 21.5 inch Late 2013) 45 | MacBook1,1 46 | MacBook (Core Duo) 47 | MacBook2,1 48 | MacBook (Core 2 Duo) 49 | MacBook4,1 50 | MacBook (Core 2 Duo Feb 2008) 51 | MacBook5,1 52 | MacBook (Core 2 Duo, Late 2008, Unibody) 53 | MacBook5,2 54 | MacBook (Core 2 Duo, Early 2009, White) 55 | MacBook6,1 56 | MacBook (Core 2 Duo, Late 2009, Unibody) 57 | MacBook7,1 58 | MacBook (Core 2 Duo, Mid 2010, White) 59 | MacBookAir1,1 60 | MacBook Air (Core 2 Duo, 13 inch, Early 2008) 61 | MacBookAir2,1 62 | MacBook Air (Core 2 Duo, 13 inch, Mid 2009) 63 | MacBookAir3,1 64 | MacBook Air (Core 2 Duo, 11 inch, Late 2010) 65 | MacBookAir3,2 66 | MacBook Air (Core 2 Duo, 13 inch, Late 2010) 67 | MacBookAir4,1 68 | MacBook Air (Core i5 or i7, 11 inch, Mid 2011) 69 | MacBookAir4,2 70 | MacBook Air (Core i5 or i7, 13 inch, Mid 2011) 71 | MacBookAir5,1 72 | MacBook Air (Core i5 or i7, 11 inch, Mid 2012) 73 | MacBookAir5,2 74 | MacBook Air (Core i5 or i7, 13 inch, Mid 2012) 75 | MacBookAir6,1 76 | MacBook Air (Core i5 or i7, 11 inch, Mid 2013 or Early 2014) 77 | MacBookAir6,2 78 | MacBook Air (Core i5 or i7, 13 inch, Mid 2013 or Early 2014) 79 | MacBookPro1,1 80 | MacBook Pro Core Duo (15-inch) 81 | MacBookPro1,2 82 | MacBook Pro Core Duo (17-inch) 83 | MacBookPro2,1 84 | MacBook Pro Core 2 Duo (17-inch) 85 | MacBookPro2,2 86 | MacBook Pro Core 2 Duo (15-inch) 87 | MacBookPro3,1 88 | MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo) 89 | MacBookPro3,2 90 | MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo) 91 | MacBookPro4,1 92 | MacBook Pro (Core 2 Duo Feb 2008) 93 | Macmini1,1 94 | Mac Mini (Core Solo/Duo) 95 | MacPro1,1 96 | Mac Pro (four-core) 97 | MacPro2,1 98 | Mac Pro (eight-core) 99 | MacPro3,1 100 | Mac Pro (January 2008 4- or 8- core "Harpertown") 101 | MacPro4,1 102 | Mac Pro (March 2009) 103 | MacPro5,1 104 | Mac Pro (August 2010) 105 | PowerBook1,1 106 | PowerBook G3 107 | PowerBook2,1 108 | iBook G3 109 | PowerBook2,2 110 | iBook G3 (FireWire) 111 | PowerBook2,3 112 | iBook G3 113 | PowerBook2,4 114 | iBook G3 115 | PowerBook3,1 116 | PowerBook G3 (FireWire) 117 | PowerBook3,2 118 | PowerBook G4 119 | PowerBook3,3 120 | PowerBook G4 (Gigabit Ethernet) 121 | PowerBook3,4 122 | PowerBook G4 (DVI) 123 | PowerBook3,5 124 | PowerBook G4 (1GHz / 867MHz) 125 | PowerBook4,1 126 | iBook G3 (Dual USB, Late 2001) 127 | PowerBook4,2 128 | iBook G3 (16MB VRAM) 129 | PowerBook4,3 130 | iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003) 131 | PowerBook5,1 132 | PowerBook G4 (17 inch) 133 | PowerBook5,2 134 | PowerBook G4 (15 inch FW 800) 135 | PowerBook5,3 136 | PowerBook G4 (17-inch 1.33GHz) 137 | PowerBook5,4 138 | PowerBook G4 (15 inch 1.5/1.33GHz) 139 | PowerBook5,5 140 | PowerBook G4 (17-inch 1.5GHz) 141 | PowerBook5,6 142 | PowerBook G4 (15 inch 1.67GHz/1.5GHz) 143 | PowerBook5,7 144 | PowerBook G4 (17-inch 1.67GHz) 145 | PowerBook5,8 146 | PowerBook G4 (Double layer SD, 15 inch) 147 | PowerBook5,9 148 | PowerBook G4 (Double layer SD, 17 inch) 149 | PowerBook6,1 150 | PowerBook G4 (12 inch) 151 | PowerBook6,2 152 | PowerBook G4 (12 inch, DVI) 153 | PowerBook6,3 154 | iBook G4 155 | PowerBook6,4 156 | PowerBook G4 (12 inch 1.33GHz) 157 | PowerBook6,5 158 | iBook G4 (Early-Late 2004) 159 | PowerBook6,7 160 | iBook G4 (Mid 2005) 161 | PowerBook6,8 162 | PowerBook G4 (12 inch 1.5GHz) 163 | PowerMac1,1 164 | Power Macintosh G3 (Blue & White) 165 | PowerMac1,2 166 | Power Macintosh G4 (PCI Graphics) 167 | PowerMac10,1 168 | Mac Mini G4 169 | PowerMac10,2 170 | Mac Mini (Late 2005) 171 | PowerMac11,2 172 | Power Macintosh G5 (Late 2005) 173 | PowerMac12,1 174 | iMac G5 (iSight) 175 | PowerMac2,1 176 | iMac G3 (Slot-loading CD-ROM) 177 | PowerMac2,2 178 | iMac G3 (Summer 2000) 179 | PowerMac3,1 180 | Power Macintosh G4 (AGP Graphics) 181 | PowerMac3,2 182 | Power Macintosh G4 (AGP Graphics) 183 | PowerMac3,3 184 | Power Macintosh G4 (Gigabit Ethernet) 185 | PowerMac3,4 186 | Power Macintosh G4 (Digital Audio) 187 | PowerMac3,5 188 | Power Macintosh G4 (Quick Silver) 189 | PowerMac3,6 190 | Power Macintosh G4 (Mirrored Drive Door) 191 | PowerMac4,1 192 | iMac G3 (Early/Summer 2001) 193 | PowerMac4,2 194 | iMac G4 (Flat Panel) 195 | PowerMac4,4 196 | eMac 197 | PowerMac4,5 198 | iMac G4 (17-inch Flat Panel) 199 | PowerMac5,1 200 | Power Macintosh G4 Cube 201 | PowerMac6,1 202 | iMac G4 (USB 2.0) 203 | PowerMac6,3 204 | iMac G4 (20-inch Flat Panel) 205 | PowerMac6,4 206 | eMac (USB 2.0, 2005) 207 | PowerMac7,2 208 | Power Macintosh G5 209 | PowerMac7,3 210 | Power Macintosh G5 211 | PowerMac8,1 212 | iMac G5 213 | PowerMac8,2 214 | iMac G5 (Ambient Light Sensor) 215 | PowerMac9,1 216 | Power Macintosh G5 (Late 2005) 217 | RackMac1,1 218 | Xserve G4 219 | RackMac1,2 220 | Xserve G4 (slot-loading, cluster node) 221 | RackMac3,1 222 | Xserve G5 223 | Xserve1,1 224 | Xserve (Intel Xeon) 225 | Xserve2,1 226 | Xserve (January 2008 quad-core) 227 | 228 | 229 | -------------------------------------------------------------------------------- /Helium/Helium/HeliumPanelController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HeliumPanelController.swift 3 | // Helium 4 | // 5 | // Created by Jaden Geller on 4/9/15. 6 | // Copyright (c) 2015 Jaden Geller. All rights reserved. 7 | // 8 | 9 | import AppKit 10 | 11 | fileprivate class URLField: NSTextField { 12 | override func mouseDown(with event: NSEvent) { 13 | super.mouseDown(with: event) 14 | if let textEditor = currentEditor() { 15 | textEditor.selectAll(self) 16 | } 17 | } 18 | 19 | convenience init(withValue: String?) { 20 | self.init() 21 | 22 | if let string = withValue { 23 | self.stringValue = string 24 | } 25 | self.lineBreakMode = NSLineBreakMode.byTruncatingHead 26 | self.usesSingleLineMode = true 27 | } 28 | } 29 | 30 | class HeliumPanelController: NSWindowController { 31 | 32 | fileprivate var webViewController: WebViewController { 33 | // swiftlint:disable:next force_cast 34 | return self.window?.contentViewController as! WebViewController 35 | } 36 | 37 | fileprivate var panel: HeliumPanel! { 38 | // swiftlint:disable:next force_cast 39 | return self.window as! HeliumPanel 40 | } 41 | 42 | // MARK: Window lifecycle 43 | override func windowDidLoad() { 44 | panel.isFloatingPanel = true 45 | 46 | NotificationCenter.default.addObserver( 47 | self, 48 | selector: #selector(HeliumPanelController.didBecomeActive), 49 | name: NSNotification.Name.NSApplicationDidBecomeActive, 50 | object: nil) 51 | NotificationCenter.default.addObserver( 52 | self, 53 | selector: #selector(HeliumPanelController.willResignActive), 54 | name: NSNotification.Name.NSApplicationWillResignActive, 55 | object: nil) 56 | NotificationCenter.default.addObserver( 57 | self, 58 | selector: #selector(HeliumPanelController.didUpdateTitle(_:)), 59 | name: Notification.Name(rawValue: "HeliumUpdateTitle"), 60 | object: nil) 61 | 62 | setFloatOverFullScreenApps() 63 | 64 | // MARK: Load settings from UserSettings 65 | didUpdateAlpha(CGFloat(UserSettings.opacityPercentage.value)) 66 | 67 | if let prefernce = TranslucencyPreference(rawValue: UserSettings.translucencyPreference.value) { 68 | translucencyPreference = prefernce 69 | } 70 | } 71 | 72 | // MARK : Mouse events 73 | override func mouseEntered(with theEvent: NSEvent) { 74 | mouseOver = true 75 | updateTranslucency() 76 | } 77 | 78 | override func mouseExited(with theEvent: NSEvent) { 79 | mouseOver = false 80 | updateTranslucency() 81 | } 82 | 83 | // MARK : Translucency 84 | fileprivate var mouseOver: Bool = false 85 | 86 | fileprivate var alpha: CGFloat = 0 { 87 | didSet { 88 | updateTranslucency() 89 | } 90 | } 91 | 92 | fileprivate var translucencyPreference: TranslucencyPreference = .never { 93 | didSet { 94 | UserSettings.translucencyPreference.value = translucencyPreference.rawValue 95 | updateTranslucency() 96 | } 97 | } 98 | 99 | fileprivate enum TranslucencyPreference: Int { 100 | case never = 0 101 | case always = 1 102 | case mouseOver = 2 103 | case mouseOutside = 3 104 | } 105 | 106 | fileprivate func updateTranslucency() { 107 | currentlyTranslucent = shouldBeTranslucent() 108 | } 109 | 110 | fileprivate var currentlyTranslucent: Bool = false { 111 | didSet { 112 | if !NSApplication.shared().isActive { 113 | panel.ignoresMouseEvents = currentlyTranslucent 114 | } 115 | if currentlyTranslucent { 116 | panel.animator().alphaValue = alpha 117 | panel.isOpaque = false 118 | } else { 119 | panel.isOpaque = true 120 | panel.animator().alphaValue = 1 121 | } 122 | } 123 | } 124 | 125 | fileprivate func shouldBeTranslucent() -> Bool { 126 | /* Implicit Arguments 127 | * - mouseOver 128 | * - translucencyPreference 129 | */ 130 | 131 | switch translucencyPreference { 132 | case .never: 133 | return false 134 | case .always: 135 | return true 136 | case .mouseOver: 137 | return mouseOver 138 | case .mouseOutside: 139 | return !mouseOver 140 | } 141 | } 142 | 143 | fileprivate func setFloatOverFullScreenApps() { 144 | if UserSettings.disabledFullScreenFloat.value { 145 | panel.collectionBehavior = [.moveToActiveSpace, .fullScreenAuxiliary] 146 | 147 | } else { 148 | panel.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] 149 | } 150 | } 151 | 152 | // MARK: IBActions 153 | 154 | fileprivate func disabledAllMouseOverPreferences(_ allMenus: [NSMenuItem]) { 155 | // GROSS HARD CODED 156 | for x in allMenus.dropFirst(2) { 157 | x.state = NSOffState 158 | } 159 | } 160 | 161 | @IBAction fileprivate func neverPreferencePress(_ sender: NSMenuItem) { 162 | disabledAllMouseOverPreferences(sender.menu!.items) 163 | translucencyPreference = .never 164 | sender.state = NSOnState 165 | } 166 | 167 | @IBAction fileprivate func alwaysPreferencePress(_ sender: NSMenuItem) { 168 | disabledAllMouseOverPreferences(sender.menu!.items) 169 | translucencyPreference = .always 170 | sender.state = NSOnState 171 | } 172 | 173 | @IBAction fileprivate func overPreferencePress(_ sender: NSMenuItem) { 174 | disabledAllMouseOverPreferences(sender.menu!.items) 175 | translucencyPreference = .mouseOver 176 | sender.state = NSOnState 177 | } 178 | 179 | @IBAction fileprivate func outsidePreferencePress(_ sender: NSMenuItem) { 180 | disabledAllMouseOverPreferences(sender.menu!.items) 181 | translucencyPreference = .mouseOutside 182 | sender.state = NSOnState 183 | } 184 | 185 | @IBAction fileprivate func percentagePress(_ sender: NSMenuItem) { 186 | for button in sender.menu!.items { 187 | (button).state = NSOffState 188 | } 189 | sender.state = NSOnState 190 | let value = sender.title.substring(to: sender.title.characters.index(sender.title.endIndex, offsetBy: -1)) 191 | if let alpha = Int(value) { 192 | didUpdateAlpha(CGFloat(alpha)) 193 | UserSettings.opacityPercentage.value = alpha 194 | } 195 | } 196 | 197 | @IBAction fileprivate func openLocationPress(_ sender: AnyObject) { 198 | didRequestUserUrl(RequestUserUrlStrings( 199 | currentURL: self.webViewController.currentURL, 200 | messageText: "Enter Destination URL", 201 | acceptBtnText: "Load", 202 | cancelBtnText: "Cancel"), 203 | acceptHandler: { (newUrl: String) in 204 | self.webViewController.loadURL(text: newUrl) 205 | } 206 | ) 207 | } 208 | 209 | @IBAction fileprivate func openFilePress(_ sender: AnyObject) { 210 | didRequestFile() 211 | } 212 | 213 | @IBAction fileprivate func floatOverFullScreenAppsToggled(_ sender: NSMenuItem) { 214 | sender.state = (sender.state == NSOnState) ? NSOffState : NSOnState 215 | UserSettings.disabledFullScreenFloat.value = (sender.state == NSOffState) 216 | 217 | setFloatOverFullScreenApps() 218 | } 219 | 220 | @IBAction fileprivate func hideTitle(_ sender: NSMenuItem) { 221 | if sender.state == NSOnState { 222 | sender.state = NSOffState 223 | panel.styleMask.remove(.titled) 224 | } else { 225 | sender.state = NSOnState 226 | // somehow removing .titled also removes .utitlityWindow, which is required 227 | panel.styleMask.update(with: [ .titled, .utilityWindow ]) 228 | panel.title = self.webViewController.webView.title ?? "" 229 | } 230 | } 231 | 232 | @IBAction func setHomePage(_ sender: AnyObject) { 233 | didRequestUserUrl(RequestUserUrlStrings( 234 | currentURL: UserSettings.homePageURL.value, 235 | messageText: "Enter new Home Page URL", 236 | acceptBtnText: "Set", 237 | cancelBtnText: "Cancel"), 238 | acceptHandler: { (newUrlConstant: String) in 239 | var newUrl = newUrlConstant 240 | 241 | if !(newUrl.lowercased().hasPrefix("http://") || newUrl.lowercased().hasPrefix("https://")) { 242 | newUrl = "http://" + newUrl 243 | } 244 | 245 | // Save to defaults and loads it 246 | UserSettings.homePageURL.value = newUrl 247 | self.webViewController.loadURL(text: newUrl) 248 | }) 249 | } 250 | 251 | // MARK: Actual functionality 252 | @objc fileprivate func didUpdateTitle(_ notification: Notification) { 253 | if let title = notification.object as? String { 254 | panel.title = title 255 | } 256 | } 257 | 258 | fileprivate func didRequestFile() { 259 | let open = NSOpenPanel() 260 | open.allowsMultipleSelection = false 261 | open.canChooseFiles = true 262 | open.canChooseDirectories = false 263 | 264 | if open.runModal() == NSModalResponseOK { 265 | if let url = open.url { 266 | webViewController.loadURL(url: url) 267 | } 268 | } 269 | } 270 | 271 | struct RequestUserUrlStrings { 272 | let currentURL: String? 273 | let messageText: String 274 | let acceptBtnText: String 275 | let cancelBtnText: String 276 | } 277 | 278 | /// Shows alert asking user to input URL 279 | /// And validate it 280 | fileprivate func didRequestUserUrl(_ strings: RequestUserUrlStrings, acceptHandler: @escaping (String) -> Void) { 281 | // Create alert 282 | let alert = NSAlert() 283 | alert.alertStyle = NSAlertStyle.informational 284 | alert.messageText = strings.messageText 285 | 286 | // Create urlField 287 | let urlField = URLField(withValue: strings.currentURL) 288 | urlField.frame = NSRect(x: 0, y: 0, width: 300, height: 20) 289 | 290 | // Add urlField and buttons to alert 291 | alert.accessoryView = urlField 292 | alert.addButton(withTitle: strings.acceptBtnText) 293 | alert.addButton(withTitle: strings.cancelBtnText) 294 | 295 | alert.beginSheetModal(for: self.window!, completionHandler: { response in 296 | // first button is accept 297 | if response == NSAlertFirstButtonReturn { 298 | // swiftlint:disable:next force_cast 299 | var newUrl = (alert.accessoryView as! NSTextField).stringValue 300 | newUrl = UrlHelpers.ensureScheme(newUrl) 301 | if UrlHelpers.isValid(urlString: newUrl) { 302 | acceptHandler(newUrl) 303 | } 304 | } 305 | }) 306 | 307 | // Set focus on urlField 308 | alert.accessoryView!.becomeFirstResponder() 309 | } 310 | 311 | @objc fileprivate func didBecomeActive() { 312 | panel.ignoresMouseEvents = false 313 | } 314 | 315 | @objc fileprivate func willResignActive() { 316 | if currentlyTranslucent { 317 | panel.ignoresMouseEvents = true 318 | } 319 | } 320 | 321 | fileprivate func didUpdateAlpha(_ newAlpha: CGFloat) { 322 | alpha = newAlpha / 100 323 | } 324 | } 325 | -------------------------------------------------------------------------------- /Helium/Helium/Sparkle.framework/Versions/A/Headers/SUUpdater.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUpdater.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 1/4/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUPDATER_H 10 | #define SUUPDATER_H 11 | 12 | #import "SUExport.h" 13 | #import "SUVersionComparisonProtocol.h" 14 | #import "SUVersionDisplayProtocol.h" 15 | 16 | @class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; 17 | 18 | @protocol SUUpdaterDelegate; 19 | 20 | /*! 21 | The main API in Sparkle for controlling the update mechanism. 22 | 23 | This class is used to configure the update paramters as well as manually 24 | and automatically schedule and control checks for updates. 25 | */ 26 | SU_EXPORT @interface SUUpdater : NSObject 27 | 28 | @property (unsafe_unretained) IBOutlet id delegate; 29 | 30 | + (SUUpdater *)sharedUpdater; 31 | + (SUUpdater *)updaterForBundle:(NSBundle *)bundle; 32 | - (instancetype)initForBundle:(NSBundle *)bundle; 33 | 34 | @property (readonly, strong) NSBundle *hostBundle; 35 | 36 | @property BOOL automaticallyChecksForUpdates; 37 | 38 | @property NSTimeInterval updateCheckInterval; 39 | 40 | /*! 41 | * The URL of the appcast used to download update information. 42 | * 43 | * This property must be called on the main thread. 44 | */ 45 | @property (copy) NSURL *feedURL; 46 | 47 | @property (nonatomic, copy) NSString *userAgentString; 48 | 49 | @property BOOL sendsSystemProfile; 50 | 51 | @property BOOL automaticallyDownloadsUpdates; 52 | 53 | /*! 54 | Explicitly checks for updates and displays a progress dialog while doing so. 55 | 56 | This method is meant for a main menu item. 57 | Connect any menu item to this action in Interface Builder, 58 | and Sparkle will check for updates and report back its findings verbosely 59 | when it is invoked. 60 | */ 61 | - (IBAction)checkForUpdates:(id)sender; 62 | 63 | /*! 64 | Checks for updates, but does not display any UI unless an update is found. 65 | 66 | This is meant for programmatically initating a check for updates. That is, 67 | it will display no UI unless it actually finds an update, in which case it 68 | proceeds as usual. 69 | 70 | If the fully automated updating is turned on, however, this will invoke that 71 | behavior, and if an update is found, it will be downloaded and prepped for 72 | installation. 73 | */ 74 | - (void)checkForUpdatesInBackground; 75 | 76 | /*! 77 | Returns the date of last update check. 78 | 79 | \returns \c nil if no check has been performed. 80 | */ 81 | @property (readonly, copy) NSDate *lastUpdateCheckDate; 82 | 83 | /*! 84 | Begins a "probing" check for updates which will not actually offer to 85 | update to that version. 86 | 87 | However, the delegate methods 88 | SUUpdaterDelegate::updater:didFindValidUpdate: and 89 | SUUpdaterDelegate::updaterDidNotFindUpdate: will be called, 90 | so you can use that information in your UI. 91 | */ 92 | - (void)checkForUpdateInformation; 93 | 94 | /*! 95 | Appropriately schedules or cancels the update checking timer according to 96 | the preferences for time interval and automatic checks. 97 | 98 | This call does not change the date of the next check, 99 | but only the internal NSTimer. 100 | */ 101 | - (void)resetUpdateCycle; 102 | 103 | @property (readonly) BOOL updateInProgress; 104 | 105 | @end 106 | 107 | // ----------------------------------------------------------------------------- 108 | // SUUpdater Notifications for events that might be interesting to more than just the delegate 109 | // The updater will be the notification object 110 | // ----------------------------------------------------------------------------- 111 | SU_EXPORT extern NSString *const SUUpdaterDidFinishLoadingAppCastNotification; 112 | SU_EXPORT extern NSString *const SUUpdaterDidFindValidUpdateNotification; 113 | SU_EXPORT extern NSString *const SUUpdaterDidNotFindUpdateNotification; 114 | SU_EXPORT extern NSString *const SUUpdaterWillRestartNotification; 115 | #define SUUpdaterWillRelaunchApplicationNotification SUUpdaterWillRestartNotification; 116 | #define SUUpdaterWillInstallUpdateNotification SUUpdaterWillRestartNotification; 117 | 118 | // Key for the SUAppcastItem object in the SUUpdaterDidFindValidUpdateNotification userInfo 119 | SU_EXPORT extern NSString *const SUUpdaterAppcastItemNotificationKey; 120 | // Key for the SUAppcast object in the SUUpdaterDidFinishLoadingAppCastNotification userInfo 121 | SU_EXPORT extern NSString *const SUUpdaterAppcastNotificationKey; 122 | 123 | // ----------------------------------------------------------------------------- 124 | // SUUpdater Delegate: 125 | // ----------------------------------------------------------------------------- 126 | 127 | /*! 128 | Provides methods to control the behavior of an SUUpdater object. 129 | */ 130 | @protocol SUUpdaterDelegate 131 | @optional 132 | 133 | /*! 134 | Returns whether to allow Sparkle to pop up. 135 | 136 | For example, this may be used to prevent Sparkle from interrupting a setup assistant. 137 | 138 | \param updater The SUUpdater instance. 139 | */ 140 | - (BOOL)updaterMayCheckForUpdates:(SUUpdater *)updater; 141 | 142 | /*! 143 | Returns additional parameters to append to the appcast URL's query string. 144 | 145 | This is potentially based on whether or not Sparkle will also be sending along the system profile. 146 | 147 | \param updater The SUUpdater instance. 148 | \param sendingProfile Whether the system profile will also be sent. 149 | 150 | \return An array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user. 151 | */ 152 | - (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; 153 | 154 | /*! 155 | Returns a custom appcast URL. 156 | 157 | Override this to dynamically specify the entire URL. 158 | 159 | \param updater The SUUpdater instance. 160 | */ 161 | - (NSString *)feedURLStringForUpdater:(SUUpdater *)updater; 162 | 163 | /*! 164 | Returns whether Sparkle should prompt the user about automatic update checks. 165 | 166 | Use this to override the default behavior. 167 | 168 | \param updater The SUUpdater instance. 169 | */ 170 | - (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)updater; 171 | 172 | /*! 173 | Called after Sparkle has downloaded the appcast from the remote server. 174 | 175 | Implement this if you want to do some special handling with the appcast once it finishes loading. 176 | 177 | \param updater The SUUpdater instance. 178 | \param appcast The appcast that was downloaded from the remote server. 179 | */ 180 | - (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; 181 | 182 | /*! 183 | Returns the item in the appcast corresponding to the update that should be installed. 184 | 185 | If you're using special logic or extensions in your appcast, 186 | implement this to use your own logic for finding a valid update, if any, 187 | in the given appcast. 188 | 189 | \param appcast The appcast that was downloaded from the remote server. 190 | \param updater The SUUpdater instance. 191 | */ 192 | - (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)updater; 193 | 194 | /*! 195 | Called when a valid update is found by the update driver. 196 | 197 | \param updater The SUUpdater instance. 198 | \param item The appcast item corresponding to the update that is proposed to be installed. 199 | */ 200 | - (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)item; 201 | 202 | /*! 203 | Called when a valid update is not found. 204 | 205 | \param updater The SUUpdater instance. 206 | */ 207 | - (void)updaterDidNotFindUpdate:(SUUpdater *)updater; 208 | 209 | /*! 210 | Called immediately before installing the specified update. 211 | 212 | \param updater The SUUpdater instance. 213 | \param item The appcast item corresponding to the update that is proposed to be installed. 214 | */ 215 | - (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)item; 216 | 217 | /*! 218 | Returns whether the relaunch should be delayed in order to perform other tasks. 219 | 220 | This is not called if the user didn't relaunch on the previous update, 221 | in that case it will immediately restart. 222 | 223 | \param updater The SUUpdater instance. 224 | \param item The appcast item corresponding to the update that is proposed to be installed. 225 | \param invocation The invocation that must be completed before continuing with the relaunch. 226 | 227 | \return \c YES to delay the relaunch until \p invocation is invoked. 228 | */ 229 | - (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)item untilInvoking:(NSInvocation *)invocation; 230 | 231 | /*! 232 | Returns whether the application should be relaunched at all. 233 | 234 | Some apps \b cannot be relaunched under certain circumstances. 235 | This method can be used to explicitly prevent a relaunch. 236 | 237 | \param updater The SUUpdater instance. 238 | */ 239 | - (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater; 240 | 241 | /*! 242 | Called immediately before relaunching. 243 | 244 | \param updater The SUUpdater instance. 245 | */ 246 | - (void)updaterWillRelaunchApplication:(SUUpdater *)updater; 247 | 248 | /*! 249 | Returns an object that compares version numbers to determine their arithmetic relation to each other. 250 | 251 | This method allows you to provide a custom version comparator. 252 | If you don't implement this method or return \c nil, 253 | the standard version comparator will be used. 254 | 255 | \sa SUStandardVersionComparator 256 | 257 | \param updater The SUUpdater instance. 258 | */ 259 | - (id)versionComparatorForUpdater:(SUUpdater *)updater; 260 | 261 | /*! 262 | Returns an object that formats version numbers for display to the user. 263 | 264 | If you don't implement this method or return \c nil, 265 | the standard version formatter will be used. 266 | 267 | \sa SUUpdateAlert 268 | 269 | \param updater The SUUpdater instance. 270 | */ 271 | - (id)versionDisplayerForUpdater:(SUUpdater *)updater; 272 | 273 | /*! 274 | Returns the path which is used to relaunch the client after the update is installed. 275 | 276 | The default is the path of the host bundle. 277 | 278 | \param updater The SUUpdater instance. 279 | */ 280 | - (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; 281 | 282 | /*! 283 | Called before an updater shows a modal alert window, 284 | to give the host the opportunity to hide attached windows that may get in the way. 285 | 286 | \param updater The SUUpdater instance. 287 | */ 288 | - (void)updaterWillShowModalAlert:(SUUpdater *)updater; 289 | 290 | /*! 291 | Called after an updater shows a modal alert window, 292 | to give the host the opportunity to hide attached windows that may get in the way. 293 | 294 | \param updater The SUUpdater instance. 295 | */ 296 | - (void)updaterDidShowModalAlert:(SUUpdater *)updater; 297 | 298 | /*! 299 | Called when an update is scheduled to be silently installed on quit. 300 | 301 | \param updater The SUUpdater instance. 302 | \param item The appcast item corresponding to the update that is proposed to be installed. 303 | \param invocation Can be used to trigger an immediate silent install and relaunch. 304 | */ 305 | - (void)updater:(SUUpdater *)updater willInstallUpdateOnQuit:(SUAppcastItem *)item immediateInstallationInvocation:(NSInvocation *)invocation; 306 | 307 | /*! 308 | Calls after an update that was scheduled to be silently installed on quit has been canceled. 309 | 310 | \param updater The SUUpdater instance. 311 | \param item The appcast item corresponding to the update that was proposed to be installed. 312 | */ 313 | - (void)updater:(SUUpdater *)updater didCancelInstallUpdateOnQuit:(SUAppcastItem *)item; 314 | 315 | /*! 316 | Called after an update is aborted due to an error. 317 | 318 | \param updater The SUUpdater instance. 319 | \param error The error that caused the abort 320 | */ 321 | - (void)updater:(SUUpdater *)updater didAbortWithError:(NSError *)error; 322 | 323 | @end 324 | 325 | #endif 326 | -------------------------------------------------------------------------------- /Helium/Helium/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | CA 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | -------------------------------------------------------------------------------- /Helium/Helium.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 27199AB41BE422AC00E02297 /* icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 27199AB31BE422AC00E02297 /* icon.icns */; }; 11 | 27199AB71BE422AC00E02297 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27199AB61BE422AC00E02297 /* ShareViewController.swift */; }; 12 | 27199ABA1BE422AC00E02297 /* ShareViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 27199AB81BE422AC00E02297 /* ShareViewController.xib */; }; 13 | 27199ABE1BE422AC00E02297 /* HeliumShareExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 27199AB01BE422AC00E02297 /* HeliumShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 14 | 4D867CB71AD6781200681331 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D867CB61AD6781200681331 /* AppDelegate.swift */; }; 15 | 4D867CB91AD6781200681331 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D867CB81AD6781200681331 /* WebViewController.swift */; }; 16 | 4D867CBB1AD6781200681331 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4D867CBA1AD6781200681331 /* Images.xcassets */; }; 17 | 4D867CBE1AD6781200681331 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4D867CBC1AD6781200681331 /* Main.storyboard */; }; 18 | 4D867CD41AD6796A00681331 /* HeliumPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D867CD31AD6796A00681331 /* HeliumPanelController.swift */; }; 19 | 4D8DAEAC1C3A41F300B212EC /* UserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA3EA011BE4CEC9001A471F /* UserSettings.swift */; }; 20 | 4D8DAEB31C3A427D00B212EC /* HeliumTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D8DAEB11C3A427D00B212EC /* HeliumTests.swift */; }; 21 | 5B75B5121C9A13D600475921 /* StringHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B75B5111C9A13D600475921 /* StringHelpers.swift */; }; 22 | 5B75B5131C9A13D600475921 /* StringHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B75B5111C9A13D600475921 /* StringHelpers.swift */; }; 23 | 6569AE371EC11E86002C8D07 /* UrlHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6569AE361EC11E86002C8D07 /* UrlHelpers.swift */; }; 24 | 6569AE381EC13B34002C8D07 /* StringHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B75B5111C9A13D600475921 /* StringHelpers.swift */; }; 25 | 6569AE391EC13B34002C8D07 /* UrlHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6569AE361EC11E86002C8D07 /* UrlHelpers.swift */; }; 26 | 6569AE681EC23C88002C8D07 /* HeliumPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6569AE671EC23C88002C8D07 /* HeliumPanel.swift */; }; 27 | B34C1EC31ADE3B520094ADBA /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B34C1EC21ADE3B520094ADBA /* Sparkle.framework */; }; 28 | B34C1EC61ADE3CBE0094ADBA /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = B34C1EC51ADE3CBE0094ADBA /* dsa_pub.pem */; }; 29 | B34C1EC91ADE3F980094ADBA /* Sparkle.framework in Copy Files */ = {isa = PBXBuildFile; fileRef = B34C1EC21ADE3B520094ADBA /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 30 | /* End PBXBuildFile section */ 31 | 32 | /* Begin PBXContainerItemProxy section */ 33 | 27199ABC1BE422AC00E02297 /* PBXContainerItemProxy */ = { 34 | isa = PBXContainerItemProxy; 35 | containerPortal = 4D867CA91AD6781200681331 /* Project object */; 36 | proxyType = 1; 37 | remoteGlobalIDString = 27199AAF1BE422AC00E02297; 38 | remoteInfo = HeliumShareExtension; 39 | }; 40 | 4D867CC41AD6781200681331 /* PBXContainerItemProxy */ = { 41 | isa = PBXContainerItemProxy; 42 | containerPortal = 4D867CA91AD6781200681331 /* Project object */; 43 | proxyType = 1; 44 | remoteGlobalIDString = 4D867CB01AD6781200681331; 45 | remoteInfo = Helium; 46 | }; 47 | /* End PBXContainerItemProxy section */ 48 | 49 | /* Begin PBXCopyFilesBuildPhase section */ 50 | 27199AC21BE422AC00E02297 /* Embed App Extensions */ = { 51 | isa = PBXCopyFilesBuildPhase; 52 | buildActionMask = 2147483647; 53 | dstPath = ""; 54 | dstSubfolderSpec = 13; 55 | files = ( 56 | 27199ABE1BE422AC00E02297 /* HeliumShareExtension.appex in Embed App Extensions */, 57 | ); 58 | name = "Embed App Extensions"; 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | B34C1EC81ADE3F870094ADBA /* Copy Files */ = { 62 | isa = PBXCopyFilesBuildPhase; 63 | buildActionMask = 2147483647; 64 | dstPath = ""; 65 | dstSubfolderSpec = 10; 66 | files = ( 67 | B34C1EC91ADE3F980094ADBA /* Sparkle.framework in Copy Files */, 68 | ); 69 | name = "Copy Files"; 70 | runOnlyForDeploymentPostprocessing = 0; 71 | }; 72 | /* End PBXCopyFilesBuildPhase section */ 73 | 74 | /* Begin PBXFileReference section */ 75 | 27199AB01BE422AC00E02297 /* HeliumShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = HeliumShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 76 | 27199AB31BE422AC00E02297 /* icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = icon.icns; sourceTree = ""; }; 77 | 27199AB61BE422AC00E02297 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; 78 | 27199AB91BE422AC00E02297 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ShareViewController.xib; sourceTree = ""; }; 79 | 27199ABB1BE422AC00E02297 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 80 | 4D867CB11AD6781200681331 /* Helium.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Helium.app; sourceTree = BUILT_PRODUCTS_DIR; }; 81 | 4D867CB51AD6781200681331 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 82 | 4D867CB61AD6781200681331 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 83 | 4D867CB81AD6781200681331 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; 84 | 4D867CBA1AD6781200681331 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 85 | 4D867CBD1AD6781200681331 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 86 | 4D867CC31AD6781200681331 /* HeliumTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HeliumTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 87 | 4D867CD31AD6796A00681331 /* HeliumPanelController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeliumPanelController.swift; sourceTree = ""; }; 88 | 4D8DAEB11C3A427D00B212EC /* HeliumTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeliumTests.swift; sourceTree = ""; }; 89 | 4D8DAEB21C3A427D00B212EC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 90 | 4DEAB8FD1ADBD98600A2FC2B /* Helium-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Helium-Bridging-Header.h"; sourceTree = ""; }; 91 | 4DEAB8FE1ADBD98600A2FC2B /* WKWebViewPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewPrivate.h; sourceTree = ""; }; 92 | 5B75B5111C9A13D600475921 /* StringHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringHelpers.swift; sourceTree = ""; }; 93 | 6569AE361EC11E86002C8D07 /* UrlHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UrlHelpers.swift; sourceTree = ""; }; 94 | 6569AE671EC23C88002C8D07 /* HeliumPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeliumPanel.swift; sourceTree = ""; }; 95 | AAA3EA011BE4CEC9001A471F /* UserSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserSettings.swift; sourceTree = ""; }; 96 | B34C1EC21ADE3B520094ADBA /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; 97 | B34C1EC51ADE3CBE0094ADBA /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; 98 | /* End PBXFileReference section */ 99 | 100 | /* Begin PBXFrameworksBuildPhase section */ 101 | 27199AAD1BE422AC00E02297 /* Frameworks */ = { 102 | isa = PBXFrameworksBuildPhase; 103 | buildActionMask = 2147483647; 104 | files = ( 105 | ); 106 | runOnlyForDeploymentPostprocessing = 0; 107 | }; 108 | 4D867CAE1AD6781200681331 /* Frameworks */ = { 109 | isa = PBXFrameworksBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | B34C1EC31ADE3B520094ADBA /* Sparkle.framework in Frameworks */, 113 | ); 114 | runOnlyForDeploymentPostprocessing = 0; 115 | }; 116 | 4D867CC01AD6781200681331 /* Frameworks */ = { 117 | isa = PBXFrameworksBuildPhase; 118 | buildActionMask = 2147483647; 119 | files = ( 120 | ); 121 | runOnlyForDeploymentPostprocessing = 0; 122 | }; 123 | /* End PBXFrameworksBuildPhase section */ 124 | 125 | /* Begin PBXGroup section */ 126 | 27199AB11BE422AC00E02297 /* HeliumShareExtension */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 27199AB61BE422AC00E02297 /* ShareViewController.swift */, 130 | 27199AB81BE422AC00E02297 /* ShareViewController.xib */, 131 | 27199ABB1BE422AC00E02297 /* Info.plist */, 132 | 27199AB21BE422AC00E02297 /* Supporting Files */, 133 | ); 134 | path = HeliumShareExtension; 135 | sourceTree = ""; 136 | }; 137 | 27199AB21BE422AC00E02297 /* Supporting Files */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 27199AB31BE422AC00E02297 /* icon.icns */, 141 | ); 142 | name = "Supporting Files"; 143 | sourceTree = ""; 144 | }; 145 | 4D867CA81AD6781200681331 = { 146 | isa = PBXGroup; 147 | children = ( 148 | 4D867CB31AD6781200681331 /* Helium */, 149 | 4D8DAEB01C3A427D00B212EC /* HeliumTests */, 150 | 27199AB11BE422AC00E02297 /* HeliumShareExtension */, 151 | 4D867CB21AD6781200681331 /* Products */, 152 | ); 153 | sourceTree = ""; 154 | }; 155 | 4D867CB21AD6781200681331 /* Products */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | 4D867CB11AD6781200681331 /* Helium.app */, 159 | 4D867CC31AD6781200681331 /* HeliumTests.xctest */, 160 | 27199AB01BE422AC00E02297 /* HeliumShareExtension.appex */, 161 | ); 162 | name = Products; 163 | sourceTree = ""; 164 | }; 165 | 4D867CB31AD6781200681331 /* Helium */ = { 166 | isa = PBXGroup; 167 | children = ( 168 | 6569AE671EC23C88002C8D07 /* HeliumPanel.swift */, 169 | 4D867CB61AD6781200681331 /* AppDelegate.swift */, 170 | 4D867CD31AD6796A00681331 /* HeliumPanelController.swift */, 171 | 4D867CB81AD6781200681331 /* WebViewController.swift */, 172 | 4DEAB8FE1ADBD98600A2FC2B /* WKWebViewPrivate.h */, 173 | 4D867CBA1AD6781200681331 /* Images.xcassets */, 174 | 4D867CBC1AD6781200681331 /* Main.storyboard */, 175 | 4D867CB41AD6781200681331 /* Supporting Files */, 176 | 4DEAB8FD1ADBD98600A2FC2B /* Helium-Bridging-Header.h */, 177 | B34C1EC71ADE3CCA0094ADBA /* Resources */, 178 | B34C1EC41ADE3B5E0094ADBA /* Frameworks */, 179 | AAA3EA011BE4CEC9001A471F /* UserSettings.swift */, 180 | 5B75B5111C9A13D600475921 /* StringHelpers.swift */, 181 | 6569AE361EC11E86002C8D07 /* UrlHelpers.swift */, 182 | ); 183 | path = Helium; 184 | sourceTree = ""; 185 | }; 186 | 4D867CB41AD6781200681331 /* Supporting Files */ = { 187 | isa = PBXGroup; 188 | children = ( 189 | 4D867CB51AD6781200681331 /* Info.plist */, 190 | ); 191 | name = "Supporting Files"; 192 | sourceTree = ""; 193 | }; 194 | 4D8DAEB01C3A427D00B212EC /* HeliumTests */ = { 195 | isa = PBXGroup; 196 | children = ( 197 | 4D8DAEB11C3A427D00B212EC /* HeliumTests.swift */, 198 | 4D8DAEB21C3A427D00B212EC /* Info.plist */, 199 | ); 200 | path = HeliumTests; 201 | sourceTree = ""; 202 | }; 203 | B34C1EC41ADE3B5E0094ADBA /* Frameworks */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | B34C1EC21ADE3B520094ADBA /* Sparkle.framework */, 207 | ); 208 | name = Frameworks; 209 | sourceTree = ""; 210 | }; 211 | B34C1EC71ADE3CCA0094ADBA /* Resources */ = { 212 | isa = PBXGroup; 213 | children = ( 214 | B34C1EC51ADE3CBE0094ADBA /* dsa_pub.pem */, 215 | ); 216 | name = Resources; 217 | sourceTree = ""; 218 | }; 219 | /* End PBXGroup section */ 220 | 221 | /* Begin PBXNativeTarget section */ 222 | 27199AAF1BE422AC00E02297 /* HeliumShareExtension */ = { 223 | isa = PBXNativeTarget; 224 | buildConfigurationList = 27199AC11BE422AC00E02297 /* Build configuration list for PBXNativeTarget "HeliumShareExtension" */; 225 | buildPhases = ( 226 | 27199AAC1BE422AC00E02297 /* Sources */, 227 | 27199AAD1BE422AC00E02297 /* Frameworks */, 228 | 27199AAE1BE422AC00E02297 /* Resources */, 229 | ); 230 | buildRules = ( 231 | ); 232 | dependencies = ( 233 | ); 234 | name = HeliumShareExtension; 235 | productName = HeliumShareExtension; 236 | productReference = 27199AB01BE422AC00E02297 /* HeliumShareExtension.appex */; 237 | productType = "com.apple.product-type.app-extension"; 238 | }; 239 | 4D867CB01AD6781200681331 /* Helium */ = { 240 | isa = PBXNativeTarget; 241 | buildConfigurationList = 4D867CCD1AD6781200681331 /* Build configuration list for PBXNativeTarget "Helium" */; 242 | buildPhases = ( 243 | 4D867CAD1AD6781200681331 /* Sources */, 244 | 4D867CAE1AD6781200681331 /* Frameworks */, 245 | 4D867CAF1AD6781200681331 /* Resources */, 246 | B34C1EC81ADE3F870094ADBA /* Copy Files */, 247 | 27199AC21BE422AC00E02297 /* Embed App Extensions */, 248 | ); 249 | buildRules = ( 250 | ); 251 | dependencies = ( 252 | 27199ABD1BE422AC00E02297 /* PBXTargetDependency */, 253 | ); 254 | name = Helium; 255 | productName = Helium; 256 | productReference = 4D867CB11AD6781200681331 /* Helium.app */; 257 | productType = "com.apple.product-type.application"; 258 | }; 259 | 4D867CC21AD6781200681331 /* HeliumTests */ = { 260 | isa = PBXNativeTarget; 261 | buildConfigurationList = 4D867CD01AD6781200681331 /* Build configuration list for PBXNativeTarget "HeliumTests" */; 262 | buildPhases = ( 263 | 4D867CBF1AD6781200681331 /* Sources */, 264 | 4D867CC01AD6781200681331 /* Frameworks */, 265 | 4D867CC11AD6781200681331 /* Resources */, 266 | ); 267 | buildRules = ( 268 | ); 269 | dependencies = ( 270 | 4D867CC51AD6781200681331 /* PBXTargetDependency */, 271 | ); 272 | name = HeliumTests; 273 | productName = HeliumTests; 274 | productReference = 4D867CC31AD6781200681331 /* HeliumTests.xctest */; 275 | productType = "com.apple.product-type.bundle.unit-test"; 276 | }; 277 | /* End PBXNativeTarget section */ 278 | 279 | /* Begin PBXProject section */ 280 | 4D867CA91AD6781200681331 /* Project object */ = { 281 | isa = PBXProject; 282 | attributes = { 283 | LastSwiftMigration = 0700; 284 | LastSwiftUpdateCheck = 0720; 285 | LastUpgradeCheck = 0830; 286 | ORGANIZATIONNAME = "Jaden Geller"; 287 | TargetAttributes = { 288 | 27199AAF1BE422AC00E02297 = { 289 | CreatedOnToolsVersion = 7.1; 290 | DevelopmentTeam = S45U87UZN5; 291 | LastSwiftMigration = 0830; 292 | SystemCapabilities = { 293 | com.apple.Sandbox = { 294 | enabled = 1; 295 | }; 296 | }; 297 | }; 298 | 4D867CB01AD6781200681331 = { 299 | CreatedOnToolsVersion = 6.3; 300 | DevelopmentTeam = S45U87UZN5; 301 | LastSwiftMigration = 0830; 302 | SystemCapabilities = { 303 | com.apple.Sandbox = { 304 | enabled = 0; 305 | }; 306 | }; 307 | }; 308 | 4D867CC21AD6781200681331 = { 309 | CreatedOnToolsVersion = 6.3; 310 | DevelopmentTeam = S45U87UZN5; 311 | LastSwiftMigration = 0830; 312 | TestTargetID = 4D867CB01AD6781200681331; 313 | }; 314 | }; 315 | }; 316 | buildConfigurationList = 4D867CAC1AD6781200681331 /* Build configuration list for PBXProject "Helium" */; 317 | compatibilityVersion = "Xcode 3.2"; 318 | developmentRegion = English; 319 | hasScannedForEncodings = 0; 320 | knownRegions = ( 321 | en, 322 | Base, 323 | ); 324 | mainGroup = 4D867CA81AD6781200681331; 325 | productRefGroup = 4D867CB21AD6781200681331 /* Products */; 326 | projectDirPath = ""; 327 | projectRoot = ""; 328 | targets = ( 329 | 4D867CB01AD6781200681331 /* Helium */, 330 | 4D867CC21AD6781200681331 /* HeliumTests */, 331 | 27199AAF1BE422AC00E02297 /* HeliumShareExtension */, 332 | ); 333 | }; 334 | /* End PBXProject section */ 335 | 336 | /* Begin PBXResourcesBuildPhase section */ 337 | 27199AAE1BE422AC00E02297 /* Resources */ = { 338 | isa = PBXResourcesBuildPhase; 339 | buildActionMask = 2147483647; 340 | files = ( 341 | 27199ABA1BE422AC00E02297 /* ShareViewController.xib in Resources */, 342 | 27199AB41BE422AC00E02297 /* icon.icns in Resources */, 343 | ); 344 | runOnlyForDeploymentPostprocessing = 0; 345 | }; 346 | 4D867CAF1AD6781200681331 /* Resources */ = { 347 | isa = PBXResourcesBuildPhase; 348 | buildActionMask = 2147483647; 349 | files = ( 350 | 4D867CBB1AD6781200681331 /* Images.xcassets in Resources */, 351 | B34C1EC61ADE3CBE0094ADBA /* dsa_pub.pem in Resources */, 352 | 4D867CBE1AD6781200681331 /* Main.storyboard in Resources */, 353 | ); 354 | runOnlyForDeploymentPostprocessing = 0; 355 | }; 356 | 4D867CC11AD6781200681331 /* Resources */ = { 357 | isa = PBXResourcesBuildPhase; 358 | buildActionMask = 2147483647; 359 | files = ( 360 | ); 361 | runOnlyForDeploymentPostprocessing = 0; 362 | }; 363 | /* End PBXResourcesBuildPhase section */ 364 | 365 | /* Begin PBXSourcesBuildPhase section */ 366 | 27199AAC1BE422AC00E02297 /* Sources */ = { 367 | isa = PBXSourcesBuildPhase; 368 | buildActionMask = 2147483647; 369 | files = ( 370 | 5B75B5131C9A13D600475921 /* StringHelpers.swift in Sources */, 371 | 27199AB71BE422AC00E02297 /* ShareViewController.swift in Sources */, 372 | ); 373 | runOnlyForDeploymentPostprocessing = 0; 374 | }; 375 | 4D867CAD1AD6781200681331 /* Sources */ = { 376 | isa = PBXSourcesBuildPhase; 377 | buildActionMask = 2147483647; 378 | files = ( 379 | 5B75B5121C9A13D600475921 /* StringHelpers.swift in Sources */, 380 | 4D867CD41AD6796A00681331 /* HeliumPanelController.swift in Sources */, 381 | 4D8DAEAC1C3A41F300B212EC /* UserSettings.swift in Sources */, 382 | 4D867CB91AD6781200681331 /* WebViewController.swift in Sources */, 383 | 4D867CB71AD6781200681331 /* AppDelegate.swift in Sources */, 384 | 6569AE371EC11E86002C8D07 /* UrlHelpers.swift in Sources */, 385 | 6569AE681EC23C88002C8D07 /* HeliumPanel.swift in Sources */, 386 | ); 387 | runOnlyForDeploymentPostprocessing = 0; 388 | }; 389 | 4D867CBF1AD6781200681331 /* Sources */ = { 390 | isa = PBXSourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | 6569AE381EC13B34002C8D07 /* StringHelpers.swift in Sources */, 394 | 6569AE391EC13B34002C8D07 /* UrlHelpers.swift in Sources */, 395 | 4D8DAEB31C3A427D00B212EC /* HeliumTests.swift in Sources */, 396 | ); 397 | runOnlyForDeploymentPostprocessing = 0; 398 | }; 399 | /* End PBXSourcesBuildPhase section */ 400 | 401 | /* Begin PBXTargetDependency section */ 402 | 27199ABD1BE422AC00E02297 /* PBXTargetDependency */ = { 403 | isa = PBXTargetDependency; 404 | target = 27199AAF1BE422AC00E02297 /* HeliumShareExtension */; 405 | targetProxy = 27199ABC1BE422AC00E02297 /* PBXContainerItemProxy */; 406 | }; 407 | 4D867CC51AD6781200681331 /* PBXTargetDependency */ = { 408 | isa = PBXTargetDependency; 409 | target = 4D867CB01AD6781200681331 /* Helium */; 410 | targetProxy = 4D867CC41AD6781200681331 /* PBXContainerItemProxy */; 411 | }; 412 | /* End PBXTargetDependency section */ 413 | 414 | /* Begin PBXVariantGroup section */ 415 | 27199AB81BE422AC00E02297 /* ShareViewController.xib */ = { 416 | isa = PBXVariantGroup; 417 | children = ( 418 | 27199AB91BE422AC00E02297 /* Base */, 419 | ); 420 | name = ShareViewController.xib; 421 | sourceTree = ""; 422 | }; 423 | 4D867CBC1AD6781200681331 /* Main.storyboard */ = { 424 | isa = PBXVariantGroup; 425 | children = ( 426 | 4D867CBD1AD6781200681331 /* Base */, 427 | ); 428 | name = Main.storyboard; 429 | sourceTree = ""; 430 | }; 431 | /* End PBXVariantGroup section */ 432 | 433 | /* Begin XCBuildConfiguration section */ 434 | 27199ABF1BE422AC00E02297 /* Debug */ = { 435 | isa = XCBuildConfiguration; 436 | buildSettings = { 437 | COMBINE_HIDPI_IMAGES = YES; 438 | ENABLE_TESTABILITY = YES; 439 | INFOPLIST_FILE = HeliumShareExtension/Info.plist; 440 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks"; 441 | MACOSX_DEPLOYMENT_TARGET = 10.11; 442 | PRODUCT_BUNDLE_IDENTIFIER = com.JadenGeller.Helium.HeliumShareExtension; 443 | PRODUCT_NAME = "$(TARGET_NAME)"; 444 | SKIP_INSTALL = YES; 445 | SWIFT_VERSION = 3.0; 446 | }; 447 | name = Debug; 448 | }; 449 | 27199AC01BE422AC00E02297 /* Release */ = { 450 | isa = XCBuildConfiguration; 451 | buildSettings = { 452 | COMBINE_HIDPI_IMAGES = YES; 453 | INFOPLIST_FILE = HeliumShareExtension/Info.plist; 454 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks"; 455 | MACOSX_DEPLOYMENT_TARGET = 10.11; 456 | PRODUCT_BUNDLE_IDENTIFIER = com.JadenGeller.Helium.HeliumShareExtension; 457 | PRODUCT_NAME = "$(TARGET_NAME)"; 458 | SKIP_INSTALL = YES; 459 | SWIFT_VERSION = 3.0; 460 | }; 461 | name = Release; 462 | }; 463 | 4D867CCB1AD6781200681331 /* Debug */ = { 464 | isa = XCBuildConfiguration; 465 | buildSettings = { 466 | ALWAYS_SEARCH_USER_PATHS = NO; 467 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 468 | CLANG_CXX_LIBRARY = "libc++"; 469 | CLANG_ENABLE_MODULES = YES; 470 | CLANG_ENABLE_OBJC_ARC = YES; 471 | CLANG_WARN_BOOL_CONVERSION = YES; 472 | CLANG_WARN_CONSTANT_CONVERSION = YES; 473 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 474 | CLANG_WARN_EMPTY_BODY = YES; 475 | CLANG_WARN_ENUM_CONVERSION = YES; 476 | CLANG_WARN_INFINITE_RECURSION = YES; 477 | CLANG_WARN_INT_CONVERSION = YES; 478 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 479 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 480 | CLANG_WARN_UNREACHABLE_CODE = YES; 481 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 482 | COPY_PHASE_STRIP = NO; 483 | DEBUG_INFORMATION_FORMAT = dwarf; 484 | ENABLE_STRICT_OBJC_MSGSEND = YES; 485 | ENABLE_TESTABILITY = YES; 486 | GCC_C_LANGUAGE_STANDARD = gnu99; 487 | GCC_DYNAMIC_NO_PIC = NO; 488 | GCC_NO_COMMON_BLOCKS = YES; 489 | GCC_OPTIMIZATION_LEVEL = 0; 490 | GCC_PREPROCESSOR_DEFINITIONS = ( 491 | "DEBUG=1", 492 | "$(inherited)", 493 | ); 494 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 495 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 496 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 497 | GCC_WARN_UNDECLARED_SELECTOR = YES; 498 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 499 | GCC_WARN_UNUSED_FUNCTION = YES; 500 | GCC_WARN_UNUSED_VARIABLE = YES; 501 | MACOSX_DEPLOYMENT_TARGET = 10.10; 502 | MTL_ENABLE_DEBUG_INFO = YES; 503 | ONLY_ACTIVE_ARCH = YES; 504 | SDKROOT = macosx; 505 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 506 | SYMROOT = "$(SRCROOT)/build"; 507 | }; 508 | name = Debug; 509 | }; 510 | 4D867CCC1AD6781200681331 /* Release */ = { 511 | isa = XCBuildConfiguration; 512 | buildSettings = { 513 | ALWAYS_SEARCH_USER_PATHS = NO; 514 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 515 | CLANG_CXX_LIBRARY = "libc++"; 516 | CLANG_ENABLE_MODULES = YES; 517 | CLANG_ENABLE_OBJC_ARC = YES; 518 | CLANG_WARN_BOOL_CONVERSION = YES; 519 | CLANG_WARN_CONSTANT_CONVERSION = YES; 520 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 521 | CLANG_WARN_EMPTY_BODY = YES; 522 | CLANG_WARN_ENUM_CONVERSION = YES; 523 | CLANG_WARN_INFINITE_RECURSION = YES; 524 | CLANG_WARN_INT_CONVERSION = YES; 525 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 526 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 527 | CLANG_WARN_UNREACHABLE_CODE = YES; 528 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 529 | COPY_PHASE_STRIP = NO; 530 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 531 | ENABLE_NS_ASSERTIONS = NO; 532 | ENABLE_STRICT_OBJC_MSGSEND = YES; 533 | GCC_C_LANGUAGE_STANDARD = gnu99; 534 | GCC_NO_COMMON_BLOCKS = YES; 535 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 536 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 537 | GCC_WARN_UNDECLARED_SELECTOR = YES; 538 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 539 | GCC_WARN_UNUSED_FUNCTION = YES; 540 | GCC_WARN_UNUSED_VARIABLE = YES; 541 | MACOSX_DEPLOYMENT_TARGET = 10.10; 542 | MTL_ENABLE_DEBUG_INFO = NO; 543 | SDKROOT = macosx; 544 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 545 | SYMROOT = "$(SRCROOT)/build"; 546 | }; 547 | name = Release; 548 | }; 549 | 4D867CCE1AD6781200681331 /* Debug */ = { 550 | isa = XCBuildConfiguration; 551 | buildSettings = { 552 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 553 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 554 | CLANG_ENABLE_MODULES = YES; 555 | COMBINE_HIDPI_IMAGES = YES; 556 | FRAMEWORK_SEARCH_PATHS = ( 557 | "$(inherited)", 558 | "$(PROJECT_DIR)/Helium", 559 | ); 560 | INFOPLIST_FILE = Helium/Info.plist; 561 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 562 | OTHER_LDFLAGS = "-Wl,-rpath,@loader_path/../Frameworks"; 563 | PRODUCT_BUNDLE_IDENTIFIER = com.JadenGeller.Helium; 564 | PRODUCT_NAME = "$(TARGET_NAME)"; 565 | SWIFT_OBJC_BRIDGING_HEADER = "Helium/Helium-Bridging-Header.h"; 566 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 567 | SWIFT_VERSION = 3.0; 568 | }; 569 | name = Debug; 570 | }; 571 | 4D867CCF1AD6781200681331 /* Release */ = { 572 | isa = XCBuildConfiguration; 573 | buildSettings = { 574 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 575 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 576 | CLANG_ENABLE_MODULES = YES; 577 | COMBINE_HIDPI_IMAGES = YES; 578 | FRAMEWORK_SEARCH_PATHS = ( 579 | "$(inherited)", 580 | "$(PROJECT_DIR)/Helium", 581 | ); 582 | INFOPLIST_FILE = Helium/Info.plist; 583 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 584 | OTHER_LDFLAGS = "-Wl,-rpath,@loader_path/../Frameworks"; 585 | PRODUCT_BUNDLE_IDENTIFIER = com.JadenGeller.Helium; 586 | PRODUCT_NAME = "$(TARGET_NAME)"; 587 | SWIFT_OBJC_BRIDGING_HEADER = "Helium/Helium-Bridging-Header.h"; 588 | SWIFT_VERSION = 3.0; 589 | }; 590 | name = Release; 591 | }; 592 | 4D867CD11AD6781200681331 /* Debug */ = { 593 | isa = XCBuildConfiguration; 594 | buildSettings = { 595 | BUNDLE_LOADER = "$(TEST_HOST)"; 596 | CLANG_ENABLE_MODULES = YES; 597 | COMBINE_HIDPI_IMAGES = YES; 598 | FRAMEWORK_SEARCH_PATHS = ( 599 | "$(DEVELOPER_FRAMEWORKS_DIR)", 600 | "$(inherited)", 601 | ); 602 | GCC_PREPROCESSOR_DEFINITIONS = ( 603 | "DEBUG=1", 604 | "$(inherited)", 605 | ); 606 | INFOPLIST_FILE = HeliumTests/Info.plist; 607 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 608 | PRODUCT_BUNDLE_IDENTIFIER = "com.JadenGeller.$(PRODUCT_NAME:rfc1034identifier)"; 609 | PRODUCT_NAME = "$(TARGET_NAME)"; 610 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 611 | SWIFT_VERSION = 3.0; 612 | }; 613 | name = Debug; 614 | }; 615 | 4D867CD21AD6781200681331 /* Release */ = { 616 | isa = XCBuildConfiguration; 617 | buildSettings = { 618 | BUNDLE_LOADER = "$(TEST_HOST)"; 619 | CLANG_ENABLE_MODULES = YES; 620 | COMBINE_HIDPI_IMAGES = YES; 621 | FRAMEWORK_SEARCH_PATHS = ( 622 | "$(DEVELOPER_FRAMEWORKS_DIR)", 623 | "$(inherited)", 624 | ); 625 | INFOPLIST_FILE = HeliumTests/Info.plist; 626 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 627 | PRODUCT_BUNDLE_IDENTIFIER = "com.JadenGeller.$(PRODUCT_NAME:rfc1034identifier)"; 628 | PRODUCT_NAME = "$(TARGET_NAME)"; 629 | SWIFT_VERSION = 3.0; 630 | }; 631 | name = Release; 632 | }; 633 | /* End XCBuildConfiguration section */ 634 | 635 | /* Begin XCConfigurationList section */ 636 | 27199AC11BE422AC00E02297 /* Build configuration list for PBXNativeTarget "HeliumShareExtension" */ = { 637 | isa = XCConfigurationList; 638 | buildConfigurations = ( 639 | 27199ABF1BE422AC00E02297 /* Debug */, 640 | 27199AC01BE422AC00E02297 /* Release */, 641 | ); 642 | defaultConfigurationIsVisible = 0; 643 | defaultConfigurationName = Release; 644 | }; 645 | 4D867CAC1AD6781200681331 /* Build configuration list for PBXProject "Helium" */ = { 646 | isa = XCConfigurationList; 647 | buildConfigurations = ( 648 | 4D867CCB1AD6781200681331 /* Debug */, 649 | 4D867CCC1AD6781200681331 /* Release */, 650 | ); 651 | defaultConfigurationIsVisible = 0; 652 | defaultConfigurationName = Release; 653 | }; 654 | 4D867CCD1AD6781200681331 /* Build configuration list for PBXNativeTarget "Helium" */ = { 655 | isa = XCConfigurationList; 656 | buildConfigurations = ( 657 | 4D867CCE1AD6781200681331 /* Debug */, 658 | 4D867CCF1AD6781200681331 /* Release */, 659 | ); 660 | defaultConfigurationIsVisible = 0; 661 | defaultConfigurationName = Release; 662 | }; 663 | 4D867CD01AD6781200681331 /* Build configuration list for PBXNativeTarget "HeliumTests" */ = { 664 | isa = XCConfigurationList; 665 | buildConfigurations = ( 666 | 4D867CD11AD6781200681331 /* Debug */, 667 | 4D867CD21AD6781200681331 /* Release */, 668 | ); 669 | defaultConfigurationIsVisible = 0; 670 | defaultConfigurationName = Release; 671 | }; 672 | /* End XCConfigurationList section */ 673 | }; 674 | rootObject = 4D867CA91AD6781200681331 /* Project object */; 675 | } 676 | --------------------------------------------------------------------------------