标签: today-extension

今天小工具无法在设备上启动(适用于模拟器)

嗨,我有一个很奇怪的问题.我的今日小工具在模拟器中运行得非常好,但是当我选择在真实设备上运行并选择"今天"应用程序时,xCode只是说"在XXX的iPhone上运行今天",但在该设备上没有小部件.我检查了"不包括"部分,它也不存在.

我搜索了很多,大多数人有三种类型的问题:

  1. 缺少64位架构.我的配置是: 在此输入图像描述
  2. 不同的应用程序和扩展名前缀 - 我的完全相同(当然,小部件的.TodayWidget添加)
  3. 小部件中的一些内部崩溃 - 但是当发生这种情况时,您至少可以看到小部件标题.此外,我的小部件在模拟器中工作正常.

那么任何建议都会受到高度赞赏吗?我已经尝试过清理项目,将其从重启xCode的设备中移除...我正在使用xCode 6.2并试用iPhone 5(iOS 8.2)和iPhone 6+(8.2)

UPDATE

将设备更新到iOS 8.3因此xCode到6.3似乎解决了这个问题.但是我担心它是否适用于其他iOS 8.2设备.

由于@gaRik指出我的小部件部署目标设置为8.3,导致小部件在8.2设备上失败.

xcode objective-c ios ios8-today-widget today-extension

6
推荐指数
1
解决办法
2140
查看次数

iOS 9 Today Widget没有调用viewDidLoad

将今日小部件添加到今日视图时,它会正确绘制.但是,如果您的用户稍后再回来,则不会调用viewDidLoad函数,而是显示过时的数据.应该每次调用viewDidLoad吗?是否有iOS 9/Xcode 7 beta 6错误?

编辑:添加了未调用的widgetPerformUpdateWithCompletionHandler.我有断点设置和打印功能

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
    print("in widgetPerformUpdateWithCompletionHandler")
    fetch()

    completionHandler(NCUpdateResult.NewData)
}
Run Code Online (Sandbox Code Playgroud)

xcode ios ios8-today-widget today-extension ios9

6
推荐指数
2
解决办法
3263
查看次数

从iOS Today Widget发送消息到应用程序

我有一个警报应用程序,最近用今天的小部件扩展程序驱动它.我需要从今天的小部件打开和关闭警报,但"打开"和"关闭"的代码在应用程序内,而不是小部件.如何message从今天的小部件发送到主应用程序?

message ios ios8-today-widget today-extension

6
推荐指数
1
解决办法
607
查看次数

今天小工具没有在设备上显示

这个问题很奇怪,我的今日小部件在模拟器中运行顺畅,但在我的设备(iPhone 5)中只显示带有图标和标题的小部件的标题.

我已经阅读了这些问题,但没有解决我的问题:

  1. 今天小工具无法在设备上启动(适用于模拟器)

  2. iOS App Today Extension未上传到物理设备

我的项目设置:

  • Development Target对两个目标都是一样的:iOS9.2
  • Widget是Scheme可以的,Executable我的主应用程序

你有什么建议可以解决这个问题吗?

objective-c ios today-extension ios9-today-widget

6
推荐指数
1
解决办法
2467
查看次数

小部件模拟器:由于@executable_path而在受限程序中被忽略

有没有人遇到过这个错误?当我在今天的扩展程序上运行Widget模拟器时,它就会发生.

dyld: warning, LC_RPATH @executable_path/../Frameworks in /System/Library/Frameworks/NotificationCenter.framework/Versions/A/Resources/Widget Simulator.app/Contents/MacOS/Widget Simulator being ignored in restricted program because of @executable_path
dyld: warning, LC_RPATH @executable_path/../Frameworks in /System/Library/Frameworks/NotificationCenter.framework/Versions/A/Resources/Widget Simulator.app/Contents/MacOS/Widget Simulator being ignored in restricted program because of @executable_path
dyld: warning, LC_RPATH @executable_path/../Frameworks in /System/Library/Frameworks/NotificationCenter.framework/Versions/A/Resources/Widget Simulator.app/Contents/MacOS/Widget Simulator being ignored in restricted program because of @executable_path
dyld: warning, LC_RPATH @executable_path/../Frameworks in /System/Library/Frameworks/NotificationCenter.framework/Versions/A/Resources/Widget Simulator.app/Contents/MacOS/Widget Simulator being ignored in restricted program because of @executable_path
dyld: warning, LC_RPATH @executable_path/../Frameworks in /System/Library/Frameworks/NotificationCenter.framework/Versions/A/Resources/Widget Simulator.app/Contents/MacOS/Widget Simulator being ignored in restricted program because of …
Run Code Online (Sandbox Code Playgroud)

macos today-extension

6
推荐指数
1
解决办法
570
查看次数

今天iOS 10中的小部件没有扩展

我正试图解决我今天的小部件的问题.按"显示更多"按钮后,它不会在iOS10上扩展.它的大小始终保持不变.

这是代码 TodayViewController.swift

import UIKit
import NotificationCenter

class TodayViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        extensionContext?.widgetLargestAvailableDisplayMode = .expanded
    }
}

extension TodayViewController: NCWidgetProviding {

    func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
        if activeDisplayMode == .expanded {
            preferredContentSize = CGSize(width: 0, height: 280)
        } else {
            preferredContentSize = maxSize
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么提示吗?

ios swift today-extension ios10 ios10-today-widget

6
推荐指数
1
解决办法
1526
查看次数

从通知小组件中查找设备是否已锁定

我想知道当我加载Notification/Today小部件时设备是否被锁定,所以我可以适当地显示小部件.(这是财务方面的,我们不想在锁定的手机上显示余额)

在具有TouchID的设备上,我可以尝试访问Keychain,如果我得到的话

errSecInteractionNotAllowed

回来了,它被锁定了.都好.这在没有touchID(但带有PIN)的设备上不起作用.我找到了一些建议使用的东西

[[UIApplication sharedApplication] protectedDataAvailable]

但是我没有[UIApplication sharedApplication]小部件.

任何想法在哪里以及如何做到这一点?我只需要一个是/否:设备被锁定了.

谢谢

[更新:这是我的代码]

获取文件名:

+ (NSString *)lockedDeviceFilename {
    NSURL *directoryUrl = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:USER_DEFAULTS_GROUP_NAME];
   return [directoryUrl.path stringByAppendingPathComponent:@"security.dummy"];
}
Run Code Online (Sandbox Code Playgroud)

编写/创建文件(在应用程序中,而不是扩展名:

NSError *error = nil;

NSString *documentPath = [FOOStorageGatekeeper lockedDeviceFilename];

[[NSFileManager defaultManager] removeItemAtPath:documentPath error:&error];

BOOL created = [[NSFileManager defaultManager] createFileAtPath:documentPath
                                                       contents:[@"super secret file contents. we only care about the permissions" dataUsingEncoding:NSUTF8StringEncoding]
                                                     attributes:@{NSFileProtectionKey : NSFileProtectionComplete}];
Run Code Online (Sandbox Code Playgroud)

读:

 BOOL isReadable = [[NSFileManager defaultManager] fileExistsAtPath:[FOOStorageGatekeeper lockedDeviceFilename]];

  NSLog(@"isReadable? %@", isReadable ? @"YES" …
Run Code Online (Sandbox Code Playgroud)

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

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

在今天的扩展中使用 AppDelegate

我正在尝试为我的应用程序构建一个今天的扩展。

我正在使用CoreDataandNSFetchedResultsController并收到以下错误:

使用未声明的类型“AppDelegate”

在这行代码中:

var appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate. 
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这个错误/在今天的扩展中使用 AppDelegate 并愿意帮助我吗?

ios appdelegate swift ios8-today-widget today-extension

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

如何在 Today 扩展中发送和接收数据

我想开发一个具有通知中心小部件的 iOS 应用程序,但我不知道应该如何在视图控制器和今日扩展之间发送和接收数据(传递数据)。

我尝试使用结构,但它不起作用,而且我也使用应用程序组,但我不想使用这种方法。

let shared = NSUserDefaults(suiteName: "group.Demo.Share-Extension-Demo.mahdi")
shared?.setObject("Hello", forKey: "kkk")
Run Code Online (Sandbox Code Playgroud)

cocoa-touch uiviewcontroller ios swift today-extension

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

主应用程序或扩展更改后刷新核心数据

我一直在为我的核心数据应用程序开发一个今日小部件。我NSFetchedResultsController对小部件和主应用程序使用 a ,并在使用 UserDefaults 和这篇文章的帮助从相反目标更改/添加数据时收到通知。

但是更新数据或NSFetchedResultsController查看更改/添加不起作用。我努力了:

  • 从重新获取数据NSFetchedResultsController
  • 将持久容器的视图上下文设置stalenessInterval为 0 并调用viewContext.refreshAllObjects()then 尝试重新获取数据(并且不重新获取数据)
  • shouldRefreshRefetchedObjects在 fetchedController 上设置为 true ,这样它就会自动调用。

我知道数据正在保存,因为如果我强制退出应用程序或重新运行小部件,新数据就在那里。但我不知道当相反的情况发生变化时如何刷新应用程序或小部件。

过去几天我一直在寻找解决方案,这实际上是我需要用这个小部件完成的最后一件事。请如果有人知道如何做到这一点请帮忙!

我如何设置我的NSFetchedResultsController

lazy var fetchedResultsController: NSFetchedResultsController<Item> = setupFetchedController()

override func viewDidAppear(_ animated: Bool) {
        loadData()

        //check to see if any data was changed. Being notified about changes works every time
        subscribeForChangesObservation()
}


private func setupFetchedController() -> NSFetchedResultsController<Item> {
        let managedContext = CoreDataManager.sharedManager.persistentContainer.viewContext

        let sortDescriptor = NSSortDescriptor(key: "date", ascending: true) …
Run Code Online (Sandbox Code Playgroud)

core-data nsfetchedresultscontroller swift ios-app-group today-extension

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