iOS Today Extension创建为.app而不是.appex

时间:2014-12-04 20:34:38

标签: ios objective-c xcode swift today-extension

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

问题是扩展程序根本无法启动。不在设备上或模拟器上。

编辑:只是跳过下一部分并在上次编辑时继续阅读,因为我认为我发现了问题。我只是不确定如何解决它。

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

我的项目是基于Objective-C的。对于扩展,我尝试了Objective-C和Swift目标。在这两种情况下,所有三个(带有obj-C的四个)文件都按预期创建(storyboard,viewController和PLIST)。

没有做任何事情(与示例项目一样)我正在尝试使用选中的窗口小部件方案启动窗口小部件。对于测试项目,小部件将启动而不会与实际项目一起启动。

我在一个小部件viewController的viewDidLoad中放了一个println()/ NSLog来查看是否有任何事情发生了。

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

我刚刚意识到,通过测试项目,当小部件从Xcode运行时,今天的视图将自动启动/显示。在我的实际项目中,我只是获得HomeScreen并且必须自己下载Today视图。因此,与测试项目相比,一切看起来完全没有任何关于小部件的事情。

感谢任何帮助。

编辑:以下是我遇到的可能构成问题的内容。小部件永远不会真正启动,并且在Xcode的Debug导航器中遇到'Waiting to Attach'。虽然其他人似乎遇到了同样的问题,但到目前为止我找到的所有可能的解决方案都不适用于我。

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

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。

以下步骤有所帮助:

所选目标今日敲诈 - >构建设置 - > line Wrapper Extension将(更改)值添加到appex

请参阅:

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

答案 1 :(得分:1)

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

第1步: - 应用扩展程序必须包含应用内容 - 您不能只创建要从商店下载的应用扩展程序,首先要创建一个包含应用扩展程序的常规应用。为了这个演示,只需创建一个新的单一视图项目并保持不变。转到文件 - > - > 项目并选择iOS下的单一视图应用程序 - >应用程序将其称为“ 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];
    }
}

注意: - 我在项目中使用Tab Bar Controller,你可以给自己尊敬的控制器。

- (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步: - 要在实际设备中测试扩展程序,您必须创建单独的应用程序ID和配置文件。删除扩展和项目中的相应配置文件。

答案 2 :(得分:0)

今天我在旧项目中创建了一个Notification Content扩展程序时发生了同样的问题。(2016,Xcode8 iOS10)

最后我找到了原因:

项目构建设置中的“包装扩展”为“app”,当创建新的扩展目标时,“包装扩展”从项目设置继承为“app”。

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