Skip to content

Migrate from ObservableObject to @Observable (Swift Observation)#653

Open
Demian-Yushyn wants to merge 53 commits intoopenedx:developfrom
raccoongang:feat/Observable-migration
Open

Migrate from ObservableObject to @Observable (Swift Observation)#653
Demian-Yushyn wants to merge 53 commits intoopenedx:developfrom
raccoongang:feat/Observable-migration

Conversation

@Demian-Yushyn
Copy link
Contributor

This PR migrates ViewModels from the ObservableObject protocol and @Publishedproperties to the new Swift Observation macro @Observable.

As part of this change, the project now targets iOS 17+ as the minimum deployment version, allowing us to rely on modern SwiftUI and observation APIs without backward-compatibility workarounds.

Motivation

ObservableObject + @Published requires a significant amount of manual work and is error-prone:
properties must be explicitly marked as @Published, it’s easy to forget to publish changes, objectWillChange is implicit and not type-safe.

With iOS 17 as the minimum supported version, we can safely adopt Swift’s @Observable macro, which provides a compiler-generated, first-class observation mechanism that is:

  • safer
  • more concise
  • easier to reason about
  • officially supported and forward-looking

What changed

Before


class SomeViewModel: ObservableObject {
    @Published var value: Int = 0
}

After


@Observable
class SomeViewModel {
    var value: Int = 0
}

Benefits

  • Less boilerplate
  • No need for ObservableObject, @Published, or manual change notifications.
  • Fewer bugs
  • All mutable properties are observable by default — no risk of forgetting to publish state changes.
  • Cleaner ViewModels
  • Models focus on business logic instead of SwiftUI plumbing.
  • Better performance characteristics
  • Observation code is generated at compile time, enabling better compiler optimizations.
  • Future-proof architecture
  • By targeting iOS 17+, the codebase fully embraces modern SwiftUI and Swift concurrency APIs.

Demian-Yushyn and others added 30 commits September 16, 2025 11:05
Migrated Course Unit View, CourseContainerViewModel, SignInViewModel, BaseCourseViewModel
Swift, replacing `@ObservedObject` and `@StateObject`.

This modernizes the data flow and simplifies the code by leveraging the compiler to automatically manage observation.
Also it increases the minimum iOS deployment target to 17.0
Updates the iOS deployment target to version 17.0 in the project settings.

Refactors the course outline and progress view to handle loading states correctly.
@openedx-webhooks openedx-webhooks added the open-source-contribution PR author is not from Axim or 2U label Feb 3, 2026
@openedx-webhooks
Copy link

Thanks for the pull request, @Demian-Yushyn!

This repository is currently maintained by @openedx/openedx-mobile-maintainers.

Once you've gone through the following steps feel free to tag them in a comment and let them know that your changes are ready for engineering review.

🔘 Get product approval

If you haven't already, check this list to see if your contribution needs to go through the product review process.

  • If it does, you'll need to submit a product proposal for your contribution, and have it reviewed by the Product Working Group.
    • This process (including the steps you'll need to take) is documented here.
  • If it doesn't, simply proceed with the next step.
🔘 Provide context

To help your reviewers and other members of the community understand the purpose and larger context of your changes, feel free to add as much of the following information to the PR description as you can:

  • Dependencies

    This PR must be merged before / after / at the same time as ...

  • Blockers

    This PR is waiting for OEP-1234 to be accepted.

  • Timeline information

    This PR must be merged by XX date because ...

  • Partner information

    This is for a course on edx.org.

  • Supporting documentation
  • Relevant Open edX discussion forum threads
🔘 Get a green build

If one or more checks are failing, continue working on your changes until this is no longer the case and your build turns green.

Details
Where can I find more information?

If you'd like to get more details on all aspects of the review process for open source pull requests (OSPRs), check out the following resources:

When can I expect my changes to be merged?

Our goal is to get community contributions seen and reviewed as efficiently as possible.

However, the amount of time that it takes to review and merge a PR can vary significantly based on factors such as:

  • The size and impact of the changes that it introduces
  • The need for product review
  • Maintenance status of the parent repository

💡 As a result it may take up to several weeks or months to complete a review and merge your PR.

@github-project-automation github-project-automation bot moved this to Needs Triage in Contributions Feb 3, 2026
@mphilbrick211 mphilbrick211 moved this from Needs Triage to Waiting on Author in Contributions Feb 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

open-source-contribution PR author is not from Axim or 2U

Projects

Status: Waiting on Author

Development

Successfully merging this pull request may close these issues.

3 participants