标签: ios-app-extension

在自定义键盘扩展中播放标准iOS键盘单击声音

我想知道iOS 8中是否有新的API允许您在键盘扩展中播放标准的键盘点击声 - 只有在启用键盘点击并且设备未处于静音状态时才播放.我还没有见过这样的API,我也没有看到任何关于这个的问题.

我知道在以前的iOS版本中,如果您实现了自定义输入或键盘附件视图(通过[[UIDevice currentDevice] playInputClick];采用UIInputViewAudioFeedback协议并返回YESenableInputClicksWhenVisible),这是可能的.这只有在那种情况下才有可能.键盘扩展名既不是那些.

是否可以使用自定义iOS键盘播放输入点击?

请注意,这个问题是相关的,但是他们想要一个自定义声音,并且该解决方案不会尊重用户播放键盘点击的偏好 - 即使禁用该选项也会始终播放它们.

keyboard audio ios ios8 ios-app-extension

17
推荐指数
1
解决办法
3735
查看次数

iOS8无法在应用程序组共享容器位置下创建文件夹/文件

我使用以下代码在共享容器路径下创建文件夹/文件.这将有助于应用扩展程序和包含应用程序的扩展程序可以访问数据.

获取共享容器url位置的代码:

+(NSURL*)getSharedContainerURLPath
{
    NSFileManager *fm = [NSFileManager defaultManager];

    NSString *appGroupName = APP_EXTENSION_GROUP_NAME; /* For example */

    NSURL *groupContainerURL = [fm containerURLForSecurityApplicationGroupIdentifier:appGroupName];

    return groupContainerURL;
}
Run Code Online (Sandbox Code Playgroud)

用于创建目录的代码

