Developing a Mobile App for Religious Organizations
Religious organizations face unique technical challenges: multilingual support with RTL (Arabic, Hebrew), accurate rendering of sacred texts, prayer schedules, media library, and donations. Our team has 5 years of experience and has delivered over 30 projects in this niche. We know how to avoid common pitfalls: incorrect rendering of Arabic ligatures on older Android devices, off-by-one errors in the hijri calendar, or app rejection due to violation of Section 4.2 of the App Store Review Guidelines. We will assess your project and propose a solution promptly. Contact us for a consultation.
Key Technical Challenges We Solve
Texts and Typography
Sacred texts are not ordinary content. The Quran requires Arabic script with correct tashkeel (vowel marks), the Torah uses Hebrew with niqqud. RTL text on mobile: iOS UIKit uses NSAttributedString with NSParagraphStyle, directional attributes via NSMutableParagraphStyle.baseWritingDirection = .rightToLeft. In SwiftUI — environment(\.layoutDirection, .rightToLeft).
On Android: android:textDirection="rtl" or TextView.textDirection = TEXT_DIRECTION_RTL. For correct rendering of complex scripts — HarfBuzz (built into Android 5+) and ICU. The problem with Arabic ligatures on older Android devices: HarfBuzz pre-5.0 does not support all contextual letter forms. Targeting minSdkVersion 21+ solves most issues.
| Platform | Tool | Features |
|---|---|---|
| iOS | NSAttributedString + baseWritingDirection | Works with system fonts; SwiftUI via layoutDirection |
| Android | textDirection + HarfBuzz | Requires API 21+; can use ICU for calendars |
| Flutter | Directionality + TextDirection.rtl | Unified approach for both platforms |
Fonts: for Arabic — Amiri, Scheherazade New (SIL). For Hebrew — Frank Rühl Libre, Miriam. Bundled fonts instead of system fonts guarantee correct rendering across all devices.
Calculating Prayer Times
Prayer schedules are computed based on geolocation using astronomical algorithms (calculation methods: Muslim World League, ISNA, Karachi, MWL). Libraries: Adhan (Swift/Kotlin port — open source, good accuracy). Calculations run on the client without network — critical for offline. Islamic (hijri) calendar: iOS Calendar(identifier: .islamicCivil) or .islamicTabular. Android java.util.Calendar does not support hijri directly — need Android android.icu.util.IslamicCalendar (API 24+) or a library. Converting dates between Gregorian and hijri is a frequent source of off-by-one errors at boundary dates.
Hebrew calendar: iOS Calendar(identifier: .hebrew). Rosh Hashanah, Yom Kippur, Passover are computed relative to the luni-solar cycle. KosherJava (Android) is the most comprehensive library for computing Jewish dates and candle-lighting times.
Media Library: Sermons and Lectures
Sermons are audio/video content with the same requirements as a podcast player: background playback, lock screen controls, variable speed, offline download. On iOS: AVPlayer + AVAudioSession.category = .playback. On Android: MediaSessionCompat + ExoPlayer via MediaBrowserServiceCompat for a foreground service. Sermon catalog: series, tags (topic, speaker, date), full-text search. Elasticsearch with Arabic morphology support — arabic analyzer, Snowball stemmer for Arabic (available in Elasticsearch). For Russian-speaking communities — russian analyzer.
Live Streaming of Services
RTMP streaming (OBS / mobile encoder) → conversion to HLS via nginx-rtmp or AWS IVS → playback using AVPlayer (iOS) / ExoPlayer (Android). For small communities — YouTube Live embed in WKWebView as a simple solution. For private infrastructure — Ant Media Server as a self-hosted RTMP/HLS server. Embedded solutions are simpler but offer less control; Ant Media Server provides latency under 2 seconds.
| Streaming method | Latency | Complexity | Cost |
|---|---|---|---|
| YouTube Live | ~10 sec | Low | Free |
| Ant Media Server | <2 sec | Medium | Paid |
| AWS IVS | ~3 sec | High | Paid |
Donations and Financial Flows
Accept donations via Apple Pay / Google Pay: PKPaymentAuthorizationViewController on iOS, PaymentRequest API via Android Pay. Payment gateways: YooKassa (formerly Yandex.Kassa) — works well with religious non-profits and does not require complex verification for small collections. Stripe for international organizations. Our experience shows that using Apple Pay reduces abandonment by 20% compared to manual card entry forms. Important: Apple takes 30% from In-App Purchases, but direct payment SDKs (Apple Pay to an external gateway) do not fall under IAP fees when complying with App Store Review Guidelines 3.1.1.
How to Accept Donations Without Apple's Commission?
Use Apple Pay with an external gateway (YooKassa, Stripe) — this is not IAP. The user pays via Apple Pay, but the transaction is processed by your merchant, no Apple commission. For recurring donations, we set up subscription payments via the gateway's SDK. Comparison: external payment processing is 30% cheaper than using In-App Purchase.
Scheduled Notifications
Reminders for prayer, services, fasting — local notifications, not push. They work offline without a server. On iOS: UNCalendarNotificationTrigger with DateComponents — schedule for a week ahead when settings or geolocation change. On Android: AlarmManager.setExact (API 31+ requires SCHEDULE_EXACT_ALARM permission) or WorkManager with setInitialDelay. Limitation: iOS allows a maximum of 64 scheduled local notifications at once. For 5 daily prayers over 10 days = 50 notifications — within limits. When recalculating the schedule (user moves), cancel all previous and schedule new ones.
How to Set Up Local Notifications: Step-by-Step Guide
- Determine notification types (prayer, fast, holiday).
- Calculate dates and times on the device using geolocation and the selected calculation method.
- On iOS, create
UNNotificationContentwith title and body, useUNCalendarNotificationTrigger. - On Android, use
NotificationCompat.BuilderandAlarmManagerfor exact timing. - Schedule notifications for a week ahead; when updating the schedule, cancel all previous and create new ones.
What's Included in the Work
- Technical specification — detailed description of features, screens, and tech stack.
- Design — UI/UX mockups, RTL adaptation.
- Development — iOS (Swift 5.9+, SwiftUI/UIKit), Android (Kotlin, Jetpack Compose), or cross-platform (Flutter 3.x).
- Integration — payment gateway, streaming, calendars.
- Testing — unit tests, UI tests, real-device testing.
- Publishing — preparation and submission to App Store / Google Play, passing review.
- Support — 1 month of free technical support after launch.
Timeline
1–2 weeks for a basic app with schedules and media library. 1–3 months for a full-featured platform with live streaming, donations, and RTL support. Cost is calculated individually after requirement analysis. Order development and get a detailed plan. Contact us for a consultation.







