Tag: ios app extension

iOS 8是否支持dynamic链接?

直到iOS7,由于安全考虑,Apple不支持dynamic链接。 开发人员之间的代码重用通常依赖于静态库,它是作为应用程序可执行文件的一部分而构build的。 在iOS8中引入扩展似乎改变了这一点,因为扩展是单独的可执行文件。 在扩展和其包含的应用程序之间共享代码是通过框架完成的。 苹果在发行说明中这样说: iOS的框架。 iOS开发人员现在可以创builddynamic框架。 框架是代码和资源的集合,用于封装在多个项目中有价值的function。 框架可以与扩展一起工作,共享可以被主应用程序和捆绑扩展使用的逻辑。 重点是我的。 来源: https : //developer.apple.com/library/content/documentation/Xcode/Conceptual/WhatsNewXcode-Archive/Articles/xcode_6_0.html#//apple_ref/doc/uid/TP40014509-SW14 此外,在扩展开发指南中,他们解释说,您可以通过“embedded式框架”在扩展和包含应用程序之间共享代码。 资料来源: https : //developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1 我的问题是 – 什么是embedded式框架,它与dynamic框架有什么不同,我们真的会看到适当的iOS8dynamic链接吗? 我读过的所有文档似乎都是模棱两可的。

在Today Widget Extension中经常出现“Unable to load”

我为我的应用程序制作了一个Today小部件。 我的小部件包含10个单元格的UITableView。 (每个单元的高度是50pt。)function很简单。 如果我点击单元格上的button,从sqlite重新加载数据库,并显示在单元格中。 它在模拟器和iPhone 4s,5s,5s,6除了iPhone6 +都能很好地工作。 我删除了小部件,并再次添加了10次,但这对我没有帮助。 我没有检查内存和僵尸。 但是在〜10M下稳定下来,没有泄漏。 我该如何解决我的问题?

核心数据与WatchKit和iOS应用程序

这个问题已经被问到,但没有收到答案 。 我的iOS应用程序和我的WatchKit扩展共享一个核心数据存储保持的应用程序组。 核心数据模型(简化)是一个Person对象,具有Age的属性。 应用程序和扩展程序都可以随意更改年龄。 如果某人的价值在手表上发生了变化,那么除非我closures并重新运行该应用程序,否则该应用程序不会反映该值。 同样走向相反的方向。 如果我尝试将手表的年龄更改为20岁,并将手机的年龄更改为30岁,那么我会遇到与合并冲突有关的错误,因为我没有使用最新版本的在其中一个设备上的NSManagedObject(无论我最后更改年龄)。 我怎样才能使这两个工作在一起没有任何问题?

如何以编程方式在iOS8上创build一个Today小部件?

我试图删除故事板文件和相关的Info.plist条目,但这次扩展停止工作; 它甚至不从XCode启动。 The operation couldn't be completed. (LaunchServicesError error 0.) 在常规应用程序(包含应用程序)上很容易,因为我们看到它是入口点和应用程序委托,但是如何在扩展上进行呢?

iOS动作扩展示例代码不工作

iOS Action Extension示例代码似乎不起作用。 在xCode中,我创build了一个新的Swift项目并selectSingle View Application。 然后selectFile> New> Target,然后selectAction Extension。 我input一个名字,selectSwift,然后selectAction Type:No User Interface 然后通过运行项目并selectSafari来testing扩展。 我导航到Google网站。 我通过Safari中的操作图标启用了扩展。 然后我按下扩展名图标在Safari中运行,但没有任何反应。 我期望网页的背景颜色可以改变,因为应该运行的Action.js代码设置了背景颜色:document.body.style.background =“blue” 就好像Action.js代码永远不会被调用。 所有的代码都来自默认的Action Extension模板,并没有被修改。 的Info.plist <key>NSExtension</key> <dict> <key>NSExtensionAttributes</key> <dict> <key>NSExtensionActivationRule</key> <dict> <key>NSExtensionActivationSupportsFileWithMaxCount</key> <integer>0</integer> <key>NSExtensionActivationSupportsImageWithMaxCount</key> <integer>0</integer> <key>NSExtensionActivationSupportsMovieWithMaxCount</key> <integer>0</integer> <key>NSExtensionActivationSupportsText</key> <false/> <key>NSExtensionActivationSupportsWebPageWithMaxCount</key> <integer>1</integer> </dict> <key>NSExtensionJavaScriptPreprocessingFile</key> <string>Action</string> </dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.services</string> <key>NSExtensionPrincipalClass</key> <string>$(PRODUCT_MODULE_NAME).ActionRequestHandler</string> </dict>

