问题标签 [ios-extensions]

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 投票
2 回答
957 浏览

ios - iOS 9 ShareData 在 AppGroup 之间通过 NSUserDefaults

我正在尝试将 TodayExtension 添加到我现有的应用程序中,并且我希望该应用程序和扩展程序将通过 NSUserDefaults 共享数据。根据本教程http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/ 我确实喜欢它说:

  • 使用 Today 扩展创建新目标
  • 在 Extension 和 App 中添加新的 App-Group
  • 将代码添加到应用程序
  • 将代码添加到扩展程序

应用程序代码

扩展代码

问题

我的问题是扩展名总是读取 0 而不是 2。显然我遗漏了一些东西。在 AppGroup 和 NSUserDefaults 的情况下,iOS8 和 9 之间有一些主要区别吗?我知道应用程序之间只有watchOS2。

为了更清楚,这是来自 App 和 Extension NSUserDefaults 的键

应用程序密钥

苹果键盘

苹果键盘扩展

添加表情符号键盘处理

苹果语言

苹果密码键盘

首选语言

苹果语言环境

NSInterfaceStyle

MSVLoggingMasterSwitchEnabledKey

NS语言

AppleiTunesStoreItemKinds

身份代码

AppleLanguagesDidMigrate

PKEnable斯德哥尔摩设置

扩展键

苹果键盘

苹果键盘扩展

添加表情符号键盘处理

苹果语言

苹果密码键盘

首选语言

苹果语言环境

NSInterfaceStyle

MSVLoggingMasterSwitchEnabledKey

NS语言

AppleiTunesStoreItemKinds

AppleLanguagesDidMigrate

PKEnable斯德哥尔摩设置

很明显,密钥identityCode根本没有出现在扩展中。

0 投票
0 回答
129 浏览

ios - 无法更改自定义键盘余量

我想在我的应用程序的各个区域禁用自定义键盘。我已经在我的应用程序委托中实现并有条件地允许使用标识符application(_:shouldAllowExtensionPointIdentifier)进行扩展。UIApplicationKeyboardExtensionPointIdentifier但是,在第一次致电 后,我无法更改此津贴application(_:shouldAllowExtensionPointIdentifier)。例如,如果我false在第一次通话时application(_:shouldAllowExtensionPointIdentifier)返回true并在第二次通话时返回,自定义键盘在我的应用程序中保持禁用状态。

0 投票
1 回答
333 浏览

ios - 在没有 iCloud 和 DocumentPicker 的情况下使用 Document Provider 扩展 - 非 UI 变体

我最近发现了一些关于使用 iOS 8 中引入的 Document Provider 扩展在 iOS 应用程序之间共享数据的文章和信息。

但几乎所有的文章和教程都使用了 iCloud 或 DocumentPicker。

我基本上希望通过在应用程序 A 中创建一个 Sample.txt 文件来保存大量数据。我想从应用程序 B 中想知道,我可以利用 Document Provider 扩展读取 Sample.txt 文件的内容吗?

理想情况下,我不喜欢使用 iCloud,也希望通过单击按钮从应用程序 A 无缝过渡到应用程序 B,而无需任何类型的文档选择器、控制器等。

这可能吗?

0 投票
1 回答
388 浏览

ios - 每次都没有调用drawRect

我陷入了一个奇怪的问题,我正在做一个键盘扩展,我需要在触摸时绘制键的高光。我成功地做到了这一点,但奇怪的是,对于左上角的一些键,特别是QA键,不要每次都突出显示。主要是我的代码看起来像这样..

  1. On touchbegan- 通过调用绘制突出显示[keysLayer setNeedsDisplay];
  2. On touchEnd- 通过再次调用删除突出显示[keysLayer setNeedsDisplay];

所以基本上,drawRect函数不会每次都在这些特定键上被调用,其他一切正常,甚至setNeedsDisplay被调用。

所以,我正在寻求帮助,什么可能无法调用drawRect函数,我想知道原因列表。

如果有人可以帮助我。

更新


添加代码

在已添加 KeysLayer 视图的 SuperView 中。

KeysLayer UIView 类内部

更新 2


所以,我发现了这个问题,它只发生在我的iPhone6iOS9.0中。我用这个测试应用程序验证了这一点。令人惊讶的是,在这个测试应用程序中,我发现有一个特定的触摸区域,iOS 不会将drawRect称为iOS BUG?

请参阅下面的附图,它解释了实际发生的位置。我们有问题,没有解决办法。需要帮忙。

在此处输入图像描述

谢谢。

0 投票
0 回答
111 浏览

ios - iOS 检查主应用程序或扩展程序

我在我的主应用程序文件中这样写,该文件也与扩展名共享。

检测运行目标是App Extension还是iOS App

但是,它仍然给我错误说 UIAlertview 不能在扩展中使用。我也需要共享该文件,并且不想仅为此代码创建另一个相同的文件。我该如何检查?

0 投票
0 回答
114 浏览

