This commit is contained in:
Maximilian Roider
2025-11-14 12:04:24 +01:00
parent 73bee649f3
commit 8a65339d30
26 changed files with 330 additions and 103 deletions

View File

@@ -1,81 +1,10 @@
{
"images" : [
{
"filename" : "icon_1024x1024 1.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "tinted"
}
],
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"idiom" : "mac",
"scale" : "1x",
"size" : "16x16"
},
{
"idiom" : "mac",
"scale" : "2x",
"size" : "16x16"
},
{
"idiom" : "mac",
"scale" : "1x",
"size" : "32x32"
},
{
"idiom" : "mac",
"scale" : "2x",
"size" : "32x32"
},
{
"idiom" : "mac",
"scale" : "1x",
"size" : "128x128"
},
{
"idiom" : "mac",
"scale" : "2x",
"size" : "128x128"
},
{
"idiom" : "mac",
"scale" : "1x",
"size" : "256x256"
},
{
"idiom" : "mac",
"scale" : "2x",
"size" : "256x256"
},
{
"idiom" : "mac",
"scale" : "1x",
"size" : "512x512"
},
{
"idiom" : "mac",
"scale" : "2x",
"size" : "512x512"
}
],
"info" : {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1022 KiB

View File

@@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "AppIcon-Clemens.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -4,14 +4,27 @@
//
// Created by Maximilian Roider on 14.11.25.
//
/*
*/
import SwiftUI
import WebKit
@main
struct Clemens_PlaygroundApp: App {
var body: some Scene {
WindowGroup {
ContentView()
GameSelection()
}
}
}

View File

@@ -1,24 +0,0 @@
//
// ContentView.swift
// Clemens Playground
//
// Created by Maximilian Roider on 14.11.25.
//
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
}
}
#Preview {
ContentView()
}

View File

@@ -0,0 +1,14 @@
//
// Game.swift
// Clemens Playground
//
// Created by Maximilian Roider on 14.11.25.
//
import Foundation
struct Game: Hashable, Codable, Identifiable {
var id: Int
var name: String
var url: String
}

View File

@@ -0,0 +1,33 @@
//
// Loader.swift
// Clemens Playground
//
// Created by Maximilian Roider on 14.11.25.
//
import Foundation
var games: [Game] = load("games.json")
func load<T: Decodable>(_ filename: String) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}

View File

@@ -0,0 +1,23 @@
//
// GameSelection.swift
// Clemens Playground
//
// Created by Maximilian Roider on 14.11.25.
//
import SwiftUI
struct GameSelection: View {
var body: some View {
NavigationView {
List(games) { game in
NavigationLink(destination: GameView(game)) {
ZStack {
GameRow(game)
}
}
}
.navigationTitle("Games")
}
}
}

View File

@@ -0,0 +1,31 @@
//
// GameView.swift
// Clemens Playground
//
// Created by Maximilian Roider on 14.11.25.
//
import SwiftUI
struct GameView: View {
private let game: Game
init(_ game: Game) {
self.game = game
}
var body: some View {
// Use this for >= Xcode 26 and remove commentary in "NewWebView.swift"
// NewWebView(game.url)
// Use this for < Xcode 26
OldWebView(game.url)
.frame(
minWidth: 0,
maxWidth: .infinity,
minHeight: 0,
maxHeight: .infinity,
alignment: .topLeading
)
}
}

View File

@@ -0,0 +1,24 @@
//
// GameRow.swift
// Clemens Playground
//
// Created by Maximilian Roider on 14.11.25.
//
import SwiftUI
struct GameRow: View {
var game: Game
init(_ game: Game) {
self.game = game
}
var body: some View {
HStack {
Text(game.name)
Spacer()
}
}
}

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="24128" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="24063"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="LaunchScreen" translatesAutoresizingMaskIntoConstraints="NO" id="rh9-CZ-dE4">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
<color key="backgroundColor" red="0.01839839108" green="0.08432991058" blue="0.18471583720000001" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
<constraints>
<constraint firstItem="rh9-CZ-dE4" firstAttribute="height" secondItem="Ze5-6b-2t3" secondAttribute="height" id="H7o-Ru-YtH"/>
<constraint firstItem="rh9-CZ-dE4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="R50-QW-iA3"/>
<constraint firstItem="rh9-CZ-dE4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="mWc-VE-DKG"/>
<constraint firstItem="rh9-CZ-dE4" firstAttribute="width" secondItem="Ze5-6b-2t3" secondAttribute="width" id="sLf-L0-xAo"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchScreen" width="1024" height="1024"/>
</resources>
</document>

View File

@@ -0,0 +1,26 @@
//
// NewWebView.swift
// Clemens Playground
//
// Created by Maximilian Roider on 14.11.25.
//
import SwiftUI
import WebKit
//struct NewWebView: View {
//
// @State private var page = WebPage()
// private let url: String
//
// init(_ url: String) {
// self.url = url
// }
//
// var body: some View {
// WebView(page)
// .onAppear {
// page.load(URLRequest(url: URL(string: url)!))
// }
// }
//}

View File

@@ -0,0 +1,27 @@
//
// OldWebview.swift
// Clemens Playground
//
// Created by Maximilian Roider on 14.11.25.
//
import Foundation
import SwiftUI
import WebKit
struct OldWebView: UIViewRepresentable {
private let url: String
init(_ url: String) {
self.url = url
}
func makeUIView(context: Context) -> some UIView {
let webView = WKWebView()
webView.load(URLRequest(url: URL(string: url)!))
return webView
}
func updateUIView(_ uiView: UIViewType, context: Context) {}
}

View File

@@ -0,0 +1,12 @@
[
{
"id": 1001,
"name": "Game 1",
"url": "https://git.roider.tech/darksider110/Clemens-Webview-Playground"
},
{
"id": 1002,
"name": "Projekt-Git",
"url": "https://git.roider.tech/darksider110/Clemens-Webview-Playground"
},
]