# RoboVM के साथ iOS / iPadOS

> RoboVM टूलचेन (AOT), IOSLauncher, Info.plist और WKWebView के संवेदनशील बिंदु।

Source: https://crossfly.dev/hi/docs/platforms/ios — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# iOS / iPadOS (RoboVM) 🍎

iOS लक्ष्य के लिए **macOS + Xcode** आवश्यक है। **RoboVM** टूलचेन AOT करता है (Java → नेटिव ARM कोड)।

## रन करना
```bash
gradlew :ios:launchIPhoneSimulator
```
`IOSLauncher` एप्लिकेशन बनाता है: `new IOSApplication(new Main(true, getCommandline()), configuration)`।
`Device.platform` `IPHONE` या `IPAD` होगा।

## `Info.plist` — अनुमतियाँ और मेटाडेटा
Android (रनटाइम अनुमति) के विपरीत, iOS पर **उपयोग कुंजियाँ `Info.plist` में जाती हैं**:
- **कैमरा**, **स्थान**, **Bluetooth**, **माइक्रोफ़ोन** के उपयोग विवरण (अनिवार्य, अन्यथा
  ऐप अस्वीकृत हो जाता है);
- आइकन और *launch screen*।

## ⚠️ संवेदनशील बिंदु
- **`WKWebView`**: `evaluateJavaScript` **प्रतिबंधित** है — `WebContainer` का JS↔Java ब्रिज
  Android/डेस्कटॉप की तुलना में अधिक सीमित है।
- **Apple डेवलपर खाता** + *provisioning profile* **वास्तविक डिवाइस** पर चलाने के लिए आवश्यक हैं
  (सिम्युलेटर को इसकी आवश्यकता नहीं)।
- AOT बिल्ड **धीमा** है — [डेस्कटॉप](/docs/platforms/desktop-lwjgl3) पर विकसित करने और iOS पर केवल
  मान्य करने का एक और कारण।

## सर्वोत्तम अभ्यास
- सबमिट करने से पहले `Info.plist` में **सभी** उपयोग कुंजियाँ भरें (इसी कारण अस्वीकृति सामान्य है)।
- **सिम्युलेटर** पर जल्दी परीक्षण करें; वास्तविक डिवाइस को अंतिम मान्यता (provisioning) के लिए छोड़ दें।

## सामान्य त्रुटियाँ
- `Info.plist` में कोई उपयोग कुंजी छूट जाना (सुविधा एक्सेस करते समय क्रैश, या App Store पर अस्वीकृति)।
- `WKWebView` में पूर्ण `evaluateJavaScript` मान लेना (यह प्रतिबंधित है)।

## यह भी देखें
- [बिल्ड और वितरण](/docs/platforms/building-and-releasing)
