Craft, The Cocktail App


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.

Version History

Build 101 (RELEASE, version 2023.4.1):

  • Bug fixes (map distances update while moving, community cocktails fetch selects only non-trashed cocktails, trashing a community cocktail changes its and its ingredient’s UUID).

Build 100 (internal build, version 2023.4.1)

Build 99 (RELEASE, version 2023.4):

  • Added map of nearest liquor stores for ingredients, with tappable routing from current location.
  • UI tweaks.

Build 98 (internal build, version 2023.4)

Build 97 (RELEASE, version 2023.3.1):

  • Changed ingredient web search engine from Google to Duck-Duck-Go.
  • Switched iPad navigationSplitView to balanced mode for better presentation in portrait orientation.
  • New screenshots for the App Store.

Build 96 (RELEASE, version 2023.3):

  • New splash image.
  • Improved JSON data file import code.
  • Added a second color theme selection allowing separate themes for light and dark modes.
  • Added deletion alerts when swiping to delete a cocktail or ingredient and when tapping Reset in the config view.
  • Added photo images to the My Cocktails list fror cocktails that have at least one photo.
  • Added a location tracking map for future development; locations of nearby liquor stores, weather overlay, etc.
  • Many UI tweaks.

Build 95 (RELEASE, version 2023.2.1):

  • Speeded up ingredient searching.
  • Added spinner for user feedback when un-filtering community cocktail list by tapping the “Show all” button.
  • Made community cocktail name and ingredient list coloring render on-hand status more accurately.

Build 94 (RELEASE, version 2023.2):

  • Improved mean() to better handle a tie of two or more ingredients.

Build 93 (version 2023.2):

  • Introduced MVP.
  • Changed color theme names Mono to Ice, Pale to Parch.
  • Made color theme Ice the default.
  • Tweaked Ice and Parch color theme backgrounds.
  • Bug fixes.

Build 92 (RELEASE, version 2023.1.10):

  • Added DispatchQueue to cocktail filter buttons and cocktail import to improve UI responsiveness and feedback.
  • Changed community cocktail filter toggle label to text to improve clarity of purpose.
  • Added opacity to spinner backgrounds.
  • Added sounds when adding or importing a cocktail or ingredient, deleting a cocktail or ingredient.

Build 91 (RELEASE, version 2023.1.9):

  • Greatly speeded up processing a new cocktail add after the user taps the check button or receives a shared cocktail.
  • Made cocktails search query faster by incorporating a dynamic query predicate in place of filtering.
  • Replaced several confirmation dialog views with Menu views.

Build 90 (RELEASE, version 2023.1.8):

  • Touched up navigation bar coloring and scrolling with material effect.

Build 89 (RELEASE, version 2023.1.7):

  • Restored ingredient index searching.
  • Keyboard is dismissed scrolling through auto-completion ingredient list when creating a new cocktail ingredient.
  • Bug fixes.

Build 88 (RELEASE, version 2023.1.6):

  • Additional shared cocktail bug fix.

Build 87 (version 2023.1.6):

  • Modified JSON import routine to source from bundled data or web-based file.
  • Bug fixes.

Build 86 (RELEASE, version 2023.1.5):

  • Widened amount picker windows.

Build 85 (version 2023.1.5);

  • Added Mono theme for greater visual clarity.
  • Converted the Photos library picker to new SwiftUI API.
  • Tweaked the color theme picker and servings picker tab and background colors.
  • Tweaked placeholder text in cocktail detail view text boxes.
  • Reverted amounts picker in cocktail detail view to native SwiftUI code.

Build 84 (RELEASE, version 2023.1.4):

  • Restored vertical alphabetic index to the cocktails view and community cocktails view, adding horizontal tap space for easier use.
  • Resolved a nil crash when deleting a cocktail.
  • Restored sharing of cocktails via AirDrop, Messages, and email.

Build 83 (RELEASE, version 2023.1.3):

  • Removed vertical alphabet index due to layout problems.

