{"id":16686069,"url":"https://github.com/mosheberman/spiffykit","last_synced_at":"2026-04-21T22:33:51.930Z","repository":{"id":9761289,"uuid":"11728745","full_name":"MosheBerman/SpiffyKit","owner":"MosheBerman","description":"A framework for a drop-in view controller that allows users to contact you and share your app.","archived":false,"fork":false,"pushed_at":"2016-10-23T13:26:32.000Z","size":801,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-20T10:47:38.728Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"animusdev/Old-World-Blue","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MosheBerman.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":"2013-07-29T01:32:19.000Z","updated_at":"2016-10-23T13:26:33.000Z","dependencies_parsed_at":"2022-07-08T10:19:33.796Z","dependency_job_id":null,"html_url":"https://github.com/MosheBerman/SpiffyKit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MosheBerman%2FSpiffyKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MosheBerman%2FSpiffyKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MosheBerman%2FSpiffyKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MosheBerman%2FSpiffyKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MosheBerman","download_url":"https://codeload.github.com/MosheBerman/SpiffyKit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243428436,"owners_count":20289317,"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":[],"created_at":"2024-10-12T15:04:29.503Z","updated_at":"2025-12-29T22:51:07.899Z","avatar_url":"https://github.com/MosheBerman.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"SpiffyKit\n=========\n\nA framework for a drop-in view controller that allows users to contact you and share your app.\n\nScreenshots:\n---\n![](./demo.png)\n\nDependencies:\n---\n\nYou'll need iOS 6.0 or higher, and a couple of frameworks, outlined below.\n\nIf you try to use it with an earlier SDK, your mileage won't vary, it'll simply blow up. You've been warned.  If you're really stubborn, you may try removing \"Tell a Friend\" feature. It still won't work.\n\nGetting Started:\n---\n\nOnce your app's Xcode project knows about Spiffy, it'll be fairly simple to integrate. We have to do five things to see Spiffy in our app:\n\n0. Drag the `SpiffyKit.xproj` and `SpiffyKit` folders into our new app. Don't add anything with \"Test\" in its name.\n1. Add `libSpiffyKit.a` as a build dependency.\n2. Link our app against `libSpiffyKit.a`, `Social.framework`, and `MessageUI.framework`\n3. Configure SpiffyKit in our App Delegate\n4. Show an instance of the `SpiffyViewController`.\n\n\nAdding Spiffy To Your Project\n---\nYou're probably going to want to add SpiffyKit as a submodule of your existing repo. That, or download the project. Add `SpiffyKit.xproj` and the similarly named `SpiffyKit` directory that's sitting beside the Xcode project. (Don't add the `SpiffyKitTester` or `SpiffyKitTests` directories.)\n\n\nAdding Spiffy as a Dependency\n---\nAdding a dependency in Xcode 4 is fairly simple. \n\n1. Click on your project's root so that you see the configuration in the main area. \n2. Click on *{your app's name}* under \"Targets\" then on \"Build Phases\"\n3. You should now be staring at a stack of boxes, and the top one will say \"Target Dependencies\"\". If the triangle is pointing at \"Target Dependencies\" click on the triangle and the box will expand. Click on the itsy bitsy plus in the corner and you should see `libSpiffyKit.a` or `SpiffyKit`. Add it.\n\nLinking Against SpiffyKit\n---\n1. Beneath the box called \"Target Dependencies\" is another one that says \"Link binary with libraries.\" Expand it.\n2. Click on the plus in the corner and add `SpiffyKit`. Repeat the process for `Social.framework` and `MessageUI.framework`.\n\nConfiguring SpiffyKit\n---\nThis is the fun part. SpiffyKit follows the configurator model. There's a singleton class that you call to configure the framework. Then, you can call the same object to tell SpiffyKit to do its thing. \n\nTo configure SpiffyKit, add this method to your app delegate:\n\n    - (void)configureSpiffy {\n    \t\n    \t// The numeric ID that iTunes Connect assigns to your app\n    \t[[SpiffyController sharedController] setAppStoreIdentifier:@\"\"]; \n    \t\n    \t//\tA direct URL to your app in iTunes.\n\t\t[[SpiffyController sharedController] setAppURL:@\"\"];\n\t\t\n\t\t//\tA link to your website\n\t\t[[SpiffyController sharedController] setWebsiteURL:@\"http://mosheberman.com\"];\n\t\t\n\t\t//\tA link to your App Store developer page\n\t\t[[SpiffyController sharedController] setMoreAppsURL:@\"\"]; \n\t\t\n\t\t//\tYour email address\n\t\t[[SpiffyController sharedController] setSupportEmailAddress:@\"\"];\n\t\t\n\t\t//\tYour twitter handle, without the @ symbol\n\t\t[[SpiffyController sharedController] setTwitterHandle:@\"\"]; \n\t\t\n\t\t//\tA color for cell highlights and navbar tint\n\t\t[[SpiffyController sharedController] setAppColor:[UIColor orangeColor]]; \n\t\t\n\t}\n\t\nNow, somewhere in your `applicationDidFinishLaunching...` method, call `[self configureSpiffy]`.\n\nPresenting Spiffy\n---\n\nUse this one line of code:\n\n\t[[SpiffyController sharedController] presentInViewController:aViewController fromRectWhereApplicable:aCGRect];\n\t\nSpiffy presents itself in a popover on the iPad, and as a modal view controller everywhere else. If you're on an iPad, the second parameter is passed to the popover controller to determine where the \"popover is presented from\" onscreen. If your on another iOS device, just pass CGRectZero. Alternatively, feel free to amuse yourself. Since your amusement likely isn't applicable, Spiffy will safely ignore you.\n\nAdvanced Configuration: Analytics\n---\n\nSpiffy doesn't actually manage analytics in your app, but it does provide a UI, for free, for your user to interact with `NSUserDefaults` so you can obtain their permission to use your own analytics library if you wish. (Some well known ones out there are Flurry, Localytics, and TestFlight Live.)\n\nSimply add this line to SpiffyKit to enable the analytics switch:\n\n\t[[SpiffyController sharedController] setShouldPresentAnalytics:YES];\n\t\nIt's that easy. But how do you actually read out the user's preferences? There is a group of methods in SpiffyController that enables you to do just that:\n\n\t\t#pragma mark - Diagnostics\n\n\t\t- (void)toggleDiagnostics:(UISwitch *)sender;\n\t\t- (BOOL)diagnosticsEnabled;\n\n\t\t#pragma mark - Analytics\n\n\t\t- (void)toggleAnalytics:(UISwitch *)sender;\n\t\t- (BOOL)analyticsEnabled;\n\nYou're probably wondering why I'm passing `UISwitch` objects into my `toggle...:` methods. It's a pretty good question. The answer is that I'm taking a shortcut in my internal UI classes that I can probably refactor. Spiffy manages those values internally, so it's not a good idea to use them. Stick to the getters and you'll be fine.\n\nThis functionality uses `NSUserDefaults` as a backing store. The keys are `SpiffyKitDiagnosticsEnabled` and `SpiffyKitAnalyticsEnabled`.\n\nFree Functionality:\n---\nSpiffyKit shows your app's icon at the top, and a string in format of `{Display Name} {Version} ({Build})` at the bottom. You also get that nifty UI for toggling analytics and diagnostic data in any fan, hate, or love emails that your users may send you.\n\nLicense\n---\nDo whatever you want with this code, except sell it or represent it as your own. You may use it in your own apps, even if you sell them for money. Attribution would be nice, but is not required.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmosheberman%2Fspiffykit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmosheberman%2Fspiffykit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmosheberman%2Fspiffykit/lists"}