ios - iOS 8 动作扩展显示为横幅

您可能已经看过 Instapaper 的 iOS 8 扩展,在 Safari 中保存到 Instapaper 后,整个浏览器仍然可见,并且横幅从顶部开始动画并自动隐藏。

我正在尝试对我的操作扩展做类似的事情,但扩展始终隐藏屏幕。

在 Info.plist 中,我添加了密钥NSExtensionActionWantsFullScreenPresentation并将其设置为NO. 在情节提要中,我已经明确了视图的背景颜色。

这是它目前的样子:

当前扩展

0 投票
1 回答
771 浏览

ios - 运行 Apple 的默认操作扩展代码会引发异常或不执行任何操作

当我尝试为操作扩展运行 Apple 的默认代码时,它要么什么都不做,要么崩溃。如何修复这两个错误?

设置

  1. 在 Xcode 7 中创建一个新的动作扩展目标(语言 = Swift,动作类型 = 无用户界面)
  2. 在模拟器中运行扩展程序,选择 Safari 作为要运行的应用程序。
  3. 在 Safari 中导航到https://google.com
  4. 调用您刚刚创建的扩展程序(您需要点击更多按钮以在活动表中启用它)。

错误1:extensionContextnil

在 Safari 中点击操作按钮,然后点击扩展按钮 1-5 次。最终扩展将在这一行崩溃:

日志会说:

致命错误:在展开可选值时意外发现 nil

例外是:EXC_BAD_INSTRUCTION

原因extensionContextnil

为什么会发生这种情况,我该如何解决?

错误 2:当它不崩溃时,它什么也不做

当应用程序没有崩溃时,似乎什么也没有发生。根据代码,背景颜色似乎应该变为红色或绿色,但在我尝试过的任何网站上都不会发生这种情况。

有没有你看到它工作的网站的例子?如何改进代码以使其实际执行某些操作?


我尝试过的事情

尝试 1:在上下文中传递

由于代码在块内运行,而不是通过 self.extensionContext 引用上下文,我尝试将其传递给需要它的函数(itemLoadCompletedWithPreprocessingResults(_:context:)doneWithResults(_:context:))。

这似乎更稳定(到目前为止它只崩溃过一次),但它仍然没有修改背景颜色。


参考

作为参考,这里是默认代码ActionRequestHandler.swift

0 投票
2 回答
1114 浏览

ios - 处理来自 Safari 的图像的操作扩展

我有一个 iOS 操作扩展,应该支持打开图像和 URL(特别是网页)。但是,从 Safari 中共享图像时,操作扩展不会出现在可用扩展列表中。例如,访问https://en.wikipedia.org并点击共享图标将显示我的操作扩展,但访问https://upload.wikimedia.org/wikipedia/commons/c/c4/PM5544_with_non-PAL_signals.png和点击分享图标不会。我还可以进入照片应用程序并选择 1 个或更多要共享的图像,这将显示我的操作扩展作为选项。我首先尝试了我的 Info.plist 文件,如下所示:

我希望这可以通过共享表中的操作扩展程序接受来自所有应用程序的无限数量的图像和 URL。然而,这种情况并非如此; 点击图像上的共享图标时不显示操作扩展。我已经为NSExtensionActivationRule键添加了所有值,如下所示:

但是,这仍然不能解决问题。这是我必须使用谓词的东西吗?如果是这样,如何以及为什么?

0 投票
0 回答
140 浏览

ios - 作为应用程序一部分包含的扩展程序何时显示在 SFSafariViewController UIActivityViewController 中?

我的应用程序包中包含两个扩展 - 一个操作扩展和一个共享扩展。这两个都查找 URL 或网页作为激活密钥。

在我的应用程序内部,当出现一个SFSafariViewController并且用户按下共享按钮时,无论用户是否在应用程序之外“安装”了它们,我的两个扩展程序都会显示在共享表中。

我的问题:是什么决定了应用程序包中包含的扩展何时/是否显示在主应用程序内SFSafariViewController显示的共享表中?


一点背景

我的想法是子类UIActivity化并将我的扩展的实现包含在子类中。然后,我会使用 的委托方法将它们传递给 SafariVC,SFSafariViewController这样它们就会出现在共享表中,而用户甚至都不知道它们的存在。

但是,正如我的问题所述,我的真正扩展似乎无论如何都会出现。

0 投票
0 回答
166 浏览

ios - 如何在 iOS 共享扩展中重新激活 Typhoon 程序集?

我正在开发一个包含共享扩展的应用程序,它和容器应用程序都将 Typhoon 程序集用于 DI。第一次启动共享扩展时,一切正常,但任何后续在同一会话中启动扩展都会导致第一次引用任何依赖项时崩溃,因为所有依赖项现在都为零。

应用程序和扩展程序都使用 Plist 集成,因此程序集只运行一次。因此,当第一次启动扩展时,情节提要和视图控制器不会注入它们的依赖项。如何确保 Typhoon 每次启动时都在共享扩展中注入其依赖项?