Tag: ios app extension

在IOS8 beta中共享扩展

我正在尝试使用新的iOS 8应用程序扩展程序创build共享扩展程序。 我试图得到一个Safari网站的当前url显示在一个UILabel。 很简单。 我正在从苹果的官方扩展指南https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/Share.html#//apple_ref/doc/uid/TP40014214-CH12-SW1但有些事情并不像预期的那样工作。 我知道这只是在testing,但也许我只是做错了什么。 这里是我的代码来获取从扩展ViewController里面的safari URL: -(void)viewDidAppear:(BOOL)animated{ NSExtensionContext *myExtensionContext = [self extensionContext]; NSArray *inputItems = [myExtensionContext inputItems]; NSMutableString* mutableString = [[NSMutableString alloc]init]; for(NSExtensionItem* item in inputItems){ NSMutableString* temp = [NSMutableString stringWithFormat:@"%@, %@, %lu, %lu – ",item.attributedTitle,[item.attributedContentText string], (unsigned long)[item.userInfo count],[item.attachments count]]; for(NSString* key in [item.userInfo allKeys]){ NSArray* array = [item.userInfo objectForKey:@"NSExtensionItemAttachmentsKey"]; [temp appendString:[NSString […]

iOS 8自定义键盘

我试图build立一个自定义的键盘,就像一个表情符号键盘,但键盘的数据是从一个JSON文件。 parsing这个json文件并获取数据后,如何使自定义键盘使用它并显示在键盘视图中,如内置的表情符号键盘? 现在,我遵循应用程序扩展键盘:自定义键盘指南,这里只有less量的信息。 有没有关于如何在线创build自定义表情符号键盘的教程或指南? 目前我正在尝试的代码如下: class KeyboardViewController: UIInputViewController { override func viewDidLoad() { super.viewDidLoad() var error: NSError? let yanFile = NSBundle.mainBundle().pathForResource("yan", ofType: "json") let yanData = NSData(contentsOfFile: yanFile) as NSData let yanDict = NSJSONSerialization.JSONObjectWithData(yanData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary println("dict: \(yanDict)") //print nothing in console // Perform custom UI setup here self.nextKeyboardButton = UIButton.buttonWithType(.System) […]

保存和加载数据在今天扩展(iOS 8)

是否有可能使用NSUserDefaults在Today Extension上保存和加载数据? closures通知中心后,小部件的行为就像一个终止的应用程序,所以任何数据结果都会丢失。 我怎么能解决这个问题? 这是我的代码: NSUserDefaults *defaults; – (void)viewDidLoad { [super viewDidLoad]; defaults = [NSUserDefaults standardUserDefaults]; NSArray *loadStrings = [defaults stringArrayForKey:@"savedStrings"]; if ([loadStrings objectAtIndex:0] != nil) { [display setText:[NSString stringWithFormat:@"%@", [loadStrings objectAtIndex:0]]]; } if ([loadStrings objectAtIndex:1] != nil) { calculatorMemory = [NSString stringWithFormat:@"%@", [loadStrings objectAtIndex:1]].doubleValue; } } – (IBAction)saveData:(id)sender { NSString *displayString; NSString *memoryString; NSArray […]

在原始iOS应用和应用扩展之间共享代码

在iOS应用和扩展程序之间共享课程 我想在我的应用程序和扩展应用程序中使用自定义类。 如果我只是在主要的应用程序文件夹中的类,扩展不会拿起它。 我试着把它复制到扩展文件夹中,但我当然得到了invalid redeclaration of [my class]错误的invalid redeclaration of [my class] 。 什么是最好的解决scheme? 这只是一个类,不是多个资源。

应用程序未显示在iOS8的共享扩展的共享选项的共享菜单中

我正在为我的应用程序开发共享扩展。 每件事情都很好,但我面临的一个主要问题,我的应用程序不在共享菜单,而从照片应用程序共享。 下面是我的共享扩展的plist。 它没有显示在列表中,下面是截图: 但是,当我去更多的选项,设置我的分机开关,现在它显示在列表中,但我需要每次都做,下面是截图: 每次我从X-Code运行扩展,它不显示共享菜单,我需要去更多的选项,closures和打开closures,然后才显示。 它可以显示每次在共享菜单? 有没有什么我缺less的plist或额外的configuration所需? 我需要你宝贵的build议。 提前致谢。 更新: 我已经在iOS9中检查过了。 它工作正常,没有任何问题。

为什么应用程序组不能在我的WatchKit扩展中工作?

我已经看到所有关于共享主机应用程序和附加应用程序之间的NSUserDefaults数据的其他职位,但我仍然无法正常工作。 以下是我所做的一切: 在Xcode的“function”选项卡上为扩展程序和主机应用程序启用应用程序组。 将组名称设置为“group.com.mycompany.foo”,并确认扩展程序和主机应用程序已添加到组中。 通过将“com.apple.security.application-groups”键设置为我的应用程序组名称,确认存在权利文件。 (对于它的价值,我也使用扩展和主机应用程序之间的共享钥匙串function,这是可行的 – 所以我不认为这是权利问题) 重新生成所有configuration文件。 事实上,我甚至撤销了所有的证书,并在设置应用程序组后重新创build了所有configuration文件。 而所有这一切,这个代码仍然无法正常工作: // in the host app NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"]; [testDefaults setObject:@"TEST" forKey:@"foo"]; [testDefaults synchronize]; 接着: // in the extension NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"]; NSLog(@"%@", [testDefaults objectForKey:@"foo"]); 这导致: (null) 当我查看Xcode首选项时,我注意到这些图标,没有一个具有“应用程序组”图标: 但正如我之前所说的,在设置应用程序组之后,我尽可能清除了我的钥匙串,证书和configuration文件。 所以,如果这实际上是问题,我如何将配额添加到configuration文件? 我错过了什么? 我是新鲜的想法。 帮帮我? 编辑 :访问组正在我的今天和Safari扩展,只是不在WatchKit扩展。 我不知道为什么,所有的构build设置似乎configuration相同的方式。 编辑2 :对于那些坚持我的能力没有正确设置,这里是一个截图:

什么是预处理器macros来testing是否正在构build应用程序扩展?

这个问题完全基于公开发布的关于在iOS中引入应用程序扩展的文档。 随着在iOS 8中引入应用程序扩展 ,现在可以“扩展定制function和内容,超越您的应用程序,并在用户使用其他应用程序时提供给用户”。 在我的扩展实现中,我在我的扩展中包含了一些来自实际应用的类(模型等)。 问题在于这些类调用了UIApplication ,这在应用程序扩展中是不可用的,编译器告诉我这样做。 我认为这是一个简单的解决scheme将在#if指令中包含对UIApplication任何调用。 例如,如果我只想包含代码,如果我在模拟器上运行,我会使用: #if TARGET_IPHONE_SIMULATOR // Code Here #endif 当目标是应用程序扩展时,是否有类似的macros定义?

通过/打开包含应用程序从共享扩展

这是我已经尝试过,没有工作: 使用openURL尝试打开包含的应用程序 这是我所认为的不起作用的: 使用本地通知来提供包含应用程序的链接(通过扩展程序创build本地通知) 以下是我正在考虑的选项: 使用一个UIDocumentInteractionController和一个自定义的文件扩展名types来提供一个链接到我包含的应用程序(和我包含的应用程序只) 启动一个“假的”NSURL会话以获得以下function:在iOS中,如果您的扩展在后台任务完成时未运行,系统将在后台启动您的包含应用程序并调用应用程序:handleEventsForBackgroundURLSession:completionHandler:app delegate method 。 UIDocumentInteractionController被确认可以在Xcode 6.5中工作,但是这个stream程有点怪异。 NSURL的东西应该可以工作,但它也有点可疑。 有没有人有任何其他想法让我的包含应用程序打开从共享扩展,或从共享扩展与它沟通的想法?

如何使popup式键盘字符在iOS8自定义键盘?

我想创buildpopup式iOS8自定义键盘如下图所示。 一些代码正在工作,但不能访问键盘的外部窗口,发生如下图所示的问题-2

在iOS 8的今天扩展适合宽度

当我制作任何iOS 8 Today扩展时,即使在Interface Builder中我在x = 0的左侧放置了一个标签,左边的空白区域大约为48px。 我已经看到,有些应用程序使用全宽度小部件。 我怎样才能达到类似的东西? 谢谢! 更新:解决 我把这个示例代码放在这里,因为我猜这对别人有用。 正如@ matteo-lallone所build议的,正确的做法是: -(UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMa‌​rginInsets{ return UIEdgeInsetsZero; }