# प्रकाशित करना

> Gradle मॉड्यूल से प्रत्येक प्लेटफ़ॉर्म पर पैकेज और रन करना — चक्र का अंत।

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

# 12. प्रकाशित करना

> **आप क्या सीखेंगे:** चक्र को पूरा करना — प्रत्येक प्लेटफ़ॉर्म के लिए ऐप को पैकेज करना।
> **पूर्वापेक्षाएँ:** [अपने ऐप का परीक्षण करना](/docs/learn/testing-your-app).

## पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
वह एंट्री पॉइंट जिसे `Main` **classname द्वारा** इंस्टैंशिएट करता है (reflexão, बिना-args वाला कंस्ट्रक्टर) — वही
`core` चारों launchers पर चलता है। यह न्यूनतम और स्वयं-निहित `MainWindow` वही है जिसे प्रत्येक टारगेट पैकेज करता है।
जैसा है वैसा ही कंपाइल होता है।
```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      add(LAY_AUTO, new Label("Meu app CrossFly"));

      Button ola = new Button("Olá, mundo!");
      ola.onAction(c -> Hint.show("Rodando em todas as plataformas", 2000));
      add(LAY_AUTO, ola);
   }
}
```
> नीचे दिए गए स्निपेट **केवल मुख्य भाग** दिखाते हैं (जो `onShow()` के अंदर जाता है)। चलाने के लिए, उन्हें ऊपर दिए गए `MainWindow` ढाँचे में रखें।

## एक कोड, चार टारगेट
वही `core` सभी launchers पर चलता है:
| टारगेट | Build |
|---|---|
| 🖥️ Desktop | `gradlew :lwjgl3:run` (dev) / jar / इंस्टॉलर |
| 🤖 Android | `gradlew :android:installDebug` / `assembleRelease` (AAB) |
| 🍎 iOS | `gradlew :ios:launchIPhoneSimulator` / `.ipa` (macOS+Xcode) |
| 🌐 Web | `gradlew :web:webBundle` → स्थैतिक सामग्री |

## bootstrap क्या सुनिश्चित करता है
`Main` आपकी **`MainWindow` को *classname* द्वारा** इंस्टैंशिएट करता है (reflexão, बिना-args वाला कंस्ट्रक्टर) — सभी
टारगेट में वही। आइकन और assets (Roboto/Material फ़ॉन्ट bootstrap में लोड होते हैं) पैकेज के साथ जाते हैं।

## "प्रकाशन के लिए तैयार" चेकलिस्ट
- [ ] परीक्षित (अध्याय 11) और रिस्पॉन्सिव (अध्याय 10)।
- [ ] प्लेटफ़ॉर्म के अनुसार अनुपलब्ध सुविधाओं को संभाला गया (देखें [मैट्रिक्स](/docs/platforms/overview))।
- [ ] अनुमतियाँ: `AndroidManifest.xml` / `Info.plist`.
- [ ] हस्ताक्षर (Android keystore / iOS provisioning)।
- [ ] आइकन, *launch screen*, संस्करण।

## कोर्स का अंत — और अब?
आपने एक ऐसा ऐप बनाया जो **खुलता है, जोड़ता है, नेविगेट करता है, स्थायी रखता है, अनुकूलित होता है और परीक्षित है** — और उसे
पैकेज किया। यहाँ से:
- **"क्यों" को गहराई से समझें:** [`concepts/`](/docs/concepts).
- **बड़े पैमाने पर गुणवत्ता:** [`best-practices/`](/docs/best-practices).
- **विस्तृत प्रकाशन:** [`platforms/`](/docs/platforms).
- **विशिष्ट कार्य:** [`cookbook/`](/docs/cookbook) · [`ui/`](/docs/ui) · [`data-and-services/`](/docs/data-and-services).

## संक्षेप में
एक `core`, चार Gradle launchers; `MainWindow` *classname* द्वारा; प्रति प्लेटफ़ॉर्म release चेकलिस्ट।

## यह भी देखें
- [Build और वितरण](/docs/platforms/building-and-releasing) · कैननिकल स्रोत: अध्याय 4 §4.2