+(void)createDirAtSharedContainerPath
{
    NSString *sharedContainerPathLocation = [[self getSharedContainerURLPath] absoluteString];    
    NSString *directoryToCreate = @"user_abc";
    //basically this is <shared_container_file_path>/user_abc
    NSString *dirPath = [sharedContainerPathLocation stringByAppendingPathComponent:directoryToCreate];

    BOOL isdir;
    NSError *error = nil;

    NSFileManager *mgr = [[NSFileManager alloc]init];

    if (![mgr fileExistsAtPath:dirPath isDirectory:&isdir]) { //create a dir only that does not exists
        if (![mgr createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error]) {
                NSLog(@"error while …
Run Code Online (Sandbox Code Playgroud)

ios ios8 ios-app-extension ios-app-group

17
推荐指数
1
解决办法
6173
查看次数

什么是预处理器宏来测试是否正在构建应用程序扩展?

此问题完全基于有关在iOS中引入应用程序扩展的公开发布的文档.

随着iOS 8中的应用扩展程序的推出,现在可以"扩展您的应用程序之外的自定义功能和内容,并在用户使用其他应用程序时将其提供给用户".

在我的扩展实现中,我在我的扩展(模型等)中包含了我的实际应用程序中的一些类.问题是这些类进行调用UIApplication,这在app扩展中是不可用的,编译器告诉我.

我认为一个简单的解决方案就是UIApplication#if指令中包含任何调用.

例如,如果我想在模拟器上运行时只包含代码,我会使用:

#if TARGET_IPHONE_SIMULATOR
    // Code Here
#endif
Run Code Online (Sandbox Code Playgroud)

当目标是应用程序扩展时,是否有类似的定义宏?

preprocessor ios ios8 ios-app-extension

16
推荐指数
1
解决办法
5620
查看次数

在iOS8自定义键盘扩展中获取完整字符串

我正在为iOS 8创建自定义键盘扩展.

我想获取用户在文本输入字段中编写的整个字符串.

不幸的是,我偶然发现了两个主要问题:

1)我在这个回调中得到null:

- (void)textDidChange:(id<UITextInput>)textInput
Run Code Online (Sandbox Code Playgroud)

2)当我调用这些方法时,我只得到部分字符串:

- [self.textDocumentProxy documentContextAfterInput];
- [self.textDocumentProxy documentContextBeforeInput];
Run Code Online (Sandbox Code Playgroud)

我想在用户正在编辑的文本输入中获取整个字符串,您建议我做什么?

谢谢!

ios8 ios-app-extension uiinputviewcontroller

16
推荐指数
2
解决办法
3486
查看次数

从iOS8自定义键盘启动包含应用程序

我想启动我的包含应用程序.

我尝试使用URL方案.

URL方案从其他地方启动了应用程序 - 所以问题不存在.

看起来这个对象是零:

   self.extensionContext
Run Code Online (Sandbox Code Playgroud)

因此我无法运行此方法:

[self.extensionContext openURL:url completionHandler:nil];
Run Code Online (Sandbox Code Playgroud)

我可以启动我的应用吗?URL方案是否可以在自定义键盘中使用?

谢谢!

ios ios8 ios-app-extension

16
推荐指数
4
解决办法
6171
查看次数

获取设备当前方向(App Extension)

如何在App Extension中获取设备当前方向,我尝试了以下两种方法但没有成功.

  1. 它总是返回UIDeviceOrientationUnknown

    [[UIDevice currentDevice] orientation]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 它显示红色消息,'sharedApplication'在iOS上不可用(App Extension)

    [[UIApplication sharedApplication] statusBarOrientation];
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我还添加了一个观察者,但它没有被调用.

    [[NSNotificationCenter defaultCenter] addObserver:self.view selector:@selector(notification_OrientationWillChange:) name:UIApplicationWillChangeStatusBarOrientationNotification object:nil];
    
    
    
    - (void)notification_OrientationWillChange:(NSNotification*)n
    {
       UIInterfaceOrientation orientation = (UIInterfaceOrientation)[[n.userInfo objectForKey:UIApplicationStatusBarOrientationUserInfoKey] intValue];
    
        if (orientation == UIInterfaceOrientationLandscapeLeft)
           [self.textDocumentProxy insertText:@"Left"];
        if (orientation == UIInterfaceOrientationLandscapeRight)
           [self.textDocumentProxy insertText:@"Right"];
    }
    
    Run Code Online (Sandbox Code Playgroud)

那么现在如何才能获得当前的设备定位.

keyboard objective-c ios uideviceorientation ios-app-extension

16
推荐指数
5
解决办法
1万
查看次数

iOS 8操作扩展图标在设备上为空(在模拟器中工作)

EDIT2:

我把这个问题简化为最简单的项目.这是设置. 基本项目设置

我创建了一个新的单一视图应用程序并立即添加了一个新的Action扩展目标.我在.xcassets文件中创建了一个新的图标集,并添加了一个iPad视网膜大小的图标(我已尝试填写所有图标,结果相同).

在此输入图像描述

我确保在Copy Bundle Resources构建阶段包含Images.xcassets:

在此输入图像描述

然后在模拟器中运行应用程序时一切正常!

在此输入图像描述

然而,编译到设备会产生一个空白图标:

在此输入图像描述

我想也许这意味着我正在使用的PNG文件有问题,但是这里的一切看起来还不错:

在此输入图像描述

有没有人遇到类似的?

我已经访问过这样的问题找一个答案,我认为我做的一切权利,但我仍然没有看到在动作片上的图标.

这就是我所做的:

  1. 创建了一个工作容器应用程序,其中包含存储在Images.xcassets中的工作应用程序图标.然后我创建了一个Action Extension Target作为同一个项目的成员.

  2. 将包含应用程序的Images.xcassets添加到我的扩展程序的"Copy Bundle Resources"构建阶段.我知道这很有效,因为我可以UIImage.imageNamed(...)在我的扩展程序中使用.xcassets文件加载图像.

  3. 在我的扩展设置的常规选项卡中,我指出"应用程序图标和启动图像"下的"应用程序图标源"指向Images.xcassets的名为"AppIcon"的资源,与我的包含应用程序使用的资源相同.

  4. 当这不起作用时,我做了一些进一步的阅读,发现Action Extensions需要一个"alpha mask"风格的图像.我在.xcassets文件中创建了另一个名为"AppIcon-2"的项目,并使用所有尺寸的应用程序图标填充它,除了作为单色+透明度PNG.我将我的扩展的"App Icons和Launch Images"指向这个新的"AppIcon-2"

我的动作扩展的图标仍然是一个空白的白色方块.有没有我缺少的步骤?alpha掩码必须有一些非常具体的格式吗?(我只是在photoshop中保存为.png).资源在.xcassets中是否有一些非常具体的名称?

我也对一些答案(如上面链接的答案)感到困惑,这些答案似乎意味着通过在构建阶段添加.xcassets来解决问题.大多数app图标都不完全不透明吗?iOS如何从完全不透明的应用程序图标生成alpha蒙版?

编辑:我不完全确定是什么改变产生了差异(如果我搞清楚的话,我会尝试推断它并更新这篇文章)但我现在看到一个基于"AppIcon-2"alpha掩码的工作图标"在模拟器上.我甚至没想过要检查模拟器,但确实证明图标是从正确的位置拉出来的.关于设备的一些事情是以不同的方式处理图像.

iphone ios ios8 ios-app-extension

16
推荐指数
1
解决办法
9433
查看次数

如何在今日扩展中显示资产目录中的图像?

我正在开发iOS8的Today Extension.我的应用程序组设置正确,我可以成功使用NSUserDefaults将简单的数据位发送到我的扩展(使用本教程).

在我的扩展程序的故事板中,我已将图像放在故事板上,并将图像设置为我在资产目录中的资产.即使它出现在Interface Builder中,当我在设备和模拟器上运行应用程序时,图像也不会显示.

我错过了什么?

ios notificationcenter ios8 ios-app-extension

16
推荐指数
1
解决办法
4034
查看次数

如何在iOS8上以编程方式创建Today小部件而不使用storyboard?

我试图删除故事板文件和相关Info.plist条目,但这次延期停止了工作; 它甚至没有从XCode启动.

The operation couldn’t be completed. (LaunchServicesError error 0.)

常规应用程序(包含应用程序)很容易,因为我们看到它的入口点和应用程序委托,但是如何在扩展程序上执行此操作?

widget ios ios8 ios-app-extension

16
推荐指数
3
解决办法
7364
查看次数

检测运行目标是App Extension还是iOS App

我有一个简单的应用程序,它也有iOS 8今日扩展(或小部件).我正在做的一件事是在我的应用程序和我的小部件之间共享代码类,因为这显然使我不必拥有相同代码的多个副本.除了我遇到的一个问题之外,这一切都很UIApplication sharedApplication好用,其中一个API 会出现错误,因为你无法在iOS 8 Widgets上使用它.

所以我想到的是,有一个简单的if语句,用于检查最终目标是否是本机应用程序,或者如果它是iOS 8小部件,然后根据需要添加代码.那会有用吗?

这是我的代码:

if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
    {
        CGSize ssz = sz;
        sz = CGSizeMake(ssz.height, ssz.width);
    }
Run Code Online (Sandbox Code Playgroud)

如何更改此代码,以便可以执行以下操作之一:

  1. 仅运行/编译,如果最终目标是本机iOS应用程序而不是小部件.
  2. 或者检查目标平台上的API是否可用,如果是,则使用它?

我希望我的问题有道理,感谢你的时间,丹.

objective-c target ios ios-app-extension ios8-today-widget

16
推荐指数
1
解决办法
6542
查看次数