{"id":15050768,"url":"https://github.com/onezens/ycdownloadsession","last_synced_at":"2025-05-15T15:09:23.564Z","repository":{"id":49844480,"uuid":"84918843","full_name":"onezens/YCDownloadSession","owner":"onezens","description":"iOS background download video or file lib","archived":false,"fork":false,"pushed_at":"2024-10-14T11:29:32.000Z","size":7007,"stargazers_count":464,"open_issues_count":6,"forks_count":94,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-03-31T20:06:36.462Z","etag":null,"topics":["background","background-service","background-video","download","ios","objective-c"],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/onezens.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-14T07:28:40.000Z","updated_at":"2025-02-19T12:45:01.000Z","dependencies_parsed_at":"2024-06-19T04:09:21.527Z","dependency_job_id":"4acbc8bb-17cd-4922-b991-3079346bf52a","html_url":"https://github.com/onezens/YCDownloadSession","commit_stats":{"total_commits":167,"total_committers":5,"mean_commits":33.4,"dds":"0.38323353293413176","last_synced_commit":"42d1375414c48cadf93a0c7829f66358329288cf"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onezens%2FYCDownloadSession","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onezens%2FYCDownloadSession/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onezens%2FYCDownloadSession/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onezens%2FYCDownloadSession/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/onezens","download_url":"https://codeload.github.com/onezens/YCDownloadSession/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247730068,"owners_count":20986404,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["background","background-service","background-video","download","ios","objective-c"],"created_at":"2024-09-24T21:29:17.347Z","updated_at":"2025-04-07T21:11:08.202Z","avatar_url":"https://github.com/onezens.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [YCDownloadSession](https://onezens.github.io/YCDownloadSession/)\n\n[![Platform](https://img.shields.io/badge/platform-iOS-yellowgreen.svg)](https://github.com/onezens/YCDownloadSession)\n[![Support](https://img.shields.io/badge/support-iOS%208%2B%20-blue.svg?style=flat)](https://www.apple.com/nl/ios/)\n[![CocoaPods](http://img.shields.io/cocoapods/v/YCDownloadSession.svg?style=flat)](https://cocoapods.org/pods/YCDownloadSession)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![Build Status](https://travis-ci.com/onezens/YCDownloadSession.svg?branch=master)](https://travis-ci.com/onezens/YCDownloadSession)\n\n\n\n## 通过Cocoapods安装\n\n安装Cocoapods\n\n```\n$ brew install ruby\n$ sudo gem install cocoapods\n```\n\n**Podfile**\n\n分成主要两个包:\n\n- `Core` : YCDownloader 只有下载器\n- `Mgr`  : YCDownloader , YCDownloadManager 所有\n\n```\nsource 'https://github.com/CocoaPods/Specs.git'\nplatform :ios, '8.0'\n\ntarget 'TargetName' do\n    pod 'YCDownloadSession', '~\u003e 2.0.2', :subspecs =\u003e ['Core', 'Mgr']\nend\n```\n\n然后安装依赖库：\n\n```\n$ pod install\n```\n\n提示错误 `[!] Unable to find a specification for YCDownloadSession ` 解决办法：\n\n```\n$ pod repo update master\n```\n## 通过Carthage安装\n安装carthage：\n\n```\nbrew install carthage\n```\n添加下面配置到`Cartfile`里：\n\n```\ngithub \"onezens/YCDownloadSession\"\n```\n安装, 然后添加Framework到项目：\n\n```\ncarthage update --platform ios\n```\n\n## 用法\n\n**注意事项**\n\n1、在真机上测试，用户想要完整使用后台下载功能，需要在系统设置页，检查是否开启`后台 App 刷新`；如果没有开启，则第一个任务下载完成后，无法后台唤醒，开启下一个下载任务\n\n\n\n**引用头文件**\n\n```\n#import \u003cYCDownloadSession.h\u003e\n```\n\n\n**AppDelegate设置后台下载成功回调方法**\n\n\n```\n-(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler{\n    [[YCDownloader downloader] addCompletionHandler:completionHandler identifier:identifier];\n}\n```\n\n### 下载器 `YCDownloader`\n\n创建下载任务\n\n```\nYCDownloadTask *task = [[YCDownloader downloader] downloadWithUrl:@\"download_url\" progress:^(NSProgress * _Nonnull progress, YCDownloadTask * _Nonnull task) {\n    NSLog(@\"progress: %f\", progress.fractionCompleted); \n} completion:^(NSString * _Nullable localPath, NSError * _Nullable error) {\n    // handler download task completed callback\n}];\n```\n\n开始下载任务：\n\n```\n[[YCDownloader downloader] resumeTask:self.downloadTask];\n```\n\n暂停下载任务：\n\n```\n[[YCDownloader downloader] pauseTask:self.downloadTask];\n```\n\n删除下载任务：\n\n```\n[[YCDownloader downloader] cancelTask:self.downloadTask];\n```\n\n异常退出应用后，恢复之前正在进行的任务的回调\n\n```\n/**\n 恢复下载任务，继续下载任务，主要用于app异常退出状态恢复，继续下载任务的回调设置\n\n @param tid 下载任务的taskId\n @param progress 下载进度回调\n @param completion 下载成功失败回调\n @return 下载任务task\n */\n- (nullable YCDownloadTask *)resumeDownloadTaskWithTid:(NSString *)tid progress:(YCProgressHandler)progress completion:(YCCompletionHandler)completion;\n```\n\n### 下载任务管理器`YCDownloadManager`\n\n设置任务管理器配置\n\n```\nNSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true).firstObject;\npath = [path stringByAppendingPathComponent:@\"download\"];\nYCDConfig *config = [YCDConfig new];\nconfig.saveRootPath = path;\nconfig.uid = @\"100006\";\nconfig.maxTaskCount = 3;\nconfig.taskCachekMode = YCDownloadTaskCacheModeKeep;\nconfig.launchAutoResumeDownload = true;\n[YCDownloadManager mgrWithConfig:config];\n```\n\n下载任务相关通知\n\n```\n//某一个YCDownloadItem下载成功通知\n[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadTaskFinishedNoti:) name:kDownloadTaskFinishedNoti object:nil];\n//mgr 管理的所有任务完成通知\n[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadAllTaskFinished) name:kDownloadTaskAllFinishedNoti object:nil];\n```\n\n开始下载任务\n\n```\nYCDownloadItem *item = [YCDownloadItem itemWithUrl:model.mp4_url fileId:model.file_id];\nitem.extraData = ...;\n[YCDownloadManager startDownloadWithItem:item];\n```\n下载相关控制\n\n```\n/**\n暂停一个后台下载任务\n     \n@param item 创建的下载任务item\n*/\n+ (void)pauseDownloadWithItem:(nonnull YCDownloadItem *)item;\n    \n/**\n继续开始一个后台下载任务\n     \n@param item 创建的下载任务item\n*/\n+ (void)resumeDownloadWithItem:(nonnull YCDownloadItem *)item;\n    \n/**\n删除一个后台下载任务，同时会删除当前任务下载的缓存数据\n     \n@param item 创建的下载任务item\n*/\n+ (void)stopDownloadWithItem:(nonnull YCDownloadItem *)item;\n```\n蜂窝煤网络访问控制\n\n```\n/**\n是否允许蜂窝煤网络下载，以及网络状态变为蜂窝煤是否允许下载，必须把所有的downloadTask全部暂停，然后重新创建。否则，原先创建的\n下载task依旧在网络切换为蜂窝煤网络时会继续下载\n     \n@param isAllow 是否允许蜂窝煤网络下载\n*/\n+ (void)allowsCellularAccess:(BOOL)isAllow;\n    \n/**\n获取是否允许蜂窝煤访问\n*/\n+ (BOOL)isAllowsCellularAccess;\n```\n\n## 使用效果图\n\n单文件下载测试\n\n![单文件下载测试](http://src.onezen.cc/demo/download/1.gif)\n\n多视频下载测试\n\n![多视频下载测试](http://src.onezen.cc/demo/download/2.gif)\n  \n下载通知\n\n![下载通知](http://src.onezen.cc/demo/download/4.png)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonezens%2Fycdownloadsession","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fonezens%2Fycdownloadsession","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonezens%2Fycdownloadsession/lists"}