在Xcode 7.0.1中,"模拟背景"获取命令导致performFetchWithCompletionHandler两次触发.
这是一个Xcode调试错误,还是在运行应用程序发布版本的设备上发生这种情况.
立即更新我们有Xcode 7.1.1,仍然performFetchWithCompletionHandler被调用两次.由于我不确定这是否也"在野外"发生,如果我的提取动作已经在运行,我将保持状态.
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
if (self.performingFetch) {
return completionHandler(UIBackgroundFetchResultNoData);
}
self.performingFetch = YES;
...
self.performingFetch = NO;
}
Run Code Online (Sandbox Code Playgroud) 我想让iOS后台应用程序获取在我的应用程序中工作.在Xcode中进行测试时,它可以正常运行,但在设备上运行却没有!
在应用程序中:didFinishLaunchingWithOptions我用setMinimumBackgroundFetchInterval尝试了各种间隔,包括UIApplicationBackgroundFetchIntervalMinimum
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// tell the system we want background fetch
//[application setMinimumBackgroundFetchInterval:3600]; // 60 minutes
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
//[application setMinimumBackgroundFetchInterval:1800]; // 30 minutes
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我已经实现了application:performFetchWithCompletionHandler
void (^fetchCompletionHandler)(UIBackgroundFetchResult);
NSDate *fetchStart;
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
fetchCompletionHandler = completionHandler;
fetchStart = [NSDate date];
[[NSUserDefaults standardUserDefaults] setObject:fetchStart forKey:kLastCheckedContentDate];
[[NSUserDefaults standardUserDefaults] synchronize];
[FeedParser parseFeedAtUrl:url withDelegate:self];
}
-(void)onParserFinished
{
DDLogVerbose(@"AppDelegate/onParserFinished");
UIBackgroundFetchResult result = UIBackgroundFetchResultNoData;
NSDate *fetchEnd = [NSDate date];
NSTimeInterval timeElapsed = [fetchEnd …Run Code Online (Sandbox Code Playgroud) 我正在寻找解决方案以在后台模式下获取数据,即使应用已终止。有很多关于此问题的教程和答案,但是我的问题与其他问题不同。我在stackoverflow上找不到任何适当的解决方案,因此发布了此问题。
我有可以解释的情况。我正在使用存储事件日期,名称,时间,地址等的领域数据库。现在的事情是,我想编写一个在后台执行的代码,在此代码中,我想获取所有事件数据并比较它们的日期今天的日期。并且根据这几天之间的剩余天数触发本地通知,以提醒用户特定事件还剩下多少天。
我想每天在当地时间上午8点精确地调用此后台获取方法。
由于与背景获取和实现相混淆,我没有编写任何代码。有人知道如何实现吗?
帮助将不胜感激。
我们编写了一个媒体应用程序,允许您使用BACKGROUND FETCH获取最新视频列表作为json列表
然后它使用BACKGROUND TRANSFER告诉iOS逐个下载视频并返回睡眠状态并在应用完成后唤醒应用程序.
它完成了所有这些,但我们注意到空间使用正在增长和增长.
我们添加了代码来清除所有下载的视频,但空间使用情况在设置中保持高
我们使用Xcode> Organizer> Devices下载了app文件夹,发现BACKGROUND TRANSFER tmp文件夹对tmp文件很无聊.
这些不应该被清除掉
这通常是我使用的代码.我认为主要是我将多个DownloadTask(最多30个)附加到一个后台会话.文件大小从电影到pdf不等.
NSURLSession * backgroundSession_ = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier];
backgroundSession_ = [NSURLSession sessionWithConfiguration:urlSessionConfigurationBACKGROUND_
delegate:self
delegateQueue:[NSOperationQueue mainQueue]];
NSOperationQueue *mainQueue_ = [NSOperationQueue mainQueue];
NSURLSessionDownloadTask * downloadTask_ = [backgroundSession_ downloadTaskWithURL:url_];
downloadStarted_ = TRUE;
[downloadTask_ resume];
Run Code Online (Sandbox Code Playgroud)

我们使用本机密钥链包装类来存储和检索密钥链中的值.但在某些情况下,该值将被删除/清空.
我们在我们的应用中启用了以下项目
performfetchwithcompletionhandler代码中未使用/添加的方法)上述方案是否可能对钥匙串项目产生影响,或者是否存在可能导致钥匙串项目被删除的其他方案.
objective-c cllocationmanager ios keychainitemwrapper background-fetch
自2017年11月起,我有一个iOS(swift)应用程序可用AppStore.我添加了Firebase Analytics和Crashlytics,以主动查看在开发和测试期间未发生的问题.
我目前正在努力使用以下Stacktrace,我在Firebase Crashlytics Dashboard中多次使用:
来自Firebase的Stacktrace
致命异常:NSInternalInconsistencyException此请求已被绝育 - 您不能调用-sendResponse:两次,也不能在编码后
Fatal Exception: NSInternalInconsistencyException
0 CoreFoundation 0x1ac20bef8 __exceptionPreprocess
1 libobjc.A.dylib 0x1ab3d9a40 objc_exception_throw
2 CoreFoundation 0x1ac12006c +[_CFXNotificationTokenRegistration keyCallbacks]
3 Foundation 0x1acc0c3e0 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]
4 BaseBoard 0x1aea6cd68 __40-[BSAction sendResponse:withCompletion:]_block_invoke
5 libdispatch.dylib 0x1abc44484 _dispatch_client_callout
6 libdispatch.dylib 0x1abc24754 _dispatch_lane_barrier_sync_invoke_and_complete
7 BaseBoard 0x1aea20c60 -[BSAction sendResponse:withCompletion:]
8 UIKitCore 0x1d8c20698 -[UIHandleRemoteNotificationAction sendResponse:]
9 UIKitCore 0x1d9054d3c __91-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:]_block_invoke_3.2891
10 libdispatch.dylib 0x1abc436c8 _dispatch_call_block_and_release
11 libdispatch.dylib 0x1abc44484 _dispatch_client_callout
12 libdispatch.dylib 0x1abc23b44 _dispatch_main_queue_callback_4CF$VARIANT$armv81
13 CoreFoundation 0x1ac19a1bc __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
14 CoreFoundation 0x1ac195084 __CFRunLoopRun
15 CoreFoundation …Run Code Online (Sandbox Code Playgroud) 我怎么解决这个问题:
\nE/flutter (18287): [ERROR:flutter/shell/common/shell.cc(89)] Dart Error: Dart_LookupLibrary: library 'package:background_fetch/background_fetch.dart' not found.\nE/flutter (18287): [ERROR:flutter/runtime/dart_isolate.cc(668)] Could not resolve main entrypoint function.\nE/flutter (18287): [ERROR:flutter/runtime/dart_isolate.cc(168)] Could not run the run main Dart entrypoint.\nE/flutter (18287): [ERROR:flutter/runtime/runtime_controller.cc(389)] Could not create root isolate.\nE/flutter (18287): [ERROR:flutter/shell/common/shell.cc(605)] Could not launch engine with configuration.\nRun Code Online (Sandbox Code Playgroud)\n问题就出在模式发布上下出现,但在调试模式下插件工作正常。
\n更多细节:
\n[\xe2\x9c\x93] Flutter (Channel master, 3.4.0-36.0.pre.8, on Ubuntu 22.04.1 LTS 5.15.0-48-generic, locale en_US.UTF-8) Checking Android licenses is taking an unexpectedly long time...[\xe2\x9c\x93] Android toolchain - develop for Android devices …Run Code Online (Sandbox Code Playgroud) 我创建了一个应用程序,其中在接收推送通知时写入后台获取代码.我在.plist中启用了后台模式,在推送通知有效负载中将content-available键设置为1,注册了推送通知并使用了委托
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
Run Code Online (Sandbox Code Playgroud)
现在,当我的应用程序处于后台时,我会收到一个电话.在通话期间,我收到了应用的推送通知.
在呼叫期间接收推送通知时,不会调用推送通知委托.
我试图实现后台提取,希望可以不时唤醒应用程序.
我做了这些:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
return true
}
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
debugPrint("performFetchWithCompletionHandler")
getData()
completionHandler(UIBackgroundFetchResult.newData)
}
func getData(){
debugPrint("getData")
}
Run Code Online (Sandbox Code Playgroud)
我已经启用了后台提取功能.这就是我所做的一切.然后我运行应用程序.即使一小时后(手机睡了),这个功能也从未打过电话.
还有什么其他的事情可以让函数被调用?
我正在尝试通过后台获取从url获取数据.我的func尝试获取数据,如果有新数据,它会发送本地通知.当我最小化应用程序时,后台提取工作大约10 - 20分钟后工作.但是,当我杀了应用程序(双击主页按钮并关闭应用程序)它不起作用.我等了大约1个小时但是没用.我在android中使用后台服务,它正在成功运行.有没有办法从网址获取数据并在应用关闭时发送本地通知?我正在使用Xcode 6和swift 1.2