Network layer: - Replace static CookbookApi protocol with instance-based CookbookApiProtocol using async/throws instead of tuple returns - Refactor ApiRequest to use URLComponents for proper URL encoding, replace print statements with OSLog, and return typed NetworkError cases - Add structured NetworkError variants (httpError, connectionError, etc.) - Remove global cookbookApi constant in favor of injected dependency on AppState - Delete unused RecipeEditViewModel, RecipeScraper, and Scraper playground Data & model fixes: - Add custom Decodable for RecipeDetail with safe fallbacks for malformed JSON - Make Category Hashable/Equatable use only `name` so NavigationSplitView selection survives category refreshes with updated recipe_count - Return server-assigned ID from uploadRecipe so new recipes get their ID before the post-upload refresh block executes View updates: - Refresh both old and new category recipe lists after upload when category changes, mapping empty recipeCategory to "*" for uncategorized recipes - Raise deployment target to iOS 18, adopt new SwiftUI API conventions - Clean up alerts, onboarding views, and settings Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Nextcloud-Cookbook-iOS
A Nextcloud Cookbook native iOS/iPadOS/MacOS client, built using Swift and SwiftUI.
⚠️ This is not a standalone application! ⚠️
See here for the corresponding Nextcloud server application.
You can download the app from the AppStore:
Core Features
- Load recipes from nextcloud instance
- Offline recipes
- Recipe search function
- Add new recipes
- Edit recipes
- Delete recipes
- Login with Nextcloud account using two factor authentication
- Login with Nextcloud account using app-tokens
- Support for multiple languages
- MacOS support (through Mac Catalyst)
- Light and dark mode support
- Share recipes (by name and keyword)
- Import recipes
- Keep display awake when viewing recipes
- Ingredient shopping list
Roadmap
-
Version 1.9: Enhancements to recipe editing for better intuitiveness; user interface design improvements for recipe viewing.
-
Version 1.10: Recipe ingredient calculator: Enables calculation of ingredient quantities based on a specifiable yield number.
-
Version 1.11: Decoupling of internal recipe representation from the Nextcloud Cookbook recipe representation. This change provides increased flexibility for API updates and enables the introduction of features not currently supported by the Cookbook API, such as uploading images. This update will take some time, but will therefore result in simpler, better maintainable code. Update: I will continue to work on this update in January 2024.
-
Version 1.12 and beyond (Ideas for the future; integration not guaranteed!):
-
Allow adding custom items to the grocery list.
-
Fuzzy search for recipe names and keywords.
-
An in-app timer for the cook time specified in a recipe.
-
Search for recipes based on left-over ingredients.
-
An option to use the app without a Nextcloud account.
-
An option to specify the recipe folder in the Files app, to enable the app to work on the recipe files directly.
-
If you would like to suggest new features/improvements or report bugs, please open an Issue!
Screenshots
The following screenshots might not be up to date, since there can always be minor user interface changes.
iOS Screenshots
iPadOS Screenshots
Supported Languages
If you wish to see additional languages supported, please don't hesitate to open an Issue. Any help with translation is appreciated.
- English
- German
- Spanish (mostly machine translated)
- French (mostly machine translated)
Further information
Cookbook Client is available on the App Store for free, and will be updated regularly. This app is a hobby project, which is why development progress may be slower than desired. If you are interested in an iOS native CookBook client, you are welcome to contribute! In case you discover any bugs or encounter problems, feel free to point them out by creating an Issue.