iOS 8 beta – 今天扩展不能识别embedded式框架

我正在写一个应用程序,它也有一个今天扩展(或小工具)。 苹果推荐的在扩展之间共享代码并包含应用程序的方法是将共享代码放入应用程序和扩展可以使用的embedded式框架中。 所以据我了解,我应该编写共享代码,并将共享代码作为目标框架,然后让应用程序和扩展都将框架声明为依赖项。 然而,在实践中,我发现,虽然应用程序认识到框架很好,但今天扩展没有。 更具体地说:我将一个简单的表格视图放在我的今天的扩展名(我将称之为“小工具”)和作为我的应用程序(我将称为“应用程序”)中的一个选项卡,然后一个框架(我将称之为“框架”)与共享代码。 Widget附带一个包含表格视图的TodayViewController。 这个表格视图有一个自定义的单元格,我打电话给CalendarCell。 所以相关的共享类/文件是: TodayViewController.h /米 CalendarCell.xib CalendarCell.h /米 然后,当然,我有我的Widget故事板和应用程序故事板,这是不共享的。 所以,在我的App目标构build阶段,我将Framework作为目标依赖项,同时也将Widget作为目标依赖项(创build目标时就是这样的,删除它似乎没有任何帮助)。 同样,在Widget目标构build阶段,我将Framework作为目标依赖项。 框架将TodayViewController.m和CalendarCell.m列为编译源,将CalendarCell.xib列为束资源。 所以这里出了什么问题:如果Widget没有列出CalendarCell.m,TodayViewController.m和CalendarCell.xib作为编译源和捆绑资源,那么这个Widget不起作用。 具体来说,如果没有列出TodayViewController.m,那么应用程序甚至无法在模拟器中运行(我得到了这个人得到的同样的错误)。 如果TodayViewController.m被列出,但其他任何源文件/资源​​都没有,那么我会得到一个没有内容的扩展(和其他人一样 )。 请注意,应用程序确实认可框架就好,不必将这些文件列为编译源或捆绑资源 – 这只是失败的Widget。 如果有人有这个想法,我会感激。 一个Xcode 6 / iOS 8的错误? 或者我做错了什么?

带有应用程序组的NSUserDefault在iOS 8 Beta3中不起作用

我必须保存Boolean值NSUserDefault在我的应用程序与custom keyboard extension和共享与应用程序组。 我的代码在iOS 8 Beta1中工作。 self.defaults = [NSUserDefaults standardUserDefaults]; if([self.defaults boolForKey:@"BlackKey"]) { NSLog(@"Black"); } else { NSLog(@"White"); } 但不是在iOS 8 Beta3。 当我从NSUserDefault检索Boolean值,它不会返回任何内容,我无法从自定义键盘扩展加载。 我也尝试在NSUserDefault使用initWithSuiteName 。 我只有一个这样的问题或iOS 8 Beta3的错误?

KeyboardViewController NSLog IOS 8

我们可以在iOS 8的其他视图中使用NSlog进行login(Xcodetesting版)。 但是,我无法在KeyboardViewController中进行NSLog的键盘扩展。 它没有出现在日志中。 NSLog(@“viewdidload in keyboard”); 我想知道如何实时检测/login。

ios 8自定义键盘保持button来删除?

我目前正在build立一个自定义的键盘,我差不多完成了。 我有一个问题是删除button。 当用户点击删除button,它做它应该做的,并删除以前的文本条目。 但是,当用户按下button时,什么都不会发生。 我如何做到这一点,以便当用户按下删除button,键盘连续删除像在标准的ios键盘? 这是我现在的代码: 杂注标记键盘 – (void)addGesturesToKeyboard{ [self.keyboard.deleteKey addTarget:self action:@selector(pressDeleteKey)forControlEvents:UIControlEventTouchUpInside]; 和: -(void)pressDeleteKey{ [self.textDocumentProxy deleteBackward]; } 谢谢你的帮助。

如何检测如果ios8自定义键盘扩展运行在不iPhone 6优化的应用程序?

在标准显示模式的键盘和状态栏显示缩放的iPhone 6未优化的应用程序。 这会导致我手动布局的自定义键盘扩展名显示拉伸。 我如何检测这个缩放来修复布局?