# objective-c

Published articles for objective-c.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Introducing SwiftTweaks

DevFeed: [Introducing SwiftTweaks](<https://devfeed.tech/articles/introducing-swifttweaks-27384.md>)

Original publisher: [Read original article](<http://engineering.khanacademy.org/posts/introducing-swifttweaks.htm>)

Author: Khan Academy

Published: 2016-05-09T22:00:00Z

Content type: release

Language: en

Sources: [Khan Academy](<https://devfeed.tech/sources/khan-academy.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [feature flags](<https://devfeed.tech/topics/feature-flags.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [feature](<https://devfeed.tech/tags/feature.md>), [feature-flags](<https://devfeed.tech/tags/feature-flags.md>), [interface](<https://devfeed.tech/tags/interface.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [news](<https://devfeed.tech/tags/news.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

Khan Academy introduces SwiftTweaks, a Swift library for adjusting parameters in iOS apps on a device without recompiling. The article explains how to create tweak libraries, use tweak values and bindings, adjust animation settings, and access the runtime interface.

### Source excerpt

By Bryan Clark Today, we're releasing SwiftTweaks, a way to adjust your Swift-based iOS app without needing to ... Read more

## WWDC 2026 Viewing Guide

DevFeed: [WWDC 2026 Viewing Guide](<https://devfeed.tech/articles/wwdc-2026-viewing-guide-21089.md>)

Original publisher: [Read original article](<https://useyourloaf.com/blog/wwdc-2026-viewing-guide/>)

Author: Keith Harrison

Published: 2026-06-15T09:16:45Z

Content type: tutorial

Language: en

Sources: [K. Harrison](<https://devfeed.tech/sources/k-harrison.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>), [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [gRPC](<https://devfeed.tech/topics/grpc.md>), [MLX](<https://devfeed.tech/topics/mlx.md>), [NumPy](<https://devfeed.tech/topics/numpy.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [apple](<https://devfeed.tech/tags/apple.md>), [auto-layout](<https://devfeed.tech/tags/auto-layout.md>), [comparison](<https://devfeed.tech/tags/comparison.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios27](<https://devfeed.tech/tags/ios27.md>), [macos27](<https://devfeed.tech/tags/macos27.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>), [wwdc](<https://devfeed.tech/tags/wwdc.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

A guide to planning and watching WWDC 2026 sessions, highlighting platform themes and selected updates in Swift, SwiftUI, Xcode, WebAssembly, gRPC, and MLX.

### Source excerpt

My WWDC 2026 viewing guide to help you plan the sessions you want to watch. Where Do I Start? The two big themes for the year are again Liquid Glass and Apple Intelligence. Start by watching the Platforms State of the Union (SOTU) for a summary of what's new this year. If you only have five minutes try the SOTU recap. You don't have to learn everything new today! There are over 100 sessions and a lot of new stuff to learn. You may feel like you're getting left behind. Don't let it overwhelm you. You've got time. Don't burn yourself out trying to keep up. Watching The Sessions I watch the videos using the Apple Developer app. It's available on macOS and iOS. The video player supports from 0.5x to 2x playback, most videos have transcripts and summaries, and allow copying of the onscreen sample code. You can also watch on YouTube. There are a lot of sessions, but many are short (15-20 minutes). There's no padding and Apple's engineers get to the point quickly. Swift Swift 6.4 is here with some quality of life improvements: What's new in Swift Condense long @available attributes with anyAppleOS, @diagnose to control compiler deprecation warnings. Double-colon module selector. Standard Library task cancellation shield, dictionary mapKeyedValues, new FilePath type. XCTest interop with Swift Testing. Subprocess 1.0. New ProgressManager. @C attribute for Swift-C interop. Compile to WebAssembly. New @inline(always) and @specialized attributes. Iterable protocol for noncopyable elements. Build real-time apps and services with gRPC and Swift gRPC Swift package to generate and deploy network code for remote procedure call services. Explore numerical computing in Swift with MLX NumPy-like API. Examples of computing the Mandlebrot set, heat distribution, and curve fitting. SwiftUI Liquid Glass changes and some welcome improvements: What's new in SwiftUI Liquid Glass is now mandatory. Minimal menu icons by default. Resize live previews in Xcode. Prominent tab role. Toolbar visibil

## The Future of KMP's iOS Interop - Daniel Bertoldi

DevFeed: [The Future of KMP's iOS Interop - Daniel Bertoldi](<https://devfeed.tech/articles/the-future-of-kmp-s-ios-interop-daniel-bertoldi-38329.md>)

Original publisher: [Read original article](<https://touchlab.co/the-future-of-kmps-ios-interop>)

Published: 2026-06-12T00:00:00Z

Content type: comparison

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>)

Tags: [compare](<https://devfeed.tech/tags/compare.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [interop](<https://devfeed.tech/tags/interop.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kmp](<https://devfeed.tech/tags/kmp.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [native](<https://devfeed.tech/tags/native.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [production](<https://devfeed.tech/tags/production.md>), [skie](<https://devfeed.tech/tags/skie.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swift-export](<https://devfeed.tech/tags/swift-export.md>)

### AI overview

This comparison examines Kotlin Multiplatform iOS interoperability through Kotlin's experimental Swift Export and the Objective-C bridge enhanced by SKIE. It compares their generated output, capabilities, limitations, and tradeoffs.

### Source excerpt

Kotlin's new Swift Export feature promises to eliminate the Objective-C middleman and generate native Swift APIs directly from your KMP code. But with SKIE already solving many of the same pain points in production today, which approach should your team bet on? We break down the capabilities, limitations, and tradeoffs of both.

## Kotlin Multiplatform in Production: Two Real-World Use Cases from Booking.com

DevFeed: [Kotlin Multiplatform in Production: Two Real-World Use Cases from Booking.com](<https://devfeed.tech/articles/kotlin-multiplatform-in-production-two-real-world-use-cases-from-booking-com-23724.md>)

Original publisher: [Read original article](<https://medium.com/booking-com-development/kotlin-multiplatform-in-production-two-real-world-use-cases-from-booking-com-46ffe13a773d?source=rss----1c36c35f9c76---4>)

Author: Diego Gómez Olvera

Published: 2026-06-05T15:09:18Z

Content type: article

Language: en

Sources: [Booking.com Development - Medium](<https://devfeed.tech/sources/booking-com-development-medium.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [experiments](<https://devfeed.tech/topics/experiments.md>), [A/B Testing](<https://devfeed.tech/topics/a-b-testing.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Design system](<https://devfeed.tech/topics/design-system.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [a-b-testing](<https://devfeed.tech/tags/a-b-testing.md>), [android](<https://devfeed.tech/tags/android.md>), [booking](<https://devfeed.tech/tags/booking.md>), [bookingcom](<https://devfeed.tech/tags/bookingcom.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [concepts](<https://devfeed.tech/tags/concepts.md>), [consistency](<https://devfeed.tech/tags/consistency.md>), [data](<https://devfeed.tech/tags/data.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [experiment](<https://devfeed.tech/tags/experiment.md>), [experimentation](<https://devfeed.tech/tags/experimentation.md>), [experiments](<https://devfeed.tech/tags/experiments.md>), [ios](<https://devfeed.tech/tags/ios.md>), [java](<https://devfeed.tech/tags/java.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>)

### AI overview

This article describes two Booking.com engineering use cases for Kotlin Multiplatform and Compose Multiplatform: a shared experimentation library for consistent experiment assignments across Android and iOS, and hosting an Android design system in a web browser.

### Source excerpt

Introduction For the majority of Booking.com travelers, mobile is the primary channel for researching, planning, and booking trips. Recent data shows that over 80% of travelers rely on a mobile app during the research phase, with more than half of all bookings occurring on mobile devices. Consequently, the Android and iOS platforms are critical to the company's product strategy; engineering choices made here have significant repercussions for the entire organisation. To maintain agility at this scale, two elements must function in unison: Strict decision validation: At any time, Booking.com manages over 1,000 simultaneous experiments across its product suite, with hundreds active on mobile. Every minor adjustment undergoes A/B testing via our proprietary experimentation library before reaching the user. A unified design system ensures product consistency and makes design goals transparent to all contributors, not just maintenance engineers. This article examines two specific engineering challenges solved using Kotlin Multiplatform (KMP) and Compose Multiplatform (CMP): Developing a shared experimentation library to ensure uniform experiment assignments across Android and iOS. Using Compose Multiplatform to host our Android design system in a web browser, bridging the gap between design concepts and implementation. While both cases use the same underlying technology, each provides unique insights into multiplatform development. Use case 1: shared experimentation library on Android and iOSThe problem with two implementations Historically, our internal experimentation library, responsible for managing experiment assignments, evaluations, and tracking on mobile, was maintained as two distinct codebases: a mix of Java and Kotlin for Android and Objective-C for iOS. While intended to be identical, managing two languages with fluctuating team resources inevitably led to logic drift. Discrepancies in event-tracking and experiment-fetching behaviours emerged, though they wer

## Last article of 2025 - A Directional Update

DevFeed: [Last article of 2025 - A Directional Update](<https://devfeed.tech/articles/last-article-of-2025-a-directional-update-35016.md>)

Original publisher: [Read original article](<https://read.theaimerge.com/p/last-article-of-2025-a-directional>)

Author: Alex Razvant

Published: 2025-12-27T14:35:36Z

Content type: article

Language: en

Sources: [Neural Bits](<https://devfeed.tech/sources/neural-bits.md>)

Topics: [Building AI Systems](<https://devfeed.tech/topics/building-ai-systems.md>), [ai and ml](<https://devfeed.tech/topics/ai-and-ml.md>), [Computer vision](<https://devfeed.tech/topics/computer-vision.md>), [Code](<https://devfeed.tech/topics/code.md>), [C](<https://devfeed.tech/topics/c.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Python](<https://devfeed.tech/topics/python.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [ai](<https://devfeed.tech/tags/ai.md>), [applications](<https://devfeed.tech/tags/applications.md>), [article](<https://devfeed.tech/tags/article.md>), [asus](<https://devfeed.tech/tags/asus.md>), [building-ai-systems](<https://devfeed.tech/tags/building-ai-systems.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [code](<https://devfeed.tech/tags/code.md>), [computer-vision](<https://devfeed.tech/tags/computer-vision.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mac](<https://devfeed.tech/tags/mac.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [python](<https://devfeed.tech/tags/python.md>), [swift](<https://devfeed.tech/tags/swift.md>), [update](<https://devfeed.tech/tags/update.md>)

### AI overview

An end-of-year reflection on how the author's newsletter will change in 2026. The author connects early work and study choices with a gradual move into programming, AI, machine learning, and building AI systems, emphasizing that direction mattered more than speed.

### Source excerpt

Reflecting on 2025, and how this newsletter is changing going into 2026

## Format Swift with a Git Commit Hook

DevFeed: [Format Swift with a Git Commit Hook](<https://devfeed.tech/articles/format-swift-with-a-git-commit-hook-21085.md>)

Original publisher: [Read original article](<https://useyourloaf.com/blog/format-swift-with-a-git-commit-hook/>)

Author: Keith Harrison

Published: 2025-11-24T10:29:58Z

Content type: tutorial

Language: en

Sources: [K. Harrison](<https://devfeed.tech/sources/k-harrison.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [Git](<https://devfeed.tech/topics/git.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [auto-layout](<https://devfeed.tech/tags/auto-layout.md>), [bash](<https://devfeed.tech/tags/bash.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [developer](<https://devfeed.tech/tags/developer.md>), [development](<https://devfeed.tech/tags/development.md>), [git](<https://devfeed.tech/tags/git.md>), [git-commit](<https://devfeed.tech/tags/git-commit.md>), [ios](<https://devfeed.tech/tags/ios.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [wwdc](<https://devfeed.tech/tags/wwdc.md>), [xcode](<https://devfeed.tech/tags/xcode.md>), [xcode-16](<https://devfeed.tech/tags/xcode-16.md>)

### AI overview

This tutorial explains how to format Swift code automatically with swift-format and a Git pre-commit hook. It covers Xcode 16's bundled formatter, .swift-format configuration files, a Bash hook that formats staged Swift files, hook installation, and bypassing the hook when needed.

### Source excerpt

How do you automatically format your Swift code every time you commit it to your Git repository? Swift Format There are several Swift formatting tools. Xcode 16 shipped with swift-format included in the toolchain: $ xcrun --find swift-format /Applications/Xcode.app/Contents/Developer/Toolchains/ XcodeDefault.xctoolchain/usr/bin/swift-format To run the formatter: $ swift format MyFile.swift Note: This runs the swift-format bundled with the active Xcode development directory (beta or release). Configuring swift-format The Xcode settings let you configure various formatting options including indentation but I prefer to use an external configuration file for swift-format. By default, swift-format looks for a configuration file named .swift-format in the same directory as the files you are formatting. If there isn't one it looks in each successive parent directory. If it doesn't find a configuration file it uses a default configuration. You can dump the default configuration to get started: $ swift format dump-configuration > swift-format Modify the configuration file to meet your own code style: { "fileScopedDeclarationPrivacy" : { "accessLevel" : "private" }, "indentConditionalCompilationBlocks" : true, "indentSwitchCaseLabels" : false, "indentation" : { ... I keep my default configuration file in my base Developer directory: $ mv swift-format ~\Developer\.swift-format When needed, I can override the defaults by placing a modified configuration file in the project-specific root directory. Note: Don't forget to prefix the configuration file with a . Git Commit Hooks Git Hooks are a way to run custom scripts when different Git actions occur. A pre-commit hook runs when you commit changes to a repository. Here's the pre-commit script I'm using to run swift-format: #!/bin/bash GIT=/usr/bin/git GREP=/usr/bin/grep SWIFT=/usr/bin/swift # Staged (cached) added/copied/modified/renamed files FILES=$($GIT diff --cached --name-only --diff-filter=ACMR | $GREP '\.swift$') # Exit ear

## SwiftUI Custom URL Schemes

DevFeed: [SwiftUI Custom URL Schemes](<https://devfeed.tech/articles/swiftui-custom-url-schemes-21088.md>)

Original publisher: [Read original article](<https://useyourloaf.com/blog/swiftui-custom-url-schemes/>)

Author: Keith Harrison

Published: 2025-10-27T11:26:47Z

Content type: tutorial

Language: en

Sources: [K. Harrison](<https://devfeed.tech/sources/k-harrison.md>)

Topics: [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [WebView](<https://devfeed.tech/topics/webview.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [WebKit](<https://devfeed.tech/topics/webkit.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [async](<https://devfeed.tech/tags/async.md>), [auto-layout](<https://devfeed.tech/tags/auto-layout.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios-26](<https://devfeed.tech/tags/ios-26.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [scheme](<https://devfeed.tech/tags/scheme.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swiftui](<https://devfeed.tech/tags/swiftui.md>), [web](<https://devfeed.tech/tags/web.md>), [webview](<https://devfeed.tech/tags/webview.md>), [wwdc](<https://devfeed.tech/tags/wwdc.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

This tutorial explains how to create a custom URL scheme handler for SwiftUI WebViews in iOS 26. It covers implementing URLSchemeHandler, loading local HTML resources from an app bundle, registering the handler in a WebPage configuration, and displaying the page in a WebView.

### Source excerpt

Create a custom URL scheme handler for SwiftUI WebViews. Custom URL schemes Apple introduced both WebView and WebPage SwiftUI views in iOS 26. These provide similar WebKit functionality to the UIKit WKWebView APIs. This includes being able to register custom URL schemes to load local resources. Suppose I have an App that loads quotations from the local App bundle. My URL scheme uses the format: quotes://001.html There are a few steps to support a custom URL scheme: Create a custom URL scheme handler that knows how to load the local resources. Register the scheme handler in a WebPage configuration. Have the WebView load and display the web page. Let's look at each of those steps. URLSchemeHandler (iOS 26) The URLSchemeHandler is a protocol with a reply method to return an async sequence of results. The AsyncSequence expects us to either yield a URLResponse and some data or throw an error. struct QuoteSchemeHandler: URLSchemeHandler { static let scheme = "quotes" func reply(for request: URLRequest) -> some AsyncSequence< URLSchemeTaskResult, any Error > { AsyncThrowingStream { continuation in ... } } } The reply method provides us with the URLRequest. I start by extracting the URL and checking it matches our quotes scheme: guard let url = request.url else { continuation.finish(throwing: QuoteError.missingURL) return } guard url.scheme == QuoteSchemeHandler.scheme else { continuation.finish(throwing: QuoteError.invalidScheme) return } To construct the URL response I need the mime type and length of the data. I first extract the filename from the URL, determine the mime type from the file extension, and then load the data: do { let file = try filename(for: url) let mimeType = try mimeType(for: file) let data = try Data(contentsOf: file) I can then build the URLResponse: let response = URLResponse( url: url, mimeType: mimeType, expectedContentLength: data.count, textEncodingName: "utf-8" ) If nothing has gone wrong I then add the response and the data to the AsyncSequenc

## iPhone 17 Screen Sizes

DevFeed: [iPhone 17 Screen Sizes](<https://devfeed.tech/articles/iphone-17-screen-sizes-21086.md>)

Original publisher: [Read original article](<https://useyourloaf.com/blog/iphone-17-screen-sizes/>)

Author: Keith Harrison

Published: 2025-10-13T09:44:39Z

Content type: article

Language: en

Sources: [K. Harrison](<https://devfeed.tech/sources/k-harrison.md>)

Topics: [iphone](<https://devfeed.tech/topics/iphone.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [auto-layout](<https://devfeed.tech/tags/auto-layout.md>), [display](<https://devfeed.tech/tags/display.md>), [features](<https://devfeed.tech/tags/features.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios-26](<https://devfeed.tech/tags/ios-26.md>), [iphone](<https://devfeed.tech/tags/iphone.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [screen](<https://devfeed.tech/tags/screen.md>), [swift](<https://devfeed.tech/tags/swift.md>), [wwdc](<https://devfeed.tech/tags/wwdc.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

This article compares the screen sizes and display specifications of the iPhone 17 lineup. The iPhone 17 and iPhone 17 Pro share a 6.3-inch display, the iPhone 17 Pro Max has a 6.9-inch display, and the new iPhone Air has a 6.5-inch display. It also covers display features, resolutions, safe-area insets, materials, and USB-3 transfer support.

### Source excerpt

There's less variation this year with the base iPhone 17 and Pro models sharing a display. The Plus model is gone but we get a new iPhone Air. Here's what you need to know about the iPhone 17 models. The New Models in a Nutshell There's no iPhone 17 Plus model this year. Instead the iPhone 17 gets the same 6.3" display as the iPhone 17 Pro. The Pro Max keeps the 6.9" display from last year. Finally, we have the new iPhone Air with a 6.5" display. Apple continues to sell the base iPhone 16, 16 Plus, and the iPhone 16e. That gives this years models three different screen sizes: The 6.3" display in the iPhone 17 and 17 Pro has almost the same specs as the iPhone 16 Pro. That brings features such as ProMotion and the Always-on display to the base iPhone 17. The only difference I can see is an increased peak brightness of 3,000 nits (up from 2,000 nits). The Titanium frame of last years Pro models is replaced with an Aluminium unibody. The base iPhone 17 has an Aluminium frame but the iPhone Air has a Titanium frame. Support for USB-3 (10Gbp/s) transfer speeds is still limited to the Pro models. iPhone 17 The base iPhone 17 display upgrades to a spec comparable to the iPhone 16 Pro 6.3" display with ProMotion and Always-on, along with the A19 chip. A19 chip (6-core CPU, 5-core GPU with Neural Accelerators, 16-core Neural Engine) Display: 6.3" Super Retina XDR OLED with ProMotion, Always-On display, and Dynamic Island Screen resolution (points): 402 x 874 Native resolution (pixels): 1206 x 2622 (460 ppi) Native Scale factor: 3x Portrait size classes: w: Compact, h: Regular Landscape size classes: w: Compact, h: Compact The status bar is 54 points high with a top safe area inset of 62 points which gives the following safe area insets: Safe Area Insets (portrait): top: 62, bottom: 34, left: 0, right: 0 Safe Area Insets (landscape): top: 20, bottom: 20, left: 62, right: 62 Note: In landscape there's now a top safe area inset of 20 points. iPhone 17 Pro The iPhone 17 Pro is f

## Swift Default Value in String Interpolations

DevFeed: [Swift Default Value in String Interpolations](<https://devfeed.tech/articles/swift-default-value-in-string-interpolations-21087.md>)

Original publisher: [Read original article](<https://useyourloaf.com/blog/swift-default-value-in-string-interpolations/>)

Author: Keith Harrison

Published: 2025-09-07T08:51:46Z

Content type: tutorial

Language: en

Sources: [K. Harrison](<https://devfeed.tech/sources/k-harrison.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [SwiftUI](<https://devfeed.tech/topics/swiftui.md>), [Localization (l10n)](<https://devfeed.tech/topics/localization.md>)

Tags: [auto-layout](<https://devfeed.tech/tags/auto-layout.md>), [ios](<https://devfeed.tech/tags/ios.md>), [learn](<https://devfeed.tech/tags/learn.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swift-6-2](<https://devfeed.tech/tags/swift-6-2.md>), [wwdc](<https://devfeed.tech/tags/wwdc.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

Swift 6.2 adds a default value parameter for string interpolation, allowing optional values of any type to use a specified fallback string. The article also notes that this parameter does not currently work with LocalizedStringKey.

### Source excerpt

Swift 6.2 makes it easier to interpolate strings with optional values. What's The Problem? In this SwiftUI view I need to create a text string from an optional integer value: struct CounterView: View { let count: Int? var body: some View { Text("The count is \(count)") } } The compiler warns about the optional value: String interpolation produces a debug description for an optional value; did you mean to make this explicit? The compiler suggests either providing a default value or to use String(describing:) to silence the warning. Using the nil-coalescing operator to provide a default value removes the warning but is not ideal. The default value has to match the type of the optional value. That can work when dealing with an optional string. In this example I have an optional Int and there may not be a sensible default value for the nil case. For example, I could use zero: // The count is 0 Text("The count is \(count ?? 0)") The alternative of using the String(describing:) approach is both clumsy and ends up showing the nil value: // The count is nil Text("The count is \(String(describing: count))") What I want is a way to provide a default string regardless of the type of the optional value. Default Value Parameter In Swift 6.2, String interpolation has a new default value parameter that accepts a string regardless of the type of the optional value: // The count is not set Text("The count is \(count, default: "not set")") That's an improvement over outputting nil. Localization One issue is that I've been unable to get this to work with localization. The problem seems to be that LocalizedStringKey doesn't support the default value parameter. So this doesn't work: // Not Supported let key = LocalizedStringKey("The count is: \(count, default: "not set")") Learn More SE-0477 Default Value in String Interpolations Swift Default Value in String Interpolations was originally posted 07 Sep 2025 on useyourloaf.com. Want this direct to your inbox? Sign up and get my free WWDC

## Using Dart FFI and C for Objective-C and Swift Interoperability in Flutter iOS Apps

DevFeed: [Using Dart FFI and C for Objective-C and Swift Interoperability in Flutter iOS Apps](<https://devfeed.tech/articles/platform-channels-are-dead-objective-c-swift-interop-is-here-23986.md>)

Original publisher: [Read original article](<https://quickbirdstudios.com/blog/dart-swift-objective-c-interop/>)

Author: Marvin März

Published: 2023-12-11T15:43:49Z

Content type: tutorial

Language: en

Sources: [QuickBird Studios Blog](<https://devfeed.tech/sources/quickbird-studios-blog.md>)

Topics: [Dart](<https://devfeed.tech/topics/dart.md>), [Flutter](<https://devfeed.tech/topics/flutter.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [C](<https://devfeed.tech/topics/c.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [dart](<https://devfeed.tech/tags/dart.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [interop](<https://devfeed.tech/tags/interop.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [ios](<https://devfeed.tech/tags/ios.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [platform](<https://devfeed.tech/tags/platform.md>), [post](<https://devfeed.tech/tags/post.md>), [swift](<https://devfeed.tech/tags/swift.md>)

### AI overview

This guide explains how Dart 2.18's Objective-C/Swift Interop lets Flutter applications call native iOS code from Dart through Dart FFI and C. It discusses limitations of platform channels, including duplicated boilerplate and maintenance concerns, and introduces the interop approach.

### Source excerpt

Dart 2.18 introduced Objective-C/Swift Interop. In this comprehensive guide, we explore how to seamlessly integrate native iOS code into your Flutter app using Dart FFI and C as an interoperability layer. The post Platform Channels are Dead! Objective-C/Swift Interop is Here! appeared first on QuickBird Studios.

## Using annotations to improve iOS APIs on Kotlin Multiplatform

DevFeed: [Using annotations to improve iOS APIs on Kotlin Multiplatform](<https://devfeed.tech/articles/using-annotations-to-improve-ios-apis-on-kotlin-multiplatform-25572.md>)

Original publisher: [Read original article](<https://www.marcogomiero.com/posts/2023/objc-annotiations-better-kmp-api/>)

Author: Marco Gomiero

Published: 2023-09-19T00:00:00Z

Content type: article

Language: en

Sources: [Posts on Marco Gomiero](<https://devfeed.tech/sources/posts-on-marco-gomiero.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [mvvm](<https://devfeed.tech/tags/mvvm.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>)

### AI overview

This article explains how Kotlin 1.8 annotations can improve iOS APIs in a Kotlin Multiplatform project. It describes using @HiddenFromObjC and @ObjCName to expose iOS-specific implementations with clearer names while keeping shared business logic and reducing misleading duplicate class names.

### Source excerpt

Kotlin 1.8 has introduced new annotations to improve the interoperability of Kotlin with Objective-C and Swift: @ObjCName: allows to customize the name that will be used in Swift or Objective-C @HiddenFromObjC: allows hiding a Kotlin declaration from Objective-C (and Swift). @ShouldRefineInSwift: it marks a Kotlin declaration as swift_private in the Objective-C API, allowing to replace it with a wrapper written in Swift. You can see the release announcement for more details about the interoperability improvements introduced with Kotlin 1.8.

## ATOM (A Touch of Multiplatform) Episode #3 - Touchlab

DevFeed: [ATOM (A Touch of Multiplatform) Episode #3 - Touchlab](<https://devfeed.tech/articles/atom-a-touch-of-multiplatform-episode-3-touchlab-38161.md>)

Original publisher: [Read original article](<https://touchlab.co/atom-a-touch-of-multiplatform-episode-3>)

Published: 2022-12-20T20:51:56Z

Content type: article

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [kotlin multiplatform mobile](<https://devfeed.tech/topics/kotlin-multiplatform-mobile.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [atom](<https://devfeed.tech/tags/atom.md>), [kmm](<https://devfeed.tech/tags/kmm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-multiplatform-mobile](<https://devfeed.tech/tags/kotlin-multiplatform-mobile.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>), [twitter](<https://devfeed.tech/tags/twitter.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

Episode 3 of the ATOM podcast features Maxwell Anselm from Lutron discussing the company's evaluation, adoption, and scaling of Kotlin Multiplatform Mobile. The conversation covers team structure, learning from failure, iOS development, Swift and Objective-C interoperability, interfaces, CI/CD pipelines, Gradle, Xcode, Compose on iOS, the ecosystem, and the new memory model.

### Source excerpt

In this episode of ATOM, we sit down to talk with Lutron's Maxwell Anselm about going from being a KMM skeptic to a KMM convert.

## When iOS Engineers Should Use Kotlin Multiplatform's expect/actual Syntax

DevFeed: [When iOS Engineers Should Use Kotlin Multiplatform's expect/actual Syntax](<https://devfeed.tech/articles/why-ios-engineers-should-avoid-this-glorified-kmm-technique-34119.md>)

Original publisher: [Read original article](<https://artandscienceofcoding.com/science/avoid-this-kmm-technique/>)

Author: Derek Lee

Published: 2022-09-22T00:00:00Z

Content type: opinion

Language: en

Sources: [art and science of coding](<https://devfeed.tech/sources/art-and-science-of-coding.md>)

Topics: [kotlin multiplatform mobile](<https://devfeed.tech/topics/kotlin-multiplatform-mobile.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>)

Tags: [guide](<https://devfeed.tech/tags/guide.md>), [kmm](<https://devfeed.tech/tags/kmm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [science](<https://devfeed.tech/tags/science.md>)

### AI overview

This article argues that iOS engineers building multiplatform apps with Kotlin Multiplatform Mobile should generally write platform-dependent code in Swift instead of using the expect/actual syntax. It identifies building a multiplatform framework as the main case where the syntax may be worth considering and recommends consulting Apple's Objective-C documentation and Kotlin/Native headers when using it.

### Source excerpt

TL;DR If you're an iOS engineer who wants to build multiplatform apps using KMM, the few benefits of using the expect/actual syntax do not outweigh those of writing your platform-dependent code in Swift. The use-case for iOS engineers to consider leveraging expect/actual syntax would be when building a multiplatform framework. If you're going to use expect/actual, be sure to reference Apple's Objective-C documentation over Swift documentation and use the Kotlin/Native headers for the most accurate representation of the iOS APIs available in Kotlin. The expect/actual Syntax of Kotlin Multiplatform Mobile (KMM) The Kotlin Multiplatform SDK includes a syntactical construct integrated into JetBrains IDEs that engineers can use to define classes and functions that are expect -ed (pun intended) to have platform-specific implementations. The actual implementations are also written in Kotlin separately for Android and iOS. When looking at the code modules in a KMM project: within the KMM shared framework module, you first define a class or a function as expected. Then the actual implementations are written for each supported platform module. The following example illustrates what module the code is defined within for Android and iOS: The `common` module defines the expected classes and functions, and platform modules define the actual implementation. We looked at some simple examples in the last blog. These examples are helpful because they allow us to wrap our heads around the concept before diving into something more complicated. I want to take you on a journey of writing some code using this approach to illustrate how this can become more complicated in practice than expected. In fact, I'm going to make a bold statement and propose that there's only a single scenario where you, the iOS Engineer, should even consider using the expect/actual syntax. This post is part of a series on Kotlin Multiplatform: The iOS Engineer's Guide to Beginning Kotlin Multiplatform Development

## Auto linking with Mach-O binaries

DevFeed: [Auto linking with Mach-O binaries](<https://devfeed.tech/articles/auto-linking-with-mach-o-binaries-25407.md>)

Original publisher: [Read original article](<https://smileykeith.com/2022/02/23/lc-linker-option/>)

Author: Keith Smiley

Published: 2022-02-24T02:00:00Z

Content type: tutorial

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>)

Tags: [assembly](<https://devfeed.tech/tags/assembly.md>), [clang](<https://devfeed.tech/tags/clang.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>)

### AI overview

This article explains automatic linking for Mach-O binaries. It shows how Objective-C compilation can embed linker options for dependencies such as Foundation, how to inspect those options, and how omitting module support causes explicit linking to be required. It also covers module maps, Swift standard-library dependencies, and several ways to add linker options manually with clang, swiftc, or assembly directives.

### Source excerpt

Auto linking is a feature that embeds information in your binaries' at compile time which is then used at link time to automatically link your dependencies. This allows you to reduce the duplication of flags between the different phases of your (or your consumers') builds. For example, with this Objective-C file: #include <Foundation/Foundation.h> int main() { NSLog(@"Hello, World!"); return 1; } Compiled with: $ clang -fmodules -c foo.m -o foo.o You can then inspect the options added for use at link time: $ otool -l foo.o | grep LC_LINKER_OPTION -A3 cmd LC_LINKER_OPTION cmdsize 40 count 2 string #1 -framework string #2 Foundation ... Now when linking this binary you don't have to pass any extra flags to the linker to make sure you link Foundation: $ ld foo.o -syslibroot `xcrun --show-sdk-path` To compare, if you compile the binary without -fmodules1: $ clang -c foo.m -o foo.o You don't get any LC_LINKER_OPTIONs. Then when linking the binary with the same command as before, it fails with these errors: $ ld foo.o -syslibroot `xcrun --show-sdk-path` Undefined symbols for architecture arm64: "_NSLog", referenced from: _main in foo.o "___CFConstantStringClassReference", referenced from: CFString in foo.o ld: symbol(s) not found for architecture arm64 To make it succeed you must explicitly link Foundation through an argument to your linker invocation: $ ld foo.o -syslibroot `xcrun --show-sdk-path` -framework Foundation Auto linking is also applied when using module maps that use the link directive. For example with this module map file: // module.modulemap module foo { link "foo" link framework "Foundation" } That you include with in this source file: @import foo; int main() { return 1; } And compile (with an include path to the module.modulemap file): $ clang -fmodules -c foo.m -o foo.o -I. The produced object depends on foo and Foundation. This can be useful for handwriting module map files for prebuilt libraries, and for quite a few other cases. You can read about thi

## \[Перевод\] От песочных часов к пирамиде: как усовершенствовать структуру тестов

DevFeed: [\[Перевод\] От песочных часов к пирамиде: как усовершенствовать структуру тестов](<https://devfeed.tech/articles/article-23646.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/652025/>)

Author: laechoppe (Badoo)

Published: 2022-02-17T12:15:34Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [badoo](<https://devfeed.tech/tags/badoo.md>), [ios](<https://devfeed.tech/tags/ios.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [qa](<https://devfeed.tech/tags/qa.md>), [qa-automation](<https://devfeed.tech/tags/qa-automation.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-23c525fe15c9](<https://devfeed.tech/tags/tag-23c525fe15c9.md>), [tag-910b48292e17](<https://devfeed.tech/tags/tag-910b48292e17.md>), [tag-97ed25004d35](<https://devfeed.tech/tags/tag-97ed25004d35.md>), [tag-e932065bc8da](<https://devfeed.tech/tags/tag-e932065bc8da.md>), [testing](<https://devfeed.tech/tags/testing.md>), [ui](<https://devfeed.tech/tags/ui.md>), [xcuitest](<https://devfeed.tech/tags/xcuitest.md>)

### AI overview

A tutorial on test automation for native iOS applications written in Objective-C and Swift. It explains the test pyramid, recommends many small unit tests, fewer medium-level tests, and very few high-level end-to-end or UI tests, and discusses how projects can develop an unbalanced testing structure.

### Source excerpt

Меня зовут Владислав Романенко, я Senior iOS QA Engineer в Badoo и Bumble. Мы регулярно внедряем новые фичи в приложения, и автоматизация тестирования -- один из способов не пропустить баги. Фактически автотесты входят в жизненный цикл всех частей наших приложений: бэкенда, сервисов, фронтенда и мобильных клиентов. Чем раньше мы обнаружим ошибку, тем дешевле будет её исправить. Сегодня я расскажу об автоматизации тестирования в iOS, потому что на протяжении всей своей карьеры в Badoo я плотно занимался тестированием наших нативных iOS-приложений, которые написаны на Objective-C и Swift. Хотя кое-где я буду упоминать характерные для iOS инструменты и термины (например, XCTest), общие принципы и подходы универсальны. Так что, даже если в вашем проекте используется совсем другой стек, статья будет вам полезна. Читать далее

## Getting Square's iOS build ready for Apple Silicon with Bazel

DevFeed: [Getting Square's iOS build ready for Apple Silicon with Bazel](<https://devfeed.tech/articles/getting-square-s-ios-build-ready-for-apple-silicon-with-bazel-15665.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/getting-squares-ios-build-ready-for-apple-silicon-with-bazel>)

Author: Jerry Marino

Published: 2022-01-27T20:00:00Z

Content type: tutorial

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [bazel](<https://devfeed.tech/topics/bazel.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [build times](<https://devfeed.tech/topics/build-times.md>), [cpu](<https://devfeed.tech/topics/cpu.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [arm](<https://devfeed.tech/tags/arm.md>), [bazel](<https://devfeed.tech/tags/bazel.md>), [build](<https://devfeed.tech/tags/build.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [caching](<https://devfeed.tech/tags/caching.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [ios](<https://devfeed.tech/tags/ios.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [simulator](<https://devfeed.tech/tags/simulator.md>), [swift](<https://devfeed.tech/tags/swift.md>), [x86](<https://devfeed.tech/tags/x86.md>)

### AI overview

Square describes adapting its Bazel-based iOS build system for Apple Silicon by building and running iOS applications on the M1 simulator. The article explains the available development paths and why device builds and x86_64 builds under Rosetta 2 were not selected.

### Source excerpt

Building and running iOS builds using the M1 simulator

## An Approach for Migrating From Objective-C to Swift

DevFeed: [An Approach for Migrating From Objective-C to Swift](<https://devfeed.tech/articles/an-approach-for-migrating-from-objective-c-to-swift-25811.md>)

Original publisher: [Read original article](<https://www.steveonstuff.com/2022/01/13/migrating-from-objc-to-swift>)

Author: Steve Barnegren

Published: 2022-01-13T00:00:00Z

Content type: tutorial

Language: en

Sources: [Steve Barnegren](<https://devfeed.tech/sources/steve-barnegren.md>)

Topics: [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [tvOS](<https://devfeed.tech/topics/tvos.md>), [generics](<https://devfeed.tech/topics/generics.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [enums](<https://devfeed.tech/tags/enums.md>), [generics](<https://devfeed.tech/tags/generics.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [ios](<https://devfeed.tech/tags/ios.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [optional](<https://devfeed.tech/tags/optional.md>), [swift](<https://devfeed.tech/tags/swift.md>), [types](<https://devfeed.tech/tags/types.md>), [with](<https://devfeed.tech/tags/with.md>)

### AI overview

This article shares lessons from transitioning a large iOS and tvOS application from Objective-C to Swift. It explains why simply adding new Swift code produced limited progress and caused Swift code to be constrained by Objective-C interoperability.

### Source excerpt

It feels like Swift is pretty ubiquitous across the Apple ecosystem now, but there's a lot of Objective-C out there. The larger and older the app, the more likely that there's still a bunch of Objective-C powering various bits behind the scenes.

## Kotlin Native -- Using swift, not Objective-C

DevFeed: [Kotlin Native -- Using swift, not Objective-C](<https://devfeed.tech/articles/kotlin-native-using-swift-not-objective-c-24746.md>)

Original publisher: [Read original article](<https://medium.com/yazio-engineering/kotlin-native-using-swift-not-objective-c-d7742c040539?source=rss----65bd178b00af---4>)

Author: Paul Woitaschek

Published: 2021-11-19T08:00:42Z

Content type: tutorial

Language: en

Sources: [YAZIO Engineering - Medium](<https://devfeed.tech/sources/yazio-engineering-medium.md>)

Topics: [kotlin-native](<https://devfeed.tech/topics/kotlin-native.md>), [Code generation](<https://devfeed.tech/topics/code-generation.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [code-generation](<https://devfeed.tech/tags/code-generation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [interop](<https://devfeed.tech/tags/interop.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-native](<https://devfeed.tech/tags/kotlin-native.md>), [ksp](<https://devfeed.tech/tags/ksp.md>), [library](<https://devfeed.tech/tags/library.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>)

### AI overview

This tutorial explains how YAZIO uses Kotlin Native for shared business logic while providing a Swift-native iOS API. It describes the limitations of Kotlin-to-Objective-C interoperability and shows how KSP and SwiftPoet can generate Swift mappings for Kotlin types such as enums and sealed classes.

### Source excerpt

Kotlin Native -- Using Swift, not Objective-C At YAZIO we use Kotlin Native Extensively. The business logic of all new app features is exclusively written in Kotlin. In its core, every screen has one ViewModel which exposes a single Flow<ViewState> that the Android App and the iOS can consume to render the state. On Android, rendering the view state is no burden because it's the language we use in the Android App anyways. However this is different for iOS. While Swift does interop with Objective-C, the public API as seen from Swift is bad. A simple data class is exported as a regular class. The properties are not native Swift types. What should be a Bool becomes a KotlinBoolean. What should be come a Double becomes a KotlinDouble. But what we want is most of the times a struct with Swift types. These are the lesser evils, the greater ones are enums and sealed classes. In Objective-C, they both become regular classes. And therefore lose all the advantages they have when used from Swift. But what we want is a Swift enum. To overcome these restrictions for quite some time our iOS team has created mappings. There is a whole target, dedicated to mapping the Objective-C classes to Swift. Basically when developing a new feature, the whole public API is manually mapped to Swift. This is good because the result is a clean Swift-native API. But that's bad because it's extreme boilerplate and a real productivity killer. What if we could directly generate these mappings and use code generation to handle that for us? Turns out: There are two tools available that make it possible. The first one is KSP. It is basically a library that lets you implement a Kotlin compiler plugin and it gives you hooks to analyze the Kotlin Syntax Tree and generate code based on it. The second one is SwiftPoet. SwiftPoet is a library you can use to generate Swift code from Kotlin, similar to what KotlinPoet and JavaPoet do. Okay, let's get our handy dirty. For the basic setup, just follow the tutorial

## Kotlin Native -- Using swift, not Objective-C

DevFeed: [Kotlin Native -- Using swift, not Objective-C](<https://devfeed.tech/articles/kotlin-native-using-swift-not-objective-c-26007.md>)

Original publisher: [Read original article](<https://medium.com/yazio-engineering/kotlin-native-using-swift-not-objective-c-d7742c040539?source=rss-fbf9b6d94e65------2>)

Author: Paul Woitaschek

Published: 2021-11-19T07:21:13Z

Content type: tutorial

Language: en

Sources: [Stories by Paul Woitaschek on Medium](<https://devfeed.tech/sources/stories-by-paul-woitaschek-on-medium.md>)

Topics: [kotlin-native](<https://devfeed.tech/topics/kotlin-native.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Code generation](<https://devfeed.tech/topics/code-generation.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Library](<https://devfeed.tech/topics/library.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [code-generation](<https://devfeed.tech/tags/code-generation.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-native](<https://devfeed.tech/tags/kotlin-native.md>), [ksp](<https://devfeed.tech/tags/ksp.md>), [library](<https://devfeed.tech/tags/library.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

This developer article explains how YAZIO uses Kotlin Native for shared business logic while addressing the limitations of exposing Kotlin types through Objective-C to Swift. It describes manually mapping the generated API to Swift and introduces KSP and SwiftPoet as tools for generating Swift mappings and reducing boilerplate.

### Source excerpt

Kotlin Native -- Using Swift, not Objective-C At YAZIO we use Kotlin Native Extensively. The business logic of all new app features is exclusively written in Kotlin. In its core, every screen has one ViewModel which exposes a single Flow<ViewState> that the Android App and the iOS can consume to render the state. On Android, rendering the view state is no burden because it's the language we use in the Android App anyways. However this is different for iOS. While Swift does interop with Objective-C, the public API as seen from Swift is bad. A simple data class is exported as a regular class. The properties are not native Swift types. What should be a Bool becomes a KotlinBoolean. What should be come a Double becomes a KotlinDouble. But what we want is most of the times a struct with Swift types. These are the lesser evils, the greater ones are enums and sealed classes. In Objective-C, they both become regular classes. And therefore lose all the advantages they have when used from Swift. But what we want is a Swift enum. To overcome these restrictions for quite some time our iOS team has created mappings. There is a whole target, dedicated to mapping the Objective-C classes to Swift. Basically when developing a new feature, the whole public API is manually mapped to Swift. This is good because the result is a clean Swift-native API. But that's bad because it's extreme boilerplate and a real productivity killer. What if we could directly generate these mappings and use code generation to handle that for us? Turns out: There are two tools available that make it possible. The first one is KSP. It is basically a library that lets you implement a Kotlin compiler plugin and it gives you hooks to analyze the Kotlin Syntax Tree and generate code based on it. The second one is SwiftPoet. SwiftPoet is a library you can use to generate Swift code from Kotlin, similar to what KotlinPoet and JavaPoet do. Okay, let's get our handy dirty. For the basic setup, just follow the tutorial

## KMM Oddity #1: Interface methods with underscores

DevFeed: [KMM Oddity #1: Interface methods with underscores](<https://devfeed.tech/articles/kmm-oddity-1-interface-methods-with-underscores-24737.md>)

Original publisher: [Read original article](<https://medium.com/xorum-io/kmm-oddity-1-interface-methods-with-underscores-21523b8ed797?source=rss----92bb7980cc9f---4>)

Author: Yev Kanivets

Published: 2021-09-20T04:23:21Z

Content type: tutorial

Language: en

Sources: [xorum.io - Medium](<https://devfeed.tech/sources/xorum-io-medium.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [kotlin-native](<https://devfeed.tech/topics/kotlin-native.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kmm](<https://devfeed.tech/tags/kmm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-native](<https://devfeed.tech/tags/kotlin-native.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>)

### AI overview

This article examines a Kotlin Multiplatform Mobile interoperability oddity in iOS. It explains how the Kotlin/Native compiler can expose an interface method with an underscore suffix, such as eat(food_:), when similarly named methods from different interfaces may clash in Objective-C.

### Source excerpt

Kotlin Multiplatform attracts more and more developers every day. Especially after the technology transitioned to the Alpha stage. On its way to Beta, KMP removes all major hassles (Memory Model, for example). Nonetheless, you can still find "a few" more minor bugs and oddities reported in Kotlin's YouTrack. They aren't blockers for using KMP in your production application but may cost you several hours of wondering what and why is happening in your mobile application (mainly on iOS). I faced many such issues myself since I've started using Kotlin Multiplatform Mobile two years ago. In this series of articles, I'll share my favorite oddities of KMM with explanations and workarounds (if possible). Kotlin/Native Obj-C interop Shared KMM modules are written in Kotlin, hence can be used in Android native applications as it is. On iOS, it's more complicated because of Objective-C and Swift, which can't directly use Kotlin code. Kotlin/Native plugin compiles shared KMM modules to iOS frameworks, which contain binary and Obj-C header. You can find them in the build folder of the shared module, under bin/iOS/. Many concepts of Kotlin don't exist in Obj-C, so specific shortcuts and workarounds need to be applied to make it work. It is where some oddities start appearing. Interface methods naming clash Let's say we have two types of pets -- Dog and Cat, which we need to feed with some specific Food. In Kotlin, we could represent that with two interfaces, each having an internal (embedded) Food class. https://medium.com/media/b868e0383cdc20566aef171daa863a87/href It works perfectly well in Android, but on iOS Dog will have eat(food_:) method instead of eat(food:). Where does that underscore suffix come from? And why do we need it? It looks like Kotlin/Native compiler thinks there will be a clash between eat(food:) methods of Dog and Cat interfaces, so it's safer to make them different by implicitly adding an underscore to the 2nd one. I'm not sure it will become a problem and i

## AppCode 2021.2: улучшения поддержки Swift, автодополнение выражений, окно иерархии вызовов для Swift и не только

DevFeed: [AppCode 2021.2: улучшения поддержки Swift, автодополнение выражений, окно иерархии вызовов для Swift и не только](<https://devfeed.tech/articles/appcode-2021-2-swift-swift-23930.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/JetBrains/articles/573126/>)

Author: yeswolf (JetBrains)

Published: 2021-08-16T09:53:35Z

Content type: release

Language: ru

Sources: [JetBrains RU](<https://devfeed.tech/sources/jetbrains-ru.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [ide](<https://devfeed.tech/topics/ide.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [swift-package-manager](<https://devfeed.tech/topics/swift-package-manager.md>), [async/await](<https://devfeed.tech/topics/async-await.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>)

Tags: [appcode](<https://devfeed.tech/tags/appcode.md>), [async](<https://devfeed.tech/tags/async.md>), [await](<https://devfeed.tech/tags/await.md>), [call-hierarchy](<https://devfeed.tech/tags/call-hierarchy.md>), [complete-statement](<https://devfeed.tech/tags/complete-statement.md>), [ide](<https://devfeed.tech/tags/ide.md>), [kmm](<https://devfeed.tech/tags/kmm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-multiplatform-mobile](<https://devfeed.tech/tags/kotlin-multiplatform-mobile.md>), [local-history](<https://devfeed.tech/tags/local-history.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [swift-package-manager](<https://devfeed.tech/tags/swift-package-manager.md>)

### AI overview

This release article describes AppCode 2021.2 improvements, including support for Swift features such as result builders, enum Codable synthesis, and async/await. It also covers documentation completion, Call Hierarchy, Swift Package Manager build and debugging support, a Kotlin Multiplatform Mobile plugin, a debugger Preview Tab, and Local History search.

### Source excerpt

Привет, Хабр! В этом посте, как и всегда, расскажем о новом релизе AppCode. Всем, кому интересно, -- добро пожаловать под кат. Читать далее

## Модуляризация iOS-приложения Badoo: борьба с последствиями

DevFeed: [Модуляризация iOS-приложения Badoo: борьба с последствиями](<https://devfeed.tech/articles/ios-badoo-23631.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/538270/>)

Author: nsurl-dev (Badoo)

Published: 2021-01-21T17:01:19Z

Content type: tutorial

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Swift](<https://devfeed.tech/topics/swift.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [ci](<https://devfeed.tech/tags/ci.md>), [cocoapods](<https://devfeed.tech/tags/cocoapods.md>), [ios](<https://devfeed.tech/tags/ios.md>), [modularity](<https://devfeed.tech/tags/modularity.md>), [modules](<https://devfeed.tech/tags/modules.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-73f5f2c76797](<https://devfeed.tech/tags/tag-73f5f2c76797.md>), [tag-a3309a813b61](<https://devfeed.tech/tags/tag-a3309a813b61.md>), [tag-d96e238f1419](<https://devfeed.tech/tags/tag-d96e238f1419.md>)

### AI overview

This article describes Badoo's experience expanding iOS app modularization and handling the resulting challenges. It covers dependency-graph complexity, CI load, slower application startup as modules increase, monitoring, and an internal Swift command-line utility for automating dependency-graph analysis and fixing typical linking errors.

### Source excerpt

В предыдущей статье я рассказывал о том, как мы выделили модуль чата в нашем приложении. Всё прошло успешно, и мы собирались распространить этот опыт -- начать тотальную модуляризацию в iOS-разработке Badoo. Даже презентовали подход продуктовым командам, командам, занимающимся тестированием и непрерывной интеграцией, и постепенно стали внедрять модуляризацию в наши процессы. Мы сразу понимали что будут проблемы, поэтому не торопились и раскатывали решение поэтапно, что помогло нам вовремя понять проблемы о которых пойдет речь далее. В этой статье я расскажу: -- как мы не потерялись в сложном графе зависимостей; -- как спасли CI от чрезмерной нагрузки; -- что делать, если с каждым новым модулем приложение запускается всё медленнее; -- мониторинг каких показателей стоит предусмотреть и почему это необходимо. Читать далее

## Модуляризация iOS-приложения: зачем и как мы разбиваем Badoo на модули

DevFeed: [Модуляризация iOS-приложения: зачем и как мы разбиваем Badoo на модули](<https://devfeed.tech/articles/ios-badoo-23627.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/badoo/articles/531162/>)

Author: nsurl-dev (Badoo)

Published: 2020-12-03T13:26:03Z

Content type: article

Language: ru

Sources: [Badoo EN](<https://devfeed.tech/sources/badoo-en.md>), [Badoo RU](<https://devfeed.tech/sources/badoo-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Expo](<https://devfeed.tech/topics/expo.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [badoo](<https://devfeed.tech/tags/badoo.md>), [cocoapods](<https://devfeed.tech/tags/cocoapods.md>), [ios](<https://devfeed.tech/tags/ios.md>), [modularity](<https://devfeed.tech/tags/modularity.md>), [modules](<https://devfeed.tech/tags/modules.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-a3309a813b61](<https://devfeed.tech/tags/tag-a3309a813b61.md>)

### AI overview

Badoo describes its experience modularizing iOS applications, including how to define modules, organize dependencies, reduce launch time, monitor the process, automate module creation, and prevent linking errors. The article also discusses modularization as an ongoing process involving specialized, reusable modules.

### Source excerpt

В iOS-разработке Badoo мы уже несколько лет занимаемся созданием модулей, и большая часть нового кода разрабатывается вне кодовой базы приложений. Сейчас у нас более 100 модулей для Badoo и Bumble. В этой статье я расскажу о нашем опыте и отвечу на самые популярные вопросы о модуляризации: -- по какому принципу выделять модули; -- как организовать связи между ними; -- достаточно ли для фичи одного фреймворка; -- как сократить время запуска многомодульного приложения; -- зачем в этом процессе мониторинг; -- можно ли автоматизировать создание новых модулей и так далее. Мой коллега, лид команды iOS-разработки и Core-команды Артем Лоенко, в начале года говорил об этом на митапе FunCorp в докладе "Катастрофически полезные последствия модуляризации". Я приведу более подробный разбор процесса модуляризации и некоторых опущенных в его рассказе деталей. Читать далее

## AppKit in Swift Playgrounds

DevFeed: [AppKit in Swift Playgrounds](<https://devfeed.tech/articles/appkit-in-swift-playgrounds-27353.md>)

Original publisher: [Read original article](<https://saagarjha.com/blog/2020/02/11/appkit-in-swift-playgrounds/>)

Published: 2020-02-11T00:00:00Z

Content type: article

Language: en

Sources: [Saagar Jha](<https://devfeed.tech/sources/saagar-jha.md>)

Topics: [Swift](<https://devfeed.tech/topics/swift.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [SDK](<https://devfeed.tech/topics/sdk.md>), [Code](<https://devfeed.tech/topics/code.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [macos](<https://devfeed.tech/tags/macos.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [swift](<https://devfeed.tech/tags/swift.md>)

### AI overview

The article examines how Swift Playgrounds on macOS can import AppKit in a Mac Catalyst application, despite most Cocoa APIs being unavailable. It describes using the Objective-C runtime to create a native window and notes that official support may come in a future release.

### Source excerpt

A Catalyst version of the Swift Playgrounds app launched for macOS earlier today, with support for the Mac Catalyst platform SDK. While it's usually impractical to import AppKit in a Catalyst application, this is apparently now possible in Swift Playgrounds. Most Cocoa APIs have been marked as unavailable, but import AppKit does cause the image to actually end up being loaded so it only takes a little bit of work to be able to use them:

[Next page](<https://devfeed.tech/tags/objective-c.md?cursor=WyIyMDIwLTAyLTExVDAwOjAwOjAwKzAwOjAwIiwgIjE0ZWVmMjliLTc4ZjktNDA0Zi1hMGYwLWVmYTFmMmRkNDZiMyJd>)