Build 82 (version 2023.1.3):

  • Temporarily removed sharing of cocktails, ingredients, and bookmarks.

Build 81 (version 2023.1.3):

  • Repaired the ingredients view tab bar overlap.

Build 80 (RELEASE, version 2023.1.2):

  • Changed and re-aligned font for community cocktails warning banner on iPad.
  • Added background gradient to light color scheme, tweaked opacity for dark color scheme.
  • Tweaked toolbar coloring, carrying background color into tab bar and navigation bar.
  • Tweaked pale and splash background and editable text field colors.

Build 79 (RELEASE, version 2023.1.1):

  • Replaced deprecated NavigationViews with new-for-iOS 16 NavigationSplitViews.
  • Moved My Notes, Cocktail Name, and Instructions to the new expanding TextField view.
  • Lowered photos resolution upon save to save database space.
  • Cleaned up alignment of Source and Notes fields.
  • Repaired spinner in progress indicators. They were hidden by use of a shadow modifier.

Build 78 (RELEASE, version 2023.1):

  • Upleveled code for and required iOS 16.
  • Repaired non-display of community share sheet alert.
  • Repaired TextEditor background color with scrollBackground(.hidden). Removed UIKit hack that did this for prior versions.
  • Repaired Form background color with scrollBackground(.hidden). Removed UIKit hack that did this for prior versions.

Build 77 (RELEASE, version 2022.3.1):

  • Re-instated fix for duplicated ingredients.

Build 73, 74, 75,76 (version 2022.3):

  • Added photo capability with CoreData and CloudKit storage.
  • Repaired false-selecting navigationLink with tag:selection.
  • Tweaked photos feature to prevent cocktail detail view from popping immediately upon photo add/delete.
  • Re-designed detail view moving cocktail title display to the navigation bar, set bar title in the master view so it appears immediately.
  • Restored @ObservedObject wrapper to CocktailCell so toggling favorite status shows the fav icon immediately.
  • Re-organized the sharing/tweak and copy buttons on the cocktail detail view to un-clutter the navigation bar.
  • Updated the Info view photos section.
  • Added .ignoresSafeArea() to add cocktail popover.
  • Changed size of cocktail photo thumbnails larger, changed navigation bar caption for full-sized photos.
  • Restricted photo selection to 3 at a time, maximum of 3 overall for performance when sharing.

Build 72 (RELEASE, version 2022.2.4):

  • Set list surround background to a 50% shade of the background color, syncs across devices.
  • Community cocktails now check the personal cocktail collection for on-hand status of ingredients.
  • Re-tweaked the color schemes. Background color is only used in listrows and InfoView, background color with 50% opacity is used in list surround backgrounds and cocktail detail background. Editable text field color is only used for pickers and editable text fields. Some tweaking of the background for InfoView in dark mode is done to make it darker.
  • Moved swipeAction button for deleting a community cocktail to inside a conditional allowing only the developer to even see it.
  • Made swipeAction buttons for setting a favorite blue.
  • Bug fixes.

Build 71 (RELEASE, version 2022.2.3):

  • Fixed a bug introduced when finishing up enabling search in the Community Cocktails list.

Build 70 (RELEASE, version 2022.2.2):

  • Web search removes diacritic marks before submission, so cachaça finally returns a result from Google.
  • Improved on-hand checkbox performance in IngredientsView.
  • Re-implemented search in IngredientsView
  • Set filter mode for cocktails, public cocktails, and ingredients views to “all” when user begins an item search.
  • Found and fixed a bug that sets a cocktail name color for public collection cocktails.

Build 69 (RELEASE, version 2022.2.1):

  • Tweaked vertical spacing in InfoView.
  • Restored ingredient lookup from CocktailDetail and InfoView.
  • Added search capability to IngredientsView (build 68, removed in build 69 for further work).
  • Refined color themes.

Build 67 (TEST, version 2022.2.1):

  • Tweaked vertical spacing in InfoView.
  • Restored ingredient lookup from CocktailDetail and InfoView.
  • Added search capability to IngredientsView.

