问题标签 [share-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
59 浏览

swift - 提取部分类以便在框架中使用它的正确方法

我正在为我的 iOS 应用程序创建共享扩展。我将创建一个嵌入式框架来在我的应用程序和扩展程序之间共享我的代码。

但我想让扩展只知道它需要的代码。问题是我已经有很多字段的类(其中许多不是扩展所必需的)。

这是一个例子。我有一个用户类:

在上面的示例中:我只需要扩展名中的“name”属性,并且我不需要 userBadge 属性。

我可以将“UserBadge”类包含到框架中,但这不是一个好的解决方案,因为结果我将在框架中有很多不必要的类。

可能的解决方案:

  1. 首先,我尝试使用 Swift 扩展。但他们不允许拥有存储属性。所以这没有帮助。

  2. 第二种可能的解决方案是创建一个仅具有“名称”属性的基本“用户”类。并且还创建了一个具有“userBadge”字段的继承类“AppUser”。因此我们可以在应用程序中使用“AppUser”类并在框架中使用“User”类。该解决方案将使我重写所有课程。

这个问题有更好的解决方案吗?

0 投票
1 回答
1036 浏览

ios - iOS 共享扩展流程

我在创建共享扩展时遇到问题,例如 Pinterest 应用程序的共享扩展。当用户未登录到包含应用程序时,共享扩展仅显示带有选项的警报log incancel

在代码中的哪个位置决定在我的共享扩展中显示哪个视图控制器。我看到这就像我需要检查共享容器的授权状态,如果这个状态是not logged我需要提供警报控制器。如果状态是logged我需要显示我的主视图控制器ShareViewController,它是SLComposeServiceViewController

我的问题与 UI 无关,而是在哪里放置此检查代码。我没有找到任何启​​动应用程序扩展的方法,因此我可以根据某些状态选择一些初始视图控制器进行扩展。

在 Pinterest 扩展中,当用户从其包含的应用程序中注销时,我看不到他们的主视图控制器。我只看到带有选项的警报。

第二个问题:如何以编程方式从共享扩展切换到包含应用。当用户需要进行身份验证时,这个 Pinterest 共享扩展是如何做到的?

我正在开发最新的 iOS SDK 10.2

0 投票
1 回答
991 浏览

ios - Swift 3 - 从共享扩展共享 URL 和标题到主应用程序?

我从本教程中获得了以下关于创建 ShareExtension 的内容:

它使用这个 javascript 来获取 url:

我想了解如何修改,didSelectPost以便可以将此 URL 传递给我的主应用程序。我从这个响应创建了一个共享应用程序组,但问题是我的主应用程序使用 Firebase 来存储和更新 TableView(这只是一个 URL 列表,就像一个阅读列表)。我知道我不能在 shareExtension 中使用 Firebase(它们应该尽可能简单) - 但我无法找到其他方法。

任何帮助将不胜感激!

0 投票
1 回答
542 浏览

ios - iOS 共享扩展通知

我正在开发一个具有共享扩展目标的应用程序。该应用程序允许将照片上传到服务器,该服务器对照片进行一些分析。分析完成后(可能需要几秒钟),会出现一个通知(带有横幅)以通知用户。

共享扩展允许直接从照片应用程序发送照片进行分析。但是一旦照片发布,扩展就会消失,我无法通知用户任务结束。

你知道这是否可以实现吗?如果是的话,有什么提示吗?

非常感谢。

0 投票
0 回答
416 浏览

swift3 - swift 3 共享扩展在第一次和调试模式下表现异常

我尝试实现的共享扩展有一个非常奇怪的行为。我的应用程序应该将用户选择的图像发送到服务器进行分析。用户选择一张照片并按下post按钮发送。

以下是我的奇怪行为:

  1. 我第一次使用共享扩展时,它并没有超出attachment.loadItem通话范围。它甚至不打印Before error。然后,如果我重复相同的工作流程,它工作正常。

  2. 如果我使用 XCode 调试器,我永远无法进入 attachment.loadItem部分。无论我使用扩展名的次数。我可以重复测试几次,我的图像永远不会发布到服务器上,也不会Before error打印There is no error出来There is an error。而且, attachment.loadItem被调用了两次。

didSelectPost我在函数中有以下代码

如果有人可以帮助我,我将不胜感激。非常感谢您的阅读和帮助。

编辑:工作代码。

0 投票
0 回答
281 浏览

ios - 在 UIWebview 中打开的 pdf 文件中搜索关键字

使用 web 视图打开和显示 pdf 文件。实际上这是一个扩展应用程序。我正在使用共享扩展名从附件中的 iphone 邮件应用程序中获取 pdf 文件。到目前为止,我能够在 web 视图中打开 pdf,但希望在 webview 中打开后对 pdf 执行搜索。已经花了一天,但到目前为止还没有运气。尝试使用此链接搜索以使用 UIWebView 突出显示 PDF 中的文本

请指导我。希望我把我的问题说清楚了。

0 投票
2 回答
176 浏览

ios - 强制转换是否会使共享扩展崩溃?

我正在审查“旧”代码(不是那么旧,但是一个开发人员离开了,我们正在记录和审查他的代码),在 iOS 共享扩展的上下文中,我发现了以下两行:

第一行:我红色的文档,发现inputItems也可以是空的,所以我想如果发生这种情况,强制转换会使应用程序崩溃(我不知道到底是怎么回事,但也许它可以)。

第二行:与上面相同,不同之处在于,如果您在第一行没有崩溃,您可能不会在此处再次崩溃。

inputItems问题1:检查循环前的长度是个好主意吗?

问题 2:我对这段代码进行了一些修改,并将第一行更改为:

这样做之后,XCode 建议对我不太喜欢的第二行进行更正(我认为它不可读):

XCode建议是要走的路吗?

任何评论表示赞赏。谢谢!

0 投票
1 回答
351 浏览

ios - 共享扩展 UI 加载时间过长

我正在开发一个简单的自定义共享扩展:“自定义”意味着我不是在扩展,SLComposeServiceViewController而是一个常规的UIViewController.

该扩展从照片应用程序加载图像并显示它。UI 非常简单:有一个UIImageView和两个按钮(“取消”和“保存”)。

问题:当第一次加载此扩展程序时,它需要大约 5 秒才能显示:在同一会话中执行的任何进一步的图像加载都会导致图像在不到半秒的时间内加载。

所以,总结一下:第一次显示共享扩展时,它的速度很慢。但是,如果您选择另一个图像并单击共享扩展图标,它会立即显示(没有滞后,非常完美)。

最初我认为将图像加载到 imageView 中存在问题:我注释掉了相关代码,但这不是问题。

也没有主/GUI 队列问题。

我想有一些与情节提要初始化有关的东西,但同样,它是一个视图和两个按钮,为什么加载需要这么长时间?

0 投票
2 回答
7949 浏览

ios - iOS 共享扩展:通过 Safari 中的上下文菜单共享时获取页面的 URL

我想要的是

我正在尝试实现以下用户流程:

  1. 用户正在 iOS Safari 中浏览网页。
  2. 用户选择一些内容(文本和图像)并等待上下文菜单出现。
  3. 用户选择“共享...”项。
  4. 用户在底部出现的共享菜单中选择我的应用程序扩展。
  5. 选定的内容和网页 URL 通过 HTT 调用共享到远程服务器。

我试过的

我通过 Xcode 做了一个 Share 扩展。这是NSExtension我的部分info.plist

这是test.js文件:

我期望得到以下结果:inviewDidLoad方法extensionContext?.inputItems会为我提供几个输入项,通过这些输入项我将能够获取所选内容和 Web URL。

出了什么问题

InviewDidLoad方法extensionContext?.inputItems只为我提供了一项——所选内容的纯文本表示(即使我同时选择了图像和文本)。我可以使用纯文本,但我需要网页 URL。

我的问题

使用共享扩展程序通过 iOS Safari 中的上下文菜单共享所选内容时,如何获取打开网页的 URL?

0 投票
1 回答
258 浏览

ios - 在 iphone 上调试共享扩展不起作用

我正在尝试开发具有共享扩展的应用程序。我在尝试在 iPhone 上调试我的应用程序时遇到了问题。我收到一条错误消息“无法附加到 pid:无法附加”;但在模拟器上一切正常。

我尝试通过 Debug>Attack by PID 或 Name 附加到进程,但没有任何改变。难道我做错了什么?我应该如何进行?

谢谢你和问候,米兰。