Goal: ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ шаги для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ мобильного прилоТСния ΠΊΠ°Π·ΠΈΠ½ΠΎ Π² ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚Π΅.

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ с ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. Для этого ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ webview ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π³ΡƒΠ³Π»ΠΏΠ»Π΅ΠΉ ΠΈ иос ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π² Π΅Π³ΠΎ с прилоТСниями для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ· ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π° свой ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚.

Риски:

  • ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π² связи с Π²ΠΈΠ΄ΠΎΠΌ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
  • ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π²ΡŒΡŽ ΠΈΠ·-Π·Π° наличия Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь webview
  • ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° этапС Ρ€Π΅Π²ΡŒΡŽ Π² связи с использованиСм ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ googlepay\apple pay.

ВрСбования:

- Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с appsflyer

Для возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠ΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с utm ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ Π½Π° установку Π² ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ appsflyer sdk. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ мобильного прилоТСния ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ партнСрской ссылки. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ app.store/my.app?stag=xxx.

Π‘Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠ΅ΠΉ ΠΌΡ‹ Π½Π΅ смоТСм Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ affiliate tracking, поэтому Π·Π°Π΄Π°Ρ‡Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ Π²Π°ΠΆΠ½Π°.

- Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с firebase

Если Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ставит Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ мобильноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ»Π°Ρ‚ΡŒ Π΅ΠΌΡƒ push сообщСния. На ΡƒΡ€ΠΎΠ²Π½Π΅ мобильного прилоТСния ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ firebase, ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² firebase Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄, для дальнСйшСй ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΡƒΡˆΠ΅ΠΉ. Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ сСгмСнтации вСроятно понадобится Π΅Ρ‰Π΅ интСграция с onesignal.

- интСграция с Π°ΠΏΠΈ Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³Π° Π²Π΅Π± сайта

Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ nextcode Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ Π΄ΠΎ фактичСской рСгистрации, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π°ΠΏΠΈ нСкстода для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· appsflyer.

- интСграция ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° hot reload

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ прилоТСния Π² случаС возникновСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ прохоТдСния Ρ€Π΅Π²ΡŒΡŽ. Для этого Π΅ΡΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° hot reload, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΠΏΡ€ΠΈ нСобходимости ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ повСдСния прилоТСния.

Π’Π°ΠΆΠ½ΠΎ: это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с flutter ΠΊΠΎΠ΄ΠΎΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Ρ‹.

- рСализация кастомных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² управлСния

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² вСбвью Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ux, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ свайп Π²Π½ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π» страницу, свайп Π²Π»Π΅Π²ΠΎ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со стартовой ΠΈ Ρ‚.ΠΏ.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ с сайтом

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ прилоТСния ΠΈ сайта Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄Π°.

  • МнС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Π½ΡƒΡ‚Ρ€ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ рСгистрации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρƒ мСня ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€Π°)
  • МнС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ· Π±Ρ€Π°Π·ΡƒΠ΅Ρ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± устройствС для ΠΏΡƒΡˆΠ΅ΠΉ ΠΏΡ€ΠΈΡ†Π΅ΠΏΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΈΠ΄ ΠΈΠ³Ρ€ΠΎΠΊΠ° (Π±Π΅Π· этого onesignal ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° этот Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½))

РСализация Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ сцСнария Π½Π° Android:

import android.webkit.JavascriptInterface;
 @JavascriptInterface
    public void addEventListener(String event) {
        Toast.makeText(mContext, "Event PASSED: " + event, Toast.LENGTH_SHORT).show();
        Log.e("WebAppInterface", "Received event: " + event);

        // ΠŸΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠ° Π½Π° null Π°Π±ΠΎ undefined
        if (event == null || event.equals("undefined")) {
            Log.e("WebAppInterface", "Received null or undefined event");
            return;
        }

        try {
            // ΠŸΠ΅Ρ€Π΅Π²Ρ–Ρ€ΡΡ”ΠΌΠΎ, Ρ‡ΠΈ Π΄Π°Π½Ρ– Ρ” Π²Π°Π»Ρ–Π΄Π½ΠΈΠΌ JSON-рядком
            JSONObject eventObject = new JSONObject(event);

            if (eventObject.has("userId")) {
                String userId = eventObject.getString("userId");

                Log.e("WebAppInterface", "User ID: " + userId);

            } else {
                Log.e("WebAppInterface", "Event does not contain expected fields.");
            }
        } catch (JSONException e) {
            Log.e("WebAppInterface", "JSON parsing error: " + e.getMessage());
        } catch (Exception e) {
            Log.e("WebAppInterface", "Unexpected error: " + e.getMessage());
        }
    }
}

РСализация ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ со стороны Web

if (typeof Android == 'undefined') return;
  return Android.addEventListener(JSON.stringify({userId:"xxx"}))

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ· Π²Π΅Π± сайта ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Аналогичный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π΅ΡΡ‚ΡŒ ΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ со стороны сайта:

  • ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ userid Π² ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ
  • ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ affData ΠΈΠ· мобильной ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ
  • ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ fbMessageToken ΠΈΠ· мобильной ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ onesignal ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ Π² ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ)

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ customer.io ΠΈ Ρ‚.ΠΏ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ понадобятся Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Steps

  • рСгистрация Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π² ios\andorid, firebase, appsflyer, ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ
  • настройка cicd для мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ firebase app distribution)
  • интСграция с nextcode
  • публикация прилоТСния

Timelines

РСгистрация Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Π·Π°ΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄ΠΎ Π½Π΅Π΄Π΅Π»ΠΈ

Настройка cicd для мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ - осущСствляСтся дСвопсом вмСстС с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±ΠΈΠ»Π΄ Π°Π³Π΅Π½Ρ‚ для сборок Π½Π° иос ΠΈ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄. Π—Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄ΠΎ Π½Π΅Π΄Π΅Π»ΠΈ.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с nextcode - скорСС всСго растянСтся Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π΄ΠΎ мСсяца)