41554 blogs · [ { "id": "01a0b68b-4ccc-726b-b009-48280cefbfc6", "title": "Artem Novichkov", "url": "https://artemnovichkov.com", "published_at": "2026-09-07T05:20:44+00:00" }, { "id": "01a0872e-c9aa-73c9-b217-eef7e8145df1", "title": "Headless Xcode: From Prompt to Simulator with MCP", "url": "https://artemnovichkov.com/blog/headless-xcode-from-prompt-to-simulator-with-mcp", "published_at": "2026-08-13T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837a3190c8", "title": "Preview Multiple SwiftUI View States with #Preview(arguments:)", "url": "https://artemnovichkov.com/blog/previewing-swiftui-states-with-preview-arguments", "published_at": "2026-08-05T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837ae12c83", "title": "Using SwiftUI’s ContentBuilder with Non-View Types", "url": "https://artemnovichkov.com/blog/using-swiftui-contentbuilder-with-non-view-types", "published_at": "2026-08-04T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837ae694dd", "title": "Building a custom DynamicProfileModifier in Foundation Models", "url": "https://artemnovichkov.com/blog/building-a-custom-dynamic-profile-modifier-in-foundation-models", "published_at": "2026-07-17T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837bb7ad04", "title": "Using Claude with Apple Foundation Models", "url": "https://artemnovichkov.com/blog/using-claude-with-apple-foundation-models", "published_at": "2026-06-12T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837c84e4ef", "title": "Task Names in Swift Concurrency", "url": "https://artemnovichkov.com/blog/task-names-in-swift-concurrency", "published_at": "2026-05-30T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837cb867a9", "title": "Tracking token usage in Foundation Models", "url": "https://artemnovichkov.com/blog/tracking-token-usage-in-foundation-models", "published_at": "2026-02-17T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837d1cb850", "title": "Highlighting code blocks in Markdown with SwiftSyntax", "url": "https://artemnovichkov.com/blog/highlighting-code-blocks-in-markdown-with-swiftsyntax", "published_at": "2026-01-23T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837deaad5d", "title": "Rendering Markdown in SwiftUI", "url": "https://artemnovichkov.com/blog/rendering-markdown-in-swiftui", "published_at": "2026-01-13T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837e9b2527", "title": "Foundation Models profiling with Xcode Instruments", "url": "https://artemnovichkov.com/blog/foundation-models-profiling-with-xcode-instruments", "published_at": "2025-09-29T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837ec63cb7", "title": "Working with partially generated content in Xcode previews", "url": "https://artemnovichkov.com/blog/working-with-partially-generated-content-in-xcode-previews", "published_at": "2025-07-28T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84837f78dca2", "title": "Handling WebView navigation in SwiftUI", "url": "https://artemnovichkov.com/blog/handling-webview-navigation-in-swiftui", "published_at": "2025-07-14T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84838012c475", "title": "Using WebKit to load web content in SwiftUI", "url": "https://artemnovichkov.com/blog/using-webkit-to-load-web-content-in-swiftui", "published_at": "2025-07-07T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848380b2acbb", "title": "Getting Started with Apple's Foundation Models", "url": "https://artemnovichkov.com/blog/getting-started-with-apple-foundation-models", "published_at": "2025-06-29T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84838145ac46", "title": "Cook up 3D charts with Swift Charts", "url": "https://artemnovichkov.com/blog/cook-up-3d-charts-with-swift-charts", "published_at": "2025-06-12T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-8483819145c2", "title": "Using Model Context Protocol in iOS apps", "url": "https://artemnovichkov.com/blog/using-model-context-protocol-in-ios-apps", "published_at": "2025-05-11T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848381db8baa", "title": "Demystifying Picture in Picture on iOS", "url": "https://artemnovichkov.com/blog/demystifying-picture-in-picture-on-ios", "published_at": "2025-05-04T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848382581577", "title": "Creating MCP Servers in Swift", "url": "https://artemnovichkov.com/blog/creating-mcp-servers-in-swift", "published_at": "2025-04-17T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848382840ffd", "title": "How to inspect .ipa files and secure your iOS app from common mistakes", "url": "https://artemnovichkov.com/blog/how-to-inspect-ipa-files", "published_at": "2025-04-09T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848382aade74", "title": "Music recognition with ShazamKit", "url": "https://artemnovichkov.com/blog/music-recognition-with-shazam-kit", "published_at": "2025-02-23T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84838398dbbc", "title": "Drawing maps with Swift Charts", "url": "https://artemnovichkov.com/blog/drawing-maps-with-swift-charts", "published_at": "2025-02-02T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-8483847280d5", "title": "Xcode Library customization with SPM plugin", "url": "https://artemnovichkov.com/blog/xcode-library-customization-with-spm-plugin", "published_at": "2024-12-15T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848384eb1351", "title": "Creating ML models with Create ML", "url": "https://artemnovichkov.com/blog/create-ml", "published_at": "2024-12-05T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848385237583", "title": "Working with Natural Language framework", "url": "https://artemnovichkov.com/blog/working-with-natural-language-framework", "published_at": "2024-11-24T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848386224639", "title": "Mastering TextEditor in SwiftUI: Features, Limitations, and Tips", "url": "https://artemnovichkov.com/blog/mastering-text-editor-in-swiftui", "published_at": "2024-11-17T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-8483864753c9", "title": "Github contribution graph with Swift Charts", "url": "https://artemnovichkov.com/blog/github-contribution-graph-swift-charts", "published_at": "2024-09-07T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-8483865e35af", "title": "Remove background from image in SwiftUI", "url": "https://artemnovichkov.com/blog/remove-background-from-image-in-swiftui", "published_at": "2024-01-16T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848386f469eb", "title": "Implementing spoilers in SwiftUI", "url": "https://artemnovichkov.com/blog/spoiler-view", "published_at": "2023-03-09T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848387de7d19", "title": "Async/await for existing iOS apps", "url": "https://artemnovichkov.com/blog/async-await-offline", "published_at": "2021-11-26T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-8483887276be", "title": "Guide for UIKeyboardLayoutGuide", "url": "https://artemnovichkov.com/blog/keyboard-layout-guide", "published_at": "2021-06-09T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848388b37e92", "title": "AsyncImage. Loading images in SwiftUI", "url": "https://artemnovichkov.com/blog/async-image", "published_at": "2021-06-08T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848388d365ce", "title": "Bluetooth and SwiftUI. Developing app for RGB stripe control", "url": "https://artemnovichkov.com/blog/bluetooth-and-swiftui", "published_at": "2021-05-31T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848389065248", "title": "Implementing custom popups in SwiftUI", "url": "https://artemnovichkov.com/blog/custom-popups-in-swiftui", "published_at": "2021-05-20T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-848389aa85ec", "title": "Using result builders for action sheets in SwiftUI", "url": "https://artemnovichkov.com/blog/result-builders", "published_at": "2021-05-01T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84838a57429f", "title": "Working with web content offline in SwiftUI apps", "url": "https://artemnovichkov.com/blog/swiftui-offline", "published_at": "2021-04-25T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84838ad0f3f9", "title": "Sheet happens. Working with modal views in SwiftUI", "url": "https://artemnovichkov.com/blog/sheet-happens", "published_at": "2021-04-14T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84838b16a573", "title": "Developing Xcode Extensions. Tips and tricks", "url": "https://artemnovichkov.com/blog/developing-xcode-extensions-tips-and-tricks", "published_at": "2021-02-21T00:00:00+00:00" }, { "id": "01a0872e-c9ab-73d8-a14a-84838be069c9", "title": "Custom @Environment value for share actions", "url": "https://artemnovichkov.com/blog/custom-environment-value-for-share-actions", "published_at": "2021-02-13T00:00:00+00:00" } ] posts Claim your blog
Back to Artem Novichkov
Blog · corpus.blog/blogs/artemnovichkov.com/posts

Artem Novichkov

artemnovichkov.com

2026

2025

2024

2023

2021