Set your name as the source of your cocktail creations and set a “go-to” favorite cocktails icon by tapping the gear icon on the cocktails tab. Other app features may be configured from this view, as well.
The primary use of the app is adding, tweaking (editing), reading, and deleting cocktail recipes. All of these activities are handled from the cocktails tab view.
Tapping any cocktail name in the cocktails view takes you to the detail view, where the recipe and other relevant information are displayed.
Cocktails and cocktail ingredients may be deleted by swiping left in the cocktails view and in the detail view, respectively.
You may optionally choose to keep track of which ingredients are on hand. An ingredient index is automatically generated and updated as cocktails are added, tweaked, and deleted. It can be viewed and each item toggled on or off from the ingredients tab.
Toggle the generic ingredient category in each gray header to match ANY ingredient of that type. This helps build the “cocktails I can make right now” and “cocktails that need one more ingredient” lists in the cocktails view.
You may toggle both specific ingredients and generic ingredient categories.
Keeping track of what ingredients are on-hand will cause the app to color-code the cocktails list and each cocktail’s detail view, as well as provide an inventory of your bar in a future release.
Color Coding and Go-to Favorites
Cocktails are color-coded when all ingredients are on-hand or when one ingredient is missing. Cocktails with fewer on-hand ingredients are not color-coded.
A cocktail may be toggled as a “go-to” favorite in its detail view.
Cocktail and ingredient views may be filtered by tapping the filter button in the cocktails view and in the ingredients view, respectively.
Cocktail filtering will display those recipes that you created, those that are go-to favorites, cocktails you can make right now based on ingredients on-hand, a search result, and so on.
Ingredient filtering will display all ingredients in sections of generic type, one selected generic type, or a search result.
Tweaking vs. New Version
Self-created cocktails may be tweaked or a new version created. Cocktails created by other sources may only allow for a new version. Tap the ellipsis icon in the cocktail detail view.
Self-created cocktails may always be shared with other users of Craft, The Cocktail App via AirDrop or Mail by tapping the share iconin the cocktail detail view.
Allowing friends with whom you share a cocktail to subsequently share it with others may be disabled in the cocktail detail view by tapping the Sharing Details button. The default behavior is to allow subsequent sharing.
Cocktails for which subsequent sharing is disabled cannot be shared by others.
Receiving Shared Cocktails
Receiving a shared cocktail is as simple as tapping a Mail file attachment or accepting an AirDrop request. You may have to scroll through the list of available app icons, or even tap the More icon to find Craft. If so, tap Edit, then the plus icon next to Craft, then Done. Then tap Craft.
The app saves your cocktails on your device and, if you’re logged into iCloud, uploads them. If you install the app on additional devices, the app will keep your recipes and ingredients synchronized between all of them.
iCloud may require a few moments to sync on your second or subsequent device. You’ll know syncing is complete when the summary, below, is the same on each device.
Builds 61, 62:
- Bug fix for duplication of ingredients.
- Bug fix for crash-on-delete of a cocktail. Moved cocktailsView back to an @FetchRequest.
Build 60 (RELEASE, version 2021.5.3):
- Removed test data.
- Restored onChange(isFavorite) to cocktail detail view.
- Added favorite cocktail icon choices.
- Let cocktail names turn green if one or more of the ingredients is onHandAsGeneric. Let ingredient turn green if onHandAsGeneric.
- Holy shit finally figured out where the cocktailsView and publicCocktailsView pop bug was; setting autoSelectedCocktail = nil when not on an iPad. Removed else clause.
- Moved all tabview views away from @FetchRequest again for speed.
Build 58 (RELEASE, version 2021.5.2):
No changes from build 57.
- Removed onReceive of remote storage change from cocktailsView. Bug had persisted.
- Restored onChange for isflvorite toggle in cocktailDetail.
- Allowed support for iPad in portrait orientation
Build 56 (RELEASE, version 2021.5.1):
- Fix for cocktails view pop bug.
- Allowed developer to delete any public cocktail
Build 55 (RELEASE, version 2021.5):
- Repaired bug in filteredSortedCocktails func and delete-cocktail code in cocktailsView.
- Added splash screen logo
- Tweaks to improve apparent speed of the app
- Fix for lost ingredients when syncing onto a new device while multitastking
- Moved config button to the Info view.
- Set all colors in each color theme.
- Replaced toggles in ingredient index view with checkboxes.
- Added code for colorTheme.
- Added three themes: blue, olive, peru. Parchment theme remains the default.
- Removed hiding of community collection cocktails when they also exist in the personal collection. More confusing than it was worth.
- Added publicCocktailFilterSetting and lastPublicCocktailSearchString keys.
- Made ingredient-in-cocktail search find suitable results in both personal and community collections.
- Moved ingredient index action buttons from a popover to a slide-down tray on iPad.
- Added documentation for community sharing to the Info tab.
- Fully revised documentation on Info tab.
- Added code to re-create the ingredient index and a button at the bottom of the info view to use it.
- Moved addSourcesButtons and reIndex button to ConfigView.
- Modified public cocktail filtering to exclude cocktails copied to the private collection.
- Modified replication code to only assign a new ID to a cocktail when copying a private cocktail.
- Added code to add or update an existing private cocktail when copying from a pubic cocktail based on duplicate ID.
Build 48: (internal build, not release to Test Flight)
- Implemented code to copy a community shared recipe into the private collection.
- Created PublicCocktailView to display community-shared cocktails.
- Refined code to copy public cocktails to the private database.
Build 47: (internal build, not released to Test Flight)
- Changed titles font to Optima Regular.
- Re-organized model extensions to their own group.
- Created public database data types and extensions.
- Added public database access code to persisted container constructor.
- Added Community Sharing code to the sharing button in cocktail detail.
Build 46: (RELEASE, version 2021.4):
- Reduced the title font size for the ingredient index Action button popover.
Build 45: (release candidate 2, version 2021.4):
- Moved ingredient index item Find in Recipes button, edit button, and share button to an Action button view displayed in a popover on iPad, but left them as-is for iPhone.
Build 44: (release candidate 1, version 2021.4):
- Repaired safe area white strip at the bottom of the cocktail detail view when in a popup.
- Made My Notes a TextField in edit mode, Text item in non-edit mode.
- Created a new popoverBackgroundColor and EditableTextField to contrast with the regular background color when a popup is open.
- Tweaked background color slightly lighter.
- Changed ConfigView display from a sheet to a popover.
- Changed Search view to a popover
- Moved CocktailDetail view to a popover for adding cocktails, tweaked the code to set editMode inactive when done.
- Added ingredientIndexItem sharing. Users can share an ingredient directly rather than only as a part of a cocktail recipe. Bookmarks, if any, are included with ingredient.
- Restricted adding new ingredient bookmarks to only those where strippedIngredientString matches, not contains.
- Removed choice to delete an ingredient from ingredientAddAndEdit if it’s in use in a cocktail.
- Added instruction to the info view for using the “document your bar” feature.
- Got keyboard avoidance working on cocktail detail view (for TextFields only).
- Added a UIActivityItemProvider class to act as a proxy for a shared cocktail until the user selects which means of sharing to use.
- Cleaned up navigation to cocktail detail; now passing a Cocktail?, only. PCocktail is an ObservedObject in cocktails view for immediate update. Improves responsiveness opening a cocktail detail on iPad.
- Added ATS plist entries to allow http requests rather than the default https-only.
- Repaired nil fault in ingredient string compare for duplicates.
- Distributed alerts so they can all fire.
- Added white space removal before checking for duplicate ingredient string.
- Added non-duplication and non-empty ingredientString checks and alerts to IngredientAddAndEdit view.
- Added ingredient index add and edit buttons and functionality.
- Switched ingredient index view to show ingredient string, not stripped ingredient string. Allows the user to see oddball ingredient strings and edit them.
- Added delete feature to ingredient index edit.
- added code to repair erroneous creation of ingredientIndex ingredient strings from unstripped ingredients. Runs once per device in detail view.
- Cleaned up color strings.
- quick build to include code left out of new cocktail creation that set onHand status. Not released in favor of build 37.
Build 35 (RELEASE, version 2021.3.1):
- added call to setIngredientOnHand() in new cocktail creation that was left out of 2021.3.
Build 34 (RELEASE, version 2021.3):
- Removed test data.
- Resolved picker/ingredient text box tap contention by wrapping the notification in a 0.35-second delay. False constraint errors were swallowing the tap gesture. Problem is triggered by the keyboard appearing for text entry on iPad only.
- Shared cocktail filename is a string of the cocktail name with each word capitalized and spaces removed.
- Added filter option for all on-hand ingredients.
- Correctly set onHand status of ingredient index items in shared cocktails.
- The lack of garnish and optional ingredients no longer count against “cocktails I can make now” and “cocktails requiring one more ingredient.” Color-coding remains the same.
- Repaired picker/predicted ingredient name gadgets on iPad by specifying StackNavigationStyle in cocktails view. Needs work to understand why.
- Repaired new cocktail bug: new cocktails created serially all had the same id and timestamp causing display and deduplication problems. Explicitly set the id and timestamp rather than rely on init().
- Fixed problem with the tappable area in the predictive textfield for ingredients. Additional padding allows tap to register when amount picker is open.
- Added lookup buttons to sources list in info view.
- Added ingredient lookup button to bookmarked ingredient list in info view. Tweaked ingredient index view to include an appropriate back button.
- Tweaked size of font and frame, created border for amount picker.
- Resolved contention between opening an ingredient amount picker or predicted ingredient strings and ensuring those were closed for all other ingredients.
- Fixed bug where 1/3 and 2/3 amount fractions were not displayed in cocktail detail view due to rounding.
- Repaired bug in vertical index code.
- Added predictive ingredient string editing.
- Added new in-memory and persisted ingredientIndex member ingredientString to facilitate forthcoming “document your bar” feature.
Build 28 (RELEASE, version 2021.2):
- Tweaked down-arrow close icon to use system font, .medium weight.
- Tweaked refresh in a couple of places.
- Added PredictingTextField preliminary to adding predictive lookup of ingredients when adding them to a recipe.
- Added a “back” button to the ingredients index view for when arriving there from an ingredient lookup.
- Tweaked the onChange modifiers in cocktails view to reload filters, filter buttons, and re-calculate sortedFilteredCocktails on every change.
- Removed sharing details components.
- Tweaked dark mode green text color one tint lighter.
- Corrected Sazerac instructions.
- Added instructions for web lookup and bookmarking in the information view.
- Changed all button borders to Color.primary.opacity(0.5). Looks better.
- Incorporated the Greenpoint UK recipe in the default set.
- Found onCommit modifier for TextField to make enter button work.
- Extended TextField background and border look to TextEditor with two .background modifiers.
- Reorganized code in cocktails view, moving foreach loop up to the main body in preparation for adding a vertical alphabetic index.
- Added a vertical alphabetic index to the cocktails view.
- Tweaked recipe for Greenpoint UK.
- Renamed recipe for The Final Word to The Last Word.
- Added border around ingredient amount number, fraction, unit, and chevron button.
- Made ingredient items set correct color green/none in detail view by doing real-time lookup for each.
- Added code to set onHand and onHandAsGeneric values for new default cocktails.
- Added ingredient bookmark sharing to cocktail sharing. A shared cocktail now brings with it its ingredient index items and bookmarks, if any, for each of those.
Added ingredient item web search and bookmarking. In the ingredient index tab, each ingredient is now a button. Tap an ingredient button to open a built-in browser window and navigate to a Google search on the ingredient string. A navigation row appears below the browser allowing for back, forward, and reload operations. The URL appears at the top. You may type any legitimate URL into the address box and tap Go! to navigate to it. Save any URL to a bookmark by tapping the bookmark icon to the left of the address box. Each new bookmark appears below the address box. Bookmarks are persisted. Bookmarks are not editable but may be navigated to, shared, or deleted. Tap a bookmark button with a title in it to navigate to it. Tap the share icon to share the bookmark via the usual means. Tap the trashcan icon to delete the bookmark. Bookmarks are tallied in the app summary on the Info tab.
Build 24 (minor RELEASE, version 2020.1.1):
- Cosmetic changes to text boxes and green and yellow colors.
Build 23 (FIRST RELEASE, version 2020.1):
- Removed Info view text explaining subsequent sharing.
- Set Original Notes text item disabled to prevent editing.
- Set activeTab = 1 when selecting an ingredient filter.
- Added code to remove zero-length ingredients after user taps doneEditing button.
- Added de-saturated accent color to ingredient amount picker.
- Re-worded the sharing details descriptive text to make its intent clearer.
- Tweaked accent, green, and picker colors.
- Put context save in a conditional for app moving to background to eliminate data corruption.
- Removed sharing details button from detail view, changed code to set test data isShareable value to TRUE when copied.
- Removed excess ingredient deletion code from updatePersistedIngredients.
- Removed delay updating persisted cocktails that caused a nasty ingredient-deleting bug.
- Tweaked a few of the default cocktail recipes for grammar, punctuation, and capitalization.
- Un-remarked the filter button in Ingredients view.
- Removed “search result” from All Other ingredient index section.
- Added activeTab setting to search form Search button.
- Fixed logic error that wiped out ingredient.ingredientAmountUnit while parsing JSON files.
- Repaired truncated summary text lines in Info view.
- Removed lazy instantiation of the persistent container variable to eliminate run-time warning.
- Moved NotificationCenter addObserver to persistent container init().
- Final(?) version 2021.1 release candidate.
- Added frame size to “original notes” label for iPhone only in detail view.
- Corrected Vesper recipe in default.json to 2 tsp Cocchi Americano.
- Reverted to basic @FetchRequests. Class extension version (allItems) disables auto-refresh of other views.
- Second version 2021.1 release candidate.
Entirely screw-tightening. If you’re interested…
- Added check of previous tempCocktail.cocktailName value to each .onChange in detail view so we don’t update the persisted cocktail when loading tempCocktail in .disabled cocktail editing
- Removed dc.json for submission to App Store.
- Fixed config view uncommanded font size-change by setting the correct font for each Form Section.
- Switched NavigationBarTitle() (deprecated) to NavigationTitle() and NavigationBarTitleDisplayMode().
- Greatly simplified ingredients tab view display code.
- This version adds adaptive display capability to a few view items. Each cocktail’s source, notes, favorite toggle, and sharing details button layout differently depending on what type of device is running the app.
- This is a release build of the app. You won’t see the default data or add data buttons, and the app may run a little quicker. This is a release candidate for version 2021.1.
- New Core Data database and iCloud schema. You will see only the default 24 cocktails again. Re-add the D&C cocktails or the full set (D&C, PDT, Craft of the Cocktail). This should be the only time I need to move to a new database, so feel free to begin adding your own creations.
- For testing, install to a second device (re-open the invitation email I sent months ago on a second device and re-follow the instructions. Let me know if you need a new invitation.) and add a few cocktails, re-select the ingredients you have on-hand, etc. iCloud sync takes 20-30 seconds. Syncing of filter settings and profile configuration is much faster (2-3 seconds).
- I tweaked the profile configuration view to work more simply. It’s in “edit mode” all the time.
- Other minor bug fixes.
This is a significant update so you’ll need to hit the “default data” button after launching this version.
- I finally knocked out the iCloud sync bug, so if you’ve been using the app on two or more devices you’ll want to hit “default data” on all. Recipes, ingredients, and the ingredient index all sync correctly now.
- New feature—a number of servings picker in the cocktail detail multiplies the ingredient amounts as appropriate while preserving proper fractional notation.
- You have access to a much fuller set of test data from three sources in addition to the default set now. After hitting the default data button, select either D&C or the full set on the Info tab.
- All recipe ingredient amounts have been converted to dropdown-picker compatibility. You’ll only see this if you tweak or create a new version of a recipe.
- Turns out having multiple pickers open at once is confusing. I’ve added code and animations to prevent more than one picker from being open at the same time.
- I’ve added “grnsh,” “rinse,” and “fill” as selections in the ingredient amount unit picker. These strings show up as (garnish), (rinse), and (fill) AFTER the ingredient string when viewing (but not tweaking) the recipe and let the user note which ingredient items aren’t for mixing the drink, but rather for rinsing the glassware, filling to the top, or garnishing the completed cocktail. Yes, “grnsh” is misspelled, but it succeeds at not wrecking my layout.
- The default ingredients were edited to include the new unit strings where needed. Feel free to hit the “default data” button to load them.
- The cocktail detail now remains open after exiting tweak mode. Previously, it had closed immediately, returning the user to the cocktails tab on a phone. iPad users will notice no change.
- I tweaked the Core Data load/unload of data in and out of memory storage when viewing and leaving the ingredients tab. I’ve seen iCloud data get heinously out of sync after hitting the “default data” button recently. I had modified the load/unload behavior a while ago. Guess that started it. Hopefully, this fixes the problem.
- Introducing the picker, a better way to enter uniform amount details for your cocktail ingredients. When you navigate to a cocktail, the ingredients are listed as before. Ingredients may be deleted from there by swiping left without entering “tweak” mode.. If you enter tweak mode, or if you’re creating a new cocktail, each ingredient has a dropdown arrow to the left. Tap it and a picker opens below the ingredient where you may select digits, fractions, and units for each ingredient. Tap the dropdown arrow again (now pointing up) to close the picker.
- Bugs fixed:
- Incorrect items appeared in the ingredient index as a result of my adding the ingredient lookup button. They’ve been removed.
- Ingredients had a way of disappearing below the bottom margin of the scrolling list…that’s been remedied.
- Introducing generic ingredients. Until now, toggling only the specific ingredients you actually have on-hand (on the ingredients tab) yielded a disappointingly short list of cocktails you “can make right now.” No more.
To use (and test, please), go through your ingredient list and UNtoggle the items you don’t actually have on-hand. Better still, start from scratch by hitting the “default data” button, then add back in the D&C recipes.
(I’ve included a new recipe (thanks, Scott) in the default list that’s very good, the Co-pilot. It will be added to your recipes either way. It REQUIRES 10 (!) dashes of the right bitters and the magazine article directs us to Angostura Chocolate, HOWEVER, I had one with Scrappy’s Chocolate bitters and will be using that, instead. I might change the default recipe to reflect that. Dunno.)
Go back and toggle on the generic ingredients you want to match ANY specific item of its kind. For instance, I don’t have either of the absinthe products in the ingredient list, but I do have one I like. I toggle ON the header item (gray background) and “absinthe” will count toward cocktails I can make right now and cocktails that require one more ingredient. The absinthe ingredient IN THE RECIPES won’t color code green, because I don’t actually have either of the named ingredients, but the recipes are otherwise makeable by substituting what I DO have. In other words, rather than doing substitutions by toggling on bottles that they don’t actually have, users will get to do the substitutions while looking at a recipe that they otherwise wouldn’t have seen.
Let me know 1. if you encounter any bugs, 2. if having the generic ingredient in both the headers and in among the specific ingredients is confusing. Toggling the header item toggles the identical item in the list and vice versa, and 3. does this workflow make sense for how you might use the app?
Build 9 (Betaville):
- Added ingredient search, ingredient lookup, and ingredient-in-cocktails search:
- Ingredient search: tap the magnifying glass at the bottom of the ingredients tab to search for specific ingredients. String fragments work here—same as a cocktail search—so searching for “gin” might yield gin as well as ginger.
- Ingredient lookup: tap the magnifying glass to the left of any ingredient IN A COCKTAIL RECIPE to see and/or change that ingredient’s on-hand status.
- Ingredient-in-cocktails search: tap the words “Find recipes” next to any ingredient OR category header in the ingredients tab to find all recipes containing that item. Tapping in a header takes you to all recipes containing the generic item (i.e.: tap on “gin” for all recipes containing any gin.).
Build 8 (Betaville):
- Fully repaired the tapping selection issue in the cocktails view for iPad users. Added a nice animation when selecting a cocktail or tapping the “add ingredient” button for both iOS platforms.
Build 7 (Betaville):
- Fixed a tap issue on iPad.
Build 6 (Betaville):
- New: upon the first run on any device, the user is presented with the configuration view to set their name and favorite cocktail icon. An alert also advises where to find the app’s instructions. Testers can ignore this and tap “Done.” Your personal user data will sync from iCloud. New: The configuration view now includes a setting to show each cocktail’s source in the cocktails view if you’re so inclined. New: The configuration item labels are now tap-targets, so when you’re in that view you can just tap “name” or “favorite icon” to enter edit mode. Revised: The ingredient index now has tappable headers that are also more readable. Tap a header (gin, rye, bitters, etc.) to see all cocktails makeable with that generic ingredient. Tap a specific ingredient (The Botanist Gin, Rittenhouse rye, etc.) to see recipes that include it. Revised: The Info tab now has subheadings for each section of the instructions to make it more readable. Revised: The search view’s font size is larger, making it easier to read as well as easier to tap for focus. Revised: All buttons have been increased in size by a couple of points. They should be easier to successfully tap. Let me know if you find other items that need larger tap targets. Added: One more default cocktail, the Old Fashioned. Total default cocktails are now 23. Several were edited for errors in ingredients or instructions. Please error-check these. TAP THE “DEFAULT DATA” BUTTON to reload them (yes, you’ll lose your on-hand settings. The life of a beta tester.) Then tap the “add source” button on the Info tab to re-load the D&C recipes. Combined with the DC recipes, the totals are now 441 cocktails, 471 unique ingredients. A couple of you have remarked about how the ingredient index doesn’t let you substitute your favorite expression of a spirit, for instance, to let you toggle on a particular rye whiskey and have it appear in place of, say, Rittenhouse for your Manhattan recipe. The index is created on-the-fly from recipes, not the other way around, so the way to get a recipe the way you want it is to tweak it (if you created it) or create a new version (if someone else is the source). Include a new ingredient, then save. Go to the ingredients index and toggle the new ingredient ON. Voila. Mull how this works, and whether it’s worth having an ingredient index that goes to this level of detail. Should I go with a generic index (gin, rye, bourbon, vodka) and let the user toggle those items on/off, then have the user do their own substitution when looking at a recipe? Or is it better to require the user to toggle ON items to which they have a close match on-hand, but not the exact bottle? As always, all comments and suggestions are welcome.
Build 5 (Betaville):
- Build 5 includes an improved ingredient index. Each item in the list is a tap target (full width) that takes the user to a collection of those cocktails that include the tapped ingredient string. Tapping the header of each section (Gins, Bourbons, Amari, etc.) results in ALL cocktails that include the header text. Known issue: tapping Gin also returns cocktails including “ginger.” Work in progress.
Build 0.4 (Betaville):
(It was a secret.)
Build 0.3 (Betaville):
- I belatedly discovered that the archive released to TestFlight for beta 2 was a release version by default, so you had no access to the “force static” and “add source” buttons. I’ve remedied that in the third beta release. Force static will return the cocktail data set to its initial state, while add source (on the Info tab) will add a large cocktail recipe set to your data for testing. This set will remain among your saved cocktails after beta testing is complete and a release version is installed as a thank-you for playing along. Cocktail sharing is working! Yay! You’d need a second device logged into a different iCloud account to correctly test this, but you can approximate it by adding a test cocktail, then sharing it with yourself via email, then deleting the test cocktail in the app, and finally tapping on the shared cocktail email attachment in your Apple Mail client. You should get an alert dialog in the app that the cocktail has been shared to you, and it will appear in the list of cocktails in the app. If you know of anyone else who would enjoy testing the app—I don’t know of any show-stopping bugs, so it’s fairly safe to try out—send me their email address. Let them know to expect a TestFlight email from me. To that end, this is still beta software so don’t get too married to the test cocktails you add. There’s always the chance a latent bug will wreak havoc. That’s what you’re testing to find out! Please add, tweak, delete, shuffle ingredient order, and otherwise kick the tires to your heart’s content. As always, feedback is most welcome on any aspect of the app. FYI, I plan to add a search feature and ingredient drill-down in the next version. Otherwise, feature suggestions are welcome.
Build 0.2 (Betaville):
- All functionality and visual style including colors, ease of use, syncing between two devices. After perusing the half-dozen cocktails included by default, feel free to add your own for testing. They will be preserved across re-installations if you are signed in to your iCloud account unless you hit the “force static” button. This button will only be exposed during testing; it returns the app to its out-of-the-box data set. Use it if your cocktails get hopelessly goofed up. There is a button at the bottom of the Info screen that will dump over four hundred cocktail recipes from the DC cocktail book into your recipe set as a way to stress-test the sync capability. This button will be available throughout beta testing but disappears after you use it to prevent multiple adds. You can get it back by hitting “force static.” Note: sharing is not yet working correctly. Hold off testing it.
Build 0.1 (Betaville):
- All app features, visual styling, text readability, and the full user experience. Note: sharing is not yet working, so the icon has been removed from the detail view (contrary to what the Info view says).
Craft, The Cocktail App does not collect or distribute any user data. It stores cocktail recipe data as entered by the user and uploads it to the user’s iCloud account for sync with the user’s other iOS and iPadOS devices.