Build 66 (RELEASE, version 2022.2):

  • Tweaked color bleed into tab bar for CocktailsView, CommunityCocktailsView, CocktailDetailView, IngredientsView, and InfoView.
  • Cleaned up ConfigView UI.
  • Added extension to permit styled placeholder text in the My Notes TextField.
  • Made SPLASH the default color theme.
  • Fixed erroneous “this is a community cocktail” message appearing when trying to add a new cocktail.

Build 65 (RELEASE, version 2022.1.3):

  • Implemented fresh UI with insetGrouped lists, better balance between colored foreground and non-colored background items.
  • Removed generic fetch request code from model extensions (PCocktail.allCocktailsFetchRequest(),
  • Removed unnecessary @State variables from CocktailsView, PublicCocktailsView, IngredientsView.
  • Implemented search in CocktailsView and PublicCocktailsView.
  • Finally found the source of the multiple-duplicate-ingredients bug. PersistentStore.updatePersistentStore() did not call PersistentStore.savePersistentStore() from within. Next line of calling code did. Moved the save into the update code (like all other persistent store functions). Added de-duplication code to the isFavorite onChange toggle code to fix any existing duplication issues.

Build 64 (RELEASE, version 2022.1.2):

  • Resetting debug to release for archive, again.
  • Completed move to KVS-based profile key firstTime from userDefault variable firstRun.

Build 63 (RELEASE, version 2022.1.1):

  • Changed archive type from debug to release. Oops.

Builds 61, 62 (RELEASE, version 2022.1):

  • Bug fix for duplication of ingredients.
  • Bug fix for crash-on-delete of a cocktail. Moved cocktailsView back to an @FetchRequest.
  • Added indices to PublicCocktail members to eliminate load errors on run.
  • Added .pickerStyle(WheelPickerStyle()) to ingredient amount picker to get working. Default used to work.
  • Added .listRowSeparator(.hidden) to lists to remove row separator lines.
  • Added the object boolean variable binding to .animation for Loader view to stop deprecation warning.
  • Changed customeButtonFont size to 22. iOS 15 appears to have changed something relative to .title2 callouts.

Build 60 (RELEASE, version 2021.5.3):

  • Removed test data.

Build 59:

  • 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.

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.

Build 54:

  • Added splash screen logo
  • Tweaks to improve apparent speed of the app

Build 53:

  • Fix for lost ingredients when syncing onto a new device while multitastking

Build 52:

  • Moved config button to the Info view.
  • Set all colors in each color theme.
  • Replaced toggles in ingredient index view with checkboxes.

Build 51:

  • 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.

Build 50:

  • 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.

Build 49:

  • 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.

Build 43:

  • 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.

Build 42:

  • 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.

Build 41:

  • 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.

Build 40:

  • 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.

Build 39:

  • Added non-duplication and non-empty ingredientString checks and alerts to IngredientAddAndEdit view.

Build 38:

  • 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.

Build 37:

  • added code to repair erroneous creation of ingredientIndex ingredient strings from unstripped ingredients. Runs once per device in detail view.
  • Cleaned up color strings.

Build 36:

  • 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.

Build 33:

  • 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.

Build 32:

  • Repaired picker/predicted ingredient name gadgets on iPad by specifying StackNavigationStyle in cocktails view. Needs work to understand why.

Build 31:

  • 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.

Build 30:

  • 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.

Build 29:

  • 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.

Build 27:

  • 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.

Build 26:

  • 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.

Build 25:

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.

Build 22:

  • 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.

Build 21:

  • Removed excess ingredient deletion code from updatePersistedIngredients.

Build 20:

  • 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.

Build 19:

  • Un-remarked the filter button in Ingredients view.

Build 18:

  • 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.

Build 17:

  • 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.

Build 16
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.

Build 15

  • 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.

Build 14:

  • 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.

Build 13:
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.

Build 12:

  • 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.

Build 11:

  • 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.

Build 10:

  • 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).

Privacy policy

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.