Kembali ke Bukuloka Reader
edutech 2025

Bukuloka Reader for iOS

Product Engineer

Tersedia di:

Bukuloka Reader for iOS is a native application for accessing Bukuloka's digital book platform (bukuloka.com) from Apple devices. Bukuloka is a digital library and publishing marketplace focused on academic books: textbooks, scientific references, and monographs for Indonesian students and lecturers.

This application is built from scratch using SwiftUI, SwiftData, and Swift 6 strict concurrency, delivering a professional reading experience in the iOS ecosystem. Features include advanced PDF annotation (4 types with 16 colors), encrypted DRM protection, offline-first architecture, and comprehensive reading tools.

With Bukuloka's flexible subscription system (per book, per day, or bundled packages), iOS users can now access thousands of academic books at a much more affordable cost than physical books.

iOS Swift 6 SwiftUI SwiftData PDFKit URLSession Keychain async/await Clean Architecture Firebase Remote Config

Highlight Proyek

Advanced PDF annotation system with highlights, underlines, free-hand drawing, and sticky notes (4 types, 16 colors)

Encrypted DRM protection with AES-256 CBC — PDFs decrypted on-the-fly for reading

Offline-first architecture with SwiftData persistence and background download system

Clean Architecture with protocol-based dependency injection via AppContainer

Swift 6 strict concurrency with actor-based caching and proper isolation

Comprehensive reading experience with bookmarks, progress tracking, and chapter navigation

Multi-user data isolation for shared device environments (family, library)

Subscription management with duration-based access control and bundle support

Info Proyek

Role Product Engineer
Tahun 2025
Kategori edutech

Tech Stack

iOSSwift 6SwiftUISwiftDataPDFKitURLSessionKeychainasync/awaitClean ArchitectureFirebase Remote Config

Masalah → Solusi → Dampak

Masalah

Students and lecturers in Indonesia face challenges accessing academic books: physical books are expensive, availability is limited in stores, and campus libraries often run out of stock for popular references.

Existing e-book platforms mostly focus on fiction/popular books, while the demand for textbooks, scientific references, and monographs continues to grow among academics.

Bukuloka Reader's Android version already serves thousands of users, but the iOS segment — widely used by professionals and academics — remains unserved. Publishers also need DRM protection to prevent piracy.

Solusi

Built Bukuloka Reader for iOS as the native companion to the Android flagship app, bringing academic digital library access to the Apple ecosystem with an optimal reading experience using SwiftUI and Swift 6.

Implemented professional-grade reading features: complete annotation system (4 types with 16 customizable colors), encrypted DRM protection with AES-256 CBC, offline-first architecture with SwiftData, and background downloads for seamless content access.

Maintained full API compatibility with Android version, allowing users to seamlessly access their subscriptions, reading progress, and annotations from any device.

Dampak

  • Expands Bukuloka's reach to iOS users, increasing total addressable market for Indonesia's academic digital book platform
  • Students and lecturers can access textbooks and scientific references at subscription costs far more affordable than buying physical books
  • Professional reading experience with advanced annotation tools matching desktop PDF editors — perfect for academic study
  • Secure content distribution with encrypted DRM protecting publisher and author rights
  • True offline-first capability — downloaded books remain accessible without internet, ideal for studying anywhere
  • Flexible subscription model (per book/per day/package) can be accessed seamlessly from iOS or Android

Tantangan Engineering & Solusi

Hambatan teknis yang ditemui selama development dan keputusan arsitektur untuk mengatasinya.

Tantangan

PDF annotation with gesture-based creation and normalized coordinate system

Solusi

Implemented GestureCoordinator with mode-aware gesture routing (reading vs annotation modes). All annotations use normalized coordinates (0.0-1.0) via AnnotationBounds for cross-device compatibility. Built 4 annotation types (highlight, underline, drawing, sticky notes) with type discriminator pattern in SwiftData for polymorphic storage.

Tantangan

Secure PDF storage with on-the-fly decryption

Solusi

Built PDFEncryptionService using AES-256 CBC with keys fetched from Firebase Remote Config. Downloaded PDFs are encrypted immediately and stored in user-isolated directories. PDFDecryptionHelper decrypts to temporary files only during reading sessions, with automatic cleanup on view disappear.

Tantangan

Swift 6 strict concurrency compliance across networking and caching layers

Solusi

Designed actor-based CacheManager singleton with TTL support. Protocol methods called from actors marked nonisolated. Used nonisolated(unsafe) for thread-safe properties like FileManager. All ViewModels are @MainActor isolated with @Observable macro.

Tantangan

Protocol-based dependency injection without third-party frameworks

Solusi

Designed AppContainer pattern with factory methods for ViewModel creation, injected via SwiftUI Environment. Each feature module has its own factory method, enabling isolated testing and easy dependency swapping (e.g., SwiftData to CoreData).

Tantangan

Multi-user data isolation to support shared devices in academic environments

Solusi

All SwiftData entities include userId field with filtered queries. File storage uses user-isolated directories (users/{userId}/books/). Mappers handle DTO → Entity → Domain transformations with userId injection, ensuring complete data isolation across login sessions.

Tantangan

Background download with progress tracking and timeout detection

Solusi

Built DownloadManager (actor) coordinating DownloadService with URLSession background configuration. Implemented state machine (queued → downloading → encrypting → completed), slow connection detection after 15s, and auto-cancel for stuck downloads after 60s in queue.

Gambaran Arsitektur

The application follows Clean Architecture with clear layer separation. SwiftUI handles the presentation layer with @Observable ViewModels, domain layer contains pure Swift entities and use cases, and data layer manages API communication via URLSession, local persistence via SwiftData, and PDF rendering via PDFKit wrapper.

Presentation
SwiftUI Views@Observable ViewModelsDesign SystemPDF Reader
Domain
EntitiesUse CasesRepository Protocols
Data
URLSession APISwiftData StoreDTO MappersDownload Manager
Security
AES-256 EncryptionKeychain ServiceToken ManagerFirebase Remote Config

Screenshots

Tertarik kerja bareng?

Yuk ngobrol soal project selanjutnya.

Hubungi Saya