diff --git a/.gitignore b/.gitignore
index 630bd0b..5321c02 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@ build/
# Cocoapods
Pods
+
+# Editor.
+*~
diff --git a/Demo/Classes/ViewController.m b/Demo/Classes/ViewController.m
index a074f4d..ac64922 100644
--- a/Demo/Classes/ViewController.m
+++ b/Demo/Classes/ViewController.m
@@ -14,14 +14,14 @@ @implementation ViewController
- (void)pushWebViewController {
- NSURL *URL = [NSURL URLWithString:@"http://samvermette.com"];
+ NSURL *URL = [NSURL URLWithString:@"https://archive.org"];
SVWebViewController *webViewController = [[SVWebViewController alloc] initWithURL:URL];
[self.navigationController pushViewController:webViewController animated:YES];
}
- (void)presentWebViewController {
- NSURL *URL = [NSURL URLWithString:@"http://samvermette.com"];
+ NSURL *URL = [NSURL URLWithString:@"https://archive.org"];
SVModalWebViewController *webViewController = [[SVModalWebViewController alloc] initWithURL:URL];
webViewController.modalPresentationStyle = UIModalPresentationPageSheet;
[self presentViewController:webViewController animated:YES completion:NULL];
diff --git a/Demo/SVWeb-Info.plist b/Demo/SVWeb-Info.plist
index 44be994..a3443f4 100644
--- a/Demo/SVWeb-Info.plist
+++ b/Demo/SVWeb-Info.plist
@@ -28,5 +28,11 @@
MainWindow
NSMainNibFile~ipad
MainWindow-iPad
+ LSApplicationQueriesSchemes
+
+ firefox
+ googlechrome
+ googlechromes
+
diff --git a/Demo/SVWeb.xcodeproj/project.pbxproj b/Demo/SVWeb.xcodeproj/project.pbxproj
index 9072982..539475a 100755
--- a/Demo/SVWeb.xcodeproj/project.pbxproj
+++ b/Demo/SVWeb.xcodeproj/project.pbxproj
@@ -28,6 +28,10 @@
28AD73600D9D9599002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD735F0D9D9599002E5188 /* MainWindow.xib */; };
28C286E10D94DF7D0034E888 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28C286E00D94DF7D0034E888 /* ViewController.m */; };
28F335F11007B36200424DE2 /* ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28F335F01007B36200424DE2 /* ViewController.xib */; };
+ 28FBEDBB1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad.png in Resources */ = {isa = PBXBuildFile; fileRef = 28FBEDB61BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad.png */; };
+ 28FBEDBC1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 28FBEDB71BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad@2x.png */; };
+ 28FBEDBD1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox.m in Sources */ = {isa = PBXBuildFile; fileRef = 28FBEDB91BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox.m */; };
+ 28FBEDBE1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 28FBEDBA1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox@2x.png */; };
D53D8F1316A8688600711E30 /* SVWebViewController.strings in Resources */ = {isa = PBXBuildFile; fileRef = D53D8F1516A8688600711E30 /* SVWebViewController.strings */; };
D5FA63C516A8707A0087531C /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D5FA63C416A8707A0087531C /* Default-568h@2x.png */; };
/* End PBXBuildFile section */
@@ -65,6 +69,11 @@
28C286DF0D94DF7D0034E888 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
28C286E00D94DF7D0034E888 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
28F335F01007B36200424DE2 /* ViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ViewController.xib; path = ../ViewController.xib; sourceTree = ""; };
+ 28FBEDB61BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SVWebViewControllerActivityFirefox-iPad.png"; sourceTree = ""; };
+ 28FBEDB71BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SVWebViewControllerActivityFirefox-iPad@2x.png"; sourceTree = ""; };
+ 28FBEDB81BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVWebViewControllerActivityFirefox.h; sourceTree = ""; };
+ 28FBEDB91BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SVWebViewControllerActivityFirefox.m; sourceTree = ""; };
+ 28FBEDBA1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SVWebViewControllerActivityFirefox@2x.png"; sourceTree = ""; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
431F485D17145A510045AA32 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/SVWebViewController.strings; sourceTree = ""; };
627D469418D9EA4300E514BB /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/SVWebViewController.strings; sourceTree = ""; };
@@ -162,12 +171,25 @@
children = (
22DBB6681831E05D0008887C /* SVWebViewControllerActivity.h */,
22DBB6691831E05D0008887C /* SVWebViewControllerActivity.m */,
+ 28FBEDB51BFA7DC300BD2A8A /* Firefox */,
22AAF0B01831F52F00AB15C4 /* Safari */,
22AAF0AA1831F52F00AB15C4 /* Chrome */,
);
path = UIActivities;
sourceTree = "";
};
+ 28FBEDB51BFA7DC300BD2A8A /* Firefox */ = {
+ isa = PBXGroup;
+ children = (
+ 28FBEDB61BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad.png */,
+ 28FBEDB71BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad@2x.png */,
+ 28FBEDB81BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox.h */,
+ 28FBEDB91BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox.m */,
+ 28FBEDBA1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox@2x.png */,
+ );
+ path = Firefox;
+ sourceTree = "";
+ };
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
isa = PBXGroup;
children = (
@@ -287,6 +309,7 @@
buildActionMask = 2147483647;
files = (
28AD73600D9D9599002E5188 /* MainWindow.xib in Resources */,
+ 28FBEDBC1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad@2x.png in Resources */,
22AAF0BA1831F52F00AB15C4 /* SVWebViewControllerActivitySafari-iPad.png in Resources */,
22AAF0BB1831F52F00AB15C4 /* SVWebViewControllerActivitySafari-iPad@2x.png in Resources */,
22AAF0B71831F52F00AB15C4 /* SVWebViewControllerActivityChrome-iPad@2x.png in Resources */,
@@ -297,8 +320,10 @@
22AAF0BD1831F52F00AB15C4 /* SVWebViewControllerActivitySafari@2x.png in Resources */,
22AAF0BF1831F5B300AB15C4 /* README.md in Resources */,
D53D8F1316A8688600711E30 /* SVWebViewController.strings in Resources */,
+ 28FBEDBE1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox@2x.png in Resources */,
22AAF0B91831F52F00AB15C4 /* SVWebViewControllerActivityChrome@2x.png in Resources */,
D5FA63C516A8707A0087531C /* Default-568h@2x.png in Resources */,
+ 28FBEDBB1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox-iPad.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -316,6 +341,7 @@
221C80AF13BBDA2F005F0AB8 /* SVWebViewController.m in Sources */,
22F087701458794B003ECD31 /* SVModalWebViewController.m in Sources */,
22AAF0B81831F52F00AB15C4 /* SVWebViewControllerActivityChrome.m in Sources */,
+ 28FBEDBD1BFA7DC300BD2A8A /* SVWebViewControllerActivityFirefox.m in Sources */,
22AAF0BC1831F52F00AB15C4 /* SVWebViewControllerActivitySafari.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
diff --git a/README.md b/README.md
index 6e69359..4b79bb7 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ SVWebViewController is a simple inline browser for your iOS 7 app.
* iPhone and iPad distinct UIs
* full landscape orientation support
* back, forward, stop/refresh and share buttons
-* Open in Safari and Chrome UIActivities
+* Open in Safari, Firefox, and Chrome UIActivities
* navbar title set to the currently visible web page
* talks with `setNetworkActivityIndicatorVisible`
@@ -44,7 +44,7 @@ SVModalWebViewController *webViewController = [[SVModalWebViewController alloc]
### SVWebViewControllerActivity
-Starting in iOS 6 Apple uses `UIActivity` to let you show additional sharing methods in share sheets. `SVWebViewController` comes with "Open in Safari" and "Open in Chrome" activities. You can easily add your own activity by subclassing `SVWebViewControllerActivity` which takes care of a few things automatically for you. Have a look at the Safari and Chrome activities for implementation examples. Feel free to send it as a pull request once you're done!
+Starting in iOS 6 Apple uses `UIActivity` to let you show additional sharing methods in share sheets. `SVWebViewController` comes with "Open in Safari", "Open in Firefox", and "Open in Chrome" activities. You can easily add your own activity by subclassing `SVWebViewControllerActivity` which takes care of a few things automatically for you. Have a look at the Safari, Firefox, and Chrome activities for implementation examples. Feel free to send it as a pull request once you're done!
## Credits
diff --git a/SVWebViewController/.gitignore b/SVWebViewController/.gitignore
new file mode 100644
index 0000000..b25c15b
--- /dev/null
+++ b/SVWebViewController/.gitignore
@@ -0,0 +1 @@
+*~
diff --git a/SVWebViewController/SVWebViewController.m b/SVWebViewController/SVWebViewController.m
index b9b2aea..39b162b 100644
--- a/SVWebViewController/SVWebViewController.m
+++ b/SVWebViewController/SVWebViewController.m
@@ -8,6 +8,7 @@
#import "SVWebViewControllerActivityChrome.h"
#import "SVWebViewControllerActivitySafari.h"
+#import "SVWebViewControllerActivityFirefox.h"
#import "SVWebViewController.h"
@interface SVWebViewController ()
@@ -281,7 +282,11 @@ - (void)stopTapped:(UIBarButtonItem *)sender {
- (void)actionButtonTapped:(id)sender {
NSURL *url = self.webView.request.URL ? self.webView.request.URL : self.request.URL;
if (url != nil) {
- NSArray *activities = @[[SVWebViewControllerActivitySafari new], [SVWebViewControllerActivityChrome new]];
+ NSArray *activities = @[
+ [SVWebViewControllerActivitySafari new],
+ [SVWebViewControllerActivityChrome new],
+ [SVWebViewControllerActivityFirefox new]
+ ];
if ([[url absoluteString] hasPrefix:@"file:///"]) {
UIDocumentInteractionController *dc = [UIDocumentInteractionController interactionControllerWithURL:url];
diff --git a/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox-iPad.png b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox-iPad.png
new file mode 100644
index 0000000..56fb64f
Binary files /dev/null and b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox-iPad.png differ
diff --git a/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox-iPad@2x.png b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox-iPad@2x.png
new file mode 100644
index 0000000..e1b047d
Binary files /dev/null and b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox-iPad@2x.png differ
diff --git a/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox.h b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox.h
new file mode 100644
index 0000000..a006e51
--- /dev/null
+++ b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox.h
@@ -0,0 +1,9 @@
+// Copyright 2013 Sam Vermette. All rights reserved.
+//
+// https://github.com/samvermette/SVWebViewController
+
+#import "SVWebViewControllerActivity.h"
+
+@interface SVWebViewControllerActivityFirefox : SVWebViewControllerActivity
+
+@end
diff --git a/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox.m b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox.m
new file mode 100644
index 0000000..81a6ab4
--- /dev/null
+++ b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox.m
@@ -0,0 +1,50 @@
+// Created by Sam Vermette on 11 Nov, 2013.
+// Copyright 2013 Sam Vermette. All rights reserved.
+//
+// https://github.com/samvermette/SVWebViewController
+
+#import "SVWebViewControllerActivityFirefox.h"
+
+@implementation SVWebViewControllerActivityFirefox
+
+- (NSString *)activityTitle {
+ return NSLocalizedStringFromTable(@"Open in Firefox", @"SVWebViewController", nil);
+}
+
+- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
+ for (id activityItem in activityItems) {
+ if ([activityItem isKindOfClass:[NSURL class]] && [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"firefox://"]]) {
+ return YES;
+ }
+ }
+ return NO;
+}
+
+static NSString *encodeByAddingPercentEscapes(NSString *string) {
+ NSString *encodedString = (NSString *)CFBridgingRelease
+ (CFURLCreateStringByAddingPercentEscapes
+ (kCFAllocatorDefault,
+ (CFStringRef)string,
+ NULL,
+ (CFStringRef)@"!*'();:@&=+$,/?%#[]",
+ kCFStringEncodingUTF8));
+ return encodedString;
+}
+
+- (void)performActivity {
+ NSURL *inputURL = self.URLToOpen;
+ NSString *scheme = inputURL.scheme;
+
+ if (![scheme isEqualToString:@"http"] && ![scheme isEqualToString:@"https"]) {
+ return;
+ }
+
+ NSString *urlString = [inputURL absoluteString];
+ NSString *firefoxURLString = [NSString stringWithFormat: @"firefox://open-url?url=%@", encodeByAddingPercentEscapes(urlString)];
+ NSURL *firefoxURL = [NSURL URLWithString: firefoxURLString];
+
+ // Open the URL with Firefox.
+ [[UIApplication sharedApplication] openURL:firefoxURL];
+}
+
+@end
diff --git a/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox@2x.png b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox@2x.png
new file mode 100644
index 0000000..7649752
Binary files /dev/null and b/SVWebViewController/UIActivities/Firefox/SVWebViewControllerActivityFirefox@2x.png differ
diff --git a/SVWebViewController/da.lproj/SVWebViewController.strings b/SVWebViewController/da.lproj/SVWebViewController.strings
index 56b673e..ea1604b 100644
--- a/SVWebViewController/da.lproj/SVWebViewController.strings
+++ b/SVWebViewController/da.lproj/SVWebViewController.strings
@@ -1,5 +1,6 @@
// Copyright (c) 2013 Anders Fogh Eriksen
"Open in Safari" = "Åbn i Safari";
"Open in Chrome" = "Åbn i Chrome";
+"Open in Firefox" = "Åbn i Firefox";
"Copy Link" = "Kopier Link";
-"Mail Link to this Page" = "Mail Link til denne side";
\ No newline at end of file
+"Mail Link to this Page" = "Mail Link til denne side";
diff --git a/SVWebViewController/de.lproj/SVWebViewController.strings b/SVWebViewController/de.lproj/SVWebViewController.strings
index 71ee711..cb79451 100644
--- a/SVWebViewController/de.lproj/SVWebViewController.strings
+++ b/SVWebViewController/de.lproj/SVWebViewController.strings
@@ -1,2 +1,3 @@
"Open in Safari" = "In Safari öffnen";
-"Open in Chrome" = "In Chrome öffnen";
\ No newline at end of file
+"Open in Chrome" = "In Chrome öffnen";
+"Open in Firefox" = "In Firefox öffnen";
diff --git a/SVWebViewController/en.lproj/SVWebViewController.strings b/SVWebViewController/en.lproj/SVWebViewController.strings
index 77fdeb3..012388e 100644
--- a/SVWebViewController/en.lproj/SVWebViewController.strings
+++ b/SVWebViewController/en.lproj/SVWebViewController.strings
@@ -1,3 +1,4 @@
// Copyright (c) 2013 Alex Ruperez
"Open in Safari" = "Open in Safari";
-"Open in Chrome" = "Open in Chrome";
\ No newline at end of file
+"Open in Chrome" = "Open in Chrome";
+"Open in Firefox" = "Open in Firefox";
diff --git a/SVWebViewController/es-ES.lproj/SVWebViewController.strings b/SVWebViewController/es-ES.lproj/SVWebViewController.strings
index 1021f64..0e0f7f2 100644
--- a/SVWebViewController/es-ES.lproj/SVWebViewController.strings
+++ b/SVWebViewController/es-ES.lproj/SVWebViewController.strings
@@ -1,3 +1,4 @@
// Copyright (c) 2013 Alex Ruperez
"Open in Safari" = "Abrir en Safari";
-"Open in Chrome" = "Abrir en Chrome";
\ No newline at end of file
+"Open in Chrome" = "Abrir en Chrome";
+"Open in Firefox" = "Abrir en Firefox";
diff --git a/SVWebViewController/es.lproj/SVWebViewController.strings b/SVWebViewController/es.lproj/SVWebViewController.strings
index 1021f64..0e0f7f2 100644
--- a/SVWebViewController/es.lproj/SVWebViewController.strings
+++ b/SVWebViewController/es.lproj/SVWebViewController.strings
@@ -1,3 +1,4 @@
// Copyright (c) 2013 Alex Ruperez
"Open in Safari" = "Abrir en Safari";
-"Open in Chrome" = "Abrir en Chrome";
\ No newline at end of file
+"Open in Chrome" = "Abrir en Chrome";
+"Open in Firefox" = "Abrir en Firefox";
diff --git a/SVWebViewController/fr.lproj/SVWebViewController.strings b/SVWebViewController/fr.lproj/SVWebViewController.strings
index 6fff9d7..1ae2b17 100644
--- a/SVWebViewController/fr.lproj/SVWebViewController.strings
+++ b/SVWebViewController/fr.lproj/SVWebViewController.strings
@@ -1,3 +1,4 @@
// Copyright (c) 2013 Benjamin Michotte
"Open in Safari" = "Ouvrir dans Safari";
-"Open in Chrome" = "Ouvrir dans Chrome";
\ No newline at end of file
+"Open in Chrome" = "Ouvrir dans Chrome";
+"Open in Firefox" = "Ouvrir dans Firefox";
diff --git a/SVWebViewController/ja.lproj/SVWebViewController.strings b/SVWebViewController/ja.lproj/SVWebViewController.strings
index 2dd560b..e5af636 100644
--- a/SVWebViewController/ja.lproj/SVWebViewController.strings
+++ b/SVWebViewController/ja.lproj/SVWebViewController.strings
@@ -1,2 +1,3 @@
"Open in Safari" = "Safariで開く";
"Open in Chrome" = "Chromeで開く";
+"Open in Firefox" = "Firefoxで開く";
diff --git a/SVWebViewController/pt.lproj/SVWebViewController.strings b/SVWebViewController/pt.lproj/SVWebViewController.strings
index 4857973..944565a 100644
--- a/SVWebViewController/pt.lproj/SVWebViewController.strings
+++ b/SVWebViewController/pt.lproj/SVWebViewController.strings
@@ -1,2 +1,3 @@
"Open in Safari" = "Abrir no Safari";
-"Open in Chrome" = "Abrir no Chrome";
\ No newline at end of file
+"Open in Chrome" = "Abrir no Chrome";
+"Open in Firefox" = "Abrir no Firefox";
diff --git a/SVWebViewController/zh-Hans.lproj/SVWebViewController.strings b/SVWebViewController/zh-Hans.lproj/SVWebViewController.strings
index 5926fea..1d6924a 100644
--- a/SVWebViewController/zh-Hans.lproj/SVWebViewController.strings
+++ b/SVWebViewController/zh-Hans.lproj/SVWebViewController.strings
@@ -1,6 +1,7 @@
// Copyright (c) 2013 James Stout
"Open in Safari" = "在Safari中打开";
"Open in Chrome" = "在Chrome中打开";
+"Open in Firefox" = "在Firefox中打开";
"Copy Link" = "复制网页链接";
"Mail Link to this Page" = "以电邮传送此页链接";
"Cancel"="取消";
diff --git a/SVWebViewController/zh-Hant.lproj/SVWebViewController.strings b/SVWebViewController/zh-Hant.lproj/SVWebViewController.strings
index af4f4a4..af1180c 100644
--- a/SVWebViewController/zh-Hant.lproj/SVWebViewController.strings
+++ b/SVWebViewController/zh-Hant.lproj/SVWebViewController.strings
@@ -1,3 +1,4 @@
// Copyright (c) 2013 James Stout
"Open in Safari" = "打開Safari";
-"Open in Chrome" = "打開Chrome";
\ No newline at end of file
+"Open in Chrome" = "打開Chrome";
+"Open in Firefox" = "打開Firefox";