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

那么任何建议都会受到高度赞赏吗?我已经尝试过清理项目,将其从重启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设备上失败.
将今日小部件添加到今日视图时,它会正确绘制.但是,如果您的用户稍后再回来,则不会调用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) 我有一个警报应用程序,最近用今天的小部件扩展程序驱动它.我需要从今天的小部件打开和关闭警报,但"打开"和"关闭"的代码在应用程序内,而不是小部件.如何message从今天的小部件发送到主应用程序?
这个问题很奇怪,我的今日小部件在模拟器中运行顺畅,但在我的设备(iPhone 5)中只显示带有图标和标题的小部件的标题.
我已经阅读了这些问题,但没有解决我的问题:
我的项目设置:
Development Target对两个目标都是一样的:iOS9.2Scheme可以的,Executable我的主应用程序你有什么建议可以解决这个问题吗?
有没有人遇到过这个错误?当我在今天的扩展程序上运行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) 我正试图解决我今天的小部件的问题.按"显示更多"按钮后,它不会在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)
有什么提示吗?
我想知道当我加载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) 我正在尝试为我的应用程序构建一个今天的扩展。
我正在使用CoreDataandNSFetchedResultsController并收到以下错误:
使用未声明的类型“AppDelegate”
在这行代码中:
var appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate.
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个错误/在今天的扩展中使用 AppDelegate 并愿意帮助我吗?
我想开发一个具有通知中心小部件的 iOS 应用程序,但我不知道应该如何在视图控制器和今日扩展之间发送和接收数据(传递数据)。
我尝试使用结构,但它不起作用,而且我也使用应用程序组,但我不想使用这种方法。
let shared = NSUserDefaults(suiteName: "group.Demo.Share-Extension-Demo.mahdi")
shared?.setObject("Hello", forKey: "kkk")
Run Code Online (Sandbox Code Playgroud) 我一直在为我的核心数据应用程序开发一个今日小部件。我NSFetchedResultsController对小部件和主应用程序使用 a ,并在使用 UserDefaults 和这篇文章的帮助从相反目标更改/添加数据时收到通知。
但是更新数据或NSFetchedResultsController查看更改/添加不起作用。我努力了:
NSFetchedResultsControllerstalenessInterval为 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
today-extension ×10
ios ×8
swift ×4
objective-c ×3
xcode ×2
appdelegate ×1
cocoa-touch ×1
core-data ×1
ios10 ×1
ios9 ×1
macos ×1
message ×1