App Extension Today

实际上extension和host app之间是通过IPC(interprocess communication)实现的,只是苹果把调用接口高度抽象了,我们并不需要关注那么底层的东西。

- //让隐藏的插件重新显示
- - (void)showTodayExtension
- {
- [[NCWidgetController widgetController] setHasContent:YES forWidgetWithBundleIdentifier:@"com.yoowei.app.extension"];
- }
- //隐藏插件
- - (void)hiddeTodayExtension
- {
- [[NCWidgetController widgetController] setHasContent:NO forWidgetWithBundleIdentifier:@"com.yoowei.app.extension"];
- }
- TARGETS-->AppExtensionYoowei-->Capabilities-->App Groups
- TARGETS-->TodayExtension-->Capabilities-->App Groups
Identifiers -- App Groups 选择右上角➕号添加即可,然后还可以编辑。
- - (void)saveTextByNSUserDefaults
- {
- NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.yoowei.app"];
- [shared setObject:_textField.text forKey:@"yoowei"];
- [shared synchronize];
- }
- - (NSString *)readDataFromNSUserDefaults
- {
- NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.yoowei.app"];
- NSString *value = [shared valueForKey:@"yoowei"];
- return value;
- }
- - (BOOL)saveTextByNSFileManager
- {
- NSError *err = nil;
- NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.yoowei.app"];
- containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/good"];
- NSString *value = _textField.text;
- BOOL result = [value writeToURL:containerURL atomically:YES encoding:NSUTF8StringEncoding error:&err];
- if (!result) {
- NSLog(@"%@",err);
- } else {
- NSLog(@"save value:%@ success.",value);
- }
- return result;
- }
- - (NSString *)readTextByNSFileManager
- {
- NSError *err = nil;
- NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.yoowei.app"];
- containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/good"];
- NSString *value = [NSString stringWithContentsOfURL:containerURL encoding:NSUTF8StringEncoding error:&err];
- return value;
- }
- - (BOOL)copyFrameworkFromMainBundleToAppGroup
- {
- NSFileManager *manager = [NSFileManager defaultManager];
- NSError *err = nil;
- NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.yoowei.app"];
- NSString *sorPath = [NSString stringWithFormat:@"%@/Dylib.framework",[[NSBundle mainBundle] bundlePath]];
- NSString *desPath = [NSString stringWithFormat:@"%@/Library/Caches/Dylib.framework",containerURL.path];
- BOOL removeResult = [manager removeItemAtPath:desPath error:&err];
- if (!removeResult) {
- NSLog(@"%@",err);
- } else {
- NSLog(@"remove success.");
- }
- BOOL copyResult = [[NSFileManager defaultManager] copyItemAtPath:sorPath toPath:desPath error:&err];
- if (!copyResult) {
- NSLog(@"%@",err);
- } else {
- NSLog(@"copy success.");
- }
- return copyResult;
- }
- - (BOOL)loadFrameworkInAppGroup
- {
- NSError *err = nil;
- NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.yoowei.app"];
- NSString *desPath = [NSString stringWithFormat:@"%@/Library/Caches/Dylib.framework",containerURL.path];
- NSBundle *bundle = [NSBundle bundleWithPath:desPath];
- BOOL result = [bundle loadAndReturnError:&err];
- if (result) {
- Class root = NSClassFromString(@"Person");
- if (root) {
- Person *person = [[root alloc] init];
- if (person) {
- [person run];
- }
- }
- } else {
- NSLog(@"%@",err);
- }
- return result;
- }
- - (void)logAppPath
- {
- //app group路径
- NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.yoowei.app"];
- NSLog(@"app group:\n%@",containerURL.path);
- //打印可执行文件路径
- NSLog(@"bundle:\n%@",[[NSBundle mainBundle] bundlePath]);
- //打印documents
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *path = [paths objectAtIndex:0];
- NSLog(@"documents:\n%@",path);
- }
App Extension Today的更多相关文章
- App Extension访问Cocoapods引入的第三方库
步骤一: PROJECT --info --configurations,将对应的Debug和Release 设置成pods.debug和pods.release 步骤2:编译一下(本人遇到的问 ...
- 关于报错:'sharedApplication' is unavailable: not available on iOS (App Extension) - Use view controller based
最近在看Extension相关知识的时候,自己写了个小demo 发现[UIApplication sharedApplication]这个方法敲不出来了, 总是报错:'sharedApplicatio ...
- App Extension编程指南(iOS8/OS X v10.10)中文版
http://www.cocoachina.com/ios/20141023/10027.html 当iOS 8.0和OS X v10.10发布后,一个全新的概念出现在我们眼前,那就是应用扩展.顾名思 ...
- iOS9中找不到XXX.dylib 与 is unavailable no availabel on ios (app extension) - use view controller 的解决办法
在 iOS9 中现在找不到 XXX.dylib 了,比如libz.tbd 如果要用到 libz.dylib,可以用下面的办法,来自 Stack Overflow. Go to Build Phase ...
- iOS - App Extension 整体总结
一.App Extension的介绍 App Extension可以让你扩展你APP的自定义功能和内容,使用户可以在与其他应用或者系统进行互动的时候去使用它.app extension即为本文所说的e ...
- App Extension的脱壳办法
App Extension的脱壳办法 从app store下载的app和app extension是加过密的,可以通过otool查看: $ otool -l binary_name | grep cr ...
- iOS 在Host App 与 App Extension 之间发送通知
如何从你的一个App发送通知给另一个App? (例:搜狗输入法下载皮肤完成后使用皮肤) 注:搜狗输入法是App.而键盘是Extension 当你为你的App 添加 App Extension时,如果想 ...
- 揭秘 iOS App Extension 开发 —— Today 篇
转自:http://www.cocoachina.com/ios/20160619/16760.html 本文授权转载,作者:Cyandev(简书) 从 iOS 8 开始,苹果引入了全新的 App E ...
- iOS App Extension入门
转自简书:http://www.jianshu.com/p/8cf08db29356 iOS 10推出了很多新功能,其中有几个高调的变化:通知栏更加实用,电话可以防骚扰,iMessage变得更加有 ...
随机推荐
- XAML: x:DeferLoadStrategy, x:Null
x:DeferLoadStrategy="Lazy" - 用于指定一个 UIElement 为一个延迟加载元素 x:Null - null 示例1.x:DeferLoadStrat ...
- ASP.NET MVC html help
public static class HtmlHelper { /// <summary> /// 返回没有边框的只读的TextBox标签 /// </summary> // ...
- 【HDU 3938】Portal (并查集+离线)
http://acm.hdu.edu.cn/showproblem.php?pid=3938 两点之间建立传送门需要的能量为他们之间所有路径里最小的T,一条路径的T为该路径上最长的边的长度.现在 Q ...
- iOS 蓝牙开发(二)iOS 连接外设的代码实现(转)
转载自:http://www.cocoachina.com/ios/20150917/13456.html 原文作者:刘彦玮 上一篇文章介 绍了蓝牙的技术知识,这里我们具体说明一下中心模式的应用场景. ...
- C++编译期多态与运行期多态
前言 今日的C++不再是个单纯的"带类的C"语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出彩的那部分.在面向对象C++编程中, ...
- C++11特性:auto关键字
前言 本文的内容已经不新鲜了.关于auto,翻来覆去被人知道的都是这些东西,本文并没有提出新颖的auto用法. 本人原是痛恨博客一篇篇都是copy而来缺乏新意的探索,当然,本文不是copy而来,但发布 ...
- 关于property的一些知识
@property (nonatomic,assign,readonly) CGRect retweetViewFrame; retweetViewFrame设置为readonly,只有get方法,没 ...
- Noip2016のmengbier
Day0 上午10点多上了火车,向三位学长问了一路去年noip他们是用什么心态去考的,明明老师和同学都说我正常发挥应该没什么问题但心里就是紧张的不行,就是害怕犯个sb错误爆上一道题TAT. 去试机.. ...
- 【bzoj1408】 Noi2002—Robot
http://www.lydsy.com/JudgeOnline/problem.php?id=1408 (题目链接) 题意 定义了3种数,分别求这3种数的φ的和,其中φ(1)=0. Solution ...
- JSP生命周期
1.编译阶段:servlet容器编译servlet源文件,生成servlet类.观察一个JSP页面在第一次访问的时候会由servlet容器会生成.java文件,最终编译成.class字节码文件,如果打 ...