diff --git a/Pixiview.iOS.OpenExtension/Entitlements.plist b/Pixiview.iOS.OpenExtension/Entitlements.plist
new file mode 100644
index 0000000..9ae5993
--- /dev/null
+++ b/Pixiview.iOS.OpenExtension/Entitlements.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Pixiview.iOS.OpenExtension/Info.plist b/Pixiview.iOS.OpenExtension/Info.plist
new file mode 100644
index 0000000..0e3448a
--- /dev/null
+++ b/Pixiview.iOS.OpenExtension/Info.plist
@@ -0,0 +1,36 @@
+
+
+
+
+ CFBundleDisplayName
+ Pixiview.iOS.OpenExtension
+ CFBundleName
+ Pixiview.iOS.OpenExtension
+ CFBundleIdentifier
+ org.tsanie.Pixiview.OpenExtension
+ CFBundleDevelopmentRegion
+ en
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ XPC!
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 13.4
+ NSExtension
+
+ NSExtensionAttributes
+
+ NSExtensionActivationRule
+ TRUEPREDICATE
+
+ NSExtensionPrincipalClass
+ OpenExtensionHandler
+ NSExtensionPointIdentifier
+ com.apple.share-services
+
+
+
diff --git a/Pixiview.iOS.OpenExtension/Pixiview.iOS.OpenExtension.csproj b/Pixiview.iOS.OpenExtension/Pixiview.iOS.OpenExtension.csproj
new file mode 100644
index 0000000..532e219
--- /dev/null
+++ b/Pixiview.iOS.OpenExtension/Pixiview.iOS.OpenExtension.csproj
@@ -0,0 +1,100 @@
+
+
+
+ Debug
+ iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}
+ {EE2C853D-36AF-4FDB-B1AD-8E90477E2198};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Library
+ Pixiview.iOS.OpenExtension
+ Pixiview.iOS.OpenExtension
+ Resources
+
+
+ true
+ full
+ false
+ bin\iPhoneSimulator\Debug
+ DEBUG;
+ prompt
+ 4
+ iPhone Developer
+ true
+ true
+ true
+ 28687
+ None
+ x86_64
+ NSUrlSessionHandler
+ false
+
+
+
+ pdbonly
+ true
+ bin\iPhone\Release
+
+ prompt
+ 4
+ iPhone Developer
+ true
+ true
+ Entitlements.plist
+ SdkOnly
+ ARM64
+ NSUrlSessionHandler
+
+
+
+ pdbonly
+ true
+ bin\iPhoneSimulator\Release
+
+ prompt
+ 4
+ iPhone Developer
+ true
+ None
+ x86_64
+ NSUrlSessionHandler
+
+
+
+ true
+ full
+ false
+ bin\iPhone\Debug
+ DEBUG;
+ prompt
+ 4
+ iPhone Developer
+ true
+ true
+ true
+ true
+ true
+ Entitlements.plist
+ 13559
+ SdkOnly
+ ARM64
+ NSUrlSessionHandler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Pixiview.iOS.OpenExtension/ShareViewController.cs b/Pixiview.iOS.OpenExtension/ShareViewController.cs
new file mode 100644
index 0000000..9e7ad5b
--- /dev/null
+++ b/Pixiview.iOS.OpenExtension/ShareViewController.cs
@@ -0,0 +1,46 @@
+using Foundation;
+using MobileCoreServices;
+using UIKit;
+
+namespace Pixiview.iOS.OpenExtension
+{
+ [Register("OpenExtensionHandler")]
+ public class OpenExtensionHandler : NSExtensionRequestHandling
+ {
+
+ public override void BeginRequestWithExtensionContext(NSExtensionContext context)
+ {
+ bool urlFound = false;
+
+ foreach (var item in context.InputItems)
+ {
+ foreach (var provider in item.Attachments)
+ {
+ if (provider.HasItemConformingTo(UTType.URL))
+ {
+ provider.LoadItem(UTType.URL, null, (obj, error) =>
+ {
+ var url = obj as NSUrl;
+ if (url != null)
+ {
+ var uri = NSUrl.FromString($"pixiview://open{url.Path}");
+ System.Diagnostics.Debug.WriteLine($"open url: {uri}");
+ BeginInvokeOnMainThread(() => UIApplication.SharedApplication.OpenUrl(uri));
+ }
+ });
+
+ urlFound = true;
+ break;
+ }
+ }
+
+ if (urlFound)
+ {
+ break;
+ }
+ }
+
+ context.CompleteRequest(new NSExtensionItem[0], null);
+ }
+ }
+}
diff --git a/Pixiview.iOS/Pixiview.iOS.csproj b/Pixiview.iOS/Pixiview.iOS.csproj
index 872ce70..b23c6e3 100644
--- a/Pixiview.iOS/Pixiview.iOS.csproj
+++ b/Pixiview.iOS/Pixiview.iOS.csproj
@@ -149,6 +149,11 @@
{7F310047-BCBB-45F5-BD16-F246BA72AF73}
Pixiview
+
+ true
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}
+ Pixiview.iOS.OpenExtension
+
diff --git a/Pixiview.sln b/Pixiview.sln
index 3e218cc..4ff29a3 100644
--- a/Pixiview.sln
+++ b/Pixiview.sln
@@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pixiview", "Pixiview\Pixivi
EndProject
Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "Pixiview.Android", "Pixiview.Android\Pixiview.Android.csproj", "{EEE719E5-36B4-4024-84F5-F71DF07B3308}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pixiview.iOS.OpenExtension", "Pixiview.iOS.OpenExtension\Pixiview.iOS.OpenExtension.csproj", "{618D8350-495C-42D0-9DAC-87ADD36AC727}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -53,5 +55,17 @@ Global
{EEE719E5-36B4-4024-84F5-F71DF07B3308}.Debug|iPhone.Build.0 = Debug|Any CPU
{EEE719E5-36B4-4024-84F5-F71DF07B3308}.Release|iPhone.ActiveCfg = Release|Any CPU
{EEE719E5-36B4-4024-84F5-F71DF07B3308}.Release|iPhone.Build.0 = Release|Any CPU
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Release|Any CPU.Build.0 = Release|iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Debug|iPhone.ActiveCfg = Debug|iPhone
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Debug|iPhone.Build.0 = Debug|iPhone
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Release|iPhone.ActiveCfg = Release|iPhone
+ {618D8350-495C-42D0-9DAC-87ADD36AC727}.Release|iPhone.Build.0 = Release|iPhone
EndGlobalSection
EndGlobal