feat(ActionExtension): Improve ActionRequestHandler and Action.js, rename Extension
This commit is contained in:
parent
09cec923bb
commit
89c808ea11
|
@ -1,91 +0,0 @@
|
|||
//
|
||||
// ActionRequestHandler.swift
|
||||
// FollowActionExtension
|
||||
//
|
||||
// Created by Marcus Kida on 03.01.23.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import MobileCoreServices
|
||||
import UniformTypeIdentifiers
|
||||
|
||||
class ActionRequestHandler: NSObject, NSExtensionRequestHandling {
|
||||
|
||||
var extensionContext: NSExtensionContext?
|
||||
|
||||
func beginRequest(with context: NSExtensionContext) {
|
||||
// Do not call super in an Action extension with no user interface
|
||||
self.extensionContext = context
|
||||
|
||||
var found = false
|
||||
|
||||
// Find the item containing the results from the JavaScript preprocessing.
|
||||
outer:
|
||||
for item in context.inputItems as! [NSExtensionItem] {
|
||||
if let attachments = item.attachments {
|
||||
for itemProvider in attachments {
|
||||
if itemProvider.hasItemConformingToTypeIdentifier(UTType.propertyList.identifier) {
|
||||
itemProvider.loadItem(forTypeIdentifier: UTType.propertyList.identifier, options: nil, completionHandler: { (item, error) in
|
||||
guard
|
||||
let dictionary = item as? [String: Any],
|
||||
let res = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? [String: Any]? ?? [:]
|
||||
else {
|
||||
|
||||
self.doneWithResults(
|
||||
["error": "Failed to find username. Are you sure this is a Mastodon Profile page?"]
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
OperationQueue.main.addOperation {
|
||||
self.itemLoadCompletedWithPreprocessingResults(res)
|
||||
}
|
||||
})
|
||||
found = true
|
||||
break outer
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
self.doneWithResults(nil)
|
||||
}
|
||||
}
|
||||
|
||||
func itemLoadCompletedWithPreprocessingResults(_ javaScriptPreprocessingResults: [String: Any]) {
|
||||
guard let username = javaScriptPreprocessingResults["username"] as? String else { return }
|
||||
|
||||
doneWithResults([
|
||||
"openURL": "mastodon://profile/\(username)"
|
||||
])
|
||||
}
|
||||
|
||||
func doneWithResults(_ resultsForJavaScriptFinalizeArg: [String: Any]?) {
|
||||
if let resultsForJavaScriptFinalize = resultsForJavaScriptFinalizeArg {
|
||||
// Construct an NSExtensionItem of the appropriate type to return our
|
||||
// results dictionary in.
|
||||
|
||||
// These will be used as the arguments to the JavaScript finalize()
|
||||
// method.
|
||||
|
||||
let resultsDictionary = [NSExtensionJavaScriptFinalizeArgumentKey: resultsForJavaScriptFinalize]
|
||||
|
||||
let resultsProvider = NSItemProvider(item: resultsDictionary as NSDictionary, typeIdentifier: UTType.propertyList.identifier)
|
||||
|
||||
let resultsItem = NSExtensionItem()
|
||||
resultsItem.attachments = [resultsProvider]
|
||||
|
||||
// Signal that we're complete, returning our results.
|
||||
self.extensionContext!.completeRequest(returningItems: [resultsItem], completionHandler: nil)
|
||||
} else {
|
||||
// We still need to signal that we're done even if we have nothing to
|
||||
// pass back.
|
||||
self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
|
||||
}
|
||||
|
||||
// Don't hold on to this after we finished with it.
|
||||
self.extensionContext = nil
|
||||
}
|
||||
|
||||
}
|
|
@ -29,10 +29,10 @@
|
|||
2A506CF4292CD85800059C37 /* FollowedTagsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A506CF3292CD85800059C37 /* FollowedTagsViewController.swift */; };
|
||||
2A506CF6292D040100059C37 /* HashtagTimelineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A506CF5292D040100059C37 /* HashtagTimelineHeaderView.swift */; };
|
||||
2A64515E29642A8A00CD8B8A /* UniformTypeIdentifiers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A6451022964223800CD8B8A /* UniformTypeIdentifiers.framework */; };
|
||||
2A64516129642A8B00CD8B8A /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2A64516029642A8B00CD8B8A /* Media.xcassets */; };
|
||||
2A64516329642A8B00CD8B8A /* ActionRequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A64516229642A8B00CD8B8A /* ActionRequestHandler.swift */; };
|
||||
2A64516529642A8B00CD8B8A /* Action.js in Resources */ = {isa = PBXBuildFile; fileRef = 2A64516429642A8B00CD8B8A /* Action.js */; };
|
||||
2A64516929642A8B00CD8B8A /* FollowActionExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2A64515D29642A8A00CD8B8A /* FollowActionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
2A64516929642A8B00CD8B8A /* OpenInActionExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2A64515D29642A8A00CD8B8A /* OpenInActionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
2A71F541296DBDA80049F54A /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2A71F53D296DBDA80049F54A /* Media.xcassets */; };
|
||||
2A71F542296DBDA80049F54A /* Action.js in Resources */ = {isa = PBXBuildFile; fileRef = 2A71F53E296DBDA80049F54A /* Action.js */; };
|
||||
2A71F543296DBDA80049F54A /* ActionRequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A71F53F296DBDA80049F54A /* ActionRequestHandler.swift */; };
|
||||
2A76F75C2930D94700B3388D /* HashtagTimelineHeaderViewActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A76F75B2930D94700B3388D /* HashtagTimelineHeaderViewActionButton.swift */; };
|
||||
2A82294F29262EE000D2A1F7 /* AppContext+NextAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A82294E29262EE000D2A1F7 /* AppContext+NextAccount.swift */; };
|
||||
2AB12E4629362F27006BC925 /* DataSourceFacade+Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AB12E4529362F27006BC925 /* DataSourceFacade+Translate.swift */; };
|
||||
|
@ -533,7 +533,7 @@
|
|||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
DB8FABCE26AEC7B2008E5AF4 /* MastodonIntent.appex in Embed Foundation Extensions */,
|
||||
2A64516929642A8B00CD8B8A /* FollowActionExtension.appex in Embed Foundation Extensions */,
|
||||
2A64516929642A8B00CD8B8A /* OpenInActionExtension.appex in Embed Foundation Extensions */,
|
||||
DBC6461C26A170AB00B0E31B /* ShareActionExtension.appex in Embed Foundation Extensions */,
|
||||
DBF8AE1A263293E400C9C23C /* NotificationService.appex in Embed Foundation Extensions */,
|
||||
);
|
||||
|
@ -567,11 +567,11 @@
|
|||
2A506CF3292CD85800059C37 /* FollowedTagsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsViewController.swift; sourceTree = "<group>"; };
|
||||
2A506CF5292D040100059C37 /* HashtagTimelineHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTimelineHeaderView.swift; sourceTree = "<group>"; };
|
||||
2A6451022964223800CD8B8A /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = SDKROOT; };
|
||||
2A64515D29642A8A00CD8B8A /* FollowActionExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = FollowActionExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2A64516029642A8B00CD8B8A /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = "<group>"; };
|
||||
2A64516229642A8B00CD8B8A /* ActionRequestHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionRequestHandler.swift; sourceTree = "<group>"; };
|
||||
2A64516429642A8B00CD8B8A /* Action.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = Action.js; sourceTree = "<group>"; };
|
||||
2A64516629642A8B00CD8B8A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
2A64515D29642A8A00CD8B8A /* OpenInActionExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = OpenInActionExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2A71F53D296DBDA80049F54A /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = "<group>"; };
|
||||
2A71F53E296DBDA80049F54A /* Action.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Action.js; sourceTree = "<group>"; };
|
||||
2A71F53F296DBDA80049F54A /* ActionRequestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionRequestHandler.swift; sourceTree = "<group>"; };
|
||||
2A71F540296DBDA80049F54A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
2A76F75B2930D94700B3388D /* HashtagTimelineHeaderViewActionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTimelineHeaderViewActionButton.swift; sourceTree = "<group>"; };
|
||||
2A82294E29262EE000D2A1F7 /* AppContext+NextAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppContext+NextAccount.swift"; sourceTree = "<group>"; };
|
||||
2AB12E4529362F27006BC925 /* DataSourceFacade+Translate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Translate.swift"; sourceTree = "<group>"; };
|
||||
|
@ -1318,15 +1318,15 @@
|
|||
path = FollowedTags;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2A64515F29642A8B00CD8B8A /* FollowActionExtension */ = {
|
||||
2A71F53C296DBDA80049F54A /* OpenInActionExtension */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2A64516029642A8B00CD8B8A /* Media.xcassets */,
|
||||
2A64516229642A8B00CD8B8A /* ActionRequestHandler.swift */,
|
||||
2A64516429642A8B00CD8B8A /* Action.js */,
|
||||
2A64516629642A8B00CD8B8A /* Info.plist */,
|
||||
2A71F53D296DBDA80049F54A /* Media.xcassets */,
|
||||
2A71F53E296DBDA80049F54A /* Action.js */,
|
||||
2A71F53F296DBDA80049F54A /* ActionRequestHandler.swift */,
|
||||
2A71F540296DBDA80049F54A /* Info.plist */,
|
||||
);
|
||||
path = FollowActionExtension;
|
||||
path = OpenInActionExtension;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2D152A8A25C295B8009AA50C /* Content */ = {
|
||||
|
@ -1865,7 +1865,7 @@
|
|||
DBF8AE14263293E400C9C23C /* NotificationService */,
|
||||
DBC6461326A170AB00B0E31B /* ShareActionExtension */,
|
||||
DB8FABC826AEC7B2008E5AF4 /* MastodonIntent */,
|
||||
2A64515F29642A8B00CD8B8A /* FollowActionExtension */,
|
||||
2A71F53C296DBDA80049F54A /* OpenInActionExtension */,
|
||||
DB427DD325BAA00100D1B89D /* Products */,
|
||||
1EBA4F56E920856A3FC84ACB /* Pods */,
|
||||
3FE14AD363ED19AE7FF210A6 /* Frameworks */,
|
||||
|
@ -1883,7 +1883,7 @@
|
|||
DBF8AE13263293E400C9C23C /* NotificationService.appex */,
|
||||
DBC6461226A170AB00B0E31B /* ShareActionExtension.appex */,
|
||||
DB8FABC626AEC7B2008E5AF4 /* MastodonIntent.appex */,
|
||||
2A64515D29642A8A00CD8B8A /* FollowActionExtension.appex */,
|
||||
2A64515D29642A8A00CD8B8A /* OpenInActionExtension.appex */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
@ -2825,9 +2825,9 @@
|
|||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
2A64515C29642A8A00CD8B8A /* FollowActionExtension */ = {
|
||||
2A64515C29642A8A00CD8B8A /* OpenInActionExtension */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 2A64516A29642A8B00CD8B8A /* Build configuration list for PBXNativeTarget "FollowActionExtension" */;
|
||||
buildConfigurationList = 2A64516A29642A8B00CD8B8A /* Build configuration list for PBXNativeTarget "OpenInActionExtension" */;
|
||||
buildPhases = (
|
||||
2A64515929642A8A00CD8B8A /* Sources */,
|
||||
2A64515A29642A8A00CD8B8A /* Frameworks */,
|
||||
|
@ -2837,9 +2837,9 @@
|
|||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = FollowActionExtension;
|
||||
name = OpenInActionExtension;
|
||||
productName = FollowActionExtension;
|
||||
productReference = 2A64515D29642A8A00CD8B8A /* FollowActionExtension.appex */;
|
||||
productReference = 2A64515D29642A8A00CD8B8A /* OpenInActionExtension.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
DB427DD125BAA00100D1B89D /* Mastodon */ = {
|
||||
|
@ -3057,7 +3057,7 @@
|
|||
DBF8AE12263293E400C9C23C /* NotificationService */,
|
||||
DBC6461126A170AB00B0E31B /* ShareActionExtension */,
|
||||
DB8FABC526AEC7B2008E5AF4 /* MastodonIntent */,
|
||||
2A64515C29642A8A00CD8B8A /* FollowActionExtension */,
|
||||
2A64515C29642A8A00CD8B8A /* OpenInActionExtension */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
@ -3067,8 +3067,8 @@
|
|||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2A64516529642A8B00CD8B8A /* Action.js in Resources */,
|
||||
2A64516129642A8B00CD8B8A /* Media.xcassets in Resources */,
|
||||
2A71F541296DBDA80049F54A /* Media.xcassets in Resources */,
|
||||
2A71F542296DBDA80049F54A /* Action.js in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -3294,7 +3294,7 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2A64516329642A8B00CD8B8A /* ActionRequestHandler.swift in Sources */,
|
||||
2A71F543296DBDA80049F54A /* ActionRequestHandler.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -3760,7 +3760,7 @@
|
|||
/* Begin PBXTargetDependency section */
|
||||
2A64516829642A8B00CD8B8A /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 2A64515C29642A8A00CD8B8A /* FollowActionExtension */;
|
||||
target = 2A64515C29642A8A00CD8B8A /* OpenInActionExtension */;
|
||||
targetProxy = 2A64516729642A8B00CD8B8A /* PBXContainerItemProxy */;
|
||||
};
|
||||
DB427DEA25BAA00100D1B89D /* PBXTargetDependency */ = {
|
||||
|
@ -3929,8 +3929,8 @@
|
|||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = FollowActionExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Follow on Mastodon";
|
||||
INFOPLIST_FILE = OpenInActionExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Open using Mastodon";
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
|
@ -3939,7 +3939,7 @@
|
|||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.FollowActionExtension;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.OpenInActionExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
|
@ -3958,8 +3958,8 @@
|
|||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = FollowActionExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Follow on Mastodon";
|
||||
INFOPLIST_FILE = OpenInActionExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Open using Mastodon";
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
|
@ -3968,7 +3968,7 @@
|
|||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.FollowActionExtension;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.OpenInActionExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
|
@ -3987,8 +3987,8 @@
|
|||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = FollowActionExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Follow on Mastodon";
|
||||
INFOPLIST_FILE = OpenInActionExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Open using Mastodon";
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
|
@ -3997,7 +3997,7 @@
|
|||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.FollowActionExtension;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.OpenInActionExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
|
@ -4016,8 +4016,8 @@
|
|||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = FollowActionExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Follow on Mastodon";
|
||||
INFOPLIST_FILE = OpenInActionExtension/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Open using Mastodon";
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
|
@ -4026,7 +4026,7 @@
|
|||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.FollowActionExtension;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.OpenInActionExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
|
@ -4857,7 +4857,7 @@
|
|||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
2A64516A29642A8B00CD8B8A /* Build configuration list for PBXNativeTarget "FollowActionExtension" */ = {
|
||||
2A64516A29642A8B00CD8B8A /* Build configuration list for PBXNativeTarget "OpenInActionExtension" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2A64516B29642A8B00CD8B8A /* Debug */,
|
||||
|
|
|
@ -1,250 +1,248 @@
|
|||
{
|
||||
"object": {
|
||||
"pins": [
|
||||
{
|
||||
"package": "Alamofire",
|
||||
"repositoryURL": "https://github.com/Alamofire/Alamofire.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "8dd85aee02e39dd280c75eef88ffdb86eed4b07b",
|
||||
"version": "5.6.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "AlamofireImage",
|
||||
"repositoryURL": "https://github.com/Alamofire/AlamofireImage.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "98cbb00ce0ec5fc8e52a5b50a6bfc08d3e5aee10",
|
||||
"version": "4.2.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "CommonOSLog",
|
||||
"repositoryURL": "https://github.com/MainasuK/CommonOSLog",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "c121624a30698e9886efe38aebb36ff51c01b6c2",
|
||||
"version": "0.1.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "FaviconFinder",
|
||||
"repositoryURL": "https://github.com/will-lumley/FaviconFinder.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "1f74844f77f79b95c0bb0130b3a87d4f340e6d3a",
|
||||
"version": "3.3.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "FLAnimatedImage",
|
||||
"repositoryURL": "https://github.com/Flipboard/FLAnimatedImage.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "d4f07b6f164d53c1212c3e54d6460738b1981e9f",
|
||||
"version": "1.0.17"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "FPSIndicator",
|
||||
"repositoryURL": "https://github.com/MainasuK/FPSIndicator.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "e4a5067ccd5293b024c767f09e51056afd4a4796",
|
||||
"version": "1.1.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "Fuzi",
|
||||
"repositoryURL": "https://github.com/cezheng/Fuzi.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "f08c8323da21e985f3772610753bcfc652c2103f",
|
||||
"version": "3.1.3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "KeychainAccess",
|
||||
"repositoryURL": "https://github.com/kishikawakatsumi/KeychainAccess.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "84e546727d66f1adc5439debad16270d0fdd04e7",
|
||||
"version": "4.2.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "Kingfisher",
|
||||
"repositoryURL": "https://github.com/onevcat/Kingfisher.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "44e891bdb61426a95e31492a67c7c0dfad1f87c5",
|
||||
"version": "7.4.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "MetaTextKit",
|
||||
"repositoryURL": "https://github.com/TwidereProject/MetaTextKit.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "dcd5255d6930c2fab408dc8562c577547e477624",
|
||||
"version": "2.2.5"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "NextLevelSessionExporter",
|
||||
"repositoryURL": "https://github.com/NextLevel/NextLevelSessionExporter.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "b6c0cce1aa37fe1547d694f958fac3c3524b74da",
|
||||
"version": "0.4.6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "Nuke",
|
||||
"repositoryURL": "https://github.com/kean/Nuke.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "a002b7fd786f2df2ed4333fe73a9727499fd9d97",
|
||||
"version": "10.11.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "NukeFLAnimatedImagePlugin",
|
||||
"repositoryURL": "https://github.com/kean/Nuke-FLAnimatedImage-Plugin.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "b59c346a7d536336db3b0f12c72c6e53ee709e16",
|
||||
"version": "8.0.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "Pageboy",
|
||||
"repositoryURL": "https://github.com/uias/Pageboy",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "af8fa81788b893205e1ff42ddd88c5b0b315d7c5",
|
||||
"version": "3.7.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "PanModal",
|
||||
"repositoryURL": "https://github.com/slackhq/PanModal.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "b012aecb6b67a8e46369227f893c12544846613f",
|
||||
"version": "1.2.7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "SDWebImage",
|
||||
"repositoryURL": "https://github.com/SDWebImage/SDWebImage.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "3312bf5e67b52fbce7c3caf431b0cda721a9f7bb",
|
||||
"version": "5.14.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "Stripes",
|
||||
"repositoryURL": "https://github.com/eneko/Stripes.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "d533fd44b8043a3abbf523e733599173d6f98c11",
|
||||
"version": "0.2.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "swift-collections",
|
||||
"repositoryURL": "https://github.com/apple/swift-collections.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "f504716c27d2e5d4144fa4794b12129301d17729",
|
||||
"version": "1.0.3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "swift-nio",
|
||||
"repositoryURL": "https://github.com/apple/swift-nio.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "546610d52b19be3e19935e0880bb06b9c03f5cef",
|
||||
"version": "1.14.4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "swift-nio-zlib-support",
|
||||
"repositoryURL": "https://github.com/apple/swift-nio-zlib-support.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "37760e9a52030bb9011972c5213c3350fa9d41fd",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "SwiftSoup",
|
||||
"repositoryURL": "https://github.com/scinfu/SwiftSoup.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "6778575285177365cbad3e5b8a72f2a20583cfec",
|
||||
"version": "2.4.3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "Introspect",
|
||||
"repositoryURL": "https://github.com/siteline/SwiftUI-Introspect.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "f2616860a41f9d9932da412a8978fec79c06fe24",
|
||||
"version": "0.1.4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "TabBarPager",
|
||||
"repositoryURL": "https://github.com/TwidereProject/TabBarPager.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "488aa66d157a648901b61721212c0dec23d27ee5",
|
||||
"version": "0.1.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "Tabman",
|
||||
"repositoryURL": "https://github.com/uias/Tabman",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "4a4f7c755b875ffd4f9ef10d67a67883669d2465",
|
||||
"version": "2.13.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "TOCropViewController",
|
||||
"repositoryURL": "https://github.com/TimOliver/TOCropViewController.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "d0470491f56e734731bbf77991944c0dfdee3e0e",
|
||||
"version": "2.6.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "UIHostingConfigurationBackport",
|
||||
"repositoryURL": "https://github.com/woxtu/UIHostingConfigurationBackport.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "6091f2d38faa4b24fc2ca0389c651e2f666624a3",
|
||||
"version": "0.1.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "UITextView+Placeholder",
|
||||
"repositoryURL": "https://github.com/MainasuK/UITextView-Placeholder.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "20f513ded04a040cdf5467f0891849b1763ede3b",
|
||||
"version": "1.4.1"
|
||||
}
|
||||
"pins" : [
|
||||
{
|
||||
"identity" : "alamofire",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Alamofire/Alamofire.git",
|
||||
"state" : {
|
||||
"revision" : "8dd85aee02e39dd280c75eef88ffdb86eed4b07b",
|
||||
"version" : "5.6.2"
|
||||
}
|
||||
]
|
||||
},
|
||||
"version": 1
|
||||
},
|
||||
{
|
||||
"identity" : "alamofireimage",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Alamofire/AlamofireImage.git",
|
||||
"state" : {
|
||||
"revision" : "98cbb00ce0ec5fc8e52a5b50a6bfc08d3e5aee10",
|
||||
"version" : "4.2.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "commonoslog",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/MainasuK/CommonOSLog",
|
||||
"state" : {
|
||||
"revision" : "c121624a30698e9886efe38aebb36ff51c01b6c2",
|
||||
"version" : "0.1.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "faviconfinder",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/will-lumley/FaviconFinder.git",
|
||||
"state" : {
|
||||
"revision" : "1f74844f77f79b95c0bb0130b3a87d4f340e6d3a",
|
||||
"version" : "3.3.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "flanimatedimage",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/Flipboard/FLAnimatedImage.git",
|
||||
"state" : {
|
||||
"revision" : "d4f07b6f164d53c1212c3e54d6460738b1981e9f",
|
||||
"version" : "1.0.17"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "fpsindicator",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/MainasuK/FPSIndicator.git",
|
||||
"state" : {
|
||||
"revision" : "e4a5067ccd5293b024c767f09e51056afd4a4796",
|
||||
"version" : "1.1.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "fuzi",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/cezheng/Fuzi.git",
|
||||
"state" : {
|
||||
"revision" : "f08c8323da21e985f3772610753bcfc652c2103f",
|
||||
"version" : "3.1.3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "keychainaccess",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/kishikawakatsumi/KeychainAccess.git",
|
||||
"state" : {
|
||||
"revision" : "84e546727d66f1adc5439debad16270d0fdd04e7",
|
||||
"version" : "4.2.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "kingfisher",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/onevcat/Kingfisher.git",
|
||||
"state" : {
|
||||
"revision" : "44e891bdb61426a95e31492a67c7c0dfad1f87c5",
|
||||
"version" : "7.4.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "metatextkit",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/TwidereProject/MetaTextKit.git",
|
||||
"state" : {
|
||||
"revision" : "dcd5255d6930c2fab408dc8562c577547e477624",
|
||||
"version" : "2.2.5"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "nextlevelsessionexporter",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/NextLevel/NextLevelSessionExporter.git",
|
||||
"state" : {
|
||||
"revision" : "b6c0cce1aa37fe1547d694f958fac3c3524b74da",
|
||||
"version" : "0.4.6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "nuke",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/kean/Nuke.git",
|
||||
"state" : {
|
||||
"revision" : "a002b7fd786f2df2ed4333fe73a9727499fd9d97",
|
||||
"version" : "10.11.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "nuke-flanimatedimage-plugin",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/kean/Nuke-FLAnimatedImage-Plugin.git",
|
||||
"state" : {
|
||||
"revision" : "b59c346a7d536336db3b0f12c72c6e53ee709e16",
|
||||
"version" : "8.0.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "pageboy",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/uias/Pageboy",
|
||||
"state" : {
|
||||
"revision" : "af8fa81788b893205e1ff42ddd88c5b0b315d7c5",
|
||||
"version" : "3.7.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "panmodal",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/slackhq/PanModal.git",
|
||||
"state" : {
|
||||
"revision" : "b012aecb6b67a8e46369227f893c12544846613f",
|
||||
"version" : "1.2.7"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "sdwebimage",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/SDWebImage/SDWebImage.git",
|
||||
"state" : {
|
||||
"revision" : "3312bf5e67b52fbce7c3caf431b0cda721a9f7bb",
|
||||
"version" : "5.14.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "stripes",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/eneko/Stripes.git",
|
||||
"state" : {
|
||||
"revision" : "d533fd44b8043a3abbf523e733599173d6f98c11",
|
||||
"version" : "0.2.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-collections",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-collections.git",
|
||||
"state" : {
|
||||
"revision" : "f504716c27d2e5d4144fa4794b12129301d17729",
|
||||
"version" : "1.0.3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-nio",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-nio.git",
|
||||
"state" : {
|
||||
"revision" : "546610d52b19be3e19935e0880bb06b9c03f5cef",
|
||||
"version" : "1.14.4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swift-nio-zlib-support",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/apple/swift-nio-zlib-support.git",
|
||||
"state" : {
|
||||
"revision" : "37760e9a52030bb9011972c5213c3350fa9d41fd",
|
||||
"version" : "1.0.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swiftsoup",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/scinfu/SwiftSoup.git",
|
||||
"state" : {
|
||||
"revision" : "6778575285177365cbad3e5b8a72f2a20583cfec",
|
||||
"version" : "2.4.3"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "swiftui-introspect",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/siteline/SwiftUI-Introspect.git",
|
||||
"state" : {
|
||||
"revision" : "f2616860a41f9d9932da412a8978fec79c06fe24",
|
||||
"version" : "0.1.4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "tabbarpager",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/TwidereProject/TabBarPager.git",
|
||||
"state" : {
|
||||
"revision" : "488aa66d157a648901b61721212c0dec23d27ee5",
|
||||
"version" : "0.1.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "tabman",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/uias/Tabman",
|
||||
"state" : {
|
||||
"revision" : "4a4f7c755b875ffd4f9ef10d67a67883669d2465",
|
||||
"version" : "2.13.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "tocropviewcontroller",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/TimOliver/TOCropViewController.git",
|
||||
"state" : {
|
||||
"revision" : "d0470491f56e734731bbf77991944c0dfdee3e0e",
|
||||
"version" : "2.6.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "uihostingconfigurationbackport",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/woxtu/UIHostingConfigurationBackport.git",
|
||||
"state" : {
|
||||
"revision" : "6091f2d38faa4b24fc2ca0389c651e2f666624a3",
|
||||
"version" : "0.1.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"identity" : "uitextview-placeholder",
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/MainasuK/UITextView-Placeholder.git",
|
||||
"state" : {
|
||||
"revision" : "20f513ded04a040cdf5467f0891849b1763ede3b",
|
||||
"version" : "1.4.1"
|
||||
}
|
||||
}
|
||||
],
|
||||
"version" : 2
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// Action.js
|
||||
// FollowActionExtension
|
||||
// OpenInActionExtension
|
||||
//
|
||||
// Created by Marcus Kida on 03.01.23.
|
||||
//
|
||||
|
@ -10,15 +10,13 @@ var Action = function() {};
|
|||
Action.prototype = {
|
||||
|
||||
run: function(arguments) {
|
||||
var username = document.documentURI.match("@(.+)@([a-z0-9]+\.[a-z0-9]+)")[0];
|
||||
|
||||
if (!username) {
|
||||
username = document.head.querySelector('[property="profile:username"]').content
|
||||
var username = detectUsername()
|
||||
|
||||
if (username) {
|
||||
arguments.completionFunction({ "username" : username })
|
||||
}
|
||||
|
||||
console.log("username" + username)
|
||||
|
||||
arguments.completionFunction({ "username" : username })
|
||||
|
||||
},
|
||||
|
||||
finalize: function(arguments) {
|
||||
|
@ -34,5 +32,19 @@ Action.prototype = {
|
|||
}
|
||||
|
||||
};
|
||||
|
||||
function detectUsername() {
|
||||
var uriUsername = document.documentURI.match("@(.+)@([a-z0-9]+\.[a-z0-9]+)")
|
||||
|
||||
if (typeof uriUsername === "Array") {
|
||||
return uriUsername[0]
|
||||
}
|
||||
|
||||
return document.head.querySelector('[property="profile:username"]').content
|
||||
}
|
||||
|
||||
function detectPost() {
|
||||
|
||||
}
|
||||
|
||||
var ExtensionPreprocessingJS = new Action
|
|
@ -0,0 +1,75 @@
|
|||
//
|
||||
// ActionRequestHandler.swift
|
||||
// OpenInActionExtension
|
||||
//
|
||||
// Created by Marcus Kida on 03.01.23.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import MobileCoreServices
|
||||
import UniformTypeIdentifiers
|
||||
|
||||
class ActionRequestHandler: NSObject, NSExtensionRequestHandling {
|
||||
|
||||
var extensionContext: NSExtensionContext?
|
||||
|
||||
func beginRequest(with context: NSExtensionContext) {
|
||||
// Do not call super in an Action extension with no user interface
|
||||
self.extensionContext = context
|
||||
|
||||
guard
|
||||
let itemProvider = context.inputItems
|
||||
.compactMap({ $0 as? NSExtensionItem })
|
||||
.reduce([NSItemProvider](), { partialResult, acc in
|
||||
var nextResult = partialResult
|
||||
nextResult += acc.attachments ?? []
|
||||
return nextResult
|
||||
})
|
||||
.filter({ $0.hasItemConformingToTypeIdentifier(UTType.propertyList.identifier) })
|
||||
.first
|
||||
else {
|
||||
return self.completeWithNotFoundError()
|
||||
}
|
||||
|
||||
itemProvider.loadItem(forTypeIdentifier: UTType.propertyList.identifier, options: nil, completionHandler: { (item, error) in
|
||||
guard
|
||||
let dictionary = item as? [String: Any],
|
||||
let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? [String: Any]? ?? [:]
|
||||
else {
|
||||
return self.completeWithNotFoundError()
|
||||
}
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.completeWithOpenUserProfile(results)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
private extension ActionRequestHandler {
|
||||
func completeWithOpenUserProfile(_ results: [String: Any]) {
|
||||
guard let username = results["username"] as? String else { return }
|
||||
doneWithResults([
|
||||
"openURL": "mastodon://profile/\(username)"
|
||||
])
|
||||
}
|
||||
|
||||
func completeWithNotFoundError() {
|
||||
doneWithResults(
|
||||
["error": "Failed to find username. Are you sure this is a Mastodon Profile page?"]
|
||||
)
|
||||
}
|
||||
|
||||
func doneWithResults(_ resultsForJavaScriptFinalizeArg: [String: Any]?) {
|
||||
if let resultsForJavaScriptFinalize = resultsForJavaScriptFinalizeArg {
|
||||
let resultsDictionary = [NSExtensionJavaScriptFinalizeArgumentKey: resultsForJavaScriptFinalize]
|
||||
let resultsProvider = NSItemProvider(item: resultsDictionary as NSDictionary, typeIdentifier: UTType.propertyList.identifier)
|
||||
let resultsItem = NSExtensionItem()
|
||||
resultsItem.attachments = [resultsProvider]
|
||||
self.extensionContext!.completeRequest(returningItems: [resultsItem], completionHandler: nil)
|
||||
} else {
|
||||
self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
|
||||
}
|
||||
self.extensionContext = nil
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
Loading…
Reference in New Issue