{"id":24896731,"url":"https://github.com/thebarbican19/Ovatar-iOS","last_synced_at":"2025-10-16T11:31:05.542Z","repository":{"id":62449752,"uuid":"124012604","full_name":"thebarbican19/Ovatar-iOS","owner":"thebarbican19","description":null,"archived":false,"fork":false,"pushed_at":"2019-02-05T22:38:07.000Z","size":41,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-10T20:54:41.677Z","etag":null,"topics":["avatar-component","avatar-service","face-detection","imageview","objective-c"],"latest_commit_sha":null,"homepage":null,"language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thebarbican19.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-06T03:06:17.000Z","updated_at":"2019-02-05T22:36:55.000Z","dependencies_parsed_at":"2022-11-01T22:31:25.361Z","dependency_job_id":null,"html_url":"https://github.com/thebarbican19/Ovatar-iOS","commit_stats":null,"previous_names":["northernspark/ovatar-ios"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/thebarbican19/Ovatar-iOS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebarbican19%2FOvatar-iOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebarbican19%2FOvatar-iOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebarbican19%2FOvatar-iOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebarbican19%2FOvatar-iOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thebarbican19","download_url":"https://codeload.github.com/thebarbican19/Ovatar-iOS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebarbican19%2FOvatar-iOS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279183660,"owners_count":26121444,"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","status":"online","status_checked_at":"2025-10-16T02:00:06.019Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["avatar-component","avatar-service","face-detection","imageview","objective-c"],"created_at":"2025-02-01T20:15:02.434Z","updated_at":"2025-10-16T11:31:05.235Z","avatar_url":"https://github.com/thebarbican19.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ovatar-iOS Documentation\n\u003cstrong\u003eOvatar\u003c/strong\u003e is the quickest and most powerful way to enable avatar support in any client. This documentation focuses on the iOS framework build in Objective C, but can be used in both Objective C and Swift projects. In this documentation, we will show you how to get avatar support in your app in minutes with our super simplified classes that require only a small amount of code. But we also will go into more detail as this framework can give you full control of all Ovatar features. Let's begin…\u003cp\u003e\n\n\u003ch3\u003eRegistering\u003c/h3\u003e\nTo begin using Ovatar in any project you must first obtain a \u003cstrong\u003eapp key\u003c/strong\u003e. This can be done by first signing up to Ovatar at \u003ca href='https://ovatar.io/dashboard/authenticate.php?type=login'\u003eovatar.io\u003c/a\u003e then creating an app.\u003cp\u003e\n    \n\u003cstrong\u003eNOTE\u003c/strong\u003e Ovatar is still in BETA so please let us know of any issues, also be aware that some aspects of the framework may change without notice. For this, we suggest using coccopods version control. \n\n\u003ch3\u003eSetup\u003c/h3\u003e\nOvatar can be installed manually by downloading the repo and adding all the \u003ccode\u003cOOvatar\u003c/code\u003e \u0026 \u003ccode\u003c\u003eOOvatarIcon\u003c/code\u003e header and implementation files.\u003cp\u003e\u003cp\u003e\n\u003cstrong\u003eOR\u003c/strong\u003e\u003cp\u003e\nby adding adding the project though \u003cstrong\u003eCoccopods\u003c/strong\u003e (Recommended)\u003cp\u003e \u003ccode\u003epod 'Ovatar-iOS'\u003c/code\u003e\u003cp\u003e\n\n\u003ch3\u003eGetting Started\u003c/h3\u003e\n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003ccode\u003eimport OOvatar\u003c/code\u003e\u003cp\u003e\n\u003cpre\u003e\nfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -\u003e Bool {\n    OOvatar.sharedInstance(withAppKey: \"app_key\")\n    OOvatar.sharedInstance().setDebugging(true)\n    return true\n}\n\u003c/pre\u003e\u003cp\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003ccode\u003e#import \"OOvatar.h\"\u003c/code\u003e\u003cp\u003e\n\u003cpre\u003e\n-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n\t[OOvatar sharedInstanceWithAppKey:@\"app_key\"];\n    [[OOvatar sharedInstance] setDebugging:true];\n    \n    return true;\n\n}\u003c/pre\u003e\u003cp\u003e\n\t\n\u003ch3\u003eOvatar Icon (The Easy Way)\u003c/h3\u003e\nTo make it quick and easy to get ovatar up and running in your app we designed the \u003cstrong\u003eOOvatarIcon\u003c/strong\u003e. This is a powerful class that handles...\u003cp\u003e\n\u003cli\u003edownloading images from a key or query (email or phone number)\u003c/li\u003e\n\u003cli\u003eimage caching\u003c/li\u003e\n\u003cli\u003eautomatic image repositioning and sizing\u003c/li\u003e\n\u003cli\u003eface detection\u003c/li\u003e\n\u003cli\u003eimage selection and uploading with progress\u003c/li\u003e\n\u003cli\u003efullscreen previews\u003c/li\u003e\n\u003cli\u003eimage size management\u003c/li\u003e\n\n\u003cp\u003e\u003cp\u003e\u003cp\u003e\u003cp\u003e\n\n\u003ch3\u003eAdding the OvatarIcon\u003c/h3\u003e\n\u003ch4\u003eSwift\u003c/h4\u003e\nadd the \u003cstrong\u003eOOvatarIcon\u003c/strong\u003e framework\u003cp\u003e\u003cp\u003e\n\u003ccode\u003eimport OOvatarIcon\u003c/code\u003e\n\u003cp\u003e\u003ccode\u003evar ovatar: OOvatarIcon?\u003c/code\u003e\u003cp\u003e\t\n\u003cpre\u003e\n\tovatar = OOvatarIcon(frame: CGRect(x: (bounds.size.width / 2) - 100.0, y: (bounds.size.height / 2) - 100.0, width: 200.0, height: 200.0))\n    ovatar?.placeholder = UIImage(named: \"a_custom_placeholder_image\")\n    ovatar?.oicondelegate = self\n    ovatar?.hasaction = true\n    ovatar?.preview = false\n    ovatar?.allowsphotoediting = true\n    ovatar?.onlyfaces = false\n    addSubview(headerOvatar)\n    ovatar?.imageDownload(withQuery: \"user@email.com\")\n\u003c/pre\u003e\n\n\u003c/p\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003ccode\u003e.h\u003c/code\u003e\u003cp\u003eadd the \u003cstrong\u003eOOvatarIcon\u003c/strong\u003e framework\u003cp\u003e\u003cp\u003e\n\u003ccode\u003e#import \"OOvatarIcon/OOvatarIcon.h\" \u003c/code\u003e\n\u003cp\u003e\u003ccode\u003e@property (nonatomic, strong) OOvatarIcon *ovatar;\u003c/code\u003e\u003cp\u003e\n\n\u003ccode\u003e.m\u003c/code\u003e \n\u003cpre\u003e\n     self.ovatar = [[OOvatarIcon alloc] initWithFrame:CGRectMake((self.bounds.size.width / 2) - 100.0, (self.bounds.size.height / 2) - 100.0, 200.0, 200.0)];\n     self.ovatar.placeholder = [UIImage imageNamed:@\"a_custom_placeholder_image\"];\n     self.ovatar.oicondelegate = self;\n     self.ovatar.hasaction = true;\n     self.ovatar.preview = false;    \n     self.ovatar.allowsphotoediting = true;\n     self.ovatar.onlyfaces = false;     \n     [self addSubview:self.headerOvatar];\n          \n\u003c/pre\u003e\n\n\u003ch3\u003eLet's get that Ovatar!\u003c/h3\u003e\n\u003ch4\u003eQuerying by Key, Email Address or Phone Number\u003c/h4\u003e\u003cp\u003e\nOvatar allows you to query of course images uploaded using your app_key can be called with ease (the use of a key) but you can also query Ovatar images by \u003cstrong\u003eEmail Address\u003c/strong\u003e or \u003cstrong\u003ePhone Number\u003c/strong\u003e and all can be achived by calling\u003cp\u003e\u003cp\u003e\n\t\u003ch4\u003eSwift\u003c/h4\u003e\n\t\u003ccode\u003eovatar?.imageDownload(withQuery: \"user@email.com\")\u003c/code\u003e\u003cp\u003e\t\n\t\u003ch4\u003eObjective C\u003c/h4\u003e\n\t\u003ccode\u003e[self.ovatar setOvatarImage:@\"user@email.com\" phonenumber:@\"+4477402847283\" fullname:@\"Tom Hanks\" key:@\"[upload_key]\" originalImage:@\"http://mywebsite.com/user/useravatar.jpeg\"];\n\t\u003c/code\u003e\u003cp\u003e\n\n\u003cstrong\u003eNOTE\u003c/strong\u003e In addition to passing a query you can also add a 'name'. This will not query user by name but allow you to store the users name for reference in both the \u003ca href=\"http://ovatar.io/dashboard/\" target=\"_blank\"\u003eOvatar Dashboard\u003c/a\u003e and for later reference when calling the an image.\u003cp\u003e\u003cp\u003e\n\t\n\u003cstrong\u003eNOTE\u003c/strong\u003e passing an original image URL to \u003ccode\u003eoriginalImage\u003c/code\u003e will first migrate this image to ovatar. If you do don't want to migrate images please pass \u003ccode\u003enil\u003c/code\u003e\u003cp\u003e\u003cp\u003e\n\t\n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003ccode\u003eovatar?.imageDownload(withQuery:\"user@email.com\", name:\"Rick Sanchez\")\u003c/code\u003e\u003cp\u003e\t\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003ccode\u003e[self.ovatar imageDownloadWithQuery:@\"user@email.com\" name:@\"Rick Sanchez\"];\u003c/code\u003e\u003cp\u003e\n\n\u003cp\u003e\u003cp\u003e\n\u003cstrong\u003eNOTE\u003c/strong\u003e If you want to query both a key and a email address as fall back simply add this method multiple times.\u003cp\u003e\n\t\u003ch4\u003eSwift\u003c/h4\u003e\n\t\u003cpre\u003e\n\t\tovatar?.imageDownload(withQuery: \"user@email.com\") //email address query\n        ovatar?.imageDownload(withQuery: \"+44000000000000\")//uk phone number query\n        ovatar?.imageDownload(withQuery: \"my_uploaded_ovatar_key\")//query by key\n\t\u003c/pre\u003e\n\t\u003cp\u003e\n\t\u003ch4\u003eObjective C\u003c/h4\u003e\n\t\u003cpre\u003e\t\t\n\t\t[self.ovatar imageDownloadWithQuery:@\"user@email.com\"];  //email address query\n\t\t[self.ovatar imageDownloadWithQuery:@\"+44000000000000\"];  //uk phone number query\n\t\t[self.ovatar imageDownloadWithQuery:@\"my_uploaded_ovatar_key\"]; //query by key\n\t\u003c/pre\u003e\nBy default the class will load the images by key. If no image can be found via key it will fallback to any queryies. \u003cp\u003e\u003cp\u003e\n\u003cstrong\u003eNOTE\u003c/strong\u003e Some users have reported this not working, this is because they called this before the \u003cstrong\u003eOOvatarIcon\u003c/strong\u003e was initialized. Please make sure you add \u003cstrong\u003eOOvatarIcon\u003c/strong\u003e to your project \u003cstrong\u003efirst!\u003c/strong\u003e\n\n\u003ch4\u003eSetting your own icon\u003c/h4\u003e\u003cp\u003e\nIn some cases you may have an avatar icon from another service you would like to use. To do so you can just call\n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003cpre\u003e\novatar?.imageSet(UIImage(named: \"my_local_image.png\"), animated: true)\n\u003c/pre\u003e\n\u003cp\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003cpre\u003e\n[self.ovatar imageSet:[UIImage imageNamed:@\"my_local_image.png\"] animated:TRUE]\n\u003c/pre\u003e\n\n\u003ch4\u003eManual Uploading\u003c/h4\u003e\nWe advise using the power of the \u003cstrong\u003eOOvatarIcon\u003c/strong\u003e class for selecting, managing and uploading new images but if you do wish to upload an image manually you can do so by calling.  \n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003cpre\u003e\n let imagedata = .uiImageJPEGRepresentation() as? Data\n let metadata = [\"copyright\": \"joe barbour\"]\n ovatar?.imageUpdate(withImage: imagedata, info: nil)\t\n\u003c/pre\u003e\n\u003cp\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003cpre\u003e\nNSData *imagedata = UIImageJPEGRepresentation([UIImage imageNamed:@\"my_selected_image.jpg\"], 0.8);\nNSDictionary *metadata = @{@\"copyright\":@\"joe barbour\"};\n\n[self.ovatar imageUpdateWithImage:imagedata info:nil];\n\u003c/pre\u003e\n\n\u003cstrong\u003eNOTE\u003c/strong\u003e Metadata is returned by querying the JSON output, this by directly calling the \u003cstrong\u003eOOvatar\u003c/strong\u003e class. See more below. \n\n\u003cp\u003e\u003cp\u003e\u003cp\u003e\u003cp\u003e\n\n\u003ch3\u003eThe Power of the OOvatarIcon\u003c/h3\u003e\n\u003ch4\u003ePlaceholder\u003c/h4\u003eA placeholder image can be set be set if there is no image available. This can be done by setting the placeholder as a \u003cstrong\u003eUIImage\u003c/strong\u003e. If this is not set the default ovatar placeholder will be set, but this done via a remote image request. We recommend setting your own placeholder to match your UI to avoid any empty states.\u003cp\u003e\n    \n\u003ch4\u003eEditing\u003c/h4\u003ethere will be occasions in your app where you will want to allow the user to edit/change their avatar and there will be times where you don't. By default, the user will not be able to interact with an image. But you can change this by setting the \u003ccode\u003ehasaction = true;\u003c/code\u003e. When set to \u003cstrong\u003eTRUE\u003c/strong\u003e, tapping on the \u003cstrong\u003eOOvatarIcon\u003c/strong\u003e will either call the \u003ccode\u003eovatarIconWasTappedWithGesture\u003c/code\u003e delegate method (see more about delegate callbacks below) or launch the default iOS Gallery Picker right from the subview. By default, the Gallery Picker will be presented, but this can be disabled by setting \u003ccode\u003epresentpicker = false;\u003c/code\u003e\n\n\u003ch4\u003eOnly Faces\u003c/h4\u003e\n    Let's say you're building a dating app? Then you won't want your users to have photos of their dog or their holiday, you want accurate photos of that person. By setting \u003ccode\u003eonlyfaces = true;\u003c/code\u003e the class will quickly detect if the selected image indeed has a human face within. If it does then the image will be uploaded but if the user selects an image without a face then the \u003ccode\u003eovatarIconUploadFailedWithErrors\u003c/code\u003e will be called with an \u003cstrong\u003eNSError\u003c/strong\u003e. (see below for more information about delegate callbacks)\n\n\u003ch4\u003eImage Editing\u003c/h4\u003e\n    Images sizes are managed by Ovatar directly but cropping is not (currently). To make this easy you can set \u003ccode\u003eallowsphotoediting = true;\u003c/code\u003e and when the user selects an image from the default iOS Gallery Picker they will be presented with the default iOS cropping tool. Here the user can resize and reposition the image as they see fit. By default this is disabled. \n    \n\u003ch4\u003eAnimation\u003c/h4\u003e\nOOvatarIcon uses low level animations such as crossfades for when new images are loaded and scale 'bounces' when the icon is tapped. All these animations can be disabled by calling \u003ccode\u003eanimated = false;\u003c/code\u003e\u003cp\u003e\u003cp\u003e\nAdditionally, for more control you can change the crossfade duration by setting \u003ccode\u003ecrossfade = 1.0;\u003c/code\u003e. By deafult this is 0.6.\n\n\u003ch4\u003eFull Preview\u003c/h4\u003eSometimes ovatar images maybe just there as a reference point and maybe to small to see. Enabling preview means when the user taps on an image they will be able to see the Ovatar in full screen. Here a higher resolution will be automatically loaded. This can be enabled on any \u003cstrong\u003eOOvatarIcon\u003c/strong\u003e that is not editable (\u003ccode\u003ehasaction = true;\u003c/code\u003e). By default this is disabled, but can be enabled by \u003ccode\u003epreview = true;\u003c/code\u003e\u003cp\u003e\nAdditionally, you can set a custom caption in the full-screen view. This could be information about the user or just about anything. To add this setting \u003ccode\u003epreviewcaption = \"This is my Ovatar Caption\"\u003c/code\u003e\n\n\u003ch4\u003eLoader\u003c/h4\u003eWhen an Ovatar is downloading or uploading a progress spinner/bar will be presented over the OvatarIcon. By default this is enabled but can be disabled by \u003ccode\u003eprogressloader = false;\u003c/code\u003e \u003c/code\u003e\n    \n\u003ch4\u003eDelegate Callbacks\u003c/h4\u003e\nFor more precice control the OvatarIcon has 4 delegate callbacks. To enable these you must declare the OOvatarIcon as a delegate by \u003ccode\u003eoicondelegate = self;\u003c/code\u003e\n\u003cp\u003e\n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003cpre\u003e\nfunc ovatarIconWasTapped(withGesture gesture: UITapGestureRecognizer?) {\n    //Called if the 'presentpicker' BOOL is set to FALSE (by default it is set to TRUE). Here you can set custom actions for the when the Ovatar Icon is tapped.\n}\n\u003c/pre\u003e\n\u003cp\u003e\n\u003cpre\u003e\nfunc ovatarIconWasUpdatedSucsessfully(_ output: [AnyHashable: Any]?) {\n    //Called if an image is uploaded successfully.\n}\n\u003c/pre\u003e\n\u003cp\u003e\n\u003cpre\u003e\nfunc ovatarIconUploadFailed() throws {\n    //Called if an image cannot be uploaded, see the documentation for error codes.\n}\n\u003c/pre\u003e\n\u003cp\u003e\n\u003cpre\u003e\nfunc ovatarIconUploading(withProgress progress: Float) {\n    //Called everytime the progress of the upload changes. The progress with displayed as in double value on a 0-100 scale.\n}\n\u003c/pre\u003e\n\u003cp\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003cpre\u003e\n-(void)ovatarIconWasTappedWithGesture:(UITapGestureRecognizer *)gesture {\n    //Called if the 'presentpicker' BOOL is set to FALSE (by default it is set to TRUE). Here you can set custom actions for the when the Ovatar Icon is tapped.\n}   \n\u003c/pre\u003e\n\u003cp\u003e\n\u003cpre\u003e\n-(void)ovatarIconWasUpdatedSucsessfully:(NSDictionary *)output {\n    //Called if an image is uploaded successfully.\n}\n\u003c/pre\u003e\n\u003cp\u003e\n\u003cpre\u003e\n-(void)ovatarIconUploadFailedWithErrors:(NSError *)error {\n    //Called if an image cannot be uploaded, see the documentation for error codes.\n}\n\u003c/pre\u003e\n\u003cp\u003e\n\u003cpre\u003e\n-(void)ovatarIconUploadingWithProgress:(float)progress {\n    //Called everytime the progress of the upload changes. The progress with displayed as in double value on a 0-100 scale.\n}\n\u003c/pre\u003e\n\u003cp\u003e\u003cp\u003e\n\u003cp\u003e\u003cp\u003e\n\n\u003ch3\u003eDebugging \u0026 Options\u003c/h3\u003e\nThe following can be set from anywhere in your app but we recommend setting the following variables in the \u003ccode\u003edidFinishLaunchingWithOptions\u003c/code\u003e method in your \u003ccodeAppDelegate.m\u003c/code\u003e\u003cp\u003e\u003cp\u003e\n\u003ch4\u003eName\u003c/h4\u003e store the users fullname when uploading an ovatar\n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003cp\u003e\u003ccode\u003eOOvatar.sharedInstance().setName(\"Steve Jobs\")\u003c/code\u003e\u003cp\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003cp\u003e\u003ccode\u003e[[OOvatar sharedInstance] setName:@\"Steve Jobs\"];\u003c/code\u003e\u003cp\u003e\n\u003ch4\u003eDebugging\u003c/h4\u003e to enable console debugging simply set \n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003cp\u003e\u003ccode\u003eOOvatar.sharedInstance().setDebugging(true)\u003c/code\u003e\u003cp\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003cp\u003e\u003ccode\u003e[[OOvatar sharedInstance] setDebugging:true];\u003c/code\u003e\u003cp\u003e\n\u003ch4\u003e\u003ca href=“http://gravatar.com”\u003eGravatar\u003c/a\u003e Support\u003c/h4\u003e by default if an avatar cannot be found Ovatar will attempt to fallback on Gravatar. This can be disabled. \n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003cp\u003e\u003ccode\u003eOOvatar.sharedInstance().setGravatarFallback(false)\u003c/code\u003e\u003cp\u003e\u003cp\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003cp\u003e\u003ccode\u003e[[OOvatar sharedInstance] setGravatarFallback:false];\u003c/code\u003e\u003cp\u003e\u003cp\u003e\n\u003ch4\u003eCaching\u003c/h4\u003e When an ovatar image is initially downloaded it is saved ti the local cache. This it to prevent unnecessary server calls. The caching cannot be disabled but the expiry can be changed by setting \u003cp\u003e\n\u003ch4\u003eSwift\u003c/h4\u003e\n\u003ccode\u003eOOvatar.sharedInstance().setCacheExpirySeconds(60 * 60 * 4)//in seconds\u003c/code\u003e\u003cp\u003e\n\u003ch4\u003eObjective C\u003c/h4\u003e\n\u003ccode\u003e[[OOvatar sharedInstance] setCacheExpirySeconds:60*60*4];//in seconds\u003c/code\u003e\u003cp\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthebarbican19%2FOvatar-iOS","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthebarbican19%2FOvatar-iOS","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthebarbican19%2FOvatar-iOS/lists"}