相关疑难解决方法(0)

在 swift 3.0 中从我的键盘扩展打开我的应用程序

我正在尝试从我的键盘扩展中打开。我有自定义键盘,并且已从设置中添加该键盘。在我的自定义键盘上有一个“显示更多”按钮,我想点击这个按钮打开我的应用程序。

所以我尝试了以下代码:

let context = NSExtensionContext()
 context.open(url! as URL, completionHandler: nil)

 var responder = self as UIResponder?

 while (responder != nil) {

      if responder?.responds(to: Selector("openURL:")) == true {

           responder?.perform(Selector("openURL:"), with: url)
      }
      responder = responder!.next
 }
Run Code Online (Sandbox Code Playgroud)

它运行成功,但正如我们所知,swiftSelector("method_name:")已被弃用并#selector(classname.methodname(_:))改为使用,因此它发出警告。我想解决这个警告。所以我尝试过 Xcode 自动建议:

 if responder?.responds(to: #selector(UIApplication.openURL(_:))) == true {

      responder?.perform(#selector(UIApplication.openURL(_:)), with: url)
 }
Run Code Online (Sandbox Code Playgroud)

也试过:

 if responder?.responds(to: #selector(NSExtensionContext.open(_:))) == true {

      responder?.perform(#selector(NSExtensionContext.open(_:)), with: url)
 }
Run Code Online (Sandbox Code Playgroud)

我也尝试过其他可能的方法,但没有运气。如果有人知道该怎么做,请告诉我。

我提到了这个链接,Julio Bailon 的回答:

openURL 在操作扩展中不起作用

selector ios ios-app-extension custom-keyboard swift3

6
推荐指数
2
解决办法
1944
查看次数

iOS Action Extension-调用另一个Action Extension时内存使用量迅速增加

我有一个动作扩展,它接受图像,对图像进行小修改(例如叠加水印),然后允许用户打开另一个UIActivityController,将修改后的图像发送到另一个(任意)扩展(例如与社交媒体分享图片)。与大多数(但不是全部)扩展共享后,我的扩展崩溃了,因为达到了内存限制。

我得到的错误是:

EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=120 MB, unused=0x0)
Run Code Online (Sandbox Code Playgroud)

这在操作系统驱动的UIImage调用的深处发生。

脚步:

  1. 从“照片”应用中选择图像
  2. 选择共享图标
  3. 选择我的分机
  4. 在我的扩展程序中查看修改后的图片
  5. 选择共享图标
  6. 选择其他扩展名(Tweetbot,Facebook ...)
  7. 看到其他扩展名的用户界面开始出现
  8. 崩溃

对于iOS提供的扩展名(例如保存或打印),不会出现崩溃。崩溃确实会出现在我尝试过的所有第三方扩展中。

我用仪器进行诊断。我的扩展程序在执行图像操作时的内存使用量短暂达到75MB的峰值,然后降至27MB。当用户界面开始为其他扩展程序构建时,我的应用程序的内存占用量迅速飙升。它达到120MB,然后消失。

在内存升级期间,我收到了三个didReceiveMemoryWarning调用。我持有的唯一数据是屏幕上的UIImageView。我已经尝试过杀死UIImageView了(imageView.removeFromSuperview然后imageView = nil),结果没有变化。

似乎辅助扩展正在我的扩展的内存中加载,并且合并的占用空间超过了120MB的限制。那有意义吗?那是预期的吗?

我承认存在一个扩展的想法是存在的,它只是暂时保留要与另一个扩展共享的数据,但这并不是我能想到的最佳方法。修改后的数据不需要永久保存-如果新版本的照片库中也有新版本,则用户很容易混淆。我曾考虑过扩展程序可以从那里打开我的主应用程序进行共享,但是这似乎是被设计所阻止的(有些黑客建议我没有尝试过-请参见openURL在Action Extension中不起作用)。

有任何解决方法吗?谢谢!

uiimage ios ios-extensions

5
推荐指数
0
解决办法
386
查看次数

可以imessage扩展打开主机应用程序吗?

我试过了[self.extensionContext openURL:completion],但我的应用程序崩溃了.我听说有些扩展无法使用此方法,可以使用iMessage扩展吗?

顺便说一句,主持应用程序可以激活其iMessage扩展吗?

objective-c imessage swift ios-extensions ios10

3
推荐指数
1
解决办法
3407
查看次数

从iOS Safari共享扩展中打开主应用程序

我有一个Safari共享扩展,我希望能够从扩展中打开主应用程序.向用户显示警报,其中他们可以选择打开应用程序.

func openAppHandler() {
    self.extensionContext?.completeRequest(returningItems: []) { (success) in
        if let url = URL(string: "myapp://...") {
            self.extensionContext?.open(url, completionHandler: nil)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

didSelectPost()调用该方法后会出现警报 ,您可以看到它出现在扩展的后台优先级完成块中.该open方法在其文档中说"在iOS 8中,只有今天的扩展点(用于创建小部件)支持这种方法." 我猜它仍然是在Safari Share Extension中仍然不支持它的情况.

有没有人知道从共享扩展中打开我的主应用程序的方法?

ios ios-extensions

1
推荐指数
1
解决办法
2440
查看次数

iOS 操作扩展无法打开我的主应用程序

我希望能够在我的应用程序中打开 Safari 链接。为此,我创建了一个操作扩展。我尝试了以下代码的多种变体进行测试,但没有一个变体打开我的主应用程序:

第一次尝试:

func openContainerApp() {
        var responder: UIResponder? = self as UIResponder
        let selector = #selector(openURL(_:))
        while responder != nil {
            if responder!.responds(to: selector) && responder != self {
                responder!.perform(selector, with: URL(string: "awesome://item?id=20036169")!)
            }
            responder = responder?.next
        }
        self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
    }
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

func redirectToHostApp() {
        let url = URL(string: "awesome://item?id=20036169")
        let selectorOpenURL = sel_registerName("openURL:")
        let context = NSExtensionContext()
        context.open(url! as URL, completionHandler: nil)

        var responder = self as UIResponder?

        while (responder != nil){
            if responder?.responds(to: selectorOpenURL) …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller uiresponder ios swift ios-extensions

1
推荐指数
1
解决办法
2129
查看次数