Mobile Developer | iOS & Android
Fresh Graduate mit intensiver Praxisausbildung und Leidenschaft für moderne App-Entwicklung
Als frisch ausgebildeter Mobile Developer mit 12-monatiger Intensivausbildung (2300 Stunden) entwickle ich iOS- und Android-Anwendungen mit modernen Architekturen. Meine Ausbildung beim Syntax Institut umfasste 4 Monate iOS und 4 Monate Android Development mit praktischen Projekten. Ich suche meinen Berufseinstieg als Junior Developer und bringe solide Kenntnisse in Swift, Kotlin, MVVM und modernen Frameworks mit.
Technologien und Frameworks, die ich täglich einsetze
Alle entwickelten Anwendungen im Überblick
Innovative iOS-App mit Gamification-Elementen, Echtzeit-Multiplayer und In-App-Purchases. Entwickelt mit SwiftUI und Firebase für skalierbare Performance.
End-to-End verschlüsselte Messaging-App mit Voice/Video-Calls, File-Sharing und Team-Collaboration Features. DSGVO-konform entwickelt.
Android Music-Streaming-Plattform mit offline Playback, personalisierte Playlists und KI-basierte Musikempfehlungen.
iOS-App für intelligentes Notizmanagement mit Cloud-Sync, Tags, und Markdown-Support. Komplettes UI/UX Design in Figma erstellt.
Spezialisierte Music-Streaming-App für Lo-Fi und Chill-Music. Innovative UI mit Fokus auf entspanntes Hörerlebnis.
IT-Fachkraft für App-Entwicklung (iOS & Android) – Syntax Institut
Sauberer, wartbarer und performanter Code ist meine Priorität
// Beispiel aus Lernprojekt: Clean Architecture Implementation // Demonstriert Verständnis von SOLID Principles und Dependency Injection protocol UserRepositoryProtocol { func fetchUser(id: String) async throws -> User func updateUser(_ user: User) async throws } class UserViewModel: ObservableObject { @Published private(set) var state: ViewState = .idle private let repository: UserRepositoryProtocol private var cancellables = Set<AnyCancellable>() init(repository: UserRepositoryProtocol = UserRepository()) { self.repository = repository setupBindings() } @MainActor func loadUser(id: String) { state = .loading Task { do { let user = try await repository.fetchUser(id: id) state = .loaded(user) } catch { state = .error(error) } } } }
// Beispiel aus Lernprojekt: Reactive Programming with Combine // Debounce, Fehlerbehandlung und Main-Thread-Delivery class SearchViewModel: ObservableObject { @Published var searchText = "" @Published private(set) var results: [SearchResult] = [] private let searchService: SearchService private var cancellables = Set<AnyCancellable>() init(searchService: SearchService) { self.searchService = searchService // Debounce search input and filter empty strings $searchText .debounce(for: .milliseconds(300), scheduler: DispatchQueue.main) .removeDuplicates() .filter { !$0.isEmpty } .flatMap { [weak self] query -> AnyPublisher<[SearchResult], Never> in guard let self = self else { return Just([]).eraseToAnyPublisher() } return self.searchService .search(query: query) .catch { _ in Just([]) } .eraseToAnyPublisher() } .receive(on: DispatchQueue.main) .assign(to: &$results) } }
// Beispiel aus Lernprojekt: Test-Driven Development // Unit-Tests für ViewModel-State und Repository-Interaktionen import XCTest @testable import MyApp class UserViewModelTests: XCTestCase { var sut: UserViewModel! var mockRepository: MockUserRepository! override func setUp() { super.setUp() mockRepository = MockUserRepository() sut = UserViewModel(repository: mockRepository) } func testLoadUserSuccess() async { // Given let expectedUser = User(id: "123", name: "Test User") mockRepository.userToReturn = expectedUser // When await sut.loadUser(id: "123") // Then switch sut.state { case .loaded(let user): XCTAssertEqual(user.id, expectedUser.id) XCTAssertEqual(user.name, expectedUser.name) default: XCTFail("Expected loaded state") } } }
// Beispiel aus Lernprojekt: Efficient List Rendering with Lazy Loading // Performance: Prefetching, Lazy-Stacks und bedingtes Laden struct OptimizedListView: View { @StateObject private var viewModel = ListViewModel() @State private var visibleRows = Set<Int>() var body: some View { ScrollView { LazyVStack(spacing: 0) { ForEach(viewModel.items.indices, id: \.self) { index in ItemRow(item: viewModel.items[index]) .onAppear { visibleRows.insert(index) // Prefetch next batch when approaching end if index == viewModel.items.count - 5 { Task { await viewModel.loadMoreItems() } } } .onDisappear { visibleRows.remove(index) } .task { // Load high-res image only when visible if visibleRows.contains(index) { await viewModel.loadHighResImage(for: index) } } } } } .scrollIndicators(.hidden) } }
Solide Grundlagen aus 2300 Praxisstunden – bereit, professionell zu wachsen
Nach meiner intensiven 12-monatigen Ausbildung mit 2300 Praxisstunden verfüge ich über solide Grundlagen in der Mobile-Entwicklung. Ich suche bewusst eine Junior-Position, um:
12-monatige Vollzeit-Weiterbildung (2300 Stunden) am Syntax Institut
• 2 Monate UI/UX Design
• 2 Monate Programmierung Grundlagen
• 4 Monate Android Development (Kotlin)
• 4 Monate iOS Development (Swift)
• Abschlussprojekte für beide Plattformen
• Selbststudium Objective-C für Legacy iOS Apps
• Vertiefung Mobile Security & Verschlüsselung
• Entwicklung eigener Portfolio-Projekte
• Vorbereitung auf Junior Developer Position
Offen für Berufseinstieg als Junior Mobile Developer