【问题标题】:Share Extension not appearing in the list of apps on capable of Sharing Photo on iPhone共享扩展未出现在能够在 iPhone 上共享照片的应用程序列表中
【发布时间】:2017-02-16 09:29:38
【问题描述】:

我正在尝试创建一个共享应用扩展程序并按照此来源的教程进行操作:

http://www.technetexperts.com/mobile/share-extension-in-ios-application-overview-with-example/

我在模拟器上使用 XCode 8.0 (8A218a),它按预期工作。在装有 iOS 9.3.3 的 iPhone 5s 上。

我先安装容器应用程序,然后在 XCode 询问“选择要运行的应用程序”时选择照片应用程序来运行扩展。

现在,当我在扩展程序运行时打开照片时,会出现以下错误:

MobileSlideShow[3500:589624] *** error reading settings archive file: <ISRootSettings:
/var/mobile/Documents/com.apple.mobileslideshow.settings/ISRootSettings_10.plist> 

现在,当我点击“分享”按钮时,我的容器应用不会出现在能够分享图片的应用列表中。

编辑: 我正在分享一些代码:

ShareViewController.m

@implementation ShareViewController
- (BOOL)isContentValid {
    // Do validation of contentText and/or NSExtensionContext attachments here
    return YES;
}

- (void)didSelectPost {

    for (NSItemProvider* itemProvider in ((NSExtensionItem*)self.extensionContext.inputItems[0]).attachments ) {

        if([itemProvider hasItemConformingToTypeIdentifier:@"public.jpeg"]) {
            NSLog(@"itemprovider = %@", itemProvider);

            [itemProvider loadItemForTypeIdentifier:@"public.jpeg" options:nil completionHandler: ^(id<NSSecureCoding> item, NSError *error) {

                NSData *imgData;
                if([(NSObject*)item isKindOfClass:[NSURL class]]) {
                    imgData = [NSData dataWithContentsOfURL:(NSURL*)item];
                }
                if([(NSObject*)item isKindOfClass:[UIImage class]]) {
                    imgData = UIImagePNGRepresentation((UIImage*)item);
                }

                NSDictionary *dict = @{
                                       @"imgData" : imgData,
                                       @"name" : self.contentText
                                       };
                NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.iosApp.testSharing"];
                [defaults setObject:dict forKey:@"img"];
                [defaults synchronize];
            }];
        }
    }
}

@end

ViewController.m

@implementation ViewController

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
    NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.iosApp.testSharing"];
    NSDictionary *dict = [defaults valueForKey:@"img"];

    if (dict) {

         NSData *imgData = [dict valueForKey:@"imgData"];
         UIImage *image = [UIImage imageWithData:imgData];
         [_shareImageView setImage:image];
         _shareImageNameLabel.text = [dict valueForKey:@"name"];
         [defaults removeObjectForKey:@"img"];
     }

 }

@end

【问题讨论】:

  • 可以分享一些相关代码吗?

标签: ios objective-c iphone xcode


【解决方案1】:

您必须更改项目的共享扩展表单目标的部署目标,然后它才能开始工作。

【讨论】:

  • 谢谢,这在共享选项中显示了我的共享应用扩展选项。但是点击那个扩展并不会打开我的应用程序。
  • 删除旧应用程序并再次运行,然后显示共享扩展弹出窗口。
  • @DeepakSaki 你的意思是在构建设置中更改部署目标吗?
  • 应用程序和扩展程序必须在构建设置中具有相同的 iOS 部署目标
  • 这里的语言起初我并不清楚,但正如其他答案所指出的,我必须在构建设置中更改部署目标,以使扩展与主要目标的部署目标相匹配。当您在 xcode 中创建新扩展时,它会自动将部署目标设置为最新的操作系统版本,而不是匹配主目标的部署目标版本
【解决方案2】:

您的测试 iPhone 版本低于您的 Deployment Info 设置:

【讨论】:

  • 这是我的问题!
【解决方案3】:

对我来说,取消选中 仅在安装时复制 选项有效。 此选项可在 Build Phases > Embed App Extensions 下找到。

【讨论】:

    【解决方案4】:

    你必须确定你需要什么样的扩展标识符com.apple.ui-servicescom.apple.share-services

    这是我的配置示例:

    这是使用 ui-services 出现的地方:

    这里使用com.apple.share-services

    然后:

    为了一切正常,不要忘记确保您的项目具有与您的目标相同的部署信息目标版本(General/Deployment Info/Deployment Target)

    再见,希望对你有帮助!

    【讨论】:

    • 部署目标是我的情况。谢谢!
    • 这在 iOS 13 中有效吗?应用不再打开!
    【解决方案5】:

    我浏览了 technetexperts 教程,一个可能的问题是传递给 NSUserDefaults@"group.iosApp.testSharing".plist 中描述的不匹配

    【讨论】:

    • 谢谢,但 plist 不必具有此应用组名称。问题实际上是别的。这个答案帮助了我:stackoverflow.com/a/42273617/5237727。默认情况下,Share 扩展的部署目标是 iOS 10.0
    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2013-06-08
    • 2018-07-12
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多