Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

- We migrated iOS to the UIKit scene-based life cycle.

## [v0.5.2] - 2026-07-23

- We addressed a scenario where, in iOS, an Auth dialogue could continuously popup on app startup due to access of either large keychain blob items or blocked items.
Expand Down
22 changes: 14 additions & 8 deletions example/ios/MendixNativeExample.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
1499ABBDB7935B67C3951198 /* libPods-MendixNativeExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 24A5FB93E78C6A91516539F4 /* libPods-MendixNativeExample.a */; };
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
761780EF2CA45674006654EE /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EE2CA45674006654EE /* SceneDelegate.swift */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
E7824D7967CD7EE7C8E76686 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; };
/* End PBXBuildFile section */
Expand All @@ -22,6 +23,7 @@
24A5FB93E78C6A91516539F4 /* libPods-MendixNativeExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MendixNativeExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
503B3921D3702B3C7DF3D941 /* Pods-MendixNativeExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MendixNativeExample.release.xcconfig"; path = "Target Support Files/Pods-MendixNativeExample/Pods-MendixNativeExample.release.xcconfig"; sourceTree = "<group>"; };
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = MendixNativeExample/AppDelegate.swift; sourceTree = "<group>"; };
761780EE2CA45674006654EE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SceneDelegate.swift; path = MendixNativeExample/SceneDelegate.swift; sourceTree = "<group>"; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = MendixNativeExample/LaunchScreen.storyboard; sourceTree = "<group>"; };
9EF6D8952E93D80B00BFE8AE /* MendixNativeExample-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MendixNativeExample-Bridging-Header.h"; sourceTree = "<group>"; };
DC6440C7A3C29FAC4633A591 /* Pods-MendixNativeExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MendixNativeExample.debug.xcconfig"; path = "Target Support Files/Pods-MendixNativeExample/Pods-MendixNativeExample.debug.xcconfig"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -49,6 +51,7 @@
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */,
9EF6D8952E93D80B00BFE8AE /* MendixNativeExample-Bridging-Header.h */,
761780EE2CA45674006654EE /* SceneDelegate.swift */,
);
name = MendixNativeExample;
sourceTree = "<group>";
Expand Down Expand Up @@ -193,10 +196,14 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-MendixNativeExample/Pods-MendixNativeExample-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-MendixNativeExample/Pods-MendixNativeExample-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MendixNativeExample/Pods-MendixNativeExample-frameworks.sh\"\n";
Expand Down Expand Up @@ -232,10 +239,14 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-MendixNativeExample/Pods-MendixNativeExample-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-MendixNativeExample/Pods-MendixNativeExample-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MendixNativeExample/Pods-MendixNativeExample-resources.sh\"\n";
Expand All @@ -249,6 +260,7 @@
buildActionMask = 2147483647;
files = (
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */,
761780EF2CA45674006654EE /* SceneDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -385,10 +397,7 @@
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
"-DRCT_REMOVE_LEGACY_ARCH=1",
);
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
OTHER_LDFLAGS = "$(inherited) ";
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
Expand Down Expand Up @@ -463,10 +472,7 @@
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
"-DRCT_REMOVE_LEGACY_ARCH=1",
);
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
OTHER_LDFLAGS = "$(inherited) ";
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
SWIFT_ENABLE_EXPLICIT_MODULES = NO;
Expand Down
38 changes: 3 additions & 35 deletions example/ios/MendixNativeExample/AppDelegate.swift
Original file line number Diff line number Diff line change
@@ -1,41 +1,9 @@
import UIKit
import React
import MendixNative

@main
class AppDelegate: ReactAppProvider {
class AppDelegate: UIResponder, UIApplicationDelegate {

override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
setUpProvider()
guard let bundleUrl = bundleURL() else {
let message = "No script URL provided. Make sure the metro packager is running or you have embedded a JS bundle in your application bundle."
fatalError(message)
}
let mendixApp = MendixApp.init(
identifier: nil,
bundleUrl: bundleUrl,
runtimeUrl: URL(string: "http://localhost:8081")!,
warningsFilter: .none,
isDeveloperApp: true,
clearDataAtLaunch: false,
splashScreenPresenter: nil,
reactLoading: nil,
enableThreeFingerGestures: false
)

AppPreferences.devModeEnabled = true
AppPreferences.remoteDebuggingEnabled = true

ReactNative.shared.setup(mendixApp, launchOptions: nil)
ReactNative.shared.start()
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

func bundleURL() -> URL? {
#if DEBUG
RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
#else
Bundle.main.url(forResource: "main", withExtension: "jsbundle")
#endif
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
return true
}
}
17 changes: 17 additions & 0 deletions example/ios/MendixNativeExample/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,23 @@
<string></string>
<key>RCTNewArchEnabled</key>
<true/>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
</dict>
</array>
</dict>
</dict>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
Expand Down
39 changes: 39 additions & 0 deletions example/ios/MendixNativeExample/SceneDelegate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import UIKit
import React
import MendixNative

class SceneDelegate: ReactAppProvider {

override func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
super.scene(scene, willConnectTo: session, options: connectionOptions)

setUpProvider()
guard let bundleUrl = bundleURL() else {
let message = "No script URL provided. Make sure the metro packager is running or you have embedded a JS bundle in your application bundle."
fatalError(message)
}
let mendixApp = MendixApp.init(
identifier: nil,
bundleUrl: bundleUrl,
runtimeUrl: URL(string: "http://localhost:8081")!,
warningsFilter: .none,
isDeveloperApp: true,
clearDataAtLaunch: false,
splashScreenPresenter: nil,
reactLoading: nil,
enableThreeFingerGestures: false
)
AppPreferences.devModeEnabled = true
AppPreferences.remoteDebuggingEnabled = true
ReactNative.shared.setup(mendixApp, launchOptions: ReactAppProvider.launchOptions(from: connectionOptions))
ReactNative.shared.start()
}

func bundleURL() -> URL? {
#if DEBUG
RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
#else
Bundle.main.url(forResource: "main", withExtension: "jsbundle")
#endif
}
}
10 changes: 10 additions & 0 deletions example/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,15 @@ target 'MendixNativeExample' do
:mac_catalyst_enabled => false,
# :ccache_enabled => true
)

minimum_ios_version = Gem::Version.new(min_ios_version_supported)
installer.pods_project.targets.each do |target|
target.build_configurations.each do |build_configuration|
deployment_target = build_configuration.build_settings['IPHONEOS_DEPLOYMENT_TARGET']
if deployment_target && Gem::Version.new(deployment_target) < minimum_ios_version
build_configuration.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = min_ios_version_supported
end
end
end
end
end
10 changes: 5 additions & 5 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2125,7 +2125,7 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
FBLazyVector: e97c19a5a442429d1988f182a1940fb08df514da
hermes-engine: 14f40a40d0d1d7bf76a9e3949a2bbebb33a817d7
hermes-engine: a7179a4cd45fa3f8143712e52bd3c2d20b5274a0
MendixNative: b789c95cb7e776e332a0dabd4f39b91e20c1f31d
op-sqlite: e9ef65bcf95a97863874cee87841425bb71c8396
OpenSSL-Universal: 9110d21982bb7e8b22a962b6db56a8aa805afde7
Expand All @@ -2137,7 +2137,7 @@ SPEC CHECKSUMS:
React: 1ba7d364ade7d883a1ec055bfc3606f35fdee17b
React-callinvoker: bc2a26f8d84fb01f003fc6de6c9337b64715f95b
React-Core: 7840d3a80b43a95c5e80ef75146bd70925ebab0f
React-Core-prebuilt: 8e36d83999fd0789ad2551820a13d4af8b646369
React-Core-prebuilt: a666604237ac1fb51754ee37234701cf197d851b
React-CoreModules: 2eb010400b63b89e53a324ffb3c112e4c7c3ce42
React-cxxreact: a558e92199d26f145afa9e62c4233cf8e7950efe
React-debug: 755200a6e7f5e6e0a40ff8d215493d43cce285fc
Expand Down Expand Up @@ -2198,12 +2198,12 @@ SPEC CHECKSUMS:
ReactAppDependencyProvider: e96e93b493d8d86eeaee3e590ba0be53f6abe46f
ReactCodegen: 797de5178718324c6eba3327b07f9a423fbd5787
ReactCommon: 07572bf9e687c8a52fbe4a3641e9e3a1a477c78e
ReactNativeDependencies: f3a01ac658abdb7a6c6dc2e998074031fa8528a2
ReactNativeDependencies: 9ed9fcba1a22047730c895521de699bacbb90312
RNCAsyncStorage: 3a4f5e2777dae1688b781a487923a08569e27fe4
RNGestureHandler: b4f6de20b30325ee40b693f558ad02213201ce91
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
Yoga: c0b3f2c7e8d3e327e450223a2414ca3fa296b9a2

PODFILE CHECKSUM: 115c3d28fbc33ec0a408f3aba951d5d16e47a401
PODFILE CHECKSUM: 0cee92783ebe27187df65ef7b23a6a340d1aa921

COCOAPODS: 1.17.0
COCOAPODS: 1.15.2
Loading
Loading