我正在尝试将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 。这是从哪里来的,我该如何改变呢?
答案 0 :(得分:2)
我遇到了同样的问题。
以下步骤有所帮助:
所选目标今日敲诈 - >构建设置 - > line Wrapper Extension将(更改)值添加到appex
请参阅:
答案 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”扩展名。