ios - IOS8 beta 中的共享扩展

标签 ios ios8 ios-app-extension

我正在尝试使用新的 iOS 8 应用程序扩展创建共享扩展。我试图获取 Safari 站点的当前 URL 以在 UILabel 中显示它。很简单。

我正在使用 apple 的官方扩展指南 https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Share.html#//apple_ref/doc/uid/TP40014214-CH12-SW1但有些事情没有按预期工作。我知道它仅处于测试阶段,但也许我只是做错了什么。

这是我在扩展 ViewController 中从 safari 获取 URL 的代码:

-(void)viewDidAppear:(BOOL)animated{
NSExtensionContext *myExtensionContext = [self extensionContext];
NSArray *inputItems = [myExtensionContext inputItems];
NSMutableString* mutableString = [[NSMutableString alloc]init];
for(NSExtensionItem* item in inputItems){
    NSMutableString* temp = [NSMutableString stringWithFormat:@"%@, %@, %lu, 
           %lu - ",item.attributedTitle,[item.attributedContentText string],
           (unsigned long)[item.userInfo count],[item.attachments count]];

    for(NSString* key in [item.userInfo allKeys]){
        NSArray* array = [item.userInfo objectForKey:@"NSExtensionItemAttachmentsKey"];
        [temp appendString:[NSString stringWithFormat:@" in array:%lu@",[array count]]];   
    }
    [mutableString appendString:temp];
}
self.myLabel.text = mutableString;
}

这是我的扩展的 Info.plist 文件的内容:

<dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
    <key>NSExtensionActivationRule</key>
    <dict>
        <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
        <integer>200</integer>
    </dict>
</dict>

当我在 Safari 中访问苹果 iPod 支持页面并尝试将其共享到我的扩展程序时,我得到以下值但没有 URL:

item.attributedTitle = (null)
item.attributedContentText = "iPod - Apple Support"
item.userInfo.count = 2 (two keys: NSExtensionAttributedContentTextKey and
    NSExtensionItemAttachmentsKey)
item.attachments.count = 0

字典对象中的数组总是空的。

当我与系统邮件应用程序共享苹果网站时,URL 会发布到消息中。那么,为什么我的扩展程序中没有 URL?

最佳答案

以下是获取 url 的方法。注意类型标识符是 kUTTypeURL, block 参数是 NSURL。此外,plist 也需要像我一样正确。缺少文档并从 number4 on the Apple dev forums 获得帮助. (您需要注册并登录才能看到它)。

代码:

NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
NSItemProvider *itemProvider = item.attachments.firstObject;
if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) {
    [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *url, NSError *error) {
        self.urlString = url.absoluteString;
    }];
}

信息.plist

<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
        </dict>
        <key>NSExtensionPointName</key>
        <string>com.apple.share-services</string>
        <key>NSExtensionPointVersion</key>
        <string>1.0</string>
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
</dict>

关于ios - IOS8 beta 中的共享扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24056024/

相关文章:

java - 在 Java 中传递对象类型的参数等同于 Obj-C

ios - 是否可以从我的应用程序访问照片编辑扩展程序

ios - 核心位置 iOS 8 兼容 iOS 7

ios - 如何在 iOS8 上的自定义键盘中添加数字和十进制键盘?

ios - 我的自定义键盘无法共享数据,因为 filecoordinationd 崩溃(在设备上)

ios - 如何在 iOS 上使用 FileProviderExtension 显示下载进度

ios - UIsearchBar 输入键盘类型

ios - NSArrayController 是否已弃用,它的替代品是什么?

ios - iphone x 模拟器的标签栏问题

iOS 8 Widget Ad Hoc 分发