diff --git a/Cargo.toml b/Cargo.toml
index 3baa2ad..ee369d0 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -31,12 +31,17 @@ url = "2.1.1"
eval = "0.4"
[features]
-default = ["macos"]
+default = []
cloudkit = []
-ios = []
-macos = []
color_fallbacks = []
quicklook = []
user-notifications = ["uuid"]
webview = []
webview-downloading-macos = []
+
+[package.metadata.bundle.example.ios-beta]
+name = "ios-beta"
+identifier = "com.cacao.ios-test"
+category = "Developer Tool"
+short_description = "An example Cacao iOS app."
+long_description = "An example Cacao iOS app."
diff --git a/examples/ios-beta/main.rs b/examples/ios-beta/main.rs
new file mode 100644
index 0000000..e8d362d
--- /dev/null
+++ b/examples/ios-beta/main.rs
@@ -0,0 +1,96 @@
+use std::sync::RwLock;
+
+use cacao::ios::{
+ App, AppDelegate, Scene, SceneConfig, SceneSession,
+ SceneConnectionOptions, WindowSceneDelegate, Window
+};
+
+use cacao::color::Color;
+use cacao::layout::{Layout, LayoutConstraint};
+use cacao::view::{View, ViewController, ViewDelegate};
+
+#[derive(Default)]
+struct TestApp;
+
+impl AppDelegate for TestApp {
+ fn config_for_scene_session(&self, session: SceneSession, _options: SceneConnectionOptions) -> SceneConfig {
+ SceneConfig::new("Default Configuration", session.role())
+ }
+}
+
+#[derive(Default)]
+pub struct RootView {
+ pub red: View,
+ pub green: View,
+ pub blue: View
+}
+
+impl ViewDelegate for RootView {
+ const NAME: &'static str = "RootView";
+
+ fn did_load(&mut self, view: View) {
+ self.red.set_background_color(Color::SystemRed);
+ self.red.layer.set_corner_radius(16.);
+ view.add_subview(&self.red);
+
+ self.green.set_background_color(Color::SystemGreen);
+ view.add_subview(&self.green);
+
+ self.blue.set_background_color(Color::SystemBlue);
+ view.add_subview(&self.blue);
+
+ LayoutConstraint::activate(&[
+ self.red.top.constraint_equal_to(&view.top).offset(16.),
+ self.red.leading.constraint_equal_to(&view.leading).offset(16.),
+ self.red.trailing.constraint_equal_to(&view.trailing).offset(-16.),
+ self.red.height.constraint_equal_to_constant(100.),
+
+ self.green.top.constraint_equal_to(&self.red.bottom).offset(16.),
+ self.green.leading.constraint_equal_to(&view.leading).offset(16.),
+ self.green.trailing.constraint_equal_to(&view.trailing).offset(-16.),
+ self.green.height.constraint_equal_to_constant(120.),
+
+ self.blue.top.constraint_equal_to(&self.green.bottom).offset(16.),
+ self.blue.leading.constraint_equal_to(&view.leading).offset(16.),
+ self.blue.trailing.constraint_equal_to(&view.trailing).offset(-16.),
+ self.blue.bottom.constraint_equal_to(&view.bottom).offset(-16.)
+ ]);
+ }
+}
+
+#[derive(Default)]
+pub struct WindowScene {
+ pub window: RwLock