Skip to content

Conversation

@13rac1
Copy link
Contributor

@13rac1 13rac1 commented Dec 27, 2025

Implements iOS support to enable side-by-side installation of debug and production builds. This allows developers to run both versions on the same device without conflicts.

Removes flavor complexity from both platforms. Previously, both iOS and Android required --flavor flags for all builds. Now standard Debug/Release build types handle dev/production differentiation automatically.

This is an upgrade from #189

Fixes flutter run on iOS:

$ flutter run
...
Launching lib/main.dart on iPhone 17 in debug mode...

Error: The Xcode project does not define custom schemes. You cannot use the --flavor option.

Changes:

  • Remove Android productFlavors, use applicationIdSuffix on debug buildType
  • Remove iOS custom build configurations (Debug-dev, Release-production, etc.)
  • Use standard Debug/Profile/Release configurations for iOS
  • Create Debug.xcconfig with dev bundle ID and display name
  • Update Release.xcconfig and Profile.xcconfig with production settings
  • Remove default-flavor from pubspec.yaml
  • Update Makefile, GitHub Actions, and Fastlane (remove --flavor flags)
  • Fix deprecated flutter format -> dart format in Makefile
  • Fix deprecated Swift syntax in AppDelegate.swift
  • Set iOS minimum deployment target to 14.0

Benefits:

  • flutter run just works on both platforms (no flags needed)
  • Debug builds = dev (bundle ID with .dev suffix)
  • Release builds = production (standard bundle ID)
  • Side-by-side installation still works via different bundle IDs
  • Simpler build system, easier for contributors to understand

Usage:

  flutter run              # debug/dev build
  flutter run --release    # release/production build
  flutter build apk        # release APK
  flutter build ios        # release iOS

@13rac1 13rac1 force-pushed the ios-debug branch 2 times, most recently from 00dc03d to 888f408 Compare December 27, 2025 01:09
@13rac1 13rac1 changed the title build: implement iOS flavors for debug and production builds build: implement iOS flavors for dev and production builds Dec 27, 2025
@kolaente
Copy link
Member

kolaente commented Jan 7, 2026

I've tried building this with flutter run but could not get it to work:

Error (Xcode): lstat(/Users/konrad/www/vikunja/app/ios/Flutter/Debug.xcconfig): No such file or directory (2)


Could not build the application for the simulator.
Error launching application on iPhone 16 Plus.

Same when explicitly passing --flavor dev

But I've never done iOS development before, not sure if I set it up correctly?

@13rac1
Copy link
Contributor Author

13rac1 commented Jan 16, 2026

I've thought through this further. Do you/we need the build flavors? As far as I can tell, they are not necessary. I've got a working build of Android and iOS without the flavors.

@leschbenedikt
Copy link
Collaborator

I don't think we need flavors.
Currently they are used as build types.
As I know it flavors are typically used for different feature sets like pro and non-pro or something like that.

@13rac1 13rac1 changed the title build: implement iOS flavors for dev and production builds build: simplify iOS and Android build configuration Jan 23, 2026
@13rac1
Copy link
Contributor Author

13rac1 commented Jan 23, 2026

Alright, I forced pushed a completely different implementation simplifying both iOS. @kolaente and @leschbenedikt what do you think? Does this work for you? No flavors at all.

  • flutter run → defaults to debug (for development with hot reload)
  • flutter build → defaults to release (for distribution)

Removes flavor complexity from both platforms. Previously, both iOS and
Android required --flavor flags for all builds. Now standard Debug/Release
build types handle dev/production differentiation automatically.

Changes:
- Remove Android productFlavors, use applicationIdSuffix on debug buildType
- Remove iOS custom build configurations (Debug-dev, Release-production, etc.)
- Use standard Debug/Profile/Release configurations for iOS
- Create Debug.xcconfig with dev bundle ID and display name
- Update Release.xcconfig and Profile.xcconfig with production settings
- Remove default-flavor from pubspec.yaml
- Update Makefile, GitHub Actions, and Fastlane (remove --flavor flags)
- Fix deprecated flutter format -> dart format in Makefile
- Fix deprecated Swift syntax in AppDelegate.swift
- Set iOS minimum deployment target to 14.0

Benefits:
- `flutter run` just works on both platforms (no flags needed)
- Debug builds = dev (bundle ID with .dev suffix)
- Release builds = production (standard bundle ID)
- Side-by-side installation still works via different bundle IDs
- Simpler build system, easier for contributors to understand

Usage:
  flutter run              # debug/dev build
  flutter run --release    # release/production build
  flutter build apk        # release APK
  flutter build ios        # release iOS

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@kolaente
Copy link
Member

I think we've originally introduced the flavours because there was some problem when building without them. As long as it works now I'm fine with removing them.

@leschbenedikt what do you think?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants