<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/dropping-swift-entirely-from-our-bevy-ios-crates-e9zfvfucq" -->

---
title: Dropping Swift entirely from our Bevy iOS crates | daily.dev
description: Rustunit removed the Swift/SPM packages that used to accompany their bevy_ios_* Rust crates (safearea, alerts, review, notifications, gamecenter, iap),...
canonical: https://daily.dev/posts/dropping-swift-entirely-from-our-bevy-ios-crates-e9zfvfucq
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Dropping Swift entirely from our Bevy iOS crates | daily.dev
og:description: Rustunit removed the Swift/SPM packages that used to accompany their bevy_ios_* Rust crates (safearea, alerts, review, notifications, gamecenter, iap),...
og:url: https://daily.dev/posts/dropping-swift-entirely-from-our-bevy-ios-crates-e9zfvfucq
og:image: https://api.daily.dev/og/posts/e9ZFVfUCQ.png
og:image:alt: Dropping Swift entirely from our Bevy iOS crates
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Dropping Swift entirely from our Bevy iOS crates

**[Lobsters](https://daily.dev/sources/lobsters)** · 5 min read · 0 upvotes · 0 comments

## Summary

Rustunit removed the Swift/SPM packages that used to accompany their bevy_ios_* Rust crates (safearea, alerts, review, notifications, gamecenter, iap), replacing the hand-written C/Objective-C bridges and swift-bridge/xcframework machinery with objc2's generated Objective-C framework bindings. This means developers no longer add an SPM package, match crate/package versions manually, or deal with broken simulator builds; installation is now just cargo add. The exception is bevy_ios_iap, which still needs a small Swift shim because StoreKit 2 has no Objective-C runtime to bind against. Several crates got version bumps (bevy_ios_gamecenter 0.9, bevy_ios_notifications 0.7, bevy_ios_review 0.8, bevy_ios_safearea 0.7, bevy_ios_iap 0.11 unreleased), with bevy_ios_notifications having the most API changes.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://rustunit.com/blog/2026/09-04-bevy-ios-crates-objc2>

## Questions this post answers

### How do I add GameCenter or iOS notifications support to a Bevy iOS game now that bevy_ios_gamecenter no longer needs a Swift package?

Just run cargo add on the crate, such as bevy_ios_gamecenter version 0.9 or bevy_ios_notifications version 0.7. These crates were rewritten to use the objc2 crate's generated Objective-C framework bindings instead of a separate Swift Package Manager package, so there is no Xcode SPM step, no matching crate/package versions, and simulator builds work again.

_Track dependency changes like this Bevy iOS crate migration on daily.dev before they break your build._

### Why did bevy_ios_iap keep a Swift shim while other bevy_ios crates removed Swift entirely?

StoreKit 2 is Swift-only with no Objective-C runtime, so objc2 cannot bind against it directly. The bevy_ios_iap crate still ships a small Swift shim compiled by build.rs with swiftc and linked statically, communicating with Rust over a hand-written C ABI carrying JSON, but it no longer needs a separate SPM package or xcframework release.

_Developers weighing Rust-Swift interop tradeoffs can follow cases like this on daily.dev._

### What is the benefit of using objc2 instead of swift-bridge for calling Apple frameworks from Rust?

Objc2 binds against Objective-C's dynamic runtime generically using selectors, type encodings, and objc_msgSend, so one library handles every Apple framework instead of a hand-written bridge per crate. This removed the need to build and ship xcframework zips in CI, fixed broken aarch64-apple-ios-sim builds caused by swift-bridge pulling in rust-bindgen, and deleted thousands of lines of generated bridge code, for example 4430 lines from bevy_ios_gamecenter.

_Compare Rust-to-iOS binding approaches like objc2 versus swift-bridge on daily.dev before picking one for your project._

## Similar posts on daily.dev

- [SPI Joins Apple, and Swift Moves Toward Self-Hosting -- Fatbobman's Swift Weekly \#142](https://daily.dev/posts/spi-joins-apple-and-swift-moves-toward-self-hosting----fatbobman-s-swift-weekly-142-17xuqmtgh) · Fatbobman · 0 upvotes · 0 comments
- [Mastering Swift Package Manager: The Modern Era of iOS Dependency Management](https://daily.dev/posts/mastering-swift-package-manager-the-modern-era-of-ios-dependency-management-wy24qxtmm) · Medium · 0 upvotes · 0 comments
- [Issue 749 – iOS Dev Weekly](https://daily.dev/posts/issue-749-ios-dev-weekly-jml967lx1) · iOS Dev Weekly · 1 upvotes · 0 comments
- [Announcing Capacitor 8](https://daily.dev/posts/announcing-capacitor-8-6jr9es0ba) · Ionic Blog · 34 upvotes · 0 comments

---

Tags: [#ios](https://daily.dev/tags/ios), [#rust](https://daily.dev/tags/rust), [#swift](https://daily.dev/tags/swift), [#bevy](https://daily.dev/tags/bevy)

[View this post on daily.dev](https://daily.dev/posts/dropping-swift-entirely-from-our-bevy-ios-crates-e9zfvfucq)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Dropping Swift entirely from our Bevy iOS crates","url":"https://daily.dev/posts/dropping-swift-entirely-from-our-bevy-ios-crates-e9zfvfucq","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/dropping-swift-entirely-from-our-bevy-ios-crates-e9zfvfucq"},"datePublished":"2026-09-28T18:32:10.770Z","dateModified":"2026-09-28T18:32:35.098Z","description":"Rustunit removed the Swift/SPM packages that used to accompany their bevy_ios_* Rust crates (safearea, alerts, review, notifications, gamecenter, iap),...","image":"https://media.daily.dev/image/upload/s--2-1xRawN--/f_auto/v1722860399/public/Placeholder%2011","thumbnailUrl":"https://media.daily.dev/image/upload/s--2-1xRawN--/f_auto/v1722860399/public/Placeholder%2011","isAccessibleForFree":true,"articleSection":"Lobsters","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Lobsters","logo":"https://media.daily.dev/image/upload/s--tl8v_Fku--/f_auto,t_logo/v1698841318/logos/lobste.jpg","url":"https://daily.dev/sources/lobsters"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/dropping-swift-entirely-from-our-bevy-ios-crates-e9zfvfucq","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"ios,rust,swift,bevy","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Lobsters","item":"https://daily.dev/sources/lobsters"},{"@type":"ListItem","position":3,"name":"Dropping Swift entirely from our Bevy iOS crates"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/dropping-swift-entirely-from-our-bevy-ios-crates-e9zfvfucq#faq","mainEntity":[{"@type":"Question","name":"How do I add GameCenter or iOS notifications support to a Bevy iOS game now that bevy_ios_gamecenter no longer needs a Swift package?","acceptedAnswer":{"@type":"Answer","text":"Just run cargo add on the crate, such as bevy_ios_gamecenter version 0.9 or bevy_ios_notifications version 0.7. These crates were rewritten to use the objc2 crate's generated Objective-C framework bindings instead of a separate Swift Package Manager package, so there is no Xcode SPM step, no matching crate/package versions, and simulator builds work again. Track dependency changes like this Bevy iOS crate migration on daily.dev before they break your build."}},{"@type":"Question","name":"Why did bevy_ios_iap keep a Swift shim while other bevy_ios crates removed Swift entirely?","acceptedAnswer":{"@type":"Answer","text":"StoreKit 2 is Swift-only with no Objective-C runtime, so objc2 cannot bind against it directly. The bevy_ios_iap crate still ships a small Swift shim compiled by build.rs with swiftc and linked statically, communicating with Rust over a hand-written C ABI carrying JSON, but it no longer needs a separate SPM package or xcframework release. Developers weighing Rust-Swift interop tradeoffs can follow cases like this on daily.dev."}},{"@type":"Question","name":"What is the benefit of using objc2 instead of swift-bridge for calling Apple frameworks from Rust?","acceptedAnswer":{"@type":"Answer","text":"Objc2 binds against Objective-C's dynamic runtime generically using selectors, type encodings, and objc_msgSend, so one library handles every Apple framework instead of a hand-written bridge per crate. This removed the need to build and ship xcframework zips in CI, fixed broken aarch64-apple-ios-sim builds caused by swift-bridge pulling in rust-bindgen, and deleted thousands of lines of generated bridge code, for example 4430 lines from bevy_ios_gamecenter. Compare Rust-to-iOS binding approaches like objc2 versus swift-bridge on daily.dev before picking one for your project."}}]}
```

