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

我正在尝试将Today Extension添加到我已经工作了很长一段时间的项目中。 事实上,该应用程序已经在AppStore中,我正在寻求使用Today Extension来增强它。

问题是扩展根本不会启动。 不在设备上或模拟器上。

编辑:只是跳过下一节,并在最后一次编辑阅读,因为我认为我发现了问题。 我只是不确定如何解决它。

我按照教程完成了一个测试项目,它运行得很好。 环境似乎(!)是相同的。 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 。 这是从哪里来的,我该如何改变?

我有同样的问题。

以下步骤有助于:

选择目标今天勒索 – >构建设置 – >行包装器扩展添加(更改)值到appex

看到:

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

我在这里分享步骤和源代码。

第1步 : – 应用扩展程序必须包含应用内容 – 您不能只创建要从商店下载的应用扩展程序,首先要创建一个包含应用扩展程序的常规应用。 为了这个演示,只需创建一个新的单一视图项目并保持不变。 转到文件 – > 新建 – > 项目,然后在iOS下选择单视图应用程序 – >应用程序将其命名为’ ExtendableApp ‘。

第2步 : – 如果要创建自定义体验,只需将ExtensionViewController设置为从UIViewControllerinheritance,激活扩展后,将调用所有常规viewDidLoad,viewDidAppear等。

第3步 : – 在您的控制器故事板中为按钮创建sockets,我在此描述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步 : – 我假设您已在扩展故事板中设置了按钮的sockets和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 : – 要在实际设备中测试扩展,您必须创建单独的App ID和Provisioning配置文件。 删除扩展和项目中的相应配置文件。

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

最后我找到了原因:

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

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