我已经构建了一个今天的小部件,我想显示我的主机应用程序中关于屏幕的版本。有没有办法做到这一点?
我尝试用[NSBundle mainBundle]
替换bundleWithIdentifier
,但失败了。那么,有没有办法从他的扩展包中获取infoDictionary
,还是我在浪费时间?
答案 0 :(得分:5)
您可以通过指定扩展程序包的直接路径来关闭此功能。应用扩展程序看起来像是应用程序主要包中的PlugIns/
文件夹。您可以使用NSBundle
创建-initWithPath:
的实例。例如:
- (NSBundle *)appExtensionBundle {
NSString *plugInsPath = [NSBundle mainBundle].builtInPlugInsPath;
NSString *appExtensionPath = [plugInsPath stringByAppendingPathComponent:@"MyTodayExtension.appex"];
return [[NSBundle alloc] initWithPath:appExtensionPath];
}
注意:此代码仅在今日扩展程序中进行了测试。如果您有其他类型的扩展,则应进行测试以确保其正常工作。
答案 1 :(得分:0)
你做不到。应用程序和扩展程序无法访问彼此的代码和地址空间。他们只能使用AppGroup共享容器或使用Shared NSUserDefault来共享数据。
使用这两种方法都需要至少运行一次扩展。