1

我正在尝试将 Today Extension 添加到我已经从事了相当长一段时间的项目中。事实上,该应用程序已经在 AppStore 中,我希望通过 Today Extension 来增强它。

问题是扩展程序根本不会启动。不在设备上,也不在模拟器上。

编辑:跳过下一部分并在最后的编辑中继续阅读,因为我认为我发现了问题。我只是不知道如何解决它。

我按照教程完成了一个测试项目,它工作得很好。环境似乎(!)是相同的。设备和模拟器上的 Xcode 6.1.1、iOS 8.1。

我的项目是基于 Objective-C 的。对于扩展,我尝试了 Objective-C 和 Swift 目标。在这两种情况下,所有三个(四个使用 obj-C)文件都按预期创建(故事板、视图控制器和 PLIST)。

没有做更多(与示例项目一样)我正在尝试使用选择的小部件方案启动小部件。对于测试项目,小部件会启动,而实际项目不会。

我在小部件 viewController 的 viewDidLoad 中放置了一个 println()/NSLog,以查看是否有任何事情发生但什么也没有。

很高兴提供代码或设置,但此时我不知道从哪里开始。

我刚刚意识到,通过测试项目,当小部件从 Xcode 运行时,今天的视图将自动启动/出现。在我的实际项目中,我刚刚获得了 HomeScreen,并且必须自己拉下 Today 视图。因此,与测试项目相比,小部件看起来完全一样,但实际上什么都没有发生。

任何帮助表示赞赏。

编辑:这是我遇到的可能构成问题的东西。该小部件永远不会真正启动,并且卡在 Xcode 的调试导航器中的“等待附加”中。虽然其他人似乎也遇到了同样的问题,但到目前为止我发现的所有潜在解决方案都对我不起作用。

编辑:我注意到当我添加一个 Today 小部件作为目标时,二进制文件被命名为.app。我做二进制文件的所有测试项目都被创建为.appex。网络上的所有信息都表明它应该真正命名为.appex。这是从哪里来的,我该如何改变?

4

3 回答 3

2

I had the same problem.

The following steps helped:

selected target Today Extortion -> Build Settings -> line Wrapper Extension add (change) value to appex

See:

http://i.stack.imgur.com/zH7i7.png

于 2015-01-10T19:37:13.917 回答
1

今天我在旧项目中创建通知内容扩展时也发生了同样的问题。(2016,Xcode8 iOS10)

最后我找到了原因:

项目的Build Settings中的“Wrapper Extension”为“app”,当创建新的扩展目标时,“Wrapper Extension”从项目设置中继承为“app”。

在添加扩展目标之前清除项目设置将使 Xcode 自动将扩展创建为“appex”。

于 2016-12-07T11:20:20.453 回答
0

我在此分享步骤和源代码。

第 1 步:- 应用程序扩展必须有一个包含应用程序 - 您不能只创建一个从商店下载的应用程序扩展程序,首先创建一个常规应用程序来包含应用程序扩展程序。为了这个演示,只需创建一个新的单视图项目并保持不变。转到File -> New -> Project并选择 iOS 下的 Single view application -> Applications 将其称为“ ExtendableApp ”。

第 2 步:- 如果您想创建自定义体验,只需将 ExtensionViewController 设置为从 UIViewController 继承,一旦您的扩展被激活,所有常规 viewDidLoad、viewDidAppear 等都将被调用。

第 3 步:- 在您的控制器情节提要中为按钮创建插座,我在此描述 3 个按钮。

第 4 步:- 在 ExtensionViewController.m 中写入

- (void)viewDidLoad {
    [super viewDidLoad];
    self.preferredContentSize = CGSizeMake(self.view.frame.size.width, 60.0f);
    // Do any additional setup after loading the view from its nib.
}

第 5 步:- 我假设您已经在扩展情节提要中设置了按钮的插座和 IB 操作

- (IBAction) mActionButtonTapped :(UIButton *) sender {
    switch (sender.tag) {
        case 0: {
            NSURL *url = [NSURL URLWithString:@"IDENTIFIER_1://"];
            [self.extensionContext openURL:url completionHandler:nil];
        }
            break;
        case 1: {
            NSURL *url = [NSURL URLWithString:@"IDENTIFIER_2://"];
            [self.extensionContext openURL:url completionHandler:nil];
        }
            break;
        case 2: {
            NSURL *url = [NSURL URLWithString:@"IDENTIFIER_3://"];
            [self.extensionContext openURL:url completionHandler:nil];
        }
            break;
            
        default:
            break;
    }
}

第 6 步:- 在您的项目中,在 appDelete.m 中编写这些代码

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    [self appExtensionCallBack:url.absoluteString];
    return YES;
}

- (void) appExtensionCallBack :(NSString *)urlString {
    if ([urlString isEqualToString:@"IDENTIFIER_1://"]) {

            [self.tabBarController setSelectedIndex:0];   
    } else if ([urlString isEqualToString:@"IDENTIFIER_2://"]) {

            [self.tabBarController setSelectedIndex:1];
    } else if ([urlString isEqualToString:@"IDENTIFIER_3://"]) {

            [self.tabBarController setSelectedIndex:2];
    }
}

注意:-我在我的项目中使用标签栏控制器,你可以给自己尊重的控制器。

- (void) moveToControllerScene {
        UIStoryboard *storyboard              = [UIStoryboard storyboardWithName:STORY_BOARD_IDENTIFIER bundle:nil];
        YOUR_CONTROLLER_OBJECT *obj           = [storyboard instantiateViewControllerWithIdentifier:@"YOUR_CONTROLLER_OBJECT"];
        [navController pushViewController:obj animated:YES];
}

第 7 步:- 要在真实设备中测试扩展,您必须制作单独的 App ID 和配置文件。在扩展和你的项目中删除适当的配置文件。

于 2016-09-12T13:27:17.757 回答