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